@salesforce/lds-runtime-mobile 1.316.0 → 1.317.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,71 @@
1
+ import type { NetworkAdapter, ResourceRequest, Luvio, DurableStoreKeyMetadataMap } from '@luvio/engine';
2
+ import type { DraftAction, CompletedDraftAction, QueueOperation, PendingDraftAction, DraftActionMetadata, DraftQueue } from '@salesforce/lds-drafts';
3
+ import { ProcessActionResult } from '@salesforce/lds-drafts';
4
+ import type { ActionHandler, DraftIdAndKeyMapping } from '@salesforce/lds-drafts';
5
+ export type ResponseIngestionEntry<T = unknown> = {
6
+ response: T;
7
+ synchronousIngest: AbstractResourceRequestActionHandler<T, unknown>['synchronousIngest'];
8
+ buildCacheKeysForResponse: AbstractResourceRequestActionHandler<T, unknown>['buildCacheKeysFromResponse'];
9
+ };
10
+ export declare const DEFAULT_FIELD_LAST_MODIFIED_DATE = "LastModifiedDate";
11
+ export declare const DEFAULT_FIELD_CREATED_DATE = "CreatedDate";
12
+ export declare abstract class AbstractResourceRequestActionHandler<ResponseType, DraftMetadata> implements ActionHandler<ResourceRequest, DraftMetadata, ResponseType> {
13
+ protected readonly draftQueue: DraftQueue;
14
+ protected readonly networkAdapter: NetworkAdapter;
15
+ protected readonly getLuvio: () => Luvio;
16
+ ephemeralRedirects: {
17
+ [key: string]: string;
18
+ };
19
+ isIdempotencySupported: boolean;
20
+ isLdsIdempotencyWriteDisabled: boolean;
21
+ isBackdatingEnabled: boolean;
22
+ constructor(draftQueue: DraftQueue, networkAdapter: NetworkAdapter, getLuvio: () => Luvio);
23
+ enqueue(data: ResourceRequest): Promise<PendingDraftAction<ResourceRequest>>;
24
+ handleAction(action: DraftAction<ResourceRequest, ResponseType>, actionCompleted: (action: CompletedDraftAction<ResourceRequest, ResponseType>) => Promise<void>, actionErrored: (action: DraftAction<ResourceRequest, ResponseType>, retry: boolean, retryDelayInMs?: number, actionDataChanged?: boolean) => Promise<void>): Promise<ProcessActionResult>;
25
+ handleIdempotencyServerError(responseBody: any, action: DraftAction<ResourceRequest, ResponseType>, updateIdempotencyKey: boolean, ...targetErrorCodes: string[]): boolean;
26
+ isUiApiErrors(body: any): boolean;
27
+ isBackdatingError(body: any, action: DraftAction<ResourceRequest, ResponseType>): any;
28
+ buildPendingAction(request: ResourceRequest, queue: DraftAction<unknown, unknown>[]): Promise<PendingDraftAction<ResourceRequest>>;
29
+ handleActionEnqueued(_action: PendingDraftAction<ResourceRequest>): Promise<void>;
30
+ handleActionRemoved(action: DraftAction<ResourceRequest, ResponseType>): Promise<void>;
31
+ getQueueOperationsForCompletingDrafts(queue: DraftAction<unknown, unknown>[], action: CompletedDraftAction<ResourceRequest, ResponseType>): QueueOperation[];
32
+ getRedirectMappings(action: CompletedDraftAction<ResourceRequest, ResponseType>): DraftIdAndKeyMapping[] | undefined;
33
+ handleActionCompleted(action: CompletedDraftAction<ResourceRequest, ResponseType>, queueOperations: QueueOperation[], allHandlers: ActionHandler<unknown, unknown, unknown>[]): Promise<void>;
34
+ handleReplaceAction(targetAction: DraftAction<ResourceRequest, ResponseType>, sourceAction: DraftAction<ResourceRequest, ResponseType>): DraftAction<ResourceRequest, ResponseType>;
35
+ mergeActions(targetAction: DraftAction<ResourceRequest, ResponseType>, sourceAction: DraftAction<ResourceRequest, ResponseType>): DraftAction<ResourceRequest, ResponseType>;
36
+ shouldDeleteActionByTagOnRemoval(action: DraftAction<ResourceRequest, ResponseType>): boolean;
37
+ updateMetadata(_existingMetadata: DraftActionMetadata, incomingMetadata: DraftActionMetadata): DraftActionMetadata;
38
+ private isActionOfType;
39
+ protected reingestRecord(action: DraftAction<ResourceRequest, ResponseType>): Promise<void>;
40
+ getDraftIdsFromAction(action: DraftAction<ResourceRequest, ResponseType>): string[];
41
+ hasIdempotencySupport(): boolean;
42
+ ingestResponses(responses: ResponseIngestionEntry[], action: DraftAction<ResourceRequest, ResponseType>): Promise<void>;
43
+ evictKey(key: string): Promise<void>;
44
+ abstract handlerId: string;
45
+ abstract canHandlePublish(key: string): boolean;
46
+ abstract canRepresentationContainDraftMetadata(representationName: string): boolean;
47
+ /**
48
+ * Extracts or synthesizes an id from a given resource request
49
+ * @throws if the id cannot be determined or synthesized
50
+ * @param request the request to get the id from
51
+ */
52
+ abstract getIdFromRequest(request: ResourceRequest): Promise<string>;
53
+ abstract getIdFromResponseBody(responseBody: ResponseType): string;
54
+ abstract buildTagForTargetId(id: string): string;
55
+ abstract buildCacheKeysFromResponse(response: ResponseType): DurableStoreKeyMetadataMap;
56
+ abstract synchronousIngest(response: ResponseType, action: DraftAction<ResourceRequest, ResponseType>): void;
57
+ abstract getDataForAction(action: DraftAction<ResourceRequest, ResponseType>): Promise<ResponseType | undefined>;
58
+ abstract getDraftMetadata(key: string): Promise<DraftMetadata | undefined>;
59
+ abstract applyDraftsToIncomingData(key: string, data: unknown, draftMetadata: DraftMetadata | undefined, publishFn: (key: string, data: any) => void): void;
60
+ /**
61
+ * Returns true if the given targetId is a for a draft-created record
62
+ *
63
+ * @param targetId the targetId to check
64
+ */
65
+ abstract isDraftId(targetId: string): boolean;
66
+ /**
67
+ * Overlay the sourceBody over top of the targetBody
68
+ */
69
+ abstract mergeRequestBody<T = unknown>(targetBody: T, sourceBody: T): T;
70
+ }
71
+ export declare function isResourceRequestAction(action: DraftAction<unknown, unknown>): action is DraftAction<ResourceRequest, unknown>;
@@ -1,6 +1,6 @@
1
1
  import type { DurableStoreKeyMetadataMap, Luvio, NetworkAdapter, ResourceRequest } from '@luvio/engine';
