@sonisoft/now-sdk-ext-core 2.2.1 → 2.4.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 (68) hide show
  1. package/dist/comm/http/RequestHandler.js +7 -11
  2. package/dist/comm/http/RequestHandler.js.map +1 -1
  3. package/dist/comm/http/TableAPIRequest.js +3 -10
  4. package/dist/comm/http/TableAPIRequest.js.map +1 -1
  5. package/dist/index.d.ts +18 -0
  6. package/dist/index.js +18 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/sn/BackgroundScriptExecutor.d.ts +34 -0
  9. package/dist/sn/BackgroundScriptExecutor.js +96 -0
  10. package/dist/sn/BackgroundScriptExecutor.js.map +1 -1
  11. package/dist/sn/application/ApplicationManager.d.ts +58 -1
  12. package/dist/sn/application/ApplicationManager.js +202 -11
  13. package/dist/sn/application/ApplicationManager.js.map +1 -1
  14. package/dist/sn/application/StoreApplicationModels.d.ts +99 -0
  15. package/dist/sn/application/StoreApplicationModels.js +2 -0
  16. package/dist/sn/application/StoreApplicationModels.js.map +1 -0
  17. package/dist/sn/attachment/AttachmentManager.d.ts +32 -0
  18. package/dist/sn/attachment/AttachmentManager.js +87 -0
  19. package/dist/sn/attachment/AttachmentManager.js.map +1 -0
  20. package/dist/sn/attachment/AttachmentModels.d.ts +28 -0
  21. package/dist/sn/attachment/AttachmentModels.js +2 -0
  22. package/dist/sn/attachment/AttachmentModels.js.map +1 -0
  23. package/dist/sn/batch/BatchModels.d.ts +90 -0
  24. package/dist/sn/batch/BatchModels.js +5 -0
  25. package/dist/sn/batch/BatchModels.js.map +1 -0
  26. package/dist/sn/batch/BatchOperations.d.ts +40 -0
  27. package/dist/sn/batch/BatchOperations.js +169 -0
  28. package/dist/sn/batch/BatchOperations.js.map +1 -0
  29. package/dist/sn/schema/SchemaDiscovery.d.ts +68 -0
  30. package/dist/sn/schema/SchemaDiscovery.js +346 -0
  31. package/dist/sn/schema/SchemaDiscovery.js.map +1 -0
  32. package/dist/sn/schema/SchemaModels.d.ts +277 -0
  33. package/dist/sn/schema/SchemaModels.js +5 -0
  34. package/dist/sn/schema/SchemaModels.js.map +1 -0
  35. package/dist/sn/scope/ScopeManager.d.ts +51 -0
  36. package/dist/sn/scope/ScopeManager.js +177 -0
  37. package/dist/sn/scope/ScopeManager.js.map +1 -0
  38. package/dist/sn/scope/ScopeModels.d.ts +66 -0
  39. package/dist/sn/scope/ScopeModels.js +5 -0
  40. package/dist/sn/scope/ScopeModels.js.map +1 -0
  41. package/dist/sn/scriptsync/ScriptSync.d.ts +38 -0
  42. package/dist/sn/scriptsync/ScriptSync.js +266 -0
  43. package/dist/sn/scriptsync/ScriptSync.js.map +1 -0
  44. package/dist/sn/scriptsync/ScriptSyncModels.d.ts +55 -0
  45. package/dist/sn/scriptsync/ScriptSyncModels.js +8 -0
  46. package/dist/sn/scriptsync/ScriptSyncModels.js.map +1 -0
  47. package/dist/sn/scriptsync/ScriptWatcher.d.ts +30 -0
  48. package/dist/sn/scriptsync/ScriptWatcher.js +74 -0
  49. package/dist/sn/scriptsync/ScriptWatcher.js.map +1 -0
  50. package/dist/sn/task/TaskModels.d.ts +85 -0
  51. package/dist/sn/task/TaskModels.js +5 -0
  52. package/dist/sn/task/TaskModels.js.map +1 -0
  53. package/dist/sn/task/TaskOperations.d.ts +63 -0
  54. package/dist/sn/task/TaskOperations.js +195 -0
  55. package/dist/sn/task/TaskOperations.js.map +1 -0
  56. package/dist/sn/updateset/UpdateSetManager.d.ts +78 -0
  57. package/dist/sn/updateset/UpdateSetManager.js +391 -0
  58. package/dist/sn/updateset/UpdateSetManager.js.map +1 -0
  59. package/dist/sn/updateset/UpdateSetModels.d.ts +177 -0
  60. package/dist/sn/updateset/UpdateSetModels.js +5 -0
  61. package/dist/sn/updateset/UpdateSetModels.js.map +1 -0
  62. package/dist/sn/workflow/WorkflowManager.d.ts +81 -0
  63. package/dist/sn/workflow/WorkflowManager.js +388 -0
  64. package/dist/sn/workflow/WorkflowManager.js.map +1 -0
  65. package/dist/sn/workflow/WorkflowModels.d.ts +242 -0
  66. package/dist/sn/workflow/WorkflowModels.js +5 -0
  67. package/dist/sn/workflow/WorkflowModels.js.map +1 -0
  68. package/package.json +5 -5
