@salesforce/lds-runtime-mobile 1.428.0-dev2 → 1.428.0-dev20

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/sfdc/main.js CHANGED
@@ -19,8 +19,10 @@ import { withRegistration, register } from 'force/ldsEngine';
19
19
  import { setupInstrumentation, instrumentAdapter as instrumentAdapter$1, instrumentLuvio, setLdsAdaptersUiapiInstrumentation, setLdsNetworkAdapterInstrumentation } from 'force/ldsInstrumentation';
20
20
  import { HttpStatusCode as HttpStatusCode$1, setBypassDeepFreeze, StoreKeySet, StringKeyInMemoryStore, Reader, serializeStructuredKey, deepFreeze as deepFreeze$1, emitAdapterEvent, ingestShape, coerceConfig as coerceConfig$1, typeCheckConfig as typeCheckConfig$h, createResourceParams as createResourceParams$h, StoreKeyMap, buildNetworkSnapshotCachePolicy as buildNetworkSnapshotCachePolicy$f, resolveLink, createCustomAdapterEventEmitter, isFileReference, Environment, Luvio, InMemoryStore } from 'force/luvioEngine';
21
21
  import { isSupportedEntity, configuration, getObjectInfoAdapterFactory, RECORD_ID_PREFIX, RECORD_FIELDS_KEY_JUNCTION, isStoreKeyRecordViewEntity, extractRecordIdFromStoreKey, buildRecordRepKeyFromId, keyBuilderRecord, RecordRepresentationTTL, keyBuilderQuickActionExecutionRepresentation, ingestQuickActionExecutionRepresentation, getRecordId18 as getRecordId18$1, getRecordsAdapterFactory as getRecordsAdapterFactory$1, RecordRepresentationRepresentationType, ObjectInfoRepresentationType, getObjectInfosAdapterFactory, getObjectInfoDirectoryAdapterFactory, UiApiNamespace, RecordRepresentationType, RecordRepresentationVersion } from 'force/ldsAdaptersUiapi';
22
- import allowUpdatesForNonCachedRecords from '@salesforce/gate/lmr.allowUpdatesForNonCachedRecords';
22
+ import draftQueueMaxRetryAttemptsGate from '@salesforce/gate/lmr.draft-queue-max-retry-attempts';
23
+ import preserveIdempotencyKeyOn400Gate from '@salesforce/gate/lds.preserve-idempotency-key-on-400-enabled';
23
24
  import { getInstrumentation, idleDetector } from 'o11y/client';
25
+ import allowUpdatesForNonCachedRecords from '@salesforce/gate/lmr.allowUpdatesForNonCachedRecords';
24
26
  import caseSensitiveUserId from '@salesforce/user/Id';
25
27
  import { Kind as Kind$1, visit as visit$1, isObjectType, defaultFieldResolver, buildSchema, parse as parse$8, extendSchema, isScalarType, execute, print } from 'force/ldsGraphqlParser';
26
28
  import graphqlRelationshipFieldsPerf from '@salesforce/gate/lds.graphqlRelationshipFieldsPerf';
@@ -2338,6 +2340,13 @@ function customActionHandler(executor, id, draftQueue) {
2338
2340
  }
2339
2341
 
2340
2342
  const DRAFT_SEGMENT = 'DRAFT';
2343
+ /**
2344
+ * Metadata key under which an action's upload retry-attempt count is persisted.
2345
+ * Lives in the action's durable `metadata` bag so the count survives app restarts
2346
+ * (the in-memory backoff interval resets on every startQueue()). Written by the
2347
+ * action handler on each retry and cleared when an action is manually retried.
2348
+ */
2349
+ const DRAFT_ACTION_RETRY_COUNT_METADATA_KEY = 'retryCount';
2341
2350
  class DurableDraftQueue {
2342
2351
  getHandler(id) {
2343
2352
  const handler = this.handlers[id];
@@ -2696,10 +2705,14 @@ class DurableDraftQueue {
2696
2705
  if (!isDraftError(target)) {
2697
2706
  throw Error(`Action ${actionId} is not in Error state`);
2698
2707
  }
2708
+ // A manual retry is a fresh start: clear the persisted upload retry-attempt
2709
+ // count so the action doesn't immediately re-cap after a single failure.
2710
+ const { [DRAFT_ACTION_RETRY_COUNT_METADATA_KEY]: _retryCount, ...metadataWithoutRetryCount } = target.metadata || {};
2699
2711
  let pendingAction = {
2700
2712
  ...target,
2701
2713
  status: DraftActionStatus.Pending,
2702
2714
  error: undefined,
2715
+ metadata: metadataWithoutRetryCount,
2703
2716
  };
2704
2717
  await this.draftStore.writeAction(pendingAction);
2705
2718
  await this.notifyChangedListeners({
@@ -42127,6 +42140,324 @@ function makeEnvironmentUiApiRecordDraftAware(luvio, options, env) {
42127
42140
  return create$3(adapterSpecificEnvironments, {});
42128
42141
  }
42129
42142
 
42143
+ /**
42144
+ * This function takes an unknown error and normalizes it to an Error object
42145
+ */
42146
+ function normalizeError$1(error) {
42147
+ if (typeof error === 'object' && error instanceof Error) {
42148
+ return error;
42149
+ }
42150
+ else if (typeof error === 'string') {
42151
+ return new Error(error);
42152
+ }
42153
+ return new Error(stringify$5(error));
42154
+ }
42155
+ /**
42156
+ * Maximum number of times an action's upload will be retried before the action is
42157
+ * transitioned to Error and surfaced to the consumer. Caps the otherwise-unbounded
42158
+ * retry loop that can wedge the single-worker draft queue when an upload fails
42159
+ * deterministically on every dispatch. Only enforced when the
42160
+ * `lmr.draft-queue-max-retry-attempts` gate is open.
42161
+ */
42162
+ const MAX_RETRY_ATTEMPTS = 5;
42163
+ const MAX_RETRY_ERROR_CODE = 'MAX_RETRY_ATTEMPTS_EXCEEDED';
42164
+ function isFetchResponse(failure) {
42165
+ // The union is exactly FetchResponse | Error, so "not an Error" is the FetchResponse.
42166
+ // This is safer than duck-typing on status/ok: a custom Error subclass that happens to
42167
+ // carry those properties would be misclassified by a structural check.
42168
+ return !(failure instanceof Error);
42169
+ }
42170
+ /**
42171
+ * Builds the FetchResponse-shaped error attached to an action that has exhausted its
42172
+ * upload retries. Shaped like a real network error response (status/statusText/ok/
42173
+ * headers/body) so downstream consumers (DraftManager, queue instrumentation) that
42174
+ * read `action.error.status`/`.body`/etc. behave consistently with a server error.
42175
+ *
42176
+ * The failure that caused the final attempt — a non-ok response (HTTP path) or a thrown
42177
+ * error (catch path) — is folded into the body so the surfaced error says WHAT failed,
42178
+ * not merely that the attempt cap was reached.
42179
+ */
42180
+ function buildMaxRetryError(lastFailure) {
42181
+ const capMessage = `Draft action exceeded ${MAX_RETRY_ATTEMPTS} upload retry attempts`;
42182
+ if (isFetchResponse(lastFailure)) {
42183
+ // Preserve the server's own error detail (status + body) so the surfaced error
42184
+ // carries the last response that caused us to give up retrying.
42185
+ return {
42186
+ status: HttpStatusCode$1.ServerError,
42187
+ statusText: capMessage,
42188
+ ok: false,
42189
+ headers: {},
42190
+ body: {
42191
+ errorCode: MAX_RETRY_ERROR_CODE,
42192
+ message: `${capMessage}. Last response: status=${lastFailure.status} ${lastFailure.statusText}`,
42193
+ lastResponseStatus: lastFailure.status,
42194
+ lastResponseBody: lastFailure.body,
42195
+ },
42196
+ };
42197
+ }
42198
+ return {
42199
+ status: HttpStatusCode$1.ServerError,
42200
+ statusText: capMessage,
42201
+ ok: false,
42202
+ headers: {},
42203
+ body: {
42204
+ errorCode: MAX_RETRY_ERROR_CODE,
42205
+ message: `${capMessage}. Last error: ${lastFailure.name}: ${lastFailure.message}`,
42206
+ lastErrorName: lastFailure.name,
42207
+ lastErrorMessage: lastFailure.message,
42208
+ },
42209
+ };
42210
+ }
42211
+
42212
+ function attachObserversToAdapterRequestContext(observers, adapterRequestContext) {
42213
+ if (adapterRequestContext === undefined) {
42214
+ return { eventObservers: observers };
42215
+ }
42216
+ if (adapterRequestContext.eventObservers === undefined) {
42217
+ return { ...adapterRequestContext, eventObservers: observers };
42218
+ }
42219
+ return {
42220
+ ...adapterRequestContext,
42221
+ eventObservers: adapterRequestContext.eventObservers.concat(observers),
42222
+ };
42223
+ }
42224
+ /**
42225
+ * Use this method to sanitize the unknown error object when
42226
+ * we are unsure of the type of the error thrown
42227
+ *
42228
+ * @param err Unknown object to sanitize
42229
+ * @returns an instance of error
42230
+ */
42231
+ function normalizeError(err) {
42232
+ if (err instanceof Error) {
42233
+ return err;
42234
+ }
42235
+ else if (typeof err === 'string') {
42236
+ return new Error(err);
42237
+ }
42238
+ return new Error(stringify$5(err));
42239
+ }
42240
+
42241
+ const O11Y_NAMESPACE_LDS_MOBILE = 'lds-mobile';
42242
+ // metrics
42243
+ /** GraphQL */
42244
+ const GRAPHQL_EVAL_ERROR = 'gql-eval-error';
42245
+ const GRAPHQL_EVAL_DB_READ_DURATION = 'gql-eval-db-read-duration';
42246
+ const GRAPHQL_EVAL_ROOT_QUERY_COUNT = 'gql-eval-root-query-count';
42247
+ const GRAPHQL_EVAL_TOTAL_QUERY_COUNT = 'gql-eval-total-query-count';
42248
+ const GRAPHQL_EVAL_MAX_CHILD_RELATIONSHIPS_COUNT = 'gql-eval-max-child-count';
42249
+ const GRAPHQL_EVAL_QUERY_RECORD_COUNT = 'gql-eval-query-record-count';
42250
+ const GRAPHQL_SNAPSHOT_REFRESH_UNDEFINED = 'gql-snapshot-refresh-undefined';
42251
+ /** Draft Queue */
42252
+ const DRAFT_QUEUE_STATE_STARTED = 'draft-queue-state-started';
42253
+ const DRAFT_QUEUE_STATE_ERROR = 'draft-queue-state-error';
42254
+ const DRAFT_QUEUE_STATE_WAITING = 'draft-queue-state-waiting';
42255
+ const DRAFT_QUEUE_STATE_STOPPED = 'draft-queue-state-stopped';
42256
+ const DRAFT_QUEUE_ACTION_ADDED = 'draft-queue-action-added';
42257
+ const DRAFT_QUEUE_ACTION_UPLOADING = 'draft-queue-action-uploading';
42258
+ const DRAFT_QUEUE_ACTION_COMPLETED = 'draft-queue-action-completed';
42259
+ const DRAFT_QUEUE_ACTION_DELETED = 'draft-queue-action-deleted';
42260
+ const DRAFT_QUEUE_ACTION_UPDATED = 'draft-queue-action-updated';
42261
+ const DRAFT_QUEUE_ACTION_FAILED = 'draft-queue-action-failed';
42262
+ const DRAFT_QUEUE_ACTION_UPLOAD_ERROR = 'draft-queue-action-upload-error';
42263
+ const DRAFT_QUEUE_TOTAL_MERGE_ACTIONS_CALLS = 'draft-queue-total-mergeActions-calls';
42264
+ /** Content Document */
42265
+ const CREATE_CONTENT_DOCUMENT_AND_VERSION_TOTAL_SYNTHESIZE_CALLS = 'content-document-version-total-synthesize-calls';
42266
+ const CREATE_CONTENT_DOCUMENT_AND_VERSION_DRAFT_SYNTHESIZE_ERROR = 'create-content-document-version-draft-synthesize-error';
42267
+ /** Priming */
42268
+ const PRIMING_TOTAL_SESSION_COUNT = 'priming-total-session-count';
42269
+ const PRIMING_TOTAL_ERROR_COUNT = 'priming-total-error-count';
42270
+ const PRIMING_TOTAL_PRIMED_COUNT = 'priming-total-primed-count';
42271
+ const PRIMING_TOTAL_CONFLICT_COUNT = 'priming-total-conflict-count';
42272
+ // logs
42273
+ const GRAPHQL_QUERY_PARSE_ERROR = 'gql-query-parse-error';
42274
+ const GRAPHQL_SQL_EVAL_PRECONDITION_ERROR = 'gql-sql-pre-eval-error';
42275
+ const GRAPHQL_CREATE_SNAPSHOT_ERROR = 'gql-create-snapshot-error';
42276
+ const DRAFT_AWARE_CREATE_CONTENT_DOCUMENT_AND_VERSION_ERROR = 'draft-aware-create-content-document-and-version-error';
42277
+ /** Garbage Collection */
42278
+ const GARBAGE_COLLECTION_AGGRESSIVE_TRIM_COUNT = 'garbage-collection-aggressive-trim-count';
42279
+ const GARBAGE_COLLECTION_AGGRESSIVE_TRIM_RECORDS_TRIMMED = 'garbage-collection-aggressive-trim-records-trimmed';
42280
+ const GARBAGE_COLLECTION_AGGRESSIVE_TRIM_TOTAL_RECORDS_BEFORE_TRIM = 'garbage-collection-aggressive-trim-total-records-before-trim';
42281
+ const ldsMobileInstrumentation = getInstrumentation(O11Y_NAMESPACE_LDS_MOBILE);
42282
+ const nimbusLogger = typeof __nimbus !== 'undefined' &&
42283
+ __nimbus.plugins !== undefined &&
42284
+ __nimbus.plugins.JSLoggerPlugin !== undefined
42285
+ ? __nimbus.plugins.JSLoggerPlugin
42286
+ : undefined;
42287
+ function reportGraphqlQueryParseError(err) {
42288
+ const error = normalizeError(err);
42289
+ const errorCode = GRAPHQL_QUERY_PARSE_ERROR;
42290
+ // Metric
42291
+ reportGraphqlAdapterError(errorCode);
42292
+ // Log
42293
+ ldsMobileInstrumentation.error(error, errorCode);
42294
+ }
42295
+ function reportGraphqlSqlEvalPreconditionError(err) {
42296
+ const error = normalizeError(err);
42297
+ const errorCode = GRAPHQL_SQL_EVAL_PRECONDITION_ERROR;
42298
+ // Metric
42299
+ reportGraphqlAdapterError(errorCode);
42300
+ // Log
42301
+ ldsMobileInstrumentation.error(error, errorCode);
42302
+ }
42303
+ function reportGraphqlCreateSnapshotError(err) {
42304
+ const error = normalizeError(err);
42305
+ const errorCode = GRAPHQL_CREATE_SNAPSHOT_ERROR;
42306
+ // Metric
42307
+ reportGraphqlAdapterError(errorCode);
42308
+ // Log
42309
+ ldsMobileInstrumentation.error(error, errorCode);
42310
+ }
42311
+ function reportGraphQlEvalDbReadDuration(duration) {
42312
+ ldsMobileInstrumentation.trackValue(GRAPHQL_EVAL_DB_READ_DURATION, duration);
42313
+ }
42314
+ function reportGraphqlAdapterError(errorCode) {
42315
+ // Increment overall count with errorCode as tag
42316
+ ldsMobileInstrumentation.incrementCounter(GRAPHQL_EVAL_ERROR, 1, true, { errorCode });
42317
+ }
42318
+ function reportGraphqlQueryInstrumentation(data) {
42319
+ const queryBuckets = [1, 2, 3, 4, 5, 10, 20, 50, 100];
42320
+ const recordBuckets = [
42321
+ 1, 5, 10, 20, 50, 100, 1000, 2000, 5000, 10000, 50000, 100000, 1000000,
42322
+ ];
42323
+ ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_ROOT_QUERY_COUNT, data.rootQueryCount, queryBuckets);
42324
+ ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_TOTAL_QUERY_COUNT, data.totalQueryCount, queryBuckets);
42325
+ ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_MAX_CHILD_RELATIONSHIPS_COUNT, data.maxChildRelationships, queryBuckets);
42326
+ ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_QUERY_RECORD_COUNT, data.requestedRecordCount, recordBuckets);
42327
+ }
42328
+ function incrementGraphQLRefreshUndfined() {
42329
+ ldsMobileInstrumentation.incrementCounter(GRAPHQL_SNAPSHOT_REFRESH_UNDEFINED);
42330
+ }
42331
+ function reportDraftActionEvent(state, draftCount, message) {
42332
+ if (nimbusLogger) {
42333
+ nimbusLogger.logInfo(`Draft action event: ${state}, depth: ${draftCount}${message ? `, message: ${message}` : ''}`);
42334
+ }
42335
+ switch (state) {
42336
+ case 'added':
42337
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_ADDED);
42338
+ break;
42339
+ case 'uploading':
42340
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_UPLOADING);
42341
+ break;
42342
+ case 'completed':
42343
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_COMPLETED);
42344
+ break;
42345
+ case 'deleted':
42346
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_DELETED);
42347
+ break;
42348
+ case 'failed':
42349
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_FAILED, 1, true);
42350
+ break;
42351
+ case 'updated':
42352
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_UPDATED);
42353
+ break;
42354
+ }
42355
+ }
42356
+ /**
42357
+ * Reports an exception thrown while uploading a draft action. The thrown error is
42358
+ * otherwise swallowed by the upload handler's retry path, leaving the failure
42359
+ * invisible in telemetry; this surfaces it to o11y (log + counter) so a deterministic
42360
+ * upload failure can be diagnosed instead of silently retried forever.
42361
+ *
42362
+ * PII: the device log line carries only the handler id, retry attempt, and the error
42363
+ * NAME (e.g. "TypeError") — never the free-text error message, which can embed record
42364
+ * ids (URL path segments) or server field-validation strings. The full normalized error
42365
+ * (message + stack) is handed only to `ldsMobileInstrumentation.error`, the structured
42366
+ * o11y error pipeline responsible for scrubbing/handling that detail. Also does NOT log
42367
+ * the action's targetId/tag or any request body/field values.
42368
+ */
42369
+ function reportDraftActionUploadError(error, handlerId, attempt) {
42370
+ const normalized = normalizeError(error);
42371
+ if (nimbusLogger) {
42372
+ nimbusLogger.logError(`Draft action upload error: handler=${handlerId}, attempt=${attempt}, name=${normalized.name}`);
42373
+ }
42374
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_UPLOAD_ERROR, 1, true, {
42375
+ handlerId,
42376
+ });
42377
+ ldsMobileInstrumentation.error(normalized, DRAFT_QUEUE_ACTION_UPLOAD_ERROR);
42378
+ }
42379
+ function reportDraftQueueState(state, draftCount) {
42380
+ if (nimbusLogger) {
42381
+ nimbusLogger.logInfo(`Draft state changed: ${state}, depth: ${draftCount}`);
42382
+ }
42383
+ switch (state) {
42384
+ case 'started':
42385
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_STARTED);
42386
+ break;
42387
+ case 'error':
42388
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_ERROR, 1, true);
42389
+ break;
42390
+ case 'waiting':
42391
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_WAITING);
42392
+ break;
42393
+ case 'stopped':
42394
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_STOPPED);
42395
+ break;
42396
+ }
42397
+ }
42398
+ function reportDraftAwareContentDocumentVersionSynthesizeError(err) {
42399
+ let error;
42400
+ if (err.body !== undefined) {
42401
+ error = err.body;
42402
+ }
42403
+ else {
42404
+ error = normalizeError(err);
42405
+ }
42406
+ const errorCode = DRAFT_AWARE_CREATE_CONTENT_DOCUMENT_AND_VERSION_ERROR;
42407
+ const errorType = error.errorType;
42408
+ const tags = {
42409
+ errorCode,
42410
+ };
42411
+ if (errorType !== undefined) {
42412
+ tags.errorType = errorType;
42413
+ }
42414
+ // Metric
42415
+ ldsMobileInstrumentation.incrementCounter(CREATE_CONTENT_DOCUMENT_AND_VERSION_DRAFT_SYNTHESIZE_ERROR, 1, true, tags);
42416
+ // Log
42417
+ ldsMobileInstrumentation.error(error, errorCode);
42418
+ }
42419
+ function reportDraftAwareContentVersionSynthesizeCalls(mimeType) {
42420
+ ldsMobileInstrumentation.incrementCounter(CREATE_CONTENT_DOCUMENT_AND_VERSION_TOTAL_SYNTHESIZE_CALLS, 1, undefined, { mimeType });
42421
+ }
42422
+ /** Priming */
42423
+ function reportPrimingSessionCreated() {
42424
+ ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_SESSION_COUNT, 1, undefined, {});
42425
+ }
42426
+ function reportPrimingError(errorType, recordCount) {
42427
+ ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_ERROR_COUNT, recordCount, undefined, {
42428
+ errorType,
42429
+ });
42430
+ }
42431
+ function reportPrimingSuccess(recordCount) {
42432
+ ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_PRIMED_COUNT, recordCount, undefined);
42433
+ }
42434
+ function reportPrimingConflict(resolutionType, recordCount) {
42435
+ ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_CONFLICT_COUNT, recordCount, undefined, {
42436
+ resolutionType,
42437
+ });
42438
+ }
42439
+ /** Network */
42440
+ function reportChunkCandidateUrlLength(urlLength) {
42441
+ const buckets = [8000, 10000, 12000, 14000, 16000];
42442
+ ldsMobileInstrumentation.bucketValue('chunk-candidate-url-length-histogram', urlLength, buckets);
42443
+ }
42444
+ /** Garbage Collection */
42445
+ function reportAggressiveTrimTriggered(trimCount, beforeTrimRecordCount, totalRecordsTrimmed) {
42446
+ ldsMobileInstrumentation.trackValue(GARBAGE_COLLECTION_AGGRESSIVE_TRIM_COUNT, trimCount);
42447
+ ldsMobileInstrumentation.trackValue(GARBAGE_COLLECTION_AGGRESSIVE_TRIM_TOTAL_RECORDS_BEFORE_TRIM, beforeTrimRecordCount);
42448
+ ldsMobileInstrumentation.trackValue(GARBAGE_COLLECTION_AGGRESSIVE_TRIM_RECORDS_TRIMMED, totalRecordsTrimmed);
42449
+ }
42450
+ /** One Store Cache Purge */
42451
+ const ONESTORE_CACHE_PURGING_RECORDS_PURGED = 'onestore-cache-purging-records-purged';
42452
+ const ONESTORE_CACHE_PURGING_RECORDS_ERROR = 'onestore-cache-purging-records-error';
42453
+ function reportOneStoreRecordsPurgedFromCache(recordsPurged) {
42454
+ ldsMobileInstrumentation.trackValue(ONESTORE_CACHE_PURGING_RECORDS_PURGED, recordsPurged);
42455
+ }
42456
+ function reportOneStoreCachePurgingError(error) {
42457
+ const errorMessage = normalizeError(error);
42458
+ ldsMobileInstrumentation.error(errorMessage, ONESTORE_CACHE_PURGING_RECORDS_ERROR);
42459
+ }
42460
+
42130
42461
  const HTTP_HEADER_RETRY_AFTER = 'Retry-After';
