@cdot65/prisma-airs-cli 2.11.0 → 3.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 (388) hide show
  1. package/README.md +27 -169
  2. package/dist/chunk-JXHYQFEK.js +1752 -0
  3. package/dist/cli/index.js +6511 -4
  4. package/dist/dlp-5XKWITZX.js +710 -0
  5. package/dist/index.d.ts +1396 -26
  6. package/dist/index.js +40 -37
  7. package/package.json +22 -25
  8. package/dist/airs/dlp/data-filtering-profiles.d.ts +0 -10
  9. package/dist/airs/dlp/data-filtering-profiles.d.ts.map +0 -1
  10. package/dist/airs/dlp/data-filtering-profiles.js +0 -17
  11. package/dist/airs/dlp/data-filtering-profiles.js.map +0 -1
  12. package/dist/airs/dlp/data-patterns.d.ts +0 -13
  13. package/dist/airs/dlp/data-patterns.d.ts.map +0 -1
  14. package/dist/airs/dlp/data-patterns.js +0 -26
  15. package/dist/airs/dlp/data-patterns.js.map +0 -1
  16. package/dist/airs/dlp/data-profiles.d.ts +0 -12
  17. package/dist/airs/dlp/data-profiles.d.ts.map +0 -1
  18. package/dist/airs/dlp/data-profiles.js +0 -23
  19. package/dist/airs/dlp/data-profiles.js.map +0 -1
  20. package/dist/airs/dlp/dictionaries.d.ts +0 -13
  21. package/dist/airs/dlp/dictionaries.d.ts.map +0 -1
  22. package/dist/airs/dlp/dictionaries.js +0 -34
  23. package/dist/airs/dlp/dictionaries.js.map +0 -1
  24. package/dist/airs/dlp/index.d.ts +0 -6
  25. package/dist/airs/dlp/index.d.ts.map +0 -1
  26. package/dist/airs/dlp/index.js +0 -6
  27. package/dist/airs/dlp/index.js.map +0 -1
  28. package/dist/airs/dlp/types.d.ts +0 -36
  29. package/dist/airs/dlp/types.d.ts.map +0 -1
  30. package/dist/airs/dlp/types.js +0 -2
  31. package/dist/airs/dlp/types.js.map +0 -1
  32. package/dist/airs/management.d.ts +0 -68
  33. package/dist/airs/management.d.ts.map +0 -1
  34. package/dist/airs/management.js +0 -317
  35. package/dist/airs/management.js.map +0 -1
  36. package/dist/airs/modelsecurity.d.ts +0 -74
  37. package/dist/airs/modelsecurity.d.ts.map +0 -1
  38. package/dist/airs/modelsecurity.js +0 -337
  39. package/dist/airs/modelsecurity.js.map +0 -1
  40. package/dist/airs/promptsets.d.ts +0 -50
  41. package/dist/airs/promptsets.d.ts.map +0 -1
  42. package/dist/airs/promptsets.js +0 -120
  43. package/dist/airs/promptsets.js.map +0 -1
  44. package/dist/airs/redteam.d.ts +0 -74
  45. package/dist/airs/redteam.d.ts.map +0 -1
  46. package/dist/airs/redteam.js +0 -406
  47. package/dist/airs/redteam.js.map +0 -1
  48. package/dist/airs/runtime.d.ts +0 -27
  49. package/dist/airs/runtime.d.ts.map +0 -1
  50. package/dist/airs/runtime.js +0 -158
  51. package/dist/airs/runtime.js.map +0 -1
  52. package/dist/airs/scanner.d.ts +0 -36
  53. package/dist/airs/scanner.d.ts.map +0 -1
  54. package/dist/airs/scanner.js +0 -101
  55. package/dist/airs/scanner.js.map +0 -1
  56. package/dist/airs/types.d.ts +0 -780
  57. package/dist/airs/types.d.ts.map +0 -1
  58. package/dist/airs/types.js +0 -6
  59. package/dist/airs/types.js.map +0 -1
  60. package/dist/audit/evaluator.d.ts +0 -17
  61. package/dist/audit/evaluator.d.ts.map +0 -1
  62. package/dist/audit/evaluator.js +0 -82
  63. package/dist/audit/evaluator.js.map +0 -1
  64. package/dist/audit/report.d.ts +0 -38
  65. package/dist/audit/report.d.ts.map +0 -1
  66. package/dist/audit/report.js +0 -141
  67. package/dist/audit/report.js.map +0 -1
  68. package/dist/audit/runner.d.ts +0 -18
  69. package/dist/audit/runner.d.ts.map +0 -1
  70. package/dist/audit/runner.js +0 -60
  71. package/dist/audit/runner.js.map +0 -1
  72. package/dist/audit/types.d.ts +0 -53
  73. package/dist/audit/types.d.ts.map +0 -1
  74. package/dist/audit/types.js +0 -5
  75. package/dist/audit/types.js.map +0 -1
  76. package/dist/backup/index.d.ts +0 -3
  77. package/dist/backup/index.d.ts.map +0 -1
  78. package/dist/backup/index.js +0 -3
  79. package/dist/backup/index.js.map +0 -1
  80. package/dist/backup/io.d.ts +0 -15
  81. package/dist/backup/io.d.ts.map +0 -1
  82. package/dist/backup/io.js +0 -67
  83. package/dist/backup/io.js.map +0 -1
  84. package/dist/backup/types.d.ts +0 -25
  85. package/dist/backup/types.d.ts.map +0 -1
  86. package/dist/backup/types.js +0 -2
  87. package/dist/backup/types.js.map +0 -1
  88. package/dist/cli/builders/profile-builder.d.ts +0 -45
  89. package/dist/cli/builders/profile-builder.d.ts.map +0 -1
  90. package/dist/cli/builders/profile-builder.js +0 -308
  91. package/dist/cli/builders/profile-builder.js.map +0 -1
  92. package/dist/cli/bulk-scan-state.d.ts +0 -15
  93. package/dist/cli/bulk-scan-state.d.ts.map +0 -1
  94. package/dist/cli/bulk-scan-state.js +0 -20
  95. package/dist/cli/bulk-scan-state.js.map +0 -1
  96. package/dist/cli/commands/audit.d.ts +0 -4
  97. package/dist/cli/commands/audit.d.ts.map +0 -1
  98. package/dist/cli/commands/audit.js +0 -113
  99. package/dist/cli/commands/audit.js.map +0 -1
  100. package/dist/cli/commands/backup.d.ts +0 -10
  101. package/dist/cli/commands/backup.d.ts.map +0 -1
  102. package/dist/cli/commands/backup.js +0 -102
  103. package/dist/cli/commands/backup.js.map +0 -1
  104. package/dist/cli/commands/dlp/build-body.d.ts +0 -28
  105. package/dist/cli/commands/dlp/build-body.d.ts.map +0 -1
  106. package/dist/cli/commands/dlp/build-body.js +0 -174
  107. package/dist/cli/commands/dlp/build-body.js.map +0 -1
  108. package/dist/cli/commands/dlp/dictionaries.d.ts +0 -3
  109. package/dist/cli/commands/dlp/dictionaries.d.ts.map +0 -1
  110. package/dist/cli/commands/dlp/dictionaries.js +0 -167
  111. package/dist/cli/commands/dlp/dictionaries.js.map +0 -1
  112. package/dist/cli/commands/dlp/filtering-profiles.d.ts +0 -3
  113. package/dist/cli/commands/dlp/filtering-profiles.d.ts.map +0 -1
  114. package/dist/cli/commands/dlp/filtering-profiles.js +0 -82
  115. package/dist/cli/commands/dlp/filtering-profiles.js.map +0 -1
  116. package/dist/cli/commands/dlp/generate.d.ts +0 -3
  117. package/dist/cli/commands/dlp/generate.d.ts.map +0 -1
  118. package/dist/cli/commands/dlp/generate.js +0 -51
  119. package/dist/cli/commands/dlp/generate.js.map +0 -1
  120. package/dist/cli/commands/dlp/index.d.ts +0 -3
  121. package/dist/cli/commands/dlp/index.d.ts.map +0 -1
  122. package/dist/cli/commands/dlp/index.js +0 -16
  123. package/dist/cli/commands/dlp/index.js.map +0 -1
  124. package/dist/cli/commands/dlp/patch.d.ts +0 -15
  125. package/dist/cli/commands/dlp/patch.d.ts.map +0 -1
  126. package/dist/cli/commands/dlp/patch.js +0 -70
  127. package/dist/cli/commands/dlp/patch.js.map +0 -1
  128. package/dist/cli/commands/dlp/patterns.d.ts +0 -3
  129. package/dist/cli/commands/dlp/patterns.d.ts.map +0 -1
  130. package/dist/cli/commands/dlp/patterns.js +0 -127
  131. package/dist/cli/commands/dlp/patterns.js.map +0 -1
  132. package/dist/cli/commands/dlp/profiles.d.ts +0 -3
  133. package/dist/cli/commands/dlp/profiles.d.ts.map +0 -1
  134. package/dist/cli/commands/dlp/profiles.js +0 -126
  135. package/dist/cli/commands/dlp/profiles.js.map +0 -1
  136. package/dist/cli/commands/modelsecurity.d.ts +0 -4
  137. package/dist/cli/commands/modelsecurity.d.ts.map +0 -1
  138. package/dist/cli/commands/modelsecurity.js +0 -605
  139. package/dist/cli/commands/modelsecurity.js.map +0 -1
  140. package/dist/cli/commands/profiles-cleanup.d.ts +0 -26
  141. package/dist/cli/commands/profiles-cleanup.d.ts.map +0 -1
  142. package/dist/cli/commands/profiles-cleanup.js +0 -113
  143. package/dist/cli/commands/profiles-cleanup.js.map +0 -1
  144. package/dist/cli/commands/redteam.d.ts +0 -12
  145. package/dist/cli/commands/redteam.d.ts.map +0 -1
  146. package/dist/cli/commands/redteam.js +0 -1071
  147. package/dist/cli/commands/redteam.js.map +0 -1
  148. package/dist/cli/commands/restore.d.ts +0 -11
  149. package/dist/cli/commands/restore.d.ts.map +0 -1
  150. package/dist/cli/commands/restore.js +0 -109
  151. package/dist/cli/commands/restore.js.map +0 -1
  152. package/dist/cli/commands/runtime.d.ts +0 -6
  153. package/dist/cli/commands/runtime.d.ts.map +0 -1
  154. package/dist/cli/commands/runtime.js +0 -822
  155. package/dist/cli/commands/runtime.js.map +0 -1
  156. package/dist/cli/commands/topics-apply.d.ts +0 -16
  157. package/dist/cli/commands/topics-apply.d.ts.map +0 -1
  158. package/dist/cli/commands/topics-apply.js +0 -69
  159. package/dist/cli/commands/topics-apply.js.map +0 -1
  160. package/dist/cli/commands/topics-create.d.ts +0 -16
  161. package/dist/cli/commands/topics-create.d.ts.map +0 -1
  162. package/dist/cli/commands/topics-create.js +0 -71
  163. package/dist/cli/commands/topics-create.js.map +0 -1
  164. package/dist/cli/commands/topics-eval.d.ts +0 -7
  165. package/dist/cli/commands/topics-eval.d.ts.map +0 -1
  166. package/dist/cli/commands/topics-eval.js +0 -65
  167. package/dist/cli/commands/topics-eval.js.map +0 -1
  168. package/dist/cli/commands/topics-revert.d.ts +0 -9
  169. package/dist/cli/commands/topics-revert.d.ts.map +0 -1
  170. package/dist/cli/commands/topics-revert.js +0 -52
  171. package/dist/cli/commands/topics-revert.js.map +0 -1
  172. package/dist/cli/commands/topics-sample.d.ts +0 -4
  173. package/dist/cli/commands/topics-sample.d.ts.map +0 -1
  174. package/dist/cli/commands/topics-sample.js +0 -27
  175. package/dist/cli/commands/topics-sample.js.map +0 -1
  176. package/dist/cli/debug-logger.d.ts +0 -11
  177. package/dist/cli/debug-logger.d.ts.map +0 -1
  178. package/dist/cli/debug-logger.js +0 -137
  179. package/dist/cli/debug-logger.js.map +0 -1
  180. package/dist/cli/index.d.ts +0 -3
  181. package/dist/cli/index.d.ts.map +0 -1
  182. package/dist/cli/index.js.map +0 -1
  183. package/dist/cli/parse-input.d.ts +0 -9
  184. package/dist/cli/parse-input.d.ts.map +0 -1
  185. package/dist/cli/parse-input.js +0 -109
  186. package/dist/cli/parse-input.js.map +0 -1
  187. package/dist/cli/program.d.ts +0 -3
  188. package/dist/cli/program.d.ts.map +0 -1
  189. package/dist/cli/program.js +0 -32
  190. package/dist/cli/program.js.map +0 -1
  191. package/dist/cli/renderer/audit.d.ts +0 -11
  192. package/dist/cli/renderer/audit.d.ts.map +0 -1
  193. package/dist/cli/renderer/audit.js +0 -58
  194. package/dist/cli/renderer/audit.js.map +0 -1
  195. package/dist/cli/renderer/backup.d.ts +0 -8
  196. package/dist/cli/renderer/backup.d.ts.map +0 -1
  197. package/dist/cli/renderer/backup.js +0 -50
  198. package/dist/cli/renderer/backup.js.map +0 -1
  199. package/dist/cli/renderer/common.d.ts +0 -14
  200. package/dist/cli/renderer/common.d.ts.map +0 -1
  201. package/dist/cli/renderer/common.js +0 -50
  202. package/dist/cli/renderer/common.js.map +0 -1
  203. package/dist/cli/renderer/dlp.d.ts +0 -34
  204. package/dist/cli/renderer/dlp.d.ts.map +0 -1
  205. package/dist/cli/renderer/dlp.js +0 -348
  206. package/dist/cli/renderer/dlp.js.map +0 -1
  207. package/dist/cli/renderer/eval.d.ts +0 -30
  208. package/dist/cli/renderer/eval.d.ts.map +0 -1
  209. package/dist/cli/renderer/eval.js +0 -61
  210. package/dist/cli/renderer/eval.js.map +0 -1
  211. package/dist/cli/renderer/index.d.ts +0 -9
  212. package/dist/cli/renderer/index.d.ts.map +0 -1
  213. package/dist/cli/renderer/index.js +0 -9
  214. package/dist/cli/renderer/index.js.map +0 -1
  215. package/dist/cli/renderer/modelsecurity.d.ts +0 -35
  216. package/dist/cli/renderer/modelsecurity.d.ts.map +0 -1
  217. package/dist/cli/renderer/modelsecurity.js +0 -339
  218. package/dist/cli/renderer/modelsecurity.js.map +0 -1
  219. package/dist/cli/renderer/redteam.d.ts +0 -216
  220. package/dist/cli/renderer/redteam.d.ts.map +0 -1
  221. package/dist/cli/renderer/redteam.js +0 -471
  222. package/dist/cli/renderer/redteam.js.map +0 -1
  223. package/dist/cli/renderer/runtime.d.ts +0 -107
  224. package/dist/cli/renderer/runtime.d.ts.map +0 -1
  225. package/dist/cli/renderer/runtime.js +0 -359
  226. package/dist/cli/renderer/runtime.js.map +0 -1
  227. package/dist/config/loader.d.ts +0 -3
  228. package/dist/config/loader.d.ts.map +0 -1
  229. package/dist/config/loader.js +0 -59
  230. package/dist/config/loader.js.map +0 -1
  231. package/dist/config/schema.d.ts +0 -63
  232. package/dist/config/schema.d.ts.map +0 -1
  233. package/dist/config/schema.js +0 -38
  234. package/dist/config/schema.js.map +0 -1
  235. package/dist/core/constraints.d.ts +0 -19
  236. package/dist/core/constraints.d.ts.map +0 -1
  237. package/dist/core/constraints.js +0 -82
  238. package/dist/core/constraints.js.map +0 -1
  239. package/dist/core/metrics.d.ts +0 -13
  240. package/dist/core/metrics.d.ts.map +0 -1
  241. package/dist/core/metrics.js +0 -73
  242. package/dist/core/metrics.js.map +0 -1
  243. package/dist/core/prompt-loader.d.ts +0 -14
  244. package/dist/core/prompt-loader.d.ts.map +0 -1
  245. package/dist/core/prompt-loader.js +0 -122
  246. package/dist/core/prompt-loader.js.map +0 -1
  247. package/dist/core/types.d.ts +0 -96
  248. package/dist/core/types.d.ts.map +0 -1
  249. package/dist/core/types.js +0 -5
  250. package/dist/core/types.js.map +0 -1
  251. package/dist/dlp/embed/docx.d.ts +0 -3
  252. package/dist/dlp/embed/docx.d.ts.map +0 -1
  253. package/dist/dlp/embed/docx.js +0 -54
  254. package/dist/dlp/embed/docx.js.map +0 -1
  255. package/dist/dlp/embed/index.d.ts +0 -6
  256. package/dist/dlp/embed/index.d.ts.map +0 -1
  257. package/dist/dlp/embed/index.js +0 -20
  258. package/dist/dlp/embed/index.js.map +0 -1
  259. package/dist/dlp/embed/jpeg.d.ts +0 -5
  260. package/dist/dlp/embed/jpeg.d.ts.map +0 -1
  261. package/dist/dlp/embed/jpeg.js +0 -60
  262. package/dist/dlp/embed/jpeg.js.map +0 -1
  263. package/dist/dlp/embed/pdf.d.ts +0 -7
  264. package/dist/dlp/embed/pdf.d.ts.map +0 -1
  265. package/dist/dlp/embed/pdf.js +0 -92
  266. package/dist/dlp/embed/pdf.js.map +0 -1
  267. package/dist/dlp/embed/png-chunks.d.ts +0 -12
  268. package/dist/dlp/embed/png-chunks.d.ts.map +0 -1
  269. package/dist/dlp/embed/png-chunks.js +0 -85
  270. package/dist/dlp/embed/png-chunks.js.map +0 -1
  271. package/dist/dlp/embed/png.d.ts +0 -5
  272. package/dist/dlp/embed/png.d.ts.map +0 -1
  273. package/dist/dlp/embed/png.js +0 -68
  274. package/dist/dlp/embed/png.js.map +0 -1
  275. package/dist/dlp/embed/svg.d.ts +0 -3
  276. package/dist/dlp/embed/svg.d.ts.map +0 -1
  277. package/dist/dlp/embed/svg.js +0 -28
  278. package/dist/dlp/embed/svg.js.map +0 -1
  279. package/dist/dlp/embed/zip.d.ts +0 -3
  280. package/dist/dlp/embed/zip.d.ts.map +0 -1
  281. package/dist/dlp/embed/zip.js +0 -25
  282. package/dist/dlp/embed/zip.js.map +0 -1
  283. package/dist/dlp/generate/docx.d.ts +0 -3
  284. package/dist/dlp/generate/docx.d.ts.map +0 -1
  285. package/dist/dlp/generate/docx.js +0 -24
  286. package/dist/dlp/generate/docx.js.map +0 -1
  287. package/dist/dlp/generate/index.d.ts +0 -5
  288. package/dist/dlp/generate/index.d.ts.map +0 -1
  289. package/dist/dlp/generate/index.js +0 -21
  290. package/dist/dlp/generate/index.js.map +0 -1
  291. package/dist/dlp/generate/jpeg.d.ts +0 -3
  292. package/dist/dlp/generate/jpeg.d.ts.map +0 -1
  293. package/dist/dlp/generate/jpeg.js +0 -8
  294. package/dist/dlp/generate/jpeg.js.map +0 -1
  295. package/dist/dlp/generate/pdf.d.ts +0 -3
  296. package/dist/dlp/generate/pdf.d.ts.map +0 -1
  297. package/dist/dlp/generate/pdf.js +0 -19
  298. package/dist/dlp/generate/pdf.js.map +0 -1
  299. package/dist/dlp/generate/png.d.ts +0 -3
  300. package/dist/dlp/generate/png.d.ts.map +0 -1
  301. package/dist/dlp/generate/png.js +0 -8
  302. package/dist/dlp/generate/png.js.map +0 -1
  303. package/dist/dlp/generate/raster.d.ts +0 -9
  304. package/dist/dlp/generate/raster.d.ts.map +0 -1
  305. package/dist/dlp/generate/raster.js +0 -20
  306. package/dist/dlp/generate/raster.js.map +0 -1
  307. package/dist/dlp/generate/svg.d.ts +0 -3
  308. package/dist/dlp/generate/svg.d.ts.map +0 -1
  309. package/dist/dlp/generate/svg.js +0 -17
  310. package/dist/dlp/generate/svg.js.map +0 -1
  311. package/dist/dlp/index.d.ts +0 -15
  312. package/dist/dlp/index.d.ts.map +0 -1
  313. package/dist/dlp/index.js +0 -54
  314. package/dist/dlp/index.js.map +0 -1
  315. package/dist/dlp/lorem.d.ts +0 -3
  316. package/dist/dlp/lorem.d.ts.map +0 -1
  317. package/dist/dlp/lorem.js +0 -65
  318. package/dist/dlp/lorem.js.map +0 -1
  319. package/dist/dlp/manifest.d.ts +0 -11
  320. package/dist/dlp/manifest.d.ts.map +0 -1
  321. package/dist/dlp/manifest.js +0 -14
  322. package/dist/dlp/manifest.js.map +0 -1
  323. package/dist/dlp/payload.d.ts +0 -6
  324. package/dist/dlp/payload.d.ts.map +0 -1
  325. package/dist/dlp/payload.js +0 -62
  326. package/dist/dlp/payload.js.map +0 -1
  327. package/dist/dlp/rng.d.ts +0 -9
  328. package/dist/dlp/rng.d.ts.map +0 -1
  329. package/dist/dlp/rng.js +0 -28
  330. package/dist/dlp/rng.js.map +0 -1
  331. package/dist/dlp/types.d.ts +0 -26
  332. package/dist/dlp/types.d.ts.map +0 -1
  333. package/dist/dlp/types.js +0 -2
  334. package/dist/dlp/types.js.map +0 -1
  335. package/dist/index.d.ts.map +0 -1
  336. package/dist/index.js.map +0 -1
  337. package/dist/llm/prompts/analyze-results.d.ts +0 -3
  338. package/dist/llm/prompts/analyze-results.d.ts.map +0 -1
  339. package/dist/llm/prompts/analyze-results.js +0 -52
  340. package/dist/llm/prompts/analyze-results.js.map +0 -1
  341. package/dist/llm/prompts/generate-companion.d.ts +0 -3
  342. package/dist/llm/prompts/generate-companion.d.ts.map +0 -1
  343. package/dist/llm/prompts/generate-companion.js +0 -42
  344. package/dist/llm/prompts/generate-companion.js.map +0 -1
  345. package/dist/llm/prompts/generate-tests.d.ts +0 -3
  346. package/dist/llm/prompts/generate-tests.d.ts.map +0 -1
  347. package/dist/llm/prompts/generate-tests.js +0 -46
  348. package/dist/llm/prompts/generate-tests.js.map +0 -1
  349. package/dist/llm/prompts/generate-topic.d.ts +0 -4
  350. package/dist/llm/prompts/generate-topic.d.ts.map +0 -1
  351. package/dist/llm/prompts/generate-topic.js +0 -41
  352. package/dist/llm/prompts/generate-topic.js.map +0 -1
  353. package/dist/llm/prompts/improve-topic.d.ts +0 -3
  354. package/dist/llm/prompts/improve-topic.d.ts.map +0 -1
  355. package/dist/llm/prompts/improve-topic.js +0 -77
  356. package/dist/llm/prompts/improve-topic.js.map +0 -1
  357. package/dist/llm/prompts/simplify-topic.d.ts +0 -3
  358. package/dist/llm/prompts/simplify-topic.d.ts.map +0 -1
  359. package/dist/llm/prompts/simplify-topic.js +0 -50
  360. package/dist/llm/prompts/simplify-topic.js.map +0 -1
  361. package/dist/llm/provider.d.ts +0 -21
  362. package/dist/llm/provider.d.ts.map +0 -1
  363. package/dist/llm/provider.js +0 -76
  364. package/dist/llm/provider.js.map +0 -1
  365. package/dist/llm/schemas.d.ts +0 -97
  366. package/dist/llm/schemas.d.ts.map +0 -1
  367. package/dist/llm/schemas.js +0 -24
  368. package/dist/llm/schemas.js.map +0 -1
  369. package/dist/llm/service.d.ts +0 -34
  370. package/dist/llm/service.d.ts.map +0 -1
  371. package/dist/llm/service.js +0 -268
  372. package/dist/llm/service.js.map +0 -1
  373. package/dist/llm/types.d.ts +0 -18
  374. package/dist/llm/types.d.ts.map +0 -1
  375. package/dist/llm/types.js +0 -2
  376. package/dist/llm/types.js.map +0 -1
  377. package/dist/report/html.d.ts +0 -6
  378. package/dist/report/html.d.ts.map +0 -1
  379. package/dist/report/html.js +0 -200
  380. package/dist/report/html.js.map +0 -1
  381. package/dist/report/json.d.ts +0 -11
  382. package/dist/report/json.d.ts.map +0 -1
  383. package/dist/report/json.js +0 -74
  384. package/dist/report/json.js.map +0 -1
  385. package/dist/report/types.d.ts +0 -58
  386. package/dist/report/types.d.ts.map +0 -1
  387. package/dist/report/types.js +0 -5
  388. package/dist/report/types.js.map +0 -1