2
- import { AbstractResourceRequestActionHandler } from '@salesforce/lds-drafts';
3
- import type { ResponseIngestionEntry, PendingDraftAction, DraftAction, DraftQueue, CompletedDraftAction, DraftIdAndKeyMapping } from '@salesforce/lds-drafts';
2
+ import { AbstractResourceRequestActionHandler, type ResponseIngestionEntry } from '../AbstractResourceRequestActionHandler';
3
+ import type { PendingDraftAction, DraftAction, DraftQueue, CompletedDraftAction, DraftIdAndKeyMapping } from '@salesforce/lds-drafts';
4
4
  import type { RecordEffectingHandler } from '../RecordRepresentation/actionHandlers/RecordEffectingHandler';
5
5
  import type { DraftRecordOperation, RecordDraftMetadata } from '../RecordRepresentation/replayDraftsOnRecord';
6
6
  import type { UiApiDraftRecordService } from '../UiApiDraftRecordService';
@@ -0,0 +1,33 @@
1
+ import type { HttpStatusCode, Headers } from '@luvio/engine';
2
+ export interface UIApiError {
3
+ errorCode: string;
4
+ message: string | null;
5
+ }
6
+ export declare const enum IdempotentWriteSpecificHttpStatusCode {
7
+ RequestTimeout = 408,
8
+ Conflict = 409,
9
+ BadGateway = 502,
10
+ ServiceUnavailable = 503,
11
+ UnProcessableEntity = 422
12
+ }
13
+ /**
14
+ * The http status code which could be returned from idempotent write.
15
+ */
16
+ export type IdempotentWriteHttpStatusCode = IdempotentWriteSpecificHttpStatusCode | HttpStatusCode;
17
+ export declare const HTTP_HEADER_RETRY_AFTER = "Retry-After";
18
+ export declare const HTTP_HEADER_IDEMPOTENCY_KEY = "Idempotency-Key";
19
+ export declare const ERROR_CODE_IDEMPOTENCY_FEATURE_NOT_ENABLED = "IDEMPOTENCY_FEATURE_NOT_ENABLED";
20
+ export declare const ERROR_CODE_IDEMPOTENCY_NOT_SUPPORTED = "IDEMPOTENCY_NOT_SUPPORTED";
21
+ export declare const ERROR_CODE_IDEMPOTENCY_KEY_USED_DIFFERENT_USER = "IDEMPOTENCY_KEY_USED_DIFFERENT_USER";
22
+ export declare const ERROR_CODE_IDEMPOTENCY_CONCURRENT_REQUEST = "IDEMPOTENCY_CONCURRENT_REQUEST";
23
+ export declare const ERROR_CODE_IDEMPOTENCY_KEY_ALREADY_USED = "IDEMPOTENCY_KEY_ALREADY_USED";
24
+ export declare const ERROR_CODE_IDEMPOTENCY_BACKEND_OPERATION_ERROR = "IDEMPOTENCY_BACKEND_OPERATION_ERROR";
25
+ /**
26
+ * Get the retry after in milliseconds from the response headers, undefined if not specified.
27
+ * The header could have two different format.
28
+ * Retry-After: <http-date>, like Wed, 21 Oct 2015 07:28:00 GMT
29
+ * Retry-After: <delay-seconds>, like 1.5s
30
+ * @param headers http headers
31
+ * @returns the time to delat in millisconds.
32
+ */
33
+ export declare function getRetryAfterInMs(headers?: Headers): number | undefined;
@@ -1,5 +1,5 @@
1
1
  import type { DraftAction, DraftQueue, PendingDraftAction } from '@salesforce/lds-drafts';