42131
42462
  const HTTP_HEADER_IDEMPOTENCY_KEY = 'Idempotency-Key';
42132
42463
  const ERROR_CODE_IDEMPOTENCY_FEATURE_NOT_ENABLED = 'IDEMPOTENCY_FEATURE_NOT_ENABLED';
@@ -42215,6 +42546,14 @@ class AbstractResourceRequestActionHandler {
42215
42546
  if (request && request.headers && request.headers[HTTP_HEADER_IDEMPOTENCY_KEY]) {
42216
42547
  const status = response.status;
42217
42548
  switch (status) {
42549
+ case 0 /* IdempotentWriteSpecificHttpStatusCode.NoResponse */:
42550
+ // statusCode 0 = the client sent the request but received no response
42551
+ // (connection dropped / app suspended in flight). The write may already
42552
+ // have committed at the origin, so we MUST retry with the SAME idempotency
42553
+ // key and let the server dedupe — rotating the key here would duplicate an
42554
+ // already-committed record.
42555
+ shouldRetry = true;
42556
+ break;
42218
42557
  case 408 /* IdempotentWriteSpecificHttpStatusCode.RequestTimeout */:
42219
42558
  case 503 /* IdempotentWriteSpecificHttpStatusCode.ServiceUnavailable */:
42220
42559
  retryDelayInMs = getRetryAfterInMs(response.headers);
@@ -42261,11 +42600,33 @@ class AbstractResourceRequestActionHandler {
42261
42600
  }
42262
42601
  }
42263
42602
  }
42603
+ // A generic 400 that none of the idempotency-specific branches above claimed
42604
+ // (shouldRetry still false) and that is not a backdating collision. @W-23445154
42264
42605
  if (response.status === HttpStatusCode$1.BadRequest &&
42606
+ !shouldRetry &&
42265
42607
  this.hasIdempotencySupport() &&
42266
- updatedAction.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY] !== undefined) {
42267
- updatedAction.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
42268
- actionDataChanged = true;
42608
+ updatedAction.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY] !== undefined &&
42609
+ !this.isBackdatingError(response.body, action)) {
42610
+ if (!preserveIdempotencyKeyOn400Gate.isOpen({ fallback: false })) {
42611
+ // Gate CLOSED (default) — legacy behavior: rotate the key and let the draft
42612
+ // error (shouldRetry stays false). Retained as the default until the fix is
42613
+ // enabled; this is the path that duplicated already-committed writes.
42614
+ updatedAction.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
42615
+ actionDataChanged = true;
42616
+ }
42617
+ else if (!this.isServerGeneratedError(response.body)) {
42618
+ // Gate OPEN — the fix: only an edge/gateway-injected 400 (no recognizable
42619
+ // server error body) is retried with the SAME key, so the server can dedupe a
42620
+ // write that may already have committed at the origin. A real, server-generated
42621
+ // 400 (UiApiError[] or an enhancedErrorType body, e.g. a field-validation
42622
+ // failure) falls through to the error path below: retrying it unchanged would
42623
+ // only be rejected again, so the draft is errored for the user to fix or discard
42624
+ // — the same terminal outcome as the legacy path, minus the duplicating key
42625
+ // rotation. The key is only ever rotated by the recognized idempotency error
42626
+ // codes above, by a backdating collision (new body), or when the user edits an
42627
+ // errored draft (mergeActions/handleReplaceAction).
42628
+ shouldRetry = true;
42629
+ }
42269
42630
  }
42270
42631
  if (response.status === HttpStatusCode$1.BadRequest &&
42271
42632
  this.isBackdatingError(response.body, action)) {
@@ -42274,23 +42635,101 @@ class AbstractResourceRequestActionHandler {
42274
42635
  ...updatedAction.data.body.fields,
42275
42636
  LastModifiedDate: new Date(updatedAction.timestamp).toISOString(),
42276
42637
  };
42638
+ // The record content changed (LastModifiedDate is bumped), so this is a NEW
42639
+ // logical write. Rotate the idempotency key so the server treats it as such
42640
+ // rather than deduping it against the stale, pre-backdate request. This is a
42641
+ // legitimate rotation — the request body is modified — unlike the generic-400
42642
+ // fallback above which must preserve the key when the fix is enabled. @W-23445154
42643
+ if (this.hasIdempotencySupport() &&
42644
+ updatedAction.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY] !== undefined) {
42645
+ updatedAction.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
42646
+ }
42277
42647
  shouldRetry = true;
42278
42648
  actionDataChanged = true;
42279
42649
  }
42280
- await actionErrored(shouldRetry
42281
- ? updatedAction
42282
- : {
42650
+ if (shouldRetry) {
42651
+ // Funnel the retry through the cap: when the gate is open this persists
42652
+ // the attempt count and errors out once the cap is hit; when the gate is
42653
+ // closed it behaves exactly as before. The non-ok response is the failure
42654
+ // that would otherwise be retried.
42655
+ await this.retryOrCap(updatedAction, response, actionErrored, retryDelayInMs, actionDataChanged);
42656
+ }
42657
+ else {
42658
+ await actionErrored({
42283
42659
  ...updatedAction,
42284
42660
  error: response,
42285
42661
  status: DraftActionStatus.Error,
42286
- }, shouldRetry, retryDelayInMs, actionDataChanged);
42662
+ }, false, retryDelayInMs, actionDataChanged);
42663
+ }
42287
42664
  return ProcessActionResult.ACTION_ERRORED;
42288
42665
  }
42289
42666
  catch (e) {
42290
- await actionErrored(action, true);
42667
+ // #3 (ungated): the thrown exception is otherwise swallowed here, leaving a
42668
+ // deterministic upload failure invisible in telemetry. Surface it to o11y
42669
+ // before deciding whether to retry.
42670
+ const error = normalizeError$1(e);
42671
+ const attempt = this.getUploadRetryCount(action) + 1;
42672
+ reportDraftActionUploadError(error, this.handlerId, attempt);
42673
+ await this.retryOrCap(action, error, actionErrored);
42291
42674
  return ProcessActionResult.NETWORK_ERROR;
42292
42675
  }
42293
42676
  }
42677
+ /**
42678
+ * Reads the persisted upload retry-attempt count from the action's durable metadata
42679
+ * bag. The count lives in metadata (rather than in-memory) so it survives app
42680
+ * restarts and queue re-creation — the failure modes that let the unbounded retry
42681
+ * loop run for days.
42682
+ */
42683
+ getUploadRetryCount(action) {
42684
+ const parsed = Number(action.metadata?.[DRAFT_ACTION_RETRY_COUNT_METADATA_KEY]);
42685
+ // Guard against a missing/corrupt persisted value: a NaN, fractional, or negative
42686
+ // count must never weaken the cap. Floor to a non-negative integer, defaulting to 0.
42687
+ if (!Number.isFinite(parsed) || parsed < 0) {
42688
+ return 0;
42689
+ }
42690
+ return Math.floor(parsed);
42691
+ }
42692
+ /**
42693
+ * Enforces the upload retry-attempt cap around the queue's `actionErrored` callback.
42694
+ * Both retry paths — a retryable HTTP error and a thrown exception — funnel through
42695
+ * here.
42696
+ *
42697
+ * The entire cap behavior is gated behind `lmr.draft-queue-max-retry-attempts`. When
42698
+ * the gate is CLOSED this is a transparent passthrough: it issues the same
42699
+ * `actionErrored(action, true, ...)` retry the queue made before this change, and
42700
+ * writes no extra metadata. When the gate is OPEN it persists an incremented attempt
42701
+ * count to the action's durable metadata and, once the action has failed
42702
+ * {@link MAX_RETRY_ATTEMPTS} times, transitions it to Error (carrying a
42703
+ * FetchResponse-shaped error that names the failure that exhausted the retries)
42704
+ * instead of scheduling yet another retry.
42705
+ */
42706
+ async retryOrCap(action, lastFailure, actionErrored, retryDelayInMs, actionDataChanged) {
42707
+ if (!draftQueueMaxRetryAttemptsGate.isOpen({ fallback: false })) {
42708
+ // Gate closed: preserve the pre-existing unbounded-retry behavior exactly.
42709
+ await actionErrored(action, true, retryDelayInMs, actionDataChanged);
42710
+ return;
42711
+ }
42712
+ const attempt = this.getUploadRetryCount(action) + 1;
42713
+ if (attempt >= MAX_RETRY_ATTEMPTS) {
42714
+ await actionErrored({
42715
+ ...action,
42716
+ error: buildMaxRetryError(lastFailure),
42717
+ status: DraftActionStatus.Error,
42718
+ }, false);
42719
+ return;
42720
+ }
42721
+ // Persist the incremented attempt count so it survives restarts. Forcing
42722
+ // actionDataChanged ensures the queue writes the updated metadata before the
42723
+ // action is rescheduled for retry.
42724
+ const retryingAction = {
42725
+ ...action,
42726
+ metadata: {
42727
+ ...action.metadata,
42728
+ [DRAFT_ACTION_RETRY_COUNT_METADATA_KEY]: String(attempt),
42729
+ },
42730
+ };
42731
+ await actionErrored(retryingAction, true, retryDelayInMs, true);
42732
+ }
42294
42733
  async handleActionEnqueued(action) {
42295
42734
  const impactedKeys = await this.recordService.setSideEffectsForActions([action]);
42296
42735
  await this.recordService.reapplyRecordSideEffects(impactedKeys);
@@ -42454,6 +42893,13 @@ class AbstractResourceRequestActionHandler {
42454
42893
  this.isActionOfType(sourceAction)) {
42455
42894
  targetAction.status = DraftActionStatus.Pending;
42456
42895
  targetAction.data = sourceAction.data;
42896
+ // Replacing an action's data re-queues it as a fresh upload, so the persisted
42897
+ // upload retry-attempt count must not carry over — otherwise a previously-
42898
+ // throttled action could immediately re-hit the cap on its first new attempt.
42899
+ // (Mirrors the same clear in mergeActions.)
42900
+ if (targetAction.metadata !== undefined) {
42901
+ delete targetAction.metadata[DRAFT_ACTION_RETRY_COUNT_METADATA_KEY];
42902
+ }
42457
42903
  return targetAction;
42458
42904
  }
42459
42905
  else {
@@ -42493,6 +42939,11 @@ class AbstractResourceRequestActionHandler {
42493
42939
  }
42494
42940
  // overlay metadata
42495
42941
  merged.metadata = { ...targetMetadata, ...sourceMetadata };
42942
+ // A merge folds new user data into the action and re-queues it as a fresh upload,
42943
+ // so the persisted upload retry-attempt count must not carry over — otherwise a
42944
+ // previously-throttled action could immediately re-hit the cap on its first new
42945
+ // attempt.
42946
+ delete merged.metadata[DRAFT_ACTION_RETRY_COUNT_METADATA_KEY];
42496
42947
  // put status back to pending to auto upload if queue is active and targed is at the head.
42497
42948
  merged.status = DraftActionStatus.Pending;
42498
42949
  return merged;
@@ -42527,8 +42978,36 @@ class AbstractResourceRequestActionHandler {
42527
42978
  isUiApiErrors(body) {
42528
42979
  return body !== undefined && isArray$3(body) && body.length > 0 && body[0].errorCode;
42529
42980
  }
42981
+ // Distinguishes a real, server-generated 400 from an edge/gateway-injected one.
42982
+ //
42983
+ // A 400 the origin (UiApi/APREST) actually produced carries a structured error body:
42984
+ // either a `UiApiError[]` (see isUiApiErrors) or an enhanced-error object tagged with
42985
+ // `enhancedErrorType` (e.g. 'RecordError' for field-validation failures). These describe
42986
+ // a request the server understood and deliberately rejected — retrying it unchanged would
42987
+ // just be rejected again, so the draft must be errored for the user to fix or discard.
42988
+ //
42989
+ // An edge/gateway-injected 400 (the duplicate-record incident, @W-23445154) has NO such
42990
+ // body — it's a tiny generic error page ({ message: 'Bad Request' }), a plain string, or
42991
+ // empty — and is returned on a request that may already have committed at the origin.
42992
+ // Only those should be retried with the same idempotency key so the server can dedupe.
42993
+ isServerGeneratedError(body) {
42994
+ if (this.isUiApiErrors(body)) {
42995
+ return true;
42996
+ }
42997
+ // enhancedErrorType is the origin's marker for a structured record error (field
42998
+ // validation, backdating collision, etc.). Guard the deref so a string/undefined
42999
+ // edge body doesn't throw.
43000
+ return (body !== null &&
43001
+ typeof body === 'object' &&
43002
+ body.enhancedErrorType !== undefined);
43003
+ }
42530
43004
  isBackdatingError(body, action) {
42531
- if (body.enhancedErrorType &&
43005
+ if (
43006
+ // An edge/gateway-injected 400 can carry an empty, string, or missing body; guard
43007
+ // the deref so classifying such a response never throws. @W-23445154
43008
+ body !== null &&
43009
+ typeof body === 'object' &&
43010
+ body.enhancedErrorType &&
42532
43011
  body.enhancedErrorType === 'RecordError' &&
42533
43012
  body.output &&
42534
43013
  body.output.errors &&
@@ -43103,231 +43582,6 @@ class AbstractQuickActionHandler extends AbstractResourceRequestActionHandler {
43103
43582
  }
43104
43583
  }
43105
43584
 
43106
- function attachObserversToAdapterRequestContext(observers, adapterRequestContext) {
43107
- if (adapterRequestContext === undefined) {
43108
- return { eventObservers: observers };
43109
- }
43110
- if (adapterRequestContext.eventObservers === undefined) {
43111
- return { ...adapterRequestContext, eventObservers: observers };
43112
- }
43113
- return {
43114
- ...adapterRequestContext,
43115
- eventObservers: adapterRequestContext.eventObservers.concat(observers),
43116
- };
43117
- }
43118
- /**
43119
- * Use this method to sanitize the unknown error object when
43120
- * we are unsure of the type of the error thrown
43121
- *
43122
- * @param err Unknown object to sanitize
43123
- * @returns an instance of error
43124
- */
43125
- function normalizeError(err) {
43126
- if (err instanceof Error) {
43127
- return err;
43128
- }
43129
- else if (typeof err === 'string') {
43130
- return new Error(err);
43131
- }
43132
- return new Error(stringify$5(err));
43133
- }
43134
-
43135
- const O11Y_NAMESPACE_LDS_MOBILE = 'lds-mobile';
43136
- // metrics
43137
- /** GraphQL */
43138
- const GRAPHQL_EVAL_ERROR = 'gql-eval-error';
43139
- const GRAPHQL_EVAL_DB_READ_DURATION = 'gql-eval-db-read-duration';
43140
- const GRAPHQL_EVAL_ROOT_QUERY_COUNT = 'gql-eval-root-query-count';
43141
- const GRAPHQL_EVAL_TOTAL_QUERY_COUNT = 'gql-eval-total-query-count';
43142
- const GRAPHQL_EVAL_MAX_CHILD_RELATIONSHIPS_COUNT = 'gql-eval-max-child-count';
43143
- const GRAPHQL_EVAL_QUERY_RECORD_COUNT = 'gql-eval-query-record-count';
43144
- const GRAPHQL_SNAPSHOT_REFRESH_UNDEFINED = 'gql-snapshot-refresh-undefined';
43145
- /** Draft Queue */
43146
- const DRAFT_QUEUE_STATE_STARTED = 'draft-queue-state-started';
43147
- const DRAFT_QUEUE_STATE_ERROR = 'draft-queue-state-error';
43148
- const DRAFT_QUEUE_STATE_WAITING = 'draft-queue-state-waiting';
43149
- const DRAFT_QUEUE_STATE_STOPPED = 'draft-queue-state-stopped';
43150
- const DRAFT_QUEUE_ACTION_ADDED = 'draft-queue-action-added';
43151
- const DRAFT_QUEUE_ACTION_UPLOADING = 'draft-queue-action-uploading';
43152
- const DRAFT_QUEUE_ACTION_COMPLETED = 'draft-queue-action-completed';
43153
- const DRAFT_QUEUE_ACTION_DELETED = 'draft-queue-action-deleted';
43154
- const DRAFT_QUEUE_ACTION_UPDATED = 'draft-queue-action-updated';
43155
- const DRAFT_QUEUE_ACTION_FAILED = 'draft-queue-action-failed';
43156
- const DRAFT_QUEUE_TOTAL_MERGE_ACTIONS_CALLS = 'draft-queue-total-mergeActions-calls';
43157
- /** Content Document */
43158
- const CREATE_CONTENT_DOCUMENT_AND_VERSION_TOTAL_SYNTHESIZE_CALLS = 'content-document-version-total-synthesize-calls';
43159
- const CREATE_CONTENT_DOCUMENT_AND_VERSION_DRAFT_SYNTHESIZE_ERROR = 'create-content-document-version-draft-synthesize-error';
43160
- /** Priming */
43161
- const PRIMING_TOTAL_SESSION_COUNT = 'priming-total-session-count';
43162
- const PRIMING_TOTAL_ERROR_COUNT = 'priming-total-error-count';
43163
- const PRIMING_TOTAL_PRIMED_COUNT = 'priming-total-primed-count';
43164
- const PRIMING_TOTAL_CONFLICT_COUNT = 'priming-total-conflict-count';
43165
- // logs
43166
- const GRAPHQL_QUERY_PARSE_ERROR = 'gql-query-parse-error';
43167
- const GRAPHQL_SQL_EVAL_PRECONDITION_ERROR = 'gql-sql-pre-eval-error';
43168
- const GRAPHQL_CREATE_SNAPSHOT_ERROR = 'gql-create-snapshot-error';
43169
- const DRAFT_AWARE_CREATE_CONTENT_DOCUMENT_AND_VERSION_ERROR = 'draft-aware-create-content-document-and-version-error';
43170
- /** Garbage Collection */
43171
- const GARBAGE_COLLECTION_AGGRESSIVE_TRIM_COUNT = 'garbage-collection-aggressive-trim-count';
43172
- const GARBAGE_COLLECTION_AGGRESSIVE_TRIM_RECORDS_TRIMMED = 'garbage-collection-aggressive-trim-records-trimmed';
43173
- const GARBAGE_COLLECTION_AGGRESSIVE_TRIM_TOTAL_RECORDS_BEFORE_TRIM = 'garbage-collection-aggressive-trim-total-records-before-trim';
43174
- const ldsMobileInstrumentation = getInstrumentation(O11Y_NAMESPACE_LDS_MOBILE);
43175
- const nimbusLogger = typeof __nimbus !== 'undefined' &&
43176
- __nimbus.plugins !== undefined &&
43177
- __nimbus.plugins.JSLoggerPlugin !== undefined
43178
- ? __nimbus.plugins.JSLoggerPlugin
43179
- : undefined;
43180
- function reportGraphqlQueryParseError(err) {
43181
- const error = normalizeError(err);
43182
- const errorCode = GRAPHQL_QUERY_PARSE_ERROR;
43183
- // Metric
43184
- reportGraphqlAdapterError(errorCode);
43185
- // Log
43186
- ldsMobileInstrumentation.error(error, errorCode);
43187
- }
43188
- function reportGraphqlSqlEvalPreconditionError(err) {
43189
- const error = normalizeError(err);
43190
- const errorCode = GRAPHQL_SQL_EVAL_PRECONDITION_ERROR;
43191
- // Metric
43192
- reportGraphqlAdapterError(errorCode);
43193
- // Log
43194
- ldsMobileInstrumentation.error(error, errorCode);
43195
- }
43196
- function reportGraphqlCreateSnapshotError(err) {
43197
- const error = normalizeError(err);
43198
- const errorCode = GRAPHQL_CREATE_SNAPSHOT_ERROR;
43199
- // Metric
43200
- reportGraphqlAdapterError(errorCode);
43201
- // Log
43202
- ldsMobileInstrumentation.error(error, errorCode);
43203
- }
43204
- function reportGraphQlEvalDbReadDuration(duration) {
43205
- ldsMobileInstrumentation.trackValue(GRAPHQL_EVAL_DB_READ_DURATION, duration);
43206
- }
43207
- function reportGraphqlAdapterError(errorCode) {
43208
- // Increment overall count with errorCode as tag
43209
- ldsMobileInstrumentation.incrementCounter(GRAPHQL_EVAL_ERROR, 1, true, { errorCode });
43210
- }
43211
- function reportGraphqlQueryInstrumentation(data) {
43212
- const queryBuckets = [1, 2, 3, 4, 5, 10, 20, 50, 100];
43213
- const recordBuckets = [
43214
- 1, 5, 10, 20, 50, 100, 1000, 2000, 5000, 10000, 50000, 100000, 1000000,
43215
- ];
43216
- ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_ROOT_QUERY_COUNT, data.rootQueryCount, queryBuckets);
43217
- ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_TOTAL_QUERY_COUNT, data.totalQueryCount, queryBuckets);
43218
- ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_MAX_CHILD_RELATIONSHIPS_COUNT, data.maxChildRelationships, queryBuckets);
43219
- ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_QUERY_RECORD_COUNT, data.requestedRecordCount, recordBuckets);
43220
- }
43221
- function incrementGraphQLRefreshUndfined() {
43222
- ldsMobileInstrumentation.incrementCounter(GRAPHQL_SNAPSHOT_REFRESH_UNDEFINED);
43223
- }
43224
- function reportDraftActionEvent(state, draftCount, message) {
43225
- if (nimbusLogger) {
43226
- nimbusLogger.logInfo(`Draft action event: ${state}, depth: ${draftCount}${message ? `, message: ${message}` : ''}`);
43227
- }
43228
- switch (state) {
43229
- case 'added':
43230
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_ADDED);
43231
- break;
43232
- case 'uploading':
43233
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_UPLOADING);
43234
- break;
43235
- case 'completed':
43236
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_COMPLETED);
43237
- break;
43238
- case 'deleted':
43239
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_DELETED);
43240
- break;
43241
- case 'failed':
43242
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_FAILED, 1, true);
43243
- break;
43244
- case 'updated':
43245
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_UPDATED);
43246
- break;
43247
- }
43248
- }
43249
- function reportDraftQueueState(state, draftCount) {
43250
- if (nimbusLogger) {
43251
- nimbusLogger.logInfo(`Draft state changed: ${state}, depth: ${draftCount}`);
43252
- }
43253
- switch (state) {
43254
- case 'started':
43255
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_STARTED);
43256
- break;
43257
- case 'error':
43258
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_ERROR, 1, true);
43259
- break;
43260
- case 'waiting':
43261
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_WAITING);
43262
- break;
43263
- case 'stopped':
43264
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_STOPPED);
43265
- break;
43266
- }
43267
- }
43268
- function reportDraftAwareContentDocumentVersionSynthesizeError(err) {
43269
- let error;
43270
- if (err.body !== undefined) {
43271
- error = err.body;
43272
- }
43273
- else {
43274
- error = normalizeError(err);
43275
- }
43276
- const errorCode = DRAFT_AWARE_CREATE_CONTENT_DOCUMENT_AND_VERSION_ERROR;
43277
- const errorType = error.errorType;
43278
- const tags = {
43279
- errorCode,
43280
- };
43281
- if (errorType !== undefined) {
43282
- tags.errorType = errorType;
43283
- }
43284
- // Metric
43285
- ldsMobileInstrumentation.incrementCounter(CREATE_CONTENT_DOCUMENT_AND_VERSION_DRAFT_SYNTHESIZE_ERROR, 1, true, tags);
43286
- // Log
43287
- ldsMobileInstrumentation.error(error, errorCode);
43288
- }
43289
- function reportDraftAwareContentVersionSynthesizeCalls(mimeType) {
43290
- ldsMobileInstrumentation.incrementCounter(CREATE_CONTENT_DOCUMENT_AND_VERSION_TOTAL_SYNTHESIZE_CALLS, 1, undefined, { mimeType });
43291
- }
43292
- /** Priming */
43293
- function reportPrimingSessionCreated() {
43294
- ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_SESSION_COUNT, 1, undefined, {});
43295
- }
43296
- function reportPrimingError(errorType, recordCount) {
43297
- ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_ERROR_COUNT, recordCount, undefined, {
43298
- errorType,
43299
- });
43300
- }
43301
- function reportPrimingSuccess(recordCount) {
43302
- ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_PRIMED_COUNT, recordCount, undefined);
43303
- }
43304
- function reportPrimingConflict(resolutionType, recordCount) {
43305
- ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_CONFLICT_COUNT, recordCount, undefined, {
43306
- resolutionType,
43307
- });
43308
- }
43309
- /** Network */
43310
- function reportChunkCandidateUrlLength(urlLength) {
43311
- const buckets = [8000, 10000, 12000, 14000, 16000];
43312
- ldsMobileInstrumentation.bucketValue('chunk-candidate-url-length-histogram', urlLength, buckets);
43313
- }
43314
- /** Garbage Collection */
43315
- function reportAggressiveTrimTriggered(trimCount, beforeTrimRecordCount, totalRecordsTrimmed) {
43316
- ldsMobileInstrumentation.trackValue(GARBAGE_COLLECTION_AGGRESSIVE_TRIM_COUNT, trimCount);
43317
- ldsMobileInstrumentation.trackValue(GARBAGE_COLLECTION_AGGRESSIVE_TRIM_TOTAL_RECORDS_BEFORE_TRIM, beforeTrimRecordCount);
43318
- ldsMobileInstrumentation.trackValue(GARBAGE_COLLECTION_AGGRESSIVE_TRIM_RECORDS_TRIMMED, totalRecordsTrimmed);
43319
- }
43320
- /** One Store Cache Purge */
43321
- const ONESTORE_CACHE_PURGING_RECORDS_PURGED = 'onestore-cache-purging-records-purged';
43322
- const ONESTORE_CACHE_PURGING_RECORDS_ERROR = 'onestore-cache-purging-records-error';
43323
- function reportOneStoreRecordsPurgedFromCache(recordsPurged) {
43324
- ldsMobileInstrumentation.trackValue(ONESTORE_CACHE_PURGING_RECORDS_PURGED, recordsPurged);
43325
- }
43326
- function reportOneStoreCachePurgingError(error) {
43327
- const errorMessage = normalizeError(error);
43328
- ldsMobileInstrumentation.error(errorMessage, ONESTORE_CACHE_PURGING_RECORDS_ERROR);
43329
- }
43330
-
43331
43585
  const QUICK_ACTION_HANDLER = 'QUICK_ACTION_HANDLER';
