@cdot65/prisma-airs-cli 2.6.1 → 2.8.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 (105) hide show
  1. package/dist/airs/promptsets.d.ts.map +1 -1
  2. package/dist/airs/promptsets.js +1 -17
  3. package/dist/airs/promptsets.js.map +1 -1
  4. package/dist/airs/redteam.d.ts +5 -0
  5. package/dist/airs/redteam.d.ts.map +1 -1
  6. package/dist/airs/redteam.js +9 -0
  7. package/dist/airs/redteam.js.map +1 -1
  8. package/dist/airs/types.d.ts +3 -0
  9. package/dist/airs/types.d.ts.map +1 -1
  10. package/dist/cli/commands/dlp-gen.d.ts +3 -0
  11. package/dist/cli/commands/dlp-gen.d.ts.map +1 -0
  12. package/dist/cli/commands/dlp-gen.js +51 -0
  13. package/dist/cli/commands/dlp-gen.js.map +1 -0
  14. package/dist/cli/commands/redteam.d.ts +4 -0
  15. package/dist/cli/commands/redteam.d.ts.map +1 -1
  16. package/dist/cli/commands/redteam.js +35 -1
  17. package/dist/cli/commands/redteam.js.map +1 -1
  18. package/dist/cli/commands/runtime.d.ts.map +1 -1
  19. package/dist/cli/commands/runtime.js +5 -0
  20. package/dist/cli/commands/runtime.js.map +1 -1
  21. package/dist/dlp/embed/docx.d.ts +3 -0
  22. package/dist/dlp/embed/docx.d.ts.map +1 -0
  23. package/dist/dlp/embed/docx.js +47 -0
  24. package/dist/dlp/embed/docx.js.map +1 -0
  25. package/dist/dlp/embed/index.d.ts +6 -0
  26. package/dist/dlp/embed/index.d.ts.map +1 -0
  27. package/dist/dlp/embed/index.js +20 -0
  28. package/dist/dlp/embed/index.js.map +1 -0
  29. package/dist/dlp/embed/jpeg.d.ts +5 -0
  30. package/dist/dlp/embed/jpeg.d.ts.map +1 -0
  31. package/dist/dlp/embed/jpeg.js +60 -0
  32. package/dist/dlp/embed/jpeg.js.map +1 -0
  33. package/dist/dlp/embed/pdf.d.ts +7 -0
  34. package/dist/dlp/embed/pdf.d.ts.map +1 -0
  35. package/dist/dlp/embed/pdf.js +92 -0
  36. package/dist/dlp/embed/pdf.js.map +1 -0
  37. package/dist/dlp/embed/png-chunks.d.ts +12 -0
  38. package/dist/dlp/embed/png-chunks.d.ts.map +1 -0
  39. package/dist/dlp/embed/png-chunks.js +85 -0
  40. package/dist/dlp/embed/png-chunks.js.map +1 -0
  41. package/dist/dlp/embed/png.d.ts +5 -0
  42. package/dist/dlp/embed/png.d.ts.map +1 -0
  43. package/dist/dlp/embed/png.js +68 -0
  44. package/dist/dlp/embed/png.js.map +1 -0
  45. package/dist/dlp/embed/svg.d.ts +3 -0
  46. package/dist/dlp/embed/svg.d.ts.map +1 -0
  47. package/dist/dlp/embed/svg.js +28 -0
  48. package/dist/dlp/embed/svg.js.map +1 -0
  49. package/dist/dlp/embed/zip.d.ts +3 -0
  50. package/dist/dlp/embed/zip.d.ts.map +1 -0
  51. package/dist/dlp/embed/zip.js +25 -0
  52. package/dist/dlp/embed/zip.js.map +1 -0
  53. package/dist/dlp/generate/docx.d.ts +3 -0
  54. package/dist/dlp/generate/docx.d.ts.map +1 -0
  55. package/dist/dlp/generate/docx.js +20 -0
  56. package/dist/dlp/generate/docx.js.map +1 -0
  57. package/dist/dlp/generate/index.d.ts +5 -0
  58. package/dist/dlp/generate/index.d.ts.map +1 -0
  59. package/dist/dlp/generate/index.js +21 -0
  60. package/dist/dlp/generate/index.js.map +1 -0
  61. package/dist/dlp/generate/jpeg.d.ts +3 -0
  62. package/dist/dlp/generate/jpeg.d.ts.map +1 -0
  63. package/dist/dlp/generate/jpeg.js +8 -0
  64. package/dist/dlp/generate/jpeg.js.map +1 -0
  65. package/dist/dlp/generate/pdf.d.ts +3 -0
  66. package/dist/dlp/generate/pdf.d.ts.map +1 -0
  67. package/dist/dlp/generate/pdf.js +19 -0
  68. package/dist/dlp/generate/pdf.js.map +1 -0
  69. package/dist/dlp/generate/png.d.ts +3 -0
  70. package/dist/dlp/generate/png.d.ts.map +1 -0
  71. package/dist/dlp/generate/png.js +8 -0
  72. package/dist/dlp/generate/png.js.map +1 -0
  73. package/dist/dlp/generate/raster.d.ts +9 -0
  74. package/dist/dlp/generate/raster.d.ts.map +1 -0
  75. package/dist/dlp/generate/raster.js +20 -0
  76. package/dist/dlp/generate/raster.js.map +1 -0
  77. package/dist/dlp/generate/svg.d.ts +3 -0
  78. package/dist/dlp/generate/svg.d.ts.map +1 -0
  79. package/dist/dlp/generate/svg.js +17 -0
  80. package/dist/dlp/generate/svg.js.map +1 -0
  81. package/dist/dlp/index.d.ts +15 -0
  82. package/dist/dlp/index.d.ts.map +1 -0
  83. package/dist/dlp/index.js +54 -0
  84. package/dist/dlp/index.js.map +1 -0
  85. package/dist/dlp/lorem.d.ts +3 -0
  86. package/dist/dlp/lorem.d.ts.map +1 -0
  87. package/dist/dlp/lorem.js +65 -0
  88. package/dist/dlp/lorem.js.map +1 -0
  89. package/dist/dlp/manifest.d.ts +11 -0
  90. package/dist/dlp/manifest.d.ts.map +1 -0
  91. package/dist/dlp/manifest.js +14 -0
  92. package/dist/dlp/manifest.js.map +1 -0
  93. package/dist/dlp/payload.d.ts +6 -0
  94. package/dist/dlp/payload.d.ts.map +1 -0
  95. package/dist/dlp/payload.js +62 -0
  96. package/dist/dlp/payload.js.map +1 -0
  97. package/dist/dlp/rng.d.ts +9 -0
  98. package/dist/dlp/rng.d.ts.map +1 -0
  99. package/dist/dlp/rng.js +28 -0
  100. package/dist/dlp/rng.js.map +1 -0
  101. package/dist/dlp/types.d.ts +26 -0
  102. package/dist/dlp/types.d.ts.map +1 -0
  103. package/dist/dlp/types.js +2 -0
  104. package/dist/dlp/types.js.map +1 -0
  105. package/package.json +6 -2
