@sonisoft/now-sdk-ext-core 6.8.0 → 6.9.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.
Files changed (35) hide show
  1. package/dist/comm/http/FormRecordWriter.js +18 -0
  2. package/dist/comm/http/FormRecordWriter.js.map +1 -1
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.js +3 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/policy/ScanScript.js +3 -0
  7. package/dist/policy/ScanScript.js.map +1 -1
  8. package/dist/sn/metadata/FormLayoutWriter.d.ts +22 -0
  9. package/dist/sn/metadata/FormLayoutWriter.js +237 -0
  10. package/dist/sn/metadata/FormLayoutWriter.js.map +1 -0
  11. package/dist/sn/metadata/MetadataFormWriter.d.ts +0 -1
  12. package/dist/sn/metadata/MetadataFormWriter.js +45 -35
  13. package/dist/sn/metadata/MetadataFormWriter.js.map +1 -1
  14. package/dist/sn/metadata/MetadataModels.d.ts +58 -0
  15. package/dist/sn/metadata/MetadataScopeError.d.ts +14 -2
  16. package/dist/sn/metadata/MetadataScopeError.js +23 -1
  17. package/dist/sn/metadata/MetadataScopeError.js.map +1 -1
  18. package/dist/sn/metadata/internal/MetadataScope.d.ts +12 -0
  19. package/dist/sn/metadata/internal/MetadataScope.js +48 -0
  20. package/dist/sn/metadata/internal/MetadataScope.js.map +1 -0
  21. package/dist/sn/metadata/internal/MetadataUpdateNames.d.ts +8 -0
  22. package/dist/sn/metadata/internal/MetadataUpdateNames.js +28 -0
  23. package/dist/sn/metadata/internal/MetadataUpdateNames.js.map +1 -0
  24. package/dist/sn/metadata/internal/SlushbucketPage.d.ts +20 -0
  25. package/dist/sn/metadata/internal/SlushbucketPage.js +67 -0
  26. package/dist/sn/metadata/internal/SlushbucketPage.js.map +1 -0
  27. package/dist/sn/updateset/UpdateSetManager.js +30 -3
  28. package/dist/sn/updateset/UpdateSetManager.js.map +1 -1
  29. package/dist/sn/updateset/WorkingSetManager.d.ts +53 -0
  30. package/dist/sn/updateset/WorkingSetManager.js +279 -0
  31. package/dist/sn/updateset/WorkingSetManager.js.map +1 -0
  32. package/dist/sn/updateset/WorkingSetModels.d.ts +77 -0
  33. package/dist/sn/updateset/WorkingSetModels.js +12 -0
  34. package/dist/sn/updateset/WorkingSetModels.js.map +1 -0
  35. package/package.json +2 -2
@@ -9,6 +9,8 @@ import { MetadataScopeError } from './MetadataScopeError.js';
9
9
  import { MetadataVerificationError } from './MetadataVerificationError.js';
10
10
  import { MetadataReader } from './internal/MetadataReader.js';
11
11
  import { comparePreferences, preferenceValue } from './internal/MetadataPreferences.js';
12
+ import { updateName, updateNameFields } from './internal/MetadataUpdateNames.js';
13
+ import { customizationEvidence, resolveScope } from './internal/MetadataScope.js';
12
14
  const ID = /^[a-f0-9]{32}$/i;
13
15
  const NAME = /^[a-z0-9_]+$/i;
