@cdot65/prisma-airs-cli 2.8.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 (76) 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/runtime.d.ts.map +1 -1
  55. package/dist/cli/commands/runtime.js +5 -0
  56. package/dist/cli/commands/runtime.js.map +1 -1
  57. package/dist/cli/debug-logger.d.ts +1 -0
  58. package/dist/cli/debug-logger.d.ts.map +1 -1
  59. package/dist/cli/debug-logger.js +2 -1
  60. package/dist/cli/debug-logger.js.map +1 -1
  61. package/dist/cli/renderer/dlp.d.ts +31 -0
  62. package/dist/cli/renderer/dlp.d.ts.map +1 -0
  63. package/dist/cli/renderer/dlp.js +107 -0
  64. package/dist/cli/renderer/dlp.js.map +1 -0
  65. package/dist/cli/renderer/index.d.ts +1 -0
  66. package/dist/cli/renderer/index.d.ts.map +1 -1
  67. package/dist/cli/renderer/index.js +1 -0
  68. package/dist/cli/renderer/index.js.map +1 -1
  69. package/dist/config/loader.d.ts.map +1 -1
  70. package/dist/config/loader.js +1 -0
  71. package/dist/config/loader.js.map +1 -1
  72. package/dist/config/schema.d.ts +3 -0
  73. package/dist/config/schema.d.ts.map +1 -1
  74. package/dist/config/schema.js +1 -0
  75. package/dist/config/schema.js.map +1 -1
  76. package/package.json +2 -2