43332
43586
  class QuickActionExecutionRepresentationHandler extends AbstractQuickActionHandler {
43333
43587
  constructor(getLuvio, draftRecordService, draftQueue, networkAdapter, isDraftId, sideEffectService, objectInfoService, getRecord) {
@@ -48039,7 +48293,7 @@ function isRecordType(type) {
48039
48293
  return Boolean(interfaces.find((iface) => iface.name === 'Record'));
48040
48294
  }
48041
48295
 
48042
- var uiapiSchemaString = "# Auto-generated merged GraphQL schema\n# Generated at: 2025-10-14T15:00:19.876399281Z\n# Source files: ui-services-private/java/resources/graphql-schemas/analytics.graphqls, ui-services-private/java/resources/graphql-schemas/setup-listview.graphqls, ui-services-private/java/resources/graphql-schemas/setup.graphqls, ui-services-private/java/resources/graphql-schemas/uiapi.graphqls\n\n# ============================================================\n# Source: ui-services-private/java/resources/graphql-schemas/analytics.graphqls\n# ============================================================\ninput Analytics__AnalyticsFilter @team(name: \"TUA-Admin-Home-Search\") {\n Id: Setup__IdOperators\n MasterLabel: StringOperators\n DeveloperName: StringOperators\n NamespacePrefix: StringOperators\n AssetApiName: StringOperators\n DataConnectorType: StringOperators\n CreatedById: Setup__IdOperators\n LastModifiedById: Setup__IdOperators\n SemanticMetricId: Setup__IdOperators\n SemanticModelId: Setup__IdOperators\n LastModifiedDate: DateTimeOperators\n CreatedDate: DateTimeOperators\n AssetUsageType: PicklistOperators\n ActivePromotionRequestId: Setup__IdOperators\n SemanticModel: Analytics__SemanticModelFilter\n and: [Analytics__AnalyticsFilter]\n or: [Analytics__AnalyticsFilter]\n not: Analytics__AnalyticsFilter\n}\n\ninput Analytics__SemanticModelFilter @team(name: \"TUA-Admin-Home-Search\") {\n DeveloperName: StringOperators\n MasterLabel: StringOperators\n}\n\nenum Analytics__SortEnumType @team(name: \"TUA-Admin-Home-Search\") {\n ASC\n DESC\n}\n\ntype Analytics__SemanticSubMetricDefinitionConnection @team(name: \"TUA-Admin-Home-Search\") {\n edges: [Analytics__SemanticSubMetricDefinitionEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__SemanticSubMetricDefinitionEdge @team(name: \"TUA-Admin-Home-Search\") {\n node: Analytics__SemanticSubMetricDefinitionRepresentation\n cursor: String!\n}\n\ntype Analytics__DataspaceRepresentation @team(name: \"TUA-Admin-Home-Search\") {\n Id: ID!\n ApiName: String!\n MasterLabel: String\n DeveloperName: String\n}\n\ninterface Analytics__AnalyticsRepresentationInterface @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n AnalyticsWorkspaces(first: Int, after: String): Analytics__AnalyticsWorkspaceAssetConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n AssetApiName: String\n DloActiveStatus: Boolean\n}\n\ntype Analytics__AnalyticsBrowse @team(name: \"TUA-Admin-Home-Search\") {\n edges: [Analytics__AnalyticsEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\n# Empty enum is invalid GraphQL\n# enum AnalyticsAssetType @team(name: \"TUA-Admin-Home-Search\") @generic {\n# }\n\ntype Analytics__AnalyticsWorkspaceAssetConnection @team(name: \"TUA-Admin-Home-Search\") {\n edges: [Analytics__AnalyticsWorkspaceAssetEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__SemanticDefinition implements Analytics__AnalyticsRepresentationInterface @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n SemanticModelId: IDValue\n SemanticModel: Analytics__SemanticModel\n AnalyticsWorkspaces(first: Int, after: String): Analytics__AnalyticsWorkspaceAssetConnection\n SubMetrics(first: Int, after: String): Analytics__SemanticSubMetricDefinitionConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n AssetApiName: String\n DloActiveStatus: Boolean\n}\n\ntype Analytics__DominoTemplate implements Analytics__AnalyticsRepresentationInterface @team(name: \"TUA Intel MarketPlace\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n TemplateStatus: StringValue\n TemplateType: StringValue\n AnalyticsWorkspaces(first: Int, after: String): Analytics__AnalyticsWorkspaceAssetConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n AssetApiName: String\n DloActiveStatus: Boolean\n}\n\ntype Analytics__AnalyticsEdge @team(name: \"TUA-Admin-Home-Search\") {\n node: Analytics__AnalyticsRepresentationInterface\n cursor: String!\n}\n\ntype Analytics__AnalyticsWorkspace @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n}\n\ntype Analytics__SemanticSubMetricDefinitionRepresentation @team(name: \"TUA-Admin-Home-Search\") {\n Id: ID!\n ApiName: String!\n SemanticModelId: IDValue\n SemanticMetricId: IDValue\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n}\n\ntype Analytics__AnalyticsWorkspaceAssetEdge @team(name: \"TUA-Admin-Home-Search\") {\n node: Analytics__AnalyticsWorkspaceAsset\n cursor: String!\n}\n\ninput Analytics__OrderByInput @team(name: \"TUA-Admin-Home-Search\") {\n order: Analytics__SortEnumType\n}\n\ntype Analytics__AnalyticsRepresentation implements Analytics__AnalyticsRepresentationInterface @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n RecordOperations: [String]\n AnalyticsWorkspaces(first: Int, after: String): Analytics__AnalyticsWorkspaceAssetConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n AssetApiName: String\n DloActiveStatus: Boolean\n}\n\ntype Analytics__SemanticModelRelatedModelConnection @team(name: \"TUA-Admin-Home-Search\") {\n edges: [Analytics__SemanticModelRelatedModelEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__SemanticModelRelatedModelRepresentation @team(name: \"TUA-Admin-Home-Search\") {\n Id: ID!\n ApiName: String!\n SemanticModelId: IDValue\n RelatedSemanticModel: Analytics__SemanticModel\n}\n\ntype Analytics__SemanticModelRelatedModelEdge @team(name: \"TUA-Admin-Home-Search\") {\n node: Analytics__SemanticModelRelatedModelRepresentation\n cursor: String!\n}\n\ntype Analytics__SemanticModel implements Analytics__AnalyticsRepresentationInterface @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n AnalyticsWorkspaces(first: Int, after: String): Analytics__AnalyticsWorkspaceAssetConnection\n NamespacePrefix: StringValue\n RelatedModel(first: Int, after: String): Analytics__SemanticModelRelatedModelConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n AssetApiName: String\n DloActiveStatus: Boolean\n}\n\n# assetTypes: AnalyticsAssetType - empty enum is invalid GraphQL so replace with String\ntype Analytics__Analytics @team(name: \"TUA-Admin-Home-Search\") {\n browse(where: Analytics__AnalyticsFilter, assetTypes: [String], orderBy: Analytics__AnalyticsOrderBy, first: Int, orgId: ID, after: String): Analytics__AnalyticsBrowse! @fieldCategory\n}\n\ntype Analytics__AnalyticsWorkspaceAsset @team(name: \"TUA-Admin-Home-Search\") {\n AnalyticsWorkspace: Analytics__AnalyticsWorkspace\n AssetUsageType: PicklistValue\n ActivePromotionRequestId: IDValue\n MetadataSourceType: PicklistValue\n}\n\ninput Analytics__AnalyticsOrderBy @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: Analytics__OrderByInput\n Id: Analytics__OrderByInput\n ApiName: Analytics__OrderByInput\n LastModifiedById: Analytics__OrderByInput\n CreatedById: Analytics__OrderByInput\n LastModifiedDate: Analytics__OrderByInput\n CreatedDate: Analytics__OrderByInput\n}\n\ntype Analytics__MktDataConnector implements Analytics__AnalyticsRepresentationInterface @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n AnalyticsWorkspaces(first: Int, after: String): Analytics__AnalyticsWorkspaceAssetConnection\n NamespacePrefix: StringValue\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n DataConnectorType: StringValue\n AssetApiName: String\n DloActiveStatus: Boolean\n}\n\n# ============================================================\n# Source: ui-services-private/java/resources/graphql-schemas/setup-listview.graphqls\n# ============================================================\ninput Setup__ListOrderInput {\n apiName: String!\n order: ResultsOrder\n}\n\ntype Setup__ListOrder {\n apiName: String!\n order: ResultsOrder\n label: String\n}\n\ntype Setup__ListViewRowConnection {\n edges: [Setup__ListViewRowEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ntype Setup__ListView {\n listViewType: String!\n label: String\n displayColumns: [Setup__ListColumn!]!\n filters: [Setup__ListFilter!]\n filterLogic: String\n orderedByInfo: [Setup__ListOrder!]!\n searchable: Boolean!\n rows(first: Int, after: String, upperBound: Int, orderBy: Setup__ListOrderInput, searchTerm: String): Setup__ListViewRowConnection\n}\n\nenum Setup__ListFilterOperator {\n EQUALS\n NOT_EQUAL\n LESS_THAN\n GREATER_THAN\n LESS_OR_EQUAL\n GREATER_OR_EQUAL\n CONTAINS\n NOT_CONTAIN\n STARTS_WITH\n INCLUDES\n EXCLUDES\n WITHIN\n}\n\ntype Setup__ListFilter {\n apiName: String!\n operator: Setup__ListFilterOperator!\n operand: [String!]!\n label: String\n}\n\ntype Setup__ListColumn {\n apiName: String!\n label: String!\n type: DataType!\n displayable: Boolean!\n filterable: Boolean!\n defaultOperator: Setup__ListFilterOperator\n allowedOperators: [Setup__ListFilterOperator!]\n sortable: Boolean\n navigable: Boolean\n}\n\ntype Setup__ListScalarField {\n apiName: String!\n value: String\n dataType: DataType\n displayValue: String\n format: String\n label: String\n lookupRecordId: String\n lookupObjectApiName: String\n}\n\ntype Setup__ListViewRow {\n id: String\n columns(apiNames: [String!]): [Setup__ListScalarField]!\n}\n\ntype Setup__ListViewRowEdge {\n cursor: String!\n node: Setup__ListViewRow\n}\n\ntype Setup__ListViewObjectInfo {\n columns(apiNames: [String!], displayable: Boolean, filterable: Boolean) : [Setup__ListColumn!]!\n}\n\ninput Setup__ListFilterInput {\n apiName: String!\n operator: Setup__ListFilterOperator!\n operand: [String!]!\n}\n\nextend type Setup__Setup {\n ListView(listViewType: String!, label: String, displayColumns: [String!], filters: [Setup__ListFilterInput!], filterLogic: String): Setup__ListView!\n ListViewObjectInfo(listViewType: String!): Setup__ListViewObjectInfo!\n}\n\n# ============================================================\n# Source: ui-services-private/java/resources/graphql-schemas/setup.graphqls\n# ============================================================\n# scope should be RecordScope, but it is an empty enum\ntype Setup__SetupQueryAggregate {\n recordQueryAggregate(first: Int, after: String, where: Setup__SetupFilter, orderBy: Setup__SetupAggregateOrderBy, scope: String, groupBy: Setup__SetupGroupBy, upperBound: Int, includeDeleted: Boolean): Setup__SetupAggregateConnection @fieldCategory\n}\n\nunion Setup__SetupPolymorphicParentRelationship @generic = Setup__EntityRepresentation\n\ninput Setup__SetupPolymorphicParentRelationshipRecordOrderBy @generic {\n Setup__SetupOrderBy: Setup__SetupOrderBy @fieldCategory\n}\n\ninput Setup__IdOperators {\n eq: ID\n ne: ID\n lt: ID\n gt: ID\n lte: ID\n gte: ID\n in: [ID]\n nin: [ID]\n inq: Setup__JoinInput\n ninq: Setup__JoinInput\n}\n\ninput Setup__JoinInput {\n Record: Setup__SetupFilter @fieldCategory\n ApiName: String\n}\n\ntype Setup__SetupAggregateConnection @generic {\n edges: [Setup__SetupAggregateEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ninput Setup__SetupAggregateOrderBy @generic {\n orderableNumberField: AggregateOrderByNumberClause @fieldCategory\n orderableStringField: AggregateOrderByStringClause @fieldCategory\n orderableField: NoFunctionAggregateOrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableParentRelationship: Setup__SetupAggregateOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: Setup__SetupPolymorphicParentRelationshipOrderBy @fieldCategory\n}\n\ntype Setup__SetupConnection @generic {\n edges: [Setup__SetupEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n pageResultCount: Int!\n}\n\ntype Setup__SetupAggregateEdge @generic {\n node: Setup__SetupRecordResult\n cursor: String!\n}\n\ninput Setup__SetupPolymorphicParentRelationshipRecordFilter @generic {\n Setup__SetupFilter: Setup__SetupFilter @fieldCategory\n}\n\ntype Setup__SetupRecordResult @generic {\n aggregate: Setup__SetupRecordAggregate\n}\n\ntype Setup__SetupRecordAggregate @generic {\n ApiName: String!\n BooleanAggregate: BooleanAggregate @fieldCategory\n CurrencyAggregate: CurrencyAggregate @fieldCategory\n DateAggregate: DateAggregate @fieldCategory\n DoubleAggregate: DoubleAggregate @fieldCategory\n EmailAggregate: EmailAggregate @fieldCategory\n IDAggregate: IDAggregate @fieldCategory\n IntAggregate: IntAggregate @fieldCategory\n LatitudeAggregate: LatitudeAggregate @fieldCategory\n LongitudeAggregate: LongitudeAggregate @fieldCategory\n LongAggregate: LongAggregate @fieldCategory\n PercentAggregate: PercentAggregate @fieldCategory\n PhoneNumberAggregate: PhoneNumberAggregate @fieldCategory\n PicklistAggregate: PicklistAggregate @fieldCategory\n StringAggregate: StringAggregate @fieldCategory\n TextAreaAggregate: TextAreaAggregate @fieldCategory\n TimeAggregate: TimeAggregate @fieldCategory\n UrlAggregate: UrlAggregate @fieldCategory\n parentRelationship: Setup__SetupRecordAggregate @fieldCategory\n polymorphicParentRelationship: Setup__SetupPolymorphicAggregateParentRelationship @fieldCategory\n}\n\ninput Setup__SetupOrderBy @generic {\n orderableField: OrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableParentRelationship: Setup__SetupOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: Setup__SetupPolymorphicParentRelationshipRecordOrderBy @fieldCategory\n}\n\ninput Setup__SetupPolymorphicParentRelationshipOrderBy @generic {\n Setup__SetupAggregateOrderBy: Setup__SetupAggregateOrderBy @fieldCategory\n}\n\ntype Setup__SetupEdge @generic {\n node: Setup__EntityRepresentation\n cursor: String!\n}\n\n # scope should be RecordScope, but it is an empty enum\ntype Setup__SetupQuery {\n recordQuery(first: Int, after: String, where: Setup__SetupFilter, orderBy: Setup__SetupOrderBy, scope: String, upperBound: Int, includeDeleted: Boolean, updateMRU: Boolean): Setup__SetupConnection @fieldCategory\n}\n\ntype Setup__EntityRepresentation @generic {\n Id: ID!\n ApiName: String!\n Entity__fields(type: SObject__FieldType): [SObject__Field]! @ignoreRule(rules:[{ rule: \"FieldCamelOrPascalCaseRule\" teamName: \"UI Experience API\" justification: \"SObject__ prefix added to prevent name collisions.\" }])\n IntValue: IntValue @fieldCategory\n StringValue: StringValue @fieldCategory\n BooleanValue: BooleanValue @fieldCategory\n IDValue: IDValue @fieldCategory\n DateTimeValue: DateTimeValue @fieldCategory\n TimeValue: TimeValue @fieldCategory\n DateValue: DateValue @fieldCategory\n TextAreaValue: TextAreaValue @fieldCategory\n LongTextAreaValue: LongTextAreaValue @fieldCategory\n RichTextAreaValue: RichTextAreaValue @fieldCategory\n PhoneNumberValue: PhoneNumberValue @fieldCategory\n EmailValue: EmailValue @fieldCategory\n UrlValue: UrlValue @fieldCategory\n EncryptedStringValue: EncryptedStringValue @fieldCategory\n CurrencyValue: CurrencyValue @fieldCategory\n LongitudeValue: LongitudeValue @fieldCategory\n LatitudeValue: LatitudeValue @fieldCategory\n PicklistValue: PicklistValue @fieldCategory\n MultiPicklistValue: MultiPicklistValue @fieldCategory\n LongValue: LongValue @fieldCategory\n DoubleValue: DoubleValue @fieldCategory\n PercentValue: PercentValue @fieldCategory\n Base64Value: Base64Value @fieldCategory\n JSONValue: JSONValue @fieldCategory\n AnyType: AnyType @fieldCategory\n parentRelationship: Setup__EntityRepresentation @fieldCategory\n polymorphicParentRelationship: Setup__SetupPolymorphicParentRelationship @fieldCategory\n childRelationship(first: Int, after: String, where: Setup__SetupFilter, orderBy: Setup__SetupOrderBy, upperBound: Int): Setup__SetupConnection @fieldCategory\n CompoundField: CompoundField @fieldCategory\n}\n\ninput Setup__SetupFilter @generic {\n and: [Setup__SetupFilter]\n or: [Setup__SetupFilter]\n not: Setup__SetupFilter\n parentRelationshipRecordFilter: Setup__SetupFilter @fieldCategory\n polymorphicParentRelationshipRecordFilter: Setup__SetupPolymorphicParentRelationshipRecordFilter @fieldCategory\n IntegerOperator: IntegerOperators @fieldCategory\n LongOperator: LongOperators @fieldCategory\n StringOperator: StringOperators @fieldCategory\n DoubleOperator: DoubleOperators @fieldCategory\n PercentOperator: PercentOperators @fieldCategory\n LongitudeOperator: LongitudeOperators @fieldCategory\n LatitudeOperator: LatitudeOperators @fieldCategory\n EmailOperator: EmailOperators @fieldCategory\n TextAreaOperator: TextAreaOperators @fieldCategory\n LongTextAreaOperator: LongTextAreaOperators @fieldCategory\n URLOperator: URLOperators @fieldCategory\n PhoneNumberOperator: PhoneNumberOperators @fieldCategory\n BooleanOperator: BooleanOperators @fieldCategory\n Setup__IdOperator: Setup__IdOperators @fieldCategory\n CurrencyOperator: CurrencyOperators @fieldCategory\n TimeOperator: TimeOperators @fieldCategory\n DateOperator: DateOperators @fieldCategory\n DateTimeOperator: DateTimeOperators @fieldCategory\n PicklistOperator: PicklistOperators @fieldCategory\n MultiPicklistOperator: MultiPicklistOperators @fieldCategory\n GeolocationOperator: GeolocationOperators @fieldCategory\n}\n\ninput Setup__SetupGroupBy @generic {\n groupableField: GroupByClause @fieldCategory\n groupableDateField: GroupByDateFunction @fieldCategory\n groupableParentRelationship: Setup__SetupGroupBy @fieldCategory\n groupablePolymorphicParentRelationship: Setup__SetupPolymorphicParentRelationshipGroupBy @fieldCategory\n type: GroupByType = GROUP_BY\n}\n\nunion Setup__SetupPolymorphicAggregateParentRelationship @generic = Setup__SetupRecordAggregate\n\ntype Setup__Setup {\n query: Setup__SetupQuery!\n aggregate: Setup__SetupQueryAggregate!\n objectInfos(apiNames: [String!], locale: String, objectInfoInputs: [ObjectInfoInput!]): [ObjectInfo]\n}\n\ninput Setup__SetupPolymorphicParentRelationshipGroupBy @generic {\n Setup__SetupGroupBy: Setup__SetupGroupBy @fieldCategory\n}\n\n\n# ============================================================\n# Source: ui-services-private/java/resources/graphql-schemas/uiapi.graphqls\n# ============================================================\nscalar BigDecimal\nscalar Byte\nscalar Char\nscalar BigInteger\nscalar Short\nscalar String\nscalar Currency\nscalar Longitude\nscalar Float\nscalar PhoneNumber\nscalar Email\nscalar TextArea\nscalar Latitude\nscalar RichTextArea\nscalar EncryptedString\nscalar Long\nscalar JSON\nscalar Time\nscalar Percent\nscalar LongTextArea\nscalar DateTime\nscalar ID\nscalar Boolean\nscalar MultiPicklist\nscalar Base64\nscalar Url\nscalar Picklist\nscalar Double\nscalar Int\nscalar IdOrRef\nscalar Date\n\ntype PercentAggregate implements FieldValue {\n value: Percent\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n max: PercentValue\n min: PercentValue\n sum: PercentValue\n}\n\ntype StringAggregate implements FieldValue {\n value: String\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n label: String\n max: StringValue\n min: StringValue\n}\n\ntype Query {\n uiapi: UIAPI!\n setup: Setup__Setup! @fieldCategory\n analytics: Analytics__Analytics! @fieldCategory\n}\n\ninput EmailOperators {\n eq: Email\n ne: Email\n like: Email\n lt: Email\n gt: Email\n lte: Email\n gte: Email\n in: [Email]\n nin: [Email]\n}\n\ninput DoubleOperators {\n eq: Double\n ne: Double\n lt: Double\n gt: Double\n lte: Double\n gte: Double\n in: [Double]\n nin: [Double]\n}\n\ntype DateOnlyAggregation {\n value: Date\n format: String\n}\n\ntype DateAggregate implements FieldValue {\n value: Date\n displayValue: String\n calendarMonth: DateFunctionAggregation\n calendarQuarter: DateFunctionAggregation\n calendarYear: DateFunctionAggregation\n count: LongValue\n countDistinct: LongValue\n dayInMonth: DateFunctionAggregation\n dayInWeek: DateFunctionAggregation\n dayInYear: DateFunctionAggregation\n fiscalMonth: DateFunctionAggregation\n fiscalQuarter: DateFunctionAggregation\n fiscalYear: DateFunctionAggregation\n format: String\n grouping: IntValue\n max: DateValue\n min: DateValue\n weekInMonth: DateFunctionAggregation\n weekInYear: DateFunctionAggregation\n}\n\nenum GroupByFunction {\n DAY_IN_WEEK\n DAY_IN_MONTH\n DAY_IN_YEAR\n WEEK_IN_MONTH\n WEEK_IN_YEAR\n CALENDAR_MONTH\n CALENDAR_QUARTER\n CALENDAR_YEAR\n FISCAL_MONTH\n FISCAL_QUARTER\n FISCAL_YEAR\n DAY_ONLY\n HOUR_IN_DAY\n}\n\ntype RecordTypeInfo {\n available: Boolean!\n defaultRecordTypeMapping: Boolean!\n master: Boolean!\n name: String\n recordTypeId: ID\n}\n\ninput UIAPIMutationsInput {\n \"Determines whether or not all the operations should be rolled back in the event one or more operations fail.\"\n allOrNone: Boolean = true\n}\n\ntype ReferenceToInfo {\n ApiName: String!\n nameFields: [String]!\n objectInfo: ObjectInfo\n}\n\ninterface FieldValue {\n displayValue: String\n}\n\ntype LongitudeValue implements FieldValue {\n value: Longitude\n displayValue: String\n}\n\ntype IntValue implements FieldValue {\n value: Int\n displayValue: String\n format: String\n}\n\ntype UrlValue implements FieldValue {\n value: Url\n displayValue: String\n}\n\ntype LongAggregate implements FieldValue {\n value: Long\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n grouping: IntValue\n max: LongValue\n min: LongValue\n sum: LongValue\n}\n\ninput TimeOperators {\n eq: Time\n ne: Time\n lt: Time\n gt: Time\n lte: Time\n gte: Time\n in: [Time]\n nin: [Time]\n}\n\ntype PicklistValue implements FieldValue {\n value: Picklist\n displayValue: String\n label: String\n}\n\ntype RelatedListInfo @team(name: \"Lists Platform\") {\n childApiName: String!\n relatedListName: String!\n label: String!\n displayColumns: [ListColumn!]!\n orderedByInfo: [ListOrder!]!\n parentApiName: String!\n fieldApiName: String!\n}\n\ninput StringOperators {\n eq: String\n ne: String\n like: String\n lt: String\n gt: String\n lte: String\n gte: String\n in: [String]\n nin: [String]\n}\n\ntype UIAPI {\n query: RecordQuery!\n aggregate: RecordQueryAggregate!\n objectInfos(apiNames: [String!], locale: String, objectInfoInputs: [ObjectInfoInput!]): [ObjectInfo]\n relatedListByName(parentApiName: String!, relatedListName: String!): RelatedListInfo\n}\n\n\"Input for ObjectInfo and PickValues\"\ninput ObjectInfoInput {\n apiName: String!\n recordTypeIDs: [ID!]\n fieldNames: [String!]\n}\n\ninput MultiPicklistOperators {\n eq: MultiPicklist\n ne: MultiPicklist\n includes: [MultiPicklist]\n excludes: [MultiPicklist]\n}\n\ntype DateTimeAggregate implements FieldValue {\n value: DateTime\n displayValue: String\n calendarMonth: DateFunctionAggregation\n calendarQuarter: DateFunctionAggregation\n calendarYear: DateFunctionAggregation\n count: LongValue\n countDistinct: LongValue\n dayInMonth: DateFunctionAggregation\n dayInWeek: DateFunctionAggregation\n dayInYear: DateFunctionAggregation\n dayOnly: DateOnlyAggregation\n fiscalMonth: DateFunctionAggregation\n fiscalQuarter: DateFunctionAggregation\n fiscalYear: DateFunctionAggregation\n format: String\n hourInDay: DateFunctionAggregation\n max: DateTimeValue\n min: DateTimeValue\n weekInMonth: DateFunctionAggregation\n weekInYear: DateFunctionAggregation\n}\n\ntype EmailAggregate implements FieldValue {\n value: Email\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: EmailValue\n min: EmailValue\n}\n\ninput GroupByDateFunction {\n function: GroupByFunction\n}\n\ntype RichTextAreaValue implements FieldValue {\n value: RichTextArea\n displayValue: String\n label: String\n}\n\ninput DatePrimitiveOperators {\n eq: Date\n ne: Date\n lt: Date\n gt: Date\n lte: Date\n gte: Date\n in: [Date]\n nin: [Date]\n}\n\ntype TimeAggregate implements FieldValue {\n value: Time\n displayValue: String\n format: String\n hourInDay: DateFunctionAggregation\n}\n\ninput DistanceInput {\n latitude: Latitude!\n longitude: Longitude!\n}\n\nunion PolymorphicParentRelationship @generic = RecordRepresentation\n\nenum AggregateOrderByNumberFunction {\n AVG\n COUNT\n COUNT_DISTINCT\n MAX\n MIN\n SUM\n}\n\ntype LongTextAreaValue implements FieldValue {\n value: LongTextArea\n displayValue: String\n label: String\n}\n\ninput OrderByClause {\n order: ResultOrder\n nulls: NullOrder\n}\n\ntype SObject__Field {\n name: String!\n value: String\n}\n\ntype RecordAggregateConnection @generic {\n edges: [RecordAggregateEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ntype LongitudeAggregate implements FieldValue {\n value: Longitude\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n max: LongitudeValue\n min: LongitudeValue\n sum: DoubleValue\n}\n\ntype DateValue implements FieldValue {\n value: Date\n displayValue: String\n format: String\n}\n\ninput URLOperators {\n eq: Url\n ne: Url\n like: Url\n lt: Url\n gt: Url\n lte: Url\n gte: Url\n in: [Url]\n nin: [Url]\n}\n\ninput LongOperators {\n eq: Long\n ne: Long\n lt: Long\n gt: Long\n lte: Long\n gte: Long\n in: [Long]\n nin: [Long]\n}\n\nenum DataType {\n STRING\n TEXTAREA\n PHONE\n EMAIL\n URL\n ENCRYPTEDSTRING\n BOOLEAN\n CURRENCY\n INT\n LONG\n DOUBLE\n PERCENT\n DATETIME\n TIME\n DATE\n REFERENCE\n PICKLIST\n MULTIPICKLIST\n ADDRESS\n LOCATION\n BASE64\n COMPLEXVALUE\n COMBOBOX\n JSON\n JUNCTIONIDLIST\n ANYTYPE\n}\n\ntype DoubleAggregate implements FieldValue {\n value: Double\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n max: DoubleValue\n min: DoubleValue\n sum: DoubleValue\n}\n\ninput DateOperators {\n eq: DateInput\n ne: DateInput\n lt: DateInput\n gt: DateInput\n lte: DateInput\n gte: DateInput\n in: [DateInput]\n nin: [DateInput]\n DAY_IN_WEEK: DateFunctionInput\n DAY_IN_MONTH: DateFunctionInput\n DAY_IN_YEAR: DateFunctionInput\n WEEK_IN_MONTH: DateFunctionInput\n WEEK_IN_YEAR: DateFunctionInput\n CALENDAR_MONTH: DateFunctionInput\n CALENDAR_QUARTER: DateFunctionInput\n CALENDAR_YEAR: DateFunctionInput\n FISCAL_MONTH: DateFunctionInput\n FISCAL_QUARTER: DateFunctionInput\n FISCAL_YEAR: DateFunctionInput\n}\n\ninput GeolocationInput {\n latitude: Latitude!\n longitude: Longitude!\n radius: Float!\n unit: Unit!\n}\n\ninput JoinInput {\n Record: RecordFilter @fieldCategory\n ApiName: String\n}\n\ntype RecordUpdatePayload @generic {\n Record: RecordRepresentation\n success: Boolean @deprecated\n}\n\ninput PercentOperators {\n eq: Percent\n ne: Percent\n lt: Percent\n gt: Percent\n lte: Percent\n gte: Percent\n in: [Percent]\n nin: [Percent]\n}\n\ntype DoubleValue implements FieldValue {\n value: Double\n displayValue: String\n format: String\n}\n\ntype IDAggregate implements FieldValue {\n value: ID\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: IDValue\n min: IDValue\n}\n\ninput RecordCreateInput @generic {\n record: RecordCreateRepresentation! @fieldCategory\n}\n\ninput AggregateOrderByStringClause {\n function: AggregateOrderByStringFunction\n order: ResultsOrder\n nulls: NullsOrder\n}\n\n\"The return value for the mutation to delete a Record\"\ntype RecordDeletePayload {\n \"The ID of the deleted Record\"\n Id: ID\n}\n\nenum DateLiteral {\n YESTERDAY\n TODAY\n TOMORROW\n LAST_WEEK\n THIS_WEEK\n NEXT_WEEK\n LAST_MONTH\n THIS_MONTH\n NEXT_MONTH\n LAST_90_DAYS\n NEXT_90_DAYS\n LAST_QUARTER\n THIS_QUARTER\n NEXT_QUARTER\n LAST_FISCAL_QUARTER\n THIS_FISCAL_QUARTER\n NEXT_FISCAL_QUARTER\n LAST_YEAR\n THIS_YEAR\n NEXT_YEAR\n LAST_FISCAL_YEAR\n THIS_FISCAL_YEAR\n NEXT_FISCAL_YEAR\n}\n\ntype RecordRepresentation implements Record @generic {\n Id: ID!\n ApiName: String!\n WeakEtag: Long!\n DisplayValue: String\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n SystemModstamp: DateTimeValue\n RecordTypeId(fallback: Boolean): IDValue\n SetupUserSpecialField: BooleanValue @fieldCategory\n IntValue: IntValue @fieldCategory\n StringValue: StringValue @fieldCategory\n BooleanValue: BooleanValue @fieldCategory\n IDValue: IDValue @fieldCategory\n DateTimeValue: DateTimeValue @fieldCategory\n TimeValue: TimeValue @fieldCategory\n DateValue: DateValue @fieldCategory\n TextAreaValue: TextAreaValue @fieldCategory\n LongTextAreaValue: LongTextAreaValue @fieldCategory\n RichTextAreaValue: RichTextAreaValue @fieldCategory\n PhoneNumberValue: PhoneNumberValue @fieldCategory\n EmailValue: EmailValue @fieldCategory\n UrlValue: UrlValue @fieldCategory\n EncryptedStringValue: EncryptedStringValue @fieldCategory\n CurrencyValue: CurrencyValue @fieldCategory\n LongitudeValue: LongitudeValue @fieldCategory\n LatitudeValue: LatitudeValue @fieldCategory\n PicklistValue: PicklistValue @fieldCategory\n MultiPicklistValue: MultiPicklistValue @fieldCategory\n LongValue: LongValue @fieldCategory\n DoubleValue: DoubleValue @fieldCategory\n PercentValue: PercentValue @fieldCategory\n Base64Value: Base64Value @fieldCategory\n JSONValue: JSONValue @fieldCategory\n AnyType: AnyType @fieldCategory\n parentRelationship: RecordRepresentation @fieldCategory\n polymorphicParentRelationship: PolymorphicParentRelationship @fieldCategory\n childRelationship(first: Int, after: String, where: RecordFilter, orderBy: RecordOrderBy, upperBound: Int): RecordConnection @fieldCategory\n CompoundField: CompoundField @fieldCategory\n}\n\ninput OrderByGeolocationClause {\n distance: DistanceInput\n order: ResultOrder\n nulls: NullOrder\n}\n\ntype TextAreaAggregate implements FieldValue {\n value: TextArea\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n label: String\n max: TextAreaValue\n min: TextAreaValue\n}\n\nenum GroupByType {\n GROUP_BY\n ROLLUP\n CUBE\n}\n\nenum ResultsOrder {\n ASC\n DESC\n}\n\ntype PicklistAggregate implements FieldValue {\n value: Picklist\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n label: String\n max: PicklistValue\n min: PicklistValue\n}\n\ninput RecordUpdateRepresentation @generic {\n Int: Int @fieldCategory\n String: String @fieldCategory\n Boolean: Boolean @fieldCategory\n ID: IdOrRef @fieldCategory\n DateTime: DateTime @fieldCategory\n Time: Time @fieldCategory\n Date: Date @fieldCategory\n TextArea: TextArea @fieldCategory\n LongTextArea: LongTextArea @fieldCategory\n RichTextArea: RichTextArea @fieldCategory\n PhoneNumber: PhoneNumber @fieldCategory\n Email: Email @fieldCategory\n Url: Url @fieldCategory\n EncryptedString: EncryptedString @fieldCategory\n Currency: Currency @fieldCategory\n Longitude: Longitude @fieldCategory\n Latitude: Latitude @fieldCategory\n Picklist: Picklist @fieldCategory\n MultiPicklist: MultiPicklist @fieldCategory\n Long: Long @fieldCategory\n Double: Double @fieldCategory\n Percent: Percent @fieldCategory\n Base64: Base64 @fieldCategory\n JSON: JSON @fieldCategory\n}\n\ntype DateTimeValue implements FieldValue {\n value: DateTime\n displayValue: String\n format: String\n}\n\n\"Input to the mutation to delete a Record\"\ninput RecordDeleteInput {\n \"The ID of the Record to delete\"\n Id: IdOrRef!\n}\n\ntype ListOrder @team(name: \"Lists Platform\") {\n fieldApiName: String!\n sortDirection: ResultOrder\n}\n\nenum AggregateOrderByStringFunction {\n COUNT\n COUNT_DISTINCT\n MAX\n MIN\n}\n\ntype LongValue implements FieldValue {\n value: Long\n displayValue: String\n format: String\n}\n\ntype DependentField {\n controllingField: String!\n dependentFields: [String]!\n}\n\ntype PercentValue implements FieldValue {\n value: Percent\n displayValue: String\n format: String\n}\n\ninput NoFunctionAggregateOrderByClause {\n order: ResultsOrder\n nulls: NullsOrder\n}\n\ntype RecordConnection @generic {\n edges: [RecordEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n pageResultCount: Int!\n}\n\ntype FilteredLookupInfo {\n controllingFields: [String]!\n dependent: Boolean!\n optionalFilter: Boolean!\n}\n\ninput PhoneNumberOperators {\n eq: PhoneNumber\n ne: PhoneNumber\n like: PhoneNumber\n lt: PhoneNumber\n gt: PhoneNumber\n lte: PhoneNumber\n gte: PhoneNumber\n in: [PhoneNumber]\n nin: [PhoneNumber]\n}\n\ntype ObjectInfo {\n ApiName: String!\n childRelationships: [ChildRelationship]!\n createable: Boolean!\n custom: Boolean!\n defaultRecordTypeId: ID\n deletable: Boolean!\n dependentFields: [DependentField]!\n feedEnabled: Boolean!\n fields: [Field]!\n keyPrefix: String\n label: String\n labelPlural: String\n layoutable: Boolean!\n mruEnabled: Boolean!\n nameFields: [String]!\n queryable: Boolean!\n recordTypeInfos: [RecordTypeInfo]!\n searchable: Boolean!\n themeInfo: ThemeInfo\n updateable: Boolean!\n locale: String\n}\n\ninput LongitudeOperators {\n eq: Longitude\n ne: Longitude\n lt: Longitude\n gt: Longitude\n lte: Longitude\n gte: Longitude\n in: [Longitude]\n nin: [Longitude]\n}\n\ninterface Field {\n ApiName: String!\n calculated: Boolean!\n compound: Boolean!\n compoundComponentName: String\n compoundFieldName: String\n controllerName: String\n controllingFields: [String]!\n createable: Boolean!\n custom: Boolean!\n dataType: DataType\n extraTypeInfo: FieldExtraTypeInfo\n filterable: Boolean!\n filteredLookupInfo: FilteredLookupInfo\n highScaleNumber: Boolean!\n htmlFormatted: Boolean!\n inlineHelpText: String\n label: String\n nameField: Boolean!\n polymorphicForeignKey: Boolean!\n precision: Int\n reference: Boolean!\n referenceTargetField: String\n referenceToInfos: [ReferenceToInfo]!\n relationshipName: String\n required: Boolean!\n scale: Int\n searchPrefilterable: Boolean\n sortable: Boolean!\n updateable: Boolean!\n}\n\ntype StandardField implements Field {\n ApiName: String!\n calculated: Boolean!\n compound: Boolean!\n compoundComponentName: String\n compoundFieldName: String\n controllerName: String\n controllingFields: [String]!\n createable: Boolean!\n custom: Boolean!\n dataType: DataType\n extraTypeInfo: FieldExtraTypeInfo\n filterable: Boolean!\n filteredLookupInfo: FilteredLookupInfo\n highScaleNumber: Boolean!\n htmlFormatted: Boolean!\n inlineHelpText: String\n label: String\n nameField: Boolean!\n polymorphicForeignKey: Boolean!\n precision: Int\n reference: Boolean!\n referenceTargetField: String\n referenceToInfos: [ReferenceToInfo]!\n relationshipName: String\n required: Boolean!\n scale: Int\n searchPrefilterable: Boolean\n sortable: Boolean!\n updateable: Boolean!\n}\n\ntype PicklistField implements Field {\n ApiName: String!\n calculated: Boolean!\n compound: Boolean!\n compoundComponentName: String\n compoundFieldName: String\n controllerName: String\n controllingFields: [String]!\n createable: Boolean!\n custom: Boolean!\n dataType: DataType\n extraTypeInfo: FieldExtraTypeInfo\n filterable: Boolean!\n filteredLookupInfo: FilteredLookupInfo\n highScaleNumber: Boolean!\n htmlFormatted: Boolean!\n inlineHelpText: String\n label: String\n nameField: Boolean!\n polymorphicForeignKey: Boolean!\n picklistValuesByRecordTypeIDs: [PicklistValueByRecordTypeIDs]\n precision: Int\n reference: Boolean!\n referenceTargetField: String\n referenceToInfos: [ReferenceToInfo]!\n relationshipName: String\n required: Boolean!\n scale: Int\n searchPrefilterable: Boolean\n sortable: Boolean!\n updateable: Boolean!\n}\n\ntype PicklistValueByRecordTypeIDs {\n recordTypeID: String!\n controllerValues: [ControllerValues!]\n picklistValues: [PicklistValues!]\n defaultValue: PicklistValues\n}\n\ntype ControllerValues {\n value: String\n index: Int\n}\n\ntype PicklistValues {\n value: String\n label: String\n validFor: [Int]\n attributes: PicklistAttributes\n}\n\ntype PicklistAttributes {\n picklistAtrributesValueType: String\n connectDisplayName: String\n internalName: String\n}\n\ninput DateTimeFunctionInput {\n value: DatePrimitiveOperators\n convertTimezoneValue: DatePrimitiveOperators\n}\n\ntype Base64Value implements FieldValue {\n value: Base64\n displayValue: String\n}\n\ntype CompoundField @generic {\n IntValue: IntValue @fieldCategory\n StringValue: StringValue @fieldCategory\n BooleanValue: BooleanValue @fieldCategory\n IDValue: IDValue @fieldCategory\n DateTimeValue: DateTimeValue @fieldCategory\n TimeValue: TimeValue @fieldCategory\n DateValue: DateValue @fieldCategory\n TextAreaValue: TextAreaValue @fieldCategory\n LongTextAreaValue: LongTextAreaValue @fieldCategory\n RichTextAreaValue: RichTextAreaValue @fieldCategory\n PhoneNumberValue: PhoneNumberValue @fieldCategory\n EmailValue: EmailValue @fieldCategory\n UrlValue: UrlValue @fieldCategory\n EncryptedStringValue: EncryptedStringValue @fieldCategory\n CurrencyValue: CurrencyValue @fieldCategory\n LongitudeValue: LongitudeValue @fieldCategory\n LatitudeValue: LatitudeValue @fieldCategory\n PicklistValue: PicklistValue @fieldCategory\n MultiPicklistValue: MultiPicklistValue @fieldCategory\n LongValue: LongValue @fieldCategory\n DoubleValue: DoubleValue @fieldCategory\n PercentValue: PercentValue @fieldCategory\n Base64Value: Base64Value @fieldCategory\n JSONValue: JSONValue @fieldCategory\n}\n\ninput RecordUpdateInput @generic {\n Id: IdOrRef!\n record: RecordUpdateRepresentation! @fieldCategory\n}\n\ninput DateTimeInput {\n value: DateTime\n literal: DateLiteral\n range: DateRange\n}\n\ntype ChildRelationship {\n childObjectApiName: String!\n fieldName: String\n junctionIdListNames: [String]!\n junctionReferenceTo: [String]!\n relationshipName: String\n objectInfo: ObjectInfo\n}\n\ntype RecordResult @generic {\n aggregate: RecordAggregate\n}\n\ntype PageInfo {\n hasNextPage: Boolean!\n hasPreviousPage: Boolean!\n startCursor: String\n endCursor: String\n}\n\ntype CurrencyValue implements FieldValue {\n value: Currency\n displayValue: String\n format: String\n convertCurrency: Currency\n}\n\ntype DateFunctionAggregation {\n value: Long\n format: String\n}\n\ninput PolymorphicParentRelationshipRecordOrderBy @generic {\n RecordOrderBy: RecordOrderBy @fieldCategory\n}\n\ntype RecordCreatePayload @generic {\n Record: RecordRepresentation\n}\n\ninput PolymorphicParentRelationshipGroupBy @generic {\n RecordGroupBy: RecordGroupBy @fieldCategory\n}\n\ntype BooleanValue implements FieldValue {\n value: Boolean\n displayValue: String\n}\n\ntype StringValue implements FieldValue {\n value: String\n displayValue: String\n label: String\n}\n\ninput IdOperators {\n eq: ID\n ne: ID\n lt: ID\n gt: ID\n lte: ID\n gte: ID\n in: [ID]\n nin: [ID]\n inq: JoinInput\n ninq: JoinInput\n}\n\ntype PhoneNumberAggregate implements FieldValue {\n value: PhoneNumber\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: PhoneNumberValue\n min: PhoneNumberValue\n}\n\ntype CurrencyAggregate implements FieldValue {\n value: Currency\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n max: CurrencyValue\n min: CurrencyValue\n sum: CurrencyValue\n}\n\ninput BooleanOperators {\n eq: Boolean\n ne: Boolean\n}\n\ntype MultiPicklistValue implements FieldValue {\n value: MultiPicklist\n displayValue: String\n label: String\n}\n\ntype ListColumn @team(name: \"Lists Platform\") {\n fieldApiName: String!\n label: String!\n lookupId: String\n sortable: Boolean\n}\n\ntype LatitudeAggregate implements FieldValue {\n value: Latitude\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n max: LatitudeValue\n min: LatitudeValue\n sum: DoubleValue\n}\n\ninput CurrencyOperators {\n eq: Currency\n ne: Currency\n lt: Currency\n gt: Currency\n lte: Currency\n gte: Currency\n in: [Currency]\n nin: [Currency]\n}\n\ntype LatitudeValue implements FieldValue {\n value: Latitude\n displayValue: String\n}\n\ninput GroupByClause {\n group: Boolean\n}\n\ntype RecordEdge @generic {\n node: RecordRepresentation\n cursor: String!\n}\n\nenum NullOrder {\n FIRST\n LAST\n}\n\ntype PhoneNumberValue implements FieldValue {\n value: PhoneNumber\n displayValue: String\n}\n\n# RecordScope is an empty enum\n# enum RecordScope @generic {\n# }\n\ninput TextAreaOperators {\n eq: TextArea\n ne: TextArea\n like: TextArea\n lt: TextArea\n gt: TextArea\n lte: TextArea\n gte: TextArea\n in: [TextArea]\n nin: [TextArea]\n}\n\ntype TextAreaValue implements FieldValue {\n value: TextArea\n displayValue: String\n label: String\n}\n\ntype RecordAggregateEdge @generic {\n node: RecordResult\n cursor: String!\n}\n\ntype ThemeInfo {\n color: String\n iconUrl: String\n}\n\ntype UrlAggregate implements FieldValue {\n value: Url\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: UrlValue\n min: UrlValue\n}\n\ntype IDValue implements FieldValue {\n value: ID\n displayValue: String\n}\n\nenum Unit {\n MI\n KM\n}\n\ninput PolymorphicParentRelationshipOrderBy @generic {\n RecordAggregateOrderBy: RecordAggregateOrderBy @fieldCategory\n}\n\nenum NullsOrder {\n FIRST\n LAST\n}\n\nenum ResultOrder {\n ASC\n DESC\n}\n\ninput RecordOrderBy @generic {\n orderableField: OrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableParentRelationship: RecordOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: PolymorphicParentRelationshipRecordOrderBy @fieldCategory\n}\n\ninput PicklistOperators {\n eq: Picklist\n ne: Picklist\n in: [Picklist]\n nin: [Picklist]\n like: Picklist\n lt: Picklist\n gt: Picklist\n lte: Picklist\n gte: Picklist\n}\n\ninput RecordFilter @generic {\n and: [RecordFilter]\n or: [RecordFilter]\n not: RecordFilter\n parentRelationshipRecordFilter: RecordFilter @fieldCategory\n polymorphicParentRelationshipRecordFilter: PolymorphicParentRelationshipRecordFilter @fieldCategory\n IntegerOperator: IntegerOperators @fieldCategory\n LongOperator: LongOperators @fieldCategory\n StringOperator: StringOperators @fieldCategory\n DoubleOperator: DoubleOperators @fieldCategory\n PercentOperator: PercentOperators @fieldCategory\n LongitudeOperator: LongitudeOperators @fieldCategory\n LatitudeOperator: LatitudeOperators @fieldCategory\n EmailOperator: EmailOperators @fieldCategory\n TextAreaOperator: TextAreaOperators @fieldCategory\n LongTextAreaOperator: LongTextAreaOperators @fieldCategory\n URLOperator: URLOperators @fieldCategory\n PhoneNumberOperator: PhoneNumberOperators @fieldCategory\n BooleanOperator: BooleanOperators @fieldCategory\n IdOperator: IdOperators @fieldCategory\n CurrencyOperator: CurrencyOperators @fieldCategory\n TimeOperator: TimeOperators @fieldCategory\n DateOperator: DateOperators @fieldCategory\n DateTimeOperator: DateTimeOperators @fieldCategory\n PicklistOperator: PicklistOperators @fieldCategory\n MultiPicklistOperator: MultiPicklistOperators @fieldCategory\n GeolocationOperator: GeolocationOperators @fieldCategory\n}\n\ntype TimeValue implements FieldValue {\n value: Time\n displayValue: String\n format: String\n}\n\ninput GeolocationOperators {\n lt: GeolocationInput\n gt: GeolocationInput\n}\n\ninput LatitudeOperators {\n eq: Latitude\n ne: Latitude\n lt: Latitude\n gt: Latitude\n lte: Latitude\n gte: Latitude\n in: [Latitude]\n nin: [Latitude]\n}\n\ntype IntAggregate implements FieldValue {\n value: Int\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n grouping: IntValue\n max: IntValue\n min: IntValue\n sum: LongValue\n}\n\ntype RecordAggregate @generic {\n ApiName: String!\n BooleanAggregate: BooleanAggregate @fieldCategory\n CurrencyAggregate: CurrencyAggregate @fieldCategory\n DateAggregate: DateAggregate @fieldCategory\n DoubleAggregate: DoubleAggregate @fieldCategory\n EmailAggregate: EmailAggregate @fieldCategory\n IDAggregate: IDAggregate @fieldCategory\n IntAggregate: IntAggregate @fieldCategory\n LatitudeAggregate: LatitudeAggregate @fieldCategory\n LongitudeAggregate: LongitudeAggregate @fieldCategory\n LongAggregate: LongAggregate @fieldCategory\n PercentAggregate: PercentAggregate @fieldCategory\n PhoneNumberAggregate: PhoneNumberAggregate @fieldCategory\n PicklistAggregate: PicklistAggregate @fieldCategory\n StringAggregate: StringAggregate @fieldCategory\n TextAreaAggregate: TextAreaAggregate @fieldCategory\n TimeAggregate: TimeAggregate @fieldCategory\n UrlAggregate: UrlAggregate @fieldCategory\n parentRelationship: RecordAggregate @fieldCategory\n polymorphicParentRelationship: PolymorphicAggregateParentRelationship @fieldCategory\n}\n\nenum SObject__FieldType {\n ALL\n STANDARD\n CUSTOM\n}\n\ntype JSONValue implements FieldValue {\n value: JSON\n displayValue: String\n}\n\ntype EmailValue implements FieldValue {\n value: Email\n displayValue: String\n}\n\ninput DateFunctionInput {\n value: LongOperators\n convertTimezoneValue: LongOperators\n}\n\n# Mutations are not supported by Luvio.\n# type Mutation {\n# uiapi(input: UIAPIMutationsInput): UIAPIMutations!\n# }\n\nunion PolymorphicAggregateParentRelationship @generic = RecordAggregate\n\ninput LongTextAreaOperators {\n eq: LongTextArea\n ne: LongTextArea\n like: LongTextArea\n lt: LongTextArea\n gt: LongTextArea\n lte: LongTextArea\n gte: LongTextArea\n in: [LongTextArea]\n nin: [LongTextArea]\n}\n\ninput DateTimeOperators {\n eq: DateTimeInput\n ne: DateTimeInput\n lt: DateTimeInput\n gt: DateTimeInput\n lte: DateTimeInput\n gte: DateTimeInput\n in: [DateTimeInput]\n nin: [DateTimeInput]\n DAY_IN_WEEK: DateFunctionInput\n DAY_IN_MONTH: DateFunctionInput\n DAY_IN_YEAR: DateFunctionInput\n WEEK_IN_MONTH: DateFunctionInput\n WEEK_IN_YEAR: DateFunctionInput\n CALENDAR_MONTH: DateFunctionInput\n CALENDAR_QUARTER: DateFunctionInput\n CALENDAR_YEAR: DateFunctionInput\n FISCAL_MONTH: DateFunctionInput\n FISCAL_QUARTER: DateFunctionInput\n FISCAL_YEAR: DateFunctionInput\n DAY_ONLY: DateTimeFunctionInput\n HOUR_IN_DAY: DateFunctionInput\n}\n\ntype BooleanAggregate implements FieldValue {\n value: Boolean\n displayValue: String\n grouping: IntValue\n}\n\ntype RecordQueryAggregate {\n # scope should be RecordScope, but it is an empty enum\n recordQueryAggregate(first: Int, after: String, where: RecordFilter, orderBy: RecordAggregateOrderBy, scope: String, groupBy: RecordGroupBy, upperBound: Int): RecordAggregateConnection @fieldCategory\n}\n\ninput RecordCreateRepresentation @generic {\n Int: Int @fieldCategory\n String: String @fieldCategory\n Boolean: Boolean @fieldCategory\n ID: IdOrRef @fieldCategory\n DateTime: DateTime @fieldCategory\n Time: Time @fieldCategory\n Date: Date @fieldCategory\n TextArea: TextArea @fieldCategory\n LongTextArea: LongTextArea @fieldCategory\n RichTextArea: RichTextArea @fieldCategory\n PhoneNumber: PhoneNumber @fieldCategory\n Email: Email @fieldCategory\n Url: Url @fieldCategory\n EncryptedString: EncryptedString @fieldCategory\n Currency: Currency @fieldCategory\n Longitude: Longitude @fieldCategory\n Latitude: Latitude @fieldCategory\n Picklist: Picklist @fieldCategory\n MultiPicklist: MultiPicklist @fieldCategory\n Long: Long @fieldCategory\n Double: Double @fieldCategory\n Percent: Percent @fieldCategory\n Base64: Base64 @fieldCategory\n JSON: JSON @fieldCategory\n}\n\nenum FieldExtraTypeInfo {\n IMAGE_URL\n EXTERNAL_LOOKUP\n INDIRECT_LOOKUP\n PERSONNAME\n SWITCHABLE_PERSONNAME\n PLAINTEXTAREA\n RICHTEXTAREA\n}\n\ntype RateLimit {\n cost: Long\n limit: Long\n remaining: Long\n resetAt: DateTime\n}\n\ninput DateRange {\n last_n_days: Int\n next_n_days: Int\n last_n_weeks: Int\n next_n_weeks: Int\n last_n_months: Int\n next_n_months: Int\n last_n_quarters: Int\n next_n_quarters: Int\n last_n_fiscal_quarters: Int\n next_n_fiscal_quarters: Int\n last_n_years: Int\n next_n_years: Int\n last_n_fiscal_years: Int\n next_n_fiscal_years: Int\n n_days_ago: Int\n n_weeks_ago: Int\n n_months_ago: Int\n n_quarters_ago: Int\n n_years_ago: Int\n n_fiscal_quarters_ago: Int\n n_fiscal_years_ago: Int\n}\n\ntype UIAPIMutations {\n recordCreate(input: RecordCreateInput!): RecordCreatePayload @fieldCategory\n recordDelete(input: RecordDeleteInput!): RecordDeletePayload @fieldCategory\n recordUpdate(input: RecordUpdateInput!): RecordUpdatePayload @fieldCategory\n}\n\ninput IntegerOperators {\n eq: Int\n ne: Int\n lt: Int\n gt: Int\n lte: Int\n gte: Int\n in: [Int]\n nin: [Int]\n}\n\ntype EncryptedStringValue implements FieldValue {\n value: EncryptedString\n displayValue: String\n}\n\ninterface Record {\n Id: ID!\n ApiName: String!\n WeakEtag: Long!\n DisplayValue: String\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n SystemModstamp: DateTimeValue\n RecordTypeId(fallback: Boolean): IDValue\n}\n\ninput PolymorphicParentRelationshipRecordFilter @generic {\n RecordFilter: RecordFilter @fieldCategory\n}\n\n\"\"\"\nA type that can contain any of the following types: Boolean, Date, DateTime, Double, String.\nFormat and Label are not supported by AnyType and displayValue is an unformatted string representation of the value.\n\"\"\"\nunion AnyType = BooleanValue | DateValue | DateTimeValue | DoubleValue | StringValue\n\ninput AggregateOrderByNumberClause {\n function: AggregateOrderByNumberFunction\n order: ResultsOrder\n nulls: NullsOrder\n}\n\ninput DateInput {\n value: Date\n literal: DateLiteral\n range: DateRange\n}\n\ninput RecordGroupBy @generic {\n groupableField: GroupByClause @fieldCategory\n groupableDateField: GroupByDateFunction @fieldCategory\n groupableParentRelationship: RecordGroupBy @fieldCategory\n groupablePolymorphicParentRelationship: PolymorphicParentRelationshipGroupBy @fieldCategory\n type: GroupByType = GROUP_BY\n}\n\ntype RecordQuery {\n # scope should be RecordScope, but it is an empty enum\n recordQuery(first: Int, after: String, where: RecordFilter, orderBy: RecordOrderBy, scope: String, upperBound: Int, updateMRU: Boolean): RecordConnection @fieldCategory\n}\n\ninput RecordAggregateOrderBy @generic {\n orderableNumberField: AggregateOrderByNumberClause @fieldCategory\n orderableStringField: AggregateOrderByStringClause @fieldCategory\n orderableField: NoFunctionAggregateOrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableParentRelationship: RecordAggregateOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: PolymorphicParentRelationshipOrderBy @fieldCategory\n}\n\ninput IgnoreRule {\n rule: String!\n teamName: String!\n justification: String!\n}\n\ndirective @generic on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT\ndirective @fieldCategory on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION | ENUM_VALUE\ndirective @category(name: String!) on FIELD\n\"Specifies the team name for a type\"\ndirective @team(name: String!) on OBJECT | INPUT_OBJECT | INTERFACE | ENUM | UNION | SCALAR\n\"Specifies the validation rules to ignore for this element.\"\ndirective @ignoreRule(rules: [IgnoreRule!]!) on OBJECT\n | INPUT_OBJECT\n | INTERFACE\n | ENUM\n | UNION\n | SCALAR\n | FIELD_DEFINITION\n | INPUT_FIELD_DEFINITION\n | ARGUMENT_DEFINITION\n | ENUM_VALUE\ndirective @optional on FIELD\n\ntype __Type {\n kind: __TypeKind!\n name: String\n description: String\n fields(includeDeprecated: Boolean = false): [__Field!]\n interfaces: [__Type!]\n possibleTypes: [__Type!]\n enumValues(includeDeprecated: Boolean = false): [__EnumValue!]\n inputFields: [__InputValue!]\n ofType: __Type\n}";
48296
+ var uiapiSchemaString = "# Auto-generated merged GraphQL schema\n# Generated at: 2025-10-14T15:00:19.876399281Z\n# Source files: ui-services-private/java/resources/graphql-schemas/analytics.graphqls, ui-services-private/java/resources/graphql-schemas/setup-listview.graphqls, ui-services-private/java/resources/graphql-schemas/setup.graphqls, ui-services-private/java/resources/graphql-schemas/uiapi.graphqls\n\n# ============================================================\n# Source: ui-services-private/java/resources/graphql-schemas/analytics.graphqls\n# ============================================================\ninput Analytics__AnalyticsFilter @team(name: \"TUA-Admin-Home-Search\") {\n Id: Setup__IdOperators\n MasterLabel: StringOperators\n DeveloperName: StringOperators\n NamespacePrefix: StringOperators\n AssetApiName: StringOperators\n DataConnectorType: StringOperators\n CreatedById: Setup__IdOperators\n LastModifiedById: Setup__IdOperators\n SemanticMetricId: Setup__IdOperators\n SemanticModelId: Setup__IdOperators\n LastModifiedDate: DateTimeOperators\n CreatedDate: DateTimeOperators\n AssetUsageType: PicklistOperators\n ActivePromotionRequestId: Setup__IdOperators\n SemanticModel: Analytics__SemanticModelFilter\n and: [Analytics__AnalyticsFilter]\n or: [Analytics__AnalyticsFilter]\n not: Analytics__AnalyticsFilter\n}\n\ninput Analytics__SemanticModelFilter @team(name: \"TUA-Admin-Home-Search\") {\n DeveloperName: StringOperators\n MasterLabel: StringOperators\n}\n\nenum Analytics__SortEnumType @team(name: \"TUA-Admin-Home-Search\") {\n ASC\n DESC\n}\n\ntype Analytics__SemanticSubMetricDefinitionConnection @team(name: \"TUA-Admin-Home-Search\") {\n edges: [Analytics__SemanticSubMetricDefinitionEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__SemanticSubMetricDefinitionEdge @team(name: \"TUA-Admin-Home-Search\") {\n node: Analytics__SemanticSubMetricDefinitionRepresentation\n cursor: String!\n}\n\ntype Analytics__DataspaceRepresentation @team(name: \"TUA-Admin-Home-Search\") {\n Id: ID!\n ApiName: String!\n MasterLabel: String\n DeveloperName: String\n}\n\ninterface Analytics__AnalyticsRepresentationInterface @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n AnalyticsWorkspaces(first: Int, after: String): Analytics__AnalyticsWorkspaceAssetConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n AssetApiName: String\n DloActiveStatus: Boolean\n ReusedAssetStatus: String\n}\n\ntype Analytics__AnalyticsBrowse @team(name: \"TUA-Admin-Home-Search\") {\n edges: [Analytics__AnalyticsEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\n# Empty enum is invalid GraphQL\n# enum AnalyticsAssetType @team(name: \"TUA-Admin-Home-Search\") @generic {\n# }\n\ntype Analytics__AnalyticsWorkspaceAssetConnection @team(name: \"TUA-Admin-Home-Search\") {\n edges: [Analytics__AnalyticsWorkspaceAssetEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__SemanticDefinition implements Analytics__AnalyticsRepresentationInterface @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n SemanticModelId: IDValue\n SemanticModel: Analytics__SemanticModel\n AnalyticsWorkspaces(first: Int, after: String): Analytics__AnalyticsWorkspaceAssetConnection\n SubMetrics(first: Int, after: String): Analytics__SemanticSubMetricDefinitionConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n AssetApiName: String\n DloActiveStatus: Boolean\n ReusedAssetStatus: String\n}\n\ntype Analytics__DominoTemplate implements Analytics__AnalyticsRepresentationInterface @team(name: \"TUA Intel MarketPlace\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n TemplateStatus: StringValue\n TemplateType: StringValue\n AnalyticsWorkspaces(first: Int, after: String): Analytics__AnalyticsWorkspaceAssetConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n AssetApiName: String\n DloActiveStatus: Boolean\n ReusedAssetStatus: String\n}\n\ntype Analytics__AnalyticsEdge @team(name: \"TUA-Admin-Home-Search\") {\n node: Analytics__AnalyticsRepresentationInterface\n cursor: String!\n}\n\ntype Analytics__AnalyticsWorkspace @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n}\n\ntype Analytics__SemanticSubMetricDefinitionRepresentation @team(name: \"TUA-Admin-Home-Search\") {\n Id: ID!\n ApiName: String!\n SemanticModelId: IDValue\n SemanticMetricId: IDValue\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n}\n\ntype Analytics__AnalyticsWorkspaceAssetEdge @team(name: \"TUA-Admin-Home-Search\") {\n node: Analytics__AnalyticsWorkspaceAsset\n cursor: String!\n}\n\ninput Analytics__OrderByInput @team(name: \"TUA-Admin-Home-Search\") {\n order: Analytics__SortEnumType\n}\n\ntype Analytics__AnalyticsRepresentation implements Analytics__AnalyticsRepresentationInterface @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n RecordOperations: [String]\n AnalyticsWorkspaces(first: Int, after: String): Analytics__AnalyticsWorkspaceAssetConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n AssetApiName: String\n DloActiveStatus: Boolean\n ReusedAssetStatus: String\n}\n\ntype Analytics__SemanticModelRelatedModelConnection @team(name: \"TUA-Admin-Home-Search\") {\n edges: [Analytics__SemanticModelRelatedModelEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__SemanticModelRelatedModelRepresentation @team(name: \"TUA-Admin-Home-Search\") {\n Id: ID!\n ApiName: String!\n SemanticModelId: IDValue\n RelatedSemanticModel: Analytics__SemanticModel\n}\n\ntype Analytics__SemanticModelRelatedModelEdge @team(name: \"TUA-Admin-Home-Search\") {\n node: Analytics__SemanticModelRelatedModelRepresentation\n cursor: String!\n}\n\ntype Analytics__SemanticModel implements Analytics__AnalyticsRepresentationInterface @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n AnalyticsWorkspaces(first: Int, after: String): Analytics__AnalyticsWorkspaceAssetConnection\n NamespacePrefix: StringValue\n RelatedModel(first: Int, after: String): Analytics__SemanticModelRelatedModelConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n AssetApiName: String\n DloActiveStatus: Boolean\n ReusedAssetStatus: String\n}\n\n# assetTypes: AnalyticsAssetType - empty enum is invalid GraphQL so replace with String\ntype Analytics__Analytics @team(name: \"TUA-Admin-Home-Search\") {\n browse(where: Analytics__AnalyticsFilter, assetTypes: [String], orderBy: Analytics__AnalyticsOrderBy, first: Int, orgId: ID, after: String): Analytics__AnalyticsBrowse! @fieldCategory\n}\n\ntype Analytics__AnalyticsWorkspaceAsset @team(name: \"TUA-Admin-Home-Search\") {\n AnalyticsWorkspace: Analytics__AnalyticsWorkspace\n AssetUsageType: PicklistValue\n ActivePromotionRequestId: IDValue\n MetadataSourceType: PicklistValue\n}\n\ninput Analytics__AnalyticsOrderBy @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: Analytics__OrderByInput\n Id: Analytics__OrderByInput\n ApiName: Analytics__OrderByInput\n LastModifiedById: Analytics__OrderByInput\n CreatedById: Analytics__OrderByInput\n LastModifiedDate: Analytics__OrderByInput\n CreatedDate: Analytics__OrderByInput\n}\n\ntype Analytics__MktDataConnector implements Analytics__AnalyticsRepresentationInterface @team(name: \"TUA-Admin-Home-Search\") {\n MasterLabel: StringValue\n DeveloperName: StringValue\n Description: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n AnalyticsWorkspaces(first: Int, after: String): Analytics__AnalyticsWorkspaceAssetConnection\n NamespacePrefix: StringValue\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n DataConnectorType: StringValue\n AssetApiName: String\n DloActiveStatus: Boolean\n ReusedAssetStatus: String\n}\n\n# ============================================================\n# Source: ui-services-private/java/resources/graphql-schemas/setup-listview.graphqls\n# ============================================================\ninput Setup__ListOrderInput {\n apiName: String!\n order: ResultsOrder\n}\n\ntype Setup__ListOrder {\n apiName: String!\n order: ResultsOrder\n label: String\n}\n\ntype Setup__ListViewRowConnection {\n edges: [Setup__ListViewRowEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ntype Setup__ListView {\n listViewType: String!\n label: String\n displayColumns: [Setup__ListColumn!]!\n filters: [Setup__ListFilter!]\n filterLogic: String\n orderedByInfo: [Setup__ListOrder!]!\n searchable: Boolean!\n rows(first: Int, after: String, upperBound: Int, orderBy: Setup__ListOrderInput, searchTerm: String): Setup__ListViewRowConnection\n}\n\nenum Setup__ListFilterOperator {\n EQUALS\n NOT_EQUAL\n LESS_THAN\n GREATER_THAN\n LESS_OR_EQUAL\n GREATER_OR_EQUAL\n CONTAINS\n NOT_CONTAIN\n STARTS_WITH\n INCLUDES\n EXCLUDES\n WITHIN\n}\n\ntype Setup__ListFilter {\n apiName: String!\n operator: Setup__ListFilterOperator!\n operand: [String!]!\n label: String\n}\n\ntype Setup__ListColumn {\n apiName: String!\n label: String!\n type: DataType!\n displayable: Boolean!\n filterable: Boolean!\n defaultOperator: Setup__ListFilterOperator\n allowedOperators: [Setup__ListFilterOperator!]\n sortable: Boolean\n navigable: Boolean\n}\n\ntype Setup__ListScalarField {\n apiName: String!\n value: String\n dataType: DataType\n displayValue: String\n format: String\n label: String\n lookupRecordId: String\n lookupObjectApiName: String\n}\n\ntype Setup__ListViewRow {\n id: String\n columns(apiNames: [String!]): [Setup__ListScalarField]!\n}\n\ntype Setup__ListViewRowEdge {\n cursor: String!\n node: Setup__ListViewRow\n}\n\ntype Setup__ListViewObjectInfo {\n columns(apiNames: [String!], displayable: Boolean, filterable: Boolean) : [Setup__ListColumn!]!\n}\n\ninput Setup__ListFilterInput {\n apiName: String!\n operator: Setup__ListFilterOperator!\n operand: [String!]!\n}\n\nextend type Setup__Setup {\n ListView(listViewType: String!, label: String, displayColumns: [String!], filters: [Setup__ListFilterInput!], filterLogic: String): Setup__ListView!\n ListViewObjectInfo(listViewType: String!): Setup__ListViewObjectInfo!\n}\n\n# ============================================================\n# Source: ui-services-private/java/resources/graphql-schemas/setup.graphqls\n# ============================================================\n# scope should be RecordScope, but it is an empty enum\ntype Setup__SetupQueryAggregate {\n recordQueryAggregate(first: Int, after: String, where: Setup__SetupFilter, orderBy: Setup__SetupAggregateOrderBy, scope: String, groupBy: Setup__SetupGroupBy, upperBound: Int, includeDeleted: Boolean): Setup__SetupAggregateConnection @fieldCategory\n}\n\nunion Setup__SetupPolymorphicParentRelationship @generic = Setup__EntityRepresentation\n\ninput Setup__SetupPolymorphicParentRelationshipRecordOrderBy @generic {\n Setup__SetupOrderBy: Setup__SetupOrderBy @fieldCategory\n}\n\ninput Setup__IdOperators {\n eq: ID\n ne: ID\n lt: ID\n gt: ID\n lte: ID\n gte: ID\n in: [ID]\n nin: [ID]\n inq: Setup__JoinInput\n ninq: Setup__JoinInput\n}\n\ninput Setup__JoinInput {\n Record: Setup__SetupFilter @fieldCategory\n ApiName: String\n}\n\ntype Setup__SetupAggregateConnection @generic {\n edges: [Setup__SetupAggregateEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ninput Setup__SetupAggregateOrderBy @generic {\n orderableNumberField: AggregateOrderByNumberClause @fieldCategory\n orderableStringField: AggregateOrderByStringClause @fieldCategory\n orderableField: NoFunctionAggregateOrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableParentRelationship: Setup__SetupAggregateOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: Setup__SetupPolymorphicParentRelationshipOrderBy @fieldCategory\n}\n\ntype Setup__SetupConnection @generic {\n edges: [Setup__SetupEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n pageResultCount: Int!\n}\n\ntype Setup__SetupAggregateEdge @generic {\n node: Setup__SetupRecordResult\n cursor: String!\n}\n\ninput Setup__SetupPolymorphicParentRelationshipRecordFilter @generic {\n Setup__SetupFilter: Setup__SetupFilter @fieldCategory\n}\n\ntype Setup__SetupRecordResult @generic {\n aggregate: Setup__SetupRecordAggregate\n}\n\ntype Setup__SetupRecordAggregate @generic {\n ApiName: String!\n BooleanAggregate: BooleanAggregate @fieldCategory\n CurrencyAggregate: CurrencyAggregate @fieldCategory\n DateAggregate: DateAggregate @fieldCategory\n DoubleAggregate: DoubleAggregate @fieldCategory\n EmailAggregate: EmailAggregate @fieldCategory\n IDAggregate: IDAggregate @fieldCategory\n IntAggregate: IntAggregate @fieldCategory\n LatitudeAggregate: LatitudeAggregate @fieldCategory\n LongitudeAggregate: LongitudeAggregate @fieldCategory\n LongAggregate: LongAggregate @fieldCategory\n PercentAggregate: PercentAggregate @fieldCategory\n PhoneNumberAggregate: PhoneNumberAggregate @fieldCategory\n PicklistAggregate: PicklistAggregate @fieldCategory\n StringAggregate: StringAggregate @fieldCategory\n TextAreaAggregate: TextAreaAggregate @fieldCategory\n TimeAggregate: TimeAggregate @fieldCategory\n UrlAggregate: UrlAggregate @fieldCategory\n parentRelationship: Setup__SetupRecordAggregate @fieldCategory\n polymorphicParentRelationship: Setup__SetupPolymorphicAggregateParentRelationship @fieldCategory\n}\n\ninput Setup__SetupOrderBy @generic {\n orderableField: OrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableParentRelationship: Setup__SetupOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: Setup__SetupPolymorphicParentRelationshipRecordOrderBy @fieldCategory\n}\n\ninput Setup__SetupPolymorphicParentRelationshipOrderBy @generic {\n Setup__SetupAggregateOrderBy: Setup__SetupAggregateOrderBy @fieldCategory\n}\n\ntype Setup__SetupEdge @generic {\n node: Setup__EntityRepresentation\n cursor: String!\n}\n\n # scope should be RecordScope, but it is an empty enum\ntype Setup__SetupQuery {\n recordQuery(first: Int, after: String, where: Setup__SetupFilter, orderBy: Setup__SetupOrderBy, scope: String, upperBound: Int, includeDeleted: Boolean, updateMRU: Boolean): Setup__SetupConnection @fieldCategory\n}\n\ntype Setup__EntityRepresentation @generic {\n Id: ID!\n ApiName: String!\n Entity__fields(type: SObject__FieldType): [SObject__Field]! @ignoreRule(rules:[{ rule: \"FieldCamelOrPascalCaseRule\" teamName: \"UI Experience API\" justification: \"SObject__ prefix added to prevent name collisions.\" }])\n IntValue: IntValue @fieldCategory\n StringValue: StringValue @fieldCategory\n BooleanValue: BooleanValue @fieldCategory\n IDValue: IDValue @fieldCategory\n DateTimeValue: DateTimeValue @fieldCategory\n TimeValue: TimeValue @fieldCategory\n DateValue: DateValue @fieldCategory\n TextAreaValue: TextAreaValue @fieldCategory\n LongTextAreaValue: LongTextAreaValue @fieldCategory\n RichTextAreaValue: RichTextAreaValue @fieldCategory\n PhoneNumberValue: PhoneNumberValue @fieldCategory\n EmailValue: EmailValue @fieldCategory\n UrlValue: UrlValue @fieldCategory\n EncryptedStringValue: EncryptedStringValue @fieldCategory\n CurrencyValue: CurrencyValue @fieldCategory\n LongitudeValue: LongitudeValue @fieldCategory\n LatitudeValue: LatitudeValue @fieldCategory\n PicklistValue: PicklistValue @fieldCategory\n MultiPicklistValue: MultiPicklistValue @fieldCategory\n LongValue: LongValue @fieldCategory\n DoubleValue: DoubleValue @fieldCategory\n PercentValue: PercentValue @fieldCategory\n Base64Value: Base64Value @fieldCategory\n JSONValue: JSONValue @fieldCategory\n AnyType: AnyType @fieldCategory\n parentRelationship: Setup__EntityRepresentation @fieldCategory\n polymorphicParentRelationship: Setup__SetupPolymorphicParentRelationship @fieldCategory\n childRelationship(first: Int, after: String, where: Setup__SetupFilter, orderBy: Setup__SetupOrderBy, upperBound: Int): Setup__SetupConnection @fieldCategory\n CompoundField: CompoundField @fieldCategory\n}\n\ninput Setup__SetupFilter @generic {\n and: [Setup__SetupFilter]\n or: [Setup__SetupFilter]\n not: Setup__SetupFilter\n parentRelationshipRecordFilter: Setup__SetupFilter @fieldCategory\n polymorphicParentRelationshipRecordFilter: Setup__SetupPolymorphicParentRelationshipRecordFilter @fieldCategory\n IntegerOperator: IntegerOperators @fieldCategory\n LongOperator: LongOperators @fieldCategory\n StringOperator: StringOperators @fieldCategory\n DoubleOperator: DoubleOperators @fieldCategory\n PercentOperator: PercentOperators @fieldCategory\n LongitudeOperator: LongitudeOperators @fieldCategory\n LatitudeOperator: LatitudeOperators @fieldCategory\n EmailOperator: EmailOperators @fieldCategory\n TextAreaOperator: TextAreaOperators @fieldCategory\n LongTextAreaOperator: LongTextAreaOperators @fieldCategory\n URLOperator: URLOperators @fieldCategory\n PhoneNumberOperator: PhoneNumberOperators @fieldCategory\n BooleanOperator: BooleanOperators @fieldCategory\n Setup__IdOperator: Setup__IdOperators @fieldCategory\n CurrencyOperator: CurrencyOperators @fieldCategory\n TimeOperator: TimeOperators @fieldCategory\n DateOperator: DateOperators @fieldCategory\n DateTimeOperator: DateTimeOperators @fieldCategory\n PicklistOperator: PicklistOperators @fieldCategory\n MultiPicklistOperator: MultiPicklistOperators @fieldCategory\n GeolocationOperator: GeolocationOperators @fieldCategory\n}\n\ninput Setup__SetupGroupBy @generic {\n groupableField: GroupByClause @fieldCategory\n groupableDateField: GroupByDateFunction @fieldCategory\n groupableParentRelationship: Setup__SetupGroupBy @fieldCategory\n groupablePolymorphicParentRelationship: Setup__SetupPolymorphicParentRelationshipGroupBy @fieldCategory\n type: GroupByType = GROUP_BY\n}\n\nunion Setup__SetupPolymorphicAggregateParentRelationship @generic = Setup__SetupRecordAggregate\n\ntype Setup__Setup {\n query: Setup__SetupQuery!\n aggregate: Setup__SetupQueryAggregate!\n objectInfos(apiNames: [String!], locale: String, objectInfoInputs: [ObjectInfoInput!]): [ObjectInfo]\n}\n\ninput Setup__SetupPolymorphicParentRelationshipGroupBy @generic {\n Setup__SetupGroupBy: Setup__SetupGroupBy @fieldCategory\n}\n\n\n# ============================================================\n# Source: ui-services-private/java/resources/graphql-schemas/uiapi.graphqls\n# ============================================================\nscalar BigDecimal\nscalar Byte\nscalar Char\nscalar BigInteger\nscalar Short\nscalar String\nscalar Currency\nscalar Longitude\nscalar Float\nscalar PhoneNumber\nscalar Email\nscalar TextArea\nscalar Latitude\nscalar RichTextArea\nscalar EncryptedString\nscalar Long\nscalar JSON\nscalar Time\nscalar Percent\nscalar LongTextArea\nscalar DateTime\nscalar ID\nscalar Boolean\nscalar MultiPicklist\nscalar Base64\nscalar Url\nscalar Picklist\nscalar Double\nscalar Int\nscalar IdOrRef\nscalar Date\n\ntype PercentAggregate implements FieldValue {\n value: Percent\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n max: PercentValue\n min: PercentValue\n sum: PercentValue\n}\n\ntype StringAggregate implements FieldValue {\n value: String\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n label: String\n max: StringValue\n min: StringValue\n}\n\ntype Query {\n uiapi: UIAPI!\n setup: Setup__Setup! @fieldCategory\n analytics: Analytics__Analytics! @fieldCategory\n}\n\ninput EmailOperators {\n eq: Email\n ne: Email\n like: Email\n lt: Email\n gt: Email\n lte: Email\n gte: Email\n in: [Email]\n nin: [Email]\n}\n\ninput DoubleOperators {\n eq: Double\n ne: Double\n lt: Double\n gt: Double\n lte: Double\n gte: Double\n in: [Double]\n nin: [Double]\n}\n\ntype DateOnlyAggregation {\n value: Date\n format: String\n}\n\ntype DateAggregate implements FieldValue {\n value: Date\n displayValue: String\n calendarMonth: DateFunctionAggregation\n calendarQuarter: DateFunctionAggregation\n calendarYear: DateFunctionAggregation\n count: LongValue\n countDistinct: LongValue\n dayInMonth: DateFunctionAggregation\n dayInWeek: DateFunctionAggregation\n dayInYear: DateFunctionAggregation\n fiscalMonth: DateFunctionAggregation\n fiscalQuarter: DateFunctionAggregation\n fiscalYear: DateFunctionAggregation\n format: String\n grouping: IntValue\n max: DateValue\n min: DateValue\n weekInMonth: DateFunctionAggregation\n weekInYear: DateFunctionAggregation\n}\n\nenum GroupByFunction {\n DAY_IN_WEEK\n DAY_IN_MONTH\n DAY_IN_YEAR\n WEEK_IN_MONTH\n WEEK_IN_YEAR\n CALENDAR_MONTH\n CALENDAR_QUARTER\n CALENDAR_YEAR\n FISCAL_MONTH\n FISCAL_QUARTER\n FISCAL_YEAR\n DAY_ONLY\n HOUR_IN_DAY\n}\n\ntype RecordTypeInfo {\n available: Boolean!\n defaultRecordTypeMapping: Boolean!\n master: Boolean!\n name: String\n recordTypeId: ID\n}\n\ninput UIAPIMutationsInput {\n \"Determines whether or not all the operations should be rolled back in the event one or more operations fail.\"\n allOrNone: Boolean = true\n}\n\ntype ReferenceToInfo {\n ApiName: String!\n nameFields: [String]!\n objectInfo: ObjectInfo\n}\n\ninterface FieldValue {\n displayValue: String\n}\n\ntype LongitudeValue implements FieldValue {\n value: Longitude\n displayValue: String\n}\n\ntype IntValue implements FieldValue {\n value: Int\n displayValue: String\n format: String\n}\n\ntype UrlValue implements FieldValue {\n value: Url\n displayValue: String\n}\n\ntype LongAggregate implements FieldValue {\n value: Long\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n grouping: IntValue\n max: LongValue\n min: LongValue\n sum: LongValue\n}\n\ninput TimeOperators {\n eq: Time\n ne: Time\n lt: Time\n gt: Time\n lte: Time\n gte: Time\n in: [Time]\n nin: [Time]\n}\n\ntype PicklistValue implements FieldValue {\n value: Picklist\n displayValue: String\n label: String\n}\n\ntype RelatedListInfo @team(name: \"Lists Platform\") {\n childApiName: String!\n relatedListName: String!\n label: String!\n displayColumns: [ListColumn!]!\n orderedByInfo: [ListOrder!]!\n parentApiName: String!\n fieldApiName: String!\n}\n\ninput StringOperators {\n eq: String\n ne: String\n like: String\n lt: String\n gt: String\n lte: String\n gte: String\n in: [String]\n nin: [String]\n}\n\ntype UIAPI {\n query: RecordQuery!\n aggregate: RecordQueryAggregate!\n objectInfos(apiNames: [String!], locale: String, objectInfoInputs: [ObjectInfoInput!]): [ObjectInfo]\n relatedListByName(parentApiName: String!, relatedListName: String!): RelatedListInfo\n}\n\n\"Input for ObjectInfo and PickValues\"\ninput ObjectInfoInput {\n apiName: String!\n recordTypeIDs: [ID!]\n fieldNames: [String!]\n}\n\ninput MultiPicklistOperators {\n eq: MultiPicklist\n ne: MultiPicklist\n includes: [MultiPicklist]\n excludes: [MultiPicklist]\n}\n\ntype DateTimeAggregate implements FieldValue {\n value: DateTime\n displayValue: String\n calendarMonth: DateFunctionAggregation\n calendarQuarter: DateFunctionAggregation\n calendarYear: DateFunctionAggregation\n count: LongValue\n countDistinct: LongValue\n dayInMonth: DateFunctionAggregation\n dayInWeek: DateFunctionAggregation\n dayInYear: DateFunctionAggregation\n dayOnly: DateOnlyAggregation\n fiscalMonth: DateFunctionAggregation\n fiscalQuarter: DateFunctionAggregation\n fiscalYear: DateFunctionAggregation\n format: String\n hourInDay: DateFunctionAggregation\n max: DateTimeValue\n min: DateTimeValue\n weekInMonth: DateFunctionAggregation\n weekInYear: DateFunctionAggregation\n}\n\ntype EmailAggregate implements FieldValue {\n value: Email\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: EmailValue\n min: EmailValue\n}\n\ninput GroupByDateFunction {\n function: GroupByFunction\n}\n\ntype RichTextAreaValue implements FieldValue {\n value: RichTextArea\n displayValue: String\n label: String\n}\n\ninput DatePrimitiveOperators {\n eq: Date\n ne: Date\n lt: Date\n gt: Date\n lte: Date\n gte: Date\n in: [Date]\n nin: [Date]\n}\n\ntype TimeAggregate implements FieldValue {\n value: Time\n displayValue: String\n format: String\n hourInDay: DateFunctionAggregation\n}\n\ninput DistanceInput {\n latitude: Latitude!\n longitude: Longitude!\n}\n\nunion PolymorphicParentRelationship @generic = RecordRepresentation\n\nenum AggregateOrderByNumberFunction {\n AVG\n COUNT\n COUNT_DISTINCT\n MAX\n MIN\n SUM\n}\n\ntype LongTextAreaValue implements FieldValue {\n value: LongTextArea\n displayValue: String\n label: String\n}\n\ninput OrderByClause {\n order: ResultOrder\n nulls: NullOrder\n}\n\ntype SObject__Field {\n name: String!\n value: String\n}\n\ntype RecordAggregateConnection @generic {\n edges: [RecordAggregateEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ntype LongitudeAggregate implements FieldValue {\n value: Longitude\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n max: LongitudeValue\n min: LongitudeValue\n sum: DoubleValue\n}\n\ntype DateValue implements FieldValue {\n value: Date\n displayValue: String\n format: String\n}\n\ninput URLOperators {\n eq: Url\n ne: Url\n like: Url\n lt: Url\n gt: Url\n lte: Url\n gte: Url\n in: [Url]\n nin: [Url]\n}\n\ninput LongOperators {\n eq: Long\n ne: Long\n lt: Long\n gt: Long\n lte: Long\n gte: Long\n in: [Long]\n nin: [Long]\n}\n\nenum DataType {\n STRING\n TEXTAREA\n PHONE\n EMAIL\n URL\n ENCRYPTEDSTRING\n BOOLEAN\n CURRENCY\n INT\n LONG\n DOUBLE\n PERCENT\n DATETIME\n TIME\n DATE\n REFERENCE\n PICKLIST\n MULTIPICKLIST\n ADDRESS\n LOCATION\n BASE64\n COMPLEXVALUE\n COMBOBOX\n JSON\n JUNCTIONIDLIST\n ANYTYPE\n}\n\ntype DoubleAggregate implements FieldValue {\n value: Double\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n max: DoubleValue\n min: DoubleValue\n sum: DoubleValue\n}\n\ninput DateOperators {\n eq: DateInput\n ne: DateInput\n lt: DateInput\n gt: DateInput\n lte: DateInput\n gte: DateInput\n in: [DateInput]\n nin: [DateInput]\n DAY_IN_WEEK: DateFunctionInput\n DAY_IN_MONTH: DateFunctionInput\n DAY_IN_YEAR: DateFunctionInput\n WEEK_IN_MONTH: DateFunctionInput\n WEEK_IN_YEAR: DateFunctionInput\n CALENDAR_MONTH: DateFunctionInput\n CALENDAR_QUARTER: DateFunctionInput\n CALENDAR_YEAR: DateFunctionInput\n FISCAL_MONTH: DateFunctionInput\n FISCAL_QUARTER: DateFunctionInput\n FISCAL_YEAR: DateFunctionInput\n}\n\ninput GeolocationInput {\n latitude: Latitude!\n longitude: Longitude!\n radius: Float!\n unit: Unit!\n}\n\ninput JoinInput {\n Record: RecordFilter @fieldCategory\n ApiName: String\n}\n\ntype RecordUpdatePayload @generic {\n Record: RecordRepresentation\n success: Boolean @deprecated\n}\n\ninput PercentOperators {\n eq: Percent\n ne: Percent\n lt: Percent\n gt: Percent\n lte: Percent\n gte: Percent\n in: [Percent]\n nin: [Percent]\n}\n\ntype DoubleValue implements FieldValue {\n value: Double\n displayValue: String\n format: String\n}\n\ntype IDAggregate implements FieldValue {\n value: ID\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: IDValue\n min: IDValue\n}\n\ninput RecordCreateInput @generic {\n record: RecordCreateRepresentation! @fieldCategory\n}\n\ninput AggregateOrderByStringClause {\n function: AggregateOrderByStringFunction\n order: ResultsOrder\n nulls: NullsOrder\n}\n\n\"The return value for the mutation to delete a Record\"\ntype RecordDeletePayload {\n \"The ID of the deleted Record\"\n Id: ID\n}\n\nenum DateLiteral {\n YESTERDAY\n TODAY\n TOMORROW\n LAST_WEEK\n THIS_WEEK\n NEXT_WEEK\n LAST_MONTH\n THIS_MONTH\n NEXT_MONTH\n LAST_90_DAYS\n NEXT_90_DAYS\n LAST_QUARTER\n THIS_QUARTER\n NEXT_QUARTER\n LAST_FISCAL_QUARTER\n THIS_FISCAL_QUARTER\n NEXT_FISCAL_QUARTER\n LAST_YEAR\n THIS_YEAR\n NEXT_YEAR\n LAST_FISCAL_YEAR\n THIS_FISCAL_YEAR\n NEXT_FISCAL_YEAR\n}\n\ntype RecordRepresentation implements Record @generic {\n Id: ID!\n ApiName: String!\n WeakEtag: Long!\n DisplayValue: String\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n SystemModstamp: DateTimeValue\n RecordTypeId(fallback: Boolean): IDValue\n SetupUserSpecialField: BooleanValue @fieldCategory\n IntValue: IntValue @fieldCategory\n StringValue: StringValue @fieldCategory\n BooleanValue: BooleanValue @fieldCategory\n IDValue: IDValue @fieldCategory\n DateTimeValue: DateTimeValue @fieldCategory\n TimeValue: TimeValue @fieldCategory\n DateValue: DateValue @fieldCategory\n TextAreaValue: TextAreaValue @fieldCategory\n LongTextAreaValue: LongTextAreaValue @fieldCategory\n RichTextAreaValue: RichTextAreaValue @fieldCategory\n PhoneNumberValue: PhoneNumberValue @fieldCategory\n EmailValue: EmailValue @fieldCategory\n UrlValue: UrlValue @fieldCategory\n EncryptedStringValue: EncryptedStringValue @fieldCategory\n CurrencyValue: CurrencyValue @fieldCategory\n LongitudeValue: LongitudeValue @fieldCategory\n LatitudeValue: LatitudeValue @fieldCategory\n PicklistValue: PicklistValue @fieldCategory\n MultiPicklistValue: MultiPicklistValue @fieldCategory\n LongValue: LongValue @fieldCategory\n DoubleValue: DoubleValue @fieldCategory\n PercentValue: PercentValue @fieldCategory\n Base64Value: Base64Value @fieldCategory\n JSONValue: JSONValue @fieldCategory\n AnyType: AnyType @fieldCategory\n parentRelationship: RecordRepresentation @fieldCategory\n polymorphicParentRelationship: PolymorphicParentRelationship @fieldCategory\n childRelationship(first: Int, after: String, where: RecordFilter, orderBy: RecordOrderBy, upperBound: Int): RecordConnection @fieldCategory\n CompoundField: CompoundField @fieldCategory\n}\n\ninput OrderByGeolocationClause {\n distance: DistanceInput\n order: ResultOrder\n nulls: NullOrder\n}\n\ntype TextAreaAggregate implements FieldValue {\n value: TextArea\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n label: String\n max: TextAreaValue\n min: TextAreaValue\n}\n\nenum GroupByType {\n GROUP_BY\n ROLLUP\n CUBE\n}\n\nenum ResultsOrder {\n ASC\n DESC\n}\n\ntype PicklistAggregate implements FieldValue {\n value: Picklist\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n label: String\n max: PicklistValue\n min: PicklistValue\n}\n\ninput RecordUpdateRepresentation @generic {\n Int: Int @fieldCategory\n String: String @fieldCategory\n Boolean: Boolean @fieldCategory\n ID: IdOrRef @fieldCategory\n DateTime: DateTime @fieldCategory\n Time: Time @fieldCategory\n Date: Date @fieldCategory\n TextArea: TextArea @fieldCategory\n LongTextArea: LongTextArea @fieldCategory\n RichTextArea: RichTextArea @fieldCategory\n PhoneNumber: PhoneNumber @fieldCategory\n Email: Email @fieldCategory\n Url: Url @fieldCategory\n EncryptedString: EncryptedString @fieldCategory\n Currency: Currency @fieldCategory\n Longitude: Longitude @fieldCategory\n Latitude: Latitude @fieldCategory\n Picklist: Picklist @fieldCategory\n MultiPicklist: MultiPicklist @fieldCategory\n Long: Long @fieldCategory\n Double: Double @fieldCategory\n Percent: Percent @fieldCategory\n Base64: Base64 @fieldCategory\n JSON: JSON @fieldCategory\n}\n\ntype DateTimeValue implements FieldValue {\n value: DateTime\n displayValue: String\n format: String\n}\n\n\"Input to the mutation to delete a Record\"\ninput RecordDeleteInput {\n \"The ID of the Record to delete\"\n Id: IdOrRef!\n}\n\ntype ListOrder @team(name: \"Lists Platform\") {\n fieldApiName: String!\n sortDirection: ResultOrder\n}\n\nenum AggregateOrderByStringFunction {\n COUNT\n COUNT_DISTINCT\n MAX\n MIN\n}\n\ntype LongValue implements FieldValue {\n value: Long\n displayValue: String\n format: String\n}\n\ntype DependentField {\n controllingField: String!\n dependentFields: [String]!\n}\n\ntype PercentValue implements FieldValue {\n value: Percent\n displayValue: String\n format: String\n}\n\ninput NoFunctionAggregateOrderByClause {\n order: ResultsOrder\n nulls: NullsOrder\n}\n\ntype RecordConnection @generic {\n edges: [RecordEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n pageResultCount: Int!\n}\n\ntype FilteredLookupInfo {\n controllingFields: [String]!\n dependent: Boolean!\n optionalFilter: Boolean!\n}\n\ninput PhoneNumberOperators {\n eq: PhoneNumber\n ne: PhoneNumber\n like: PhoneNumber\n lt: PhoneNumber\n gt: PhoneNumber\n lte: PhoneNumber\n gte: PhoneNumber\n in: [PhoneNumber]\n nin: [PhoneNumber]\n}\n\ntype ObjectInfo {\n ApiName: String!\n childRelationships: [ChildRelationship]!\n createable: Boolean!\n custom: Boolean!\n defaultRecordTypeId: ID\n deletable: Boolean!\n dependentFields: [DependentField]!\n feedEnabled: Boolean!\n fields: [Field]!\n keyPrefix: String\n label: String\n labelPlural: String\n layoutable: Boolean!\n mruEnabled: Boolean!\n nameFields: [String]!\n queryable: Boolean!\n recordTypeInfos: [RecordTypeInfo]!\n searchable: Boolean!\n themeInfo: ThemeInfo\n updateable: Boolean!\n locale: String\n}\n\ninput LongitudeOperators {\n eq: Longitude\n ne: Longitude\n lt: Longitude\n gt: Longitude\n lte: Longitude\n gte: Longitude\n in: [Longitude]\n nin: [Longitude]\n}\n\ninterface Field {\n ApiName: String!\n calculated: Boolean!\n compound: Boolean!\n compoundComponentName: String\n compoundFieldName: String\n controllerName: String\n controllingFields: [String]!\n createable: Boolean!\n custom: Boolean!\n dataType: DataType\n extraTypeInfo: FieldExtraTypeInfo\n filterable: Boolean!\n filteredLookupInfo: FilteredLookupInfo\n highScaleNumber: Boolean!\n htmlFormatted: Boolean!\n inlineHelpText: String\n label: String\n nameField: Boolean!\n polymorphicForeignKey: Boolean!\n precision: Int\n reference: Boolean!\n referenceTargetField: String\n referenceToInfos: [ReferenceToInfo]!\n relationshipName: String\n required: Boolean!\n scale: Int\n searchPrefilterable: Boolean\n sortable: Boolean!\n updateable: Boolean!\n}\n\ntype StandardField implements Field {\n ApiName: String!\n calculated: Boolean!\n compound: Boolean!\n compoundComponentName: String\n compoundFieldName: String\n controllerName: String\n controllingFields: [String]!\n createable: Boolean!\n custom: Boolean!\n dataType: DataType\n extraTypeInfo: FieldExtraTypeInfo\n filterable: Boolean!\n filteredLookupInfo: FilteredLookupInfo\n highScaleNumber: Boolean!\n htmlFormatted: Boolean!\n inlineHelpText: String\n label: String\n nameField: Boolean!\n polymorphicForeignKey: Boolean!\n precision: Int\n reference: Boolean!\n referenceTargetField: String\n referenceToInfos: [ReferenceToInfo]!\n relationshipName: String\n required: Boolean!\n scale: Int\n searchPrefilterable: Boolean\n sortable: Boolean!\n updateable: Boolean!\n}\n\ntype PicklistField implements Field {\n ApiName: String!\n calculated: Boolean!\n compound: Boolean!\n compoundComponentName: String\n compoundFieldName: String\n controllerName: String\n controllingFields: [String]!\n createable: Boolean!\n custom: Boolean!\n dataType: DataType\n extraTypeInfo: FieldExtraTypeInfo\n filterable: Boolean!\n filteredLookupInfo: FilteredLookupInfo\n highScaleNumber: Boolean!\n htmlFormatted: Boolean!\n inlineHelpText: String\n label: String\n nameField: Boolean!\n polymorphicForeignKey: Boolean!\n picklistValuesByRecordTypeIDs: [PicklistValueByRecordTypeIDs]\n precision: Int\n reference: Boolean!\n referenceTargetField: String\n referenceToInfos: [ReferenceToInfo]!\n relationshipName: String\n required: Boolean!\n scale: Int\n searchPrefilterable: Boolean\n sortable: Boolean!\n updateable: Boolean!\n}\n\ntype PicklistValueByRecordTypeIDs {\n recordTypeID: String!\n controllerValues: [ControllerValues!]\n picklistValues: [PicklistValues!]\n defaultValue: PicklistValues\n}\n\ntype ControllerValues {\n value: String\n index: Int\n}\n\ntype PicklistValues {\n value: String\n label: String\n validFor: [Int]\n attributes: PicklistAttributes\n}\n\ntype PicklistAttributes {\n picklistAtrributesValueType: String\n connectDisplayName: String\n internalName: String\n}\n\ninput DateTimeFunctionInput {\n value: DatePrimitiveOperators\n convertTimezoneValue: DatePrimitiveOperators\n}\n\ntype Base64Value implements FieldValue {\n value: Base64\n displayValue: String\n}\n\ntype CompoundField @generic {\n IntValue: IntValue @fieldCategory\n StringValue: StringValue @fieldCategory\n BooleanValue: BooleanValue @fieldCategory\n IDValue: IDValue @fieldCategory\n DateTimeValue: DateTimeValue @fieldCategory\n TimeValue: TimeValue @fieldCategory\n DateValue: DateValue @fieldCategory\n TextAreaValue: TextAreaValue @fieldCategory\n LongTextAreaValue: LongTextAreaValue @fieldCategory\n RichTextAreaValue: RichTextAreaValue @fieldCategory\n PhoneNumberValue: PhoneNumberValue @fieldCategory\n EmailValue: EmailValue @fieldCategory\n UrlValue: UrlValue @fieldCategory\n EncryptedStringValue: EncryptedStringValue @fieldCategory\n CurrencyValue: CurrencyValue @fieldCategory\n LongitudeValue: LongitudeValue @fieldCategory\n LatitudeValue: LatitudeValue @fieldCategory\n PicklistValue: PicklistValue @fieldCategory\n MultiPicklistValue: MultiPicklistValue @fieldCategory\n LongValue: LongValue @fieldCategory\n DoubleValue: DoubleValue @fieldCategory\n PercentValue: PercentValue @fieldCategory\n Base64Value: Base64Value @fieldCategory\n JSONValue: JSONValue @fieldCategory\n}\n\ninput RecordUpdateInput @generic {\n Id: IdOrRef!\n record: RecordUpdateRepresentation! @fieldCategory\n}\n\ninput DateTimeInput {\n value: DateTime\n literal: DateLiteral\n range: DateRange\n}\n\ntype ChildRelationship {\n childObjectApiName: String!\n fieldName: String\n junctionIdListNames: [String]!\n junctionReferenceTo: [String]!\n relationshipName: String\n objectInfo: ObjectInfo\n}\n\ntype RecordResult @generic {\n aggregate: RecordAggregate\n}\n\ntype PageInfo {\n hasNextPage: Boolean!\n hasPreviousPage: Boolean!\n startCursor: String\n endCursor: String\n}\n\ntype CurrencyValue implements FieldValue {\n value: Currency\n displayValue: String\n format: String\n convertCurrency: Currency\n}\n\ntype DateFunctionAggregation {\n value: Long\n format: String\n}\n\ninput PolymorphicParentRelationshipRecordOrderBy @generic {\n RecordOrderBy: RecordOrderBy @fieldCategory\n}\n\ntype RecordCreatePayload @generic {\n Record: RecordRepresentation\n}\n\ninput PolymorphicParentRelationshipGroupBy @generic {\n RecordGroupBy: RecordGroupBy @fieldCategory\n}\n\ntype BooleanValue implements FieldValue {\n value: Boolean\n displayValue: String\n}\n\ntype StringValue implements FieldValue {\n value: String\n displayValue: String\n label: String\n}\n\ninput IdOperators {\n eq: ID\n ne: ID\n lt: ID\n gt: ID\n lte: ID\n gte: ID\n in: [ID]\n nin: [ID]\n inq: JoinInput\n ninq: JoinInput\n}\n\ntype PhoneNumberAggregate implements FieldValue {\n value: PhoneNumber\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: PhoneNumberValue\n min: PhoneNumberValue\n}\n\ntype CurrencyAggregate implements FieldValue {\n value: Currency\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n max: CurrencyValue\n min: CurrencyValue\n sum: CurrencyValue\n}\n\ninput BooleanOperators {\n eq: Boolean\n ne: Boolean\n}\n\ntype MultiPicklistValue implements FieldValue {\n value: MultiPicklist\n displayValue: String\n label: String\n}\n\ntype ListColumn @team(name: \"Lists Platform\") {\n fieldApiName: String!\n label: String!\n lookupId: String\n sortable: Boolean\n}\n\ntype LatitudeAggregate implements FieldValue {\n value: Latitude\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n max: LatitudeValue\n min: LatitudeValue\n sum: DoubleValue\n}\n\ninput CurrencyOperators {\n eq: Currency\n ne: Currency\n lt: Currency\n gt: Currency\n lte: Currency\n gte: Currency\n in: [Currency]\n nin: [Currency]\n}\n\ntype LatitudeValue implements FieldValue {\n value: Latitude\n displayValue: String\n}\n\ninput GroupByClause {\n group: Boolean\n}\n\ntype RecordEdge @generic {\n node: RecordRepresentation\n cursor: String!\n}\n\nenum NullOrder {\n FIRST\n LAST\n}\n\ntype PhoneNumberValue implements FieldValue {\n value: PhoneNumber\n displayValue: String\n}\n\n# RecordScope is an empty enum\n# enum RecordScope @generic {\n# }\n\ninput TextAreaOperators {\n eq: TextArea\n ne: TextArea\n like: TextArea\n lt: TextArea\n gt: TextArea\n lte: TextArea\n gte: TextArea\n in: [TextArea]\n nin: [TextArea]\n}\n\ntype TextAreaValue implements FieldValue {\n value: TextArea\n displayValue: String\n label: String\n}\n\ntype RecordAggregateEdge @generic {\n node: RecordResult\n cursor: String!\n}\n\ntype ThemeInfo {\n color: String\n iconUrl: String\n}\n\ntype UrlAggregate implements FieldValue {\n value: Url\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: UrlValue\n min: UrlValue\n}\n\ntype IDValue implements FieldValue {\n value: ID\n displayValue: String\n}\n\nenum Unit {\n MI\n KM\n}\n\ninput PolymorphicParentRelationshipOrderBy @generic {\n RecordAggregateOrderBy: RecordAggregateOrderBy @fieldCategory\n}\n\nenum NullsOrder {\n FIRST\n LAST\n}\n\nenum ResultOrder {\n ASC\n DESC\n}\n\ninput RecordOrderBy @generic {\n orderableField: OrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableParentRelationship: RecordOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: PolymorphicParentRelationshipRecordOrderBy @fieldCategory\n}\n\ninput PicklistOperators {\n eq: Picklist\n ne: Picklist\n in: [Picklist]\n nin: [Picklist]\n like: Picklist\n lt: Picklist\n gt: Picklist\n lte: Picklist\n gte: Picklist\n}\n\ninput RecordFilter @generic {\n and: [RecordFilter]\n or: [RecordFilter]\n not: RecordFilter\n parentRelationshipRecordFilter: RecordFilter @fieldCategory\n polymorphicParentRelationshipRecordFilter: PolymorphicParentRelationshipRecordFilter @fieldCategory\n IntegerOperator: IntegerOperators @fieldCategory\n LongOperator: LongOperators @fieldCategory\n StringOperator: StringOperators @fieldCategory\n DoubleOperator: DoubleOperators @fieldCategory\n PercentOperator: PercentOperators @fieldCategory\n LongitudeOperator: LongitudeOperators @fieldCategory\n LatitudeOperator: LatitudeOperators @fieldCategory\n EmailOperator: EmailOperators @fieldCategory\n TextAreaOperator: TextAreaOperators @fieldCategory\n LongTextAreaOperator: LongTextAreaOperators @fieldCategory\n URLOperator: URLOperators @fieldCategory\n PhoneNumberOperator: PhoneNumberOperators @fieldCategory\n BooleanOperator: BooleanOperators @fieldCategory\n IdOperator: IdOperators @fieldCategory\n CurrencyOperator: CurrencyOperators @fieldCategory\n TimeOperator: TimeOperators @fieldCategory\n DateOperator: DateOperators @fieldCategory\n DateTimeOperator: DateTimeOperators @fieldCategory\n PicklistOperator: PicklistOperators @fieldCategory\n MultiPicklistOperator: MultiPicklistOperators @fieldCategory\n GeolocationOperator: GeolocationOperators @fieldCategory\n}\n\ntype TimeValue implements FieldValue {\n value: Time\n displayValue: String\n format: String\n}\n\ninput GeolocationOperators {\n lt: GeolocationInput\n gt: GeolocationInput\n}\n\ninput LatitudeOperators {\n eq: Latitude\n ne: Latitude\n lt: Latitude\n gt: Latitude\n lte: Latitude\n gte: Latitude\n in: [Latitude]\n nin: [Latitude]\n}\n\ntype IntAggregate implements FieldValue {\n value: Int\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n grouping: IntValue\n max: IntValue\n min: IntValue\n sum: LongValue\n}\n\ntype RecordAggregate @generic {\n ApiName: String!\n BooleanAggregate: BooleanAggregate @fieldCategory\n CurrencyAggregate: CurrencyAggregate @fieldCategory\n DateAggregate: DateAggregate @fieldCategory\n DoubleAggregate: DoubleAggregate @fieldCategory\n EmailAggregate: EmailAggregate @fieldCategory\n IDAggregate: IDAggregate @fieldCategory\n IntAggregate: IntAggregate @fieldCategory\n LatitudeAggregate: LatitudeAggregate @fieldCategory\n LongitudeAggregate: LongitudeAggregate @fieldCategory\n LongAggregate: LongAggregate @fieldCategory\n PercentAggregate: PercentAggregate @fieldCategory\n PhoneNumberAggregate: PhoneNumberAggregate @fieldCategory\n PicklistAggregate: PicklistAggregate @fieldCategory\n StringAggregate: StringAggregate @fieldCategory\n TextAreaAggregate: TextAreaAggregate @fieldCategory\n TimeAggregate: TimeAggregate @fieldCategory\n UrlAggregate: UrlAggregate @fieldCategory\n parentRelationship: RecordAggregate @fieldCategory\n polymorphicParentRelationship: PolymorphicAggregateParentRelationship @fieldCategory\n}\n\nenum SObject__FieldType {\n ALL\n STANDARD\n CUSTOM\n}\n\ntype JSONValue implements FieldValue {\n value: JSON\n displayValue: String\n}\n\ntype EmailValue implements FieldValue {\n value: Email\n displayValue: String\n}\n\ninput DateFunctionInput {\n value: LongOperators\n convertTimezoneValue: LongOperators\n}\n\n# Mutations are not supported by Luvio.\n# type Mutation {\n# uiapi(input: UIAPIMutationsInput): UIAPIMutations!\n# }\n\nunion PolymorphicAggregateParentRelationship @generic = RecordAggregate\n\ninput LongTextAreaOperators {\n eq: LongTextArea\n ne: LongTextArea\n like: LongTextArea\n lt: LongTextArea\n gt: LongTextArea\n lte: LongTextArea\n gte: LongTextArea\n in: [LongTextArea]\n nin: [LongTextArea]\n}\n\ninput DateTimeOperators {\n eq: DateTimeInput\n ne: DateTimeInput\n lt: DateTimeInput\n gt: DateTimeInput\n lte: DateTimeInput\n gte: DateTimeInput\n in: [DateTimeInput]\n nin: [DateTimeInput]\n DAY_IN_WEEK: DateFunctionInput\n DAY_IN_MONTH: DateFunctionInput\n DAY_IN_YEAR: DateFunctionInput\n WEEK_IN_MONTH: DateFunctionInput\n WEEK_IN_YEAR: DateFunctionInput\n CALENDAR_MONTH: DateFunctionInput\n CALENDAR_QUARTER: DateFunctionInput\n CALENDAR_YEAR: DateFunctionInput\n FISCAL_MONTH: DateFunctionInput\n FISCAL_QUARTER: DateFunctionInput\n FISCAL_YEAR: DateFunctionInput\n DAY_ONLY: DateTimeFunctionInput\n HOUR_IN_DAY: DateFunctionInput\n}\n\ntype BooleanAggregate implements FieldValue {\n value: Boolean\n displayValue: String\n grouping: IntValue\n}\n\ntype RecordQueryAggregate {\n # scope should be RecordScope, but it is an empty enum\n recordQueryAggregate(first: Int, after: String, where: RecordFilter, orderBy: RecordAggregateOrderBy, scope: String, groupBy: RecordGroupBy, upperBound: Int): RecordAggregateConnection @fieldCategory\n}\n\ninput RecordCreateRepresentation @generic {\n Int: Int @fieldCategory\n String: String @fieldCategory\n Boolean: Boolean @fieldCategory\n ID: IdOrRef @fieldCategory\n DateTime: DateTime @fieldCategory\n Time: Time @fieldCategory\n Date: Date @fieldCategory\n TextArea: TextArea @fieldCategory\n LongTextArea: LongTextArea @fieldCategory\n RichTextArea: RichTextArea @fieldCategory\n PhoneNumber: PhoneNumber @fieldCategory\n Email: Email @fieldCategory\n Url: Url @fieldCategory\n EncryptedString: EncryptedString @fieldCategory\n Currency: Currency @fieldCategory\n Longitude: Longitude @fieldCategory\n Latitude: Latitude @fieldCategory\n Picklist: Picklist @fieldCategory\n MultiPicklist: MultiPicklist @fieldCategory\n Long: Long @fieldCategory\n Double: Double @fieldCategory\n Percent: Percent @fieldCategory\n Base64: Base64 @fieldCategory\n JSON: JSON @fieldCategory\n}\n\nenum FieldExtraTypeInfo {\n IMAGE_URL\n EXTERNAL_LOOKUP\n INDIRECT_LOOKUP\n PERSONNAME\n SWITCHABLE_PERSONNAME\n PLAINTEXTAREA\n RICHTEXTAREA\n}\n\ntype RateLimit {\n cost: Long\n limit: Long\n remaining: Long\n resetAt: DateTime\n}\n\ninput DateRange {\n last_n_days: Int\n next_n_days: Int\n last_n_weeks: Int\n next_n_weeks: Int\n last_n_months: Int\n next_n_months: Int\n last_n_quarters: Int\n next_n_quarters: Int\n last_n_fiscal_quarters: Int\n next_n_fiscal_quarters: Int\n last_n_years: Int\n next_n_years: Int\n last_n_fiscal_years: Int\n next_n_fiscal_years: Int\n n_days_ago: Int\n n_weeks_ago: Int\n n_months_ago: Int\n n_quarters_ago: Int\n n_years_ago: Int\n n_fiscal_quarters_ago: Int\n n_fiscal_years_ago: Int\n}\n\ntype UIAPIMutations {\n recordCreate(input: RecordCreateInput!): RecordCreatePayload @fieldCategory\n recordDelete(input: RecordDeleteInput!): RecordDeletePayload @fieldCategory\n recordUpdate(input: RecordUpdateInput!): RecordUpdatePayload @fieldCategory\n}\n\ninput IntegerOperators {\n eq: Int\n ne: Int\n lt: Int\n gt: Int\n lte: Int\n gte: Int\n in: [Int]\n nin: [Int]\n}\n\ntype EncryptedStringValue implements FieldValue {\n value: EncryptedString\n displayValue: String\n}\n\ninterface Record {\n Id: ID!\n ApiName: String!\n WeakEtag: Long!\n DisplayValue: String\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n SystemModstamp: DateTimeValue\n RecordTypeId(fallback: Boolean): IDValue\n}\n\ninput PolymorphicParentRelationshipRecordFilter @generic {\n RecordFilter: RecordFilter @fieldCategory\n}\n\n\"\"\"\nA type that can contain any of the following types: Boolean, Date, DateTime, Double, String.\nFormat and Label are not supported by AnyType and displayValue is an unformatted string representation of the value.\n\"\"\"\nunion AnyType = BooleanValue | DateValue | DateTimeValue | DoubleValue | StringValue\n\ninput AggregateOrderByNumberClause {\n function: AggregateOrderByNumberFunction\n order: ResultsOrder\n nulls: NullsOrder\n}\n\ninput DateInput {\n value: Date\n literal: DateLiteral\n range: DateRange\n}\n\ninput RecordGroupBy @generic {\n groupableField: GroupByClause @fieldCategory\n groupableDateField: GroupByDateFunction @fieldCategory\n groupableParentRelationship: RecordGroupBy @fieldCategory\n groupablePolymorphicParentRelationship: PolymorphicParentRelationshipGroupBy @fieldCategory\n type: GroupByType = GROUP_BY\n}\n\ntype RecordQuery {\n # scope should be RecordScope, but it is an empty enum\n recordQuery(first: Int, after: String, where: RecordFilter, orderBy: RecordOrderBy, scope: String, upperBound: Int, updateMRU: Boolean): RecordConnection @fieldCategory\n}\n\ninput RecordAggregateOrderBy @generic {\n orderableNumberField: AggregateOrderByNumberClause @fieldCategory\n orderableStringField: AggregateOrderByStringClause @fieldCategory\n orderableField: NoFunctionAggregateOrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableParentRelationship: RecordAggregateOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: PolymorphicParentRelationshipOrderBy @fieldCategory\n}\n\ninput IgnoreRule {\n rule: String!\n teamName: String!\n justification: String!\n}\n\ndirective @generic on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT\ndirective @fieldCategory on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION | ENUM_VALUE\ndirective @category(name: String!) on FIELD\n\"Specifies the team name for a type\"\ndirective @team(name: String!) on OBJECT | INPUT_OBJECT | INTERFACE | ENUM | UNION | SCALAR\n\"Specifies the validation rules to ignore for this element.\"\ndirective @ignoreRule(rules: [IgnoreRule!]!) on OBJECT\n | INPUT_OBJECT\n | INTERFACE\n | ENUM\n | UNION\n | SCALAR\n | FIELD_DEFINITION\n | INPUT_FIELD_DEFINITION\n | ARGUMENT_DEFINITION\n | ENUM_VALUE\ndirective @optional on FIELD\n\ntype __Type {\n kind: __TypeKind!\n name: String\n description: String\n fields(includeDeprecated: Boolean = false): [__Field!]\n interfaces: [__Type!]\n possibleTypes: [__Type!]\n enumValues(includeDeprecated: Boolean = false): [__EnumValue!]\n inputFields: [__InputValue!]\n ofType: __Type\n}";
48043
48297
 
48044
48298
  // Define additional schema that is missing from uiapi that we use in local evaluation
48045
48299
  const additionalSchemaDefinitions = /* GraphQL */ `
@@ -57804,14 +58058,27 @@ const _FetchNetworkCommand = class _FetchNetworkCommand extends NetworkCommand {
57804
58058
  constructor(services) {
57805
58059
  super(services);
57806
58060
  this.services = services;
58061
+ this.additionalNullResponses = [];
57807
58062
  }
57808
- fetch() {
58063
+ fetch(contextSeed) {
57809
58064
  try {
57810
- return this.convertFetchResponseToData(this.services.fetch(...this.fetchParams));
58065
+ const [input, init] = this.fetchParams;
58066
+ const initWithSeed = contextSeed === void 0 ? init : { ...init, __contextSeed: contextSeed };
58067
+ const fetchCall = initWithSeed === void 0 ? this.services.fetch(input) : this.services.fetch(input, initWithSeed);
58068
+ return this.convertFetchResponseToData(fetchCall);
57811
58069
  } catch (reason) {
57812
58070
  return resolvedPromiseLike$2(err$1(toError(reason)));
57813
58071
  }
57814
58072
  }
58073
+ isSemanticNullResponse(response) {
58074
+ return this.additionalNullResponses.includes(response.status);
58075
+ }
58076
+ isProtocolNoBodyStatus(status) {
58077
+ return status === 204 || status === 205;
58078
+ }
58079
+ isUndeclaredNoBodyResponse(response) {
58080
+ return this.isProtocolNoBodyStatus(response.status) && !this.isSemanticNullResponse(response);
58081
+ }
57815
58082
  async coerceError(errorResponse) {
57816
58083
  return toError(errorResponse.statusText);
57817
58084
  }
@@ -57819,10 +58086,24 @@ const _FetchNetworkCommand = class _FetchNetworkCommand extends NetworkCommand {
57819
58086
  return response.then(
57820
58087
  (response2) => {
57821
58088
  if (response2.ok) {
57822
- return response2.json().then(
57823
- (json) => ok$1(json),
57824
- (reason) => err$1(toError(reason))
57825
- ).finally(() => {
58089
+ let resultPromise;
58090
+ if (this.isSemanticNullResponse(response2)) {
58091
+ resultPromise = Promise.resolve(ok$1(null));
58092
+ } else if (this.isUndeclaredNoBodyResponse(response2)) {
58093
+ resultPromise = Promise.resolve(
58094
+ err$1(
58095
+ toError(
58096
+ `Unexpected ${response2.status} response: no-content status was not declared in the API specification. Declare this response in your OAS without a content property.`
58097
+ )
58098
+ )
58099
+ );
58100
+ } else {
58101
+ resultPromise = response2.json().then(
58102
+ (json) => ok$1(json),
58103
+ (reason) => err$1(toError(reason))
58104
+ );
58105
+ }
58106
+ return resultPromise.finally(() => {
57826
58107
  try {
57827
58108
  this.afterRequestHooks({ statusCode: response2.status });
57828
58109
  } catch {
@@ -57869,6 +58150,7 @@ class HttpCacheControlCommand extends CacheControlCommand {
57869
58150
  constructor(services) {
57870
58151
  super(services);
57871
58152
  this.services = services;
58153
+ this.additionalNullResponses = [];
57872
58154
  }
57873
58155
  requestFromNetwork() {
57874
58156
  return this.fetch();
@@ -57880,6 +58162,15 @@ class HttpCacheControlCommand extends CacheControlCommand {
57880
58162
  return resolvedPromiseLike$2(err$1(toError(reason)));
57881
58163
  }
57882
58164
  }
58165
+ isSemanticNullResponse(response) {
58166
+ return this.additionalNullResponses.includes(response.status);
58167
+ }
58168
+ isProtocolNoBodyStatus(status) {
58169
+ return status === 204 || status === 205;
58170
+ }
58171
+ isUndeclaredNoBodyResponse(response) {
58172
+ return this.isProtocolNoBodyStatus(response.status) && !this.isSemanticNullResponse(response);
58173
+ }
57883
58174
  async coerceError(errorResponse) {
57884
58175
  return toError(errorResponse.statusText);
57885
58176
  }
@@ -57890,12 +58181,26 @@ class HttpCacheControlCommand extends CacheControlCommand {
57890
58181
  return response.then(
57891
58182
  (response2) => {
57892
58183
  if (response2.ok) {
57893
- return response2.json().then(
57894
- (json) => {
57895
- return this.processFetchReturnValue(json);
57896
- },
57897
- (reason) => err$1(toError(reason))
57898
- ).finally(() => {
58184
+ let resultPromise;
58185
+ if (this.isSemanticNullResponse(response2)) {
58186
+ resultPromise = Promise.resolve(ok$1(null));
58187
+ } else if (this.isUndeclaredNoBodyResponse(response2)) {
58188
+ resultPromise = Promise.resolve(
58189
+ err$1(
58190
+ toError(
58191
+ `Unexpected ${response2.status} response: no-content status was not declared in the API specification. Declare this response in your OAS without a content property.`
58192
+ )
58193
+ )
58194
+ );
58195
+ } else {
58196
+ resultPromise = response2.json().then(
58197
+ (json) => {
58198
+ return this.processFetchReturnValue(json);
58199
+ },
58200
+ (reason) => err$1(toError(reason))
58201
+ );
58202
+ }
58203
+ return resultPromise.finally(() => {
57899
58204
  try {
57900
58205
  this.afterRequestHooks({ statusCode: response2.status });
57901
58206
  } catch {
@@ -58883,7 +59188,7 @@ function buildServiceDescriptor$b(luvio) {
58883
59188
  },
58884
59189
  };
58885
59190
  }
58886
- // version: 1.428.0-dev2-2d5e0a6e5f
59191
+ // version: 1.428.0-dev20-d72ac06681
58887
59192
 
58888
59193
  /**
58889
59194
  * Copyright (c) 2022, Salesforce, Inc.,
@@ -58909,7 +59214,7 @@ function buildServiceDescriptor$a(notifyRecordUpdateAvailable, getNormalizedLuvi
58909
59214
  },
58910
59215
  };
58911
59216
  }
58912
- // version: 1.428.0-dev2-2d5e0a6e5f
59217
+ // version: 1.428.0-dev20-d72ac06681
58913
59218
 
58914
59219
  /*!
58915
59220
  * Copyright (c) 2022, Salesforce, Inc.,
@@ -59394,6 +59699,9 @@ function invalidSchemaResponseWithError(error) {
59394
59699
  return err$1([error]);
59395
59700
  }
59396
59701
  function validateJsonSchema(data, schema, path = "$", document = schema) {
59702
+ return validateJsonSchemaInternal(data, schema, path, document, /* @__PURE__ */ new Map());
59703
+ }
59704
+ function validateJsonSchemaInternal(data, schema, path, document, visited) {
59397
59705
  if (schema === true) return validSchemaResponse();
59398
59706
  if (schema === false)
59399
59707
  return invalidSchemaResponseWithError(
@@ -59402,22 +59710,22 @@ function validateJsonSchema(data, schema, path = "$", document = schema) {
59402
59710
  const dataType = data === null ? "null" : Array.isArray(data) ? "array" : typeof data;
59403
59711
  const errorCollector = new JsonSchemaErrorCollector();
59404
59712
  if ("anyOf" in schema) {
59405
- errorCollector.append(validateAnyOf(data, schema, path, document));
59713
+ errorCollector.append(validateAnyOf(data, schema, path, document, visited));
59406
59714
  } else if ("oneOf" in schema) {
59407
- errorCollector.append(validateOneOf(data, schema, path, document));
59715
+ errorCollector.append(validateOneOf(data, schema, path, document, visited));
59408
59716
  } else if ("allOf" in schema) {
59409
- errorCollector.append(validateAllOf(data, schema, path, document));
59717
+ errorCollector.append(validateAllOf(data, schema, path, document, visited));
59410
59718
  } else if ("not" in schema) {
59411
- errorCollector.append(validateNot(data, schema, path, document));
59719
+ errorCollector.append(validateNot(data, schema, path, document, visited));
59412
59720
  } else if ("$ref" in schema) {
59413
- errorCollector.append(validateRef(data, schema, path, document));
59721
+ errorCollector.append(validateRef(data, schema, path, document, visited));
59414
59722
  } else if ("type" in schema) {
59415
59723
  if (schema.type === "object") {
59416
59724
  if (dataType !== "object") {
59417
59725
  errorCollector.add(incorrectTypeError("object", dataType, path));
59418
59726
  } else {
59419
59727
  errorCollector.append(
59420
- validateObject(data, schema, path, document)
59728
+ validateObject(data, schema, path, document, visited)
59421
59729
  );
59422
59730
  }
59423
59731
  } else if (schema.type === "array") {
@@ -59425,7 +59733,7 @@ function validateJsonSchema(data, schema, path = "$", document = schema) {
59425
59733
  errorCollector.add(incorrectTypeError("array", dataType, path));
59426
59734
  } else {
59427
59735
  errorCollector.append(
59428
- validateArray(data, schema, path, document)
59736
+ validateArray(data, schema, path, document, visited)
59429
59737
  );
59430
59738
  }
59431
59739
  } else {
@@ -59442,16 +59750,17 @@ function validateJsonSchema(data, schema, path = "$", document = schema) {
59442
59750
  }
59443
59751
  return errorCollector.toValidationResponse();
59444
59752
  }
59445
- function validateAnyOf(data, schema, path, document) {
59753
+ function validateAnyOf(data, schema, path, document, visited) {
59446
59754
  let isValid = false;
59447
59755
  const errorCollector = new JsonSchemaErrorCollector();
59448
59756
  for (let i = 0, { length } = schema.anyOf; i < length; i++) {
59449
59757
  const element = schema.anyOf[i];
59450
- const validationResponse = validateJsonSchema(
59758
+ const validationResponse = validateJsonSchemaInternal(
59451
59759
  data,
59452
59760
  element,
59453
59761
  `${path}.anyOf[${i}]`,
59454
- document
59762
+ document,
59763
+ visited
59455
59764
  );
59456
59765
  if (validationResponse.isOk()) {
59457
59766
  isValid = true;
@@ -59468,13 +59777,22 @@ function validateAnyOf(data, schema, path, document) {
59468
59777
  }
59469
59778
  return validSchemaResponse();
59470
59779
  }
59471
- function validateOneOf(data, schema, path, document) {
59780
+ function validateOneOf(data, schema, path, document, visited) {
59781
+ if (schema.discriminator !== void 0) {
59782
+ return validateDiscriminatedOneOf(data, schema.discriminator, path, document, visited);
59783
+ }
59472
59784
  let validSubShemaPaths = [];
59473
59785
  const errorCollector = new JsonSchemaErrorCollector();
59474
59786
  for (let i = 0, { length } = schema.oneOf; i < length; i++) {
59475
59787
  const element = schema.oneOf[i];
59476
59788
  const oneOfPath = `${path}.oneOf[${i}]`;
59477
- const validationResponse = validateJsonSchema(data, element, oneOfPath, document);
59789
+ const validationResponse = validateJsonSchemaInternal(
59790
+ data,
59791
+ element,
59792
+ oneOfPath,
59793
+ document,
59794
+ visited
59795
+ );
59478
59796
  if (validationResponse.isOk()) {
59479
59797
  validSubShemaPaths.push(oneOfPath);
59480
59798
  } else {
@@ -59496,16 +59814,45 @@ function validateOneOf(data, schema, path, document) {
59496
59814
  }
59497
59815
  return validSchemaResponse();
59498
59816
  }
59499
- function validateAllOf(data, schema, path, document) {
59817
+ function validateDiscriminatedOneOf(data, discriminator, path, document, visited) {
59818
+ if (data === null || typeof data !== "object" || Array.isArray(data)) {
59819
+ return invalidSchemaResponseWithError(incorrectTypeError("object", typeof data, path));
59820
+ }
59821
+ const { propertyName, mapping } = discriminator;
59822
+ const discriminatorValue = data[propertyName];
59823
+ if (discriminatorValue === void 0) {
59824
+ return invalidSchemaResponseWithError(
59825
+ new MissingRequiredPropertyError(
59826
+ `Object at path '${path}' is missing required discriminator property '${propertyName}'.`
59827
+ )
59828
+ );
59829
+ }
59830
+ if (typeof discriminatorValue !== "string") {
59831
+ return invalidSchemaResponseWithError(
59832
+ incorrectTypeError("string", typeof discriminatorValue, `${path}.${propertyName}`)
59833
+ );
59834
+ }
59835
+ const targetRef = mapping[discriminatorValue];
59836
+ if (targetRef === void 0) {
59837
+ return invalidSchemaResponseWithError(
59838
+ new JsonSchemaViolationError(
59839
+ `Discriminator value '${discriminatorValue}' at '${path}.${propertyName}' is not in the mapping. Expected one of: [${Object.keys(mapping).join(", ")}].`
59840
+ )
59841
+ );
59842
+ }
59843
+ return validateJsonSchemaInternal(data, { $ref: targetRef }, path, document, visited);
59844
+ }
59845
+ function validateAllOf(data, schema, path, document, visited) {
59500
59846
  let isValid = true;
59501
59847
  const errorCollector = new JsonSchemaErrorCollector();
59502
59848
  for (let i = 0, { length } = schema.allOf; i < length; i++) {
59503
59849
  const element = schema.allOf[i];
59504
- const validationResponse = validateJsonSchema(
59850
+ const validationResponse = validateJsonSchemaInternal(
59505
59851
  data,
59506
59852
  element,
59507
59853
  `${path}.allOf[${i}]`,
59508
- document
59854
+ document,
59855
+ visited
59509
59856
  );
59510
59857
  if (!validationResponse.isOk()) {
59511
59858
  errorCollector.append(validationResponse);
@@ -59519,8 +59866,14 @@ function validateAllOf(data, schema, path, document) {
59519
59866
  }
59520
59867
  return errorCollector.toValidationResponse();
59521
59868
  }
59522
- function validateNot(data, schema, path, document) {
59523
- const validationResponse = validateJsonSchema(data, schema.not, path, document);
59869
+ function validateNot(data, schema, path, document, visited) {
59870
+ const validationResponse = validateJsonSchemaInternal(
59871
+ data,
59872
+ schema.not,
59873
+ path,
59874
+ document,
59875
+ visited
59876
+ );
59524
59877
  if (validationResponse.isOk()) {
59525
59878
  return invalidSchemaResponseWithError(
59526
59879
  new JsonSchemaViolationError(
@@ -59530,7 +59883,7 @@ function validateNot(data, schema, path, document) {
59530
59883
  }
59531
59884
  return validSchemaResponse();
59532
59885
  }
59533
- function validateObject(data, schema, path, document) {
59886
+ function validateObject(data, schema, path, document, visited) {
59534
59887
  const schemaKeys = Object.keys(schema.properties);
59535
59888
  const requiredKeys = new Set(schema.required);
59536
59889
  const schemaKeySet = new Set(schemaKeys);
@@ -59538,11 +59891,12 @@ function validateObject(data, schema, path, document) {
59538
59891
  Object.keys(data).forEach((key) => {
59539
59892
  if (!schemaKeySet.has(key)) {
59540
59893
  errorCollector.append(
59541
- validateJsonSchema(
59894
+ validateJsonSchemaInternal(
59542
59895
  data[key],
59543
59896
  schema.additionalProperties,
59544
59897
  `${path}.additionalProperties[${key}]`,
59545
- document
59898
+ document,
59899
+ visited
59546
59900
  )
59547
59901
  );
59548
59902
  }
@@ -59559,18 +59913,19 @@ function validateObject(data, schema, path, document) {
59559
59913
  }
59560
59914
  if (keyInData) {
59561
59915
  errorCollector.append(
59562
- validateJsonSchema(
59916
+ validateJsonSchemaInternal(
59563
59917
  data[key],
59564
59918
  schema.properties[key],
59565
59919
  `${path}.${key}`,
59566
- document
59920
+ document,
59921
+ visited
59567
59922
  )
59568
59923
  );
59569
59924
  }
59570
59925
  }
59571
59926
  return errorCollector.toValidationResponse();
59572
59927
  }
59573
- function validateArray(data, schema, path, document) {
59928
+ function validateArray(data, schema, path, document, visited) {
59574
59929
  if (schema.minItems !== void 0 && data.length < schema.minItems) {
59575
59930
  return invalidSchemaResponseWithError(
59576
59931
  new MinItemsViolationError(
@@ -59588,7 +59943,13 @@ function validateArray(data, schema, path, document) {
59588
59943
  const errorCollector = new JsonSchemaErrorCollector();
59589
59944
  data.forEach(
59590
59945
  (element, index) => errorCollector.append(
59591
- validateJsonSchema(element, schema.items, `${path}[${index}]`, document)
59946
+ validateJsonSchemaInternal(
59947
+ element,
59948
+ schema.items,
59949
+ `${path}[${index}]`,
59950
+ document,
59951
+ visited
59952
+ )
59592
59953
  )
59593
59954
  );
59594
59955
  return errorCollector.toValidationResponse();
@@ -59623,7 +59984,7 @@ function validateScalar(data, schema, path) {
59623
59984
  }
59624
59985
  return validSchemaResponse();
59625
59986
  }
59626
- function validateRef(data, schema, path, document) {
59987
+ function validateRef(data, schema, path, document, visited) {
59627
59988
  if (!schema.$ref.startsWith("#")) {
59628
59989
  return invalidSchemaResponseWithError(
59629
59990
  new InvalidRefError(
@@ -59631,11 +59992,23 @@ function validateRef(data, schema, path, document) {
59631
59992
  )
59632
59993
  );
59633
59994
  }
59995
+ let refsForData = visited.get(data);
59996
+ if (refsForData !== void 0 && refsForData.has(schema.$ref)) {
59997
+ return validSchemaResponse();
59998
+ }
59999
+ if (refsForData === void 0) {
60000
+ refsForData = /* @__PURE__ */ new Set();
60001
+ visited.set(data, refsForData);
60002
+ }
60003
+ refsForData.add(schema.$ref);
59634
60004
  try {
59635
60005
  const schemaToValidate = findSchemaAtPath(document, schema.$ref);
59636
- return validateJsonSchema(data, schemaToValidate, path, document);
60006
+ return validateJsonSchemaInternal(data, schemaToValidate, path, document, visited);
59637
60007
  } catch (e) {
59638
60008
  return invalidSchemaResponseWithError(e);
60009
+ } finally {
60010
+ refsForData.delete(schema.$ref);
60011
+ if (refsForData.size === 0) visited.delete(data);
59639
60012
  }
59640
60013
  }
59641
60014
  function validateEnum(data, enumValue, path) {
@@ -60520,9 +60893,18 @@ function buildServiceDescriptor$1(interceptors = {
60520
60893
  return {
60521
60894
  type: "fetch",
60522
60895
  version: "1.0",
60523
- service: function(...args) {
60896
+ service: function(input, init) {
60524
60897
  var _a;
60525
- const context = (_a = interceptors.createContext) == null ? void 0 : _a.call(interceptors);
60898
+ let contextSeed;
60899
+ let cleanInit = init;
60900
+ if (init !== void 0 && "__contextSeed" in init) {
60901
+ const { __contextSeed, ...initWithoutSeed } = init;
60902
+ contextSeed = __contextSeed;
60903
+ cleanInit = Object.keys(initWithoutSeed).length === 0 ? void 0 : initWithoutSeed;
60904
+ }
60905
+ const fetchArgs = cleanInit === void 0 ? [input] : [input, cleanInit];
60906
+ const baseContext = (_a = interceptors.createContext) == null ? void 0 : _a.call(interceptors);
60907
+ const context = contextSeed === void 0 ? baseContext : { ...baseContext, ...contextSeed };
60526
60908
  const {
60527
60909
  request: requestInterceptors = [],
60528
60910
  retry: retryInterceptor = void 0,
@@ -60530,17 +60912,17 @@ function buildServiceDescriptor$1(interceptors = {
60530
60912
  finally: finallyInterceptors = []
60531
60913
  } = interceptors;
60532
60914
  const pending = requestInterceptors.reduce(
60533
- (previousPromise, interceptor) => previousPromise.then((args2) => interceptor(args2, context)),
60534
- resolvedPromiseLike$2(args)
60915
+ (previousPromise, interceptor) => previousPromise.then((args) => interceptor(args, context)),
60916
+ resolvedPromiseLike$2(fetchArgs)
60535
60917
  );
60536
- return Promise.resolve(pending).then((args2) => {
60918
+ return Promise.resolve(pending).then((args) => {
60537
60919
  if (retryInterceptor) {
60538
- return retryInterceptor(args2, retryService, context);
60920
+ return retryInterceptor(args, retryService, context);
60539
60921
  } else {
60540
60922
  if (retryService) {
60541
- return retryService.applyRetry(() => fetch(...args2));
60923
+ return retryService.applyRetry(() => fetch(...args));
60542
60924
  }
60543
- return fetch(...args2);
60925
+ return fetch(...args);
60544
60926
  }
60545
60927
  }).then((response) => {
60546
60928
  return responseInterceptors.reduce(
@@ -61569,4 +61951,4 @@ register({
61569
61951
  });
61570
61952
 
61571
61953
  export { O11Y_NAMESPACE_LDS_MOBILE, getRuntime, ingest$1o as ingestDenormalizedRecordRepresentation, initializeOneStore, registerReportObserver, reportGraphqlQueryParseError };
61572
- // version: 1.428.0-dev2-ad2109c7a1
61954
+ // version: 1.428.0-dev20-1b319a0432