nowaikit 4.11.0 → 4.12.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 (77) hide show
  1. package/desktop/renderer/dist/assets/index-DIXajM0H.js +55 -0
  2. package/desktop/renderer/dist/index.html +1 -1
  3. package/dist/cli/config-store.d.ts +1 -1
  4. package/dist/cli/config-store.d.ts.map +1 -1
  5. package/dist/cli/detect-clients.d.ts +1 -1
  6. package/dist/cli/detect-clients.d.ts.map +1 -1
  7. package/dist/cli/detect-clients.js +56 -12
  8. package/dist/cli/detect-clients.js.map +1 -1
  9. package/dist/cli/setup.js +2 -2
  10. package/dist/cli/setup.js.map +1 -1
  11. package/dist/cli/writers/index.d.ts.map +1 -1
  12. package/dist/cli/writers/index.js +20 -0
  13. package/dist/cli/writers/index.js.map +1 -1
  14. package/dist/direct/llm-client.js +2 -2
  15. package/dist/direct/llm-client.js.map +1 -1
  16. package/dist/server.d.ts.map +1 -1
  17. package/dist/server.js +2 -1
  18. package/dist/server.js.map +1 -1
  19. package/dist/servicenow/client.d.ts +12 -0
  20. package/dist/servicenow/client.d.ts.map +1 -1
  21. package/dist/servicenow/client.js +54 -0
  22. package/dist/servicenow/client.js.map +1 -1
  23. package/dist/tools/access-admin.d.ts +162 -0
  24. package/dist/tools/access-admin.d.ts.map +1 -0
  25. package/dist/tools/access-admin.js +216 -0
  26. package/dist/tools/access-admin.js.map +1 -0
  27. package/dist/tools/ai-agent-exec.d.ts +70 -0
  28. package/dist/tools/ai-agent-exec.d.ts.map +1 -0
  29. package/dist/tools/ai-agent-exec.js +73 -0
  30. package/dist/tools/ai-agent-exec.js.map +1 -0
  31. package/dist/tools/approvals-extra.d.ts +202 -0
  32. package/dist/tools/approvals-extra.d.ts.map +1 -0
  33. package/dist/tools/approvals-extra.js +212 -0
  34. package/dist/tools/approvals-extra.js.map +1 -0
  35. package/dist/tools/catalog-fulfillment.d.ts +349 -0
  36. package/dist/tools/catalog-fulfillment.d.ts.map +1 -0
  37. package/dist/tools/catalog-fulfillment.js +222 -0
  38. package/dist/tools/catalog-fulfillment.js.map +1 -0
  39. package/dist/tools/grc-extra.d.ts +149 -0
  40. package/dist/tools/grc-extra.d.ts.map +1 -0
  41. package/dist/tools/grc-extra.js +115 -0
  42. package/dist/tools/grc-extra.js.map +1 -0
  43. package/dist/tools/index.d.ts +1600 -107
  44. package/dist/tools/index.d.ts.map +1 -1
  45. package/dist/tools/index.js +38 -0
  46. package/dist/tools/index.js.map +1 -1
  47. package/dist/tools/oncall.d.ts +165 -0
  48. package/dist/tools/oncall.d.ts.map +1 -0
  49. package/dist/tools/oncall.js +155 -0
  50. package/dist/tools/oncall.js.map +1 -0
  51. package/dist/tools/platform-ops.d.ts +156 -0
  52. package/dist/tools/platform-ops.d.ts.map +1 -0
  53. package/dist/tools/platform-ops.js +141 -0
  54. package/dist/tools/platform-ops.js.map +1 -0
  55. package/dist/tools/service-mapping.d.ts +108 -0
  56. package/dist/tools/service-mapping.d.ts.map +1 -0
  57. package/dist/tools/service-mapping.js +144 -0
  58. package/dist/tools/service-mapping.js.map +1 -0
  59. package/dist/tools/service-portfolio.d.ts +93 -0
  60. package/dist/tools/service-portfolio.d.ts.map +1 -0
  61. package/dist/tools/service-portfolio.js +86 -0
  62. package/dist/tools/service-portfolio.js.map +1 -0
  63. package/dist/tools/sla.d.ts +222 -0
  64. package/dist/tools/sla.d.ts.map +1 -0
  65. package/dist/tools/sla.js +160 -0
  66. package/dist/tools/sla.js.map +1 -0
  67. package/dist/tools/sn-parity.d.ts +239 -0
  68. package/dist/tools/sn-parity.d.ts.map +1 -0
  69. package/dist/tools/sn-parity.js +236 -0
  70. package/dist/tools/sn-parity.js.map +1 -0
  71. package/dist/tools/survey.d.ts +140 -0
  72. package/dist/tools/survey.d.ts.map +1 -0
  73. package/dist/tools/survey.js +118 -0
  74. package/dist/tools/survey.js.map +1 -0
  75. package/dist/tools-manifest.json +1537 -0
  76. package/package.json +15 -8
  77. package/desktop/renderer/dist/assets/index-BQ4P9VJR.js +0 -49