@@ -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":"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"}
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/dlp/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cdot65/prisma-airs-cli",
3
3
  "packageManager": "pnpm@10.6.5",
4
- "version": "2.6.1",
4
+ "version": "2.8.0",
5
5
  "description": "CLI and library for Palo Alto Prisma AIRS — guardrail refinement, AI red teaming, model security scanning, profile audits",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
@@ -40,7 +40,7 @@
40
40
  "license": "MIT",
41
41
  "dependencies": {
42
42
  "@anthropic-ai/vertex-sdk": "^0.14.4",
43
- "@cdot65/prisma-airs-sdk": "^0.8.1",
43
+ "@cdot65/prisma-airs-sdk": "^0.8.3",
44
44
  "@inquirer/prompts": "^8.3.0",
45
45
  "@langchain/anthropic": "^1.3.25",
46
46
  "@langchain/aws": "^1.3.3",
@@ -49,10 +49,14 @@
49
49
  "@langchain/google-vertexai": "^2.1.26",
50
50
  "chalk": "^5.6.2",
51
51
  "commander": "^14.0.3",
52
+ "docx": "^9.6.1",
52
53
  "dotenv": "^17.3.1",
53
54
  "js-yaml": "^4.1.1",
54
55
  "nanoid": "^5.0.0",
55
56
  "p-limit": "^6.0.0",
57
+ "pdf-lib": "^1.17.1",
58
+ "piexifjs": "^1.0.6",
59
+ "sharp": "^0.34.5",
56
60
  "zod": "^3.24.0"
57
61
  },
58
62
  "devDependencies": {