@aws-amplify/datastore 5.0.1-unstable.cfbde4c.0 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{lib → dist/cjs}/authModeStrategies/defaultAuthStrategy.js +3 -1
- package/dist/cjs/authModeStrategies/defaultAuthStrategy.js.map +1 -0
- package/{lib → dist/cjs}/authModeStrategies/index.js +3 -1
- package/dist/cjs/authModeStrategies/index.js.map +1 -0
- package/{lib → dist/cjs}/authModeStrategies/multiAuthStrategy.js +3 -3
- package/dist/cjs/authModeStrategies/multiAuthStrategy.js.map +1 -0
- package/{lib → dist/cjs}/datastore/datastore.js +5 -3
- package/dist/cjs/datastore/datastore.js.map +1 -0
- package/{lib → dist/cjs}/index.js +5 -16
- package/dist/cjs/index.js.map +1 -0
- package/{lib → dist/cjs}/predicates/index.js +3 -1
- package/dist/cjs/predicates/index.js.map +1 -0
- package/{lib → dist/cjs}/predicates/next.js +3 -1
- package/dist/cjs/predicates/next.js.map +1 -0
- package/{lib → dist/cjs}/predicates/sort.js +4 -3
- package/dist/cjs/predicates/sort.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/AsyncStorageAdapter.js +5 -5
- package/dist/cjs/storage/adapter/AsyncStorageAdapter.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/AsyncStorageDatabase.js +3 -1
- package/dist/cjs/storage/adapter/AsyncStorageDatabase.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/InMemoryStore.js +3 -1
- package/dist/cjs/storage/adapter/InMemoryStore.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/InMemoryStore.native.js +5 -5
- package/dist/cjs/storage/adapter/InMemoryStore.native.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/IndexedDBAdapter.js +5 -25
- package/dist/cjs/storage/adapter/IndexedDBAdapter.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/StorageAdapterBase.js +3 -1
- package/dist/cjs/storage/adapter/StorageAdapterBase.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/getDefaultAdapter/index.js +6 -6
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.js.map +1 -0
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.native.js +10 -0
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.native.js.map +1 -0
- package/{lib → dist/cjs}/storage/adapter/index.js +3 -1
- package/dist/cjs/storage/adapter/index.js.map +1 -0
- package/{lib → dist/cjs}/storage/relationship.js +3 -1
- package/dist/cjs/storage/relationship.js.map +1 -0
- package/{lib → dist/cjs}/storage/storage.js +5 -5
- package/dist/cjs/storage/storage.js.map +1 -0
- package/{lib → dist/cjs}/sync/datastoreConnectivity.js +4 -2
- package/dist/cjs/sync/datastoreConnectivity.js.map +1 -0
- package/{lib → dist/cjs}/sync/datastoreReachability/index.js +3 -1
- package/dist/cjs/sync/datastoreReachability/index.js.map +1 -0
- package/{lib → dist/cjs}/sync/datastoreReachability/index.native.js +3 -1
- package/dist/cjs/sync/datastoreReachability/index.native.js.map +1 -0
- package/{lib → dist/cjs}/sync/index.js +6 -7
- package/dist/cjs/sync/index.js.map +1 -0
- package/{lib → dist/cjs}/sync/merger.js +3 -1
- package/dist/cjs/sync/merger.js.map +1 -0
- package/{lib → dist/cjs}/sync/outbox.js +3 -1
- package/dist/cjs/sync/outbox.js.map +1 -0
- package/{lib → dist/cjs}/sync/processors/errorMaps.js +4 -4
- package/dist/cjs/sync/processors/errorMaps.js.map +1 -0
- package/{lib → dist/cjs}/sync/processors/mutation.js +3 -1
- package/dist/cjs/sync/processors/mutation.js.map +1 -0
- package/{lib → dist/cjs}/sync/processors/subscription.js +4 -4
- package/dist/cjs/sync/processors/subscription.js.map +1 -0
- package/{lib → dist/cjs}/sync/processors/sync.js +3 -1
- package/dist/cjs/sync/processors/sync.js.map +1 -0
- package/{lib → dist/cjs}/sync/utils.js +3 -1
- package/dist/cjs/sync/utils.js.map +1 -0
- package/{lib → dist/cjs}/types.js +12 -21
- package/dist/cjs/types.js.map +1 -0
- package/{lib → dist/cjs}/util.js +3 -1
- package/dist/cjs/util.js.map +1 -0
- package/{lib-esm/authModeStrategies/defaultAuthStrategy.js → dist/esm/authModeStrategies/defaultAuthStrategy.mjs} +4 -1
- package/dist/esm/authModeStrategies/defaultAuthStrategy.mjs.map +1 -0
- package/dist/esm/authModeStrategies/index.mjs +3 -0
- package/dist/esm/authModeStrategies/index.mjs.map +1 -0
- package/{lib-esm/authModeStrategies/multiAuthStrategy.js → dist/esm/authModeStrategies/multiAuthStrategy.mjs} +7 -5
- package/dist/esm/authModeStrategies/multiAuthStrategy.mjs.map +1 -0
- package/{lib-esm/datastore/datastore.js → dist/esm/datastore/datastore.mjs} +30 -26
- package/dist/esm/datastore/datastore.mjs.map +1 -0
- package/dist/esm/index.mjs +19 -0
- package/dist/esm/index.mjs.map +1 -0
- package/{lib-esm/predicates/index.js → dist/esm/predicates/index.mjs} +10 -7
- package/dist/esm/predicates/index.mjs.map +1 -0
- package/{lib-esm/predicates/next.js → dist/esm/predicates/next.mjs} +15 -11
- package/dist/esm/predicates/next.mjs.map +1 -0
- package/{lib-esm/predicates/sort.js → dist/esm/predicates/sort.mjs} +3 -2
- package/dist/esm/predicates/sort.mjs.map +1 -0
- package/{lib-esm/storage/adapter/AsyncStorageAdapter.js → dist/esm/storage/adapter/AsyncStorageAdapter.mjs} +10 -6
- package/dist/esm/storage/adapter/AsyncStorageAdapter.mjs.map +1 -0
- package/{lib-esm/storage/adapter/AsyncStorageDatabase.js → dist/esm/storage/adapter/AsyncStorageDatabase.mjs} +7 -4
- package/dist/esm/storage/adapter/AsyncStorageDatabase.mjs.map +1 -0
- package/{lib-esm/storage/adapter/InMemoryStore.js → dist/esm/storage/adapter/InMemoryStore.mjs} +5 -2
- package/dist/esm/storage/adapter/InMemoryStore.mjs.map +1 -0
- package/{lib-esm/storage/adapter/InMemoryStore.native.js → dist/esm/storage/adapter/InMemoryStore.native.mjs} +6 -2
- package/dist/esm/storage/adapter/InMemoryStore.native.mjs.map +1 -0
- package/{lib-esm/storage/adapter/IndexedDBAdapter.js → dist/esm/storage/adapter/IndexedDBAdapter.mjs} +10 -6
- package/dist/esm/storage/adapter/IndexedDBAdapter.mjs.map +1 -0
- package/{lib-esm/storage/adapter/StorageAdapterBase.js → dist/esm/storage/adapter/StorageAdapterBase.mjs} +9 -5
- package/dist/esm/storage/adapter/StorageAdapterBase.mjs.map +1 -0
- package/dist/esm/storage/adapter/getDefaultAdapter/index.mjs +13 -0
- package/dist/esm/storage/adapter/getDefaultAdapter/index.mjs.map +1 -0
- package/dist/esm/storage/adapter/getDefaultAdapter/index.native.mjs +8 -0
- package/dist/esm/storage/adapter/getDefaultAdapter/index.native.mjs.map +1 -0
- package/dist/esm/storage/adapter/index.mjs +2 -0
- package/dist/esm/storage/adapter/index.mjs.map +1 -0
- package/{lib-esm/storage/relationship.js → dist/esm/storage/relationship.mjs} +6 -2
- package/dist/esm/storage/relationship.mjs.map +1 -0
- package/{lib-esm/storage/storage.js → dist/esm/storage/storage.mjs} +11 -8
- package/dist/esm/storage/storage.mjs.map +1 -0
- package/{lib-esm/sync/datastoreConnectivity.js → dist/esm/sync/datastoreConnectivity.mjs} +9 -5
- package/dist/esm/sync/datastoreConnectivity.mjs.map +1 -0
- package/dist/esm/sync/datastoreReachability/index.d.ts +1 -0
- package/{lib-esm/sync/datastoreReachability/index.js → dist/esm/sync/datastoreReachability/index.mjs} +6 -2
- package/dist/esm/sync/datastoreReachability/index.mjs.map +1 -0
- package/dist/esm/sync/datastoreReachability/index.native.d.ts +1 -0
- package/{lib-esm/sync/datastoreReachability/index.native.js → dist/esm/sync/datastoreReachability/index.native.mjs} +7 -3
- package/dist/esm/sync/datastoreReachability/index.native.mjs.map +1 -0
- package/{lib-esm/sync/index.js → dist/esm/sync/index.mjs} +24 -21
- package/dist/esm/sync/index.mjs.map +1 -0
- package/{lib-esm/sync/merger.js → dist/esm/sync/merger.mjs} +5 -2
- package/dist/esm/sync/merger.mjs.map +1 -0
- package/{lib-esm/sync/outbox.js → dist/esm/sync/outbox.mjs} +7 -4
- package/dist/esm/sync/outbox.mjs.map +1 -0
- package/{lib-esm/sync/processors/errorMaps.js → dist/esm/sync/processors/errorMaps.mjs} +13 -11
- package/dist/esm/sync/processors/errorMaps.mjs.map +1 -0
- package/{lib → dist/esm}/sync/processors/mutation.d.ts +1 -1
- package/{lib-esm/sync/processors/mutation.js → dist/esm/sync/processors/mutation.mjs} +10 -7
- package/dist/esm/sync/processors/mutation.mjs.map +1 -0
- package/{lib-esm/sync/processors/subscription.js → dist/esm/sync/processors/subscription.mjs} +18 -17
- package/dist/esm/sync/processors/subscription.mjs.map +1 -0
- package/{lib-esm/sync/processors/sync.js → dist/esm/sync/processors/sync.mjs} +8 -5
- package/dist/esm/sync/processors/sync.mjs.map +1 -0
- package/{lib-esm/sync/utils.js → dist/esm/sync/utils.mjs} +30 -26
- package/dist/esm/sync/utils.mjs.map +1 -0
- package/{lib-esm/types.js → dist/esm/types.mjs} +34 -30
- package/dist/esm/types.mjs.map +1 -0
- package/{lib-esm/util.js → dist/esm/util.mjs} +61 -57
- package/dist/esm/util.mjs.map +1 -0
- package/package.json +133 -137
- package/lib/authModeStrategies/defaultAuthStrategy.d.ts +0 -2
- package/lib/authModeStrategies/index.d.ts +0 -2
- package/lib/authModeStrategies/multiAuthStrategy.d.ts +0 -13
- package/lib/datastore/datastore.d.ts +0 -231
- package/lib/index.d.ts +0 -16
- package/lib/predicates/index.d.ts +0 -100
- package/lib/predicates/next.d.ts +0 -317
- package/lib/predicates/sort.d.ts +0 -8
- package/lib/ssr/index.d.ts +0 -3
- package/lib/ssr/index.js +0 -18
- package/lib/storage/adapter/AsyncStorageAdapter.d.ts +0 -40
- package/lib/storage/adapter/AsyncStorageDatabase.d.ts +0 -39
- package/lib/storage/adapter/InMemoryStore.d.ts +0 -11
- package/lib/storage/adapter/InMemoryStore.native.d.ts +0 -1
- package/lib/storage/adapter/IndexedDBAdapter.d.ts +0 -70
- package/lib/storage/adapter/StorageAdapterBase.d.ts +0 -134
- package/lib/storage/adapter/getDefaultAdapter/index.d.ts +0 -3
- package/lib/storage/adapter/getDefaultAdapter/index.native.d.ts +0 -3
- package/lib/storage/adapter/getDefaultAdapter/index.native.js +0 -10
- package/lib/storage/adapter/index.d.ts +0 -9
- package/lib/storage/relationship.d.ts +0 -149
- package/lib/storage/storage.d.ts +0 -50
- package/lib/sync/datastoreConnectivity.d.ts +0 -16
- package/lib/sync/datastoreReachability/index.d.ts +0 -1
- package/lib/sync/datastoreReachability/index.native.d.ts +0 -1
- package/lib/sync/index.d.ts +0 -103
- package/lib/sync/merger.d.ts +0 -17
- package/lib/sync/outbox.d.ts +0 -27
- package/lib/sync/processors/errorMaps.d.ts +0 -17
- package/lib/sync/processors/subscription.d.ts +0 -42
- package/lib/sync/processors/sync.d.ts +0 -28
- package/lib/sync/utils.d.ts +0 -107
- package/lib/tsconfig.tsbuildinfo +0 -1
- package/lib/types.d.ts +0 -641
- package/lib/util.d.ts +0 -196
- package/lib-esm/authModeStrategies/index.js +0 -4
- package/lib-esm/index.js +0 -14
- package/lib-esm/ssr/index.d.ts +0 -3
- package/lib-esm/ssr/index.js +0 -13
- package/lib-esm/storage/adapter/getDefaultAdapter/index.js +0 -10
- package/lib-esm/storage/adapter/getDefaultAdapter/index.native.js +0 -5
- package/lib-esm/storage/adapter/index.js +0 -1
- package/lib-esm/sync/datastoreReachability/index.d.ts +0 -1
- package/lib-esm/sync/datastoreReachability/index.native.d.ts +0 -1
- package/lib-esm/sync/processors/mutation.d.ts +0 -67
- package/lib-esm/tsconfig.tsbuildinfo +0 -1
- package/src/ssr/index.ts +0 -27
- package/ssr/package.json +0 -8
- /package/{lib-esm → dist/esm}/authModeStrategies/defaultAuthStrategy.d.ts +0 -0
- /package/{lib-esm → dist/esm}/authModeStrategies/index.d.ts +0 -0
- /package/{lib-esm → dist/esm}/authModeStrategies/multiAuthStrategy.d.ts +0 -0
- /package/{lib-esm → dist/esm}/datastore/datastore.d.ts +0 -0
- /package/{lib-esm → dist/esm}/index.d.ts +0 -0
- /package/{lib-esm → dist/esm}/predicates/index.d.ts +0 -0
- /package/{lib-esm → dist/esm}/predicates/next.d.ts +0 -0
- /package/{lib-esm → dist/esm}/predicates/sort.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/AsyncStorageAdapter.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/AsyncStorageDatabase.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/InMemoryStore.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/InMemoryStore.native.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/IndexedDBAdapter.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/StorageAdapterBase.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/getDefaultAdapter/index.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/getDefaultAdapter/index.native.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/adapter/index.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/relationship.d.ts +0 -0
- /package/{lib-esm → dist/esm}/storage/storage.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/datastoreConnectivity.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/index.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/merger.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/outbox.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/processors/errorMaps.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/processors/subscription.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/processors/sync.d.ts +0 -0
- /package/{lib-esm → dist/esm}/sync/utils.d.ts +0 -0
- /package/{lib-esm → dist/esm}/types.d.ts +0 -0
- /package/{lib-esm → dist/esm}/util.d.ts +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { resolveServiceErrorStatusCode } from '../utils';
|
|
1
|
+
import { resolveServiceErrorStatusCode } from '../utils.mjs';
|
|
2
|
+
|
|
2
3
|
const connectionTimeout = error => /^Connection failed: Connection Timeout/.test(error.message);
|
|
3
4
|
const serverError = error => resolveServiceErrorStatusCode(error) >= 500;
|
|
4
|
-
|
|
5
|
+
const mutationErrorMap = {
|
|
5
6
|
BadModel: () => false,
|
|
6
7
|
BadRecord: error => {
|
|
7
8
|
const { message } = error;
|
|
@@ -13,7 +14,7 @@ export const mutationErrorMap = {
|
|
|
13
14
|
Unauthorized: error => error.message === 'Unauthorized' ||
|
|
14
15
|
resolveServiceErrorStatusCode(error) === 401,
|
|
15
16
|
};
|
|
16
|
-
|
|
17
|
+
const subscriptionErrorMap = {
|
|
17
18
|
BadModel: () => false,
|
|
18
19
|
BadRecord: () => false,
|
|
19
20
|
ConfigError: () => false,
|
|
@@ -26,7 +27,7 @@ export const subscriptionErrorMap = {
|
|
|
26
27
|
return /Connection failed.+Unauthorized/.test(error.message);
|
|
27
28
|
},
|
|
28
29
|
};
|
|
29
|
-
|
|
30
|
+
const syncErrorMap = {
|
|
30
31
|
BadModel: () => false,
|
|
31
32
|
BadRecord: error => /^Cannot return \w+ for [\w-_]+ type/.test(error.message),
|
|
32
33
|
ConfigError: () => false,
|
|
@@ -40,18 +41,16 @@ export const syncErrorMap = {
|
|
|
40
41
|
* @param observableError an error from ZenObservable subscribe error callback
|
|
41
42
|
*/
|
|
42
43
|
function unwrapObservableError(observableError) {
|
|
43
|
-
const { errors: [error], } = (
|
|
44
|
-
errors: [],
|
|
45
|
-
} = observableError);
|
|
44
|
+
const { errors: [error], } = (observableError);
|
|
46
45
|
return error;
|
|
47
46
|
}
|
|
48
|
-
|
|
47
|
+
function getMutationErrorType(error) {
|
|
49
48
|
return mapErrorToType(mutationErrorMap, error);
|
|
50
49
|
}
|
|
51
|
-
|
|
50
|
+
function getSubscriptionErrorType(error) {
|
|
52
51
|
return mapErrorToType(subscriptionErrorMap, error);
|
|
53
52
|
}
|
|
54
|
-
|
|
53
|
+
function getSyncErrorType(error) {
|
|
55
54
|
return mapErrorToType(syncErrorMap, error);
|
|
56
55
|
}
|
|
57
56
|
/**
|
|
@@ -60,7 +59,7 @@ export function getSyncErrorType(error) {
|
|
|
60
59
|
* @param errorMap Error names and a list of patterns that indicate them (each pattern as a regex or function)
|
|
61
60
|
* @param error The underying error to categorize.
|
|
62
61
|
*/
|
|
63
|
-
|
|
62
|
+
function mapErrorToType(errorMap, error) {
|
|
64
63
|
const errorTypes = [...Object.keys(errorMap)];
|
|
65
64
|
for (const errorType of errorTypes) {
|
|
66
65
|
const matcher = errorMap[errorType];
|
|
@@ -70,3 +69,6 @@ export function mapErrorToType(errorMap, error) {
|
|
|
70
69
|
}
|
|
71
70
|
return 'Unknown';
|
|
72
71
|
}
|
|
72
|
+
|
|
73
|
+
export { getMutationErrorType, getSubscriptionErrorType, getSyncErrorType, mapErrorToType, mutationErrorMap, subscriptionErrorMap, syncErrorMap };
|
|
74
|
+
//# sourceMappingURL=errorMaps.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorMaps.mjs","sources":["../../../../src/sync/processors/errorMaps.ts"],"sourcesContent":["import { resolveServiceErrorStatusCode } from '../utils';\nconst connectionTimeout = error => /^Connection failed: Connection Timeout/.test(error.message);\nconst serverError = error => resolveServiceErrorStatusCode(error) >= 500;\nexport const mutationErrorMap = {\n BadModel: () => false,\n BadRecord: error => {\n const { message } = error;\n return (/^Cannot return \\w+ for [\\w-_]+ type/.test(message) ||\n /^Variable '.+' has coerced Null value for NonNull type/.test(message)); // newly required field, out of date client\n },\n ConfigError: () => false,\n Transient: error => connectionTimeout(error) || serverError(error),\n Unauthorized: error => error.message === 'Unauthorized' ||\n resolveServiceErrorStatusCode(error) === 401,\n};\nexport const subscriptionErrorMap = {\n BadModel: () => false,\n BadRecord: () => false,\n ConfigError: () => false,\n Transient: observableError => {\n const error = unwrapObservableError(observableError);\n return connectionTimeout(error) || serverError(error);\n },\n Unauthorized: observableError => {\n const error = unwrapObservableError(observableError);\n return /Connection failed.+Unauthorized/.test(error.message);\n },\n};\nexport const syncErrorMap = {\n BadModel: () => false,\n BadRecord: error => /^Cannot return \\w+ for [\\w-_]+ type/.test(error.message),\n ConfigError: () => false,\n Transient: error => connectionTimeout(error) || serverError(error),\n Unauthorized: error => error.errorType === 'Unauthorized',\n};\n/**\n * Get the first error reason of an observable.\n * Allows for error maps to be easily applied to observable errors\n *\n * @param observableError an error from ZenObservable subscribe error callback\n */\nfunction unwrapObservableError(observableError) {\n const { errors: [error], } = ({\n errors: [],\n } = observableError);\n return error;\n}\nexport function getMutationErrorType(error) {\n return mapErrorToType(mutationErrorMap, error);\n}\nexport function getSubscriptionErrorType(error) {\n return mapErrorToType(subscriptionErrorMap, error);\n}\nexport function getSyncErrorType(error) {\n return mapErrorToType(syncErrorMap, error);\n}\n/**\n * Categorizes an error with a broad error type, intended to make\n * customer error handling code simpler.\n * @param errorMap Error names and a list of patterns that indicate them (each pattern as a regex or function)\n * @param error The underying error to categorize.\n */\nexport function mapErrorToType(errorMap, error) {\n const errorTypes = [...Object.keys(errorMap)];\n for (const errorType of errorTypes) {\n const matcher = errorMap[errorType];\n if (matcher?.(error)) {\n return errorType;\n }\n }\n return 'Unknown';\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -47,7 +47,7 @@ declare class MutationProcessor {
|
|
|
47
47
|
private opTypeFromTransformerOperation;
|
|
48
48
|
pause(): void;
|
|
49
49
|
}
|
|
50
|
-
declare const originalJitteredBackoff: import("@aws-amplify/core/
|
|
50
|
+
declare const originalJitteredBackoff: import("@aws-amplify/core/dist/esm/types").DelayFunction;
|
|
51
51
|
/**
|
|
52
52
|
* @private
|
|
53
53
|
* Internal use of Amplify only.
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { InternalAPI } from '@aws-amplify/api/internals';
|
|
2
|
-
import {
|
|
2
|
+
import { jitteredBackoff, BackgroundProcessManager, retry, Category, DataStoreAction, NonRetryableError } from '@aws-amplify/core/internals/utils';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
|
-
import { DISCARD, isModelFieldType, isTargetNameAssociation, OpType
|
|
5
|
-
import { extractTargetNamesFromSrc, USER, ID } from '../../util';
|
|
6
|
-
import { buildGraphQLOperation,
|
|
7
|
-
import { getMutationErrorType } from './errorMaps';
|
|
4
|
+
import { ProcessName, DISCARD, isModelFieldType, isTargetNameAssociation, OpType } from '../../types.mjs';
|
|
5
|
+
import { extractTargetNamesFromSrc, USER, ID } from '../../util.mjs';
|
|
6
|
+
import { buildGraphQLOperation, getModelAuthModes, getTokenForCustomAuth, createMutationInstanceFromModelOperation, TransformerMutationType } from '../utils.mjs';
|
|
7
|
+
import { getMutationErrorType } from './errorMaps.mjs';
|
|
8
8
|
import { ConsoleLogger } from '@aws-amplify/core';
|
|
9
|
+
|
|
9
10
|
const MAX_ATTEMPTS = 10;
|
|
10
11
|
const logger = new ConsoleLogger('DataStore');
|
|
11
12
|
class MutationProcessor {
|
|
@@ -419,7 +420,7 @@ const originalJitteredBackoff = jitteredBackoff(MAX_RETRY_DELAY_MS);
|
|
|
419
420
|
* @param error tested to see if `.message` is 'Network Error'
|
|
420
421
|
* @returns number | false :
|
|
421
422
|
*/
|
|
422
|
-
|
|
423
|
+
const safeJitteredBackoff = (attempt, _args, error) => {
|
|
423
424
|
const attemptResult = originalJitteredBackoff(attempt);
|
|
424
425
|
// If this is the last attempt and it is a network error, we retry indefinitively every 5 minutes
|
|
425
426
|
if (attemptResult === false &&
|
|
@@ -428,4 +429,6 @@ export const safeJitteredBackoff = (attempt, _args, error) => {
|
|
|
428
429
|
}
|
|
429
430
|
return attemptResult;
|
|
430
431
|
};
|
|
431
|
-
|
|
432
|
+
|
|
433
|
+
export { MutationProcessor, safeJitteredBackoff };
|
|
434
|
+
//# sourceMappingURL=mutation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation.mjs","sources":["../../../../src/sync/processors/mutation.ts"],"sourcesContent":["import { InternalAPI } from '@aws-amplify/api/internals';\nimport { Category, DataStoreAction, jitteredBackoff, NonRetryableError, retry, BackgroundProcessManager, } from '@aws-amplify/core/internals/utils';\nimport { Observable } from 'rxjs';\nimport { DISCARD, isModelFieldType, isTargetNameAssociation, OpType, ProcessName, } from '../../types';\nimport { extractTargetNamesFromSrc, USER, ID } from '../../util';\nimport { buildGraphQLOperation, createMutationInstanceFromModelOperation, getModelAuthModes, TransformerMutationType, getTokenForCustomAuth, } from '../utils';\nimport { getMutationErrorType } from './errorMaps';\nimport { ConsoleLogger } from '@aws-amplify/core';\nconst MAX_ATTEMPTS = 10;\nconst logger = new ConsoleLogger('DataStore');\nclass MutationProcessor {\n constructor(schema, storage, userClasses, outbox, modelInstanceCreator, MutationEvent, amplifyConfig = {}, authModeStrategy, errorHandler, conflictHandler, amplifyContext) {\n this.schema = schema;\n this.storage = storage;\n this.userClasses = userClasses;\n this.outbox = outbox;\n this.modelInstanceCreator = modelInstanceCreator;\n this.MutationEvent = MutationEvent;\n this.amplifyConfig = amplifyConfig;\n this.authModeStrategy = authModeStrategy;\n this.errorHandler = errorHandler;\n this.conflictHandler = conflictHandler;\n this.amplifyContext = amplifyContext;\n this.typeQuery = new WeakMap();\n this.processing = false;\n this.runningProcesses = new BackgroundProcessManager();\n this.amplifyContext.InternalAPI =\n this.amplifyContext.InternalAPI || InternalAPI;\n this.generateQueries();\n }\n generateQueries() {\n Object.values(this.schema.namespaces).forEach(namespace => {\n Object.values(namespace.models)\n .filter(({ syncable }) => syncable)\n .forEach(model => {\n const [createMutation] = buildGraphQLOperation(namespace, model, 'CREATE');\n const [updateMutation] = buildGraphQLOperation(namespace, model, 'UPDATE');\n const [deleteMutation] = buildGraphQLOperation(namespace, model, 'DELETE');\n this.typeQuery.set(model, [\n createMutation,\n updateMutation,\n deleteMutation,\n ]);\n });\n });\n }\n isReady() {\n return this.observer !== undefined;\n }\n start() {\n this.runningProcesses = new BackgroundProcessManager();\n const observable = new Observable(observer => {\n this.observer = observer;\n try {\n this.resume();\n }\n catch (error) {\n logger.error('mutations processor start error', error);\n throw error;\n }\n return this.runningProcesses.addCleaner(async () => {\n // The observer has unsubscribed and/or `stop()` has been called.\n this.removeObserver();\n this.pause();\n });\n });\n return observable;\n }\n async stop() {\n this.removeObserver();\n await this.runningProcesses.close();\n await this.runningProcesses.open();\n }\n removeObserver() {\n this.observer?.complete?.();\n this.observer = undefined;\n }\n async resume() {\n if (this.runningProcesses.isOpen) {\n await this.runningProcesses.add(async (onTerminate) => {\n if (this.processing ||\n !this.isReady() ||\n !this.runningProcesses.isOpen) {\n return;\n }\n this.processing = true;\n let head;\n const namespaceName = USER;\n // start to drain outbox\n while (this.processing &&\n this.runningProcesses.isOpen &&\n (head = await this.outbox.peek(this.storage)) !== undefined) {\n const { model, operation, data, condition } = head;\n const modelConstructor = this.userClasses[model];\n let result = undefined;\n let opName = undefined;\n let modelDefinition = undefined;\n try {\n const modelAuthModes = await getModelAuthModes({\n authModeStrategy: this.authModeStrategy,\n defaultAuthMode: this.amplifyConfig.aws_appsync_authenticationType,\n modelName: model,\n schema: this.schema,\n });\n const operationAuthModes = modelAuthModes[operation.toUpperCase()];\n let authModeAttempts = 0;\n const authModeRetry = async () => {\n try {\n logger.debug(`Attempting mutation with authMode: ${operationAuthModes[authModeAttempts]}`);\n const response = await this.jitteredRetry(namespaceName, model, operation, data, condition, modelConstructor, this.MutationEvent, head, operationAuthModes[authModeAttempts], onTerminate);\n logger.debug(`Mutation sent successfully with authMode: ${operationAuthModes[authModeAttempts]}`);\n return response;\n }\n catch (error) {\n authModeAttempts++;\n if (authModeAttempts >= operationAuthModes.length) {\n logger.debug(`Mutation failed with authMode: ${operationAuthModes[authModeAttempts - 1]}`);\n try {\n await this.errorHandler({\n recoverySuggestion: 'Ensure app code is up to date, auth directives exist and are correct on each model, and that server-side data has not been invalidated by a schema change. If the problem persists, search for or create an issue: https://github.com/aws-amplify/amplify-js/issues',\n localModel: null,\n message: error.message,\n model: modelConstructor.name,\n operation: opName,\n errorType: getMutationErrorType(error),\n process: ProcessName.sync,\n remoteModel: null,\n cause: error,\n });\n }\n catch (e) {\n logger.error('Mutation error handler failed with:', e);\n }\n throw error;\n }\n logger.debug(`Mutation failed with authMode: ${operationAuthModes[authModeAttempts - 1]}. Retrying with authMode: ${operationAuthModes[authModeAttempts]}`);\n return await authModeRetry();\n }\n };\n [result, opName, modelDefinition] = await authModeRetry();\n }\n catch (error) {\n if (error.message === 'Offline' ||\n error.message === 'RetryMutation') {\n continue;\n }\n }\n if (result === undefined) {\n logger.debug('done retrying');\n await this.storage.runExclusive(async (storage) => {\n await this.outbox.dequeue(storage);\n });\n continue;\n }\n const record = result.data[opName];\n let hasMore = false;\n await this.storage.runExclusive(async (storage) => {\n // using runExclusive to prevent possible race condition\n // when another record gets enqueued between dequeue and peek\n await this.outbox.dequeue(storage, record, operation);\n hasMore = (await this.outbox.peek(storage)) !== undefined;\n });\n this.observer?.next?.({\n operation,\n modelDefinition,\n model: record,\n hasMore,\n });\n }\n // pauses itself\n this.pause();\n }, 'mutation resume loop');\n }\n }\n async jitteredRetry(namespaceName, model, operation, data, condition, modelConstructor, MutationEvent, mutationEvent, authMode, onTerminate) {\n return await retry(async (model, operation, data, condition, modelConstructor, MutationEvent, mutationEvent) => {\n const [query, variables, graphQLCondition, opName, modelDefinition] = this.createQueryVariables(namespaceName, model, operation, data, condition);\n const authToken = await getTokenForCustomAuth(authMode, this.amplifyConfig);\n const tryWith = {\n query,\n variables,\n authMode,\n authToken,\n };\n let attempt = 0;\n const opType = this.opTypeFromTransformerOperation(operation);\n const customUserAgentDetails = {\n category: Category.DataStore,\n action: DataStoreAction.GraphQl,\n };\n do {\n try {\n const result = (await this.amplifyContext.InternalAPI.graphql(tryWith, undefined, customUserAgentDetails));\n // Use `as any` because TypeScript doesn't seem to like passing tuples\n // through generic params.\n return [result, opName, modelDefinition];\n }\n catch (err) {\n if (err.errors && err.errors.length > 0) {\n const [error] = err.errors;\n const { originalError: { code = null } = {} } = error;\n if (error.errorType === 'Unauthorized') {\n throw new NonRetryableError('Unauthorized');\n }\n if (error.message === 'Network Error' ||\n code === 'ECONNABORTED' // refers to axios timeout error caused by device's bad network condition\n ) {\n if (!this.processing) {\n throw new NonRetryableError('Offline');\n }\n // TODO: Check errors on different env (react-native or other browsers)\n throw new Error('Network Error');\n }\n if (error.errorType === 'ConflictUnhandled') {\n // TODO: add on ConflictConditionalCheck error query last from server\n attempt++;\n let retryWith;\n if (attempt > MAX_ATTEMPTS) {\n retryWith = DISCARD;\n }\n else {\n try {\n retryWith = await this.conflictHandler({\n modelConstructor,\n localModel: this.modelInstanceCreator(modelConstructor, variables.input),\n remoteModel: this.modelInstanceCreator(modelConstructor, error.data),\n operation: opType,\n attempts: attempt,\n });\n }\n catch (err) {\n logger.warn('conflict trycatch', err);\n continue;\n }\n }\n if (retryWith === DISCARD) {\n // Query latest from server and notify merger\n const [[, opName, query]] = buildGraphQLOperation(this.schema.namespaces[namespaceName], modelDefinition, 'GET');\n const authToken = await getTokenForCustomAuth(authMode, this.amplifyConfig);\n const serverData = await this.amplifyContext.InternalAPI.graphql({\n query,\n variables: { id: variables.input.id },\n authMode,\n authToken,\n }, undefined, customUserAgentDetails);\n // onTerminate cancel graphql()\n return [serverData, opName, modelDefinition];\n }\n const namespace = this.schema.namespaces[namespaceName];\n // convert retry with to tryWith\n const updatedMutation = createMutationInstanceFromModelOperation(namespace.relationships, modelDefinition, opType, modelConstructor, retryWith, graphQLCondition, MutationEvent, this.modelInstanceCreator, mutationEvent.id);\n await this.storage.save(updatedMutation);\n throw new NonRetryableError('RetryMutation');\n }\n else {\n try {\n this.errorHandler({\n recoverySuggestion: 'Ensure app code is up to date, auth directives exist and are correct on each model, and that server-side data has not been invalidated by a schema change. If the problem persists, search for or create an issue: https://github.com/aws-amplify/amplify-js/issues',\n localModel: variables.input,\n message: error.message,\n operation,\n errorType: getMutationErrorType(error),\n errorInfo: error.errorInfo,\n process: ProcessName.mutate,\n cause: error,\n remoteModel: error.data\n ? this.modelInstanceCreator(modelConstructor, error.data)\n : null,\n });\n }\n catch (err) {\n logger.warn('Mutation error handler failed with:', err);\n }\n finally {\n // Return empty tuple, dequeues the mutation\n return error.data\n ? [\n { data: { [opName]: error.data } },\n opName,\n modelDefinition,\n ]\n : [];\n }\n }\n }\n else {\n // Catch-all for client-side errors that don't come back in the `GraphQLError` format.\n // These errors should not be retried.\n throw new NonRetryableError(err);\n }\n }\n } while (tryWith);\n }, [\n model,\n operation,\n data,\n condition,\n modelConstructor,\n MutationEvent,\n mutationEvent,\n ], safeJitteredBackoff, onTerminate);\n }\n createQueryVariables(namespaceName, model, operation, data, condition) {\n const modelDefinition = this.schema.namespaces[namespaceName].models[model];\n const { primaryKey } = this.schema.namespaces[namespaceName].keys[model];\n const auth = modelDefinition.attributes?.find(a => a.type === 'auth');\n const ownerFields = auth?.properties?.rules\n .map(rule => rule.ownerField)\n .filter(f => f) || ['owner'];\n const queriesTuples = this.typeQuery.get(modelDefinition);\n const [, opName, query] = queriesTuples.find(([transformerMutationType]) => transformerMutationType === operation);\n const { _version, ...parsedData } = JSON.parse(data);\n // include all the fields that comprise a custom PK if one is specified\n const deleteInput = {};\n if (primaryKey && primaryKey.length) {\n for (const pkField of primaryKey) {\n deleteInput[pkField] = parsedData[pkField];\n }\n }\n else {\n deleteInput[ID] = parsedData.id;\n }\n let mutationInput;\n if (operation === TransformerMutationType.DELETE) {\n // For DELETE mutations, only the key(s) are included in the input\n mutationInput = deleteInput;\n }\n else {\n // Otherwise, we construct the mutation input with the following logic\n mutationInput = {};\n const modelFields = Object.values(modelDefinition.fields);\n for (const { name, type, association, isReadOnly } of modelFields) {\n // omit readonly fields. cloud storage doesn't need them and won't take them!\n if (isReadOnly) {\n continue;\n }\n // omit owner fields if it's `null`. cloud storage doesn't allow it.\n if (ownerFields.includes(name) && parsedData[name] === null) {\n continue;\n }\n // model fields should be stripped out from the input\n if (isModelFieldType(type)) {\n // except for belongs to relations - we need to replace them with the correct foreign key(s)\n if (isTargetNameAssociation(association) &&\n association.connectionType === 'BELONGS_TO') {\n const targetNames = extractTargetNamesFromSrc(association);\n if (targetNames) {\n // instead of including the connected model itself, we add its key(s) to the mutation input\n for (const targetName of targetNames) {\n mutationInput[targetName] = parsedData[targetName];\n }\n }\n }\n continue;\n }\n // scalar fields / non-model types\n if (operation === TransformerMutationType.UPDATE) {\n if (!parsedData.hasOwnProperty(name)) {\n // for update mutations - strip out a field if it's unchanged\n continue;\n }\n }\n // all other fields are added to the input object\n mutationInput[name] = parsedData[name];\n }\n }\n // Build mutation variables input object\n const input = {\n ...mutationInput,\n _version,\n };\n const graphQLCondition = JSON.parse(condition);\n const variables = {\n input,\n ...(operation === TransformerMutationType.CREATE\n ? {}\n : {\n condition: Object.keys(graphQLCondition).length > 0\n ? graphQLCondition\n : null,\n }),\n };\n return [query, variables, graphQLCondition, opName, modelDefinition];\n }\n opTypeFromTransformerOperation(operation) {\n switch (operation) {\n case TransformerMutationType.CREATE:\n return OpType.INSERT;\n case TransformerMutationType.DELETE:\n return OpType.DELETE;\n case TransformerMutationType.UPDATE:\n return OpType.UPDATE;\n case TransformerMutationType.GET: // Intentionally blank\n break;\n default:\n throw new Error(`Invalid operation ${operation}`);\n }\n // because it makes TS happy ...\n return undefined;\n }\n pause() {\n this.processing = false;\n }\n}\nconst MAX_RETRY_DELAY_MS = 5 * 60 * 1000;\nconst originalJitteredBackoff = jitteredBackoff(MAX_RETRY_DELAY_MS);\n/**\n * @private\n * Internal use of Amplify only.\n *\n * Wraps the jittered backoff calculation to retry Network Errors indefinitely.\n * Backs off according to original jittered retry logic until the original retry\n * logic hits its max. After this occurs, if the error is a Network Error, we\n * ignore the attempt count and return MAX_RETRY_DELAY_MS to retry forever (until\n * the request succeeds).\n *\n * @param attempt ignored\n * @param _args ignored\n * @param error tested to see if `.message` is 'Network Error'\n * @returns number | false :\n */\nexport const safeJitteredBackoff = (attempt, _args, error) => {\n const attemptResult = originalJitteredBackoff(attempt);\n // If this is the last attempt and it is a network error, we retry indefinitively every 5 minutes\n if (attemptResult === false &&\n (error || {}).message === 'Network Error') {\n return MAX_RETRY_DELAY_MS;\n }\n return attemptResult;\n};\nexport { MutationProcessor };\n"],"names":[],"mappings":"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"}
|
package/{lib-esm/sync/processors/subscription.js → dist/esm/sync/processors/subscription.mjs}
RENAMED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import { InternalAPI } from '@aws-amplify/api/internals';
|
|
2
|
-
import {
|
|
3
|
-
import { Category, DataStoreAction
|
|
2
|
+
import { ConsoleLogger, fetchAuthSession, Hub } from '@aws-amplify/core';
|
|
3
|
+
import { BackgroundProcessManager, Category, DataStoreAction } from '@aws-amplify/core/internals/utils';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
|
-
import { ProcessName
|
|
6
|
-
import { buildSubscriptionGraphQLOperation, getAuthorizationRules,
|
|
7
|
-
import { ModelPredicateCreator } from '../../predicates';
|
|
8
|
-
import { validatePredicate } from '../../util';
|
|
9
|
-
import { getSubscriptionErrorType } from './errorMaps';
|
|
10
|
-
import { CONTROL_MSG as
|
|
5
|
+
import { ProcessName } from '../../types.mjs';
|
|
6
|
+
import { buildSubscriptionGraphQLOperation, getAuthorizationRules, getUserGroupsFromToken, getModelAuthModes, TransformerMutationType, RTFError, generateRTFRemediation, getTokenForCustomAuth, predicateToGraphQLFilter } from '../utils.mjs';
|
|
7
|
+
import { ModelPredicateCreator } from '../../predicates/index.mjs';
|
|
8
|
+
import { validatePredicate } from '../../util.mjs';
|
|
9
|
+
import { getSubscriptionErrorType } from './errorMaps.mjs';
|
|
10
|
+
import { CONTROL_MSG as CONTROL_MSG$1 } from '@aws-amplify/api-graphql';
|
|
11
|
+
|
|
11
12
|
const logger = new ConsoleLogger('DataStore');
|
|
12
|
-
|
|
13
|
+
var CONTROL_MSG;
|
|
13
14
|
(function (CONTROL_MSG) {
|
|
14
15
|
CONTROL_MSG["CONNECTED"] = "CONNECTED";
|
|
15
16
|
})(CONTROL_MSG || (CONTROL_MSG = {}));
|
|
16
|
-
|
|
17
|
+
var USER_CREDENTIALS;
|
|
17
18
|
(function (USER_CREDENTIALS) {
|
|
18
19
|
USER_CREDENTIALS[USER_CREDENTIALS["none"] = 0] = "none";
|
|
19
20
|
USER_CREDENTIALS[USER_CREDENTIALS["unauth"] = 1] = "unauth";
|
|
@@ -104,7 +105,7 @@ class SubscriptionProcessor {
|
|
|
104
105
|
}
|
|
105
106
|
hubQueryCompletionListener(completed, capsule) {
|
|
106
107
|
const { payload: { event }, } = capsule;
|
|
107
|
-
if (event ===
|
|
108
|
+
if (event === CONTROL_MSG$1.SUBSCRIPTION_ACK) {
|
|
108
109
|
completed();
|
|
109
110
|
}
|
|
110
111
|
}
|
|
@@ -223,9 +224,7 @@ class SubscriptionProcessor {
|
|
|
223
224
|
this.drainBuffer();
|
|
224
225
|
},
|
|
225
226
|
error: async (subscriptionError) => {
|
|
226
|
-
const { errors: [{ message = '' } = {}], } = (
|
|
227
|
-
errors: [],
|
|
228
|
-
} = subscriptionError);
|
|
227
|
+
const { errors: [{ message = '' } = {}], } = (subscriptionError);
|
|
229
228
|
const isRTFError =
|
|
230
229
|
// only attempt catch if a filter variable was added to the subscription query
|
|
231
230
|
addFilter &&
|
|
@@ -239,8 +238,8 @@ class SubscriptionProcessor {
|
|
|
239
238
|
subscriptionRetry(operation, false);
|
|
240
239
|
return;
|
|
241
240
|
}
|
|
242
|
-
if (message.includes(
|
|
243
|
-
message.includes(
|
|
241
|
+
if (message.includes(CONTROL_MSG$1.REALTIME_SUBSCRIPTION_INIT_ERROR) ||
|
|
242
|
+
message.includes(CONTROL_MSG$1.CONNECTION_FAILED)) {
|
|
244
243
|
// Unsubscribe and clear subscription array for model/operation
|
|
245
244
|
subscriptions[modelDefinition.name][transformerMutationType].forEach(subscription => subscription.unsubscribe());
|
|
246
245
|
subscriptions[modelDefinition.name][transformerMutationType] = [];
|
|
@@ -366,4 +365,6 @@ class SubscriptionProcessor {
|
|
|
366
365
|
return false;
|
|
367
366
|
}
|
|
368
367
|
}
|
|
369
|
-
|
|
368
|
+
|
|
369
|
+
export { CONTROL_MSG, SubscriptionProcessor, USER_CREDENTIALS };
|
|
370
|
+
//# sourceMappingURL=subscription.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription.mjs","sources":["../../../../src/sync/processors/subscription.ts"],"sourcesContent":["import { InternalAPI } from '@aws-amplify/api/internals';\nimport { Hub, fetchAuthSession, ConsoleLogger, } from '@aws-amplify/core';\nimport { Category, DataStoreAction, BackgroundProcessManager, } from '@aws-amplify/core/internals/utils';\nimport { Observable } from 'rxjs';\nimport { ProcessName, } from '../../types';\nimport { buildSubscriptionGraphQLOperation, getAuthorizationRules, getModelAuthModes, getUserGroupsFromToken, TransformerMutationType, getTokenForCustomAuth, predicateToGraphQLFilter, RTFError, generateRTFRemediation, } from '../utils';\nimport { ModelPredicateCreator } from '../../predicates';\nimport { validatePredicate } from '../../util';\nimport { getSubscriptionErrorType } from './errorMaps';\nimport { CONTROL_MSG as PUBSUB_CONTROL_MSG } from '@aws-amplify/api-graphql';\nconst logger = new ConsoleLogger('DataStore');\nexport var CONTROL_MSG;\n(function (CONTROL_MSG) {\n CONTROL_MSG[\"CONNECTED\"] = \"CONNECTED\";\n})(CONTROL_MSG || (CONTROL_MSG = {}));\nexport var USER_CREDENTIALS;\n(function (USER_CREDENTIALS) {\n USER_CREDENTIALS[USER_CREDENTIALS[\"none\"] = 0] = \"none\";\n USER_CREDENTIALS[USER_CREDENTIALS[\"unauth\"] = 1] = \"unauth\";\n USER_CREDENTIALS[USER_CREDENTIALS[\"auth\"] = 2] = \"auth\";\n})(USER_CREDENTIALS || (USER_CREDENTIALS = {}));\nclass SubscriptionProcessor {\n constructor(schema, syncPredicates, amplifyConfig = {}, authModeStrategy, errorHandler, amplifyContext = {\n InternalAPI,\n }) {\n this.schema = schema;\n this.syncPredicates = syncPredicates;\n this.amplifyConfig = amplifyConfig;\n this.authModeStrategy = authModeStrategy;\n this.errorHandler = errorHandler;\n this.amplifyContext = amplifyContext;\n this.typeQuery = new WeakMap();\n this.buffer = [];\n this.runningProcesses = new BackgroundProcessManager();\n }\n buildSubscription(namespace, model, transformerMutationType, userCredentials, oidcTokenPayload, authMode, filterArg = false) {\n const { aws_appsync_authenticationType } = this.amplifyConfig;\n const { isOwner, ownerField, ownerValue } = this.getAuthorizationInfo(model, userCredentials, aws_appsync_authenticationType, oidcTokenPayload, authMode) || {};\n const [opType, opName, query] = buildSubscriptionGraphQLOperation(namespace, model, transformerMutationType, isOwner, ownerField, filterArg);\n return { authMode, opType, opName, query, isOwner, ownerField, ownerValue };\n }\n getAuthorizationInfo(model, userCredentials, defaultAuthType, oidcTokenPayload, authMode) {\n const rules = getAuthorizationRules(model);\n // Return null if user doesn't have proper credentials for private API with IAM auth\n const iamPrivateAuth = authMode === 'iam' &&\n rules.find(rule => rule.authStrategy === 'private' && rule.provider === 'iam');\n if (iamPrivateAuth && userCredentials === USER_CREDENTIALS.unauth) {\n return null;\n }\n // Group auth should take precedence over owner auth, so we are checking\n // if rule(s) have group authorization as well as if either the Cognito or\n // OIDC token has a groupClaim. If so, we are returning auth info before\n // any further owner-based auth checks.\n const groupAuthRules = rules.filter(rule => rule.authStrategy === 'groups' &&\n ['userPools', 'oidc'].includes(rule.provider));\n const validGroup = (authMode === 'oidc' || authMode === 'userPool') &&\n groupAuthRules.find(groupAuthRule => {\n // validate token against groupClaim\n if (oidcTokenPayload) {\n const oidcUserGroups = getUserGroupsFromToken(oidcTokenPayload, groupAuthRule);\n return [...oidcUserGroups].find(userGroup => {\n return groupAuthRule.groups.find(group => group === userGroup);\n });\n }\n });\n if (validGroup) {\n return {\n authMode,\n isOwner: false,\n };\n }\n let ownerAuthInfo;\n if (ownerAuthInfo) {\n return ownerAuthInfo;\n }\n // Owner auth needs additional values to be returned in order to create the subscription with\n // the correct parameters so we are getting the owner value from the OIDC token via the\n // identityClaim from the auth rule.\n const oidcOwnerAuthRules = authMode === 'oidc' || authMode === 'userPool'\n ? rules.filter(rule => rule.authStrategy === 'owner' &&\n (rule.provider === 'oidc' || rule.provider === 'userPools'))\n : [];\n oidcOwnerAuthRules.forEach(ownerAuthRule => {\n const ownerValue = oidcTokenPayload[ownerAuthRule.identityClaim];\n const singleOwner = model.fields[ownerAuthRule.ownerField]?.isArray !== true;\n const isOwnerArgRequired = singleOwner && !ownerAuthRule.areSubscriptionsPublic;\n if (ownerValue) {\n ownerAuthInfo = {\n authMode,\n isOwner: isOwnerArgRequired,\n ownerField: ownerAuthRule.ownerField,\n ownerValue: String(ownerValue),\n };\n }\n });\n if (ownerAuthInfo) {\n return ownerAuthInfo;\n }\n // Fallback: return authMode or default auth type\n return {\n authMode: authMode || defaultAuthType,\n isOwner: false,\n };\n }\n hubQueryCompletionListener(completed, capsule) {\n const { payload: { event }, } = capsule;\n if (event === PUBSUB_CONTROL_MSG.SUBSCRIPTION_ACK) {\n completed();\n }\n }\n start() {\n this.runningProcesses =\n this.runningProcesses || new BackgroundProcessManager();\n const ctlObservable = new Observable(observer => {\n const promises = [];\n // Creating subs for each model/operation combo so they can be unsubscribed\n // independently, since the auth retry behavior is asynchronous.\n let subscriptions = {};\n let oidcTokenPayload;\n let userCredentials = USER_CREDENTIALS.none;\n this.runningProcesses.add(async () => {\n try {\n // retrieving current AWS Credentials\n const credentials = (await fetchAuthSession()).tokens?.accessToken;\n userCredentials = credentials\n ? USER_CREDENTIALS.auth\n : USER_CREDENTIALS.unauth;\n }\n catch (err) {\n // best effort to get AWS credentials\n }\n try {\n // retrieving current token info from Cognito UserPools\n const session = await await fetchAuthSession();\n oidcTokenPayload = session.tokens?.idToken?.payload;\n }\n catch (err) {\n // best effort to get jwt from Cognito\n }\n Object.values(this.schema.namespaces).forEach(namespace => {\n Object.values(namespace.models)\n .filter(({ syncable }) => syncable)\n .forEach(modelDefinition => this.runningProcesses.isOpen &&\n this.runningProcesses.add(async () => {\n const modelAuthModes = await getModelAuthModes({\n authModeStrategy: this.authModeStrategy,\n defaultAuthMode: this.amplifyConfig.aws_appsync_authenticationType,\n modelName: modelDefinition.name,\n schema: this.schema,\n });\n // subscriptions are created only based on the READ auth mode(s)\n const readAuthModes = modelAuthModes.READ;\n subscriptions = {\n ...subscriptions,\n [modelDefinition.name]: {\n [TransformerMutationType.CREATE]: [],\n [TransformerMutationType.UPDATE]: [],\n [TransformerMutationType.DELETE]: [],\n },\n };\n const operations = [\n TransformerMutationType.CREATE,\n TransformerMutationType.UPDATE,\n TransformerMutationType.DELETE,\n ];\n const operationAuthModeAttempts = {\n [TransformerMutationType.CREATE]: 0,\n [TransformerMutationType.UPDATE]: 0,\n [TransformerMutationType.DELETE]: 0,\n };\n const predicatesGroup = ModelPredicateCreator.getPredicates(this.syncPredicates.get(modelDefinition), false);\n const addFilterArg = predicatesGroup !== undefined;\n // Retry subscriptions that failed for one of the following reasons:\n // 1. unauthorized - retry with next auth mode (if available)\n // 2. RTF error - retry without sending filter arg. (filtering will fall back to clientside)\n const subscriptionRetry = async (operation, addFilter = addFilterArg) => {\n const { opType: transformerMutationType, opName, query, isOwner, ownerField, ownerValue, authMode, } = this.buildSubscription(namespace, modelDefinition, operation, userCredentials, oidcTokenPayload, readAuthModes[operationAuthModeAttempts[operation]], addFilter);\n const authToken = await getTokenForCustomAuth(authMode, this.amplifyConfig);\n const variables = {};\n const customUserAgentDetails = {\n category: Category.DataStore,\n action: DataStoreAction.Subscribe,\n };\n if (addFilter && predicatesGroup) {\n variables['filter'] =\n predicateToGraphQLFilter(predicatesGroup);\n }\n if (isOwner) {\n if (!ownerValue) {\n observer.error('Owner field required, sign in is needed in order to perform this operation');\n return;\n }\n variables[ownerField] = ownerValue;\n }\n logger.debug(`Attempting ${operation} subscription with authMode: ${readAuthModes[operationAuthModeAttempts[operation]]}`);\n const queryObservable = this.amplifyContext.InternalAPI.graphql({\n query,\n variables,\n ...{ authMode },\n authToken,\n }, undefined, customUserAgentDetails);\n let subscriptionReadyCallback;\n // TODO: consider onTerminate.then(() => API.cancel(...))\n subscriptions[modelDefinition.name][transformerMutationType].push(queryObservable.subscribe({\n next: result => {\n const { data, errors } = result;\n if (Array.isArray(errors) && errors.length > 0) {\n const messages = errors.map(({ message }) => message);\n logger.warn(`Skipping incoming subscription. Messages: ${messages.join('\\n')}`);\n this.drainBuffer();\n return;\n }\n const predicatesGroup = ModelPredicateCreator.getPredicates(this.syncPredicates.get(modelDefinition), false);\n // @ts-ignore\n const { [opName]: record } = data;\n // checking incoming subscription against syncPredicate.\n // once AppSync implements filters on subscriptions, we'll be\n // able to set these when establishing the subscription instead.\n // Until then, we'll need to filter inbound\n if (this.passesPredicateValidation(record, predicatesGroup)) {\n this.pushToBuffer(transformerMutationType, modelDefinition, record);\n }\n this.drainBuffer();\n },\n error: async (subscriptionError) => {\n const { errors: [{ message = '' } = {}], } = ({\n errors: [],\n } = subscriptionError);\n const isRTFError = \n // only attempt catch if a filter variable was added to the subscription query\n addFilter &&\n this.catchRTFError(message, modelDefinition, predicatesGroup);\n // Catch RTF errors\n if (isRTFError) {\n // Unsubscribe and clear subscription array for model/operation\n subscriptions[modelDefinition.name][transformerMutationType].forEach(subscription => subscription.unsubscribe());\n subscriptions[modelDefinition.name][transformerMutationType] = [];\n // retry subscription connection without filter\n subscriptionRetry(operation, false);\n return;\n }\n if (message.includes(PUBSUB_CONTROL_MSG.REALTIME_SUBSCRIPTION_INIT_ERROR) ||\n message.includes(PUBSUB_CONTROL_MSG.CONNECTION_FAILED)) {\n // Unsubscribe and clear subscription array for model/operation\n subscriptions[modelDefinition.name][transformerMutationType].forEach(subscription => subscription.unsubscribe());\n subscriptions[modelDefinition.name][transformerMutationType] = [];\n operationAuthModeAttempts[operation]++;\n if (operationAuthModeAttempts[operation] >=\n readAuthModes.length) {\n // last auth mode retry. Continue with error\n logger.debug(`${operation} subscription failed with authMode: ${readAuthModes[operationAuthModeAttempts[operation] - 1]}`);\n }\n else {\n // retry with different auth mode. Do not trigger\n // observer error or error handler\n logger.debug(`${operation} subscription failed with authMode: ${readAuthModes[operationAuthModeAttempts[operation] - 1]}. Retrying with authMode: ${readAuthModes[operationAuthModeAttempts[operation]]}`);\n subscriptionRetry(operation);\n return;\n }\n }\n logger.warn('subscriptionError', message);\n try {\n await this.errorHandler({\n recoverySuggestion: 'Ensure app code is up to date, auth directives exist and are correct on each model, and that server-side data has not been invalidated by a schema change. If the problem persists, search for or create an issue: https://github.com/aws-amplify/amplify-js/issues',\n localModel: null,\n message,\n model: modelDefinition.name,\n operation,\n errorType: getSubscriptionErrorType(subscriptionError),\n process: ProcessName.subscribe,\n remoteModel: null,\n cause: subscriptionError,\n });\n }\n catch (e) {\n logger.error('Subscription error handler failed with:', e);\n }\n if (typeof subscriptionReadyCallback === 'function') {\n subscriptionReadyCallback();\n }\n if (message.includes('\"errorType\":\"Unauthorized\"') ||\n message.includes('\"errorType\":\"OperationDisabled\"')) {\n return;\n }\n observer.error(message);\n },\n }));\n promises.push((async () => {\n let boundFunction;\n let removeBoundFunctionListener;\n await new Promise(res => {\n subscriptionReadyCallback = res;\n boundFunction = this.hubQueryCompletionListener.bind(this, res);\n removeBoundFunctionListener = Hub.listen('api', boundFunction);\n });\n removeBoundFunctionListener();\n })());\n };\n operations.forEach(op => subscriptionRetry(op));\n }));\n });\n this.runningProcesses.isOpen &&\n this.runningProcesses.add(() => Promise.all(promises).then(() => {\n observer.next(CONTROL_MSG.CONNECTED);\n }));\n }, 'subscription processor new subscriber');\n return this.runningProcesses.addCleaner(async () => {\n Object.keys(subscriptions).forEach(modelName => {\n subscriptions[modelName][TransformerMutationType.CREATE].forEach(subscription => subscription.unsubscribe());\n subscriptions[modelName][TransformerMutationType.UPDATE].forEach(subscription => subscription.unsubscribe());\n subscriptions[modelName][TransformerMutationType.DELETE].forEach(subscription => subscription.unsubscribe());\n });\n });\n });\n const dataObservable = new Observable(observer => {\n this.dataObserver = observer;\n this.drainBuffer();\n return this.runningProcesses.addCleaner(async () => {\n this.dataObserver = null;\n });\n });\n return [ctlObservable, dataObservable];\n }\n async stop() {\n await this.runningProcesses.close();\n await this.runningProcesses.open();\n }\n passesPredicateValidation(record, predicatesGroup) {\n if (!predicatesGroup) {\n return true;\n }\n const { predicates, type } = predicatesGroup;\n return validatePredicate(record, type, predicates);\n }\n pushToBuffer(transformerMutationType, modelDefinition, data) {\n this.buffer.push([transformerMutationType, modelDefinition, data]);\n }\n drainBuffer() {\n if (this.dataObserver) {\n this.buffer.forEach(data => this.dataObserver.next(data));\n this.buffer = [];\n }\n }\n /**\n * @returns true if the service returned an RTF subscription error\n * @remarks logs a warning with remediation instructions\n *\n */\n catchRTFError(message, modelDefinition, predicatesGroup) {\n const header = 'Backend subscriptions filtering error.\\n' +\n 'Subscriptions filtering will be applied clientside.\\n';\n const messageErrorTypeMap = {\n 'UnknownArgument: Unknown field argument filter': RTFError.UnknownField,\n 'Filters exceed maximum attributes limit': RTFError.MaxAttributes,\n 'Filters combination exceed maximum limit': RTFError.MaxCombinations,\n 'filter uses same fieldName multiple time': RTFError.RepeatedFieldname,\n \"The variables input contains a field name 'not'\": RTFError.NotGroup,\n 'The variables input contains a field that is not defined for input object type': RTFError.FieldNotInType,\n };\n const [_errorMsg, errorType] = Object.entries(messageErrorTypeMap).find(([errorMsg]) => message.includes(errorMsg)) || [];\n if (errorType !== undefined) {\n const remediationMessage = generateRTFRemediation(errorType, modelDefinition, predicatesGroup);\n logger.warn(`${header}\\n${message}\\n${remediationMessage}`);\n return true;\n }\n return false;\n }\n}\nexport { SubscriptionProcessor };\n"],"names":["PUBSUB_CONTROL_MSG"],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { InternalAPI } from '@aws-amplify/api/internals';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
-
import { ProcessName
|
|
4
|
-
import { buildGraphQLOperation,
|
|
5
|
-
import { jitteredExponentialRetry, Category, DataStoreAction, NonRetryableError
|
|
3
|
+
import { ProcessName } from '../../types.mjs';
|
|
4
|
+
import { buildGraphQLOperation, predicateToGraphQLFilter, getModelAuthModes, getTokenForCustomAuth, getClientSideAuthError, getForbiddenError } from '../utils.mjs';
|
|
5
|
+
import { BackgroundProcessManager, jitteredExponentialRetry, Category, DataStoreAction, NonRetryableError } from '@aws-amplify/core/internals/utils';
|
|
6
6
|
import { ConsoleLogger, Hub } from '@aws-amplify/core';
|
|
7
|
-
import { ModelPredicateCreator } from '../../predicates';
|
|
8
|
-
import { getSyncErrorType } from './errorMaps';
|
|
7
|
+
import { ModelPredicateCreator } from '../../predicates/index.mjs';
|
|
8
|
+
import { getSyncErrorType } from './errorMaps.mjs';
|
|
9
|
+
|
|
9
10
|
const opResultDefaults = {
|
|
10
11
|
items: [],
|
|
11
12
|
nextToken: null,
|
|
@@ -313,4 +314,6 @@ class SyncProcessor {
|
|
|
313
314
|
logger.debug('sync processor stopped');
|
|
314
315
|
}
|
|
315
316
|
}
|
|
317
|
+
|
|
316
318
|
export { SyncProcessor };
|
|
319
|
+
//# sourceMappingURL=sync.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.mjs","sources":["../../../../src/sync/processors/sync.ts"],"sourcesContent":["import { InternalAPI } from '@aws-amplify/api/internals';\nimport { Observable } from 'rxjs';\nimport { ProcessName, } from '../../types';\nimport { buildGraphQLOperation, getModelAuthModes, getClientSideAuthError, getForbiddenError, predicateToGraphQLFilter, getTokenForCustomAuth, } from '../utils';\nimport { jitteredExponentialRetry, Category, DataStoreAction, NonRetryableError, BackgroundProcessManager, } from '@aws-amplify/core/internals/utils';\nimport { ConsoleLogger, Hub } from '@aws-amplify/core';\nimport { ModelPredicateCreator } from '../../predicates';\nimport { getSyncErrorType } from './errorMaps';\nconst opResultDefaults = {\n items: [],\n nextToken: null,\n startedAt: null,\n};\nconst logger = new ConsoleLogger('DataStore');\nclass SyncProcessor {\n constructor(schema, syncPredicates, amplifyConfig = {}, authModeStrategy, errorHandler, amplifyContext) {\n this.schema = schema;\n this.syncPredicates = syncPredicates;\n this.amplifyConfig = amplifyConfig;\n this.authModeStrategy = authModeStrategy;\n this.errorHandler = errorHandler;\n this.amplifyContext = amplifyContext;\n this.typeQuery = new WeakMap();\n this.runningProcesses = new BackgroundProcessManager();\n amplifyContext.InternalAPI = amplifyContext.InternalAPI || InternalAPI;\n this.generateQueries();\n }\n generateQueries() {\n Object.values(this.schema.namespaces).forEach(namespace => {\n Object.values(namespace.models)\n .filter(({ syncable }) => syncable)\n .forEach(model => {\n const [[, ...opNameQuery]] = buildGraphQLOperation(namespace, model, 'LIST');\n this.typeQuery.set(model, opNameQuery);\n });\n });\n }\n graphqlFilterFromPredicate(model) {\n if (!this.syncPredicates) {\n return null;\n }\n const predicatesGroup = ModelPredicateCreator.getPredicates(this.syncPredicates.get(model), false);\n if (!predicatesGroup) {\n return null;\n }\n return predicateToGraphQLFilter(predicatesGroup);\n }\n async retrievePage(modelDefinition, lastSync, nextToken, limit = null, filter, onTerminate) {\n const [opName, query] = this.typeQuery.get(modelDefinition);\n const variables = {\n limit,\n nextToken,\n lastSync,\n filter,\n };\n const modelAuthModes = await getModelAuthModes({\n authModeStrategy: this.authModeStrategy,\n defaultAuthMode: this.amplifyConfig.aws_appsync_authenticationType,\n modelName: modelDefinition.name,\n schema: this.schema,\n });\n // sync only needs the READ auth mode(s)\n const readAuthModes = modelAuthModes.READ;\n let authModeAttempts = 0;\n const authModeRetry = async () => {\n if (!this.runningProcesses.isOpen) {\n throw new Error('sync.retreievePage termination was requested. Exiting.');\n }\n try {\n logger.debug(`Attempting sync with authMode: ${readAuthModes[authModeAttempts]}`);\n const response = await this.jitteredRetry({\n query,\n variables,\n opName,\n modelDefinition,\n authMode: readAuthModes[authModeAttempts],\n onTerminate,\n });\n logger.debug(`Sync successful with authMode: ${readAuthModes[authModeAttempts]}`);\n return response;\n }\n catch (error) {\n authModeAttempts++;\n if (authModeAttempts >= readAuthModes.length) {\n const authMode = readAuthModes[authModeAttempts - 1];\n logger.debug(`Sync failed with authMode: ${authMode}`, error);\n if (getClientSideAuthError(error) || getForbiddenError(error)) {\n // return empty list of data so DataStore will continue to sync other models\n logger.warn(`User is unauthorized to query ${opName} with auth mode ${authMode}. No data could be returned.`);\n return {\n data: {\n [opName]: opResultDefaults,\n },\n };\n }\n throw error;\n }\n logger.debug(`Sync failed with authMode: ${readAuthModes[authModeAttempts - 1]}. Retrying with authMode: ${readAuthModes[authModeAttempts]}`);\n return await authModeRetry();\n }\n };\n const { data } = await authModeRetry();\n const { [opName]: opResult } = data;\n const { items, nextToken: newNextToken, startedAt } = opResult;\n return {\n nextToken: newNextToken,\n startedAt,\n items,\n };\n }\n async jitteredRetry({ query, variables, opName, modelDefinition, authMode, onTerminate, }) {\n return await jitteredExponentialRetry(async (query, variables) => {\n try {\n const authToken = await getTokenForCustomAuth(authMode, this.amplifyConfig);\n const customUserAgentDetails = {\n category: Category.DataStore,\n action: DataStoreAction.GraphQl,\n };\n return await this.amplifyContext.InternalAPI.graphql({\n query,\n variables,\n authMode,\n authToken,\n }, undefined, customUserAgentDetails);\n // TODO: onTerminate.then(() => API.cancel(...))\n }\n catch (error) {\n // Catch client-side (GraphQLAuthError) & 401/403 errors here so that we don't continue to retry\n const clientOrForbiddenErrorMessage = getClientSideAuthError(error) || getForbiddenError(error);\n if (clientOrForbiddenErrorMessage) {\n logger.error('Sync processor retry error:', error);\n throw new NonRetryableError(clientOrForbiddenErrorMessage);\n }\n const hasItems = Boolean(error?.data?.[opName]?.items);\n const unauthorized = error?.errors &&\n error.errors.some(err => err.errorType === 'Unauthorized');\n const otherErrors = error?.errors &&\n error.errors.filter(err => err.errorType !== 'Unauthorized');\n const result = error;\n if (hasItems) {\n result.data[opName].items = result.data[opName].items.filter(item => item !== null);\n }\n if (hasItems && otherErrors?.length) {\n await Promise.all(otherErrors.map(async (err) => {\n try {\n await this.errorHandler({\n recoverySuggestion: 'Ensure app code is up to date, auth directives exist and are correct on each model, and that server-side data has not been invalidated by a schema change. If the problem persists, search for or create an issue: https://github.com/aws-amplify/amplify-js/issues',\n localModel: null,\n message: err.message,\n model: modelDefinition.name,\n operation: opName,\n errorType: getSyncErrorType(err),\n process: ProcessName.sync,\n remoteModel: null,\n cause: err,\n });\n }\n catch (e) {\n logger.error('Sync error handler failed with:', e);\n }\n }));\n Hub.dispatch('datastore', {\n event: 'nonApplicableDataReceived',\n data: {\n errors: otherErrors,\n modelName: modelDefinition.name,\n },\n });\n }\n /**\n * Handle $util.unauthorized() in resolver request mapper, which responses with something\n * like this:\n *\n * ```\n * {\n * \tdata: { syncYourModel: null },\n * \terrors: [\n * \t\t{\n * \t\t\tpath: ['syncLegacyJSONComments'],\n * \t\t\tdata: null,\n * \t\t\terrorType: 'Unauthorized',\n * \t\t\terrorInfo: null,\n * \t\t\tlocations: [{ line: 2, column: 3, sourceName: null }],\n * \t\t\tmessage:\n * \t\t\t\t'Not Authorized to access syncYourModel on type Query',\n * \t\t\t},\n * \t\t],\n * \t}\n * ```\n *\n * The correct handling for this is to signal that we've encountered a non-retryable error,\n * since the server has responded with an auth error and *NO DATA* at this point.\n */\n if (unauthorized) {\n this.errorHandler({\n recoverySuggestion: 'Ensure app code is up to date, auth directives exist and are correct on each model, and that server-side data has not been invalidated by a schema change. If the problem persists, search for or create an issue: https://github.com/aws-amplify/amplify-js/issues',\n localModel: null,\n message: error.message,\n model: modelDefinition.name,\n operation: opName,\n errorType: getSyncErrorType(error.errors[0]),\n process: ProcessName.sync,\n remoteModel: null,\n cause: error,\n });\n throw new NonRetryableError(error);\n }\n if (result.data?.[opName]?.items?.length) {\n return result;\n }\n throw error;\n }\n }, [query, variables], undefined, onTerminate);\n }\n start(typesLastSync) {\n const { maxRecordsToSync, syncPageSize } = this.amplifyConfig;\n const parentPromises = new Map();\n const observable = new Observable(observer => {\n const sortedTypesLastSyncs = Object.values(this.schema.namespaces).reduce((map, namespace) => {\n for (const modelName of Array.from(namespace.modelTopologicalOrdering.keys())) {\n const typeLastSync = typesLastSync.get(namespace.models[modelName]);\n map.set(namespace.models[modelName], typeLastSync);\n }\n return map;\n }, new Map());\n const allModelsReady = Array.from(sortedTypesLastSyncs.entries())\n .filter(([{ syncable }]) => syncable)\n .map(([modelDefinition, [namespace, lastSync]]) => this.runningProcesses.isOpen &&\n this.runningProcesses.add(async (onTerminate) => {\n let done = false;\n let nextToken = null;\n let startedAt = null;\n let items = null;\n let recordsReceived = 0;\n const filter = this.graphqlFilterFromPredicate(modelDefinition);\n const parents = this.schema.namespaces[namespace].modelTopologicalOrdering.get(modelDefinition.name);\n const promises = parents.map(parent => parentPromises.get(`${namespace}_${parent}`));\n const promise = new Promise(async (res) => {\n await Promise.all(promises);\n do {\n /**\n * If `runningProcesses` is not open, it means that the sync processor has been\n * stopped (for example by calling `DataStore.clear()` upstream) and has not yet\n * finished terminating and/or waiting for its background processes to complete.\n */\n if (!this.runningProcesses.isOpen) {\n logger.debug(`Sync processor has been stopped, terminating sync for ${modelDefinition.name}`);\n return res();\n }\n const limit = Math.min(maxRecordsToSync - recordsReceived, syncPageSize);\n /**\n * It's possible that `retrievePage` will fail.\n * If it does fail, continue merging the rest of the data,\n * and invoke the error handler for non-applicable data.\n */\n try {\n ({ items, nextToken, startedAt } = await this.retrievePage(modelDefinition, lastSync, nextToken, limit, filter, onTerminate));\n }\n catch (error) {\n try {\n await this.errorHandler({\n recoverySuggestion: 'Ensure app code is up to date, auth directives exist and are correct on each model, and that server-side data has not been invalidated by a schema change. If the problem persists, search for or create an issue: https://github.com/aws-amplify/amplify-js/issues',\n localModel: null,\n message: error.message,\n model: modelDefinition.name,\n operation: null,\n errorType: getSyncErrorType(error),\n process: ProcessName.sync,\n remoteModel: null,\n cause: error,\n });\n }\n catch (e) {\n logger.error('Sync error handler failed with:', e);\n }\n /**\n * If there's an error, this model fails, but the rest of the sync should\n * continue. To facilitate this, we explicitly mark this model as `done`\n * with no items and allow the loop to continue organically. This ensures\n * all callbacks (subscription messages) happen as normal, so anything\n * waiting on them knows the model is as done as it can be.\n */\n done = true;\n items = [];\n }\n recordsReceived += items.length;\n done =\n nextToken === null || recordsReceived >= maxRecordsToSync;\n observer.next({\n namespace,\n modelDefinition,\n items,\n done,\n startedAt,\n isFullSync: !lastSync,\n });\n } while (!done);\n res();\n });\n parentPromises.set(`${namespace}_${modelDefinition.name}`, promise);\n await promise;\n }, `adding model ${modelDefinition.name}`));\n Promise.all(allModelsReady).then(() => {\n observer.complete();\n });\n });\n return observable;\n }\n async stop() {\n logger.debug('stopping sync processor');\n await this.runningProcesses.close();\n await this.runningProcesses.open();\n logger.debug('sync processor stopped');\n }\n}\nexport { SyncProcessor };\n"],"names":[],"mappings":"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"}
|