@@ -0,0 +1,222 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ import { requireWrite } from '../utils/permissions.js';
3
+ export function getCatalogFulfillmentToolDefinitions() {
4
+ return [
5
+ {
6
+ name: 'get_request_item',
7
+ description: 'Get a requested item (RITM) with its variables, by number or sys_id',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ number: { type: 'string', description: 'RITM number (e.g. RITM0010001)' },
12
+ sys_id: { type: 'string', description: 'sys_id of the sc_req_item' },
13
+ },
14
+ required: [],
15
+ },
16
+ },
17
+ {
18
+ name: 'update_request_item',
19
+ description: 'Update the state/stage or fields of a requested item (sc_req_item). Requires WRITE_ENABLED=true',
20
+ inputSchema: {
21
+ type: 'object',
22
+ properties: {
23
+ sys_id: { type: 'string', description: 'sys_id of the RITM' },
24
+ state: { type: 'string', description: 'New state value' },
25
+ stage: { type: 'string', description: 'New stage value' },
26
+ fields: { type: 'object', description: 'Additional field values' },
27
+ },
28
+ required: ['sys_id'],
29
+ },
30
+ },
31
+ {
32
+ name: 'list_catalog_tasks',
33
+ description: 'List catalog fulfillment tasks (SCTASK), optionally by request item, assignment group, or state',
34
+ inputSchema: {
35
+ type: 'object',
36
+ properties: {
37
+ request_item: { type: 'string', description: 'Parent RITM sys_id' },
38
+ assignment_group: { type: 'string', description: 'Assignment group sys_id' },
39
+ active: { type: 'boolean', description: 'Filter to active tasks only' },
40
+ limit: { type: 'number', description: 'Max records (default 50)' },
41
+ },
42
+ required: [],
43
+ },
44
+ },
45
+ {
46
+ name: 'complete_catalog_task',
47
+ description: 'Close a catalog fulfillment task (sc_task) as complete. Requires WRITE_ENABLED=true',
48
+ inputSchema: {
49
+ type: 'object',
50
+ properties: {
51
+ sys_id: { type: 'string', description: 'sys_id of the SCTASK' },
52
+ close_notes: { type: 'string', description: 'Closure notes' },
53
+ state: { type: 'string', description: 'Closed state value (default 3 = Closed Complete)' },
54
+ },
55
+ required: ['sys_id'],
56
+ },
57
+ },
58
+ {
59
+ name: 'list_catalog_categories',
60
+ description: 'List catalog categories (sc_category), optionally filtered by catalog or title',
61
+ inputSchema: {
62
+ type: 'object',
63
+ properties: {
64
+ catalog: { type: 'string', description: 'Catalog sys_id to filter by' },
65
+ query: { type: 'string', description: 'Search categories by title' },
66
+ limit: { type: 'number', description: 'Max records (default 50)' },
67
+ },
68
+ required: [],
69
+ },
70
+ },
71
+ {
72
+ name: 'create_catalog_category',
73
+ description: 'Create a catalog category (sc_category). Requires WRITE_ENABLED=true',
74
+ inputSchema: {
75
+ type: 'object',
76
+ properties: {
77
+ title: { type: 'string', description: 'Category title' },
78
+ catalog: { type: 'string', description: 'Catalog sys_id (sc_catalog)' },
79
+ description: { type: 'string', description: 'Category description' },
80
+ parent: { type: 'string', description: 'Parent category sys_id (for sub-categories)' },
81
+ fields: { type: 'object', description: 'Additional field values' },
82
+ },
83
+ required: ['title'],
84
+ },
85
+ },
86
+ {
87
+ name: 'create_user_criteria',
88
+ description: 'Create a user criteria record (user_criteria) for catalog entitlement/audience. Requires WRITE_ENABLED=true',
89
+ inputSchema: {
90
+ type: 'object',
91
+ properties: {
92
+ name: { type: 'string', description: 'User criteria name' },
93
+ roles: { type: 'string', description: 'Comma-separated role sys_ids' },
94
+ groups: { type: 'string', description: 'Comma-separated group sys_ids' },
95
+ users: { type: 'string', description: 'Comma-separated user sys_ids' },
96
+ match_all: { type: 'boolean', description: 'Require all conditions to match' },
97
+ fields: { type: 'object', description: 'Additional field values' },
98
+ },
99
+ required: ['name'],
100
+ },
101
+ },
102
+ {
103
+ name: 'assign_user_criteria',
104
+ description: 'Attach a user criteria to a catalog item as available-for (sc_cat_item_user_criteria_mtom). Requires WRITE_ENABLED=true',
105
+ inputSchema: {
106
+ type: 'object',
107
+ properties: {
108
+ catalog_item: { type: 'string', description: 'sys_id of the catalog item (sc_cat_item)' },
109
+ user_criteria: { type: 'string', description: 'sys_id of the user_criteria record' },
110
+ },
111
+ required: ['catalog_item', 'user_criteria'],
112
+ },
113
+ },
114
+ ];
115
+ }
116
+ export async function executeCatalogFulfillmentToolCall(client, name, args) {
117
+ switch (name) {
118
+ case 'get_request_item': {
119
+ let ritm;
120
+ if (args.sys_id) {
121
+ ritm = await client.getRecord('sc_req_item', args.sys_id);
122
+ }
123
+ else if (args.number) {
124
+ const resp = await client.queryRecords({ table: 'sc_req_item', query: `number=${args.number}`, limit: 1 });
125
+ if (resp.count === 0)
126
+ throw new ServiceNowError(`RITM not found: ${args.number}`, 'NOT_FOUND');
127
+ ritm = resp.records[0];
128
+ }
129
+ else {
130
+ throw new ServiceNowError('number or sys_id is required', 'INVALID_REQUEST');
131
+ }
132
+ const sysId = ritm.sys_id;
133
+ const vars = await client
134
+ .queryRecords({ table: 'sc_item_option_mtom', query: `request_item=${sysId}`, fields: 'sc_item_option.item_option_new.question_text,sc_item_option.value', limit: 100 })
135
+ .catch(() => ({ records: [] }));
136
+ return { request_item: ritm, variables: vars.records };
137
+ }
138
+ case 'update_request_item': {
139
+ requireWrite();
140
+ if (!args.sys_id)
141
+ throw new ServiceNowError('sys_id is required', 'INVALID_REQUEST');
142
+ const payload = { ...(args.fields ?? {}) };
143
+ if (args.state !== undefined)
144
+ payload.state = args.state;
145
+ if (args.stage !== undefined)
146
+ payload.stage = args.stage;
147
+ const result = await client.updateRecord('sc_req_item', args.sys_id, payload);
148
+ return { ...result, summary: `Updated RITM ${args.sys_id}` };
149
+ }
150
+ case 'list_catalog_tasks': {
151
+ const parts = [];
152
+ if (args.request_item)
153
+ parts.push(`request_item=${args.request_item}`);
154
+ if (args.assignment_group)
155
+ parts.push(`assignment_group=${args.assignment_group}`);
156
+ if (args.active !== undefined)
157
+ parts.push(`active=${args.active ? 'true' : 'false'}`);
158
+ return await client.queryRecords({ table: 'sc_task', query: parts.join('^'), limit: args.limit ?? 50 });
159
+ }
160
+ case 'complete_catalog_task': {
161
+ requireWrite();
162
+ if (!args.sys_id)
163
+ throw new ServiceNowError('sys_id is required', 'INVALID_REQUEST');
164
+ const payload = { state: args.state ?? '3' };
165
+ if (args.close_notes)
166
+ payload.close_notes = args.close_notes;
167
+ const result = await client.updateRecord('sc_task', args.sys_id, payload);
168
+ return { ...result, summary: `Closed catalog task ${args.sys_id}` };
169
+ }
170
+ case 'list_catalog_categories': {
171
+ const parts = [];
172
+ if (args.catalog)
173
+ parts.push(`sc_catalog=${args.catalog}`);
174
+ if (args.query)
175
+ parts.push(`titleCONTAINS${args.query}`);
176
+ return await client.queryRecords({ table: 'sc_category', query: parts.join('^'), limit: args.limit ?? 50 });
177
+ }
178
+ case 'create_catalog_category': {
179
+ requireWrite();
180
+ if (!args.title)
181
+ throw new ServiceNowError('title is required', 'INVALID_REQUEST');
182
+ const payload = { title: args.title, ...(args.fields ?? {}) };
183
+ if (args.catalog)
184
+ payload.sc_catalog = args.catalog;
185
+ if (args.description)
186
+ payload.description = args.description;
187
+ if (args.parent)
188
+ payload.parent = args.parent;
189
+ const result = await client.createRecord('sc_category', payload);
190
+ return { ...result, summary: `Created catalog category "${args.title}"` };
191
+ }
192
+ case 'create_user_criteria': {
193
+ requireWrite();
194
+ if (!args.name)
195
+ throw new ServiceNowError('name is required', 'INVALID_REQUEST');
196
+ const payload = { name: args.name, ...(args.fields ?? {}) };
197
+ if (args.roles)
198
+ payload.role = args.roles;
199
+ if (args.groups)
200
+ payload.group = args.groups;
201
+ if (args.users)
202
+ payload.user = args.users;
203
+ if (args.match_all !== undefined)
204
+ payload.match_all = args.match_all ? 'true' : 'false';
205
+ const result = await client.createRecord('user_criteria', payload);
206
+ return { ...result, summary: `Created user criteria "${args.name}"` };
207
+ }
208
+ case 'assign_user_criteria': {
209
+ requireWrite();
210
+ if (!args.catalog_item || !args.user_criteria)
211
+ throw new ServiceNowError('catalog_item and user_criteria are required', 'INVALID_REQUEST');
212
+ const result = await client.createRecord('sc_cat_item_user_criteria_mtom', {
213
+ sc_cat_item: args.catalog_item,
214
+ user_criteria: args.user_criteria,
215
+ });
216
+ return { ...result, summary: `Linked user criteria ${args.user_criteria} to catalog item ${args.catalog_item}` };
217
+ }
218
+ default:
219
+ return null;
220
+ }
221
+ }
222
+ //# sourceMappingURL=catalog-fulfillment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-fulfillment.js","sourceRoot":"","sources":["../../src/tools/catalog-fulfillment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * GRC / IRM authoring depth (controls, issues, control tests).
3
+ * Read: Tier 0. Create/run: Tier 1 (WRITE_ENABLED=true).
4
+ *
5
+ * Tables (may vary by IRM version):
6
+ * sn_compliance_control — compliance controls
7
+ * sn_compliance_control_test — control tests/attestations
8
+ * sn_grc_issue — GRC issues/findings
9
+ */
10
+ import type { ServiceNowClient } from '../servicenow/client.js';
11
+ export declare function getGrcExtraToolDefinitions(): ({
12
+ name: string;
13
+ description: string;
14
+ inputSchema: {
15
+ type: string;
16
+ properties: {
17
+ state: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ owner: {
22
+ type: string;
23
+ description: string;
24
+ };
25
+ query: {
26
+ type: string;
27
+ description: string;
28
+ };
29
+ limit: {
30
+ type: string;
31
+ description: string;
32
+ };
33
+ short_description?: undefined;
34
+ description?: undefined;
35
+ source?: undefined;
36
+ fields?: undefined;
37
+ name?: undefined;
38
+ profile?: undefined;
39
+ control?: undefined;
40
+ result?: undefined;
41
+ notes?: undefined;
42
+ };
43
+ required: never[];
44
+ };
45
+ } | {
46
+ name: string;
47
+ description: string;
48
+ inputSchema: {
49
+ type: string;
50
+ properties: {
51
+ short_description: {
52
+ type: string;
53
+ description: string;
54
+ };
55
+ description: {
56
+ type: string;
57
+ description: string;
58
+ };
59
+ source: {
60
+ type: string;
61
+ description: string;
62
+ };
63
+ fields: {
64
+ type: string;
65
+ description: string;
66
+ };
67
+ state?: undefined;
68
+ owner?: undefined;
69
+ query?: undefined;
70
+ limit?: undefined;
71
+ name?: undefined;
72
+ profile?: undefined;
73
+ control?: undefined;
74
+ result?: undefined;
75
+ notes?: undefined;
76
+ };
77
+ required: string[];
78
+ };
79
+ } | {
80
+ name: string;
81
+ description: string;
82
+ inputSchema: {
83
+ type: string;
84
+ properties: {
85
+ name: {
86
+ type: string;
87
+ description: string;
88
+ };
89
+ description: {
90
+ type: string;
91
+ description: string;
92
+ };
93
+ profile: {
94
+ type: string;
95
+ description: string;
96
+ };
97
+ fields: {
98
+ type: string;
99
+ description: string;
100
+ };
101
+ state?: undefined;
102
+ owner?: undefined;
103
+ query?: undefined;
104
+ limit?: undefined;
105
+ short_description?: undefined;
106
+ source?: undefined;
107
+ control?: undefined;
108
+ result?: undefined;
109
+ notes?: undefined;
110
+ };
111
+ required: string[];
112
+ };
113
+ } | {
114
+ name: string;
115
+ description: string;
116
+ inputSchema: {
117
+ type: string;
118
+ properties: {
119
+ control: {
120
+ type: string;
121
+ description: string;
122
+ };
123
+ result: {
124
+ type: string;
125
+ description: string;
126
+ };
127
+ notes: {
128
+ type: string;
129
+ description: string;
130
+ };
131
+ fields: {
132
+ type: string;
133
+ description: string;
134
+ };
135
+ state?: undefined;
136
+ owner?: undefined;
137
+ query?: undefined;
138
+ limit?: undefined;
139
+ short_description?: undefined;
140
+ description?: undefined;
141
+ source?: undefined;
142
+ name?: undefined;
143
+ profile?: undefined;
144
+ };
145
+ required: string[];
146
+ };
147
+ })[];
148
+ export declare function executeGrcExtraToolCall(client: ServiceNowClient, name: string, args: Record<string, any>): Promise<any>;
149
+ //# sourceMappingURL=grc-extra.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grc-extra.d.ts","sourceRoot":"","sources":["../../src/tools/grc-extra.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,wBAAgB,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2DzC;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,GAAG,CAAC,CAuCd"}
@@ -0,0 +1,115 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ import { requireWrite } from '../utils/permissions.js';
3
+ export function getGrcExtraToolDefinitions() {
4
+ return [
5
+ {
6
+ name: 'list_grc_issues',
7
+ description: 'List GRC issues/findings (sn_grc_issue), optionally by state or owner',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ state: { type: 'string', description: 'Issue state filter' },
12
+ owner: { type: 'string', description: 'Owner/assigned user sys_id' },
13
+ query: { type: 'string', description: 'Search issues by short description' },
14
+ limit: { type: 'number', description: 'Max records (default 50)' },
15
+ },
16
+ required: [],
17
+ },
18
+ },
19
+ {
20
+ name: 'create_grc_issue',
21
+ description: 'Raise a GRC issue/finding (sn_grc_issue). Requires WRITE_ENABLED=true',
22
+ inputSchema: {
23
+ type: 'object',
24
+ properties: {
25
+ short_description: { type: 'string', description: 'Issue summary' },
26
+ description: { type: 'string', description: 'Full description' },
27
+ source: { type: 'string', description: 'Source record sys_id (control/risk/audit)' },
28
+ fields: { type: 'object', description: 'Additional field values' },
29
+ },
30
+ required: ['short_description'],
31
+ },
32
+ },
33
+ {
34
+ name: 'create_grc_control',
35
+ description: 'Author a compliance control (sn_compliance_control). Requires WRITE_ENABLED=true',
36
+ inputSchema: {
37
+ type: 'object',
38
+ properties: {
39
+ name: { type: 'string', description: 'Control name' },
40
+ description: { type: 'string', description: 'Control description' },
41
+ profile: { type: 'string', description: 'Related profile/entity sys_id' },
42
+ fields: { type: 'object', description: 'Additional field values' },
43
+ },
44
+ required: ['name'],
45
+ },
46
+ },
47
+ {
48
+ name: 'run_control_test',
49
+ description: 'Create/attest a control test (sn_compliance_control_test). Requires WRITE_ENABLED=true',
50
+ inputSchema: {
51
+ type: 'object',
52
+ properties: {
53
+ control: { type: 'string', description: 'sys_id of the control (sn_compliance_control)' },
54
+ result: { type: 'string', description: 'Test result/state (e.g. "pass", "fail")' },
55
+ notes: { type: 'string', description: 'Test notes/evidence' },
56
+ fields: { type: 'object', description: 'Additional field values' },
57
+ },
58
+ required: ['control'],
59
+ },
60
+ },
61
+ ];
62
+ }
63
+ export async function executeGrcExtraToolCall(client, name, args) {
64
+ switch (name) {
65
+ case 'list_grc_issues': {
66
+ const parts = [];
67
+ if (args.state)
68
+ parts.push(`state=${args.state}`);
69
+ if (args.owner)
70
+ parts.push(`assigned_to=${args.owner}`);
71
+ if (args.query)
72
+ parts.push(`short_descriptionCONTAINS${args.query}`);
73
+ return await client.queryRecords({ table: 'sn_grc_issue', query: parts.join('^'), limit: args.limit ?? 50 });
74
+ }
75
+ case 'create_grc_issue': {
76
+ requireWrite();
77
+ if (!args.short_description)
78
+ throw new ServiceNowError('short_description is required', 'INVALID_REQUEST');
79
+ const payload = { short_description: args.short_description, ...(args.fields ?? {}) };
80
+ if (args.description)
81
+ payload.description = args.description;
82
+ if (args.source)
83
+ payload.source = args.source;
84
+ const result = await client.createRecord('sn_grc_issue', payload);
85
+ return { ...result, summary: `Created GRC issue "${args.short_description}"` };
86
+ }
87
+ case 'create_grc_control': {
88
+ requireWrite();
89
+ if (!args.name)
90
+ throw new ServiceNowError('name is required', 'INVALID_REQUEST');
91
+ const payload = { name: args.name, ...(args.fields ?? {}) };
92
+ if (args.description)
93
+ payload.description = args.description;
94
+ if (args.profile)
95
+ payload.profile = args.profile;
96
+ const result = await client.createRecord('sn_compliance_control', payload);
97
+ return { ...result, summary: `Created control "${args.name}"` };
98
+ }
99
+ case 'run_control_test': {
100
+ requireWrite();
101
+ if (!args.control)
102
+ throw new ServiceNowError('control is required', 'INVALID_REQUEST');
103
+ const payload = { control: args.control, ...(args.fields ?? {}) };
104
+ if (args.result)
105
+ payload.state = args.result;
106
+ if (args.notes)
107
+ payload.notes = args.notes;
108
+ const result = await client.createRecord('sn_compliance_control_test', payload);
109
+ return { ...result, summary: `Recorded control test for ${args.control}` };
110
+ }
111
+ default:
112
+ return null;
113
+ }
114
+ }
115
+ //# sourceMappingURL=grc-extra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grc-extra.js","sourceRoot":"","sources":["../../src/tools/grc-extra.ts"],"names":[],"mappings":"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"}