2
- import { AbstractResourceRequestActionHandler } from '@salesforce/lds-drafts';
2
+ import { AbstractResourceRequestActionHandler } from '../AbstractResourceRequestActionHandler';
3
3
  import type { PerformActionInputRepresentation, QuickActionExecutionRepresentation } from '../../adapters/main';
4
4
  import type { DurableStoreKeyMetadataMap, Luvio, NetworkAdapter, ResourceRequest } from '@luvio/engine';
5
5
  import type { UiApiDraftRecordService } from '../UiApiDraftRecordService';
@@ -1,5 +1,5 @@
1
1
  import type { ActionHandler, CompletedDraftAction, DraftAction, DraftQueue, PendingDraftAction, QueueOperation } from '@salesforce/lds-drafts';
2
- import { AbstractResourceRequestActionHandler } from '@salesforce/lds-drafts';
2
+ import { AbstractResourceRequestActionHandler } from '../AbstractResourceRequestActionHandler';
3
3
  import type { DurableStoreKeyMetadataMap, Luvio, NetworkAdapter, ResourceRequest } from '@luvio/engine';
4
4
  import type { PerformActionInputRepresentation, QuickActionExecutionRepresentation } from '../../adapters/main';
5
5
  import type { UiApiDraftRecordService } from '../UiApiDraftRecordService';
