@sonisoft/now-sdk-ext-core 6.7.0 → 6.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.
- package/dist/comm/http/FormHtmlParser.d.ts +2 -2
- package/dist/comm/http/FormHtmlParser.js +26 -9
- package/dist/comm/http/FormHtmlParser.js.map +1 -1
- package/dist/comm/http/FormRecordWriter.d.ts +30 -16
- package/dist/comm/http/FormRecordWriter.js +153 -40
- package/dist/comm/http/FormRecordWriter.js.map +1 -1
- package/dist/comm/http/HTTPRequest.d.ts +4 -0
- package/dist/comm/http/RequestHandler.d.ts +1 -0
- package/dist/comm/http/RequestHandler.js +34 -22
- package/dist/comm/http/RequestHandler.js.map +1 -1
- package/dist/comm/http/internal/FormTransportModels.d.ts +26 -0
- package/dist/comm/http/internal/FormTransportModels.js +2 -0
- package/dist/comm/http/internal/FormTransportModels.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/policy/ScanScript.js +3 -0
- package/dist/policy/ScanScript.js.map +1 -1
- package/dist/sn/metadata/FormLayoutWriter.d.ts +22 -0
- package/dist/sn/metadata/FormLayoutWriter.js +237 -0
- package/dist/sn/metadata/FormLayoutWriter.js.map +1 -0
- package/dist/sn/metadata/MetadataFormWriter.d.ts +12 -0
- package/dist/sn/metadata/MetadataFormWriter.js +274 -0
- package/dist/sn/metadata/MetadataFormWriter.js.map +1 -0
- package/dist/sn/metadata/MetadataModels.d.ts +102 -0
- package/dist/sn/metadata/MetadataModels.js +2 -0
- package/dist/sn/metadata/MetadataModels.js.map +1 -0
- package/dist/sn/metadata/MetadataScopeError.d.ts +17 -0
- package/dist/sn/metadata/MetadataScopeError.js +32 -0
- package/dist/sn/metadata/MetadataScopeError.js.map +1 -0
- package/dist/sn/metadata/MetadataVerificationError.d.ts +11 -0
- package/dist/sn/metadata/MetadataVerificationError.js +20 -0
- package/dist/sn/metadata/MetadataVerificationError.js.map +1 -0
- package/dist/sn/metadata/internal/MetadataPreferences.d.ts +12 -0
- package/dist/sn/metadata/internal/MetadataPreferences.js +27 -0
- package/dist/sn/metadata/internal/MetadataPreferences.js.map +1 -0
- package/dist/sn/metadata/internal/MetadataReader.d.ts +9 -0
- package/dist/sn/metadata/internal/MetadataReader.js +55 -0
- package/dist/sn/metadata/internal/MetadataReader.js.map +1 -0
- package/dist/sn/metadata/internal/MetadataScope.d.ts +12 -0
- package/dist/sn/metadata/internal/MetadataScope.js +48 -0
- package/dist/sn/metadata/internal/MetadataScope.js.map +1 -0
- package/dist/sn/metadata/internal/MetadataUpdateNames.d.ts +8 -0
- package/dist/sn/metadata/internal/MetadataUpdateNames.js +28 -0
- package/dist/sn/metadata/internal/MetadataUpdateNames.js.map +1 -0
- package/dist/sn/metadata/internal/SlushbucketPage.d.ts +20 -0
- package/dist/sn/metadata/internal/SlushbucketPage.js +67 -0
- package/dist/sn/metadata/internal/SlushbucketPage.js.map +1 -0
- package/dist/sn/updateset/UpdateSetManager.js +30 -3
- package/dist/sn/updateset/UpdateSetManager.js.map +1 -1
- package/dist/sn/updateset/WorkingSetManager.d.ts +53 -0
- package/dist/sn/updateset/WorkingSetManager.js +275 -0
- package/dist/sn/updateset/WorkingSetManager.js.map +1 -0
- package/dist/sn/updateset/WorkingSetModels.d.ts +77 -0
- package/dist/sn/updateset/WorkingSetModels.js +12 -0
- package/dist/sn/updateset/WorkingSetModels.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormLayoutWriter.js","sourceRoot":"","sources":["../../../src/sn/metadata/FormLayoutWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ServiceNowInstance } from '../ServiceNowInstance.js';
|
|
2
|
+
import type { MetadataWriteOptions, MetadataDeleteOptions, MetadataWriteResult } from './MetadataModels.js';
|
|
3
|
+
/** Scoped metadata CRUD. All form work uses the internal FormRecordWriter seam. */
|
|
4
|
+
export declare class MetadataFormWriter {
|
|
5
|
+
private _instance;
|
|
6
|
+
constructor(_instance: ServiceNowInstance);
|
|
7
|
+
insert(table: string, options: MetadataWriteOptions): Promise<MetadataWriteResult>;
|
|
8
|
+
update(table: string, sysId: string, options: MetadataWriteOptions): Promise<MetadataWriteResult>;
|
|
9
|
+
delete(table: string, sysId: string, options: MetadataDeleteOptions): Promise<MetadataWriteResult>;
|
|
10
|
+
private table;
|
|
11
|
+
private write;
|
|
12
|
+
}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { InvalidParameterException } from '../../exception/InvalidParameterException.js';
|
|
3
|
+
import { FormSubmitError } from '../../exception/FormSubmitError.js';
|
|
4
|
+
import { createFormTransport } from '../../comm/http/FormRecordWriter.js';
|
|
5
|
+
import { SessionManager } from '../../comm/http/SessionManager.js';
|
|
6
|
+
import { isPolicyRefusal } from '../../policy/PolicyRefusal.js';
|
|
7
|
+
import { stripSecretsFromError } from '../../util/redact.js';
|
|
8
|
+
import { MetadataScopeError } from './MetadataScopeError.js';
|
|
9
|
+
import { MetadataVerificationError } from './MetadataVerificationError.js';
|
|
10
|
+
import { MetadataReader } from './internal/MetadataReader.js';
|
|
11
|
+
import { comparePreferences, preferenceValue } from './internal/MetadataPreferences.js';
|
|
12
|
+
import { updateName, updateNameFields } from './internal/MetadataUpdateNames.js';
|
|
13
|
+
import { customizationEvidence, resolveScope } from './internal/MetadataScope.js';
|
|
14
|
+
const ID = /^[a-f0-9]{32}$/i;
|
|
15
|
+
const NAME = /^[a-z0-9_]+$/i;
|
|
16
|
+
const WRITE_DENY = new Set(['sys_update_set', 'sys_update_xml', 'sys_scope', 'sys_app', 'sys_store_app',
|
|
17
|
+
'sys_db_object', 'sys_dictionary', 'sys_security_acl', 'sys_user_role']);
|
|
18
|
+
const DELETE_DENY = new Set(['sys_documentation', 'sys_package', 'sys_app_module']);
|
|
19
|
+
/** Scoped metadata CRUD. All form work uses the internal FormRecordWriter seam. */
|
|
20
|
+
export class MetadataFormWriter {
|
|
21
|
+
_instance;
|
|
22
|
+
constructor(_instance) {
|
|
23
|
+
this._instance = _instance;
|
|
24
|
+
}
|
|
25
|
+
insert(table, options) {
|
|
26
|
+
return this.write('insert', table, '-1', options);
|
|
27
|
+
}
|
|
28
|
+
update(table, sysId, options) {
|
|
29
|
+
return this.write('update', table, sysId, options);
|
|
30
|
+
}
|
|
31
|
+
delete(table, sysId, options) {
|
|
32
|
+
if (options?.confirm?.table !== table || options?.confirm?.sysId !== sysId) {
|
|
33
|
+
throw new InvalidParameterException('Delete confirmation must match table and sysId');
|
|
34
|
+
}
|
|
35
|
+
return this.write('delete', table, sysId, options);
|
|
36
|
+
}
|
|
37
|
+
async table(reader, table, deleting) {
|
|
38
|
+
const visited = new Set();
|
|
39
|
+
let rows = await reader.rows('sys_db_object', `name=${table}`, 'sys_id,name,super_class');
|
|
40
|
+
if (rows.length !== 1 || rows[0].name !== table)
|
|
41
|
+
throw new MetadataScopeError('table_not_supported');
|
|
42
|
+
while (rows.length === 1) {
|
|
43
|
+
const row = rows[0];
|
|
44
|
+
if (visited.has(row.sys_id) || WRITE_DENY.has(row.name) || (deleting && DELETE_DENY.has(row.name))) {
|
|
45
|
+
throw new MetadataScopeError('table_not_supported');
|
|
46
|
+
}
|
|
47
|
+
visited.add(row.sys_id);
|
|
48
|
+
if (row.name === 'sys_metadata')
|
|
49
|
+
return;
|
|
50
|
+
if (!ID.test(row.super_class))
|
|
51
|
+
break;
|
|
52
|
+
const parent = await reader.exact('sys_db_object', row.super_class, 'name,super_class');
|
|
53
|
+
rows = parent ? [parent] : [];
|
|
54
|
+
}
|
|
55
|
+
throw new MetadataScopeError('table_not_supported');
|
|
56
|
+
}
|
|
57
|
+
async write(operation, table, sysId, options) {
|
|
58
|
+
if (!NAME.test(table ?? '') || (operation !== 'insert' && !ID.test(sysId ?? '')))
|
|
59
|
+
throw new MetadataScopeError('invalid_input');
|
|
60
|
+
if (!options?.scope)
|
|
61
|
+
throw new MetadataScopeError('scope_required');
|
|
62
|
+
if (options.updateSet !== undefined && !ID.test(options.updateSet))
|
|
63
|
+
throw new MetadataScopeError('invalid_input');
|
|
64
|
+
const initialQuery = options.initialQuery;
|
|
65
|
+
if (initialQuery && initialQuery.split('^').some(term => !/^(?!sys_)[a-z0-9_]+=[^^]*$/i.test(term) || /javascript:/i.test(term))) {
|
|
66
|
+
throw new MetadataScopeError('field_not_supported');
|
|
67
|
+
}
|
|
68
|
+
let submitted = false;
|
|
69
|
+
let recordId = sysId;
|
|
70
|
+
let report;
|
|
71
|
+
let messages = [];
|
|
72
|
+
try {
|
|
73
|
+
const request = SessionManager.getInstance().getRequest(this._instance);
|
|
74
|
+
const reader = new MetadataReader(request);
|
|
75
|
+
const { store, ...scope } = await resolveScope(reader, options.scope);
|
|
76
|
+
if (store && options.storeCustomization?.acknowledgeUpgradeSkip !== true)
|
|
77
|
+
throw new MetadataScopeError('store_scope');
|
|
78
|
+
if (store && !options.updateSet)
|
|
79
|
+
throw new MetadataScopeError('update_set_required');
|
|
80
|
+
await this.table(reader, table, operation === 'delete');
|
|
81
|
+
const nameFields = updateNameFields(table);
|
|
82
|
+
let existing;
|
|
83
|
+
if (operation !== 'insert') {
|
|
84
|
+
existing = await reader.exact(table, sysId, ['sys_scope', ...(store ? ['sys_policy'] : []), ...nameFields].join(','));
|
|
85
|
+
if (!existing || existing.sys_scope !== scope.sysId)
|
|
86
|
+
throw new MetadataScopeError('scope_mismatch');
|
|
87
|
+
// A read-only or protected Store file cannot be customized; the form would refuse it anyway.
|
|
88
|
+
if (store && ['read', 'protected'].includes(existing.sys_policy))
|
|
89
|
+
throw new MetadataScopeError('protected_record', { table });
|
|
90
|
+
}
|
|
91
|
+
// Use the existing WorkflowManager current-user read pattern on this session.
|
|
92
|
+
const users = await reader.rows('sys_user', 'sys_id=javascript:gs.getUserID()', 'sys_id');
|
|
93
|
+
if (users.length !== 1 || !ID.test(users[0].sys_id))
|
|
94
|
+
throw new MetadataScopeError('evidence_unavailable');
|
|
95
|
+
const user = users[0].sys_id;
|
|
96
|
+
const preferences = async () => {
|
|
97
|
+
const rows = await reader.rows('sys_user_preference', `user=${user}`, 'sys_id,user,name,value');
|
|
98
|
+
if (rows.some(row => row.user !== user))
|
|
99
|
+
throw new MetadataScopeError('evidence_unavailable');
|
|
100
|
+
return rows;
|
|
101
|
+
};
|
|
102
|
+
const before = await preferences();
|
|
103
|
+
const predicted = preferenceValue(before, `updateSetForScope${scope.sysId}`);
|
|
104
|
+
const expected = options.updateSet ?? predicted;
|
|
105
|
+
if (expected !== undefined && !ID.test(expected))
|
|
106
|
+
throw new MetadataScopeError('evidence_unavailable');
|
|
107
|
+
if (options.updateSet) {
|
|
108
|
+
const set = await reader.exact('sys_update_set', options.updateSet, 'application,state');
|
|
109
|
+
if (!set || set.state !== 'in progress' || set.application !== scope.sysId) {
|
|
110
|
+
throw new MetadataScopeError('invalid_input', set ? { updateSetState: set.state, updateSetApplication: set.application } : undefined);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const transport = createFormTransport(this._instance);
|
|
114
|
+
const form = await transport.loadForm(table, sysId, { ...options,
|
|
115
|
+
query: { sysparm_transaction_scope: scope.sysId, sysparm_isdevstudio: 'true',
|
|
116
|
+
sysparm_referring_url: `${table}.do`, sysparm_nofocus: 'true',
|
|
117
|
+
sysparm_nameofstack: `${randomUUID()}_bottomless` },
|
|
118
|
+
captureRenderedInputs: true, tokenSource: 'page', sensitive: true });
|
|
119
|
+
recordId = form.sysId;
|
|
120
|
+
if (!ID.test(recordId) || form.fields[`${table}.sys_scope`]?.value !== scope.sysId ||
|
|
121
|
+
form.renderedInputs?.sysparm_transaction_scope !== scope.sysId)
|
|
122
|
+
throw new MetadataScopeError('scope_not_applied');
|
|
123
|
+
const writeOptions = options;
|
|
124
|
+
for (const field of Object.keys(writeOptions.fields ?? {})) {
|
|
125
|
+
if (!NAME.test(field) || /^sys_/i.test(field) || !form.fields[`${table}.${field}`])
|
|
126
|
+
throw new MetadataScopeError('field_not_supported', { field, table });
|
|
127
|
+
}
|
|
128
|
+
const action = operation === 'insert' ? 'sysverb_insert_and_stay' : operation === 'update' ? 'sysverb_update' : 'sysverb_delete';
|
|
129
|
+
if (operation !== 'insert' && !form.actions[action])
|
|
130
|
+
throw new MetadataScopeError('not_permitted');
|
|
131
|
+
if (operation === 'delete') {
|
|
132
|
+
const actionId = form.actions[action];
|
|
133
|
+
if (!ID.test(actionId))
|
|
134
|
+
throw new MetadataScopeError('delete_not_supported');
|
|
135
|
+
const definition = await reader.exact('sys_ui_action', actionId, 'table,action_name,onclick,name');
|
|
136
|
+
if (!definition || definition.table !== 'global' || definition.action_name !== 'sysverb_delete' ||
|
|
137
|
+
definition.name !== 'Delete' || !/^\s*(?:return\s+)?confirmAndDeleteFromForm\(\);?\s*$/.test(definition.onclick)) {
|
|
138
|
+
throw new MetadataScopeError('delete_not_supported');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
transport.validate(form, options);
|
|
142
|
+
// Form GETs are part of the measured interval: never replace the original baseline.
|
|
143
|
+
const loaded = await preferences();
|
|
144
|
+
if (!comparePreferences(before, loaded).valid)
|
|
145
|
+
throw new MetadataVerificationError('session_changed', table, recordId, undefined, [], false);
|
|
146
|
+
// A new label or choice list is named from the fields being inserted, so that the capture rows that already
|
|
147
|
+
// carry that name are snapshotted before the POST like every other capture; an older row with the name must
|
|
148
|
+
// never count as this write's evidence.
|
|
149
|
+
const fields = options.fields ?? {};
|
|
150
|
+
const insertedNames = Object.fromEntries(nameFields.map(field => [field, typeof fields[field] === 'string' ? fields[field] : '']));
|
|
151
|
+
let captureName = updateName(table, recordId, operation === 'insert' ? insertedNames : existing);
|
|
152
|
+
if (!captureName && operation === 'insert') {
|
|
153
|
+
throw new MetadataScopeError('invalid_input', { table, field: nameFields.find(field => !insertedNames[field]) ?? nameFields[0] });
|
|
154
|
+
}
|
|
155
|
+
if (!captureName)
|
|
156
|
+
throw new MetadataScopeError('evidence_unavailable');
|
|
157
|
+
const predictedName = captureName;
|
|
158
|
+
const previousCaptures = captureName ? await reader.rows('sys_update_xml', `name=${captureName}`, 'sys_id,name,sys_mod_count') : [];
|
|
159
|
+
if (previousCaptures.some(row => row.name !== captureName || !/^\d+$/.test(row.sys_mod_count))) {
|
|
160
|
+
throw new MetadataScopeError('evidence_unavailable');
|
|
161
|
+
}
|
|
162
|
+
const captureVersions = new Map(previousCaptures.map(row => [row.sys_id, row.sys_mod_count]));
|
|
163
|
+
const started = new Date().toISOString().slice(0, 19).replace('T', ' ');
|
|
164
|
+
submitted = true;
|
|
165
|
+
let submitFailure;
|
|
166
|
+
try {
|
|
167
|
+
const result = await transport.submit(form, action, { ...options, postAllRenderedInputs: true,
|
|
168
|
+
tokenSource: 'page', actionValue: operation === 'update' ? form.actions[action] : action,
|
|
169
|
+
extraFields: { sysparm_transaction_scope: scope.sysId, sysparm_transaction_update_set: options.updateSet ?? '',
|
|
170
|
+
sysparm_record_scope: '', sysparm_goto_url: '' },
|
|
171
|
+
redirect: 'manual', landing: 'guarded', sensitive: true });
|
|
172
|
+
messages = [...result.messages, ...(result.errors ?? [])];
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
if (isPolicyRefusal(error))
|
|
176
|
+
throw error;
|
|
177
|
+
submitFailure = error;
|
|
178
|
+
}
|
|
179
|
+
report = { predictedUpdateSetSysId: predicted };
|
|
180
|
+
// A confirmed interceptor rejection takes precedence, but must not omit obtainable evidence.
|
|
181
|
+
const csrfRejected = submitFailure instanceof Error && submitFailure.message === 'csrf_rejected';
|
|
182
|
+
// Guard interpretation as well as reads so ambiguous evidence cannot mask the rejection.
|
|
183
|
+
const collectEvidence = async (collect) => {
|
|
184
|
+
try {
|
|
185
|
+
return await collect();
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
if (isPolicyRefusal(error) || !csrfRejected)
|
|
189
|
+
throw error;
|
|
190
|
+
return undefined;
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
const record = await collectEvidence(() => reader.exact(table, recordId, ['sys_scope', ...nameFields].join(',')));
|
|
194
|
+
report.recordScope = record?.sys_scope ?? (!csrfRejected && operation === 'delete' ? scope.sysId : undefined);
|
|
195
|
+
// The record as saved must carry the name its capture was snapshotted under.
|
|
196
|
+
if (nameFields.length && record && updateName(table, recordId, record) !== predictedName)
|
|
197
|
+
captureName = undefined;
|
|
198
|
+
if (captureName)
|
|
199
|
+
report.updateName = captureName;
|
|
200
|
+
const observedCaptures = captureName ? await collectEvidence(() => reader.rows('sys_update_xml', `name=${captureName}^sys_updated_on>=${started}`, 'sys_id,name,update_set,application,action,sys_updated_on,sys_mod_count')) ?? [] : [];
|
|
201
|
+
const after = await collectEvidence(preferences);
|
|
202
|
+
const comparison = after ? await collectEvidence(() => comparePreferences(before, after, [predicted, options.updateSet].filter(Boolean))) : undefined;
|
|
203
|
+
if (comparison)
|
|
204
|
+
Object.assign(report, { preferencesUnchanged: comparison.unchanged, preferenceRowsReplaced: comparison.replaced,
|
|
205
|
+
currentUpdateSet: comparison.currentUpdateSet });
|
|
206
|
+
const captures = observedCaptures.filter(row => captureVersions.get(row.sys_id) !== row.sys_mod_count);
|
|
207
|
+
const fail = (code) => {
|
|
208
|
+
throw new MetadataVerificationError(code, table, recordId, report, messages);
|
|
209
|
+
};
|
|
210
|
+
if (!csrfRejected) {
|
|
211
|
+
if (operation === 'delete' ? !!record : !record)
|
|
212
|
+
fail(operation === 'delete' ? 'delete_not_applied' : 'write_not_applied');
|
|
213
|
+
if (record && record.sys_scope !== scope.sysId)
|
|
214
|
+
fail('scope_not_applied');
|
|
215
|
+
if (observedCaptures.some(row => row.name !== captureName || row.sys_updated_on < started || !/^\d+$/.test(row.sys_mod_count)))
|
|
216
|
+
fail('not_captured');
|
|
217
|
+
if (!captures.length)
|
|
218
|
+
fail('not_captured');
|
|
219
|
+
}
|
|
220
|
+
for (const capture of captures) {
|
|
221
|
+
if (!ID.test(capture.update_set)) {
|
|
222
|
+
if (!csrfRejected)
|
|
223
|
+
fail('not_captured');
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
const set = await collectEvidence(() => reader.exact('sys_update_set', capture.update_set, 'name,application'));
|
|
227
|
+
if (!set) {
|
|
228
|
+
if (!csrfRejected)
|
|
229
|
+
fail('not_captured');
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
Object.assign(report, { updateSetSysId: set.sys_id, updateSetName: set.name, updateSetScope: set.application, action: capture.action });
|
|
233
|
+
if (!csrfRejected) {
|
|
234
|
+
if (expected && set.sys_id !== expected)
|
|
235
|
+
fail('captured_elsewhere');
|
|
236
|
+
if (!options.allowMixedScopeCapture && (set.application !== scope.sysId || capture.application !== scope.sysId))
|
|
237
|
+
fail('mixed_scope_capture');
|
|
238
|
+
if (capture.action !== (operation === 'delete' ? 'DELETE' : 'INSERT_OR_UPDATE'))
|
|
239
|
+
fail('not_captured');
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (operation === 'delete') {
|
|
243
|
+
const deleted = await collectEvidence(() => reader.rows('sys_metadata_delete', `sys_metadata=${recordId}^sys_created_on>=${started}`, 'sys_id,sys_metadata,sys_scope,sys_created_on'));
|
|
244
|
+
if (!csrfRejected && (!deleted.length || deleted.some(row => row.sys_metadata !== recordId || row.sys_scope !== scope.sysId || row.sys_created_on < started)))
|
|
245
|
+
fail('delete_not_captured');
|
|
246
|
+
}
|
|
247
|
+
if (store)
|
|
248
|
+
report.customization = await customizationEvidence(reader, captures.at(-1)?.sys_id, captureName);
|
|
249
|
+
if (csrfRejected)
|
|
250
|
+
fail('csrf_rejected');
|
|
251
|
+
if (!comparison.valid)
|
|
252
|
+
fail('session_changed');
|
|
253
|
+
if (submitFailure)
|
|
254
|
+
fail(submitFailure instanceof Error && submitFailure.message === 'csrf_rejected' ? 'csrf_rejected' : 'verification_unavailable');
|
|
255
|
+
return { table, sysId: recordId, action: operation, scope, capture: report, messages };
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
if (isPolicyRefusal(error) || (!submitted && error instanceof MetadataScopeError) || error instanceof MetadataVerificationError)
|
|
259
|
+
throw stripSecretsFromError(error);
|
|
260
|
+
if (!submitted && error instanceof Error && error.message === 'csrf_token_unavailable')
|
|
261
|
+
throw new MetadataScopeError('csrf_token_unavailable');
|
|
262
|
+
if (!submitted && error instanceof Error && error.message === 'form_redirect') {
|
|
263
|
+
throw new MetadataScopeError('form_redirected', { table, redirectPath: error.redirectPath });
|
|
264
|
+
}
|
|
265
|
+
if (!submitted)
|
|
266
|
+
throw new MetadataScopeError(error instanceof InvalidParameterException ? 'field_not_supported' : 'evidence_unavailable');
|
|
267
|
+
if (error instanceof FormSubmitError)
|
|
268
|
+
messages = error.messages;
|
|
269
|
+
throw new MetadataVerificationError(error instanceof Error && error.message === 'csrf_rejected' ? 'csrf_rejected' :
|
|
270
|
+
'verification_unavailable', table, recordId, report, messages);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=MetadataFormWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetadataFormWriter.js","sourceRoot":"","sources":["../../../src/sn/metadata/MetadataFormWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { FormWriteOptions } from '../../comm/http/FormRecordModels.js';
|
|
2
|
+
/** Global must be requested explicitly. Named scopes resolve to one active application. */
|
|
3
|
+
export type MetadataScopeRef = {
|
|
4
|
+
sysId: string;
|
|
5
|
+
} | {
|
|
6
|
+
scope: string;
|
|
7
|
+
} | 'global';
|
|
8
|
+
/**
|
|
9
|
+
* Opt-in for writing files of an installed Store application. The platform marks every file it
|
|
10
|
+
* captures as customized (replace_on_upgrade=false), so later upgrades of that application skip it.
|
|
11
|
+
*/
|
|
12
|
+
export interface StoreCustomizationOptions {
|
|
13
|
+
acknowledgeUpgradeSkip: true;
|
|
14
|
+
}
|
|
15
|
+
export interface MetadataWriteOptions extends FormWriteOptions {
|
|
16
|
+
scope: MetadataScopeRef;
|
|
17
|
+
updateSet?: string;
|
|
18
|
+
allowMixedScopeCapture?: boolean;
|
|
19
|
+
/** Required for an installed Store application, together with an explicit updateSet. */
|
|
20
|
+
storeCustomization?: StoreCustomizationOptions;
|
|
21
|
+
}
|
|
22
|
+
export interface MetadataDeleteOptions extends Omit<MetadataWriteOptions, 'fields' | 'variables' | 'initialQuery'> {
|
|
23
|
+
confirm: {
|
|
24
|
+
table: string;
|
|
25
|
+
sysId: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Upgrade evidence for a write to an installed Store application's file. */
|
|
29
|
+
export interface CustomizationReport {
|
|
30
|
+
storeApplication: true;
|
|
31
|
+
/** sys_update_xml.replace_on_upgrade of the capture; false means upgrades skip this file. */
|
|
32
|
+
replaceOnUpgrade?: boolean;
|
|
33
|
+
/** A sys_update_version taken from the Store application (the shipped baseline) exists. */
|
|
34
|
+
baselineVersion?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface CaptureReport {
|
|
37
|
+
updateSetSysId: string;
|
|
38
|
+
updateSetName: string;
|
|
39
|
+
updateSetScope: string;
|
|
40
|
+
predictedUpdateSetSysId?: string;
|
|
41
|
+
recordScope: string;
|
|
42
|
+
action: string;
|
|
43
|
+
/** sys_update_xml.name of the capture: <table>_<sys_id>, or the platform's coalescing name. */
|
|
44
|
+
updateName?: string;
|
|
45
|
+
preferencesUnchanged: boolean;
|
|
46
|
+
preferenceRowsReplaced: string[];
|
|
47
|
+
currentUpdateSet: {
|
|
48
|
+
before?: string;
|
|
49
|
+
after?: string;
|
|
50
|
+
switched: boolean;
|
|
51
|
+
};
|
|
52
|
+
customization?: CustomizationReport;
|
|
53
|
+
}
|
|
54
|
+
export interface MetadataWriteResult {
|
|
55
|
+
table: string;
|
|
56
|
+
sysId: string;
|
|
57
|
+
action: 'insert' | 'update' | 'delete';
|
|
58
|
+
scope: {
|
|
59
|
+
sysId: string;
|
|
60
|
+
scope: string;
|
|
61
|
+
};
|
|
62
|
+
capture: CaptureReport;
|
|
63
|
+
messages: string[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* One form section's layout. Elements use the Form Layout page's values: a field name,
|
|
67
|
+
* `.begin_split` / `.split` / `.end_split`, or `.formatter.<sys_ui_formatter sys_id>`.
|
|
68
|
+
*/
|
|
69
|
+
export interface FormLayout {
|
|
70
|
+
section: string;
|
|
71
|
+
table: string;
|
|
72
|
+
/** View name; '' is the Default view. */
|
|
73
|
+
view: string;
|
|
74
|
+
caption: string;
|
|
75
|
+
/** sys_scope of the section. */
|
|
76
|
+
scope: string;
|
|
77
|
+
elements: string[];
|
|
78
|
+
}
|
|
79
|
+
export interface FormLayoutWriteOptions {
|
|
80
|
+
/** The complete new layout, in order. Fields must be offered by the page; annotations and charts are not supported. */
|
|
81
|
+
elements: string[];
|
|
82
|
+
/** Must be the section's own application. */
|
|
83
|
+
scope: MetadataScopeRef;
|
|
84
|
+
/** In progress set of the section's application, already the user's set for it (WorkingSetManager.useUpdateSet). */
|
|
85
|
+
updateSet: string;
|
|
86
|
+
/** Required when the section belongs to an installed Store application. */
|
|
87
|
+
storeCustomization?: StoreCustomizationOptions;
|
|
88
|
+
}
|
|
89
|
+
export interface FormLayoutWriteResult {
|
|
90
|
+
section: string;
|
|
91
|
+
table: string;
|
|
92
|
+
view: string;
|
|
93
|
+
scope: {
|
|
94
|
+
sysId: string;
|
|
95
|
+
scope: string;
|
|
96
|
+
};
|
|
97
|
+
/** The layout read back after the save. */
|
|
98
|
+
elements: string[];
|
|
99
|
+
/** The layout before the save, to restore it. */
|
|
100
|
+
previousElements: string[];
|
|
101
|
+
capture: CaptureReport;
|
|
102
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetadataModels.js","sourceRoot":"","sources":["../../../src/sn/metadata/MetadataModels.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema identifiers that explain a refusal. Each value is checked: only table and field names,
|
|
3
|
+
* sys_ids, update-set states and a redirect path without its query reach the error.
|
|
4
|
+
*/
|
|
5
|
+
export interface MetadataErrorDetail {
|
|
6
|
+
field?: string;
|
|
7
|
+
table?: string;
|
|
8
|
+
updateSetState?: string;
|
|
9
|
+
updateSetApplication?: string;
|
|
10
|
+
redirectPath?: string;
|
|
11
|
+
}
|
|
12
|
+
/** A refusal before the form POST. Messages contain codes, never caller values. */
|
|
13
|
+
export declare class MetadataScopeError extends Error {
|
|
14
|
+
readonly code: 'scope_required' | 'scope_unknown' | 'scope_ambiguous' | 'scope_mismatch' | 'scope_not_applied' | 'store_scope' | 'table_not_supported' | 'field_not_supported' | 'delete_not_supported' | 'not_permitted' | 'csrf_token_unavailable' | 'invalid_input' | 'evidence_unavailable' | 'update_set_required' | 'protected_record' | 'form_redirected' | 'update_set_not_current';
|
|
15
|
+
readonly detail?: MetadataErrorDetail;
|
|
16
|
+
constructor(code: 'scope_required' | 'scope_unknown' | 'scope_ambiguous' | 'scope_mismatch' | 'scope_not_applied' | 'store_scope' | 'table_not_supported' | 'field_not_supported' | 'delete_not_supported' | 'not_permitted' | 'csrf_token_unavailable' | 'invalid_input' | 'evidence_unavailable' | 'update_set_required' | 'protected_record' | 'form_redirected' | 'update_set_not_current', detail?: MetadataErrorDetail);
|
|
17
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const IDENTIFIER = /^[a-z0-9_]{1,80}$/i;
|
|
2
|
+
const STATES = new Set(['in progress', 'complete', 'ignore']);
|
|
3
|
+
function safeDetail(detail) {
|
|
4
|
+
if (!detail)
|
|
5
|
+
return undefined;
|
|
6
|
+
const safe = {};
|
|
7
|
+
if (detail.field && IDENTIFIER.test(detail.field))
|
|
8
|
+
safe.field = detail.field;
|
|
9
|
+
if (detail.table && IDENTIFIER.test(detail.table))
|
|
10
|
+
safe.table = detail.table;
|
|
11
|
+
if (detail.updateSetState !== undefined)
|
|
12
|
+
safe.updateSetState = STATES.has(detail.updateSetState) ? detail.updateSetState : 'unknown';
|
|
13
|
+
if (detail.updateSetApplication && (detail.updateSetApplication === 'global' || /^[a-f0-9]{32}$/i.test(detail.updateSetApplication))) {
|
|
14
|
+
safe.updateSetApplication = detail.updateSetApplication;
|
|
15
|
+
}
|
|
16
|
+
const path = detail.redirectPath?.split(/[?#]/)[0];
|
|
17
|
+
if (path && /^\/[a-z0-9_./-]{1,120}$/i.test(path))
|
|
18
|
+
safe.redirectPath = path;
|
|
19
|
+
return Object.keys(safe).length ? safe : undefined;
|
|
20
|
+
}
|
|
21
|
+
/** A refusal before the form POST. Messages contain codes, never caller values. */
|
|
22
|
+
export class MetadataScopeError extends Error {
|
|
23
|
+
code;
|
|
24
|
+
detail;
|
|
25
|
+
constructor(code, detail) {
|
|
26
|
+
super(`Metadata write refused: ${code}`);
|
|
27
|
+
this.code = code;
|
|
28
|
+
this.name = 'MetadataScopeError';
|
|
29
|
+
this.detail = safeDetail(detail);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=MetadataScopeError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetadataScopeError.js","sourceRoot":"","sources":["../../../src/sn/metadata/MetadataScopeError.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,oBAAoB,CAAC;AACxC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAa9D,SAAS,UAAU,CAAC,MAA4B;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,IAAI,GAAwB,EAAE,CAAC;IACrC,IAAI,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7E,IAAI,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7E,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS;QAAE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IACrI,IAAI,MAAM,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,oBAAoB,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC;QACnI,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IAC5D,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,IAAI,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC5E,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,mFAAmF;AACnF,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAEN;IADnB,MAAM,CAAuB;IAC7C,YAAmC,IAIP,EACxB,MAA4B;QAC5B,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;QANV,SAAI,GAAJ,IAAI,CAIX;QAGxB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;CACJ"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CaptureReport } from './MetadataModels.js';
|
|
2
|
+
/** A submit was attempted. Read the evidence before deciding how to clean up. Never replay automatically. */
|
|
3
|
+
export declare class MetadataVerificationError extends Error {
|
|
4
|
+
readonly code: 'scope_not_applied' | 'not_captured' | 'captured_elsewhere' | 'mixed_scope_capture' | 'session_changed' | 'delete_not_applied' | 'delete_not_captured' | 'write_not_applied' | 'verification_unavailable' | 'csrf_rejected';
|
|
5
|
+
readonly table: string;
|
|
6
|
+
readonly sysId: string;
|
|
7
|
+
readonly capture?: Partial<CaptureReport>;
|
|
8
|
+
readonly messages: string[];
|
|
9
|
+
readonly writeAttempted: boolean;
|
|
10
|
+
constructor(code: 'scope_not_applied' | 'not_captured' | 'captured_elsewhere' | 'mixed_scope_capture' | 'session_changed' | 'delete_not_applied' | 'delete_not_captured' | 'write_not_applied' | 'verification_unavailable' | 'csrf_rejected', table: string, sysId: string, capture?: Partial<CaptureReport>, messages?: string[], writeAttempted?: boolean);
|
|
11
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** A submit was attempted. Read the evidence before deciding how to clean up. Never replay automatically. */
|
|
2
|
+
export class MetadataVerificationError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
table;
|
|
5
|
+
sysId;
|
|
6
|
+
capture;
|
|
7
|
+
messages;
|
|
8
|
+
writeAttempted;
|
|
9
|
+
constructor(code, table, sysId, capture, messages = [], writeAttempted = true) {
|
|
10
|
+
super(`Metadata submit verification failed: ${code}`);
|
|
11
|
+
this.code = code;
|
|
12
|
+
this.table = table;
|
|
13
|
+
this.sysId = sysId;
|
|
14
|
+
this.capture = capture;
|
|
15
|
+
this.messages = messages;
|
|
16
|
+
this.writeAttempted = writeAttempted;
|
|
17
|
+
this.name = 'MetadataVerificationError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=MetadataVerificationError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetadataVerificationError.js","sourceRoot":"","sources":["../../../src/sn/metadata/MetadataVerificationError.ts"],"names":[],"mappings":"AACA,6GAA6G;AAC7G,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IACb;IAGf;IAA+B;IAC/B;IAAkD;IAAyC;IAJ/G,YAAmC,IAEmC,EAClD,KAAa,EAAkB,KAAa,EAC5C,OAAgC,EAAkB,WAAqB,EAAE,EAAkB,iBAAiB,IAAI;QAChI,KAAK,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;QALvB,SAAI,GAAJ,IAAI,CAE+B;QAClD,UAAK,GAAL,KAAK,CAAQ;QAAkB,UAAK,GAAL,KAAK,CAAQ;QAC5C,YAAO,GAAP,OAAO,CAAyB;QAAkB,aAAQ,GAAR,QAAQ,CAAe;QAAkB,mBAAc,GAAd,cAAc,CAAO;QAEhI,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC5C,CAAC;CACJ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MetadataRow } from './MetadataReader.js';
|
|
2
|
+
export declare function preferenceValue(rows: MetadataRow[], name: string): string | undefined;
|
|
3
|
+
export declare function comparePreferences(before: MetadataRow[], after: MetadataRow[], expectedSet?: string | string[]): {
|
|
4
|
+
valid: boolean;
|
|
5
|
+
unchanged: boolean;
|
|
6
|
+
replaced: string[];
|
|
7
|
+
currentUpdateSet: {
|
|
8
|
+
before: string;
|
|
9
|
+
after: string;
|
|
10
|
+
switched: boolean;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { MetadataScopeError } from '../MetadataScopeError.js';
|
|
2
|
+
export function preferenceValue(rows, name) {
|
|
3
|
+
const values = [...new Set(rows.filter(row => row.name === name).map(row => row.value))];
|
|
4
|
+
if (values.length > 1)
|
|
5
|
+
throw new MetadataScopeError('evidence_unavailable');
|
|
6
|
+
return values[0];
|
|
7
|
+
}
|
|
8
|
+
function multiset(rows) {
|
|
9
|
+
return rows.map(row => JSON.stringify([row.name, row.value])).sort();
|
|
10
|
+
}
|
|
11
|
+
export function comparePreferences(before, after, expectedSet) {
|
|
12
|
+
const oldSet = preferenceValue(before, 'sys_update_set');
|
|
13
|
+
const newSet = preferenceValue(after, 'sys_update_set');
|
|
14
|
+
const switched = oldSet !== newSet;
|
|
15
|
+
const unchanged = JSON.stringify(multiset(before)) === JSON.stringify(multiset(after));
|
|
16
|
+
const destinations = Array.isArray(expectedSet) ? expectedSet : [expectedSet];
|
|
17
|
+
const allowed = switched && !!newSet && destinations.includes(newSet) &&
|
|
18
|
+
before.filter(row => row.name === 'sys_update_set').length === 1 &&
|
|
19
|
+
after.filter(row => row.name === 'sys_update_set').length === 1;
|
|
20
|
+
const remaining = (rows) => allowed ? rows.filter(row => row.name !== 'sys_update_set') : rows;
|
|
21
|
+
const valid = JSON.stringify(multiset(remaining(before))) === JSON.stringify(multiset(remaining(after)));
|
|
22
|
+
const oldIds = new Set(before.map(row => JSON.stringify([row.sys_id, row.name, row.value])));
|
|
23
|
+
const replaced = [...new Set(after.filter(row => !oldIds.has(JSON.stringify([row.sys_id, row.name, row.value])) &&
|
|
24
|
+
before.some(old => old.name === row.name && old.value === row.value)).map(row => row.name))].sort();
|
|
25
|
+
return { valid, unchanged, replaced, currentUpdateSet: { before: oldSet, after: newSet, switched } };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=MetadataPreferences.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetadataPreferences.js","sourceRoot":"","sources":["../../../../src/sn/metadata/internal/MetadataPreferences.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ServiceNowRequest } from '../../../comm/http/ServiceNowRequest.js';
|
|
2
|
+
export type MetadataRow = Record<string, string>;
|
|
3
|
+
/** Read-only, bounded pagination on the same authenticated request as the forms. */
|
|
4
|
+
export declare class MetadataReader {
|
|
5
|
+
private _request;
|
|
6
|
+
constructor(_request: ServiceNowRequest);
|
|
7
|
+
rows(table: string, query: string, fields: string): Promise<MetadataRow[]>;
|
|
8
|
+
exact(table: string, sysId: string, fields: string): Promise<MetadataRow | undefined>;
|
|
9
|
+
}
|