@sonisoft/now-sdk-ext-core 2.2.1 → 2.5.1
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.
- package/dist/comm/http/RequestHandler.js +7 -11
- package/dist/comm/http/RequestHandler.js.map +1 -1
- package/dist/comm/http/TableAPIRequest.js +3 -10
- package/dist/comm/http/TableAPIRequest.js.map +1 -1
- package/dist/index.d.ts +28 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -1
- package/dist/sn/BackgroundScriptExecutor.d.ts +34 -0
- package/dist/sn/BackgroundScriptExecutor.js +96 -0
- package/dist/sn/BackgroundScriptExecutor.js.map +1 -1
- package/dist/sn/aggregate/AggregateModels.d.ts +89 -0
- package/dist/sn/aggregate/AggregateModels.js +5 -0
- package/dist/sn/aggregate/AggregateModels.js.map +1 -0
- package/dist/sn/aggregate/AggregateQuery.d.ts +50 -0
- package/dist/sn/aggregate/AggregateQuery.js +144 -0
- package/dist/sn/aggregate/AggregateQuery.js.map +1 -0
- package/dist/sn/application/ApplicationManager.d.ts +58 -1
- package/dist/sn/application/ApplicationManager.js +202 -11
- package/dist/sn/application/ApplicationManager.js.map +1 -1
- package/dist/sn/application/StoreApplicationModels.d.ts +99 -0
- package/dist/sn/application/StoreApplicationModels.js +2 -0
- package/dist/sn/application/StoreApplicationModels.js.map +1 -0
- package/dist/sn/attachment/AttachmentManager.d.ts +32 -0
- package/dist/sn/attachment/AttachmentManager.js +87 -0
- package/dist/sn/attachment/AttachmentManager.js.map +1 -0
- package/dist/sn/attachment/AttachmentModels.d.ts +28 -0
- package/dist/sn/attachment/AttachmentModels.js +2 -0
- package/dist/sn/attachment/AttachmentModels.js.map +1 -0
- package/dist/sn/batch/BatchModels.d.ts +90 -0
- package/dist/sn/batch/BatchModels.js +5 -0
- package/dist/sn/batch/BatchModels.js.map +1 -0
- package/dist/sn/batch/BatchOperations.d.ts +40 -0
- package/dist/sn/batch/BatchOperations.js +169 -0
- package/dist/sn/batch/BatchOperations.js.map +1 -0
- package/dist/sn/batch/QueryBatchModels.d.ts +93 -0
- package/dist/sn/batch/QueryBatchModels.js +5 -0
- package/dist/sn/batch/QueryBatchModels.js.map +1 -0
- package/dist/sn/batch/QueryBatchOperations.d.ts +41 -0
- package/dist/sn/batch/QueryBatchOperations.js +195 -0
- package/dist/sn/batch/QueryBatchOperations.js.map +1 -0
- package/dist/sn/cmdb/CMDBModels.d.ts +141 -0
- package/dist/sn/cmdb/CMDBModels.js +5 -0
- package/dist/sn/cmdb/CMDBModels.js.map +1 -0
- package/dist/sn/cmdb/CMDBRelationships.d.ts +60 -0
- package/dist/sn/cmdb/CMDBRelationships.js +286 -0
- package/dist/sn/cmdb/CMDBRelationships.js.map +1 -0
- package/dist/sn/discovery/DiscoveryModels.d.ts +160 -0
- package/dist/sn/discovery/DiscoveryModels.js +5 -0
- package/dist/sn/discovery/DiscoveryModels.js.map +1 -0
- package/dist/sn/discovery/InstanceDiscovery.d.ts +45 -0
- package/dist/sn/discovery/InstanceDiscovery.js +163 -0
- package/dist/sn/discovery/InstanceDiscovery.js.map +1 -0
- package/dist/sn/health/HealthModels.d.ts +124 -0
- package/dist/sn/health/HealthModels.js +5 -0
- package/dist/sn/health/HealthModels.js.map +1 -0
- package/dist/sn/health/InstanceHealth.d.ts +58 -0
- package/dist/sn/health/InstanceHealth.js +221 -0
- package/dist/sn/health/InstanceHealth.js.map +1 -0
- package/dist/sn/schema/SchemaDiscovery.d.ts +68 -0
- package/dist/sn/schema/SchemaDiscovery.js +346 -0
- package/dist/sn/schema/SchemaDiscovery.js.map +1 -0
- package/dist/sn/schema/SchemaModels.d.ts +277 -0
- package/dist/sn/schema/SchemaModels.js +5 -0
- package/dist/sn/schema/SchemaModels.js.map +1 -0
- package/dist/sn/scope/ScopeManager.d.ts +51 -0
- package/dist/sn/scope/ScopeManager.js +182 -0
- package/dist/sn/scope/ScopeManager.js.map +1 -0
- package/dist/sn/scope/ScopeModels.d.ts +72 -0
- package/dist/sn/scope/ScopeModels.js +5 -0
- package/dist/sn/scope/ScopeModels.js.map +1 -0
- package/dist/sn/scriptsync/ScriptSync.d.ts +38 -0
- package/dist/sn/scriptsync/ScriptSync.js +266 -0
- package/dist/sn/scriptsync/ScriptSync.js.map +1 -0
- package/dist/sn/scriptsync/ScriptSyncModels.d.ts +55 -0
- package/dist/sn/scriptsync/ScriptSyncModels.js +8 -0
- package/dist/sn/scriptsync/ScriptSyncModels.js.map +1 -0
- package/dist/sn/scriptsync/ScriptWatcher.d.ts +30 -0
- package/dist/sn/scriptsync/ScriptWatcher.js +74 -0
- package/dist/sn/scriptsync/ScriptWatcher.js.map +1 -0
- package/dist/sn/task/TaskModels.d.ts +85 -0
- package/dist/sn/task/TaskModels.js +5 -0
- package/dist/sn/task/TaskModels.js.map +1 -0
- package/dist/sn/task/TaskOperations.d.ts +63 -0
- package/dist/sn/task/TaskOperations.js +195 -0
- package/dist/sn/task/TaskOperations.js.map +1 -0
- package/dist/sn/updateset/UpdateSetManager.d.ts +78 -0
- package/dist/sn/updateset/UpdateSetManager.js +396 -0
- package/dist/sn/updateset/UpdateSetManager.js.map +1 -0
- package/dist/sn/updateset/UpdateSetModels.d.ts +188 -0
- package/dist/sn/updateset/UpdateSetModels.js +5 -0
- package/dist/sn/updateset/UpdateSetModels.js.map +1 -0
- package/dist/sn/workflow/WorkflowManager.d.ts +81 -0
- package/dist/sn/workflow/WorkflowManager.js +388 -0
- package/dist/sn/workflow/WorkflowManager.js.map +1 -0
- package/dist/sn/workflow/WorkflowModels.d.ts +242 -0
- package/dist/sn/workflow/WorkflowModels.js +5 -0
- package/dist/sn/workflow/WorkflowModels.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { Logger } from "../../util/Logger.js";
|
|
2
|
+
import { TableAPIRequest } from "../../comm/http/TableAPIRequest.js";
|
|
3
|
+
/**
|
|
4
|
+
* CMDBRelationships provides methods for querying and traversing
|
|
5
|
+
* CMDB relationship graphs. Supports single-level lookups and
|
|
6
|
+
* multi-level BFS traversal with configurable depth and direction.
|
|
7
|
+
*/
|
|
8
|
+
export class CMDBRelationships {
|
|
9
|
+
static CMDB_CI_TABLE = 'cmdb_ci';
|
|
10
|
+
static CMDB_REL_CI_TABLE = 'cmdb_rel_ci';
|
|
11
|
+
static MAX_DEPTH = 5;
|
|
12
|
+
static MAX_NODES = 1000;
|
|
13
|
+
_logger = new Logger("CMDBRelationships");
|
|
14
|
+
_tableAPI;
|
|
15
|
+
_instance;
|
|
16
|
+
/** Cache for CI records to minimize API calls during traversal */
|
|
17
|
+
_ciCache = new Map();
|
|
18
|
+
constructor(instance) {
|
|
19
|
+
this._instance = instance;
|
|
20
|
+
this._tableAPI = new TableAPIRequest(instance);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get direct relationships of a CI (single level).
|
|
24
|
+
*
|
|
25
|
+
* @param options Relationship query options
|
|
26
|
+
* @returns RelationshipsResult with the CI and its direct relationships
|
|
27
|
+
* @throws Error if ciSysId is empty
|
|
28
|
+
*/
|
|
29
|
+
async getRelationships(options) {
|
|
30
|
+
if (!options.ciSysId || options.ciSysId.trim().length === 0) {
|
|
31
|
+
throw new Error('CI sys_id is required');
|
|
32
|
+
}
|
|
33
|
+
const direction = options.direction ?? 'both';
|
|
34
|
+
const limit = options.limit ?? 100;
|
|
35
|
+
this._logger.info(`Getting relationships for CI ${options.ciSysId} (direction=${direction})`);
|
|
36
|
+
// Look up the CI
|
|
37
|
+
const ci = await this._lookupCI(options.ciSysId);
|
|
38
|
+
if (!ci) {
|
|
39
|
+
throw new Error(`CI with sys_id '${options.ciSysId}' not found`);
|
|
40
|
+
}
|
|
41
|
+
// Query relationships
|
|
42
|
+
const relationships = [];
|
|
43
|
+
if (direction === 'downstream' || direction === 'both') {
|
|
44
|
+
const downstreamRels = await this._queryRelationships(options.ciSysId, 'parent', limit, options.relationType);
|
|
45
|
+
for (const rel of downstreamRels) {
|
|
46
|
+
const childId = this._extractSysId(rel.child);
|
|
47
|
+
const relatedCI = await this._lookupCI(childId);
|
|
48
|
+
if (relatedCI) {
|
|
49
|
+
relationships.push({
|
|
50
|
+
relatedCI,
|
|
51
|
+
direction: 'downstream',
|
|
52
|
+
typeName: this._extractDisplayValue(rel.type),
|
|
53
|
+
relationshipSysId: rel.sys_id
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (direction === 'upstream' || direction === 'both') {
|
|
59
|
+
const upstreamRels = await this._queryRelationships(options.ciSysId, 'child', limit, options.relationType);
|
|
60
|
+
for (const rel of upstreamRels) {
|
|
61
|
+
const parentId = this._extractSysId(rel.parent);
|
|
62
|
+
const relatedCI = await this._lookupCI(parentId);
|
|
63
|
+
if (relatedCI) {
|
|
64
|
+
relationships.push({
|
|
65
|
+
relatedCI,
|
|
66
|
+
direction: 'upstream',
|
|
67
|
+
typeName: this._extractDisplayValue(rel.type),
|
|
68
|
+
relationshipSysId: rel.sys_id
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
this._logger.info(`Found ${relationships.length} relationships for CI ${options.ciSysId}`);
|
|
74
|
+
return { ci, relationships };
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Traverse the CMDB relationship graph using BFS starting from a CI.
|
|
78
|
+
*
|
|
79
|
+
* @param options Traversal options
|
|
80
|
+
* @returns GraphTraversalResult with all nodes, edges, and metadata
|
|
81
|
+
* @throws Error if ciSysId is empty
|
|
82
|
+
*/
|
|
83
|
+
async traverseGraph(options) {
|
|
84
|
+
if (!options.ciSysId || options.ciSysId.trim().length === 0) {
|
|
85
|
+
throw new Error('CI sys_id is required');
|
|
86
|
+
}
|
|
87
|
+
const direction = options.direction ?? 'downstream';
|
|
88
|
+
const maxDepth = Math.min(options.maxDepth ?? 3, CMDBRelationships.MAX_DEPTH);
|
|
89
|
+
const maxNodes = Math.min(options.maxNodes ?? 200, CMDBRelationships.MAX_NODES);
|
|
90
|
+
this._logger.info(`Traversing graph from CI ${options.ciSysId} (direction=${direction}, maxDepth=${maxDepth}, maxNodes=${maxNodes})`);
|
|
91
|
+
// Clear cache for fresh traversal
|
|
92
|
+
this._ciCache.clear();
|
|
93
|
+
// Look up root CI
|
|
94
|
+
const rootCI = await this._lookupCI(options.ciSysId);
|
|
95
|
+
if (!rootCI) {
|
|
96
|
+
throw new Error(`CI with sys_id '${options.ciSysId}' not found`);
|
|
97
|
+
}
|
|
98
|
+
const nodes = [];
|
|
99
|
+
const edges = [];
|
|
100
|
+
const visited = new Set();
|
|
101
|
+
const queue = [];
|
|
102
|
+
let apiCallCount = 0;
|
|
103
|
+
let truncated = false;
|
|
104
|
+
let truncationReason;
|
|
105
|
+
// Initialize BFS
|
|
106
|
+
visited.add(options.ciSysId);
|
|
107
|
+
nodes.push({
|
|
108
|
+
sysId: rootCI.sys_id,
|
|
109
|
+
name: rootCI.name || '',
|
|
110
|
+
className: rootCI.sys_class_name || '',
|
|
111
|
+
depth: 0
|
|
112
|
+
});
|
|
113
|
+
queue.push({ sysId: options.ciSysId, depth: 0 });
|
|
114
|
+
let depthLimited = false;
|
|
115
|
+
// BFS loop
|
|
116
|
+
while (queue.length > 0) {
|
|
117
|
+
const { sysId, depth } = queue.shift();
|
|
118
|
+
if (depth >= maxDepth) {
|
|
119
|
+
depthLimited = true;
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (nodes.length >= maxNodes) {
|
|
123
|
+
truncated = true;
|
|
124
|
+
truncationReason = `Maximum node limit reached (${maxNodes})`;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
// Query relationships based on direction
|
|
128
|
+
const rels = [];
|
|
129
|
+
if (direction === 'downstream' || direction === 'both') {
|
|
130
|
+
const downRels = await this._queryRelationships(sysId, 'parent', 100, options.relationType);
|
|
131
|
+
rels.push(...downRels);
|
|
132
|
+
apiCallCount++;
|
|
133
|
+
}
|
|
134
|
+
if (direction === 'upstream' || direction === 'both') {
|
|
135
|
+
const upRels = await this._queryRelationships(sysId, 'child', 100, options.relationType);
|
|
136
|
+
rels.push(...upRels);
|
|
137
|
+
apiCallCount++;
|
|
138
|
+
}
|
|
139
|
+
// Process relationships
|
|
140
|
+
const newSysIds = [];
|
|
141
|
+
for (const rel of rels) {
|
|
142
|
+
const parentId = this._extractSysId(rel.parent);
|
|
143
|
+
const childId = this._extractSysId(rel.child);
|
|
144
|
+
const typeName = this._extractDisplayValue(rel.type);
|
|
145
|
+
// Determine the "other" CI based on current node
|
|
146
|
+
const relatedId = parentId === sysId ? childId : parentId;
|
|
147
|
+
edges.push({
|
|
148
|
+
parentSysId: parentId,
|
|
149
|
+
childSysId: childId,
|
|
150
|
+
typeName,
|
|
151
|
+
relationshipSysId: rel.sys_id
|
|
152
|
+
});
|
|
153
|
+
if (!visited.has(relatedId)) {
|
|
154
|
+
visited.add(relatedId);
|
|
155
|
+
newSysIds.push(relatedId);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Batch-fetch CI details for new nodes
|
|
159
|
+
if (newSysIds.length > 0) {
|
|
160
|
+
const ciRecords = await this._batchLookupCIs(newSysIds);
|
|
161
|
+
apiCallCount++;
|
|
162
|
+
for (const ciRecord of ciRecords) {
|
|
163
|
+
if (nodes.length >= maxNodes) {
|
|
164
|
+
truncated = true;
|
|
165
|
+
truncationReason = `Maximum node limit reached (${maxNodes})`;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
nodes.push({
|
|
169
|
+
sysId: ciRecord.sys_id,
|
|
170
|
+
name: ciRecord.name || '',
|
|
171
|
+
className: ciRecord.sys_class_name || '',
|
|
172
|
+
depth: depth + 1
|
|
173
|
+
});
|
|
174
|
+
queue.push({ sysId: ciRecord.sys_id, depth: depth + 1 });
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (depthLimited && !truncated) {
|
|
179
|
+
truncated = true;
|
|
180
|
+
truncationReason = `Maximum depth reached (${maxDepth})`;
|
|
181
|
+
}
|
|
182
|
+
this._logger.info(`Traversal complete: ${nodes.length} nodes, ${edges.length} edges, ${apiCallCount} API calls`);
|
|
183
|
+
return {
|
|
184
|
+
rootCI,
|
|
185
|
+
nodes,
|
|
186
|
+
edges,
|
|
187
|
+
apiCallCount,
|
|
188
|
+
truncated,
|
|
189
|
+
truncationReason
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Look up a single CI by sys_id. Uses cache when available.
|
|
194
|
+
* @private
|
|
195
|
+
*/
|
|
196
|
+
async _lookupCI(sysId) {
|
|
197
|
+
if (this._ciCache.has(sysId)) {
|
|
198
|
+
return this._ciCache.get(sysId);
|
|
199
|
+
}
|
|
200
|
+
const query = {
|
|
201
|
+
sysparm_query: `sys_id=${sysId}`,
|
|
202
|
+
sysparm_limit: 1
|
|
203
|
+
};
|
|
204
|
+
const response = await this._tableAPI.get(CMDBRelationships.CMDB_CI_TABLE, query);
|
|
205
|
+
if (response && response.status === 200 && response.bodyObject?.result && response.bodyObject.result.length > 0) {
|
|
206
|
+
const ci = response.bodyObject.result[0];
|
|
207
|
+
this._ciCache.set(sysId, ci);
|
|
208
|
+
return ci;
|
|
209
|
+
}
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Batch look up multiple CIs by sys_id.
|
|
214
|
+
* @private
|
|
215
|
+
*/
|
|
216
|
+
async _batchLookupCIs(sysIds) {
|
|
217
|
+
// Filter out already cached IDs
|
|
218
|
+
const uncachedIds = sysIds.filter(id => !this._ciCache.has(id));
|
|
219
|
+
const results = [];
|
|
220
|
+
// Return cached items
|
|
221
|
+
for (const id of sysIds) {
|
|
222
|
+
if (this._ciCache.has(id)) {
|
|
223
|
+
results.push(this._ciCache.get(id));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (uncachedIds.length === 0) {
|
|
227
|
+
return results;
|
|
228
|
+
}
|
|
229
|
+
// Batch-fetch in chunks of 50
|
|
230
|
+
for (let i = 0; i < uncachedIds.length; i += 50) {
|
|
231
|
+
const chunk = uncachedIds.slice(i, i + 50);
|
|
232
|
+
const query = {
|
|
233
|
+
sysparm_query: `sys_idIN${chunk.join(',')}`,
|
|
234
|
+
sysparm_limit: chunk.length
|
|
235
|
+
};
|
|
236
|
+
const response = await this._tableAPI.get(CMDBRelationships.CMDB_CI_TABLE, query);
|
|
237
|
+
if (response && response.status === 200 && response.bodyObject?.result) {
|
|
238
|
+
for (const ci of response.bodyObject.result) {
|
|
239
|
+
this._ciCache.set(ci.sys_id, ci);
|
|
240
|
+
results.push(ci);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return results;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Query relationships from cmdb_rel_ci.
|
|
248
|
+
* @private
|
|
249
|
+
*/
|
|
250
|
+
async _queryRelationships(sysId, role, limit, relationType) {
|
|
251
|
+
let queryStr = `${role}=${sysId}`;
|
|
252
|
+
if (relationType) {
|
|
253
|
+
queryStr += `^type.name=${relationType}`;
|
|
254
|
+
}
|
|
255
|
+
const query = {
|
|
256
|
+
sysparm_query: queryStr,
|
|
257
|
+
sysparm_limit: limit
|
|
258
|
+
};
|
|
259
|
+
const response = await this._tableAPI.get(CMDBRelationships.CMDB_REL_CI_TABLE, query);
|
|
260
|
+
if (response && response.status === 200 && response.bodyObject?.result) {
|
|
261
|
+
return response.bodyObject.result;
|
|
262
|
+
}
|
|
263
|
+
return [];
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Extract sys_id from a field that may be a string or reference object.
|
|
267
|
+
* @private
|
|
268
|
+
*/
|
|
269
|
+
_extractSysId(field) {
|
|
270
|
+
if (typeof field === 'object' && field !== null) {
|
|
271
|
+
return field.value;
|
|
272
|
+
}
|
|
273
|
+
return field;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Extract display value or value from a field.
|
|
277
|
+
* @private
|
|
278
|
+
*/
|
|
279
|
+
_extractDisplayValue(field) {
|
|
280
|
+
if (typeof field === 'object' && field !== null) {
|
|
281
|
+
return field.display_value || field.value || '';
|
|
282
|
+
}
|
|
283
|
+
return field || '';
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=CMDBRelationships.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CMDBRelationships.js","sourceRoot":"","sources":["../../../src/sn/cmdb/CMDBRelationships.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for listing tables on the instance.
|
|
3
|
+
*/
|
|
4
|
+
export interface ListTablesOptions {
|
|
5
|
+
/** Encoded query to filter tables */
|
|
6
|
+
query?: string;
|
|
7
|
+
/** Filter by name prefix (e.g., "cmdb_" to get all CMDB tables) */
|
|
8
|
+
namePrefix?: string;
|
|
9
|
+
/** Filter by scope (application scope sys_id or name) */
|
|
10
|
+
scope?: string;
|
|
11
|
+
/** Only return extendable tables. Defaults to false. */
|
|
12
|
+
extendableOnly?: boolean;
|
|
13
|
+
/** Maximum number of results. Defaults to 100. */
|
|
14
|
+
limit?: number;
|
|
15
|
+
/** Offset for pagination. Defaults to 0. */
|
|
16
|
+
offset?: number;
|
|
17
|
+
/** Fields to return (maps to sysparm_fields). Defaults to common fields. */
|
|
18
|
+
fields?: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Options for listing scoped applications.
|
|
22
|
+
*/
|
|
23
|
+
export interface ListScopedAppsOptions {
|
|
24
|
+
/** Encoded query to filter applications */
|
|
25
|
+
query?: string;
|
|
26
|
+
/** Filter by scope name prefix */
|
|
27
|
+
namePrefix?: string;
|
|
28
|
+
/** Only return active applications. Defaults to false. */
|
|
29
|
+
activeOnly?: boolean;
|
|
30
|
+
/** Maximum number of results. Defaults to 100. */
|
|
31
|
+
limit?: number;
|
|
32
|
+
/** Offset for pagination. Defaults to 0. */
|
|
33
|
+
offset?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Options for listing store applications.
|
|
37
|
+
*/
|
|
38
|
+
export interface ListStoreAppsOptions {
|
|
39
|
+
/** Encoded query to filter store applications */
|
|
40
|
+
query?: string;
|
|
41
|
+
/** Filter by name prefix */
|
|
42
|
+
namePrefix?: string;
|
|
43
|
+
/** Only return active (installed) applications. Defaults to false. */
|
|
44
|
+
activeOnly?: boolean;
|
|
45
|
+
/** Maximum number of results. Defaults to 100. */
|
|
46
|
+
limit?: number;
|
|
47
|
+
/** Offset for pagination. Defaults to 0. */
|
|
48
|
+
offset?: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Options for listing plugins.
|
|
52
|
+
*/
|
|
53
|
+
export interface ListPluginsOptions {
|
|
54
|
+
/** Encoded query to filter plugins */
|
|
55
|
+
query?: string;
|
|
56
|
+
/** Filter by name prefix */
|
|
57
|
+
namePrefix?: string;
|
|
58
|
+
/** Only return active plugins. Defaults to false. */
|
|
59
|
+
activeOnly?: boolean;
|
|
60
|
+
/** Maximum number of results. Defaults to 100. */
|
|
61
|
+
limit?: number;
|
|
62
|
+
/** Offset for pagination. Defaults to 0. */
|
|
63
|
+
offset?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A table definition record from sys_db_object.
|
|
67
|
+
*/
|
|
68
|
+
export interface TableDefinition {
|
|
69
|
+
/** System ID */
|
|
70
|
+
sys_id: string;
|
|
71
|
+
/** Table name */
|
|
72
|
+
name: string;
|
|
73
|
+
/** Display label */
|
|
74
|
+
label?: string;
|
|
75
|
+
/** Parent table reference */
|
|
76
|
+
super_class?: string | {
|
|
77
|
+
link: string;
|
|
78
|
+
value: string;
|
|
79
|
+
display_value?: string;
|
|
80
|
+
};
|
|
81
|
+
/** Application scope */
|
|
82
|
+
sys_scope?: string | {
|
|
83
|
+
link: string;
|
|
84
|
+
value: string;
|
|
85
|
+
display_value?: string;
|
|
86
|
+
};
|
|
87
|
+
/** Whether the table is extendable */
|
|
88
|
+
is_extendable?: string;
|
|
89
|
+
/** Additional fields */
|
|
90
|
+
[key: string]: unknown;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* A scoped application record from sys_app.
|
|
94
|
+
*/
|
|
95
|
+
export interface ScopedAppRecord {
|
|
96
|
+
/** System ID */
|
|
97
|
+
sys_id: string;
|
|
98
|
+
/** Application name */
|
|
99
|
+
name: string;
|
|
100
|
+
/** Application scope */
|
|
101
|
+
scope?: string;
|
|
102
|
+
/** Version */
|
|
103
|
+
version?: string;
|
|
104
|
+
/** Whether active */
|
|
105
|
+
active?: string;
|
|
106
|
+
/** Vendor */
|
|
107
|
+
vendor?: string;
|
|
108
|
+
/** Additional fields */
|
|
109
|
+
[key: string]: unknown;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* A store application record from sys_store_app.
|
|
113
|
+
*/
|
|
114
|
+
export interface StoreAppRecord {
|
|
115
|
+
/** System ID */
|
|
116
|
+
sys_id: string;
|
|
117
|
+
/** Application name */
|
|
118
|
+
name: string;
|
|
119
|
+
/** Application scope */
|
|
120
|
+
scope?: string;
|
|
121
|
+
/** Version */
|
|
122
|
+
version?: string;
|
|
123
|
+
/** Whether active */
|
|
124
|
+
active?: string;
|
|
125
|
+
/** Additional fields */
|
|
126
|
+
[key: string]: unknown;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* A plugin record from v_plugin.
|
|
130
|
+
*/
|
|
131
|
+
export interface PluginRecord {
|
|
132
|
+
/** System ID */
|
|
133
|
+
sys_id: string;
|
|
134
|
+
/** Plugin ID */
|
|
135
|
+
id?: string;
|
|
136
|
+
/** Plugin display name */
|
|
137
|
+
name?: string;
|
|
138
|
+
/** Whether active */
|
|
139
|
+
active?: string;
|
|
140
|
+
/** Version */
|
|
141
|
+
version?: string;
|
|
142
|
+
/** Additional fields */
|
|
143
|
+
[key: string]: unknown;
|
|
144
|
+
}
|
|
145
|
+
/** Response from sys_db_object query. */
|
|
146
|
+
export interface TableDefinitionResponse {
|
|
147
|
+
result: TableDefinition[];
|
|
148
|
+
}
|
|
149
|
+
/** Response from sys_app query. */
|
|
150
|
+
export interface ScopedAppResponse {
|
|
151
|
+
result: ScopedAppRecord[];
|
|
152
|
+
}
|
|
153
|
+
/** Response from sys_store_app query. */
|
|
154
|
+
export interface StoreAppResponse {
|
|
155
|
+
result: StoreAppRecord[];
|
|
156
|
+
}
|
|
157
|
+
/** Response from v_plugin query. */
|
|
158
|
+
export interface PluginResponse {
|
|
159
|
+
result: PluginRecord[];
|
|
160
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiscoveryModels.js","sourceRoot":"","sources":["../../../src/sn/discovery/DiscoveryModels.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,gBAAgB;AAChB,+DAA+D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ServiceNowInstance } from "../ServiceNowInstance.js";
|
|
2
|
+
import { ListTablesOptions, ListScopedAppsOptions, ListStoreAppsOptions, ListPluginsOptions, TableDefinition, ScopedAppRecord, StoreAppRecord, PluginRecord } from './DiscoveryModels.js';
|
|
3
|
+
/**
|
|
4
|
+
* InstanceDiscovery provides methods for discovering what tables,
|
|
5
|
+
* scoped applications, store applications, and plugins exist on a
|
|
6
|
+
* ServiceNow instance.
|
|
7
|
+
*/
|
|
8
|
+
export declare class InstanceDiscovery {
|
|
9
|
+
private static readonly SYS_DB_OBJECT_TABLE;
|
|
10
|
+
private static readonly SYS_APP_TABLE;
|
|
11
|
+
private static readonly SYS_STORE_APP_TABLE;
|
|
12
|
+
private static readonly V_PLUGIN_TABLE;
|
|
13
|
+
private _logger;
|
|
14
|
+
private _tableAPI;
|
|
15
|
+
private _instance;
|
|
16
|
+
constructor(instance: ServiceNowInstance);
|
|
17
|
+
/**
|
|
18
|
+
* List tables on the instance with optional filtering.
|
|
19
|
+
*
|
|
20
|
+
* @param options Filtering and pagination options
|
|
21
|
+
* @returns Array of table definitions
|
|
22
|
+
*/
|
|
23
|
+
listTables(options?: ListTablesOptions): Promise<TableDefinition[]>;
|
|
24
|
+
/**
|
|
25
|
+
* List scoped applications on the instance.
|
|
26
|
+
*
|
|
27
|
+
* @param options Filtering and pagination options
|
|
28
|
+
* @returns Array of scoped application records
|
|
29
|
+
*/
|
|
30
|
+
listScopedApps(options?: ListScopedAppsOptions): Promise<ScopedAppRecord[]>;
|
|
31
|
+
/**
|
|
32
|
+
* List store applications on the instance.
|
|
33
|
+
*
|
|
34
|
+
* @param options Filtering and pagination options
|
|
35
|
+
* @returns Array of store application records
|
|
36
|
+
*/
|
|
37
|
+
listStoreApps(options?: ListStoreAppsOptions): Promise<StoreAppRecord[]>;
|
|
38
|
+
/**
|
|
39
|
+
* List plugins on the instance.
|
|
40
|
+
*
|
|
41
|
+
* @param options Filtering and pagination options
|
|
42
|
+
* @returns Array of plugin records
|
|
43
|
+
*/
|
|
44
|
+
listPlugins(options?: ListPluginsOptions): Promise<PluginRecord[]>;
|
|
45
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { Logger } from "../../util/Logger.js";
|
|
2
|
+
import { TableAPIRequest } from "../../comm/http/TableAPIRequest.js";
|
|
3
|
+
/**
|
|
4
|
+
* InstanceDiscovery provides methods for discovering what tables,
|
|
5
|
+
* scoped applications, store applications, and plugins exist on a
|
|
6
|
+
* ServiceNow instance.
|
|
7
|
+
*/
|
|
8
|
+
export class InstanceDiscovery {
|
|
9
|
+
static SYS_DB_OBJECT_TABLE = 'sys_db_object';
|
|
10
|
+
static SYS_APP_TABLE = 'sys_app';
|
|
11
|
+
static SYS_STORE_APP_TABLE = 'sys_store_app';
|
|
12
|
+
static V_PLUGIN_TABLE = 'v_plugin';
|
|
13
|
+
_logger = new Logger("InstanceDiscovery");
|
|
14
|
+
_tableAPI;
|
|
15
|
+
_instance;
|
|
16
|
+
constructor(instance) {
|
|
17
|
+
this._instance = instance;
|
|
18
|
+
this._tableAPI = new TableAPIRequest(instance);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* List tables on the instance with optional filtering.
|
|
22
|
+
*
|
|
23
|
+
* @param options Filtering and pagination options
|
|
24
|
+
* @returns Array of table definitions
|
|
25
|
+
*/
|
|
26
|
+
async listTables(options = {}) {
|
|
27
|
+
this._logger.info('Listing tables on instance');
|
|
28
|
+
const queryParts = [];
|
|
29
|
+
if (options.namePrefix) {
|
|
30
|
+
queryParts.push(`nameSTARTSWITH${options.namePrefix}`);
|
|
31
|
+
}
|
|
32
|
+
if (options.scope) {
|
|
33
|
+
queryParts.push(`sys_scope=${options.scope}`);
|
|
34
|
+
}
|
|
35
|
+
if (options.extendableOnly) {
|
|
36
|
+
queryParts.push('is_extendable=true');
|
|
37
|
+
}
|
|
38
|
+
if (options.query) {
|
|
39
|
+
queryParts.push(options.query);
|
|
40
|
+
}
|
|
41
|
+
const query = {
|
|
42
|
+
sysparm_limit: options.limit ?? 100
|
|
43
|
+
};
|
|
44
|
+
if (options.offset !== undefined && options.offset > 0) {
|
|
45
|
+
query.sysparm_offset = options.offset;
|
|
46
|
+
}
|
|
47
|
+
if (queryParts.length > 0) {
|
|
48
|
+
query.sysparm_query = queryParts.join('^');
|
|
49
|
+
}
|
|
50
|
+
if (options.fields && options.fields.length > 0) {
|
|
51
|
+
query.sysparm_fields = options.fields.join(',');
|
|
52
|
+
}
|
|
53
|
+
const response = await this._tableAPI.get(InstanceDiscovery.SYS_DB_OBJECT_TABLE, query);
|
|
54
|
+
if (response && response.status === 200 && response.bodyObject?.result) {
|
|
55
|
+
this._logger.info(`Found ${response.bodyObject.result.length} tables`);
|
|
56
|
+
return response.bodyObject.result;
|
|
57
|
+
}
|
|
58
|
+
throw new Error(`Failed to list tables. Status: ${response?.status ?? 'unknown'}`);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* List scoped applications on the instance.
|
|
62
|
+
*
|
|
63
|
+
* @param options Filtering and pagination options
|
|
64
|
+
* @returns Array of scoped application records
|
|
65
|
+
*/
|
|
66
|
+
async listScopedApps(options = {}) {
|
|
67
|
+
this._logger.info('Listing scoped applications');
|
|
68
|
+
const queryParts = [];
|
|
69
|
+
if (options.namePrefix) {
|
|
70
|
+
queryParts.push(`nameSTARTSWITH${options.namePrefix}`);
|
|
71
|
+
}
|
|
72
|
+
if (options.activeOnly) {
|
|
73
|
+
queryParts.push('active=true');
|
|
74
|
+
}
|
|
75
|
+
if (options.query) {
|
|
76
|
+
queryParts.push(options.query);
|
|
77
|
+
}
|
|
78
|
+
const query = {
|
|
79
|
+
sysparm_limit: options.limit ?? 100
|
|
80
|
+
};
|
|
81
|
+
if (options.offset !== undefined && options.offset > 0) {
|
|
82
|
+
query.sysparm_offset = options.offset;
|
|
83
|
+
}
|
|
84
|
+
if (queryParts.length > 0) {
|
|
85
|
+
query.sysparm_query = queryParts.join('^');
|
|
86
|
+
}
|
|
87
|
+
const response = await this._tableAPI.get(InstanceDiscovery.SYS_APP_TABLE, query);
|
|
88
|
+
if (response && response.status === 200 && response.bodyObject?.result) {
|
|
89
|
+
this._logger.info(`Found ${response.bodyObject.result.length} scoped applications`);
|
|
90
|
+
return response.bodyObject.result;
|
|
91
|
+
}
|
|
92
|
+
throw new Error(`Failed to list scoped applications. Status: ${response?.status ?? 'unknown'}`);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* List store applications on the instance.
|
|
96
|
+
*
|
|
97
|
+
* @param options Filtering and pagination options
|
|
98
|
+
* @returns Array of store application records
|
|
99
|
+
*/
|
|
100
|
+
async listStoreApps(options = {}) {
|
|
101
|
+
this._logger.info('Listing store applications');
|
|
102
|
+
const queryParts = [];
|
|
103
|
+
if (options.namePrefix) {
|
|
104
|
+
queryParts.push(`nameSTARTSWITH${options.namePrefix}`);
|
|
105
|
+
}
|
|
106
|
+
if (options.activeOnly) {
|
|
107
|
+
queryParts.push('active=true');
|
|
108
|
+
}
|
|
109
|
+
if (options.query) {
|
|
110
|
+
queryParts.push(options.query);
|
|
111
|
+
}
|
|
112
|
+
const query = {
|
|
113
|
+
sysparm_limit: options.limit ?? 100
|
|
114
|
+
};
|
|
115
|
+
if (options.offset !== undefined && options.offset > 0) {
|
|
116
|
+
query.sysparm_offset = options.offset;
|
|
117
|
+
}
|
|
118
|
+
if (queryParts.length > 0) {
|
|
119
|
+
query.sysparm_query = queryParts.join('^');
|
|
120
|
+
}
|
|
121
|
+
const response = await this._tableAPI.get(InstanceDiscovery.SYS_STORE_APP_TABLE, query);
|
|
122
|
+
if (response && response.status === 200 && response.bodyObject?.result) {
|
|
123
|
+
this._logger.info(`Found ${response.bodyObject.result.length} store applications`);
|
|
124
|
+
return response.bodyObject.result;
|
|
125
|
+
}
|
|
126
|
+
throw new Error(`Failed to list store applications. Status: ${response?.status ?? 'unknown'}`);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* List plugins on the instance.
|
|
130
|
+
*
|
|
131
|
+
* @param options Filtering and pagination options
|
|
132
|
+
* @returns Array of plugin records
|
|
133
|
+
*/
|
|
134
|
+
async listPlugins(options = {}) {
|
|
135
|
+
this._logger.info('Listing plugins');
|
|
136
|
+
const queryParts = [];
|
|
137
|
+
if (options.namePrefix) {
|
|
138
|
+
queryParts.push(`nameSTARTSWITH${options.namePrefix}`);
|
|
139
|
+
}
|
|
140
|
+
if (options.activeOnly) {
|
|
141
|
+
queryParts.push('active=active');
|
|
142
|
+
}
|
|
143
|
+
if (options.query) {
|
|
144
|
+
queryParts.push(options.query);
|
|
145
|
+
}
|
|
146
|
+
const query = {
|
|
147
|
+
sysparm_limit: options.limit ?? 100
|
|
148
|
+
};
|
|
149
|
+
if (options.offset !== undefined && options.offset > 0) {
|
|
150
|
+
query.sysparm_offset = options.offset;
|
|
151
|
+
}
|
|
152
|
+
if (queryParts.length > 0) {
|
|
153
|
+
query.sysparm_query = queryParts.join('^');
|
|
154
|
+
}
|
|
155
|
+
const response = await this._tableAPI.get(InstanceDiscovery.V_PLUGIN_TABLE, query);
|
|
156
|
+
if (response && response.status === 200 && response.bodyObject?.result) {
|
|
157
|
+
this._logger.info(`Found ${response.bodyObject.result.length} plugins`);
|
|
158
|
+
return response.bodyObject.result;
|
|
159
|
+
}
|
|
160
|
+
throw new Error(`Failed to list plugins. Status: ${response?.status ?? 'unknown'}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=InstanceDiscovery.js.map
|