@@ -0,0 +1,166 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { basename } from 'node:path';
3
+ import { SdkDictionariesService } from '../../../airs/dlp/dictionaries.js';
4
+ import { dlpDictionaries, renderError } from '../../renderer/index.js';
5
+ import { buildMergePatch, parseBody } from './patch.js';
6
+ // biome-ignore lint/suspicious/noExplicitAny: opts object from commander
7
+ async function buildMetadata(opts) {
8
+ if (opts.metadataFile) {
9
+ return JSON.parse(await readFile(opts.metadataFile, 'utf-8'));
10
+ }
11
+ if (!opts.name || !opts.category || !opts.region || !opts.file) {
12
+ throw new Error('--name, --category, --region, and --file are required');
13
+ }
14
+ return {
15
+ name: opts.name,
16
+ category: opts.category,
17
+ region_name: opts.region,
18
+ original_file_name: basename(opts.file),
19
+ description: opts.description,
20
+ classification: opts.classification,
21
+ };
22
+ }
23
+ export function register(dlp) {
24
+ const group = dlp.command('dictionaries').description('DLP dictionaries (multipart upload)');
25
+ group
26
+ .command('list')
27
+ .description('List dictionaries')
28
+ .option('--page <n>', '', (v) => Number.parseInt(v, 10))
29
+ .option('--size <n>', '', (v) => Number.parseInt(v, 10))
30
+ .option('--sort <field,dir>', '(repeatable)', (v, p = []) => [...p, v])
31
+ .option('--keywords', 'Include keyword list in response')
32
+ .option('--include-keywords', 'Alias for --keywords')
33
+ .option('--output <fmt>', 'Output format', 'pretty')
34
+ .action(async (opts) => {
35
+ try {
36
+ const includeKeywords = opts.keywords || opts.includeKeywords;
37
+ dlpDictionaries.renderList(await new SdkDictionariesService().list({
38
+ page: opts.page,
39
+ size: opts.size,
40
+ sort: opts.sort,
41
+ keywords: includeKeywords ? true : undefined,
42
+ }), opts.output);
43
+ }
44
+ catch (err) {
45
+ renderError(err instanceof Error ? err.message : String(err));
46
+ process.exit(1);
47
+ }
48
+ });
49
+ group
50
+ .command('create')
51
+ .description('Create dictionary via multipart upload')
52
+ .option('--name <s>', '')
53
+ .option('--category <s>', '')
54
+ .option('--region <s>', '')
55
+ .option('--description <s>', '')
56
+ .option('--classification <s>', '')
57
+ .option('--file <path>', 'Keyword file')
58
+ .option('--metadata-file <path>', 'JSON metadata file (overrides --name/--category/...)')
59
+ .option('--include-keywords', 'Include keywords in response')
60
+ .action(async (opts) => {
61
+ try {
62
+ const metadata = await buildMetadata(opts);
63
+ if (!opts.file)
64
+ throw new Error('--file is required (multipart upload)');
65
+ const file = await readFile(opts.file);
66
+ const r = await new SdkDictionariesService().create({
67
+ metadata,
68
+ file,
69
+ includeKeywords: opts.includeKeywords,
70
+ });
71
+ dlpDictionaries.renderCreated(r, 'pretty');
72
+ }
73
+ catch (err) {
74
+ renderError(err instanceof Error ? err.message : String(err));
75
+ process.exit(2);
76
+ }
77
+ });
78
+ group
79
+ .command('get <id>')
80
+ .option('--keywords', '')
81
+ .option('--include-keywords', 'Alias for --keywords')
82
+ .option('--output <fmt>', 'Output format', 'pretty')
83
+ .action(async (id, opts) => {
84
+ try {
85
+ const includeKeywords = opts.keywords || opts.includeKeywords;
86
+ dlpDictionaries.renderGet(await new SdkDictionariesService().get(id, { includeKeywords }), opts.output);
87
+ }
88
+ catch (err) {
89
+ renderError(err instanceof Error ? err.message : String(err));
90
+ process.exit(1);
91
+ }
92
+ });
93
+ group
94
+ .command('replace <id>')
95
+ .description('Full-replace via multipart upload. --file required. May return 200 (body) ' +
96
+ 'or 204 (re-get; falls back to "(state not echoed)" on transient failure).')
97
+ .option('--name <s>', '')
98
+ .option('--category <s>', '')
99
+ .option('--region <s>', '')
100
+ .option('--description <s>', '')
101
+ .option('--classification <s>', '')
102
+ .option('--file <path>', 'Keyword file (required)')
103
+ .option('--metadata-file <path>', 'JSON metadata file')
104
+ .option('--include-keywords', '')
105
+ .option('--output <fmt>', 'Output format', 'pretty')
106
+ .action(async (id, opts) => {
107
+ try {
108
+ const metadata = await buildMetadata(opts);
109
+ if (!opts.file)
110
+ throw new Error('--file is required (multipart upload)');
111
+ const file = await readFile(opts.file);
112
+ const r = await new SdkDictionariesService().replace(id, {
113
+ metadata,
114
+ file,
115
+ includeKeywords: opts.includeKeywords,
116
+ });
117
+ if ('kind' in r && r.kind === 'fallback') {
118
+ dlpDictionaries.renderReplaced204Fallback(id);
119
+ }
120
+ else {
121
+ dlpDictionaries.renderReplaced(r, opts.output);
122
+ }
123
+ }
124
+ catch (err) {
125
+ renderError(err instanceof Error ? err.message : String(err));
126
+ process.exit(2);
127
+ }
128
+ });
129
+ group
130
+ .command('patch <id>')
131
+ .option('--body-file <path>', '')
132
+ .option('--set <k=v...>', '(repeatable)', (v, p = []) => [...p, v])
133
+ .option('--clear <key...>', '(repeatable)', (v, p = []) => [...p, v])
134
+ .option('--output <fmt>', 'Output format', 'pretty')
135
+ .action(async (id, opts) => {
136
+ try {
137
+ if (opts.bodyFile && (opts.set || opts.clear)) {
138
+ throw new Error('--body-file is mutually exclusive with --set/--clear');
139
+ }
140
+ const body = opts.bodyFile
141
+ ? await parseBody({ bodyFile: opts.bodyFile })
142
+ : buildMergePatch({ set: opts.set, clear: opts.clear });
143
+ dlpDictionaries.renderPatched(
144
+ // biome-ignore lint/suspicious/noExplicitAny: buildMergePatch returns Record<string, unknown>, cast for patch()
145
+ await new SdkDictionariesService().patch(id, body), opts.output);
146
+ }
147
+ catch (err) {
148
+ renderError(err instanceof Error ? err.message : String(err));
149
+ process.exit(2);
150
+ }
151
+ });
152
+ group
153
+ .command('delete <id>')
154
+ .description('Delete a dictionary')
155
+ .action(async (id) => {
156
+ try {
157
+ await new SdkDictionariesService().delete(id);
158
+ dlpDictionaries.renderDeleted(id);
159
+ }
160
+ catch (err) {
161
+ renderError(err instanceof Error ? err.message : String(err));
162
+ process.exit(1);
163
+ }
164
+ });
165
+ }
166
+ //# sourceMappingURL=dictionaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionaries.js","sourceRoot":"","sources":["../../../../src/cli/commands/dlp/dictionaries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function register(dlp: Command): void;
3
+ //# sourceMappingURL=filtering-profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtering-profiles.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dlp/filtering-profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAsD3C"}
@@ -0,0 +1,66 @@
1
+ import { SdkDataFilteringProfilesService } from '../../../airs/dlp/data-filtering-profiles.js';
2
+ import { dlpFilteringProfiles, renderError } from '../../renderer/index.js';
3
+ import { parseBody } from './patch.js';
4
+ function listFlags(cmd) {
5
+ return cmd
6
+ .option('--page <n>', 'Zero-indexed page number', (v) => Number.parseInt(v, 10))
7
+ .option('--size <n>', 'Page size', (v) => Number.parseInt(v, 10))
8
+ .option('--sort <field,dir>', 'Sort criteria (repeatable)', (v, prev = []) => [
9
+ ...prev,
10
+ v,
11
+ ])
12
+ .option('--output <fmt>', 'Output format', 'pretty');
13
+ }
14
+ export function register(dlp) {
15
+ const group = dlp
16
+ .command('filtering-profiles')
17
+ .description('DLP data filtering profiles. Read + full-replace only. ' +
18
+ 'Create, patch, and delete are not exposed by the DLP API.');
19
+ listFlags(group.command('list').description('List filtering profiles')).action(async (opts) => {
20
+ try {
21
+ const svc = new SdkDataFilteringProfilesService();
22
+ const r = await svc.list({ page: opts.page, size: opts.size, sort: opts.sort });
23
+ dlpFilteringProfiles.renderList(r, opts.output);
24
+ }
25
+ catch (err) {
26
+ renderError(err instanceof Error ? err.message : String(err));
27
+ process.exit(1);
28
+ }
29
+ });
30
+ group
31
+ .command('get <id>')
32
+ .description('Get a filtering profile by id')
33
+ .option('--output <fmt>', 'Output format', 'pretty')
34
+ .action(async (id, opts) => {
35
+ try {
36
+ const svc = new SdkDataFilteringProfilesService();
37
+ dlpFilteringProfiles.renderGet(await svc.get(id), opts.output);
38
+ }
39
+ catch (err) {
40
+ renderError(err instanceof Error ? err.message : String(err));
41
+ process.exit(1);
42
+ }
43
+ });
44
+ group
45
+ .command('replace <id>')
46
+ .description('Full-replace a filtering profile (PUT)')
47
+ .option('--body <json|->', 'JSON body (or "-" for stdin)')
48
+ .option('--body-file <path>', 'Path to JSON body file')
49
+ .option('--output <fmt>', 'Output format', 'pretty')
50
+ .action(async (id, opts) => {
51
+ try {
52
+ const body = await parseBody({ body: opts.body, bodyFile: opts.bodyFile });
53
+ if (!body)
54
+ throw new Error('--body or --body-file is required');
55
+ const svc = new SdkDataFilteringProfilesService();
56
+ dlpFilteringProfiles.renderReplaced(
57
+ // biome-ignore lint/suspicious/noExplicitAny: parseBody returns unknown, cast for replace()
58
+ await svc.replace(id, body), opts.output);
59
+ }
60
+ catch (err) {
61
+ renderError(err instanceof Error ? err.message : String(err));
62
+ process.exit(2);
63
+ }
64
+ });
65
+ }
66
+ //# sourceMappingURL=filtering-profiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filtering-profiles.js","sourceRoot":"","sources":["../../../../src/cli/commands/dlp/filtering-profiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerDlpCommands(runtime: Command): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dlp/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAW1D"}
@@ -0,0 +1,15 @@
1
+ import { register as registerDictionaries } from './dictionaries.js';
2
+ import { register as registerFilteringProfiles } from './filtering-profiles.js';
3
+ import { register as registerPatterns } from './patterns.js';
4
+ import { register as registerProfiles } from './profiles.js';
5
+ export function registerDlpCommands(runtime) {
6
+ const dlp = runtime
7
+ .command('dlp')
8
+ .description('DLP management (filtering-profiles, patterns, profiles, dictionaries). ' +
9
+ 'For the read-only DLP profile list used in Security Profiles, see `runtime dlp-profiles list`.');
10
+ registerFilteringProfiles(dlp);
11
+ registerPatterns(dlp);
12
+ registerProfiles(dlp);
13
+ registerDictionaries(dlp);
14
+ }
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/dlp/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CACV,yEAAyE;QACvE,gGAAgG,CACnG,CAAC;IACJ,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAC/B,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtB,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACtB,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Readable } from 'node:stream';
2
+ export interface BuildMergePatchOpts {
3
+ set?: string[];
4
+ clear?: string[];
5
+ }
6
+ /** Build a JSON Merge Patch object from --set/--clear CLI flags. Pure. */
7
+ export declare function buildMergePatch(opts: BuildMergePatchOpts): Record<string, unknown>;
8
+ export interface ParseBodyOpts {
9
+ body?: string;
10
+ bodyFile?: string;
11
+ stdin?: Readable;
12
+ }
13
+ /** Read --body or --body-file and JSON.parse. Returns undefined if neither supplied. */
14
+ export declare function parseBody(opts: ParseBodyOpts): Promise<unknown | undefined>;
15
+ //# sourceMappingURL=patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dlp/patch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyBlF;AAkBD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED,wFAAwF;AACxF,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAmBjF"}
@@ -0,0 +1,70 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ /** Build a JSON Merge Patch object from --set/--clear CLI flags. Pure. */
3
+ export function buildMergePatch(opts) {
4
+ const out = {};
5
+ for (const entry of opts.set ?? []) {
6
+ const eq = entry.indexOf('=');
7
+ if (eq < 1)
8
+ throw new Error(`--set expected key=value, got: ${entry}`);
9
+ const key = entry.slice(0, eq);
10
+ const raw = entry.slice(eq + 1);
11
+ if (key.includes('.')) {
12
+ throw new Error(`--set ${key}: use --body-file for nested fields`);
13
+ }
14
+ if (raw === 'null') {
15
+ throw new Error(`--set ${key}=null: to clear a field, use --clear ${key}`);
16
+ }
17
+ out[key] = coerceValue(raw);
18
+ }
19
+ for (const key of opts.clear ?? []) {
20
+ if (key.includes('.')) {
21
+ throw new Error(`--clear ${key}: use --body-file for nested fields`);
22
+ }
23
+ out[key] = null;
24
+ }
25
+ return out;
26
+ }
27
+ function coerceValue(raw) {
28
+ if (raw === 'true')
29
+ return true;
30
+ if (raw === 'false')
31
+ return false;
32
+ if (raw !== '' && !Number.isNaN(Number(raw)) && /^-?\d+(\.\d+)?$/.test(raw)) {
33
+ return Number(raw);
34
+ }
35
+ if (raw.startsWith('{') || raw.startsWith('[') || raw.startsWith('"')) {
36
+ try {
37
+ return JSON.parse(raw);
38
+ }
39
+ catch {
40
+ return raw;
41
+ }
42
+ }
43
+ return raw;
44
+ }
45
+ /** Read --body or --body-file and JSON.parse. Returns undefined if neither supplied. */
46
+ export async function parseBody(opts) {
47
+ let raw;
48
+ if (opts.bodyFile) {
49
+ raw = await readFile(opts.bodyFile, 'utf-8');
50
+ }
51
+ else if (opts.body === '-') {
52
+ const chunks = [];
53
+ for await (const chunk of opts.stdin ?? process.stdin) {
54
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
55
+ }
56
+ raw = Buffer.concat(chunks).toString('utf-8');
57
+ }
58
+ else if (opts.body !== undefined) {
59
+ raw = opts.body;
60
+ }
61
+ if (raw === undefined)
62
+ return undefined;
63
+ try {
64
+ return JSON.parse(raw);
65
+ }
66
+ catch (e) {
67
+ throw new Error(`invalid JSON in body: ${e.message}`);
68
+ }
69
+ }
70
+ //# sourceMappingURL=patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../../src/cli/commands/dlp/patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function register(dlp: Command): void;
3
+ //# sourceMappingURL=patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dlp/patterns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAyH3C"}
@@ -0,0 +1,120 @@
1
+ import { SdkDataPatternsService } from '../../../airs/dlp/data-patterns.js';
2
+ import { dlpPatterns, renderError } from '../../renderer/index.js';
3
+ import { buildMergePatch, parseBody } from './patch.js';
4
+ function listFlags(cmd) {
5
+ return cmd
6
+ .option('--page <n>', 'Zero-indexed page number', (v) => Number.parseInt(v, 10))
7
+ .option('--size <n>', 'Page size', (v) => Number.parseInt(v, 10))
8
+ .option('--sort <field,dir>', 'Sort criteria (repeatable)', (v, prev = []) => [
9
+ ...prev,
10
+ v,
11
+ ])
12
+ .option('--output <fmt>', 'Output format', 'pretty');
13
+ }
14
+ export function register(dlp) {
15
+ const group = dlp.command('patterns').description('DLP data patterns (full CRUD)');
16
+ listFlags(group.command('list').description('List data patterns')).action(async (opts) => {
17
+ try {
18
+ const svc = new SdkDataPatternsService();
19
+ dlpPatterns.renderList(await svc.list({ page: opts.page, size: opts.size, sort: opts.sort }), opts.output);
20
+ }
21
+ catch (err) {
22
+ renderError(err instanceof Error ? err.message : String(err));
23
+ process.exit(1);
24
+ }
25
+ });
26
+ group
27
+ .command('create')
28
+ .description('Create a data pattern')
29
+ .option('--body <json|->', 'JSON body (or "-" for stdin)')
30
+ .option('--body-file <path>', 'Path to JSON body file')
31
+ .option('--output <fmt>', 'Output format', 'pretty')
32
+ .action(async (opts) => {
33
+ try {
34
+ const body = await parseBody({ body: opts.body, bodyFile: opts.bodyFile });
35
+ if (!body)
36
+ throw new Error('--body or --body-file is required');
37
+ const svc = new SdkDataPatternsService();
38
+ dlpPatterns.renderCreated(
39
+ // biome-ignore lint/suspicious/noExplicitAny: parseBody returns unknown, cast for create()
40
+ await svc.create(body), opts.output);
41
+ }
42
+ catch (err) {
43
+ renderError(err instanceof Error ? err.message : String(err));
44
+ process.exit(2);
45
+ }
46
+ });
47
+ group
48
+ .command('get <id>')
49
+ .description('Get a data pattern by id')
50
+ .option('--output <fmt>', 'Output format', 'pretty')
51
+ .action(async (id, opts) => {
52
+ try {
53
+ dlpPatterns.renderGet(await new SdkDataPatternsService().get(id), opts.output);
54
+ }
55
+ catch (err) {
56
+ renderError(err instanceof Error ? err.message : String(err));
57
+ process.exit(1);
58
+ }
59
+ });
60
+ group
61
+ .command('replace <id>')
62
+ .description('Full-replace a data pattern (PUT)')
63
+ .option('--body <json|->', 'JSON body (or "-" for stdin)')
64
+ .option('--body-file <path>', 'Path to JSON body file')
65
+ .option('--output <fmt>', 'Output format', 'pretty')
66
+ .action(async (id, opts) => {
67
+ try {
68
+ const body = await parseBody({ body: opts.body, bodyFile: opts.bodyFile });
69
+ if (!body)
70
+ throw new Error('--body or --body-file is required');
71
+ dlpPatterns.renderReplaced(
72
+ // biome-ignore lint/suspicious/noExplicitAny: parseBody returns unknown, cast for replace()
73
+ await new SdkDataPatternsService().replace(id, body), opts.output);
74
+ }
75
+ catch (err) {
76
+ renderError(err instanceof Error ? err.message : String(err));
77
+ process.exit(2);
78
+ }
79
+ });
80
+ group
81
+ .command('patch <id>')
82
+ .description('JSON Merge Patch. Use --body-file for nested fields. ' +
83
+ '--set/--clear coerce values: numbers/booleans/JSON literals. ' +
84
+ 'To force a string, quote: --set count=\'"5"\'.')
85
+ .option('--body-file <path>', 'JSON merge-patch body file')
86
+ .option('--set <k=v...>', 'Set scalar field (repeatable)', (v, p = []) => [...p, v])
87
+ .option('--clear <key...>', 'Clear field via merge-patch null (repeatable)', (v, p = []) => [...p, v])
88
+ .option('--output <fmt>', 'Output format', 'pretty')
89
+ .action(async (id, opts) => {
90
+ try {
91
+ if (opts.bodyFile && (opts.set || opts.clear)) {
92
+ throw new Error('--body-file is mutually exclusive with --set/--clear');
93
+ }
94
+ const body = opts.bodyFile
95
+ ? await parseBody({ bodyFile: opts.bodyFile })
96
+ : buildMergePatch({ set: opts.set, clear: opts.clear });
97
+ dlpPatterns.renderPatched(
98
+ // biome-ignore lint/suspicious/noExplicitAny: buildMergePatch returns Record<string, unknown>, cast for patch()
99
+ await new SdkDataPatternsService().patch(id, body), opts.output);
100
+ }
101
+ catch (err) {
102
+ renderError(err instanceof Error ? err.message : String(err));
103
+ process.exit(2);
104
+ }
105
+ });
106
+ group
107
+ .command('delete <id>')
108
+ .description('Soft-delete (archive) a data pattern')
109
+ .action(async (id) => {
110
+ try {
111
+ await new SdkDataPatternsService().delete(id);
112
+ dlpPatterns.renderArchived(id);
113
+ }
114
+ catch (err) {
115
+ renderError(err instanceof Error ? err.message : String(err));
116
+ process.exit(1);
117
+ }
118
+ });
119
+ }
120
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../../src/cli/commands/dlp/patterns.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAqB,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAExD,SAAS,SAAS,CAAoB,GAAM;IAC1C,OAAO,GAAG;SACP,MAAM,CAAC,YAAY,EAAE,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAC/E,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAChE,MAAM,CAAC,oBAAoB,EAAE,4BAA4B,EAAE,CAAC,CAAC,EAAE,OAAiB,EAAE,EAAE,EAAE,CAAC;QACtF,GAAG,IAAI;QACP,CAAC;KACF,CAAC;SACD,MAAM,CAAC,gBAAgB,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;IAEnF,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACvF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,sBAAsB,EAAE,CAAC;YACzC,WAAW,CAAC,UAAU,CACpB,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EACrE,IAAI,CAAC,MAAsB,CAC5B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;SACzD,MAAM,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;SACtD,MAAM,CAAC,gBAAgB,EAAE,eAAe,EAAE,QAAQ,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAChE,MAAM,GAAG,GAAG,IAAI,sBAAsB,EAAE,CAAC;YACzC,WAAW,CAAC,aAAa;YACvB,2FAA2F;YAC3F,MAAM,GAAG,CAAC,MAAM,CAAC,IAAW,CAAC,EAC7B,IAAI,CAAC,MAAsB,CAC5B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,gBAAgB,EAAE,eAAe,EAAE,QAAQ,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,WAAW,CAAC,SAAS,CACnB,MAAM,IAAI,sBAAsB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAC1C,IAAI,CAAC,MAAsB,CAC5B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;SACzD,MAAM,CAAC,oBAAoB,EAAE,wBAAwB,CAAC;SACtD,MAAM,CAAC,gBAAgB,EAAE,eAAe,EAAE,QAAQ,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3E,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAChE,WAAW,CAAC,cAAc;YACxB,4FAA4F;YAC5F,MAAM,IAAI,sBAAsB,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,IAAW,CAAC,EAC3D,IAAI,CAAC,MAAsB,CAC5B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CACV,uDAAuD;QACrD,+DAA+D;QAC/D,gDAAgD,CACnD;SACA,MAAM,CAAC,oBAAoB,EAAE,4BAA4B,CAAC;SAC1D,MAAM,CAAC,gBAAgB,EAAE,+BAA+B,EAAE,CAAC,CAAC,EAAE,IAAc,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;SAC7F,MAAM,CACL,kBAAkB,EAClB,+CAA+C,EAC/C,CAAC,CAAC,EAAE,IAAc,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CACnC;SACA,MAAM,CAAC,gBAAgB,EAAE,eAAe,EAAE,QAAQ,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ;gBACxB,CAAC,CAAC,MAAM,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC9C,CAAC,CAAC,eAAe,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1D,WAAW,CAAC,aAAa;YACvB,gHAAgH;YAChH,MAAM,IAAI,sBAAsB,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,IAAW,CAAC,EACzD,IAAI,CAAC,MAAsB,CAC5B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,KAAK;SACF,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,sBAAsB,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9C,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function register(dlp: Command): void;
3
+ //# sourceMappingURL=profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/dlp/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAgI3C"}