@@ -1,82 +0,0 @@
1
- export const MAX_NAME_LENGTH = 100;
2
- export const MAX_DESCRIPTION_LENGTH = 250;
3
- export const MAX_EXAMPLE_LENGTH = 250;
4
- export const MAX_EXAMPLES = 5;
5
- export const MIN_EXAMPLES = 2;
6
- export const MAX_COMBINED_LENGTH = 1000;
7
- /** UTF-8 byte length — AIRS API enforces limits in bytes, not JS characters. */
8
- export function byteLen(s) {
9
- return Buffer.byteLength(s, 'utf8');
10
- }
11
- export function validateName(name) {
12
- const errors = [];
13
- if (!name || name.length === 0) {
14
- errors.push({ field: 'name', message: 'Name is required' });
15
- }
16
- else if (byteLen(name) > MAX_NAME_LENGTH) {
17
- errors.push({ field: 'name', message: `Name must be at most ${MAX_NAME_LENGTH} bytes` });
18
- }
19
- return errors;
20
- }
21
- export function validateDescription(description) {
22
- const errors = [];
23
- if (!description || description.length === 0) {
24
- errors.push({ field: 'description', message: 'Description is required' });
25
- }
26
- else if (byteLen(description) > MAX_DESCRIPTION_LENGTH) {
27
- errors.push({
28
- field: 'description',
29
- message: `Description must be at most ${MAX_DESCRIPTION_LENGTH} bytes`,
30
- });
31
- }
32
- return errors;
33
- }
34
- export function validateExample(example, index) {
35
- const errors = [];
36
- if (!example || example.length === 0) {
37
- errors.push({ field: `examples[${index}]`, message: `Example ${index} is required` });
38
- }
39
- else if (byteLen(example) > MAX_EXAMPLE_LENGTH) {
40
- errors.push({
41
- field: `examples[${index}]`,
42
- message: `Example ${index} must be at most ${MAX_EXAMPLE_LENGTH} bytes`,
43
- });
44
- }
45
- return errors;
46
- }
47
- export function validateExamples(examples) {
48
- const errors = [];
49
- if (examples.length < MIN_EXAMPLES) {
50
- errors.push({
51
- field: 'examples',
52
- message: `At least ${MIN_EXAMPLES} examples required`,
53
- });
54
- }
55
- if (examples.length > MAX_EXAMPLES) {
56
- errors.push({
57
- field: 'examples',
58
- message: `At most ${MAX_EXAMPLES} examples allowed`,
59
- });
60
- }
61
- for (let i = 0; i < examples.length; i++) {
62
- errors.push(...validateExample(examples[i], i));
63
- }
64
- return errors;
65
- }
66
- export function validateTopic(topic) {
67
- const errors = [];
68
- errors.push(...validateName(topic.name));
69
- errors.push(...validateDescription(topic.description));
70
- errors.push(...validateExamples(topic.examples));
71
- const combined = byteLen(topic.name) +
72
- byteLen(topic.description) +
73
- topic.examples.reduce((sum, ex) => sum + byteLen(ex), 0);
74
- if (combined > MAX_COMBINED_LENGTH) {
75
- errors.push({
76
- field: 'topic',
77
- message: `Combined length (${combined}) exceeds ${MAX_COMBINED_LENGTH} bytes`,
78
- });
79
- }
80
- return errors;
81
- }
82
- //# sourceMappingURL=constraints.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraints.js","sourceRoot":"","sources":["../../src/core/constraints.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import type { CategoryBreakdown, EfficacyMetrics, TestResult } from './types.js';
2
- /**
3
- * Classify test results into TP/TN/FP/FN and compute efficacy metrics.
4
- *
5
- * @param results - Scan results paired with their expected outcomes.
6
- * @returns Confusion matrix counts, rates (TPR, TNR, accuracy, coverage, F1),
7
- * and regression failure count. Division-by-zero yields 0.
8
- * Coverage = min(TPR, TNR) — the loop's stop condition target.
9
- */
10
- export declare function computeMetrics(results: TestResult[]): EfficacyMetrics;
11
- /** Compute per-category error breakdown from test results. Sorted by error rate descending. */
12
- export declare function computeCategoryBreakdown(results: TestResult[]): CategoryBreakdown[];
13
- //# sourceMappingURL=metrics.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/core/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjF;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,eAAe,CA0CrE;AAED,+FAA+F;AAC/F,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,iBAAiB,EAAE,CAqBnF"}
@@ -1,73 +0,0 @@
1
- /**
2
- * Classify test results into TP/TN/FP/FN and compute efficacy metrics.
3
- *
4
- * @param results - Scan results paired with their expected outcomes.
5
- * @returns Confusion matrix counts, rates (TPR, TNR, accuracy, coverage, F1),
6
- * and regression failure count. Division-by-zero yields 0.
7
- * Coverage = min(TPR, TNR) — the loop's stop condition target.
8
- */
9
- export function computeMetrics(results) {
10
- let truePositives = 0;
11
- let trueNegatives = 0;
12
- let falsePositives = 0;
13
- let falseNegatives = 0;
14
- let regressionCount = 0;
15
- for (const r of results) {
16
- if (r.testCase.expectedTriggered && r.actualTriggered)
17
- truePositives++;
18
- else if (!r.testCase.expectedTriggered && !r.actualTriggered)
19
- trueNegatives++;
20
- else if (!r.testCase.expectedTriggered && r.actualTriggered)
21
- falsePositives++;
22
- else if (r.testCase.expectedTriggered && !r.actualTriggered)
23
- falseNegatives++;
24
- if (r.testCase.source === 'regression' && !r.correct)
25
- regressionCount++;
26
- }
27
- const totalPositives = truePositives + falseNegatives;
28
- const totalNegatives = trueNegatives + falsePositives;
29
- const total = results.length;
30
- const truePositiveRate = totalPositives > 0 ? truePositives / totalPositives : 0;
31
- const trueNegativeRate = totalNegatives > 0 ? trueNegatives / totalNegatives : 0;
32
- const accuracy = total > 0 ? (truePositives + trueNegatives) / total : 0;
33
- const coverage = Math.min(truePositiveRate, trueNegativeRate);
34
- const precision = truePositives + falsePositives > 0 ? truePositives / (truePositives + falsePositives) : 0;
35
- const recall = truePositiveRate;
36
- const f1Score = precision + recall > 0 ? (2 * precision * recall) / (precision + recall) : 0;
37
- return {
38
- truePositives,
39
- trueNegatives,
40
- falsePositives,
41
- falseNegatives,
42
- truePositiveRate,
43
- trueNegativeRate,
44
- accuracy,
45
- coverage,
46
- f1Score,
47
- regressionCount,
48
- };
49
- }
50
- /** Compute per-category error breakdown from test results. Sorted by error rate descending. */
51
- export function computeCategoryBreakdown(results) {
52
- const map = new Map();
53
- for (const r of results) {
54
- const cat = r.testCase.category;
55
- const entry = map.get(cat) ?? { total: 0, fp: 0, fn: 0 };
56
- entry.total++;
57
- if (!r.testCase.expectedTriggered && r.actualTriggered)
58
- entry.fp++;
59
- if (r.testCase.expectedTriggered && !r.actualTriggered)
60
- entry.fn++;
61
- map.set(cat, entry);
62
- }
63
- return [...map.entries()]
64
- .map(([category, { total, fp, fn }]) => ({
65
- category,
66
- total,
67
- fp,
68
- fn,
69
- errorRate: total > 0 ? (fp + fn) / total : 0,
70
- }))
71
- .sort((a, b) => b.errorRate - a.errorRate);
72
- }
73
- //# sourceMappingURL=metrics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/core/metrics.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import type { TestCase } from './types.js';
2
- /**
3
- * Load test cases from a CSV string.
4
- *
5
- * Expected columns: `prompt`, `expected` (boolean as "true"/"false"), `intent` (block/allow).
6
- * Returns TestCase[] with category set to ''.
7
- * Throws on missing columns, invalid/mixed intent, no true positives, or no true negatives.
8
- * Calls onWarning if >80% of cases are one class.
9
- */
10
- export declare function loadPrompts(csv: string, onWarning?: (msg: string) => void): {
11
- cases: TestCase[];
12
- intent: 'block' | 'allow';
13
- };
14
- //# sourceMappingURL=prompt-loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-loader.d.ts","sourceRoot":"","sources":["../../src/core/prompt-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAoD3C;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAChC;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAA;CAAE,CA6ElD"}
@@ -1,122 +0,0 @@
1
- /**
2
- * Parse a single RFC 4180 CSV line into fields.
3
- * Handles quoted fields and escaped quotes ("" → ").
4
- */
5
- function parseCsvLine(line) {
6
- const fields = [];
7
- let i = 0;
8
- while (i < line.length) {
9
- if (line[i] === '"') {
10
- // Quoted field
11
- i++; // skip opening quote
12
- let value = '';
13
- while (i < line.length) {
14
- if (line[i] === '"') {
15
- if (line[i + 1] === '"') {
16
- value += '"';
17
- i += 2;
18
- }
19
- else {
20
- i++; // skip closing quote
21
- break;
22
- }
23
- }
24
- else {
25
- value += line[i];
26
- i++;
27
- }
28
- }
29
- fields.push(value);
30
- // skip comma
31
- if (i < line.length && line[i] === ',')
32
- i++;
33
- }
34
- else {
35
- // Unquoted field
36
- const end = line.indexOf(',', i);
37
- if (end === -1) {
38
- fields.push(line.slice(i));
39
- break;
40
- }
41
- else {
42
- fields.push(line.slice(i, end));
43
- i = end + 1;
44
- // trailing comma: push empty final field
45
- if (i === line.length) {
46
- fields.push('');
47
- }
48
- }
49
- }
50
- }
51
- return fields;
52
- }
53
- /**
54
- * Load test cases from a CSV string.
55
- *
56
- * Expected columns: `prompt`, `expected` (boolean as "true"/"false"), `intent` (block/allow).
57
- * Returns TestCase[] with category set to ''.
58
- * Throws on missing columns, invalid/mixed intent, no true positives, or no true negatives.
59
- * Calls onWarning if >80% of cases are one class.
60
- */
61
- export function loadPrompts(csv, onWarning) {
62
- const lines = csv.split(/\r?\n/);
63
- const nonEmpty = lines.filter((l) => l.trim() !== '');
64
- if (nonEmpty.length === 0) {
65
- throw new Error('CSV is empty');
66
- }
67
- const headers = parseCsvLine(nonEmpty[0]).map((h) => h.trim().toLowerCase());
68
- const promptIdx = headers.indexOf('prompt');
69
- if (promptIdx === -1) {
70
- throw new Error('Missing required column: prompt');
71
- }
72
- const expectedIdx = headers.indexOf('expected');
73
- if (expectedIdx === -1) {
74
- throw new Error('Missing required column: expected');
75
- }
76
- const intentIdx = headers.indexOf('intent');
77
- if (intentIdx === -1) {
78
- throw new Error('Missing required column: intent');
79
- }
80
- // Parse rows and validate intent consistency
81
- const rows = [];
82
- for (let i = 1; i < nonEmpty.length; i++) {
83
- const fields = parseCsvLine(nonEmpty[i]);
84
- const prompt = fields[promptIdx] ?? '';
85
- const expected = (fields[expectedIdx] ?? '').trim().toLowerCase() === 'true';
86
- const intent = (fields[intentIdx] ?? '').trim().toLowerCase();
87
- rows.push({ prompt, expected, intent });
88
- }
89
- // Validate intent values
90
- const intents = new Set(rows.map((r) => r.intent));
91
- for (const intent of intents) {
92
- if (intent !== 'block' && intent !== 'allow') {
93
- throw new Error(`Invalid intent value: '${intent}'. Must be 'block' or 'allow'`);
94
- }
95
- }
96
- if (intents.size > 1) {
97
- throw new Error('All rows must have the same intent value');
98
- }
99
- const intent = rows[0]?.intent ?? 'block';
100
- // Map expected + intent → shouldTrigger
101
- const testCases = rows.map((r) => {
102
- const shouldTrigger = intent === 'block' ? r.expected : !r.expected;
103
- return { prompt: r.prompt, expectedTriggered: shouldTrigger, category: '' };
104
- });
105
- const truePositives = testCases.filter((t) => t.expectedTriggered);
106
- const trueNegatives = testCases.filter((t) => !t.expectedTriggered);
107
- if (truePositives.length === 0) {
108
- throw new Error('No true-positive prompts found (all expected=false)');
109
- }
110
- if (trueNegatives.length === 0) {
111
- throw new Error('No true-negative prompts found (all expected=true)');
112
- }
113
- if (onWarning) {
114
- const total = testCases.length;
115
- const majorityRatio = Math.max(truePositives.length, trueNegatives.length) / total;
116
- if (majorityRatio > 0.8) {
117
- onWarning(`imbalanced set: ${truePositives.length} true-positive(s) vs ${trueNegatives.length} true-negative(s) (${Math.round(majorityRatio * 100)}% one class)`);
118
- }
119
- }
120
- return { cases: testCases, intent: intent };
121
- }
122
- //# sourceMappingURL=prompt-loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-loader.js","sourceRoot":"","sources":["../../src/core/prompt-loader.ts"],"names":[],"mappings":"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"}
@@ -1,96 +0,0 @@
1
- /**
2
- * Core domain types — shared across all Prisma AIRS CLI modules.
3
- */
4
- export interface CustomTopic {
5
- name: string;
6
- description: string;
7
- examples: string[];
8
- }
9
- export interface UserInput {
10
- topicDescription: string;
11
- intent: 'allow' | 'block';
12
- seedExamples?: string[];
13
- profileName: string;
14
- maxIterations?: number;
15
- targetCoverage?: number;
16
- maxRegressions?: number;
17
- plateauWindow?: number;
18
- plateauBand?: number;
19
- accumulateTests?: boolean;
20
- maxAccumulatedTests?: number;
21
- createPromptSet?: boolean;
22
- promptSetName?: string;
23
- /** Max AIRS scan API calls per second. Undefined = unlimited. */
24
- scanRate?: number;
25
- }
26
- export interface TestCase {
27
- prompt: string;
28
- expectedTriggered: boolean;
29
- category: string;
30
- /** How this test entered the suite. Default: 'generated'. */
31
- source?: 'generated' | 'carried-fp' | 'carried-fn' | 'regression';
32
- /** Which topic this test targets (used by audit). */
33
- targetTopic?: string;
34
- }
35
- /** Per-category error breakdown from a previous iteration's results. */
36
- export interface CategoryBreakdown {
37
- category: string;
38
- total: number;
39
- fp: number;
40
- fn: number;
41
- errorRate: number;
42
- }
43
- export interface TestResult {
44
- testCase: TestCase;
45
- actualTriggered: boolean;
46
- scanAction: 'allow' | 'block';
47
- scanId: string;
48
- reportId: string;
49
- correct: boolean;
50
- }
51
- export interface EfficacyMetrics {
52
- truePositives: number;
53
- trueNegatives: number;
54
- falsePositives: number;
55
- falseNegatives: number;
56
- truePositiveRate: number;
57
- trueNegativeRate: number;
58
- accuracy: number;
59
- coverage: number;
60
- f1Score: number;
61
- /** Count of regression-tier tests that failed (previously correct, now wrong). */
62
- regressionCount: number;
63
- }
64
- export interface AnalysisReport {
65
- summary: string;
66
- falsePositivePatterns: string[];
67
- falseNegativePatterns: string[];
68
- suggestions: string[];
69
- }
70
- export interface IterationResult {
71
- iteration: number;
72
- timestamp: string;
73
- topic: CustomTopic;
74
- testCases: TestCase[];
75
- testResults: TestResult[];
76
- metrics: EfficacyMetrics;
77
- analysis: AnalysisReport;
78
- durationMs: number;
79
- }
80
- export interface RunState {
81
- id: string;
82
- createdAt: string;
83
- updatedAt: string;
84
- userInput: UserInput;
85
- iterations: IterationResult[];
86
- currentIteration: number;
87
- bestIteration: number;
88
- bestCoverage: number;
89
- consecutiveRegressions: number;
90
- hasRevertedToBest: boolean;
91
- hasTriedSimplification: boolean;
92
- /** Companion allow topic created for block-intent two-phase generation. */
93
- companionTopic?: CustomTopic;
94
- status: 'running' | 'paused' | 'completed' | 'failed';
95
- }
96
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Core domain types — shared across all Prisma AIRS CLI modules.
3
- */
4
- export {};
5
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,3 +0,0 @@
1
- import type { Technique } from '../types.js';
2
- export declare const docxTechniques: Record<string, Technique>;
3
- //# sourceMappingURL=docx.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docx.d.ts","sourceRoot":"","sources":["../../../src/dlp/embed/docx.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,SAAS,EAAE,MAAM,aAAa,CAAC;AAmD3D,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAoBpD,CAAC"}
@@ -1,54 +0,0 @@
1
- import { lorem } from '../lorem.js';
2
- import { makeRng } from '../rng.js';
3
- const join = (p) => p.map((v) => `${v.category}: ${v.value}`).join(' | ');
4
- async function build(extra, core = {}) {
5
- // Lazy-load docx: importing it eagerly pulls in browserify polyfills whose
6
- // util-deprecate shim reads localStorage at import time, triggering a Node
7
- // Web Storage warning on every CLI command. Deferring the import to here
8
- // means docx (and the warning) only loads when DOCX output is actually built.
9
- const { Document, HeadingLevel, Packer, Paragraph, TextRun } = await import('docx');
10
- const body = lorem(makeRng(1), 2)
11
- .split('\n\n')
12
- .map((t) => new Paragraph({ children: [new TextRun(t)] }));
13
- const extraParagraphs = extra.kind === 'hidden'
14
- ? [new Paragraph({ children: [new TextRun({ text: extra.text, vanish: true })] })]
15
- : extra.kind === 'visible'
16
- ? [new Paragraph({ children: [new TextRun(extra.text)] })]
17
- : [];
18
- const doc = new Document({
19
- title: core.title,
20
- subject: core.subject,
21
- keywords: core.keywords,
22
- sections: [
23
- {
24
- children: [
25
- new Paragraph({ text: 'Generated Document', heading: HeadingLevel.HEADING_1 }),
26
- ...body,
27
- ...extraParagraphs,
28
- ],
29
- },
30
- ],
31
- });
32
- return Packer.toBuffer(doc);
33
- }
34
- export const docxTechniques = {
35
- 'core-props': {
36
- id: 'core-props',
37
- format: 'docx',
38
- label: 'core document properties',
39
- embed: (_clean, p) => build({ kind: 'none' }, { title: join(p), subject: join(p), keywords: join(p) }),
40
- },
41
- 'hidden-run': {
42
- id: 'hidden-run',
43
- format: 'docx',
44
- label: 'hidden (vanish) run',
45
- embed: (_clean, p) => build({ kind: 'hidden', text: join(p) }),
46
- },
47
- visible: {
48
- id: 'visible',
49
- format: 'docx',
50
- label: 'visible body line',
51
- embed: (_clean, p) => build({ kind: 'visible', text: join(p) }),
52
- },
53
- };
54
- //# sourceMappingURL=docx.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docx.js","sourceRoot":"","sources":["../../../src/dlp/embed/docx.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import type { Format, Technique } from '../types.js';
2
- /** All embedding techniques grouped by file format. */
3
- export declare const techniquesByFormat: Record<Format, Technique[]>;
4
- /** Unique set of all technique ids across formats. */
5
- export declare const ALL_TECHNIQUE_IDS: string[];
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dlp/embed/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAOrD,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAM1D,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAMrC,CAAC"}
@@ -1,20 +0,0 @@
1
- import { docxTechniques } from './docx.js';
2
- import { jpegTechniques } from './jpeg.js';
3
- import { pdfTechniques } from './pdf.js';
4
- import { pngTechniques } from './png.js';
5
- import { svgTechniques } from './svg.js';
6
- /** All embedding techniques grouped by file format. */
7
- export const techniquesByFormat = {
8
- pdf: Object.values(pdfTechniques),
9
- png: Object.values(pngTechniques),
10
- jpeg: Object.values(jpegTechniques),
11
- svg: Object.values(svgTechniques),
12
- docx: Object.values(docxTechniques),
13
- };
14
- /** Unique set of all technique ids across formats. */
15
- export const ALL_TECHNIQUE_IDS = [
16
- ...new Set(Object.values(techniquesByFormat)
17
- .flat()
18
- .map((t) => t.id)),
19
- ];
20
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dlp/embed/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,uDAAuD;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAgC;IAC7D,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;IACnC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;CACpC,CAAC;AAEF,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAa;IACzC,GAAG,IAAI,GAAG,CACR,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;SAC9B,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACpB;CACF,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { Technique } from '../types.js';
2
- /** Recover EXIF 0th-IFD string fields from a JPEG. */
3
- export declare function jpegExifExtract(jpeg: Buffer): string;
4
- export declare const jpegTechniques: Record<string, Technique>;
5
- //# sourceMappingURL=jpeg.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jpeg.d.ts","sourceRoot":"","sources":["../../../src/dlp/embed/jpeg.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,SAAS,EAAE,MAAM,aAAa,CAAC;AA0B3D,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA4BpD,CAAC"}
@@ -1,60 +0,0 @@
1
- import piexif from 'piexifjs';
2
- const join = (p) => p.map((v) => `${v.category}: ${v.value}`).join(' | ');
3
- function u16(n) {
4
- const b = Buffer.alloc(2);
5
- b.writeUInt16BE(n, 0);
6
- return b;
7
- }
8
- function setExif(clean, text) {
9
- const zeroth = {};
10
- zeroth[piexif.ImageIFD.ImageDescription] = text;
11
- zeroth[piexif.ImageIFD.Artist] = text;
12
- zeroth[piexif.ImageIFD.Copyright] = text;
13
- const exifStr = piexif.dump({
14
- '0th': zeroth,
15
- Exif: {},
16
- GPS: {},
17
- Interop: {},
18
- '1st': {},
19
- thumbnail: null,
20
- });
21
- return Buffer.from(piexif.insert(exifStr, clean.toString('binary')), 'binary');
22
- }
23
- /** Recover EXIF 0th-IFD string fields from a JPEG. */
24
- export function jpegExifExtract(jpeg) {
25
- const exif = piexif.load(jpeg.toString('binary'));
26
- const zeroth = exif['0th'] ?? {};
27
- return Object.values(zeroth)
28
- .filter((v) => typeof v === 'string')
29
- .join('\n');
30
- }
31
- export const jpegTechniques = {
32
- exif: {
33
- id: 'exif',
34
- format: 'jpeg',
35
- label: 'EXIF ImageDescription/Artist/Copyright',
36
- embed: (c, p) => setExif(c, join(p)),
37
- },
38
- com: {
39
- id: 'com',
40
- format: 'jpeg',
41
- label: 'COM comment segment',
42
- embed: (c, p) => {
43
- const d = Buffer.from(`DLP ${join(p)}`, 'utf8');
44
- return Buffer.concat([
45
- c.subarray(0, 2),
46
- Buffer.from([0xff, 0xfe]),
47
- u16(d.length + 2),
48
- d,
49
- c.subarray(2),
50
- ]);
51
- },
52
- },
53
- trailer: {
54
- id: 'trailer',
55
- format: 'jpeg',
56
- label: 'bytes after EOI',
57
- embed: (c, p) => Buffer.concat([c, Buffer.from(`\nDLP ${join(p)}\n`, 'utf8')]),
58
- },
59
- };
60
- //# sourceMappingURL=jpeg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jpeg.js","sourceRoot":"","sources":["../../../src/dlp/embed/jpeg.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { Technique } from '../types.js';
2
- /** Recover text from all PDF streams (inflating FlateDecode streams; falling back to raw). */
3
- export declare function pdfStreamText(pdf: Buffer): string;
4
- /** Recover document-info-dict metadata from a PDF. */
5
- export declare function pdfMetaExtract(pdf: Buffer): Promise<string>;
6
- export declare const pdfTechniques: Record<string, Technique>;
7
- //# sourceMappingURL=pdf.d.ts.map