@meshmakers/octo-services 3.4.1480 → 3.5.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/README.md +3 -1
- package/fesm2022/meshmakers-octo-services-testing.mjs +127 -0
- package/fesm2022/meshmakers-octo-services-testing.mjs.map +1 -0
- package/fesm2022/meshmakers-octo-services.mjs +752 -50
- package/fesm2022/meshmakers-octo-services.mjs.map +1 -1
- package/package.json +7 -1
- package/types/meshmakers-octo-services-testing.d.ts +44 -0
- package/types/meshmakers-octo-services.d.ts +4465 -2200
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, Injector, Injectable, InjectionToken, NgModule, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { onError } from '@apollo/client/link/error';
|
|
4
|
-
import { MessageService, DataSourceBase, PagedResultDto, provideMmSharedServices } from '@meshmakers/shared-services';
|
|
4
|
+
import { MessageService, MM_CALLER_HANDLED_STATUSES, DataSourceBase, PagedResultDto, provideMmSharedServices } from '@meshmakers/shared-services';
|
|
5
5
|
import { ApolloLink, InMemoryCache } from '@apollo/client/core';
|
|
6
6
|
import { CombinedGraphQLErrors } from '@apollo/client';
|
|
7
7
|
import * as i1 from 'apollo-angular';
|
|
8
8
|
import { gql } from 'apollo-angular';
|
|
9
9
|
import { map, catchError, finalize } from 'rxjs/operators';
|
|
10
10
|
import { of, firstValueFrom, map as map$1, Subject, throwError, from, filter } from 'rxjs';
|
|
11
|
-
import { HttpClient, HttpParams, HttpErrorResponse, HttpHeaders } from '@angular/common/http';
|
|
11
|
+
import { HttpClient, HttpParams, HttpErrorResponse, HttpContext, HttpHeaders } from '@angular/common/http';
|
|
12
12
|
import { Upload } from 'tus-js-client';
|
|
13
13
|
import { AuthorizeService } from '@meshmakers/shared-auth';
|
|
14
14
|
|
|
@@ -21,6 +21,12 @@ class OctoServiceOptions {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Operation context flag: errors of an operation with `context: { [OCTO_SILENT_ERRORS]: true }`
|
|
26
|
+
* are logged to the console only, never shown as a toast. For best-effort background reads whose
|
|
27
|
+
* caller handles the failure itself (e.g. the Settings counts, AB#5523).
|
|
28
|
+
*/
|
|
29
|
+
const OCTO_SILENT_ERRORS = 'octoSilentErrors';
|
|
24
30
|
class OctoErrorLink extends ApolloLink {
|
|
25
31
|
errorLink;
|
|
26
32
|
injector = inject(Injector);
|
|
@@ -28,8 +34,12 @@ class OctoErrorLink extends ApolloLink {
|
|
|
28
34
|
super();
|
|
29
35
|
// There is currently no other way to inject a service into an Apollo Link,
|
|
30
36
|
// because Apollo deprecated without replacement
|
|
31
|
-
this.errorLink = onError(({ error }) => {
|
|
37
|
+
this.errorLink = onError(({ error, operation }) => {
|
|
32
38
|
if (error) {
|
|
39
|
+
if (OctoErrorLink.isSilent(operation)) {
|
|
40
|
+
console.warn(`GraphQL error in ${operation?.operationName ?? 'operation'} (not shown)`, error);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
33
43
|
if (error instanceof CombinedGraphQLErrors) {
|
|
34
44
|
this.showError(error);
|
|
35
45
|
}
|
|
@@ -43,6 +53,15 @@ class OctoErrorLink extends ApolloLink {
|
|
|
43
53
|
// lets the original error propagate to the caller's own error handling.
|
|
44
54
|
});
|
|
45
55
|
}
|
|
56
|
+
/** True when the operation opted out of error toasts ({@link OCTO_SILENT_ERRORS}). */
|
|
57
|
+
static isSilent(operation) {
|
|
58
|
+
try {
|
|
59
|
+
return operation?.getContext?.()?.[OCTO_SILENT_ERRORS] === true;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
46
65
|
showErrorLike(error) {
|
|
47
66
|
// Network connectivity errors (HTTP status 0) are already handled by MmHttpErrorInterceptor
|
|
48
67
|
// which either shows the connection error overlay (via ON_CONNECTION_LOST) or a toast.
|
|
@@ -200,6 +219,258 @@ class LevelMetaData {
|
|
|
200
219
|
}
|
|
201
220
|
}
|
|
202
221
|
|
|
222
|
+
/**
|
|
223
|
+
* SECRET value type (AB#5528) — frontend contract types and helpers (AB#5542).
|
|
224
|
+
*
|
|
225
|
+
* Contract: `octo-construction-kit-engine/docs/secret-frontend-handover.md` §2 (asset repository
|
|
226
|
+
* GraphQL) and §4/§8 (identity providers REST). Field names are binding.
|
|
227
|
+
*
|
|
228
|
+
* The generated `globalTypes.ts` carries the SECRET round-2 schema (`OctoSecretStateDto { isSet
|
|
229
|
+
* keyMissing setAt }`, `secretIsSet` / `secretKeyMissing` / `secretSetAt`, `clearSecretAttributes`,
|
|
230
|
+
* `Query.secrets`). The shapes below accept the generated DTOs structurally; `keyMissing` / `setAt`
|
|
231
|
+
* stay optional so documents (or older backends) without them still map, and `setAt` accepts the
|
|
232
|
+
* ISO string Apollo actually delivers as well as a `Date`.
|
|
233
|
+
*
|
|
234
|
+
* Rules (decisions 2026-10-06):
|
|
235
|
+
* - A secret is never read. Typed fields select `{ isSet keyMissing setAt }`, generic attribute
|
|
236
|
+
* lists select `secretIsSet secretKeyMissing secretSetAt` (`value` is always null for secrets).
|
|
237
|
+
* - Input: a non-empty string sets / rotates; omitted, `null` or `""` keeps the stored value.
|
|
238
|
+
* Clearing is explicit: the camelCase name goes into `clearSecretAttributes` (only optional
|
|
239
|
+
* secrets; a new value and a clear for the same field in one request are rejected).
|
|
240
|
+
* - Placeholders (`<…>`, `TODO_SET_*`) have no meaning — they are ordinary values.
|
|
241
|
+
* - `keyMissing` (value stored, key id unknown in this environment) reads as `isSet: false` for
|
|
242
|
+
* consumers; the UI shows "Key missing — re-enter".
|
|
243
|
+
*/
|
|
244
|
+
/** The CK value type name of a secret attribute as reported by the CK model API (`AttributeValueTypesDto.Secret = 17`). */
|
|
245
|
+
const SECRET_VALUE_TYPE = 'SECRET';
|
|
246
|
+
/** Whether a CK value type is the SECRET value type (case-insensitive). */
|
|
247
|
+
function isSecretValueType(valueType) {
|
|
248
|
+
return !!valueType && valueType.toUpperCase() === SECRET_VALUE_TYPE;
|
|
249
|
+
}
|
|
250
|
+
function toDate(value) {
|
|
251
|
+
if (!value)
|
|
252
|
+
return null;
|
|
253
|
+
const d = value instanceof Date ? value : new Date(value);
|
|
254
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
255
|
+
}
|
|
256
|
+
/** Normalises a typed `OctoSecretState` (null/undefined = not set). */
|
|
257
|
+
function toSecretState(state) {
|
|
258
|
+
return {
|
|
259
|
+
isSet: state?.isSet === true,
|
|
260
|
+
keyMissing: state?.keyMissing === true,
|
|
261
|
+
setAt: toDate(state?.setAt),
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* The secret state of a generic attribute, or `null` when the attribute is not a secret
|
|
266
|
+
* (`secretIsSet` is null for every non-secret attribute).
|
|
267
|
+
*/
|
|
268
|
+
function secretStateFromAttribute(attribute) {
|
|
269
|
+
if (!attribute || (attribute.secretIsSet !== true && attribute.secretIsSet !== false))
|
|
270
|
+
return null;
|
|
271
|
+
return {
|
|
272
|
+
isSet: attribute.secretIsSet,
|
|
273
|
+
keyMissing: attribute.secretKeyMissing === true,
|
|
274
|
+
setAt: toDate(attribute.secretSetAt),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Whether a value is a secret state object (`{ isSet }` marker or a {@link SecretState}) rather than
|
|
279
|
+
* a plain value — e.g. a SECRET record member read through the generic API. Only objects whose keys
|
|
280
|
+
* are a subset of `isSet` / `keyMissing` / `setAt` with a boolean `isSet` qualify.
|
|
281
|
+
*/
|
|
282
|
+
function isSecretStateObject(value) {
|
|
283
|
+
if (!value || typeof value !== 'object' || Array.isArray(value) || value instanceof Date)
|
|
284
|
+
return false;
|
|
285
|
+
const record = value;
|
|
286
|
+
return typeof record['isSet'] === 'boolean'
|
|
287
|
+
&& Object.keys(record).every((k) => k === 'isSet' || k === 'keyMissing' || k === 'setAt' || k === '__typename');
|
|
288
|
+
}
|
|
289
|
+
/** Display status: key missing wins (it implies `isSet: false`), then set / not set. */
|
|
290
|
+
function secretStatusOf(state) {
|
|
291
|
+
if (state?.keyMissing)
|
|
292
|
+
return 'keyMissing';
|
|
293
|
+
return state?.isSet ? 'set' : 'notSet';
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Whether a secret counts as present for "required" checks: set, or stored but unreadable (the
|
|
297
|
+
* server treats a key-missing secret as present, handover §2).
|
|
298
|
+
*/
|
|
299
|
+
function isSecretPresent(state) {
|
|
300
|
+
return state?.isSet === true || state?.keyMissing === true;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* The wire value of a typed secret input: the string when the user typed one, else `undefined`
|
|
304
|
+
* (= omit = keep). Never trims — whitespace can be part of a secret.
|
|
305
|
+
*/
|
|
306
|
+
function secretInputValue(typed) {
|
|
307
|
+
return typeof typed === 'string' && typed.length > 0 ? typed : undefined;
|
|
308
|
+
}
|
|
309
|
+
const DEFAULT_SECRET_STATUS_LABELS = {
|
|
310
|
+
set: 'Set',
|
|
311
|
+
setAt: 'Set · set at {setAt}',
|
|
312
|
+
notSet: 'Not set',
|
|
313
|
+
keyMissing: 'Key missing — re-enter',
|
|
314
|
+
};
|
|
315
|
+
/**
|
|
316
|
+
* Human-readable status: "Set · set at …" / "Set" (legacy, no timestamp) / "Not set" /
|
|
317
|
+
* "Key missing — re-enter".
|
|
318
|
+
*/
|
|
319
|
+
function formatSecretStatus(state, formatDate = (d) => d.toLocaleString(), labels = DEFAULT_SECRET_STATUS_LABELS) {
|
|
320
|
+
switch (secretStatusOf(state)) {
|
|
321
|
+
case 'keyMissing':
|
|
322
|
+
return labels.keyMissing;
|
|
323
|
+
case 'set':
|
|
324
|
+
return state?.setAt ? labels.setAt.replace('{setAt}', formatDate(state.setAt)) : labels.set;
|
|
325
|
+
default:
|
|
326
|
+
return labels.notSet;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Secret-safe attribute selection for generic runtime GraphQL documents (AB#5542).
|
|
332
|
+
*
|
|
333
|
+
* The generic `attributes` field of `RtEntity` / `RtAssociation` returns EVERY attribute of the
|
|
334
|
+
* entity — passwords, client secrets, API keys included — when its `attributeNames` argument is
|
|
335
|
+
* omitted (or bound to a variable the caller leaves `undefined`). Until the SECRET value type
|
|
336
|
+
* (AB#5528) lets the server mask those values, every generic document must pass an explicit,
|
|
337
|
+
* non-nullable list, and callers that derive the list from CK metadata must leave out
|
|
338
|
+
* credential-like attributes. These helpers are that rule in one place:
|
|
339
|
+
*
|
|
340
|
+
* - {@link isCredentialLikeAttributeName}: the name heuristic (suffix based, camelCase or PascalCase).
|
|
341
|
+
* - {@link isSecretAttributeCandidate}: THE rule — explicit decision, `secret` CK metadata, else the
|
|
342
|
+
* name heuristic for textual value types only.
|
|
343
|
+
* - {@link toAttributeNameFilter}: name-only list for read-only callers without type information.
|
|
344
|
+
* - {@link toUniqueCamelCaseNames}: camelCase + de-duplication for type-aware callers.
|
|
345
|
+
* The server compares camelCase names only, and one list also filters the sub-attributes of records.
|
|
346
|
+
*
|
|
347
|
+
* SECRET value type (AB#5528): an attribute whose value type is `SECRET` is ALWAYS a secret — no
|
|
348
|
+
* explicit decision or metadata can opt it out. The server never projects its value (`value` is
|
|
349
|
+
* null, `secretIsSet` / `{ isSet }` report the state, see `secret-state.ts`). The metadata marker
|
|
350
|
+
* and the name heuristic remain only as the FALLBACK for non-SECRET attributes (models that have
|
|
351
|
+
* not switched their credentials to SECRET yet, handover note §1 phase 2 before phase 3).
|
|
352
|
+
*/
|
|
353
|
+
/**
|
|
354
|
+
* Credential-like name suffixes (lower case). Matched against the END of the attribute name so
|
|
355
|
+
* that `password`, `adminPassword`, `privateKeyPassphrase`, `clientSecret`, `botToken`,
|
|
356
|
+
* `refreshToken`, `apiKey`, `secretKey`, `connectionString` match, while `maxTokens`,
|
|
357
|
+
* `tokensPerDay`, `tokenEndpoint` or `receivesClusterSecrets` do not.
|
|
358
|
+
*/
|
|
359
|
+
const CREDENTIAL_ATTRIBUTE_NAME_SUFFIXES = [
|
|
360
|
+
'password',
|
|
361
|
+
'passphrase',
|
|
362
|
+
'secret',
|
|
363
|
+
'secretkey',
|
|
364
|
+
'token',
|
|
365
|
+
'apikey',
|
|
366
|
+
'privatekey',
|
|
367
|
+
'connectionstring',
|
|
368
|
+
'credential',
|
|
369
|
+
'credentials',
|
|
370
|
+
'encryptedvalue',
|
|
371
|
+
];
|
|
372
|
+
/** CK value types that can carry a credential (anything textual). */
|
|
373
|
+
const TEXTUAL_VALUE_TYPES = new Set(['STRING', 'STRING_ARRAY']);
|
|
374
|
+
/** Lower-cases the first character, like the server's `ToCamelCase` used by the `attributeNames` filter. */
|
|
375
|
+
function toCamelCaseAttributeName(name) {
|
|
376
|
+
return name.length === 0 ? name : name.charAt(0).toLowerCase() + name.slice(1);
|
|
377
|
+
}
|
|
378
|
+
/** Whether an attribute name looks like a credential (password, secret, token, API key, …). */
|
|
379
|
+
function isCredentialLikeAttributeName(name) {
|
|
380
|
+
if (!name)
|
|
381
|
+
return false;
|
|
382
|
+
const normalised = name.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
|
|
383
|
+
return CREDENTIAL_ATTRIBUTE_NAME_SUFFIXES.some((suffix) => normalised.endsWith(suffix));
|
|
384
|
+
}
|
|
385
|
+
/** Whether a CK value type can hold a credential (textual). `undefined` (unknown) counts as textual. */
|
|
386
|
+
function isTextualValueType(valueType) {
|
|
387
|
+
return !valueType || TEXTUAL_VALUE_TYPES.has(valueType.toUpperCase());
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* THE credential rule of the frontend (AB#5542; entity forms, runtime browser, meshboard, Data
|
|
391
|
+
* Explorer all use it). An attribute is a secret candidate when
|
|
392
|
+
* 0. its value type is `SECRET` (always; cannot be opted out), else
|
|
393
|
+
* 1. the caller decided explicitly (`secret: true|false`, e.g. form `Secret: false` opts out), else
|
|
394
|
+
* 2. its CK metadata says `secret: true|false`, else
|
|
395
|
+
* 3. it is TEXTUAL (`STRING`, `STRING_ARRAY`, unknown) and its name is credential-like
|
|
396
|
+
* ({@link isCredentialLikeAttributeName}). Non-textual attributes (`isSecret: BOOLEAN`,
|
|
397
|
+
* `maxTokens: INT`, a `credentials` RECORD) are never secrets by name.
|
|
398
|
+
*/
|
|
399
|
+
function isSecretAttributeCandidate(attribute) {
|
|
400
|
+
if (isSecretValueType(attribute.attributeValueType))
|
|
401
|
+
return true;
|
|
402
|
+
if (attribute.secret === true || attribute.secret === false)
|
|
403
|
+
return attribute.secret;
|
|
404
|
+
const marker = (attribute.metaData ?? []).find((m) => !!m && m.key?.toLowerCase() === 'secret');
|
|
405
|
+
if (marker) {
|
|
406
|
+
const value = (marker.value ?? '').trim().toLowerCase();
|
|
407
|
+
if (value === 'true')
|
|
408
|
+
return true;
|
|
409
|
+
if (value === 'false')
|
|
410
|
+
return false;
|
|
411
|
+
}
|
|
412
|
+
if (!isTextualValueType(attribute.attributeValueType))
|
|
413
|
+
return false;
|
|
414
|
+
return isCredentialLikeAttributeName(attribute.attributeName);
|
|
415
|
+
}
|
|
416
|
+
/** camelCase, de-duplicated, without empty entries — no secret filtering (callers decided already). */
|
|
417
|
+
function toUniqueCamelCaseNames(names) {
|
|
418
|
+
const result = [];
|
|
419
|
+
const seen = new Set();
|
|
420
|
+
for (const name of names) {
|
|
421
|
+
if (!name)
|
|
422
|
+
continue;
|
|
423
|
+
const camel = toCamelCaseAttributeName(name);
|
|
424
|
+
if (seen.has(camel))
|
|
425
|
+
continue;
|
|
426
|
+
seen.add(camel);
|
|
427
|
+
result.push(camel);
|
|
428
|
+
}
|
|
429
|
+
return result;
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Builds the value of an `attributeNames` argument from names WITHOUT type information (widget
|
|
433
|
+
* configuration, user-picked fields): camelCase, de-duplicated, without empty and credential-like
|
|
434
|
+
* names. Because the type is unknown, the name rule is applied conservatively — use it only for
|
|
435
|
+
* READ-ONLY displays. Anything that is written back must derive its list type-aware
|
|
436
|
+
* ({@link isSecretAttributeCandidate}, octo-ui `SecretSafeAttributeNamesService`), otherwise a
|
|
437
|
+
* dropped non-secret attribute (`isSecret: BOOLEAN`) would be saved back empty.
|
|
438
|
+
* Always returns an array, so a `[String!]!` variable can never fall back to "all attributes".
|
|
439
|
+
*/
|
|
440
|
+
function toAttributeNameFilter(names) {
|
|
441
|
+
return toUniqueCamelCaseNames([...names].filter((name) => !isCredentialLikeAttributeName(name)));
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Whether a query column (`attributePath` such as `password`, `endpoint.apiKey`,
|
|
445
|
+
* `parent->clientSecret`) is a secret candidate: its last path segment by the shared rule.
|
|
446
|
+
* Column pickers hide these so users cannot add credential columns to runtime queries
|
|
447
|
+
* (AB#5542 — query rows would project the value).
|
|
448
|
+
*/
|
|
449
|
+
function isSecretQueryColumn(attributePath, attributeValueType) {
|
|
450
|
+
if (!attributePath)
|
|
451
|
+
return false;
|
|
452
|
+
const lastSegment = attributePath.split(/->|\.|\//).pop() ?? attributePath;
|
|
453
|
+
return isSecretAttributeCandidate({ attributeName: lastSegment, attributeValueType });
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Bot services REST DTOs of the SECRET value type administration (AB#5528 / AB#5544, frontend
|
|
458
|
+
* handover §9). Mirror `Meshmakers.Octo.Communication.Contracts.DataTransferObjects`
|
|
459
|
+
* (`SecretEnvironmentStatusDto`, `SecretSweepRunDto`, `SecretSweepDumpDto`,
|
|
460
|
+
* `SecretFormCountsReportDto`); enums travel as names, JSON is camelCase, timestamps are ISO-8601
|
|
461
|
+
* strings. No DTO ever carries a secret value.
|
|
462
|
+
*/
|
|
463
|
+
/** `SecretEnvironmentStatusDto.warnings` codes (handover §9/§14). */
|
|
464
|
+
const SECRET_STATUS_WARNING_NO_KEY_RING = 'NoKeyRing';
|
|
465
|
+
const SECRET_STATUS_WARNING_NO_LEGACY_V1_KEY = 'NoLegacyV1Key';
|
|
466
|
+
/** An existing encrypted dump's key id is not in the key ring: that dump cannot be restored (handover §14). */
|
|
467
|
+
const SECRET_STATUS_WARNING_DUMP_KEY_MISSING = 'DumpKeyMissing';
|
|
468
|
+
/** The pseudo key id of a legacy enc:v1 value (handover §10); shown as "legacy key (enc:v1)". */
|
|
469
|
+
const SECRET_LEGACY_V1_KEY_ID = 'enc:v1';
|
|
470
|
+
/** Error codes of the dump restore (`statusDescription` of the 409 body, handover §14). */
|
|
471
|
+
const SECRET_DUMP_RESTORE_ERROR_DUMP_DELETED = 'DumpDeleted';
|
|
472
|
+
const SECRET_DUMP_RESTORE_ERROR_DUMP_KEY_MISSING = 'DumpKeyMissing';
|
|
473
|
+
|
|
203
474
|
var HealthStatus;
|
|
204
475
|
(function (HealthStatus) {
|
|
205
476
|
/*
|
|
@@ -358,6 +629,14 @@ var AssociationModOptionsDto;
|
|
|
358
629
|
AssociationModOptionsDto["CreateDto"] = "CREATE";
|
|
359
630
|
AssociationModOptionsDto["DeleteDto"] = "DELETE";
|
|
360
631
|
})(AssociationModOptionsDto || (AssociationModOptionsDto = {}));
|
|
632
|
+
/** Who owns an attribute value, and therefore what installing the blueprint again does to it (AB#5187). SEED_OWNED: the blueprint owns the value - re-applying the blueprint OVERWRITES whatever the tenant has, and the value is carried in an exported runtime model. TENANT_OWNED: the tenant owns the value - re-applying the blueprint KEEPS the tenant's value and only seeds it on a fresh tenant, and the value IS still carried in an exported runtime model. RUNTIME_STATE: a service, operator, pipeline or job writes the value - re-applying the blueprint KEEPS it, and it is NOT carried in an exported runtime model. SECRET: a credential such as an API key, client secret, token or password - re-applying the blueprint KEEPS it, and it is NOT carried in an exported runtime model. */
|
|
633
|
+
var AttributeOwnershipDto;
|
|
634
|
+
(function (AttributeOwnershipDto) {
|
|
635
|
+
AttributeOwnershipDto["RuntimeStateDto"] = "RUNTIME_STATE";
|
|
636
|
+
AttributeOwnershipDto["SecretDto"] = "SECRET";
|
|
637
|
+
AttributeOwnershipDto["SeedOwnedDto"] = "SEED_OWNED";
|
|
638
|
+
AttributeOwnershipDto["TenantOwnedDto"] = "TENANT_OWNED";
|
|
639
|
+
})(AttributeOwnershipDto || (AttributeOwnershipDto = {}));
|
|
361
640
|
/** Enum of valid attribute types */
|
|
362
641
|
var AttributeValueTypeDto;
|
|
363
642
|
(function (AttributeValueTypeDto) {
|
|
@@ -377,6 +656,7 @@ var AttributeValueTypeDto;
|
|
|
377
656
|
AttributeValueTypeDto["IntArrayDto"] = "INT_ARRAY";
|
|
378
657
|
AttributeValueTypeDto["RecordDto"] = "RECORD";
|
|
379
658
|
AttributeValueTypeDto["RecordArrayDto"] = "RECORD_ARRAY";
|
|
659
|
+
AttributeValueTypeDto["SecretDto"] = "SECRET";
|
|
380
660
|
AttributeValueTypeDto["StringDto"] = "STRING";
|
|
381
661
|
AttributeValueTypeDto["StringArrayDto"] = "STRING_ARRAY";
|
|
382
662
|
AttributeValueTypeDto["TimeSpanDto"] = "TIME_SPAN";
|
|
@@ -982,6 +1262,30 @@ var SearchFilterTypesDto;
|
|
|
982
1262
|
SearchFilterTypesDto["AttributeFilterDto"] = "ATTRIBUTE_FILTER";
|
|
983
1263
|
SearchFilterTypesDto["TextSearchDto"] = "TEXT_SEARCH";
|
|
984
1264
|
})(SearchFilterTypesDto || (SearchFilterTypesDto = {}));
|
|
1265
|
+
/** Storage form of a secret value. Never the value. */
|
|
1266
|
+
var SecretStorageFormDto;
|
|
1267
|
+
(function (SecretStorageFormDto) {
|
|
1268
|
+
/** Stored value cannot be parsed (reads as not set, warning logged). */
|
|
1269
|
+
SecretStorageFormDto["CorruptDto"] = "CORRUPT";
|
|
1270
|
+
/** Legacy enc:v1 (instance key). */
|
|
1271
|
+
SecretStorageFormDto["EncV1Dto"] = "ENC_V1";
|
|
1272
|
+
/** Protected, key id known. */
|
|
1273
|
+
SecretStorageFormDto["EncV2Dto"] = "ENC_V2";
|
|
1274
|
+
/** Protected, key id not in this environment's key ring. */
|
|
1275
|
+
SecretStorageFormDto["KeyMissingDto"] = "KEY_MISSING";
|
|
1276
|
+
/** Null or missing. */
|
|
1277
|
+
SecretStorageFormDto["NotSetDto"] = "NOT_SET";
|
|
1278
|
+
/** Legacy clear text still stored (before the Encrypt sweep). */
|
|
1279
|
+
SecretStorageFormDto["PlaintextDto"] = "PLAINTEXT";
|
|
1280
|
+
})(SecretStorageFormDto || (SecretStorageFormDto = {}));
|
|
1281
|
+
/** How a RevealSecret@1 node refers to a secret. */
|
|
1282
|
+
var SecretUsageMatchDto;
|
|
1283
|
+
(function (SecretUsageMatchDto) {
|
|
1284
|
+
/** The node resolves the entity at run time (rtIdPath) on the same CK type and attribute. */
|
|
1285
|
+
SecretUsageMatchDto["ByTypeDto"] = "BY_TYPE";
|
|
1286
|
+
/** The node names the CK type, rtId and attribute of the secret. */
|
|
1287
|
+
SecretUsageMatchDto["ExactDto"] = "EXACT";
|
|
1288
|
+
})(SecretUsageMatchDto || (SecretUsageMatchDto = {}));
|
|
985
1289
|
/** Civil-boundary policy for a series query that spans multiple reference time zones (AB#4190). */
|
|
986
1290
|
var SeriesComparisonPolicyDto;
|
|
987
1291
|
(function (SeriesComparisonPolicyDto) {
|
|
@@ -1166,6 +1470,13 @@ var SystemAiWorkspaceModeDto;
|
|
|
1166
1470
|
SystemAiWorkspaceModeDto["PerSessionDto"] = "PER_SESSION";
|
|
1167
1471
|
SystemAiWorkspaceModeDto["PoolDto"] = "POOL";
|
|
1168
1472
|
})(SystemAiWorkspaceModeDto || (SystemAiWorkspaceModeDto = {}));
|
|
1473
|
+
/** Runtime entities of construction kit enum 'System.Communication/AdapterSharingMode' */
|
|
1474
|
+
var SystemCommunicationAdapterSharingModeDto;
|
|
1475
|
+
(function (SystemCommunicationAdapterSharingModeDto) {
|
|
1476
|
+
SystemCommunicationAdapterSharingModeDto["DescendantsDto"] = "DESCENDANTS";
|
|
1477
|
+
SystemCommunicationAdapterSharingModeDto["DescendantsAndSiblingsDto"] = "DESCENDANTS_AND_SIBLINGS";
|
|
1478
|
+
SystemCommunicationAdapterSharingModeDto["NotSharedDto"] = "NOT_SHARED";
|
|
1479
|
+
})(SystemCommunicationAdapterSharingModeDto || (SystemCommunicationAdapterSharingModeDto = {}));
|
|
1169
1480
|
/** Runtime entities of construction kit enum 'System.Communication/CommunicationState' */
|
|
1170
1481
|
var SystemCommunicationCommunicationStateDto;
|
|
1171
1482
|
(function (SystemCommunicationCommunicationStateDto) {
|
|
@@ -1202,11 +1513,18 @@ var SystemCommunicationHelmChannelDto;
|
|
|
1202
1513
|
SystemCommunicationHelmChannelDto["DevDto"] = "DEV";
|
|
1203
1514
|
SystemCommunicationHelmChannelDto["ReleaseDto"] = "RELEASE";
|
|
1204
1515
|
})(SystemCommunicationHelmChannelDto || (SystemCommunicationHelmChannelDto = {}));
|
|
1516
|
+
/** Runtime entities of construction kit enum 'System.Communication/HelmRepositoryPurpose' */
|
|
1517
|
+
var SystemCommunicationHelmRepositoryPurposeDto;
|
|
1518
|
+
(function (SystemCommunicationHelmRepositoryPurposeDto) {
|
|
1519
|
+
SystemCommunicationHelmRepositoryPurposeDto["AdaptersDto"] = "ADAPTERS";
|
|
1520
|
+
SystemCommunicationHelmRepositoryPurposeDto["ApplicationsDto"] = "APPLICATIONS";
|
|
1521
|
+
})(SystemCommunicationHelmRepositoryPurposeDto || (SystemCommunicationHelmRepositoryPurposeDto = {}));
|
|
1205
1522
|
/** Runtime entities of construction kit enum 'System.Communication/LifecycleMode' */
|
|
1206
1523
|
var SystemCommunicationLifecycleModeDto;
|
|
1207
1524
|
(function (SystemCommunicationLifecycleModeDto) {
|
|
1208
1525
|
SystemCommunicationLifecycleModeDto["AlwaysOnDto"] = "ALWAYS_ON";
|
|
1209
1526
|
SystemCommunicationLifecycleModeDto["AutoDto"] = "AUTO";
|
|
1527
|
+
SystemCommunicationLifecycleModeDto["LeasedDto"] = "LEASED";
|
|
1210
1528
|
SystemCommunicationLifecycleModeDto["OnDemandDto"] = "ON_DEMAND";
|
|
1211
1529
|
})(SystemCommunicationLifecycleModeDto || (SystemCommunicationLifecycleModeDto = {}));
|
|
1212
1530
|
/** Runtime entities of construction kit enum 'System.Communication/LifecycleState' */
|
|
@@ -1217,6 +1535,12 @@ var SystemCommunicationLifecycleStateDto;
|
|
|
1217
1535
|
SystemCommunicationLifecycleStateDto["RunningDto"] = "RUNNING";
|
|
1218
1536
|
SystemCommunicationLifecycleStateDto["WakingDto"] = "WAKING";
|
|
1219
1537
|
})(SystemCommunicationLifecycleStateDto || (SystemCommunicationLifecycleStateDto = {}));
|
|
1538
|
+
/** Runtime entities of construction kit enum 'System.Communication/PipelineExecutionClass' */
|
|
1539
|
+
var SystemCommunicationPipelineExecutionClassDto;
|
|
1540
|
+
(function (SystemCommunicationPipelineExecutionClassDto) {
|
|
1541
|
+
SystemCommunicationPipelineExecutionClassDto["BatchDto"] = "BATCH";
|
|
1542
|
+
SystemCommunicationPipelineExecutionClassDto["InteractiveDto"] = "INTERACTIVE";
|
|
1543
|
+
})(SystemCommunicationPipelineExecutionClassDto || (SystemCommunicationPipelineExecutionClassDto = {}));
|
|
1220
1544
|
/** Runtime entities of construction kit enum 'System.Communication/PipelineExecutionStatus' */
|
|
1221
1545
|
var SystemCommunicationPipelineExecutionStatusDto;
|
|
1222
1546
|
(function (SystemCommunicationPipelineExecutionStatusDto) {
|
|
@@ -1224,6 +1548,7 @@ var SystemCommunicationPipelineExecutionStatusDto;
|
|
|
1224
1548
|
SystemCommunicationPipelineExecutionStatusDto["CompletedDto"] = "COMPLETED";
|
|
1225
1549
|
SystemCommunicationPipelineExecutionStatusDto["FailedDto"] = "FAILED";
|
|
1226
1550
|
SystemCommunicationPipelineExecutionStatusDto["InterruptedDto"] = "INTERRUPTED";
|
|
1551
|
+
SystemCommunicationPipelineExecutionStatusDto["QueuedDto"] = "QUEUED";
|
|
1227
1552
|
SystemCommunicationPipelineExecutionStatusDto["RunningDto"] = "RUNNING";
|
|
1228
1553
|
})(SystemCommunicationPipelineExecutionStatusDto || (SystemCommunicationPipelineExecutionStatusDto = {}));
|
|
1229
1554
|
/** Runtime entities of construction kit enum 'System.Communication/PipelineTriggerType' */
|
|
@@ -1234,6 +1559,13 @@ var SystemCommunicationPipelineTriggerTypeDto;
|
|
|
1234
1559
|
SystemCommunicationPipelineTriggerTypeDto["ScheduledDto"] = "SCHEDULED";
|
|
1235
1560
|
SystemCommunicationPipelineTriggerTypeDto["StartupDto"] = "STARTUP";
|
|
1236
1561
|
})(SystemCommunicationPipelineTriggerTypeDto || (SystemCommunicationPipelineTriggerTypeDto = {}));
|
|
1562
|
+
/** Runtime entities of construction kit enum 'System.Communication/PoolScaleUpPolicy' */
|
|
1563
|
+
var SystemCommunicationPoolScaleUpPolicyDto;
|
|
1564
|
+
(function (SystemCommunicationPoolScaleUpPolicyDto) {
|
|
1565
|
+
SystemCommunicationPoolScaleUpPolicyDto["QueueDepthDto"] = "QUEUE_DEPTH";
|
|
1566
|
+
SystemCommunicationPoolScaleUpPolicyDto["QueueDepthOrWaitSecondsDto"] = "QUEUE_DEPTH_OR_WAIT_SECONDS";
|
|
1567
|
+
SystemCommunicationPoolScaleUpPolicyDto["QueueWaitSecondsDto"] = "QUEUE_WAIT_SECONDS";
|
|
1568
|
+
})(SystemCommunicationPoolScaleUpPolicyDto || (SystemCommunicationPoolScaleUpPolicyDto = {}));
|
|
1237
1569
|
/** Runtime entities of construction kit enum 'System.Communication/SignalRegistrationAction' */
|
|
1238
1570
|
var SystemCommunicationSignalRegistrationActionDto;
|
|
1239
1571
|
(function (SystemCommunicationSignalRegistrationActionDto) {
|
|
@@ -1490,6 +1822,14 @@ var SystemStreamDataCkComputedColumnStateDto;
|
|
|
1490
1822
|
/** A backfill has been scheduled for this computed column but has not started yet. Consumers still see the previous archive state. */
|
|
1491
1823
|
SystemStreamDataCkComputedColumnStateDto["PendingDto"] = "PENDING";
|
|
1492
1824
|
})(SystemStreamDataCkComputedColumnStateDto || (SystemStreamDataCkComputedColumnStateDto = {}));
|
|
1825
|
+
/** Runtime entities of construction kit enum 'System.StreamData/CkConflictKeyOrder' */
|
|
1826
|
+
var SystemStreamDataCkConflictKeyOrderDto;
|
|
1827
|
+
(function (SystemStreamDataCkConflictKeyOrderDto) {
|
|
1828
|
+
/** The greater value is the better one. Use for timestamps, sequence numbers and versions, where later or higher supersedes earlier. */
|
|
1829
|
+
SystemStreamDataCkConflictKeyOrderDto["HigherWinsDto"] = "HIGHER_WINS";
|
|
1830
|
+
/** The smaller value is the better one. Use for rank-like codes numbered best-first, where a lower code must never be displaced by a higher one. */
|
|
1831
|
+
SystemStreamDataCkConflictKeyOrderDto["LowerWinsDto"] = "LOWER_WINS";
|
|
1832
|
+
})(SystemStreamDataCkConflictKeyOrderDto || (SystemStreamDataCkConflictKeyOrderDto = {}));
|
|
1493
1833
|
/** Runtime entities of construction kit enum 'System.StreamData/CkRecomputeChangeKind' */
|
|
1494
1834
|
var SystemStreamDataCkRecomputeChangeKindDto;
|
|
1495
1835
|
(function (SystemStreamDataCkRecomputeChangeKindDto) {
|
|
@@ -1675,10 +2015,12 @@ const result = {
|
|
|
1675
2015
|
"SystemBotAttributeAggregateConfiguration",
|
|
1676
2016
|
"SystemBotFixup",
|
|
1677
2017
|
"SystemCommunicationAdapter",
|
|
2018
|
+
"SystemCommunicationAdapterPool",
|
|
1678
2019
|
"SystemCommunicationAiConfiguration",
|
|
1679
2020
|
"SystemCommunicationApplication",
|
|
1680
2021
|
"SystemCommunicationDataFlow",
|
|
1681
2022
|
"SystemCommunicationDataPointMapping",
|
|
2023
|
+
"SystemCommunicationDeploymentSite",
|
|
1682
2024
|
"SystemCommunicationDiscordConfiguration",
|
|
1683
2025
|
"SystemCommunicationEMailReceiverConfiguration",
|
|
1684
2026
|
"SystemCommunicationEMailSenderConfiguration",
|
|
@@ -1687,13 +2029,13 @@ const result = {
|
|
|
1687
2029
|
"SystemCommunicationFinApiConfiguration",
|
|
1688
2030
|
"SystemCommunicationGrafanaConfiguration",
|
|
1689
2031
|
"SystemCommunicationHelmRepositoryConfiguration",
|
|
2032
|
+
"SystemCommunicationLentAdapterPool",
|
|
1690
2033
|
"SystemCommunicationLoxoneConfiguration",
|
|
1691
2034
|
"SystemCommunicationMicrosoftGraphConfiguration",
|
|
1692
2035
|
"SystemCommunicationPipeline",
|
|
1693
2036
|
"SystemCommunicationPipelineExecution",
|
|
1694
2037
|
"SystemCommunicationPipelineStatistics",
|
|
1695
2038
|
"SystemCommunicationPipelineTrigger",
|
|
1696
|
-
"SystemCommunicationPool",
|
|
1697
2039
|
"SystemCommunicationSapConfiguration",
|
|
1698
2040
|
"SystemCommunicationServiceAccountConfiguration",
|
|
1699
2041
|
"SystemCommunicationSftpConfiguration",
|
|
@@ -1752,6 +2094,7 @@ const result = {
|
|
|
1752
2094
|
"SystemUIBranding",
|
|
1753
2095
|
"SystemUIDashboard",
|
|
1754
2096
|
"SystemUIDashboardWidget",
|
|
2097
|
+
"SystemUIEntityForm",
|
|
1755
2098
|
"SystemUIMappingCoverageConfiguration",
|
|
1756
2099
|
"SystemUIProcessDiagram",
|
|
1757
2100
|
"SystemUISymbolDefinition",
|
|
@@ -2039,10 +2382,12 @@ const result = {
|
|
|
2039
2382
|
"SystemBotAttributeAggregateConfiguration",
|
|
2040
2383
|
"SystemBotFixup",
|
|
2041
2384
|
"SystemCommunicationAdapter",
|
|
2385
|
+
"SystemCommunicationAdapterPool",
|
|
2042
2386
|
"SystemCommunicationAiConfiguration",
|
|
2043
2387
|
"SystemCommunicationApplication",
|
|
2044
2388
|
"SystemCommunicationDataFlow",
|
|
2045
2389
|
"SystemCommunicationDataPointMapping",
|
|
2390
|
+
"SystemCommunicationDeploymentSite",
|
|
2046
2391
|
"SystemCommunicationDiscordConfiguration",
|
|
2047
2392
|
"SystemCommunicationEMailReceiverConfiguration",
|
|
2048
2393
|
"SystemCommunicationEMailSenderConfiguration",
|
|
@@ -2051,13 +2396,13 @@ const result = {
|
|
|
2051
2396
|
"SystemCommunicationFinApiConfiguration",
|
|
2052
2397
|
"SystemCommunicationGrafanaConfiguration",
|
|
2053
2398
|
"SystemCommunicationHelmRepositoryConfiguration",
|
|
2399
|
+
"SystemCommunicationLentAdapterPool",
|
|
2054
2400
|
"SystemCommunicationLoxoneConfiguration",
|
|
2055
2401
|
"SystemCommunicationMicrosoftGraphConfiguration",
|
|
2056
2402
|
"SystemCommunicationPipeline",
|
|
2057
2403
|
"SystemCommunicationPipelineExecution",
|
|
2058
2404
|
"SystemCommunicationPipelineStatistics",
|
|
2059
2405
|
"SystemCommunicationPipelineTrigger",
|
|
2060
|
-
"SystemCommunicationPool",
|
|
2061
2406
|
"SystemCommunicationSapConfiguration",
|
|
2062
2407
|
"SystemCommunicationServiceAccountConfiguration",
|
|
2063
2408
|
"SystemCommunicationSftpConfiguration",
|
|
@@ -2116,6 +2461,7 @@ const result = {
|
|
|
2116
2461
|
"SystemUIBranding",
|
|
2117
2462
|
"SystemUIDashboard",
|
|
2118
2463
|
"SystemUIDashboardWidget",
|
|
2464
|
+
"SystemUIEntityForm",
|
|
2119
2465
|
"SystemUIMappingCoverageConfiguration",
|
|
2120
2466
|
"SystemUIProcessDiagram",
|
|
2121
2467
|
"SystemUISymbolDefinition",
|
|
@@ -2284,12 +2630,18 @@ const result = {
|
|
|
2284
2630
|
"SystemBotAttributeAggregateConfiguration_ConfiguredByUnion": [
|
|
2285
2631
|
"SystemBotAttributeAggregateConfiguration"
|
|
2286
2632
|
],
|
|
2633
|
+
"SystemCommunicationAdapterPool_PoolServiceAccountOfUnion": [
|
|
2634
|
+
"SystemCommunicationAdapterPool"
|
|
2635
|
+
],
|
|
2287
2636
|
"SystemCommunicationAdapter_AdapterExecutionsUnion": [
|
|
2288
2637
|
"SystemCommunicationAdapter"
|
|
2289
2638
|
],
|
|
2290
2639
|
"SystemCommunicationAdapter_ExecutedByUnion": [
|
|
2291
2640
|
"SystemCommunicationAdapter"
|
|
2292
2641
|
],
|
|
2642
|
+
"SystemCommunicationAdapter_LentToUnion": [
|
|
2643
|
+
"SystemCommunicationAdapter"
|
|
2644
|
+
],
|
|
2293
2645
|
"SystemCommunicationAdapter_PipelineServiceAccountOfUnion": [
|
|
2294
2646
|
"SystemCommunicationAdapter"
|
|
2295
2647
|
],
|
|
@@ -2304,27 +2656,37 @@ const result = {
|
|
|
2304
2656
|
],
|
|
2305
2657
|
"SystemCommunicationDeployableEntityInterface": [
|
|
2306
2658
|
"SystemCommunicationAdapter",
|
|
2659
|
+
"SystemCommunicationAdapterPool",
|
|
2307
2660
|
"SystemCommunicationApplication",
|
|
2308
2661
|
"SystemCommunicationDeployableWorkload",
|
|
2662
|
+
"SystemCommunicationDeploymentSite",
|
|
2309
2663
|
"SystemCommunicationPipeline",
|
|
2310
|
-
"SystemCommunicationPipelineTrigger"
|
|
2311
|
-
"SystemCommunicationPool"
|
|
2664
|
+
"SystemCommunicationPipelineTrigger"
|
|
2312
2665
|
],
|
|
2313
2666
|
"SystemCommunicationDeployableWorkloadInterface": [
|
|
2314
2667
|
"SystemCommunicationAdapter",
|
|
2668
|
+
"SystemCommunicationAdapterPool",
|
|
2315
2669
|
"SystemCommunicationApplication"
|
|
2316
2670
|
],
|
|
2317
2671
|
"SystemCommunicationDeployableWorkload_HelmRepositoryUsedByUnion": [
|
|
2318
2672
|
"SystemCommunicationAdapter",
|
|
2673
|
+
"SystemCommunicationAdapterPool",
|
|
2319
2674
|
"SystemCommunicationApplication"
|
|
2320
2675
|
],
|
|
2321
|
-
"
|
|
2676
|
+
"SystemCommunicationDeployableWorkload_HostsUnion": [
|
|
2322
2677
|
"SystemCommunicationAdapter",
|
|
2678
|
+
"SystemCommunicationAdapterPool",
|
|
2323
2679
|
"SystemCommunicationApplication"
|
|
2324
2680
|
],
|
|
2681
|
+
"SystemCommunicationDeploymentSite_HostedByUnion": [
|
|
2682
|
+
"SystemCommunicationDeploymentSite"
|
|
2683
|
+
],
|
|
2325
2684
|
"SystemCommunicationHelmRepositoryConfiguration_HelmRepositoryUnion": [
|
|
2326
2685
|
"SystemCommunicationHelmRepositoryConfiguration"
|
|
2327
2686
|
],
|
|
2687
|
+
"SystemCommunicationLentAdapterPool_LentFromUnion": [
|
|
2688
|
+
"SystemCommunicationLentAdapterPool"
|
|
2689
|
+
],
|
|
2328
2690
|
"SystemCommunicationPipelineExecution_ExecutedPipelineUnion": [
|
|
2329
2691
|
"SystemCommunicationPipelineExecution"
|
|
2330
2692
|
],
|
|
@@ -2362,12 +2724,12 @@ const result = {
|
|
|
2362
2724
|
"SystemCommunicationPipeline_UsedByUnion": [
|
|
2363
2725
|
"SystemCommunicationPipeline"
|
|
2364
2726
|
],
|
|
2365
|
-
"SystemCommunicationPool_ManagedByUnion": [
|
|
2366
|
-
"SystemCommunicationPool"
|
|
2367
|
-
],
|
|
2368
2727
|
"SystemCommunicationServiceAccountConfiguration_PipelineServiceAccountUnion": [
|
|
2369
2728
|
"SystemCommunicationServiceAccountConfiguration"
|
|
2370
2729
|
],
|
|
2730
|
+
"SystemCommunicationServiceAccountConfiguration_PoolServiceAccountUnion": [
|
|
2731
|
+
"SystemCommunicationServiceAccountConfiguration"
|
|
2732
|
+
],
|
|
2371
2733
|
"SystemCommunicationTag_TaggedByUnion": [
|
|
2372
2734
|
"SystemCommunicationTag"
|
|
2373
2735
|
],
|
|
@@ -2498,12 +2860,14 @@ const result = {
|
|
|
2498
2860
|
"SystemBotAttributeAggregateConfiguration",
|
|
2499
2861
|
"SystemBotFixup",
|
|
2500
2862
|
"SystemCommunicationAdapter",
|
|
2863
|
+
"SystemCommunicationAdapterPool",
|
|
2501
2864
|
"SystemCommunicationAiConfiguration",
|
|
2502
2865
|
"SystemCommunicationApplication",
|
|
2503
2866
|
"SystemCommunicationDataFlow",
|
|
2504
2867
|
"SystemCommunicationDataPointMapping",
|
|
2505
2868
|
"SystemCommunicationDeployableEntity",
|
|
2506
2869
|
"SystemCommunicationDeployableWorkload",
|
|
2870
|
+
"SystemCommunicationDeploymentSite",
|
|
2507
2871
|
"SystemCommunicationDiscordConfiguration",
|
|
2508
2872
|
"SystemCommunicationEMailReceiverConfiguration",
|
|
2509
2873
|
"SystemCommunicationEMailSenderConfiguration",
|
|
@@ -2512,13 +2876,13 @@ const result = {
|
|
|
2512
2876
|
"SystemCommunicationFinApiConfiguration",
|
|
2513
2877
|
"SystemCommunicationGrafanaConfiguration",
|
|
2514
2878
|
"SystemCommunicationHelmRepositoryConfiguration",
|
|
2879
|
+
"SystemCommunicationLentAdapterPool",
|
|
2515
2880
|
"SystemCommunicationLoxoneConfiguration",
|
|
2516
2881
|
"SystemCommunicationMicrosoftGraphConfiguration",
|
|
2517
2882
|
"SystemCommunicationPipeline",
|
|
2518
2883
|
"SystemCommunicationPipelineExecution",
|
|
2519
2884
|
"SystemCommunicationPipelineStatistics",
|
|
2520
2885
|
"SystemCommunicationPipelineTrigger",
|
|
2521
|
-
"SystemCommunicationPool",
|
|
2522
2886
|
"SystemCommunicationSapConfiguration",
|
|
2523
2887
|
"SystemCommunicationServiceAccountConfiguration",
|
|
2524
2888
|
"SystemCommunicationSftpConfiguration",
|
|
@@ -2585,6 +2949,7 @@ const result = {
|
|
|
2585
2949
|
"SystemUIBranding",
|
|
2586
2950
|
"SystemUIDashboard",
|
|
2587
2951
|
"SystemUIDashboardWidget",
|
|
2952
|
+
"SystemUIEntityForm",
|
|
2588
2953
|
"SystemUIMappingCoverageConfiguration",
|
|
2589
2954
|
"SystemUIProcessDiagram",
|
|
2590
2955
|
"SystemUISymbolDefinition",
|
|
@@ -2681,10 +3046,12 @@ const result = {
|
|
|
2681
3046
|
"SystemBotAttributeAggregateConfiguration",
|
|
2682
3047
|
"SystemBotFixup",
|
|
2683
3048
|
"SystemCommunicationAdapter",
|
|
3049
|
+
"SystemCommunicationAdapterPool",
|
|
2684
3050
|
"SystemCommunicationAiConfiguration",
|
|
2685
3051
|
"SystemCommunicationApplication",
|
|
2686
3052
|
"SystemCommunicationDataFlow",
|
|
2687
3053
|
"SystemCommunicationDataPointMapping",
|
|
3054
|
+
"SystemCommunicationDeploymentSite",
|
|
2688
3055
|
"SystemCommunicationDiscordConfiguration",
|
|
2689
3056
|
"SystemCommunicationEMailReceiverConfiguration",
|
|
2690
3057
|
"SystemCommunicationEMailSenderConfiguration",
|
|
@@ -2693,13 +3060,13 @@ const result = {
|
|
|
2693
3060
|
"SystemCommunicationFinApiConfiguration",
|
|
2694
3061
|
"SystemCommunicationGrafanaConfiguration",
|
|
2695
3062
|
"SystemCommunicationHelmRepositoryConfiguration",
|
|
3063
|
+
"SystemCommunicationLentAdapterPool",
|
|
2696
3064
|
"SystemCommunicationLoxoneConfiguration",
|
|
2697
3065
|
"SystemCommunicationMicrosoftGraphConfiguration",
|
|
2698
3066
|
"SystemCommunicationPipeline",
|
|
2699
3067
|
"SystemCommunicationPipelineExecution",
|
|
2700
3068
|
"SystemCommunicationPipelineStatistics",
|
|
2701
3069
|
"SystemCommunicationPipelineTrigger",
|
|
2702
|
-
"SystemCommunicationPool",
|
|
2703
3070
|
"SystemCommunicationSapConfiguration",
|
|
2704
3071
|
"SystemCommunicationServiceAccountConfiguration",
|
|
2705
3072
|
"SystemCommunicationSftpConfiguration",
|
|
@@ -2758,6 +3125,7 @@ const result = {
|
|
|
2758
3125
|
"SystemUIBranding",
|
|
2759
3126
|
"SystemUIDashboard",
|
|
2760
3127
|
"SystemUIDashboardWidget",
|
|
3128
|
+
"SystemUIEntityForm",
|
|
2761
3129
|
"SystemUIMappingCoverageConfiguration",
|
|
2762
3130
|
"SystemUIProcessDiagram",
|
|
2763
3131
|
"SystemUISymbolDefinition",
|
|
@@ -2853,10 +3221,12 @@ const result = {
|
|
|
2853
3221
|
"SystemBotAttributeAggregateConfiguration",
|
|
2854
3222
|
"SystemBotFixup",
|
|
2855
3223
|
"SystemCommunicationAdapter",
|
|
3224
|
+
"SystemCommunicationAdapterPool",
|
|
2856
3225
|
"SystemCommunicationAiConfiguration",
|
|
2857
3226
|
"SystemCommunicationApplication",
|
|
2858
3227
|
"SystemCommunicationDataFlow",
|
|
2859
3228
|
"SystemCommunicationDataPointMapping",
|
|
3229
|
+
"SystemCommunicationDeploymentSite",
|
|
2860
3230
|
"SystemCommunicationDiscordConfiguration",
|
|
2861
3231
|
"SystemCommunicationEMailReceiverConfiguration",
|
|
2862
3232
|
"SystemCommunicationEMailSenderConfiguration",
|
|
@@ -2865,13 +3235,13 @@ const result = {
|
|
|
2865
3235
|
"SystemCommunicationFinApiConfiguration",
|
|
2866
3236
|
"SystemCommunicationGrafanaConfiguration",
|
|
2867
3237
|
"SystemCommunicationHelmRepositoryConfiguration",
|
|
3238
|
+
"SystemCommunicationLentAdapterPool",
|
|
2868
3239
|
"SystemCommunicationLoxoneConfiguration",
|
|
2869
3240
|
"SystemCommunicationMicrosoftGraphConfiguration",
|
|
2870
3241
|
"SystemCommunicationPipeline",
|
|
2871
3242
|
"SystemCommunicationPipelineExecution",
|
|
2872
3243
|
"SystemCommunicationPipelineStatistics",
|
|
2873
3244
|
"SystemCommunicationPipelineTrigger",
|
|
2874
|
-
"SystemCommunicationPool",
|
|
2875
3245
|
"SystemCommunicationSapConfiguration",
|
|
2876
3246
|
"SystemCommunicationServiceAccountConfiguration",
|
|
2877
3247
|
"SystemCommunicationSftpConfiguration",
|
|
@@ -2930,6 +3300,7 @@ const result = {
|
|
|
2930
3300
|
"SystemUIBranding",
|
|
2931
3301
|
"SystemUIDashboard",
|
|
2932
3302
|
"SystemUIDashboardWidget",
|
|
3303
|
+
"SystemUIEntityForm",
|
|
2933
3304
|
"SystemUIMappingCoverageConfiguration",
|
|
2934
3305
|
"SystemUIProcessDiagram",
|
|
2935
3306
|
"SystemUISymbolDefinition",
|
|
@@ -3025,10 +3396,12 @@ const result = {
|
|
|
3025
3396
|
"SystemBotAttributeAggregateConfiguration",
|
|
3026
3397
|
"SystemBotFixup",
|
|
3027
3398
|
"SystemCommunicationAdapter",
|
|
3399
|
+
"SystemCommunicationAdapterPool",
|
|
3028
3400
|
"SystemCommunicationAiConfiguration",
|
|
3029
3401
|
"SystemCommunicationApplication",
|
|
3030
3402
|
"SystemCommunicationDataFlow",
|
|
3031
3403
|
"SystemCommunicationDataPointMapping",
|
|
3404
|
+
"SystemCommunicationDeploymentSite",
|
|
3032
3405
|
"SystemCommunicationDiscordConfiguration",
|
|
3033
3406
|
"SystemCommunicationEMailReceiverConfiguration",
|
|
3034
3407
|
"SystemCommunicationEMailSenderConfiguration",
|
|
@@ -3037,13 +3410,13 @@ const result = {
|
|
|
3037
3410
|
"SystemCommunicationFinApiConfiguration",
|
|
3038
3411
|
"SystemCommunicationGrafanaConfiguration",
|
|
3039
3412
|
"SystemCommunicationHelmRepositoryConfiguration",
|
|
3413
|
+
"SystemCommunicationLentAdapterPool",
|
|
3040
3414
|
"SystemCommunicationLoxoneConfiguration",
|
|
3041
3415
|
"SystemCommunicationMicrosoftGraphConfiguration",
|
|
3042
3416
|
"SystemCommunicationPipeline",
|
|
3043
3417
|
"SystemCommunicationPipelineExecution",
|
|
3044
3418
|
"SystemCommunicationPipelineStatistics",
|
|
3045
3419
|
"SystemCommunicationPipelineTrigger",
|
|
3046
|
-
"SystemCommunicationPool",
|
|
3047
3420
|
"SystemCommunicationSapConfiguration",
|
|
3048
3421
|
"SystemCommunicationServiceAccountConfiguration",
|
|
3049
3422
|
"SystemCommunicationSftpConfiguration",
|
|
@@ -3102,6 +3475,7 @@ const result = {
|
|
|
3102
3475
|
"SystemUIBranding",
|
|
3103
3476
|
"SystemUIDashboard",
|
|
3104
3477
|
"SystemUIDashboardWidget",
|
|
3478
|
+
"SystemUIEntityForm",
|
|
3105
3479
|
"SystemUIMappingCoverageConfiguration",
|
|
3106
3480
|
"SystemUIProcessDiagram",
|
|
3107
3481
|
"SystemUISymbolDefinition",
|
|
@@ -3197,10 +3571,12 @@ const result = {
|
|
|
3197
3571
|
"SystemBotAttributeAggregateConfiguration",
|
|
3198
3572
|
"SystemBotFixup",
|
|
3199
3573
|
"SystemCommunicationAdapter",
|
|
3574
|
+
"SystemCommunicationAdapterPool",
|
|
3200
3575
|
"SystemCommunicationAiConfiguration",
|
|
3201
3576
|
"SystemCommunicationApplication",
|
|
3202
3577
|
"SystemCommunicationDataFlow",
|
|
3203
3578
|
"SystemCommunicationDataPointMapping",
|
|
3579
|
+
"SystemCommunicationDeploymentSite",
|
|
3204
3580
|
"SystemCommunicationDiscordConfiguration",
|
|
3205
3581
|
"SystemCommunicationEMailReceiverConfiguration",
|
|
3206
3582
|
"SystemCommunicationEMailSenderConfiguration",
|
|
@@ -3209,13 +3585,13 @@ const result = {
|
|
|
3209
3585
|
"SystemCommunicationFinApiConfiguration",
|
|
3210
3586
|
"SystemCommunicationGrafanaConfiguration",
|
|
3211
3587
|
"SystemCommunicationHelmRepositoryConfiguration",
|
|
3588
|
+
"SystemCommunicationLentAdapterPool",
|
|
3212
3589
|
"SystemCommunicationLoxoneConfiguration",
|
|
3213
3590
|
"SystemCommunicationMicrosoftGraphConfiguration",
|
|
3214
3591
|
"SystemCommunicationPipeline",
|
|
3215
3592
|
"SystemCommunicationPipelineExecution",
|
|
3216
3593
|
"SystemCommunicationPipelineStatistics",
|
|
3217
3594
|
"SystemCommunicationPipelineTrigger",
|
|
3218
|
-
"SystemCommunicationPool",
|
|
3219
3595
|
"SystemCommunicationSapConfiguration",
|
|
3220
3596
|
"SystemCommunicationServiceAccountConfiguration",
|
|
3221
3597
|
"SystemCommunicationSftpConfiguration",
|
|
@@ -3274,6 +3650,7 @@ const result = {
|
|
|
3274
3650
|
"SystemUIBranding",
|
|
3275
3651
|
"SystemUIDashboard",
|
|
3276
3652
|
"SystemUIDashboardWidget",
|
|
3653
|
+
"SystemUIEntityForm",
|
|
3277
3654
|
"SystemUIMappingCoverageConfiguration",
|
|
3278
3655
|
"SystemUIProcessDiagram",
|
|
3279
3656
|
"SystemUISymbolDefinition",
|
|
@@ -3369,10 +3746,12 @@ const result = {
|
|
|
3369
3746
|
"SystemBotAttributeAggregateConfiguration",
|
|
3370
3747
|
"SystemBotFixup",
|
|
3371
3748
|
"SystemCommunicationAdapter",
|
|
3749
|
+
"SystemCommunicationAdapterPool",
|
|
3372
3750
|
"SystemCommunicationAiConfiguration",
|
|
3373
3751
|
"SystemCommunicationApplication",
|
|
3374
3752
|
"SystemCommunicationDataFlow",
|
|
3375
3753
|
"SystemCommunicationDataPointMapping",
|
|
3754
|
+
"SystemCommunicationDeploymentSite",
|
|
3376
3755
|
"SystemCommunicationDiscordConfiguration",
|
|
3377
3756
|
"SystemCommunicationEMailReceiverConfiguration",
|
|
3378
3757
|
"SystemCommunicationEMailSenderConfiguration",
|
|
@@ -3381,13 +3760,13 @@ const result = {
|
|
|
3381
3760
|
"SystemCommunicationFinApiConfiguration",
|
|
3382
3761
|
"SystemCommunicationGrafanaConfiguration",
|
|
3383
3762
|
"SystemCommunicationHelmRepositoryConfiguration",
|
|
3763
|
+
"SystemCommunicationLentAdapterPool",
|
|
3384
3764
|
"SystemCommunicationLoxoneConfiguration",
|
|
3385
3765
|
"SystemCommunicationMicrosoftGraphConfiguration",
|
|
3386
3766
|
"SystemCommunicationPipeline",
|
|
3387
3767
|
"SystemCommunicationPipelineExecution",
|
|
3388
3768
|
"SystemCommunicationPipelineStatistics",
|
|
3389
3769
|
"SystemCommunicationPipelineTrigger",
|
|
3390
|
-
"SystemCommunicationPool",
|
|
3391
3770
|
"SystemCommunicationSapConfiguration",
|
|
3392
3771
|
"SystemCommunicationServiceAccountConfiguration",
|
|
3393
3772
|
"SystemCommunicationSftpConfiguration",
|
|
@@ -3446,6 +3825,7 @@ const result = {
|
|
|
3446
3825
|
"SystemUIBranding",
|
|
3447
3826
|
"SystemUIDashboard",
|
|
3448
3827
|
"SystemUIDashboardWidget",
|
|
3828
|
+
"SystemUIEntityForm",
|
|
3449
3829
|
"SystemUIMappingCoverageConfiguration",
|
|
3450
3830
|
"SystemUIProcessDiagram",
|
|
3451
3831
|
"SystemUISymbolDefinition",
|
|
@@ -3541,10 +3921,12 @@ const result = {
|
|
|
3541
3921
|
"SystemBotAttributeAggregateConfiguration",
|
|
3542
3922
|
"SystemBotFixup",
|
|
3543
3923
|
"SystemCommunicationAdapter",
|
|
3924
|
+
"SystemCommunicationAdapterPool",
|
|
3544
3925
|
"SystemCommunicationAiConfiguration",
|
|
3545
3926
|
"SystemCommunicationApplication",
|
|
3546
3927
|
"SystemCommunicationDataFlow",
|
|
3547
3928
|
"SystemCommunicationDataPointMapping",
|
|
3929
|
+
"SystemCommunicationDeploymentSite",
|
|
3548
3930
|
"SystemCommunicationDiscordConfiguration",
|
|
3549
3931
|
"SystemCommunicationEMailReceiverConfiguration",
|
|
3550
3932
|
"SystemCommunicationEMailSenderConfiguration",
|
|
@@ -3553,13 +3935,13 @@ const result = {
|
|
|
3553
3935
|
"SystemCommunicationFinApiConfiguration",
|
|
3554
3936
|
"SystemCommunicationGrafanaConfiguration",
|
|
3555
3937
|
"SystemCommunicationHelmRepositoryConfiguration",
|
|
3938
|
+
"SystemCommunicationLentAdapterPool",
|
|
3556
3939
|
"SystemCommunicationLoxoneConfiguration",
|
|
3557
3940
|
"SystemCommunicationMicrosoftGraphConfiguration",
|
|
3558
3941
|
"SystemCommunicationPipeline",
|
|
3559
3942
|
"SystemCommunicationPipelineExecution",
|
|
3560
3943
|
"SystemCommunicationPipelineStatistics",
|
|
3561
3944
|
"SystemCommunicationPipelineTrigger",
|
|
3562
|
-
"SystemCommunicationPool",
|
|
3563
3945
|
"SystemCommunicationSapConfiguration",
|
|
3564
3946
|
"SystemCommunicationServiceAccountConfiguration",
|
|
3565
3947
|
"SystemCommunicationSftpConfiguration",
|
|
@@ -3618,6 +4000,7 @@ const result = {
|
|
|
3618
4000
|
"SystemUIBranding",
|
|
3619
4001
|
"SystemUIDashboard",
|
|
3620
4002
|
"SystemUIDashboardWidget",
|
|
4003
|
+
"SystemUIEntityForm",
|
|
3621
4004
|
"SystemUIMappingCoverageConfiguration",
|
|
3622
4005
|
"SystemUIProcessDiagram",
|
|
3623
4006
|
"SystemUISymbolDefinition",
|
|
@@ -3739,6 +4122,7 @@ const result = {
|
|
|
3739
4122
|
"SystemUIBranding",
|
|
3740
4123
|
"SystemUIDashboard",
|
|
3741
4124
|
"SystemUIDashboardWidget",
|
|
4125
|
+
"SystemUIEntityForm",
|
|
3742
4126
|
"SystemUIMappingCoverageConfiguration",
|
|
3743
4127
|
"SystemUIProcessDiagram",
|
|
3744
4128
|
"SystemUISymbolDefinition",
|
|
@@ -4039,8 +4423,12 @@ class AttributeSelectorService {
|
|
|
4039
4423
|
if (!type) {
|
|
4040
4424
|
return { items: [], totalCount: 0 };
|
|
4041
4425
|
}
|
|
4042
|
-
const
|
|
4043
|
-
.filter((item) => item !== null)
|
|
4426
|
+
const all = (type.availableQueryColumns?.items || [])
|
|
4427
|
+
.filter((item) => item !== null);
|
|
4428
|
+
// Credential columns are never offered (SECRET-safe, AB#5542): a runtime query row would
|
|
4429
|
+
// project their value in clear text.
|
|
4430
|
+
const items = all
|
|
4431
|
+
.filter(item => !isSecretQueryColumn(item.attributePath, item.attributeValueType))
|
|
4044
4432
|
.map(item => ({
|
|
4045
4433
|
attributePath: item.attributePath,
|
|
4046
4434
|
attributeValueType: item.attributeValueType,
|
|
@@ -4048,7 +4436,7 @@ class AttributeSelectorService {
|
|
|
4048
4436
|
}));
|
|
4049
4437
|
return {
|
|
4050
4438
|
items,
|
|
4051
|
-
totalCount: type.availableQueryColumns?.totalCount || 0
|
|
4439
|
+
totalCount: Math.max(0, (type.availableQueryColumns?.totalCount || 0) - (all.length - items.length))
|
|
4052
4440
|
};
|
|
4053
4441
|
}));
|
|
4054
4442
|
}
|
|
@@ -5009,6 +5397,169 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
|
|
|
5009
5397
|
}]
|
|
5010
5398
|
}] });
|
|
5011
5399
|
|
|
5400
|
+
/**
|
|
5401
|
+
* Bot services REST client of the SECRET value type administration (AB#5528 / AB#5544, frontend
|
|
5402
|
+
* handover §9): environment encryption status, tenant secret sweeps and their pre-sweep dumps.
|
|
5403
|
+
* Like {@link BotService}, every call takes the tenant explicitly and addresses
|
|
5404
|
+
* `{botServices}{tenantId}/v1/...`. Methods return `null` when the bot service URL is not
|
|
5405
|
+
* configured; HTTP errors (403 missing role, 400 `ConfirmationRequired`) are rethrown as
|
|
5406
|
+
* `HttpErrorResponse` for the caller.
|
|
5407
|
+
*
|
|
5408
|
+
* Roles (handover §6, §14): status — any user with tenant access; sweep runs — `AdminPanelManagement`;
|
|
5409
|
+
* starting a sweep, deleting a dump and restoring a dump — `SecretManagement`.
|
|
5410
|
+
*
|
|
5411
|
+
* Tenant (handover §13, §14): the `{tenantId}/v1/secrets/...` routes (status, sweep runs, dump
|
|
5412
|
+
* delete, dump restore) accept only the token's OWN tenant — always pass the current tenant, never a child tenant
|
|
5413
|
+
* (child-tenant links only navigate into that tenant). A restore appears as a run with
|
|
5414
|
+
* `trigger: Restore`, mode `Encrypt` and `dump: null`.
|
|
5415
|
+
*/
|
|
5416
|
+
class BotSecretsService {
|
|
5417
|
+
httpClient = inject(HttpClient);
|
|
5418
|
+
configurationService = inject(CONFIGURATION_SERVICE);
|
|
5419
|
+
baseUrl(tenantId) {
|
|
5420
|
+
const botServicesUrl = this.configurationService.config?.botServices;
|
|
5421
|
+
return botServicesUrl ? `${botServicesUrl}${tenantId}/v1/` : null;
|
|
5422
|
+
}
|
|
5423
|
+
/** `GET {tenantId}/v1/secrets/status` — environment-level, identical in every tenant. */
|
|
5424
|
+
async getSecretEnvironmentStatus(tenantId) {
|
|
5425
|
+
const baseUrl = this.baseUrl(tenantId);
|
|
5426
|
+
if (!baseUrl)
|
|
5427
|
+
return null;
|
|
5428
|
+
return firstValueFrom(this.httpClient.get(`${baseUrl}secrets/status`));
|
|
5429
|
+
}
|
|
5430
|
+
/**
|
|
5431
|
+
* `POST {tenantId}/v1/jobs/secret-sweep?mode=&confirm=` — Encrypt and CleanupUnreadable need
|
|
5432
|
+
* `confirm = true` (the server answers `400 ConfirmationRequired` otherwise and takes a
|
|
5433
|
+
* pre-sweep dump first). Role `SecretManagement`.
|
|
5434
|
+
*/
|
|
5435
|
+
async startSecretSweep(tenantId, mode, confirm = false) {
|
|
5436
|
+
const baseUrl = this.baseUrl(tenantId);
|
|
5437
|
+
if (!baseUrl)
|
|
5438
|
+
return null;
|
|
5439
|
+
let params = new HttpParams().set('mode', mode);
|
|
5440
|
+
if (confirm) {
|
|
5441
|
+
params = params.set('confirm', true);
|
|
5442
|
+
}
|
|
5443
|
+
return firstValueFrom(this.httpClient.post(`${baseUrl}jobs/secret-sweep`, null, { params }));
|
|
5444
|
+
}
|
|
5445
|
+
/**
|
|
5446
|
+
* `GET {tenantId}/v1/jobs/secret-sweep/report` — the last sweep report of the tenant (counts,
|
|
5447
|
+
* unreadable / cleared references, never values); `null` when there is none (`404`) or the bot
|
|
5448
|
+
* service URL is not configured. Role `AdminPanelManagement`.
|
|
5449
|
+
*/
|
|
5450
|
+
async getSecretSweepReport(tenantId) {
|
|
5451
|
+
const baseUrl = this.baseUrl(tenantId);
|
|
5452
|
+
if (!baseUrl)
|
|
5453
|
+
return null;
|
|
5454
|
+
try {
|
|
5455
|
+
return await firstValueFrom(this.httpClient.get(`${baseUrl}jobs/secret-sweep/report`));
|
|
5456
|
+
}
|
|
5457
|
+
catch (error) {
|
|
5458
|
+
if (error instanceof HttpErrorResponse && error.status === 404)
|
|
5459
|
+
return null;
|
|
5460
|
+
throw error;
|
|
5461
|
+
}
|
|
5462
|
+
}
|
|
5463
|
+
/**
|
|
5464
|
+
* `GET {tenantId}/v1/secrets/sweep-runs?limit=` — newest first. Role `AdminPanelManagement`.
|
|
5465
|
+
* A `403` is rethrown WITHOUT the global "Access denied" toast (`MM_CALLER_HANDLED_STATUSES`): the
|
|
5466
|
+
* caller explains it in place.
|
|
5467
|
+
*/
|
|
5468
|
+
async getSecretSweepRuns(tenantId, limit = 20) {
|
|
5469
|
+
const baseUrl = this.baseUrl(tenantId);
|
|
5470
|
+
if (!baseUrl)
|
|
5471
|
+
return null;
|
|
5472
|
+
const params = new HttpParams().set('limit', limit);
|
|
5473
|
+
const context = new HttpContext().set(MM_CALLER_HANDLED_STATUSES, [403]);
|
|
5474
|
+
return (await firstValueFrom(this.httpClient.get(`${baseUrl}secrets/sweep-runs`, { params, context }))) ?? [];
|
|
5475
|
+
}
|
|
5476
|
+
/**
|
|
5477
|
+
* `DELETE {tenantId}/v1/secrets/sweep-runs/{runId}/dump` — deletes a pre-sweep dump before it
|
|
5478
|
+
* expires. `404` (unknown run / no dump) and `409` (already deleted) map to a result instead of an
|
|
5479
|
+
* error; other errors (e.g. `403` without `SecretManagement`) are rethrown.
|
|
5480
|
+
*/
|
|
5481
|
+
async deleteSecretSweepDump(tenantId, runId) {
|
|
5482
|
+
const baseUrl = this.baseUrl(tenantId);
|
|
5483
|
+
if (!baseUrl)
|
|
5484
|
+
return null;
|
|
5485
|
+
try {
|
|
5486
|
+
await firstValueFrom(this.httpClient.delete(`${baseUrl}secrets/sweep-runs/${encodeURIComponent(runId)}/dump`));
|
|
5487
|
+
return 'Deleted';
|
|
5488
|
+
}
|
|
5489
|
+
catch (error) {
|
|
5490
|
+
if (error instanceof HttpErrorResponse && error.status === 404)
|
|
5491
|
+
return 'NotFound';
|
|
5492
|
+
if (error instanceof HttpErrorResponse && error.status === 409)
|
|
5493
|
+
return 'AlreadyDeleted';
|
|
5494
|
+
throw error;
|
|
5495
|
+
}
|
|
5496
|
+
}
|
|
5497
|
+
/**
|
|
5498
|
+
* `POST {tenantId}/v1/secrets/sweep-runs/{runId}/restore-dump?confirm=` (handover §14, AB#5559) —
|
|
5499
|
+
* restores the run's pre-sweep dump into the tenant (replaces the tenant database, then a Verify
|
|
5500
|
+
* runs). Role `SecretManagement`, own tenant only; `confirm = true` only after the user confirmed.
|
|
5501
|
+
* 🔴 A dump taken before the first Encrypt holds plaintext secrets: restoring it brings them back.
|
|
5502
|
+
*
|
|
5503
|
+
* Every documented answer (200 / 400 / 403 / 404 / 409) is mapped to a
|
|
5504
|
+
* {@link SecretSweepDumpRestoreResult} and kept away from the global error toast
|
|
5505
|
+
* (`MM_CALLER_HANDLED_STATUSES`); other errors (network, 5xx) are rethrown.
|
|
5506
|
+
*/
|
|
5507
|
+
async restoreSecretSweepDump(tenantId, runId, confirm = false) {
|
|
5508
|
+
const baseUrl = this.baseUrl(tenantId);
|
|
5509
|
+
if (!baseUrl)
|
|
5510
|
+
return null;
|
|
5511
|
+
let params = new HttpParams();
|
|
5512
|
+
if (confirm) {
|
|
5513
|
+
params = params.set('confirm', true);
|
|
5514
|
+
}
|
|
5515
|
+
const context = new HttpContext().set(MM_CALLER_HANDLED_STATUSES, [400, 403, 404, 409]);
|
|
5516
|
+
try {
|
|
5517
|
+
const response = await firstValueFrom(this.httpClient.post(`${baseUrl}secrets/sweep-runs/${encodeURIComponent(runId)}/restore-dump`, null, { params, context }));
|
|
5518
|
+
return { status: 'Started', jobId: response?.jobId ?? '' };
|
|
5519
|
+
}
|
|
5520
|
+
catch (error) {
|
|
5521
|
+
if (!(error instanceof HttpErrorResponse))
|
|
5522
|
+
throw error;
|
|
5523
|
+
const message = errorMessageOf(error);
|
|
5524
|
+
switch (error.status) {
|
|
5525
|
+
case 400:
|
|
5526
|
+
return { status: 'ConfirmationRequired', message };
|
|
5527
|
+
case 403:
|
|
5528
|
+
return { status: 'Forbidden', message };
|
|
5529
|
+
case 404:
|
|
5530
|
+
return { status: 'NotFound', message };
|
|
5531
|
+
case 409:
|
|
5532
|
+
return { status: errorCodeOf(error) === SECRET_DUMP_RESTORE_ERROR_DUMP_KEY_MISSING ? 'DumpKeyMissing' : 'DumpDeleted', message };
|
|
5533
|
+
default:
|
|
5534
|
+
throw error;
|
|
5535
|
+
}
|
|
5536
|
+
}
|
|
5537
|
+
}
|
|
5538
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BotSecretsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
5539
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BotSecretsService, providedIn: 'root' });
|
|
5540
|
+
}
|
|
5541
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: BotSecretsService, decorators: [{
|
|
5542
|
+
type: Injectable,
|
|
5543
|
+
args: [{ providedIn: 'root' }]
|
|
5544
|
+
}] });
|
|
5545
|
+
/** The code of a bot error body (`statusDescription`, handover §12; `code` / `errorCode` tolerated). */
|
|
5546
|
+
function errorCodeOf(error) {
|
|
5547
|
+
const body = error.error;
|
|
5548
|
+
const code = body && typeof body === 'object' ? (body.code ?? body.errorCode ?? body.statusDescription) : null;
|
|
5549
|
+
if (typeof code === 'string')
|
|
5550
|
+
return code;
|
|
5551
|
+
// A body that arrives as text (no JSON content type) still names the code.
|
|
5552
|
+
if (typeof error.error === 'string' && error.error.includes(SECRET_DUMP_RESTORE_ERROR_DUMP_KEY_MISSING)) {
|
|
5553
|
+
return SECRET_DUMP_RESTORE_ERROR_DUMP_KEY_MISSING;
|
|
5554
|
+
}
|
|
5555
|
+
return null;
|
|
5556
|
+
}
|
|
5557
|
+
/** The value-free message of a bot error body, if any. */
|
|
5558
|
+
function errorMessageOf(error) {
|
|
5559
|
+
const body = error.error;
|
|
5560
|
+
return body && typeof body === 'object' && typeof body.message === 'string' && body.message ? body.message : null;
|
|
5561
|
+
}
|
|
5562
|
+
|
|
5012
5563
|
class HealthService {
|
|
5013
5564
|
httpClient = inject(HttpClient);
|
|
5014
5565
|
configurationService = inject(CONFIGURATION_SERVICE);
|
|
@@ -5098,6 +5649,105 @@ class IdentityService {
|
|
|
5098
5649
|
}
|
|
5099
5650
|
return null;
|
|
5100
5651
|
}
|
|
5652
|
+
/**
|
|
5653
|
+
* Reads one page of the slim user directory of the current tenant
|
|
5654
|
+
* (`GET {tenant}/v1/users/directory?skip=&take=&search=`, AB#5859): id and display name only.
|
|
5655
|
+
*
|
|
5656
|
+
* Unlike {@link getUsers} (`users/getPaged`, which requires the `UserManagement` role once the
|
|
5657
|
+
* identity service enforces tenant roles), the directory is available to any signed-in user of
|
|
5658
|
+
* the own tenant — the token's tenant must equal the route tenant. It is meant for pickers
|
|
5659
|
+
* (group members, assignees, ...) that need nothing but a user id and a name.
|
|
5660
|
+
*
|
|
5661
|
+
* Availability: introduced on the identity branch `feat/gerald/identity-rest-role-authz`, not yet
|
|
5662
|
+
* released. Identity versions without the endpoint answer **404**; the error is propagated as
|
|
5663
|
+
* `HttpErrorResponse`. Use {@link getUserDirectoryWithFallback} to transparently fall back to
|
|
5664
|
+
* `users/getPaged` on such versions.
|
|
5665
|
+
*
|
|
5666
|
+
* @param skip Number of entries to skip (negative values are treated as 0).
|
|
5667
|
+
* @param take Page size; clamped to 1..500 (the server limit). Non-finite values use 100.
|
|
5668
|
+
* @param search Optional case-insensitive substring of the display name; omitted when empty.
|
|
5669
|
+
* The server never matches user names or e-mail addresses.
|
|
5670
|
+
* @returns The page (sorted by display name, then id), or `null` when no identity URL is configured.
|
|
5671
|
+
*/
|
|
5672
|
+
async getUserDirectory(skip, take, search) {
|
|
5673
|
+
const baseUrl = await this.getApiBaseUrl();
|
|
5674
|
+
if (!baseUrl) {
|
|
5675
|
+
return null;
|
|
5676
|
+
}
|
|
5677
|
+
return this.fetchUserDirectory(baseUrl, skip, take, search);
|
|
5678
|
+
}
|
|
5679
|
+
/**
|
|
5680
|
+
* Like {@link getUserDirectory}, but falls back to `users/getPaged` when the identity service does
|
|
5681
|
+
* not know the directory endpoint yet (404). The missing capability is remembered per tenant for
|
|
5682
|
+
* the lifetime of this (root) service, so the 404 is hit at most once per tenant and session.
|
|
5683
|
+
*
|
|
5684
|
+
* The fallback maps {@link UserDto} to {@link UserDirectoryEntryDto} with the server's display
|
|
5685
|
+
* name rule ("First Last", else the user name) and applies `search` to the returned page only —
|
|
5686
|
+
* it is a best-effort bridge for old identity versions, and it still needs `UserManagement`
|
|
5687
|
+
* wherever `getPaged` requires it. Errors other than the 404 (401, 403, 5xx, ...) are propagated.
|
|
5688
|
+
*/
|
|
5689
|
+
async getUserDirectoryWithFallback(skip, take, search) {
|
|
5690
|
+
const baseUrl = await this.getApiBaseUrl();
|
|
5691
|
+
if (!baseUrl) {
|
|
5692
|
+
return null;
|
|
5693
|
+
}
|
|
5694
|
+
if (!this.tenantsWithoutUserDirectory.has(baseUrl)) {
|
|
5695
|
+
try {
|
|
5696
|
+
return await this.fetchUserDirectory(baseUrl, skip, take, search);
|
|
5697
|
+
}
|
|
5698
|
+
catch (error) {
|
|
5699
|
+
if (!(error instanceof HttpErrorResponse) || error.status !== 404) {
|
|
5700
|
+
throw error;
|
|
5701
|
+
}
|
|
5702
|
+
this.tenantsWithoutUserDirectory.add(baseUrl);
|
|
5703
|
+
}
|
|
5704
|
+
}
|
|
5705
|
+
const page = await this.getUsers(Math.max(0, Math.trunc(skip) || 0), IdentityService.clampDirectoryTake(take));
|
|
5706
|
+
if (!page) {
|
|
5707
|
+
return null;
|
|
5708
|
+
}
|
|
5709
|
+
const term = search?.trim().toLowerCase() ?? '';
|
|
5710
|
+
const list = (page.list ?? [])
|
|
5711
|
+
.map(user => IdentityService.toUserDirectoryEntry(user))
|
|
5712
|
+
.filter(entry => !term || entry.displayName.toLowerCase().includes(term));
|
|
5713
|
+
return {
|
|
5714
|
+
skip: page.skip,
|
|
5715
|
+
take: page.take,
|
|
5716
|
+
totalCount: term ? list.length : page.totalCount,
|
|
5717
|
+
list
|
|
5718
|
+
};
|
|
5719
|
+
}
|
|
5720
|
+
/** Base URLs (= tenants) whose identity service answered 404 for `users/directory`. */
|
|
5721
|
+
tenantsWithoutUserDirectory = new Set();
|
|
5722
|
+
static maxUserDirectoryPageSize = 500;
|
|
5723
|
+
static clampDirectoryTake(take) {
|
|
5724
|
+
if (!Number.isFinite(take)) {
|
|
5725
|
+
return 100;
|
|
5726
|
+
}
|
|
5727
|
+
return Math.min(IdentityService.maxUserDirectoryPageSize, Math.max(1, Math.trunc(take)));
|
|
5728
|
+
}
|
|
5729
|
+
static toUserDirectoryEntry(user) {
|
|
5730
|
+
const fullName = [user.firstName, user.lastName]
|
|
5731
|
+
.filter(n => !!n && n.trim().length > 0)
|
|
5732
|
+
.map(n => n.trim())
|
|
5733
|
+
.join(' ');
|
|
5734
|
+
return { userId: user.userId, displayName: fullName.length > 0 ? fullName : (user.name ?? '') };
|
|
5735
|
+
}
|
|
5736
|
+
async fetchUserDirectory(baseUrl, skip, take, search) {
|
|
5737
|
+
let params = new HttpParams()
|
|
5738
|
+
.set('skip', Math.max(0, Math.trunc(skip) || 0).toString())
|
|
5739
|
+
.set('take', IdentityService.clampDirectoryTake(take).toString());
|
|
5740
|
+
const term = search?.trim();
|
|
5741
|
+
if (term) {
|
|
5742
|
+
// HttpParams URL-encodes the value.
|
|
5743
|
+
params = params.set('search', term);
|
|
5744
|
+
}
|
|
5745
|
+
const response = await firstValueFrom(this.httpClient.get(baseUrl + 'users/directory', {
|
|
5746
|
+
params,
|
|
5747
|
+
observe: 'response'
|
|
5748
|
+
}));
|
|
5749
|
+
return response.body;
|
|
5750
|
+
}
|
|
5101
5751
|
async getUserDetails(userName) {
|
|
5102
5752
|
const baseUrl = await this.getApiBaseUrl();
|
|
5103
5753
|
if (baseUrl) {
|
|
@@ -5890,7 +6540,12 @@ class JobManagementService {
|
|
|
5890
6540
|
link.click();
|
|
5891
6541
|
}
|
|
5892
6542
|
}
|
|
5893
|
-
|
|
6543
|
+
/**
|
|
6544
|
+
* Polls a job until it ends and shows its error on failure.
|
|
6545
|
+
* @param formatErrorDetails optional formatter for the failure text, e.g. to append an explanation
|
|
6546
|
+
* of known message codes (the Studio explains the SECRET compiler messages of a CK import, AB#5544).
|
|
6547
|
+
*/
|
|
6548
|
+
async waitForJob(jobId, title, operation, formatErrorDetails) {
|
|
5894
6549
|
let cancelled = false;
|
|
5895
6550
|
const progressSubject = new Subject();
|
|
5896
6551
|
const progressDialog = this.progressWindowService.showIndeterminateProgress(title, progressSubject.asObservable(), {
|
|
@@ -5916,7 +6571,7 @@ class JobManagementService {
|
|
|
5916
6571
|
}
|
|
5917
6572
|
else {
|
|
5918
6573
|
const errorDetails = jobDto.errorMessage || jobDto.reason || 'Unknown error';
|
|
5919
|
-
this.messageService.showErrorWithDetails(errorDetails, operation);
|
|
6574
|
+
this.messageService.showErrorWithDetails(formatErrorDetails ? formatErrorDetails(errorDetails) : errorDetails, operation);
|
|
5920
6575
|
}
|
|
5921
6576
|
break;
|
|
5922
6577
|
}
|
|
@@ -5960,7 +6615,7 @@ class CommunicationService {
|
|
|
5960
6615
|
/**
|
|
5961
6616
|
* Enables the Communication feature for a tenant. Installs the
|
|
5962
6617
|
* `System.Communication` CK model and provisions the required runtime wiring
|
|
5963
|
-
* for adapters/
|
|
6618
|
+
* for adapters/deployment sites. Errors propagate to the caller.
|
|
5964
6619
|
*/
|
|
5965
6620
|
async enableCommunication(tenantId) {
|
|
5966
6621
|
if (!this.communicationServicesUrl) {
|
|
@@ -5972,7 +6627,7 @@ class CommunicationService {
|
|
|
5972
6627
|
/**
|
|
5973
6628
|
* Disables the Communication feature for a tenant. Reversible flag flip that
|
|
5974
6629
|
* removes the trigger schedules and unloads the tenant from the controller;
|
|
5975
|
-
* nothing is undeployed. Refused with 409 while
|
|
6630
|
+
* nothing is undeployed. Refused with 409 while deployment sites or workloads of the
|
|
5976
6631
|
* tenant are still deployed (AB#4255) — the error body names them. The UI
|
|
5977
6632
|
* must confirm before calling. Errors propagate to the caller.
|
|
5978
6633
|
*/
|
|
@@ -6024,8 +6679,16 @@ class CommunicationService {
|
|
|
6024
6679
|
* supplied UTC timestamp are returned, keeping subsequent refreshes light.
|
|
6025
6680
|
*/
|
|
6026
6681
|
async getAdapterMetrics(tenantId, adapterRtId, adapterCkTypeId, since) {
|
|
6682
|
+
return (await this.getAdapterMetricsResult(tenantId, adapterRtId, adapterCkTypeId, since)).samples;
|
|
6683
|
+
}
|
|
6684
|
+
/**
|
|
6685
|
+
* Like {@link getAdapterMetrics}, but reports a 404 (adapter not connected / unknown to the
|
|
6686
|
+
* controller) as `notFound: true` instead of hiding it, so pollers can back off (AB#5546).
|
|
6687
|
+
* Other errors are rethrown.
|
|
6688
|
+
*/
|
|
6689
|
+
async getAdapterMetricsResult(tenantId, adapterRtId, adapterCkTypeId, since) {
|
|
6027
6690
|
if (!this.communicationServicesUrl) {
|
|
6028
|
-
return [];
|
|
6691
|
+
return { samples: [], notFound: false };
|
|
6029
6692
|
}
|
|
6030
6693
|
const rtEntityId = encodeURIComponent(`${adapterCkTypeId}@${adapterRtId}`);
|
|
6031
6694
|
const uri = `${this.communicationServicesUrl}${tenantId}/v1/adapter/${rtEntityId}/metrics`;
|
|
@@ -6035,53 +6698,67 @@ class CommunicationService {
|
|
|
6035
6698
|
}
|
|
6036
6699
|
return firstValueFrom(this.httpClient
|
|
6037
6700
|
.get(uri, { params, headers: this.noCacheHeaders })
|
|
6038
|
-
.pipe(catchError((err) => {
|
|
6701
|
+
.pipe(map((samples) => ({ samples: samples ?? [], notFound: false })), catchError((err) => {
|
|
6039
6702
|
// 404 = adapter not connected yet / unknown to the controller;
|
|
6040
6703
|
// surface as "no samples" so the UI can render an empty state
|
|
6041
6704
|
// instead of a toast.
|
|
6042
6705
|
if (err.status === 404) {
|
|
6043
|
-
return of([]);
|
|
6706
|
+
return of({ samples: [], notFound: true });
|
|
6044
6707
|
}
|
|
6045
6708
|
return throwError(() => err);
|
|
6046
6709
|
})));
|
|
6047
6710
|
}
|
|
6048
6711
|
// ============================================================================
|
|
6049
|
-
//
|
|
6712
|
+
// Deployment-Site-Level Deployment (System.Communication 4.x)
|
|
6050
6713
|
// ============================================================================
|
|
6051
6714
|
/**
|
|
6052
|
-
* Deploys a
|
|
6053
|
-
* Communication
|
|
6054
|
-
*
|
|
6055
|
-
* any operator notification.
|
|
6715
|
+
* Deploys a deployment site (`System.Communication/DeploymentSite`, the CK type that was
|
|
6716
|
+
* `Pool` before System.Communication 4.x). For Cloud-environment sites, this triggers the
|
|
6717
|
+
* central Communication Operator to provision the corresponding `CommunicationPool` CR and
|
|
6718
|
+
* broker secret. Edge-environment sites transition state without any operator notification.
|
|
6719
|
+
*
|
|
6720
|
+
* The method keeps its name (`deployPool`) so callers stay source compatible; the wire contract
|
|
6721
|
+
* is the controller's `DeploymentSiteController`:
|
|
6722
|
+
* `POST {communicationServices}{tenantId}/v1/deploymentsite/deploy?deploymentSiteRtId=…`.
|
|
6723
|
+
* These route and parameter literals are the server's contract, not a naming preference — check
|
|
6724
|
+
* any change against the controller's `[Route]` / `[FromQuery]` (AB#5271, AB#5842).
|
|
6725
|
+
*
|
|
6726
|
+
* @param poolRtId runtime id of the deployment site
|
|
6056
6727
|
*/
|
|
6057
6728
|
async deployPool(tenantId, poolRtId) {
|
|
6058
6729
|
if (this.communicationServicesUrl) {
|
|
6059
|
-
const params = new HttpParams().set('
|
|
6060
|
-
const uri = `${this.communicationServicesUrl}${tenantId}/v1/
|
|
6730
|
+
const params = new HttpParams().set('deploymentSiteRtId', poolRtId);
|
|
6731
|
+
const uri = `${this.communicationServicesUrl}${tenantId}/v1/deploymentsite/deploy`;
|
|
6061
6732
|
await firstValueFrom(this.httpClient.post(uri, null, { params, observe: 'response' }));
|
|
6062
6733
|
}
|
|
6063
6734
|
}
|
|
6064
6735
|
/**
|
|
6065
|
-
* Undeploys a
|
|
6066
|
-
* Communication Operator to remove the CommunicationPool CR and broker
|
|
6067
|
-
*
|
|
6736
|
+
* Undeploys a deployment site. For Cloud-environment sites, this notifies the central
|
|
6737
|
+
* Communication Operator to remove the `CommunicationPool` CR and broker secret.
|
|
6738
|
+
*
|
|
6739
|
+
* Wire contract: `POST {communicationServices}{tenantId}/v1/deploymentsite/undeploy?deploymentSiteRtId=…`
|
|
6740
|
+
* (see {@link deployPool}).
|
|
6741
|
+
*
|
|
6742
|
+
* @param poolRtId runtime id of the deployment site
|
|
6068
6743
|
*/
|
|
6069
6744
|
async undeployPool(tenantId, poolRtId) {
|
|
6070
6745
|
if (this.communicationServicesUrl) {
|
|
6071
|
-
const params = new HttpParams().set('
|
|
6072
|
-
const uri = `${this.communicationServicesUrl}${tenantId}/v1/
|
|
6746
|
+
const params = new HttpParams().set('deploymentSiteRtId', poolRtId);
|
|
6747
|
+
const uri = `${this.communicationServicesUrl}${tenantId}/v1/deploymentsite/undeploy`;
|
|
6073
6748
|
await firstValueFrom(this.httpClient.post(uri, null, { params, observe: 'response' }));
|
|
6074
6749
|
}
|
|
6075
6750
|
}
|
|
6076
6751
|
/**
|
|
6077
|
-
* Deploys a single workload (Adapter or
|
|
6078
|
-
*
|
|
6079
|
-
*
|
|
6752
|
+
* Deploys a single workload (Adapter, Application or AdapterPool) via the deployment site that
|
|
6753
|
+
* hosts it. Independent of the site's own deploy — the site must already be deployed, but only
|
|
6754
|
+
* this workload's helm-install fires.
|
|
6755
|
+
*
|
|
6756
|
+
* Wire contract: `POST {communicationServices}{tenantId}/v1/deploymentsite/workloads/deploy?workloadRtId=…`.
|
|
6080
6757
|
*/
|
|
6081
6758
|
async deployWorkload(tenantId, workloadRtId) {
|
|
6082
6759
|
if (this.communicationServicesUrl) {
|
|
6083
6760
|
const params = new HttpParams().set('workloadRtId', workloadRtId);
|
|
6084
|
-
const uri = `${this.communicationServicesUrl}${tenantId}/v1/
|
|
6761
|
+
const uri = `${this.communicationServicesUrl}${tenantId}/v1/deploymentsite/workloads/deploy`;
|
|
6085
6762
|
await firstValueFrom(this.httpClient.post(uri, null, { params, observe: 'response' }));
|
|
6086
6763
|
}
|
|
6087
6764
|
}
|
|
@@ -6116,13 +6793,15 @@ class CommunicationService {
|
|
|
6116
6793
|
return response ?? [];
|
|
6117
6794
|
}
|
|
6118
6795
|
/**
|
|
6119
|
-
* Undeploys a single workload (Adapter or
|
|
6120
|
-
*
|
|
6796
|
+
* Undeploys a single workload (Adapter, Application or AdapterPool). Triggers a helm-uninstall
|
|
6797
|
+
* for the workload only; the hosting deployment site stays deployed.
|
|
6798
|
+
*
|
|
6799
|
+
* Wire contract: `POST {communicationServices}{tenantId}/v1/deploymentsite/workloads/undeploy?workloadRtId=…`.
|
|
6121
6800
|
*/
|
|
6122
6801
|
async undeployWorkload(tenantId, workloadRtId) {
|
|
6123
6802
|
if (this.communicationServicesUrl) {
|
|
6124
6803
|
const params = new HttpParams().set('workloadRtId', workloadRtId);
|
|
6125
|
-
const uri = `${this.communicationServicesUrl}${tenantId}/v1/
|
|
6804
|
+
const uri = `${this.communicationServicesUrl}${tenantId}/v1/deploymentsite/workloads/undeploy`;
|
|
6126
6805
|
await firstValueFrom(this.httpClient.post(uri, null, { params, observe: 'response' }));
|
|
6127
6806
|
}
|
|
6128
6807
|
}
|
|
@@ -6256,6 +6935,26 @@ class CommunicationService {
|
|
|
6256
6935
|
const uri = `${this.communicationServicesUrl}${tenantId}/v1/adapter/${adapterRtId}/serviceAccount/rotateSecret`;
|
|
6257
6936
|
return await firstValueFrom(this.httpClient.post(uri, null));
|
|
6258
6937
|
}
|
|
6938
|
+
/**
|
|
6939
|
+
* Rotates the client secret of a `ServiceAccountConfiguration` (`POST
|
|
6940
|
+
* /serviceAccount/{configurationRtId}/rotateSecret`, OctoMesh AB#5111) — the
|
|
6941
|
+
* configuration-bound variant of {@link rotateAdapterServiceAccountSecret} with the same core
|
|
6942
|
+
* logic and result: an adapter-owned configuration is rotated through its adapter server-side,
|
|
6943
|
+
* a standalone (declared) one directly. Roles are never touched.
|
|
6944
|
+
*
|
|
6945
|
+
* Same contract as the adapter-bound call: the result carries **no secret**, the old secret is
|
|
6946
|
+
* invalid once this resolves, and the pipelines / data flows using the account keep presenting
|
|
6947
|
+
* it until they are redeployed (`requiresPipelineRedeploy`, `message`). Throws when the
|
|
6948
|
+
* communication services URL is missing or the controller refuses (the error text says that
|
|
6949
|
+
* the previous secret remains in effect).
|
|
6950
|
+
*/
|
|
6951
|
+
async rotateServiceAccountConfigurationSecret(tenantId, configurationRtId) {
|
|
6952
|
+
if (!this.communicationServicesUrl) {
|
|
6953
|
+
throw new Error('Communication services URL is not configured');
|
|
6954
|
+
}
|
|
6955
|
+
const uri = `${this.communicationServicesUrl}${tenantId}/v1/serviceAccount/${configurationRtId}/rotateSecret`;
|
|
6956
|
+
return await firstValueFrom(this.httpClient.post(uri, null));
|
|
6957
|
+
}
|
|
6259
6958
|
/**
|
|
6260
6959
|
* Enables or disables debug capture for a pipeline via the dedicated debug
|
|
6261
6960
|
* endpoint (`PATCH /pipeline/{id}/debug`). This is the ONLY way debug capture
|
|
@@ -6690,7 +7389,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
|
|
|
6690
7389
|
}] });
|
|
6691
7390
|
|
|
6692
7391
|
const GetEntitiesByCkTypeDocumentDto = gql `
|
|
6693
|
-
query getEntitiesByCkType($ckTypeId: String!, $rtId: OctoObjectId, $after: String, $first: Int, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort]) {
|
|
7392
|
+
query getEntitiesByCkType($ckTypeId: String!, $attributeNames: [String!]!, $rtId: OctoObjectId, $after: String, $first: Int, $searchFilter: SearchFilter, $fieldFilters: [FieldFilter], $sort: [Sort]) {
|
|
6694
7393
|
runtime {
|
|
6695
7394
|
runtimeEntities(
|
|
6696
7395
|
ckId: $ckTypeId
|
|
@@ -6710,7 +7409,7 @@ const GetEntitiesByCkTypeDocumentDto = gql `
|
|
|
6710
7409
|
rtDisplayDescription
|
|
6711
7410
|
rtCreationDateTime
|
|
6712
7411
|
rtChangedDateTime
|
|
6713
|
-
attributes(resolveEnumValuesToNames: true) {
|
|
7412
|
+
attributes(attributeNames: $attributeNames, resolveEnumValuesToNames: true) {
|
|
6714
7413
|
items {
|
|
6715
7414
|
attributeName
|
|
6716
7415
|
value
|
|
@@ -6750,6 +7449,8 @@ class RuntimeEntitySelectDataSource {
|
|
|
6750
7449
|
const result = await firstValueFrom(this.getEntitiesByCkTypeGQL.fetch({
|
|
6751
7450
|
variables: {
|
|
6752
7451
|
ckTypeId: this.ckTypeId,
|
|
7452
|
+
// Only rt* fields are displayed — no attributes (SECRET-safe, AB#5542).
|
|
7453
|
+
attributeNames: [],
|
|
6753
7454
|
first: take ?? 10,
|
|
6754
7455
|
fieldFilters: [
|
|
6755
7456
|
// Search by the engine-computed display name (AB#4813); rtId matching required exact
|
|
@@ -6811,6 +7512,7 @@ class RuntimeEntityDialogDataSource {
|
|
|
6811
7512
|
return from(this.getEntitiesByCkTypeGQL.fetch({
|
|
6812
7513
|
variables: {
|
|
6813
7514
|
ckTypeId: this.ckTypeId,
|
|
7515
|
+
attributeNames: [],
|
|
6814
7516
|
first: options.take,
|
|
6815
7517
|
after: options.skip > 0 ? btoa(`arrayconnection:${options.skip - 1}`) : undefined,
|
|
6816
7518
|
fieldFilters: fieldFilters.length > 0 ? fieldFilters : undefined
|
|
@@ -7147,5 +7849,5 @@ function provideOctoServices(octoServiceOptions) {
|
|
|
7147
7849
|
* Generated bundle index. Do not edit.
|
|
7148
7850
|
*/
|
|
7149
7851
|
|
|
7150
|
-
export { AggregationInputTypesDto, AggregationTypeDto, AggregationTypesDto, AiService, ArchiveStorageHealthDto, AssetRepoGraphQlDataSource, AssetRepoService, AssociationModOptionsDto, AttributeSelectorService, AttributeValueTypeDto, BasicEnergyCarrierTypeDto, BasicEnergyDataQualityDto, BasicEnergyFacilityTypeDto, BasicEnergyProductionTypeDto, BasicEnergyStateDto, BasicLegalEntityTypeDto, BasicSalutationDto, BasicTypeOfTelephoneBasicDto, BasicTypeOfTelephoneEnhancedDto, BasicUnitOfMeasureDto, BlueprintConflictResolutionDto, BlueprintUpdateModeDto, BotService, BucketAlignmentDto, BucketAlignmentInputDto, CONFIGURATION_SERVICE, CkExtensionUpdateOperationsDto, CkModelCatalogService, CkModelService, CkRollupFunctionDto, CkTypeAttributeService, CkTypeMetaData, CkTypeSelectorService, CommunicationService, DeepGraphDirectionDto, DeleteStrategiesDto, DeploymentState, EnergyCommunityBillingCycleDto, EnergyCommunityBillingDocumentStateDto, EnergyCommunityBillingTypeDto, EnergyCommunityTaxProcedureCreditNoteDto, EnvironmentCarbonScopeDto, EnvironmentComplianceCategoryDto, EnvironmentComplianceStatusDto, EnvironmentEnergySourceDto, EnvironmentGoalStateDto, FieldFilterOperatorsDto, FormulaResultTypeDto, GetCkModelByIdDocumentDto, GetCkModelByIdDtoGQL, GetCkRecordAttributesDocumentDto, GetCkRecordAttributesDtoGQL, GetCkTypeAttributesDocumentDto, GetCkTypeAttributesDtoGQL, GetCkTypeAvailableQueryColumnsDocumentDto, GetCkTypeAvailableQueryColumnsDtoGQL, GetCkTypesDocumentDto, GetCkTypesDtoGQL, GetDerivedCkTypesDocumentDto, GetDerivedCkTypesDtoGQL, GetEntitiesByCkTypeDocumentDto, GetEntitiesByCkTypeDtoGQL, GraphDirectionDto, GraphQL, GraphQLCloneIgnoredProperties, GraphQLCommonIgnoredProperties, GraphQlDataSource, HealthService, HealthStatus, IDENTITY_PROVIDER_TYPE_LABELS, IdentityProviderType, IdentityService, ImportStrategyDto, IndustryBasicAlarmPriorityDto, IndustryBasicAlarmSourceTypeDto, IndustryBasicAlarmStateDto, IndustryBasicAlarmTypeDto, IndustryBasicIecDataTypeDto, IndustryBasicMachineCapabilitiesDto, IndustryBasicMachineStateDto, IndustryEnergyDemandResponseMarketDto, IndustryEnergyDemandResponseStatusDto, IndustryEnergyTariffTypeDto, IndustryMaintenanceAggregationTypeDto, IndustryMaintenanceCostCategoryDto, IndustryMaintenanceEnergyBalanceGroupDto, IndustryMaintenanceEnergyBalanceProductDto, IndustryMaintenanceEnergyBalanceUnitDto, IndustryMaintenanceOrderPriorityDto, IndustryMaintenanceOrderStateDto, IndustryMaintenanceOrderTypeDto, IndustryMaintenanceServiceTypeDto, IndustryManufacturingFeedbackSyncStateDto, IndustryManufacturingProductionOrderItemStateDto, IndustryManufacturingProductionOrderStateDto, JobManagementService, LevelMetaData, LoggerSeverity, ModelStateDto, MultiplicitiesDto, NavigationFilterModeDto, OctoErrorLink, OctoGraphQLServiceBase, OctoSdkDemoCustomerStatusDto, OctoSdkDemoNetworkOperatorDto, OctoSdkDemoOperatingStatusDto, OctoServiceOptions, OctoServicesModule, PagedGraphResultDto, ProgressValue, ProgressWindowService, QueryModeDto, ReportingService, RtAssociationMetaData, RuntimeEntityDialogDataSource, RuntimeEntitySelectDataSource, SearchFilterTypesDto, SeriesComparisonPolicyDto, SeriesResolutionSignalDto, SortOrdersDto, SystemAggregationTypesDto, SystemAiApprovalModeDto, SystemAiApprovalReasonDto, SystemAiApprovalStatusDto, SystemAiAuthModeDto, SystemAiConflictModeDto, SystemAiCredentialKindDto, SystemAiJobKindDto, SystemAiJobStatusDto, SystemAiKnowledgeKindDto, SystemAiLeaseStatusDto, SystemAiModelTierDto, SystemAiRiskLevelDto, SystemAiSessionEventKindDto, SystemAiSessionStatusDto, SystemAiSubscriptionScopeDto, SystemAiTicketScopeDto, SystemAiTicketStatusDto, SystemAiWorkspaceModeDto, SystemCommunicationCommunicationStateDto, SystemCommunicationConfigurationStateDto, SystemCommunicationDeploymentStateDto, SystemCommunicationEnvironmentDto, SystemCommunicationHelmChannelDto, SystemCommunicationLifecycleModeDto, SystemCommunicationLifecycleStateDto, SystemCommunicationPipelineExecutionStatusDto, SystemCommunicationPipelineTriggerTypeDto, SystemCommunicationSignalRegistrationActionDto, SystemCommunicationSignalRegistrationStateDto, SystemEnvironmentModesDto, SystemFieldFilterOperatorDto, SystemIdentityDataPolicyEnforcementModeDto, SystemIdentityDataPolicyScopeDto, SystemIdentityIdentifierKindDto, SystemIdentityIdentifierSourceDto, SystemIdentityTokenExpirationDto, SystemIdentityTokenTypeDto, SystemIdentityTokenUsageDto, SystemIdentityTrustLevelDto, SystemMaintenanceLevelsDto, SystemNavigationFilterModesDto, SystemNotificationEventLevelsDto, SystemNotificationEventSourcesDto, SystemNotificationEventStatesDto, SystemNotificationNotificationTypesDto, SystemNotificationRenderingTypesDto, SystemQueryTypesDto, SystemSortOrdersDto, SystemStreamDataBucketAlignmentDto, SystemStreamDataCkArchiveStatusDto, SystemStreamDataCkComputedColumnResultTypeDto, SystemStreamDataCkComputedColumnStateDto, SystemStreamDataCkRecomputeChangeKindDto, SystemStreamDataCkRecomputeChangeSourceDto, SystemStreamDataCkRecomputeJobStateDto, SystemStreamDataCkRecomputeTriggerDto, SystemStreamDataCkRollupFunctionDto, TENANT_ID_PROVIDER, TusUploadService, UpdateTypeDto, buildTusEndpoint, octoDataIdFromObject, result as possibleTypes, provideOctoServices };
|
|
7852
|
+
export { AggregationInputTypesDto, AggregationTypeDto, AggregationTypesDto, AiService, ArchiveStorageHealthDto, AssetRepoGraphQlDataSource, AssetRepoService, AssociationModOptionsDto, AttributeOwnershipDto, AttributeSelectorService, AttributeValueTypeDto, BasicEnergyCarrierTypeDto, BasicEnergyDataQualityDto, BasicEnergyFacilityTypeDto, BasicEnergyProductionTypeDto, BasicEnergyStateDto, BasicLegalEntityTypeDto, BasicSalutationDto, BasicTypeOfTelephoneBasicDto, BasicTypeOfTelephoneEnhancedDto, BasicUnitOfMeasureDto, BlueprintConflictResolutionDto, BlueprintUpdateModeDto, BotSecretsService, BotService, BucketAlignmentDto, BucketAlignmentInputDto, CONFIGURATION_SERVICE, CREDENTIAL_ATTRIBUTE_NAME_SUFFIXES, CkExtensionUpdateOperationsDto, CkModelCatalogService, CkModelService, CkRollupFunctionDto, CkTypeAttributeService, CkTypeMetaData, CkTypeSelectorService, CommunicationService, DEFAULT_SECRET_STATUS_LABELS, DeepGraphDirectionDto, DeleteStrategiesDto, DeploymentState, EnergyCommunityBillingCycleDto, EnergyCommunityBillingDocumentStateDto, EnergyCommunityBillingTypeDto, EnergyCommunityTaxProcedureCreditNoteDto, EnvironmentCarbonScopeDto, EnvironmentComplianceCategoryDto, EnvironmentComplianceStatusDto, EnvironmentEnergySourceDto, EnvironmentGoalStateDto, FieldFilterOperatorsDto, FormulaResultTypeDto, GetCkModelByIdDocumentDto, GetCkModelByIdDtoGQL, GetCkRecordAttributesDocumentDto, GetCkRecordAttributesDtoGQL, GetCkTypeAttributesDocumentDto, GetCkTypeAttributesDtoGQL, GetCkTypeAvailableQueryColumnsDocumentDto, GetCkTypeAvailableQueryColumnsDtoGQL, GetCkTypesDocumentDto, GetCkTypesDtoGQL, GetDerivedCkTypesDocumentDto, GetDerivedCkTypesDtoGQL, GetEntitiesByCkTypeDocumentDto, GetEntitiesByCkTypeDtoGQL, GraphDirectionDto, GraphQL, GraphQLCloneIgnoredProperties, GraphQLCommonIgnoredProperties, GraphQlDataSource, HealthService, HealthStatus, IDENTITY_PROVIDER_TYPE_LABELS, IdentityProviderType, IdentityService, ImportStrategyDto, IndustryBasicAlarmPriorityDto, IndustryBasicAlarmSourceTypeDto, IndustryBasicAlarmStateDto, IndustryBasicAlarmTypeDto, IndustryBasicIecDataTypeDto, IndustryBasicMachineCapabilitiesDto, IndustryBasicMachineStateDto, IndustryEnergyDemandResponseMarketDto, IndustryEnergyDemandResponseStatusDto, IndustryEnergyTariffTypeDto, IndustryMaintenanceAggregationTypeDto, IndustryMaintenanceCostCategoryDto, IndustryMaintenanceEnergyBalanceGroupDto, IndustryMaintenanceEnergyBalanceProductDto, IndustryMaintenanceEnergyBalanceUnitDto, IndustryMaintenanceOrderPriorityDto, IndustryMaintenanceOrderStateDto, IndustryMaintenanceOrderTypeDto, IndustryMaintenanceServiceTypeDto, IndustryManufacturingFeedbackSyncStateDto, IndustryManufacturingProductionOrderItemStateDto, IndustryManufacturingProductionOrderStateDto, JobManagementService, LevelMetaData, LoggerSeverity, ModelStateDto, MultiplicitiesDto, NavigationFilterModeDto, OCTO_SILENT_ERRORS, OctoErrorLink, OctoGraphQLServiceBase, OctoSdkDemoCustomerStatusDto, OctoSdkDemoNetworkOperatorDto, OctoSdkDemoOperatingStatusDto, OctoServiceOptions, OctoServicesModule, PagedGraphResultDto, ProgressValue, ProgressWindowService, QueryModeDto, ReportingService, RtAssociationMetaData, RuntimeEntityDialogDataSource, RuntimeEntitySelectDataSource, SECRET_DUMP_RESTORE_ERROR_DUMP_DELETED, SECRET_DUMP_RESTORE_ERROR_DUMP_KEY_MISSING, SECRET_LEGACY_V1_KEY_ID, SECRET_STATUS_WARNING_DUMP_KEY_MISSING, SECRET_STATUS_WARNING_NO_KEY_RING, SECRET_STATUS_WARNING_NO_LEGACY_V1_KEY, SECRET_VALUE_TYPE, SearchFilterTypesDto, SecretStorageFormDto, SecretUsageMatchDto, SeriesComparisonPolicyDto, SeriesResolutionSignalDto, SortOrdersDto, SystemAggregationTypesDto, SystemAiApprovalModeDto, SystemAiApprovalReasonDto, SystemAiApprovalStatusDto, SystemAiAuthModeDto, SystemAiConflictModeDto, SystemAiCredentialKindDto, SystemAiJobKindDto, SystemAiJobStatusDto, SystemAiKnowledgeKindDto, SystemAiLeaseStatusDto, SystemAiModelTierDto, SystemAiRiskLevelDto, SystemAiSessionEventKindDto, SystemAiSessionStatusDto, SystemAiSubscriptionScopeDto, SystemAiTicketScopeDto, SystemAiTicketStatusDto, SystemAiWorkspaceModeDto, SystemCommunicationAdapterSharingModeDto, SystemCommunicationCommunicationStateDto, SystemCommunicationConfigurationStateDto, SystemCommunicationDeploymentStateDto, SystemCommunicationEnvironmentDto, SystemCommunicationHelmChannelDto, SystemCommunicationHelmRepositoryPurposeDto, SystemCommunicationLifecycleModeDto, SystemCommunicationLifecycleStateDto, SystemCommunicationPipelineExecutionClassDto, SystemCommunicationPipelineExecutionStatusDto, SystemCommunicationPipelineTriggerTypeDto, SystemCommunicationPoolScaleUpPolicyDto, SystemCommunicationSignalRegistrationActionDto, SystemCommunicationSignalRegistrationStateDto, SystemEnvironmentModesDto, SystemFieldFilterOperatorDto, SystemIdentityDataPolicyEnforcementModeDto, SystemIdentityDataPolicyScopeDto, SystemIdentityIdentifierKindDto, SystemIdentityIdentifierSourceDto, SystemIdentityTokenExpirationDto, SystemIdentityTokenTypeDto, SystemIdentityTokenUsageDto, SystemIdentityTrustLevelDto, SystemMaintenanceLevelsDto, SystemNavigationFilterModesDto, SystemNotificationEventLevelsDto, SystemNotificationEventSourcesDto, SystemNotificationEventStatesDto, SystemNotificationNotificationTypesDto, SystemNotificationRenderingTypesDto, SystemQueryTypesDto, SystemSortOrdersDto, SystemStreamDataBucketAlignmentDto, SystemStreamDataCkArchiveStatusDto, SystemStreamDataCkComputedColumnResultTypeDto, SystemStreamDataCkComputedColumnStateDto, SystemStreamDataCkConflictKeyOrderDto, SystemStreamDataCkRecomputeChangeKindDto, SystemStreamDataCkRecomputeChangeSourceDto, SystemStreamDataCkRecomputeJobStateDto, SystemStreamDataCkRecomputeTriggerDto, SystemStreamDataCkRollupFunctionDto, TENANT_ID_PROVIDER, TusUploadService, UpdateTypeDto, buildTusEndpoint, formatSecretStatus, isCredentialLikeAttributeName, isSecretAttributeCandidate, isSecretPresent, isSecretQueryColumn, isSecretStateObject, isSecretValueType, isTextualValueType, octoDataIdFromObject, result as possibleTypes, provideOctoServices, secretInputValue, secretStateFromAttribute, secretStatusOf, toAttributeNameFilter, toCamelCaseAttributeName, toSecretState, toUniqueCamelCaseNames };
|
|
7151
7853
|
//# sourceMappingURL=meshmakers-octo-services.mjs.map
|