14
16
  const WRITE_DENY = new Set(['sys_update_set', 'sys_update_xml', 'sys_scope', 'sys_app', 'sys_store_app',
@@ -32,30 +34,6 @@ export class MetadataFormWriter {
32
34
  }
33
35
  return this.write('delete', table, sysId, options);
34
36
  }
35
- async scope(reader, ref) {
36
- if (!ref)
37
- throw new MetadataScopeError('scope_required');
38
- const id = ref === 'global' ? 'global' : typeof ref === 'object' && 'sysId' in ref ? ref.sysId : undefined;
39
- const name = typeof ref === 'object' && 'scope' in ref ? ref.scope : undefined;
40
- if (id ? id !== 'global' && !ID.test(id) : !name || !NAME.test(name) || name === 'global') {
41
- throw new MetadataScopeError('invalid_input');
42
- }
43
- const rows = await reader.rows('sys_scope', id ? `sys_id=${id}` : `scope=${name}^active=true`, 'sys_id,scope,active,sys_class_name');
44
- if (rows.some(row => id ? row.sys_id !== id : row.scope !== name))
45
- throw new MetadataScopeError('evidence_unavailable');
46
- if (!rows.length)
47
- throw new MetadataScopeError('scope_unknown');
48
- if (rows.length !== 1)
49
- throw new MetadataScopeError('scope_ambiguous');
50
- const app = rows[0];
51
- if ((!id && app.active !== 'true') || !app.scope || (app.sys_id !== 'global' && !ID.test(app.sys_id)))
52
- throw new MetadataScopeError('evidence_unavailable');
53
- if (app.sys_class_name === 'sys_store_app')
54
- throw new MetadataScopeError('store_scope');
55
- if (await reader.exact('sys_store_app', app.sys_id, 'scope'))
56
- throw new MetadataScopeError('store_scope');
57
- return { sysId: app.sys_id, scope: app.scope };
58
- }
59
37
  async table(reader, table, deleting) {
60
38
  const visited = new Set();
61
39
  let rows = await reader.rows('sys_db_object', `name=${table}`, 'sys_id,name,super_class');
@@ -94,12 +72,21 @@ export class MetadataFormWriter {
94
72
  try {
95
73
  const request = SessionManager.getInstance().getRequest(this._instance);
96
74
  const reader = new MetadataReader(request);
97
- const scope = await this.scope(reader, options.scope);
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');
98
80
  await this.table(reader, table, operation === 'delete');
81
+ const nameFields = updateNameFields(table);
82
+ let existing;
99
83
  if (operation !== 'insert') {
100
- const record = await reader.exact(table, sysId, 'sys_scope');
101
- if (!record || record.sys_scope !== scope.sysId)
84
+ existing = await reader.exact(table, sysId, ['sys_scope', ...(store ? ['sys_policy'] : []), ...nameFields].join(','));
85
+ if (!existing || existing.sys_scope !== scope.sysId)
102
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 });
103
90
  }
104
91
  // Use the existing WorkflowManager current-user read pattern on this session.
105
92
  const users = await reader.rows('sys_user', 'sys_id=javascript:gs.getUserID()', 'sys_id');
@@ -119,8 +106,9 @@ export class MetadataFormWriter {
119
106
  throw new MetadataScopeError('evidence_unavailable');
120
107
  if (options.updateSet) {
121
108
  const set = await reader.exact('sys_update_set', options.updateSet, 'application,state');
122
- if (!set || set.state !== 'in progress' || set.application !== scope.sysId)
123
- throw new MetadataScopeError('invalid_input');
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
+ }
124
112
  }
125
113
  const transport = createFormTransport(this._instance);
126
114
  const form = await transport.loadForm(table, sysId, { ...options,
@@ -135,7 +123,7 @@ export class MetadataFormWriter {
135
123
  const writeOptions = options;
136
124
  for (const field of Object.keys(writeOptions.fields ?? {})) {
137
125
  if (!NAME.test(field) || /^sys_/i.test(field) || !form.fields[`${table}.${field}`])
138
- throw new MetadataScopeError('field_not_supported');
126
+ throw new MetadataScopeError('field_not_supported', { field, table });
139
127
  }
140
128
  const action = operation === 'insert' ? 'sysverb_insert_and_stay' : operation === 'update' ? 'sysverb_update' : 'sysverb_delete';
141
129
  if (operation !== 'insert' && !form.actions[action])
@@ -155,8 +143,20 @@ export class MetadataFormWriter {
155
143
  const loaded = await preferences();
156
144
  if (!comparePreferences(before, loaded).valid)
157
145
  throw new MetadataVerificationError('session_changed', table, recordId, undefined, [], false);
158
- const previousCaptures = await reader.rows('sys_update_xml', `name=${table}_${recordId}`, 'sys_id,name,sys_mod_count');
159
- if (previousCaptures.some(row => row.name !== `${table}_${recordId}` || !/^\d+$/.test(row.sys_mod_count))) {
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 => !/^[a-z0-9_]+$/i.test(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
160
  throw new MetadataScopeError('evidence_unavailable');
161
161
  }
162
162
  const captureVersions = new Map(previousCaptures.map(row => [row.sys_id, row.sys_mod_count]));
@@ -190,9 +190,14 @@ export class MetadataFormWriter {
190
190
  return undefined;
191
191
  }
192
192
  };
193
- const record = await collectEvidence(() => reader.exact(table, recordId, 'sys_scope'));
193
+ const record = await collectEvidence(() => reader.exact(table, recordId, ['sys_scope', ...nameFields].join(',')));
194
194
  report.recordScope = record?.sys_scope ?? (!csrfRejected && operation === 'delete' ? scope.sysId : undefined);
195
- const observedCaptures = await collectEvidence(() => reader.rows('sys_update_xml', `name=${table}_${recordId}^sys_updated_on>=${started}`, 'sys_id,name,update_set,application,action,sys_updated_on,sys_mod_count')) ?? [];
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')) ?? [] : [];
196
201
  const after = await collectEvidence(preferences);
197
202
  const comparison = after ? await collectEvidence(() => comparePreferences(before, after, [predicted, options.updateSet].filter(Boolean))) : undefined;
198
203
  if (comparison)
@@ -207,7 +212,7 @@ export class MetadataFormWriter {
207
212
  fail(operation === 'delete' ? 'delete_not_applied' : 'write_not_applied');
208
213
  if (record && record.sys_scope !== scope.sysId)
209
214
  fail('scope_not_applied');
210
- if (observedCaptures.some(row => row.name !== `${table}_${recordId}` || row.sys_updated_on < started || !/^\d+$/.test(row.sys_mod_count)))
215
+ if (observedCaptures.some(row => row.name !== captureName || row.sys_updated_on < started || !/^\d+$/.test(row.sys_mod_count)))
211
216
  fail('not_captured');
212
217
  if (!captures.length)
213
218
  fail('not_captured');
@@ -239,6 +244,8 @@ export class MetadataFormWriter {
239
244
  if (!csrfRejected && (!deleted.length || deleted.some(row => row.sys_metadata !== recordId || row.sys_scope !== scope.sysId || row.sys_created_on < started)))
240
245
  fail('delete_not_captured');
241
246
  }
247
+ if (store)
248
+ report.customization = await customizationEvidence(reader, captures.at(-1)?.sys_id, captureName);
242
249
  if (csrfRejected)
243
250
  fail('csrf_rejected');
244
251
  if (!comparison.valid)
@@ -252,6 +259,9 @@ export class MetadataFormWriter {
252
259
  throw stripSecretsFromError(error);
253
260
  if (!submitted && error instanceof Error && error.message === 'csrf_token_unavailable')
254
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
+ }
255
265
  if (!submitted)
256
266
  throw new MetadataScopeError(error instanceof InvalidParameterException ? 'field_not_supported' : 'evidence_unavailable');
257
267
  if (error instanceof FormSubmitError)
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataFormWriter.js","sourceRoot":"","sources":["../../../src/sn/metadata/MetadataFormWriter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MetadataFormWriter.js","sourceRoot":"","sources":["../../../src/sn/metadata/MetadataFormWriter.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,19 @@ export type MetadataScopeRef = {
5
5
  } | {
6
6
  scope: string;
7
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
+ }
8
15
  export interface MetadataWriteOptions extends FormWriteOptions {
9
16
  scope: MetadataScopeRef;
10
17
  updateSet?: string;
11
18
  allowMixedScopeCapture?: boolean;
19
+ /** Required for an installed Store application, together with an explicit updateSet. */
20
+ storeCustomization?: StoreCustomizationOptions;
12
21
  }
13
22
  export interface MetadataDeleteOptions extends Omit<MetadataWriteOptions, 'fields' | 'variables' | 'initialQuery'> {
14
23
  confirm: {
@@ -16,6 +25,14 @@ export interface MetadataDeleteOptions extends Omit<MetadataWriteOptions, 'field
16
25
  sysId: string;
17
26
  };
18
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
+ }
19
36
  export interface CaptureReport {
20
37
  updateSetSysId: string;
21
38
  updateSetName: string;
@@ -23,6 +40,8 @@ export interface CaptureReport {
23
40
  predictedUpdateSetSysId?: string;
24
41
  recordScope: string;
25
42
  action: string;
43
+ /** sys_update_xml.name of the capture: <table>_<sys_id>, or the platform's coalescing name. */
44
+ updateName?: string;
26
45
  preferencesUnchanged: boolean;
27
46
  preferenceRowsReplaced: string[];
28
47
  currentUpdateSet: {
@@ -30,6 +49,7 @@ export interface CaptureReport {
30
49
  after?: string;
31
50
  switched: boolean;
32
51
  };
52
+ customization?: CustomizationReport;
33
53
  }
34
54
  export interface MetadataWriteResult {
35
55
  table: string;
@@ -42,3 +62,41 @@ export interface MetadataWriteResult {
42
62
  capture: CaptureReport;
43
63
  messages: string[];
44
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
+ }
@@ -1,5 +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
+ }
1
12
  /** A refusal before the form POST. Messages contain codes, never caller values. */
2
13
  export declare class MetadataScopeError extends Error {
3
- 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';
4
- 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');
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);
5
17
  }
@@ -1,10 +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
+ }
1
21
  /** A refusal before the form POST. Messages contain codes, never caller values. */
2
22
  export class MetadataScopeError extends Error {
3
23
  code;
4
- constructor(code) {
24
+ detail;
25
+ constructor(code, detail) {
5
26
  super(`Metadata write refused: ${code}`);
6
27
  this.code = code;
7
28
  this.name = 'MetadataScopeError';
29
+ this.detail = safeDetail(detail);
8
30
  }
9
31
  }
10
32
  //# sourceMappingURL=MetadataScopeError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataScopeError.js","sourceRoot":"","sources":["../../../src/sn/metadata/MetadataScopeError.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACN;IAAnC,YAAmC,IAGS;QACxC,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;QAJV,SAAI,GAAJ,IAAI,CAGK;QAExC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACrC,CAAC;CACJ"}
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,12 @@
1
+ import type { CustomizationReport, MetadataScopeRef } from '../MetadataModels.js';
2
+ import type { MetadataReader } from './MetadataReader.js';
3
+ export interface ResolvedScope {
4
+ sysId: string;
5
+ scope: string;
6
+ /** An installed Store application: writes need the caller's explicit opt-in. */
7
+ store: boolean;
8
+ }
9
+ /** Resolve an explicit scope to exactly one application. There is no default scope. */
10
+ export declare function resolveScope(reader: MetadataReader, ref: MetadataScopeRef): Promise<ResolvedScope>;
11
+ /** Upgrade evidence for a Store file. Best effort: a missing read never turns a verified write into a failure. */
12
+ export declare function customizationEvidence(reader: MetadataReader, captureId: string | undefined, name: string | undefined): Promise<CustomizationReport>;
@@ -0,0 +1,48 @@
1
+ import { isPolicyRefusal } from '../../../policy/PolicyRefusal.js';
2
+ import { MetadataScopeError } from '../MetadataScopeError.js';
3
+ const ID = /^[a-f0-9]{32}$/i;
4
+ const NAME = /^[a-z0-9_]+$/i;
5
+ /** Resolve an explicit scope to exactly one application. There is no default scope. */
6
+ export async function resolveScope(reader, ref) {
7
+ if (!ref)
8
+ throw new MetadataScopeError('scope_required');
9
+ const id = ref === 'global' ? 'global' : typeof ref === 'object' && 'sysId' in ref ? ref.sysId : undefined;
10
+ const name = typeof ref === 'object' && 'scope' in ref ? ref.scope : undefined;
11
+ if (id ? id !== 'global' && !ID.test(id) : !name || !NAME.test(name) || name === 'global') {
12
+ throw new MetadataScopeError('invalid_input');
13
+ }
14
+ const rows = await reader.rows('sys_scope', id ? `sys_id=${id}` : `scope=${name}^active=true`, 'sys_id,scope,active,sys_class_name');
15
+ if (rows.some(row => id ? row.sys_id !== id : row.scope !== name))
16
+ throw new MetadataScopeError('evidence_unavailable');
17
+ if (!rows.length)
18
+ throw new MetadataScopeError('scope_unknown');
19
+ if (rows.length !== 1)
20
+ throw new MetadataScopeError('scope_ambiguous');
21
+ const app = rows[0];
22
+ if ((!id && app.active !== 'true') || !app.scope || (app.sys_id !== 'global' && !ID.test(app.sys_id)))
23
+ throw new MetadataScopeError('evidence_unavailable');
24
+ const store = app.sys_class_name === 'sys_store_app' || !!await reader.exact('sys_store_app', app.sys_id, 'scope');
25
+ return { sysId: app.sys_id, scope: app.scope, store };
26
+ }
27
+ /** Upgrade evidence for a Store file. Best effort: a missing read never turns a verified write into a failure. */
28
+ export async function customizationEvidence(reader, captureId, name) {
29
+ const report = { storeApplication: true };
30
+ const read = async (collect) => {
31
+ try {
32
+ return await collect();
33
+ }
34
+ catch (error) {
35
+ if (isPolicyRefusal(error))
36
+ throw error;
37
+ return undefined;
38
+ }
39
+ };
40
+ const capture = captureId ? await read(() => reader.exact('sys_update_xml', captureId, 'replace_on_upgrade')) : undefined;
41
+ if (capture && ['true', 'false', '1', '0'].includes(capture.replace_on_upgrade))
42
+ report.replaceOnUpgrade = ['true', '1'].includes(capture.replace_on_upgrade);
43
+ const versions = name ? await read(() => reader.rows('sys_update_version', `name=${name}^source_table=sys_store_app`, 'sys_id,name')) : undefined;
44
+ if (versions)
45
+ report.baselineVersion = versions.some(row => row.name === name);
46
+ return report;
47
+ }
48
+ //# sourceMappingURL=MetadataScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataScope.js","sourceRoot":"","sources":["../../../../src/sn/metadata/internal/MetadataScope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { MetadataRow } from './MetadataReader.js';
2
+ /** Record fields to read so that {@link updateName} can name the capture; empty for `<table>_<sys_id>`. */
3
+ export declare function updateNameFields(table: string): string[];
4
+ /**
5
+ * The sys_update_xml name a change of this record is captured under, or undefined when the record
6
+ * does not supply a usable name (the caller must then fail rather than guess).
7
+ */
8
+ export declare function updateName(table: string, sysId: string, row?: MetadataRow): string | undefined;
@@ -0,0 +1,28 @@
1
+ const PART = /^[a-z0-9_]+$/i;
2
+ /**
3
+ * Tables whose captures coalesce under a platform name rather than `<table>_<sys_id>`, with the
4
+ * record fields that name is built from. Seen on Australia: every later change of the same label
5
+ * or choice list replaces the one capture with that name.
6
+ */
7
+ const COALESCING = {
8
+ sys_documentation: { fields: ['name', 'element', 'language'],
9
+ name: row => `sys_documentation_${row.name}_${row.element}_${row.language}` },
10
+ sys_choice_set: { fields: ['name', 'element'], name: row => `sys_choice_${row.name}_${row.element}` },
11
+ };
12
+ /** Record fields to read so that {@link updateName} can name the capture; empty for `<table>_<sys_id>`. */
13
+ export function updateNameFields(table) {
14
+ return COALESCING[table]?.fields ?? [];
15
+ }
16
+ /**
17
+ * The sys_update_xml name a change of this record is captured under, or undefined when the record
18
+ * does not supply a usable name (the caller must then fail rather than guess).
19
+ */
20
+ export function updateName(table, sysId, row) {
21
+ const rule = COALESCING[table];
22
+ if (!rule)
23
+ return `${table}_${sysId}`;
24
+ if (!row || rule.fields.some(field => !PART.test(row[field] ?? '')))
25
+ return undefined;
26
+ return rule.name(row);
27
+ }
28
+ //# sourceMappingURL=MetadataUpdateNames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataUpdateNames.js","sourceRoot":"","sources":["../../../../src/sn/metadata/internal/MetadataUpdateNames.ts"],"names":[],"mappings":"AAEA,MAAM,IAAI,GAAG,eAAe,CAAC;AAE7B;;;;GAIG;AACH,MAAM,UAAU,GAA6E;IACzF,iBAAiB,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC;QACxD,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,qBAAqB,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE;IACjF,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE;CACxG,CAAC;AAEF,2GAA2G;AAC3G,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC1C,OAAO,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,KAAa,EAAE,GAAiB;IACtE,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC;IACtC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACtF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,20 @@
1
+ /** The parts of the classic Form Layout page (`/slushbucket.do?sysparm_form=section`) a save needs. */
2
+ export interface SlushbucketPage {
3
+ /** Hidden inputs of the `editPage` form, first value per name. */
4
+ inputs: Record<string, string>;
5
+ /** Option values of the Available bucket (`select_0`), in page order. */
6
+ available: string[];
7
+ /** Option values of the Selected bucket (`select_1`): the section's current layout, in order. */
8
+ selected: string[];
9
+ /** Whether the page rendered a Save button. */
10
+ canSave: boolean;
11
+ }
12
+ /** Parse the Form Layout page. Throws when the page has no `editPage` form (a login or error page). */
13
+ export declare function parseSlushbucketPage(html: string): SlushbucketPage;
14
+ /** The Section select's option values from the GlideViewManager `refreshSection` response, in order. */
15
+ export declare function parseSectionChoices(xml: string): string[];
16
+ /**
17
+ * The page's `saveAllSelected` join: comma-separated, with a comma inside a value written `\,`. The page escapes only
18
+ * the delimiter, so a value holding a backslash cannot be encoded unambiguously and is refused (undefined).
19
+ */
20
+ export declare function joinLayoutValues(values: string[]): string | undefined;
@@ -0,0 +1,67 @@
1
+ import { Parser } from 'htmlparser2';
2
+ /** Parse the Form Layout page. Throws when the page has no `editPage` form (a login or error page). */
3
+ export function parseSlushbucketPage(html) {
4
+ const inputs = {};
5
+ const buckets = { select_0: [], select_1: [] };
6
+ let inForm = false, sawForm = false, canSave = false;
7
+ let bucket;
8
+ const parser = new Parser({
9
+ onopentag(tag, attrs) {
10
+ if (tag === 'form') {
11
+ inForm = attrs.name === 'editPage';
12
+ sawForm ||= inForm;
13
+ return;
14
+ }
15
+ if (!inForm)
16
+ return;
17
+ if (tag === 'input' && attrs.name && (attrs.type ?? '').toLowerCase() === 'hidden' && !(attrs.name in inputs && inputs[attrs.name])) {
18
+ inputs[attrs.name] = attrs.value ?? '';
19
+ }
20
+ if (tag === 'select' && (attrs.name === 'select_0' || attrs.name === 'select_1'))
21
+ bucket = attrs.name;
22
+ if (tag === 'option' && bucket && attrs.value !== undefined)
23
+ buckets[bucket].push(attrs.value);
24
+ if (tag === 'button' && attrs.id === 'sysverb_save')
25
+ canSave = true;
26
+ },
27
+ onclosetag(tag) {
28
+ if (tag === 'select')
29
+ bucket = undefined;
30
+ if (tag === 'form')
31
+ inForm = false;
32
+ },
33
+ }, { decodeEntities: true, lowerCaseTags: true, lowerCaseAttributeNames: true });
34
+ parser.write(html);
35
+ parser.end();
36
+ if (!sawForm)
37
+ throw new Error('Not a Form Layout page');
38
+ return { inputs, available: buckets.select_0, selected: buckets.select_1, canSave };
39
+ }
40
+ /** The Section select's option values from the GlideViewManager `refreshSection` response, in order. */
41
+ export function parseSectionChoices(xml) {
42
+ const values = [];
43
+ let inSections = false;
44
+ const parser = new Parser({
45
+ onopentag(tag, attrs) {
46
+ if (tag === 'sections')
47
+ inSections = true;
48
+ if (inSections && tag === 'choice' && attrs.value)
49
+ values.push(attrs.value);
50
+ },
51
+ onclosetag(tag) { if (tag === 'sections')
52
+ inSections = false; },
53
+ }, { xmlMode: true, decodeEntities: true, lowerCaseTags: true, lowerCaseAttributeNames: true });
54
+ parser.write(xml);
55
+ parser.end();
56
+ return values;
57
+ }
58
+ /**
59
+ * The page's `saveAllSelected` join: comma-separated, with a comma inside a value written `\,`. The page escapes only
60
+ * the delimiter, so a value holding a backslash cannot be encoded unambiguously and is refused (undefined).
61
+ */
62
+ export function joinLayoutValues(values) {
63
+ if (values.some(value => value.includes('\\')))
64
+ return undefined;
65
+ return values.map(value => value.split(',').join('\\,')).join(',');
66
+ }
67
+ //# sourceMappingURL=SlushbucketPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlushbucketPage.js","sourceRoot":"","sources":["../../../../src/sn/metadata/internal/SlushbucketPage.ts"],"names":[],"mappings":"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"}