@@ -0,0 +1,391 @@
1
+ import { Logger } from "../../util/Logger.js";
2
+ import { ServiceNowRequest } from "../../comm/http/ServiceNowRequest.js";
3
+ import { TableAPIRequest } from "../../comm/http/TableAPIRequest.js";
4
+ /**
5
+ * UpdateSetManager provides operations for managing ServiceNow update sets.
6
+ * Supports setting/getting the current update set, listing, creating,
7
+ * moving records between update sets, cloning, and inspecting update sets.
8
+ */
9
+ export class UpdateSetManager {
10
+ static UI_UPDATESET_PATH = '/api/now/ui/concoursepicker/updateset';
11
+ static UI_PREF_UPDATESET_PATH = '/api/now/ui/preferences/sys_update_set';
12
+ static UPDATE_SET_TABLE = 'sys_update_set';
13
+ static UPDATE_XML_TABLE = 'sys_update_xml';
14
+ _logger = new Logger("UpdateSetManager");
15
+ _req;
16
+ _tableAPI;
17
+ _instance;
18
+ constructor(instance) {
19
+ this._instance = instance;
20
+ this._req = new ServiceNowRequest(instance);
21
+ this._tableAPI = new TableAPIRequest(instance);
22
+ }
23
+ /**
24
+ * Set the current update set for the session.
25
+ * Uses PUT /api/now/ui/concoursepicker/updateset
26
+ *
27
+ * @param options The update set name and sysId to set as current
28
+ * @throws Error if name or sysId is empty or if the API call fails
29
+ */
30
+ async setCurrentUpdateSet(options) {
31
+ if (!options.name || options.name.trim().length === 0) {
32
+ throw new Error('Update set name is required');
33
+ }
34
+ if (!options.sysId || options.sysId.trim().length === 0) {
35
+ throw new Error('Update set sysId is required');
36
+ }
37
+ this._logger.info(`Setting current update set to: ${options.name} (${options.sysId})`);
38
+ const request = {
39
+ method: 'PUT',
40
+ path: UpdateSetManager.UI_UPDATESET_PATH,
41
+ headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
42
+ query: null,
43
+ body: null,
44
+ json: { name: options.name, sysId: options.sysId }
45
+ };
46
+ const resp = await this._req.put(request);
47
+ if (resp.status !== 200) {
48
+ throw new Error(`Failed to set current update set. Status: ${resp.status}`);
49
+ }
50
+ this._logger.info(`Successfully set current update set to: ${options.name}`);
51
+ }
52
+ /**
53
+ * Get the current update set from the session preferences.
54
+ * Uses GET /api/now/ui/preferences/sys_update_set
55
+ *
56
+ * @returns The current update set record or null if not set
57
+ */
58
+ async getCurrentUpdateSet() {
59
+ this._logger.info('Getting current update set');
60
+ const request = {
61
+ method: 'GET',
62
+ path: UpdateSetManager.UI_PREF_UPDATESET_PATH,
63
+ headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' },
64
+ query: null,
65
+ body: null
66
+ };
67
+ const resp = await this._req.get(request);
68
+ if (resp.status === 200 && resp.bodyObject?.result) {
69
+ this._logger.info(`Current update set: ${resp.bodyObject.result.name}`);
70
+ return resp.bodyObject.result;
71
+ }
72
+ throw new Error(`Failed to get current update set. Status: ${resp.status}`);
73
+ }
74
+ /**
75
+ * List update sets from the sys_update_set table.
76
+ * Uses Table API GET on sys_update_set.
77
+ *
78
+ * @param options Optional query, limit, and fields options
79
+ * @returns Array of UpdateSetRecord
80
+ */
81
+ async listUpdateSets(options = {}) {
82
+ const { encodedQuery, limit = 100, fields } = options;
83
+ this._logger.info(`Listing update sets with query: ${encodedQuery || 'none'}`);
84
+ const query = {
85
+ sysparm_limit: limit
86
+ };
87
+ if (encodedQuery) {
88
+ query.sysparm_query = encodedQuery;
89
+ }
90
+ if (fields) {
91
+ query.sysparm_fields = fields;
92
+ }
93
+ const response = await this._tableAPI.get(UpdateSetManager.UPDATE_SET_TABLE, query);
94
+ if (response.status === 200 && response.bodyObject?.result) {
95
+ this._logger.info(`Retrieved ${response.bodyObject.result.length} update sets`);
96
+ return response.bodyObject.result;
97
+ }
98
+ throw new Error(`Failed to list update sets. Status: ${response.status}`);
99
+ }
100
+ /**
101
+ * Create a new update set.
102
+ * Uses Table API POST on sys_update_set.
103
+ *
104
+ * @param options The update set name and optional description, application, state
105
+ * @returns The created UpdateSetRecord
106
+ * @throws Error if name is empty or if the API call fails
107
+ */
108
+ async createUpdateSet(options) {
109
+ if (!options.name || options.name.trim().length === 0) {
110
+ throw new Error('Update set name is required');
111
+ }
112
+ this._logger.info(`Creating update set: ${options.name}`);
113
+ const body = {
114
+ name: options.name,
115
+ state: options.state || 'in progress'
116
+ };
117
+ if (options.description) {
118
+ body.description = options.description;
119
+ }
120
+ if (options.application) {
121
+ body.application = options.application;
122
+ }
123
+ const response = await this._tableAPI.post(UpdateSetManager.UPDATE_SET_TABLE, {}, body);
124
+ if (response && (response.status === 200 || response.status === 201) && response.bodyObject?.result) {
125
+ this._logger.info(`Created update set: ${options.name} with sys_id: ${response.bodyObject.result.sys_id}`);
126
+ return response.bodyObject.result;
127
+ }
128
+ throw new Error(`Failed to create update set '${options.name}'. Status: ${response?.status ?? 'unknown'}`);
129
+ }
130
+ /**
131
+ * Move records to a target update set.
132
+ * Queries sys_update_xml records based on options and updates each to the target update set.
133
+ *
134
+ * @param targetUpdateSetId The sys_id of the target update set
135
+ * @param options Options for selecting which records to move
136
+ * @returns Result summary of the move operation
137
+ * @throws Error if targetUpdateSetId is empty or no selection criteria provided
138
+ */
139
+ async moveRecordsToUpdateSet(targetUpdateSetId, options = {}) {
140
+ if (!targetUpdateSetId || targetUpdateSetId.trim().length === 0) {
141
+ throw new Error('Target update set ID is required');
142
+ }
143
+ if (!options.recordSysIds && !options.timeRange && !options.sourceUpdateSet) {
144
+ throw new Error('At least one selection criteria is required: recordSysIds, timeRange, or sourceUpdateSet');
145
+ }
146
+ this._logger.info(`Moving records to update set: ${targetUpdateSetId}`);
147
+ const result = {
148
+ moved: 0,
149
+ failed: 0,
150
+ records: [],
151
+ errors: []
152
+ };
153
+ let records = [];
154
+ if (options.recordSysIds && options.recordSysIds.length > 0) {
155
+ // Fetch specific records by sys_id
156
+ const sysIdQuery = `sys_idIN${options.recordSysIds.join(',')}`;
157
+ const queryParams = {
158
+ sysparm_query: sysIdQuery,
159
+ sysparm_limit: options.recordSysIds.length
160
+ };
161
+ const resp = await this._tableAPI.get(UpdateSetManager.UPDATE_XML_TABLE, queryParams);
162
+ if (resp.status === 200 && resp.bodyObject?.result) {
163
+ records = resp.bodyObject.result;
164
+ }
165
+ }
166
+ else if (options.sourceUpdateSet) {
167
+ // Fetch records from a source update set
168
+ let encodedQuery = `update_set=${options.sourceUpdateSet}`;
169
+ if (options.timeRange) {
170
+ encodedQuery += `^sys_created_onBETWEEN${options.timeRange.start}@${options.timeRange.end}`;
171
+ }
172
+ const queryParams = {
173
+ sysparm_query: encodedQuery,
174
+ sysparm_limit: 1000
175
+ };
176
+ const resp = await this._tableAPI.get(UpdateSetManager.UPDATE_XML_TABLE, queryParams);
177
+ if (resp.status === 200 && resp.bodyObject?.result) {
178
+ records = resp.bodyObject.result;
179
+ }
180
+ }
181
+ else if (options.timeRange) {
182
+ const encodedQuery = `sys_created_onBETWEEN${options.timeRange.start}@${options.timeRange.end}`;
183
+ const queryParams = {
184
+ sysparm_query: encodedQuery,
185
+ sysparm_limit: 1000
186
+ };
187
+ const resp = await this._tableAPI.get(UpdateSetManager.UPDATE_XML_TABLE, queryParams);
188
+ if (resp.status === 200 && resp.bodyObject?.result) {
189
+ records = resp.bodyObject.result;
190
+ }
191
+ }
192
+ // Move each record to the target update set
193
+ for (const record of records) {
194
+ try {
195
+ if (options.onProgress) {
196
+ options.onProgress(`Moving record ${record.sys_id} (${record.name || record.type || 'unknown'})`);
197
+ }
198
+ const putResp = await this._tableAPI.put(UpdateSetManager.UPDATE_XML_TABLE, record.sys_id, { update_set: targetUpdateSetId });
199
+ if (putResp && (putResp.status === 200 || putResp.status === 201)) {
200
+ result.moved++;
201
+ result.records.push({
202
+ sys_id: record.sys_id,
203
+ name: record.name,
204
+ type: record.type,
205
+ status: 'moved'
206
+ });
207
+ }
208
+ else {
209
+ result.failed++;
210
+ result.records.push({
211
+ sys_id: record.sys_id,
212
+ name: record.name,
213
+ type: record.type,
214
+ status: 'failed'
215
+ });
216
+ result.errors.push({
217
+ sys_id: record.sys_id,
218
+ error: `Unexpected status: ${putResp?.status ?? 'unknown'}`
219
+ });
220
+ }
221
+ }
222
+ catch (err) {
223
+ result.failed++;
224
+ result.records.push({
225
+ sys_id: record.sys_id,
226
+ name: record.name,
227
+ type: record.type,
228
+ status: 'failed'
229
+ });
230
+ result.errors.push({
231
+ sys_id: record.sys_id,
232
+ error: err instanceof Error ? err.message : String(err)
233
+ });
234
+ }
235
+ }
236
+ this._logger.info(`Move complete: ${result.moved} moved, ${result.failed} failed`);
237
+ return result;
238
+ }
239
+ /**
240
+ * Clone an update set by creating a new update set and copying all sys_update_xml records.
241
+ *
242
+ * @param sourceUpdateSetId The sys_id of the source update set to clone
243
+ * @param newName The name for the new cloned update set
244
+ * @param onProgress Optional callback for progress updates
245
+ * @returns Result of the clone operation
246
+ * @throws Error if sourceUpdateSetId or newName is empty
247
+ */
248
+ async cloneUpdateSet(sourceUpdateSetId, newName, onProgress) {
249
+ if (!sourceUpdateSetId || sourceUpdateSetId.trim().length === 0) {
250
+ throw new Error('Source update set ID is required');
251
+ }
252
+ if (!newName || newName.trim().length === 0) {
253
+ throw new Error('New update set name is required');
254
+ }
255
+ this._logger.info(`Cloning update set ${sourceUpdateSetId} as "${newName}"`);
256
+ if (onProgress) {
257
+ onProgress('Fetching source update set...');
258
+ }
259
+ // Get the source update set
260
+ const sourceQuery = {
261
+ sysparm_query: `sys_id=${sourceUpdateSetId}`,
262
+ sysparm_limit: 1
263
+ };
264
+ const sourceResp = await this._tableAPI.get(UpdateSetManager.UPDATE_SET_TABLE, sourceQuery);
265
+ if (!sourceResp || sourceResp.status !== 200 || !sourceResp.bodyObject?.result || sourceResp.bodyObject.result.length === 0) {
266
+ throw new Error(`Source update set '${sourceUpdateSetId}' not found`);
267
+ }
268
+ const sourceSet = sourceResp.bodyObject.result[0];
269
+ if (onProgress) {
270
+ onProgress(`Found source update set: ${sourceSet.name}`);
271
+ }
272
+ // Create the new update set
273
+ const newSetBody = {
274
+ name: newName,
275
+ state: 'in progress'
276
+ };
277
+ if (sourceSet.description) {
278
+ newSetBody.description = sourceSet.description;
279
+ }
280
+ if (sourceSet.application) {
281
+ newSetBody.application = sourceSet.application;
282
+ }
283
+ const createResp = await this._tableAPI.post(UpdateSetManager.UPDATE_SET_TABLE, {}, newSetBody);
284
+ if (!createResp || (createResp.status !== 200 && createResp.status !== 201) || !createResp.bodyObject?.result) {
285
+ throw new Error(`Failed to create new update set '${newName}'. Status: ${createResp?.status ?? 'unknown'}`);
286
+ }
287
+ const newSet = createResp.bodyObject.result;
288
+ if (onProgress) {
289
+ onProgress(`Created new update set: ${newSet.name} (${newSet.sys_id})`);
290
+ }
291
+ // Get all sys_update_xml records from the source update set
292
+ const xmlQuery = {
293
+ sysparm_query: `update_set=${sourceUpdateSetId}`,
294
+ sysparm_limit: 10000
295
+ };
296
+ const xmlResp = await this._tableAPI.get(UpdateSetManager.UPDATE_XML_TABLE, xmlQuery);
297
+ const sourceRecords = (xmlResp.status === 200 && xmlResp.bodyObject?.result) ? xmlResp.bodyObject.result : [];
298
+ let recordsCloned = 0;
299
+ if (onProgress) {
300
+ onProgress(`Found ${sourceRecords.length} records to clone`);
301
+ }
302
+ // Clone each record into the new update set
303
+ for (const record of sourceRecords) {
304
+ try {
305
+ const cloneBody = {
306
+ update_set: newSet.sys_id,
307
+ name: record.name,
308
+ type: record.type,
309
+ target_name: record.target_name,
310
+ payload: record.payload,
311
+ category: record.category
312
+ };
313
+ const cloneResp = await this._tableAPI.post(UpdateSetManager.UPDATE_XML_TABLE, {}, cloneBody);
314
+ if (cloneResp && (cloneResp.status === 200 || cloneResp.status === 201)) {
315
+ recordsCloned++;
316
+ if (onProgress) {
317
+ onProgress(`Cloned record ${recordsCloned}/${sourceRecords.length}: ${record.name || record.type || 'unknown'}`);
318
+ }
319
+ }
320
+ }
321
+ catch (err) {
322
+ this._logger.error(`Failed to clone record ${record.sys_id}: ${err instanceof Error ? err.message : String(err)}`);
323
+ }
324
+ }
325
+ this._logger.info(`Clone complete: ${recordsCloned}/${sourceRecords.length} records cloned`);
326
+ return {
327
+ newUpdateSetId: newSet.sys_id,
328
+ newUpdateSetName: newSet.name,
329
+ sourceUpdateSetId: sourceUpdateSetId,
330
+ sourceUpdateSetName: sourceSet.name,
331
+ recordsCloned: recordsCloned,
332
+ totalSourceRecords: sourceRecords.length
333
+ };
334
+ }
335
+ /**
336
+ * Inspect an update set by querying its sys_update_xml records and grouping by type.
337
+ *
338
+ * @param updateSetSysId The sys_id of the update set to inspect
339
+ * @returns Inspection result with grouped components
340
+ * @throws Error if updateSetSysId is empty or the update set is not found
341
+ */
342
+ async inspectUpdateSet(updateSetSysId) {
343
+ if (!updateSetSysId || updateSetSysId.trim().length === 0) {
344
+ throw new Error('Update set sys_id is required');
345
+ }
346
+ this._logger.info(`Inspecting update set: ${updateSetSysId}`);
347
+ // Get the update set record
348
+ const setQuery = {
349
+ sysparm_query: `sys_id=${updateSetSysId}`,
350
+ sysparm_limit: 1
351
+ };
352
+ const setResp = await this._tableAPI.get(UpdateSetManager.UPDATE_SET_TABLE, setQuery);
353
+ if (!setResp || setResp.status !== 200 || !setResp.bodyObject?.result || setResp.bodyObject.result.length === 0) {
354
+ throw new Error(`Update set '${updateSetSysId}' not found`);
355
+ }
356
+ const updateSet = setResp.bodyObject.result[0];
357
+ // Get all sys_update_xml records for this update set
358
+ const xmlQuery = {
359
+ sysparm_query: `update_set=${updateSetSysId}`,
360
+ sysparm_limit: 10000
361
+ };
362
+ const xmlResp = await this._tableAPI.get(UpdateSetManager.UPDATE_XML_TABLE, xmlQuery);
363
+ const records = (xmlResp.status === 200 && xmlResp.bodyObject?.result) ? xmlResp.bodyObject.result : [];
364
+ // Group records by type
365
+ const typeGroups = new Map();
366
+ for (const record of records) {
367
+ const type = record.type || 'unknown';
368
+ if (!typeGroups.has(type)) {
369
+ typeGroups.set(type, []);
370
+ }
371
+ typeGroups.get(type).push(record.target_name || record.name || record.sys_id);
372
+ }
373
+ const components = Array.from(typeGroups.entries()).map(([type, items]) => ({
374
+ type,
375
+ count: items.length,
376
+ items
377
+ }));
378
+ this._logger.info(`Inspection complete: ${records.length} records in ${components.length} component types`);
379
+ return {
380
+ updateSet: {
381
+ sys_id: updateSet.sys_id,
382
+ name: updateSet.name,
383
+ state: updateSet.state,
384
+ description: updateSet.description
385
+ },
386
+ totalRecords: records.length,
387
+ components
388
+ };
389
+ }
390
+ }
391
+ //# sourceMappingURL=UpdateSetManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateSetManager.js","sourceRoot":"","sources":["../../../src/sn/updateset/UpdateSetManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * A record from the sys_update_set table.
3
+ */
4
+ export interface UpdateSetRecord {
5
+ /** System ID */
6
+ sys_id: string;
7
+ /** Name of the update set */
8
+ name: string;
9
+ /** Description of the update set */
10
+ description?: string;
11
+ /** State of the update set (e.g., "in progress", "complete") */
12
+ state: string;
13
+ /** Application scope reference */
14
+ application?: string;
15
+ /** Created timestamp */
16
+ sys_created_on?: string;
17
+ /** Updated timestamp */
18
+ sys_updated_on?: string;
19
+ /** Created by user */
20
+ sys_created_by?: string;
21
+ /** Additional fields */
22
+ [key: string]: unknown;
23
+ }
24
+ /**
25
+ * A record from the sys_update_xml table.
26
+ */
27
+ export interface UpdateXmlRecord {
28
+ /** System ID */
29
+ sys_id: string;
30
+ /** Name of the update XML record */
31
+ name?: string;
32
+ /** Type of the record (e.g., "sys_script_include") */
33
+ type?: string;
34
+ /** Target name of the record */
35
+ target_name?: string;
36
+ /** Reference to the parent update set */
37
+ update_set: string;
38
+ /** XML payload */
39
+ payload?: string;
40
+ /** Category of the update */
41
+ category?: string;
42
+ /** Created timestamp */
43
+ sys_created_on?: string;
44
+ /** Additional fields */
45
+ [key: string]: unknown;
46
+ }
47
+ /**
48
+ * Options for setting the current update set.
49
+ */
50
+ export interface SetUpdateSetOptions {
51
+ /** Name of the update set */
52
+ name: string;
53
+ /** sys_id of the update set */
54
+ sysId: string;
55
+ }
56
+ /**
57
+ * Options for listing update sets.
58
+ */
59
+ export interface ListUpdateSetsOptions {
60
+ /** Encoded query string for filtering */
61
+ encodedQuery?: string;
62
+ /** Maximum number of records to return */
63
+ limit?: number;
64
+ /** Comma-separated list of fields to return */
65
+ fields?: string;
66
+ }
67
+ /**
68
+ * Options for creating a new update set.
69
+ */
70
+ export interface CreateUpdateSetOptions {
71
+ /** Name of the update set */
72
+ name: string;
73
+ /** Description of the update set */
74
+ description?: string;
75
+ /** Application scope sys_id */
76
+ application?: string;
77
+ /** State of the update set (defaults to "in progress") */
78
+ state?: string;
79
+ }
80
+ /**
81
+ * Options for moving records between update sets.
82
+ */
83
+ export interface MoveRecordsOptions {
84
+ /** Specific record sys_ids to move */
85
+ recordSysIds?: string[];
86
+ /** Time range to select records */
87
+ timeRange?: {
88
+ start: string;
89
+ end: string;
90
+ };
91
+ /** Source update set sys_id to move records from */
92
+ sourceUpdateSet?: string;
93
+ /** Callback for progress updates */
94
+ onProgress?: (message: string) => void;
95
+ }
96
+ /**
97
+ * Result of moving records between update sets.
98
+ */
99
+ export interface MoveRecordsResult {
100
+ /** Number of records successfully moved */
101
+ moved: number;
102
+ /** Number of records that failed to move */
103
+ failed: number;
104
+ /** Details of each record processed */
105
+ records: Array<{
106
+ sys_id: string;
107
+ name?: string;
108
+ type?: string;
109
+ status: string;
110
+ }>;
111
+ /** Details of errors encountered */
112
+ errors: Array<{
113
+ sys_id: string;
114
+ error: string;
115
+ }>;
116
+ }
117
+ /**
118
+ * Result of cloning an update set.
119
+ */
120
+ export interface CloneUpdateSetResult {
121
+ /** sys_id of the newly created update set */
122
+ newUpdateSetId: string;
123
+ /** Name of the newly created update set */
124
+ newUpdateSetName: string;
125
+ /** sys_id of the source update set */
126
+ sourceUpdateSetId: string;
127
+ /** Name of the source update set */
128
+ sourceUpdateSetName: string;
129
+ /** Number of records cloned */
130
+ recordsCloned: number;
131
+ /** Total number of records in the source update set */
132
+ totalSourceRecords: number;
133
+ }
134
+ /**
135
+ * Result of inspecting an update set.
136
+ */
137
+ export interface InspectUpdateSetResult {
138
+ /** The update set record */
139
+ updateSet: {
140
+ sys_id: string;
141
+ name: string;
142
+ state: string;
143
+ description?: string;
144
+ };
145
+ /** Total number of records in the update set */
146
+ totalRecords: number;
147
+ /** Components grouped by type */
148
+ components: Array<{
149
+ type: string;
150
+ count: number;
151
+ items: string[];
152
+ }>;
153
+ }
154
+ /**
155
+ * Response wrapper for multiple update set records.
156
+ */
157
+ export interface UpdateSetResponse {
158
+ result: UpdateSetRecord[];
159
+ }
160
+ /**
161
+ * Response wrapper for a single update set record.
162
+ */
163
+ export interface UpdateSetSingleResponse {
164
+ result: UpdateSetRecord;
165
+ }
166
+ /**
167
+ * Response wrapper for multiple update XML records.
168
+ */
169
+ export interface UpdateXmlResponse {
170
+ result: UpdateXmlRecord[];
171
+ }
172
+ /**
173
+ * Response wrapper for a single update XML record.
174
+ */
175
+ export interface UpdateXmlSingleResponse {
176
+ result: UpdateXmlRecord;
177
+ }
@@ -0,0 +1,5 @@
1
+ // ============================================================
2
+ // Update Set Record Types
3
+ // ============================================================
4
+ export {};
5
+ //# sourceMappingURL=UpdateSetModels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateSetModels.js","sourceRoot":"","sources":["../../../src/sn/updateset/UpdateSetModels.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,0BAA0B;AAC1B,+DAA+D"}