@@ -2,7 +2,7 @@ import type { Adapter, DurableStoreKeyMetadataMap, Luvio, NetworkAdapter, Resour
2
2
  import type { GetRecordConfig, ObjectInfoRepresentation, RecordRepresentation, RecordRepresentationNormalized, RecordInputRepresentation } from '../../../adapters/main';
3
3
  import type { ActionHandler, CompletedDraftAction, DraftAction, DraftActionMetadata, DraftIdAndKeyMapping, DraftQueue, PendingDraftAction, QueueOperation } from '@salesforce/lds-drafts';
4
4
  import type { FieldRepresentation, ObjectInfoService } from '../../utils/types';
5
- import { AbstractResourceRequestActionHandler } from '@salesforce/lds-drafts';
5
+ import { AbstractResourceRequestActionHandler } from '../../AbstractResourceRequestActionHandler';
6
6
  import type { DraftRecordOperation, RecordDraftMetadata } from '../replayDraftsOnRecord';
7
7
  import type { UiApiDraftRecordService, ReferenceIdFieldInfo } from '../../UiApiDraftRecordService';
8
8
  import type { RecordEffectingHandler } from './RecordEffectingHandler';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/lds-runtime-mobile",
3
- "version": "1.316.0",
3
+ "version": "1.317.0",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "description": "LDS runtime for mobile/hybrid environments.",
6
6
  "main": "dist/main.js",
@@ -32,25 +32,25 @@
32
32
  "release:corejar": "yarn build && ../core-build/scripts/core.js --name=lds-runtime-mobile"
33
33
  },
34
34
  "dependencies": {
35
- "@salesforce/lds-adapters-uiapi": "^1.316.0",
36
- "@salesforce/lds-bindings": "^1.316.0",
37
- "@salesforce/lds-instrumentation": "^1.316.0",
38
- "@salesforce/lds-priming": "^1.316.0",
35
+ "@salesforce/lds-adapters-uiapi": "^1.317.0",
36
+ "@salesforce/lds-bindings": "^1.317.0",
37
+ "@salesforce/lds-instrumentation": "^1.317.0",
38
+ "@salesforce/lds-priming": "^1.317.0",
39
39
  "@salesforce/user": "0.0.21",
40
40
  "o11y": "250.7.0"
41
41
  },
42
42
  "devDependencies": {
43
- "@salesforce/lds-adapters-graphql": "^1.316.0",
44
- "@salesforce/lds-drafts": "^1.316.0",
45
- "@salesforce/lds-durable-records": "^1.316.0",
46
- "@salesforce/lds-graphql-local-evaluation": "^1.316.0",
47
- "@salesforce/lds-network-adapter": "^1.316.0",
48
- "@salesforce/lds-network-nimbus": "^1.316.0",
49
- "@salesforce/lds-store-binary": "^1.316.0",
50
- "@salesforce/lds-store-nimbus": "^1.316.0",
51
- "@salesforce/lds-store-sql": "^1.316.0",
52
- "@salesforce/lds-utils-adapters": "^1.316.0",
53
- "@salesforce/nimbus-plugin-lds": "^1.316.0",
43
+ "@salesforce/lds-adapters-graphql": "^1.317.0",
44
+ "@salesforce/lds-drafts": "^1.317.0",
45
+ "@salesforce/lds-durable-records": "^1.317.0",
46
+ "@salesforce/lds-graphql-local-evaluation": "^1.317.0",
47
+ "@salesforce/lds-network-adapter": "^1.317.0",
48
+ "@salesforce/lds-network-nimbus": "^1.317.0",
49
+ "@salesforce/lds-store-binary": "^1.317.0",
50
+ "@salesforce/lds-store-nimbus": "^1.317.0",
51
+ "@salesforce/lds-store-sql": "^1.317.0",
52
+ "@salesforce/lds-utils-adapters": "^1.317.0",
53
+ "@salesforce/nimbus-plugin-lds": "^1.317.0",
54
54
  "babel-plugin-dynamic-import-node": "^2.3.3",
55
55
  "wait-for-expect": "^3.0.2"
56
56
  },