@cdot65/prisma-airs-cli 2.7.0 → 2.9.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 (164) hide show
  1. package/README.md +132 -0
  2. package/dist/airs/dlp/data-filtering-profiles.d.ts +10 -0
  3. package/dist/airs/dlp/data-filtering-profiles.d.ts.map +1 -0
  4. package/dist/airs/dlp/data-filtering-profiles.js +17 -0
  5. package/dist/airs/dlp/data-filtering-profiles.js.map +1 -0
  6. package/dist/airs/dlp/data-patterns.d.ts +13 -0
  7. package/dist/airs/dlp/data-patterns.d.ts.map +1 -0
  8. package/dist/airs/dlp/data-patterns.js +26 -0
  9. package/dist/airs/dlp/data-patterns.js.map +1 -0
  10. package/dist/airs/dlp/data-profiles.d.ts +12 -0
  11. package/dist/airs/dlp/data-profiles.d.ts.map +1 -0
  12. package/dist/airs/dlp/data-profiles.js +23 -0
  13. package/dist/airs/dlp/data-profiles.js.map +1 -0
  14. package/dist/airs/dlp/dictionaries.d.ts +13 -0
  15. package/dist/airs/dlp/dictionaries.d.ts.map +1 -0
  16. package/dist/airs/dlp/dictionaries.js +34 -0
  17. package/dist/airs/dlp/dictionaries.js.map +1 -0
  18. package/dist/airs/dlp/index.d.ts +6 -0
  19. package/dist/airs/dlp/index.d.ts.map +1 -0
  20. package/dist/airs/dlp/index.js +6 -0
  21. package/dist/airs/dlp/index.js.map +1 -0
  22. package/dist/airs/dlp/types.d.ts +36 -0
  23. package/dist/airs/dlp/types.d.ts.map +1 -0
  24. package/dist/airs/dlp/types.js +2 -0
  25. package/dist/airs/dlp/types.js.map +1 -0
  26. package/dist/airs/management.d.ts +8 -1
  27. package/dist/airs/management.d.ts.map +1 -1
  28. package/dist/airs/management.js +16 -1
  29. package/dist/airs/management.js.map +1 -1
  30. package/dist/cli/commands/dlp/dictionaries.d.ts +3 -0
  31. package/dist/cli/commands/dlp/dictionaries.d.ts.map +1 -0
  32. package/dist/cli/commands/dlp/dictionaries.js +166 -0
  33. package/dist/cli/commands/dlp/dictionaries.js.map +1 -0
  34. package/dist/cli/commands/dlp/filtering-profiles.d.ts +3 -0
  35. package/dist/cli/commands/dlp/filtering-profiles.d.ts.map +1 -0
  36. package/dist/cli/commands/dlp/filtering-profiles.js +66 -0
  37. package/dist/cli/commands/dlp/filtering-profiles.js.map +1 -0
  38. package/dist/cli/commands/dlp/index.d.ts +3 -0
  39. package/dist/cli/commands/dlp/index.d.ts.map +1 -0
  40. package/dist/cli/commands/dlp/index.js +15 -0
  41. package/dist/cli/commands/dlp/index.js.map +1 -0
  42. package/dist/cli/commands/dlp/patch.d.ts +15 -0
  43. package/dist/cli/commands/dlp/patch.d.ts.map +1 -0
  44. package/dist/cli/commands/dlp/patch.js +70 -0
  45. package/dist/cli/commands/dlp/patch.js.map +1 -0
  46. package/dist/cli/commands/dlp/patterns.d.ts +3 -0
  47. package/dist/cli/commands/dlp/patterns.d.ts.map +1 -0
  48. package/dist/cli/commands/dlp/patterns.js +120 -0
  49. package/dist/cli/commands/dlp/patterns.js.map +1 -0
  50. package/dist/cli/commands/dlp/profiles.d.ts +3 -0
  51. package/dist/cli/commands/dlp/profiles.d.ts.map +1 -0
  52. package/dist/cli/commands/dlp/profiles.js +124 -0
  53. package/dist/cli/commands/dlp/profiles.js.map +1 -0
  54. package/dist/cli/commands/dlp-gen.d.ts +3 -0
  55. package/dist/cli/commands/dlp-gen.d.ts.map +1 -0
  56. package/dist/cli/commands/dlp-gen.js +51 -0
  57. package/dist/cli/commands/dlp-gen.js.map +1 -0
  58. package/dist/cli/commands/runtime.d.ts.map +1 -1
  59. package/dist/cli/commands/runtime.js +10 -0
  60. package/dist/cli/commands/runtime.js.map +1 -1
  61. package/dist/cli/debug-logger.d.ts +1 -0
  62. package/dist/cli/debug-logger.d.ts.map +1 -1
  63. package/dist/cli/debug-logger.js +2 -1
  64. package/dist/cli/debug-logger.js.map +1 -1
  65. package/dist/cli/renderer/dlp.d.ts +31 -0
  66. package/dist/cli/renderer/dlp.d.ts.map +1 -0
  67. package/dist/cli/renderer/dlp.js +107 -0
  68. package/dist/cli/renderer/dlp.js.map +1 -0
  69. package/dist/cli/renderer/index.d.ts +1 -0
  70. package/dist/cli/renderer/index.d.ts.map +1 -1
  71. package/dist/cli/renderer/index.js +1 -0
  72. package/dist/cli/renderer/index.js.map +1 -1
  73. package/dist/config/loader.d.ts.map +1 -1
  74. package/dist/config/loader.js +1 -0
  75. package/dist/config/loader.js.map +1 -1
  76. package/dist/config/schema.d.ts +3 -0
  77. package/dist/config/schema.d.ts.map +1 -1
  78. package/dist/config/schema.js +1 -0
  79. package/dist/config/schema.js.map +1 -1
  80. package/dist/dlp/embed/docx.d.ts +3 -0
  81. package/dist/dlp/embed/docx.d.ts.map +1 -0
  82. package/dist/dlp/embed/docx.js +47 -0
  83. package/dist/dlp/embed/docx.js.map +1 -0
  84. package/dist/dlp/embed/index.d.ts +6 -0
  85. package/dist/dlp/embed/index.d.ts.map +1 -0
  86. package/dist/dlp/embed/index.js +20 -0
  87. package/dist/dlp/embed/index.js.map +1 -0
  88. package/dist/dlp/embed/jpeg.d.ts +5 -0
  89. package/dist/dlp/embed/jpeg.d.ts.map +1 -0
  90. package/dist/dlp/embed/jpeg.js +60 -0
  91. package/dist/dlp/embed/jpeg.js.map +1 -0
  92. package/dist/dlp/embed/pdf.d.ts +7 -0
  93. package/dist/dlp/embed/pdf.d.ts.map +1 -0
  94. package/dist/dlp/embed/pdf.js +92 -0
  95. package/dist/dlp/embed/pdf.js.map +1 -0
  96. package/dist/dlp/embed/png-chunks.d.ts +12 -0
  97. package/dist/dlp/embed/png-chunks.d.ts.map +1 -0
  98. package/dist/dlp/embed/png-chunks.js +85 -0
  99. package/dist/dlp/embed/png-chunks.js.map +1 -0
  100. package/dist/dlp/embed/png.d.ts +5 -0
  101. package/dist/dlp/embed/png.d.ts.map +1 -0
  102. package/dist/dlp/embed/png.js +68 -0
  103. package/dist/dlp/embed/png.js.map +1 -0
  104. package/dist/dlp/embed/svg.d.ts +3 -0
  105. package/dist/dlp/embed/svg.d.ts.map +1 -0
  106. package/dist/dlp/embed/svg.js +28 -0
  107. package/dist/dlp/embed/svg.js.map +1 -0
  108. package/dist/dlp/embed/zip.d.ts +3 -0
  109. package/dist/dlp/embed/zip.d.ts.map +1 -0
  110. package/dist/dlp/embed/zip.js +25 -0
  111. package/dist/dlp/embed/zip.js.map +1 -0
  112. package/dist/dlp/generate/docx.d.ts +3 -0
  113. package/dist/dlp/generate/docx.d.ts.map +1 -0
  114. package/dist/dlp/generate/docx.js +20 -0
  115. package/dist/dlp/generate/docx.js.map +1 -0
  116. package/dist/dlp/generate/index.d.ts +5 -0
  117. package/dist/dlp/generate/index.d.ts.map +1 -0
  118. package/dist/dlp/generate/index.js +21 -0
  119. package/dist/dlp/generate/index.js.map +1 -0
  120. package/dist/dlp/generate/jpeg.d.ts +3 -0
  121. package/dist/dlp/generate/jpeg.d.ts.map +1 -0
  122. package/dist/dlp/generate/jpeg.js +8 -0
  123. package/dist/dlp/generate/jpeg.js.map +1 -0
  124. package/dist/dlp/generate/pdf.d.ts +3 -0
  125. package/dist/dlp/generate/pdf.d.ts.map +1 -0
  126. package/dist/dlp/generate/pdf.js +19 -0
  127. package/dist/dlp/generate/pdf.js.map +1 -0
  128. package/dist/dlp/generate/png.d.ts +3 -0
  129. package/dist/dlp/generate/png.d.ts.map +1 -0
  130. package/dist/dlp/generate/png.js +8 -0
  131. package/dist/dlp/generate/png.js.map +1 -0
  132. package/dist/dlp/generate/raster.d.ts +9 -0
  133. package/dist/dlp/generate/raster.d.ts.map +1 -0
  134. package/dist/dlp/generate/raster.js +20 -0
  135. package/dist/dlp/generate/raster.js.map +1 -0
  136. package/dist/dlp/generate/svg.d.ts +3 -0
  137. package/dist/dlp/generate/svg.d.ts.map +1 -0
  138. package/dist/dlp/generate/svg.js +17 -0
  139. package/dist/dlp/generate/svg.js.map +1 -0
  140. package/dist/dlp/index.d.ts +15 -0
  141. package/dist/dlp/index.d.ts.map +1 -0
  142. package/dist/dlp/index.js +54 -0
  143. package/dist/dlp/index.js.map +1 -0
  144. package/dist/dlp/lorem.d.ts +3 -0
  145. package/dist/dlp/lorem.d.ts.map +1 -0
  146. package/dist/dlp/lorem.js +65 -0
  147. package/dist/dlp/lorem.js.map +1 -0
  148. package/dist/dlp/manifest.d.ts +11 -0
  149. package/dist/dlp/manifest.d.ts.map +1 -0
  150. package/dist/dlp/manifest.js +14 -0
  151. package/dist/dlp/manifest.js.map +1 -0
  152. package/dist/dlp/payload.d.ts +6 -0
  153. package/dist/dlp/payload.d.ts.map +1 -0
  154. package/dist/dlp/payload.js +62 -0
  155. package/dist/dlp/payload.js.map +1 -0
  156. package/dist/dlp/rng.d.ts +9 -0
  157. package/dist/dlp/rng.d.ts.map +1 -0
  158. package/dist/dlp/rng.js +28 -0
  159. package/dist/dlp/rng.js.map +1 -0
  160. package/dist/dlp/types.d.ts +26 -0
  161. package/dist/dlp/types.d.ts.map +1 -0
  162. package/dist/dlp/types.js +2 -0
  163. package/dist/dlp/types.js.map +1 -0
  164. package/package.json +6 -2
@@ -0,0 +1,25 @@
1
+ import { inflateRawSync } from 'node:zlib';
2
+ const LOCAL_HEADER = 0x04034b50;
3
+ /** Extract concatenated text from all entries of a ZIP buffer (e.g. a DOCX). */
4
+ export function unzipText(zip) {
5
+ const parts = [];
6
+ let off = 0;
7
+ while (off + 30 <= zip.length && zip.readUInt32LE(off) === LOCAL_HEADER) {
8
+ const method = zip.readUInt16LE(off + 8);
9
+ const compSize = zip.readUInt32LE(off + 18);
10
+ const nameLen = zip.readUInt16LE(off + 26);
11
+ const extraLen = zip.readUInt16LE(off + 28);
12
+ const dataStart = off + 30 + nameLen + extraLen;
13
+ const data = zip.subarray(dataStart, dataStart + compSize);
14
+ try {
15
+ const content = method === 8 ? inflateRawSync(data) : data;
16
+ parts.push(content.toString('utf8'));
17
+ }
18
+ catch {
19
+ // skip entries that cannot be inflated
20
+ }
21
+ off = dataStart + compSize;
22
+ }
23
+ return parts.join('\n');
24
+ }
25
+ //# sourceMappingURL=zip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip.js","sourceRoot":"","sources":["../../../src/dlp/embed/zip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC,gFAAgF;AAChF,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,YAAY,EAAE,CAAC;QACxE,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,GAAG,GAAG,EAAE,GAAG,OAAO,GAAG,QAAQ,CAAC;QAChD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;QACD,GAAG,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Generate a valid DOCX (zip) filled with lorem ipsum. */
2
+ export declare function docx(rng: () => number): Promise<Buffer>;
3
+ //# sourceMappingURL=docx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docx.d.ts","sourceRoot":"","sources":["../../../src/dlp/generate/docx.ts"],"names":[],"mappings":"AAGA,2DAA2D;AAC3D,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAe7D"}
@@ -0,0 +1,20 @@
1
+ import { Document, HeadingLevel, Packer, Paragraph, TextRun } from 'docx';
2
+ import { lorem } from '../lorem.js';
3
+ /** Generate a valid DOCX (zip) filled with lorem ipsum. */
4
+ export async function docx(rng) {
5
+ const paragraphs = lorem(rng, 3)
6
+ .split('\n\n')
7
+ .map((p) => new Paragraph({ children: [new TextRun(p)] }));
8
+ const doc = new Document({
9
+ sections: [
10
+ {
11
+ children: [
12
+ new Paragraph({ text: 'Generated Document', heading: HeadingLevel.HEADING_1 }),
13
+ ...paragraphs,
14
+ ],
15
+ },
16
+ ],
17
+ });
18
+ return Packer.toBuffer(doc);
19
+ }
20
+ //# sourceMappingURL=docx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docx.js","sourceRoot":"","sources":["../../../src/dlp/generate/docx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAiB;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;SAC7B,KAAK,CAAC,MAAM,CAAC;SACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;QACvB,QAAQ,EAAE;YACR;gBACE,QAAQ,EAAE;oBACR,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC;oBAC9E,GAAG,UAAU;iBACd;aACF;SACF;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Format } from '../types.js';
2
+ /** Clean-file generators keyed by format. */
3
+ export declare const generators: Record<Format, (rng: () => number) => Promise<Buffer> | Buffer>;
4
+ export declare const EXT: Record<Format, string>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dlp/generate/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAO1C,6CAA6C;AAC7C,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAMtF,CAAC;AAEF,eAAO,MAAM,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMtC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { docx } from './docx.js';
2
+ import { jpeg } from './jpeg.js';
3
+ import { pdf } from './pdf.js';
4
+ import { png } from './png.js';
5
+ import { svg } from './svg.js';
6
+ /** Clean-file generators keyed by format. */
7
+ export const generators = {
8
+ pdf,
9
+ png,
10
+ jpeg,
11
+ svg,
12
+ docx,
13
+ };
14
+ export const EXT = {
15
+ pdf: 'pdf',
16
+ png: 'png',
17
+ jpeg: 'jpg',
18
+ svg: 'svg',
19
+ docx: 'docx',
20
+ };
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dlp/generate/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,6CAA6C;AAC7C,MAAM,CAAC,MAAM,UAAU,GAAoE;IACzF,GAAG;IACH,GAAG;IACH,IAAI;IACJ,GAAG;IACH,IAAI;CACL,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAA2B;IACzC,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;CACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Generate a valid JPEG with deterministic gradient content. */
2
+ export declare function jpeg(rng: () => number): Promise<Buffer>;
3
+ //# sourceMappingURL=jpeg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jpeg.d.ts","sourceRoot":"","sources":["../../../src/dlp/generate/jpeg.ts"],"names":[],"mappings":"AAGA,iEAAiE;AACjE,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7D"}
@@ -0,0 +1,8 @@
1
+ import sharp from 'sharp';
2
+ import { raster } from './raster.js';
3
+ /** Generate a valid JPEG with deterministic gradient content. */
4
+ export async function jpeg(rng) {
5
+ const { data, width, height, channels } = raster(rng);
6
+ return sharp(data, { raw: { width, height, channels } }).jpeg({ quality: 90 }).toBuffer();
7
+ }
8
+ //# sourceMappingURL=jpeg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jpeg.js","sourceRoot":"","sources":["../../../src/dlp/generate/jpeg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAiB;IAC1C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC5F,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Generate a valid single-page PDF filled with lorem ipsum. */
2
+ export declare function pdf(rng: () => number): Promise<Buffer>;
3
+ //# sourceMappingURL=pdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/dlp/generate/pdf.ts"],"names":[],"mappings":"AAGA,gEAAgE;AAChE,wBAAsB,GAAG,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc5D"}
@@ -0,0 +1,19 @@
1
+ import { PDFDocument, StandardFonts } from 'pdf-lib';
2
+ import { lorem } from '../lorem.js';
3
+ /** Generate a valid single-page PDF filled with lorem ipsum. */
4
+ export async function pdf(rng) {
5
+ const doc = await PDFDocument.create();
6
+ const font = await doc.embedFont(StandardFonts.Helvetica);
7
+ const page = doc.addPage([612, 792]);
8
+ page.drawText(lorem(rng, 3), {
9
+ x: 54,
10
+ y: 720,
11
+ size: 11,
12
+ font,
13
+ lineHeight: 15,
14
+ maxWidth: 504,
15
+ });
16
+ const bytes = await doc.save();
17
+ return Buffer.from(bytes);
18
+ }
19
+ //# sourceMappingURL=pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/dlp/generate/pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,GAAiB;IACzC,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;QAC3B,CAAC,EAAE,EAAE;QACL,CAAC,EAAE,GAAG;QACN,IAAI,EAAE,EAAE;QACR,IAAI;QACJ,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,GAAG;KACd,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Generate a valid PNG with deterministic gradient content. */
2
+ export declare function png(rng: () => number): Promise<Buffer>;
3
+ //# sourceMappingURL=png.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"png.d.ts","sourceRoot":"","sources":["../../../src/dlp/generate/png.ts"],"names":[],"mappings":"AAGA,gEAAgE;AAChE,wBAAsB,GAAG,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG5D"}
@@ -0,0 +1,8 @@
1
+ import sharp from 'sharp';
2
+ import { raster } from './raster.js';
3
+ /** Generate a valid PNG with deterministic gradient content. */
4
+ export async function png(rng) {
5
+ const { data, width, height, channels } = raster(rng);
6
+ return sharp(data, { raw: { width, height, channels } }).png().toBuffer();
7
+ }
8
+ //# sourceMappingURL=png.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"png.js","sourceRoot":"","sources":["../../../src/dlp/generate/png.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,GAAiB;IACzC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface Raster {
2
+ data: Buffer;
3
+ width: number;
4
+ height: number;
5
+ channels: 3;
6
+ }
7
+ /** Build a deterministic RGB gradient raster for use as image cover content. */
8
+ export declare function raster(rng: () => number): Raster;
9
+ //# sourceMappingURL=raster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raster.d.ts","sourceRoot":"","sources":["../../../src/dlp/generate/raster.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,CAAC;CACb;AAED,gFAAgF;AAChF,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,MAAM,CAiBhD"}
@@ -0,0 +1,20 @@
1
+ /** Build a deterministic RGB gradient raster for use as image cover content. */
2
+ export function raster(rng) {
3
+ const width = 256;
4
+ const height = 192;
5
+ const channels = 3;
6
+ const data = Buffer.alloc(width * height * channels);
7
+ const rb = Math.floor(rng() * 256);
8
+ const gb = Math.floor(rng() * 256);
9
+ const bb = Math.floor(rng() * 256);
10
+ for (let y = 0; y < height; y++) {
11
+ for (let x = 0; x < width; x++) {
12
+ const i = (y * width + x) * channels;
13
+ data[i] = (x + rb) & 255;
14
+ data[i + 1] = (y + gb) & 255;
15
+ data[i + 2] = (x + y + bb) & 255;
16
+ }
17
+ }
18
+ return { data, width, height, channels };
19
+ }
20
+ //# sourceMappingURL=raster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raster.js","sourceRoot":"","sources":["../../../src/dlp/generate/raster.ts"],"names":[],"mappings":"AAOA,gFAAgF;AAChF,MAAM,UAAU,MAAM,CAAC,GAAiB;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,QAAQ,GAAG,CAAU,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;YACrC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;YACzB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;YAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Generate a valid SVG (namespaced root) with deterministic placeholder shapes. */
2
+ export declare function svg(rng: () => number): Buffer;
3
+ //# sourceMappingURL=svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../../../src/dlp/generate/svg.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,MAAM,CAc7C"}
@@ -0,0 +1,17 @@
1
+ import { pick } from '../rng.js';
2
+ /** Generate a valid SVG (namespaced root) with deterministic placeholder shapes. */
3
+ export function svg(rng) {
4
+ const width = 240;
5
+ const height = 160;
6
+ const fill = pick(rng, ['#673ab7', '#2196f3', '#4caf50', '#ff9800']);
7
+ const cx = 40 + Math.floor(rng() * 160);
8
+ const xml = `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" ` +
9
+ `viewBox="0 0 ${width} ${height}" role="img">` +
10
+ '<title>Generated image</title>' +
11
+ '<desc>A generated placeholder graphic.</desc>' +
12
+ `<rect width="${width}" height="${height}" fill="#ffffff"/>` +
13
+ `<circle cx="${cx}" cy="80" r="48" fill="${fill}"/>` +
14
+ '</svg>';
15
+ return Buffer.from(xml, 'utf8');
16
+ }
17
+ //# sourceMappingURL=svg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.js","sourceRoot":"","sources":["../../../src/dlp/generate/svg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,oFAAoF;AACpF,MAAM,UAAU,GAAG,CAAC,GAAiB;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IACrE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;IACxC,MAAM,GAAG,GACP,kDAAkD,KAAK,aAAa,MAAM,IAAI;QAC9E,gBAAgB,KAAK,IAAI,MAAM,eAAe;QAC9C,gCAAgC;QAChC,+CAA+C;QAC/C,gBAAgB,KAAK,aAAa,MAAM,oBAAoB;QAC5D,eAAe,EAAE,0BAA0B,IAAI,KAAK;QACpD,QAAQ,CAAC;IACX,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { GenerateOptions } from './types.js';
2
+ export interface GenerateSummary {
3
+ clean: number;
4
+ dirty: number;
5
+ out: string;
6
+ manifestPath: string;
7
+ seed: number;
8
+ byFormat: Record<string, {
9
+ clean: number;
10
+ dirty: number;
11
+ }>;
12
+ }
13
+ /** Generate a clean/dirty DLP test corpus and a manifest describing it. */
14
+ export declare function generateCorpus(opts: GenerateOptions): Promise<GenerateSummary>;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dlp/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AAEjE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,2EAA2E;AAC3E,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAmDpF"}
@@ -0,0 +1,54 @@
1
+ import { mkdir, writeFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { techniquesByFormat } from './embed/index.js';
4
+ import { EXT, generators } from './generate/index.js';
5
+ import { buildManifest, writeManifest } from './manifest.js';
6
+ import { makePayload } from './payload.js';
7
+ import { makeRng, subSeed } from './rng.js';
8
+ /** Generate a clean/dirty DLP test corpus and a manifest describing it. */
9
+ export async function generateCorpus(opts) {
10
+ const seed = opts.seed ?? Math.floor(Math.random() * 0x7fffffff);
11
+ const entries = [];
12
+ const byFormat = {};
13
+ let cleanCount = 0;
14
+ let typeIndex = 0;
15
+ for (const fmt of opts.types) {
16
+ const ext = EXT[fmt];
17
+ const cleanDir = join(opts.out, 'clean', fmt);
18
+ const dirtyDir = join(opts.out, 'dirty', fmt);
19
+ await mkdir(cleanDir, { recursive: true });
20
+ await mkdir(dirtyDir, { recursive: true });
21
+ byFormat[fmt] = { clean: 0, dirty: 0 };
22
+ const wanted = techniquesByFormat[fmt].filter((t) => opts.techniques === 'all' || opts.techniques.includes(t.id));
23
+ for (let i = 0; i < opts.count; i++) {
24
+ const fileSeed = subSeed(seed, typeIndex * 1000 + i);
25
+ const base = `${fmt}-${fileSeed.toString(16).padStart(8, '0')}`;
26
+ const cleanBuf = Buffer.from(await generators[fmt](makeRng(fileSeed)));
27
+ const cleanPath = join(cleanDir, `${base}.${ext}`);
28
+ await writeFile(cleanPath, cleanBuf);
29
+ cleanCount++;
30
+ byFormat[fmt].clean++;
31
+ let tIdx = 0;
32
+ for (const technique of wanted) {
33
+ const payload = makePayload(makeRng(subSeed(fileSeed, 7919 + tIdx)));
34
+ const dirtyBuf = Buffer.from(await technique.embed(cleanBuf, payload));
35
+ const dirtyPath = join(dirtyDir, `${base}__${technique.id}.${ext}`);
36
+ await writeFile(dirtyPath, dirtyBuf);
37
+ entries.push({
38
+ format: fmt,
39
+ technique: technique.id,
40
+ clean: cleanPath,
41
+ dirty: dirtyPath,
42
+ values: payload,
43
+ });
44
+ byFormat[fmt].dirty++;
45
+ tIdx++;
46
+ }
47
+ }
48
+ typeIndex++;
49
+ }
50
+ const manifestPath = join(opts.out, 'manifest.json');
51
+ await writeManifest(manifestPath, buildManifest(entries));
52
+ return { clean: cleanCount, dirty: entries.length, out: opts.out, manifestPath, seed, byFormat };
53
+ }
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dlp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAY5C,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAqB;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC;IACjE,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAqD,EAAE,CAAC;IACtE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAEvC,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CACnE,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;YACnD,MAAM,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrC,UAAU,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YAEtB,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gBACvE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,KAAK,SAAS,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBACpE,MAAM,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,GAAG;oBACX,SAAS,EAAE,SAAS,CAAC,EAAE;oBACvB,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,OAAO;iBAChB,CAAC,CAAC;gBACH,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;gBACtB,IAAI,EAAE,CAAC;YACT,CAAC;QACH,CAAC;QACD,SAAS,EAAE,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACrD,MAAM,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACnG,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Generate `paragraphs` paragraphs of lorem ipsum, joined by blank lines. */
2
+ export declare function lorem(rng: () => number, paragraphs: number): string;
3
+ //# sourceMappingURL=lorem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lorem.d.ts","sourceRoot":"","sources":["../../src/dlp/lorem.ts"],"names":[],"mappings":"AA4DA,8EAA8E;AAC9E,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAKnE"}
@@ -0,0 +1,65 @@
1
+ import { pick } from './rng.js';
2
+ const WORDS = [
3
+ 'lorem',
4
+ 'ipsum',
5
+ 'dolor',
6
+ 'sit',
7
+ 'amet',
8
+ 'consectetur',
9
+ 'adipiscing',
10
+ 'elit',
11
+ 'sed',
12
+ 'do',
13
+ 'eiusmod',
14
+ 'tempor',
15
+ 'incididunt',
16
+ 'ut',
17
+ 'labore',
18
+ 'et',
19
+ 'dolore',
20
+ 'magna',
21
+ 'aliqua',
22
+ 'enim',
23
+ 'ad',
24
+ 'minim',
25
+ 'veniam',
26
+ 'quis',
27
+ 'nostrud',
28
+ 'exercitation',
29
+ 'ullamco',
30
+ 'laboris',
31
+ 'nisi',
32
+ 'aliquip',
33
+ 'ex',
34
+ 'ea',
35
+ 'commodo',
36
+ 'consequat',
37
+ 'duis',
38
+ 'aute',
39
+ 'irure',
40
+ 'in',
41
+ 'reprehenderit',
42
+ 'voluptate',
43
+ 'velit',
44
+ 'esse',
45
+ 'cillum',
46
+ 'fugiat',
47
+ 'nulla',
48
+ 'pariatur',
49
+ 'excepteur',
50
+ 'sint',
51
+ ];
52
+ function sentence(rng) {
53
+ const len = 8 + Math.floor(rng() * 8);
54
+ const words = Array.from({ length: len }, () => pick(rng, WORDS));
55
+ const text = words.join(' ');
56
+ return `${text.charAt(0).toUpperCase()}${text.slice(1)}.`;
57
+ }
58
+ /** Generate `paragraphs` paragraphs of lorem ipsum, joined by blank lines. */
59
+ export function lorem(rng, paragraphs) {
60
+ return Array.from({ length: paragraphs }, () => {
61
+ const sentences = 3 + Math.floor(rng() * 3);
62
+ return Array.from({ length: sentences }, () => sentence(rng)).join(' ');
63
+ }).join('\n\n');
64
+ }
65
+ //# sourceMappingURL=lorem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lorem.js","sourceRoot":"","sources":["../../src/dlp/lorem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,KAAK,GAAG;IACZ,OAAO;IACP,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,aAAa;IACb,YAAY;IACZ,MAAM;IACN,KAAK;IACL,IAAI;IACJ,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,IAAI;IACJ,QAAQ;IACR,IAAI;IACJ,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,OAAO;IACP,QAAQ;IACR,MAAM;IACN,SAAS;IACT,cAAc;IACd,SAAS;IACT,SAAS;IACT,MAAM;IACN,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,SAAS;IACT,WAAW;IACX,MAAM;IACN,MAAM;IACN,OAAO;IACP,IAAI;IACJ,eAAe;IACf,WAAW;IACX,OAAO;IACP,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,UAAU;IACV,WAAW;IACX,MAAM;CACP,CAAC;AAEF,SAAS,QAAQ,CAAC,GAAiB;IACjC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;AAC5D,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,KAAK,CAAC,GAAiB,EAAE,UAAkB;IACzD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE;QAC7C,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ManifestEntry } from './types.js';
2
+ export interface Manifest {
3
+ generatedAt: string;
4
+ count: number;
5
+ entries: ManifestEntry[];
6
+ }
7
+ /** Assemble a manifest from dirty-file entries. */
8
+ export declare function buildManifest(entries: ManifestEntry[]): Manifest;
9
+ /** Write a manifest to disk as pretty JSON. */
10
+ export declare function writeManifest(path: string, manifest: Manifest): Promise<void>;
11
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/dlp/manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,QAAQ,CAMhE;AAED,+CAA+C;AAC/C,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnF"}
@@ -0,0 +1,14 @@
1
+ import { writeFile } from 'node:fs/promises';
2
+ /** Assemble a manifest from dirty-file entries. */
3
+ export function buildManifest(entries) {
4
+ return {
5
+ generatedAt: new Date().toISOString(),
6
+ count: entries.length,
7
+ entries,
8
+ };
9
+ }
10
+ /** Write a manifest to disk as pretty JSON. */
11
+ export async function writeManifest(path, manifest) {
12
+ await writeFile(path, `${JSON.stringify(manifest, null, 2)}\n`);
13
+ }
14
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/dlp/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAS7C,mDAAmD;AACnD,MAAM,UAAU,aAAa,CAAC,OAAwB;IACpD,OAAO;QACL,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,OAAO;KACR,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,QAAkB;IAClE,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { PayloadValue } from './types.js';
2
+ /** Luhn checksum validation for a digit string. */
3
+ export declare function luhnValid(pan: string): boolean;
4
+ /** Generate a set of clearly-synthetic, format-valid sensitive markers. */
5
+ export declare function makePayload(rng: () => number): PayloadValue[];
6
+ //# sourceMappingURL=payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../src/dlp/payload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAkB9C;AAgCD,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,YAAY,EAAE,CAW7D"}
@@ -0,0 +1,62 @@
1
+ import { digits, pick } from './rng.js';
2
+ const BASE32 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
3
+ /** Luhn checksum validation for a digit string. */
4
+ export function luhnValid(pan) {
5
+ if (pan.length === 0) {
6
+ return false;
7
+ }
8
+ let sum = 0;
9
+ let alt = false;
10
+ for (let i = pan.length - 1; i >= 0; i--) {
11
+ let d = pan.charCodeAt(i) - 48;
12
+ if (alt) {
13
+ d *= 2;
14
+ if (d > 9) {
15
+ d -= 9;
16
+ }
17
+ }
18
+ sum += d;
19
+ alt = !alt;
20
+ }
21
+ return sum % 10 === 0;
22
+ }
23
+ /** A 16-digit, Luhn-valid PAN from the Visa-family test BIN (starts with 4). */
24
+ function testPan(rng) {
25
+ const body = `4${digits(rng, 14)}`;
26
+ for (let c = 0; c < 10; c++) {
27
+ const candidate = `${body}${c}`;
28
+ if (luhnValid(candidate)) {
29
+ return candidate;
30
+ }
31
+ }
32
+ return `${body}0`;
33
+ }
34
+ // SSNs in area 900-999 are never issued by the SSA, so these are synthetic-safe.
35
+ const ssn = (rng) => `9${digits(rng, 2)}-${digits(rng, 2)}-${digits(rng, 4)}`;
36
+ const phone = (rng) => `555-01${digits(rng, 2)}`;
37
+ const email = (rng) => `${pick(rng, ['john.public', 'jane.doe', 'sam.roe'])}.${digits(rng, 3)}@${pick(rng, [
38
+ 'example.com',
39
+ 'example.org',
40
+ 'example.net',
41
+ ])}`;
42
+ const awsKey = (rng) => `AKIA${Array.from({ length: 9 }, () => pick(rng, [...BASE32])).join('')}EXAMPLE`;
43
+ const dob = (rng) => {
44
+ const year = 1960 + Math.floor(rng() * 40);
45
+ const month = String(1 + Math.floor(rng() * 12)).padStart(2, '0');
46
+ const day = String(1 + Math.floor(rng() * 28)).padStart(2, '0');
47
+ return `${year}-${month}-${day}`;
48
+ };
49
+ /** Generate a set of clearly-synthetic, format-valid sensitive markers. */
50
+ export function makePayload(rng) {
51
+ const pan = testPan(rng);
52
+ return [
53
+ { category: 'ssn', value: ssn(rng) },
54
+ { category: 'credit_card', value: pan.replace(/(\d{4})(?=\d)/g, '$1 ').trim() },
55
+ { category: 'email', value: email(rng) },
56
+ { category: 'phone', value: phone(rng) },
57
+ { category: 'aws_key', value: awsKey(rng) },
58
+ { category: 'passport', value: `X${digits(rng, 8)}` },
59
+ { category: 'dob', value: dob(rng) },
60
+ ];
61
+ }
62
+ //# sourceMappingURL=payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/dlp/payload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** Deterministic PRNG (mulberry32). Returns a function yielding floats in [0, 1). */
2
+ export declare function makeRng(seed: number): () => number;
3
+ /** Pick a deterministic element from a non-empty array. */
4
+ export declare function pick<T>(rng: () => number, xs: readonly T[]): T;
5
+ /** Build a string of `n` random decimal digits. */
6
+ export declare function digits(rng: () => number, n: number): string;
7
+ /** Derive a stable sub-seed from a base seed and an index. */
8
+ export declare function subSeed(seed: number, index: number): number;
9
+ //# sourceMappingURL=rng.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rng.d.ts","sourceRoot":"","sources":["../../src/dlp/rng.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,MAAM,CASlD;AAED,2DAA2D;AAC3D,wBAAgB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,MAAM,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAE9D;AAED,mDAAmD;AACnD,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED,8DAA8D;AAC9D,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D"}
@@ -0,0 +1,28 @@
1
+ /** Deterministic PRNG (mulberry32). Returns a function yielding floats in [0, 1). */
2
+ export function makeRng(seed) {
3
+ let a = seed >>> 0;
4
+ return () => {
5
+ a |= 0;
6
+ a = (a + 0x6d2b79f5) | 0;
7
+ let t = Math.imul(a ^ (a >>> 15), 1 | a);
8
+ t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
9
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
10
+ };
11
+ }
12
+ /** Pick a deterministic element from a non-empty array. */
13
+ export function pick(rng, xs) {
14
+ return xs[Math.floor(rng() * xs.length)];
15
+ }
16
+ /** Build a string of `n` random decimal digits. */
17
+ export function digits(rng, n) {
18
+ let out = '';
19
+ for (let i = 0; i < n; i++) {
20
+ out += Math.floor(rng() * 10).toString();
21
+ }
22
+ return out;
23
+ }
24
+ /** Derive a stable sub-seed from a base seed and an index. */
25
+ export function subSeed(seed, index) {
26
+ return (Math.imul(seed ^ 0x9e3779b9, 0x85ebca6b) + index * 0x27d4eb2f) >>> 0;
27
+ }
28
+ //# sourceMappingURL=rng.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rng.js","sourceRoot":"","sources":["../../src/dlp/rng.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;IACnB,OAAO,GAAG,EAAE;QACV,CAAC,IAAI,CAAC,CAAC;QACP,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,IAAI,CAAI,GAAiB,EAAE,EAAgB;IACzD,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,MAAM,CAAC,GAAiB,EAAE,CAAS;IACjD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,KAAa;IACjD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,UAAU,EAAE,UAAU,CAAC,GAAG,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,26 @@
1
+ export type Format = 'pdf' | 'png' | 'jpeg' | 'svg' | 'docx';
2
+ export interface PayloadValue {
3
+ category: string;
4
+ value: string;
5
+ }
6
+ export interface Technique {
7
+ id: string;
8
+ format: Format;
9
+ label: string;
10
+ embed: (clean: Buffer, payload: PayloadValue[]) => Promise<Buffer> | Buffer;
11
+ }
12
+ export interface ManifestEntry {
13
+ format: Format;
14
+ technique: string;
15
+ clean: string;
16
+ dirty: string;
17
+ values: PayloadValue[];
18
+ }
19
+ export interface GenerateOptions {
20
+ types: Format[];
21
+ count: number;
22
+ out: string;
23
+ techniques: 'all' | string[];
24
+ seed?: number;
25
+ }
26
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dlp/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CAC7E;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map