dexie-cloud-addon 4.0.0-beta.18 → 4.0.0-beta.19
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/dist/modern/dexie-cloud-addon.js +26 -20
- package/dist/modern/dexie-cloud-addon.js.map +1 -1
- package/dist/modern/dexie-cloud-addon.min.js +1 -1
- package/dist/modern/dexie-cloud-addon.min.js.map +1 -1
- package/dist/modern/service-worker.js +30 -21
- package/dist/modern/service-worker.js.map +1 -1
- package/dist/modern/service-worker.min.js +1 -1
- package/dist/modern/service-worker.min.js.map +1 -1
- package/dist/module-es5/dexie-cloud-addon.js +571 -564
- package/dist/module-es5/dexie-cloud-addon.js.map +1 -1
- package/dist/module-es5/dexie-cloud-addon.min.js +1 -1
- package/dist/module-es5/dexie-cloud-addon.min.js.map +1 -1
- package/dist/types/DexieCloudAPI.d.ts +1 -0
- package/dist/types/DexieCloudEntity.d.ts +8 -0
- package/dist/types/DexieCloudOptions.d.ts +1 -0
- package/dist/types/WebSocketStatus.d.ts +1 -0
- package/dist/types/createMyMembersObservable.d.ts +14 -0
- package/dist/types/currentUserObservable.d.ts +3 -0
- package/dist/types/helpers/BroadcastedLocalEvent.d.ts +8 -0
- package/dist/types/helpers/visibleState.d.ts +1 -0
- package/dist/types/permissionsLookup.d.ts +9 -0
- package/dist/types/permissionsLookupObservable.d.ts +14 -0
- package/dist/types/sync/globalizePrivateIds.d.ts +4 -0
- package/dist/types/sync/syncServerToClientOnly.d.ts +3 -0
- package/dist/types/types/CloudConnectionStatus.d.ts +0 -0
- package/dist/types/types/ConnectionStatus.d.ts +0 -0
- package/dist/types/types/LoginState.d.ts +41 -0
- package/dist/types/types/SyncConnectionStatus.d.ts +1 -0
- package/dist/types/types/SyncFlowStatus.d.ts +6 -0
- package/dist/types/types/SyncStatus.d.ts +6 -0
- package/dist/umd/dexie-cloud-addon.js +571 -564
- package/dist/umd/dexie-cloud-addon.js.map +1 -1
- package/dist/umd/dexie-cloud-addon.min.js +1 -1
- package/dist/umd/dexie-cloud-addon.min.js.map +1 -1
- package/dist/umd/service-worker.js +30 -21
- package/dist/umd/service-worker.js.map +1 -1
- package/dist/umd/service-worker.min.js +1 -1
- package/dist/umd/service-worker.min.js.map +1 -1
- package/dist/umd-modern/dexie-cloud-addon.js +23 -17
- package/dist/umd-modern/dexie-cloud-addon.js.map +1 -1
- package/package.json +1 -1
|
@@ -101,7 +101,7 @@ function __spreadArray$1(to, from, pack) {
|
|
|
101
101
|
*
|
|
102
102
|
* ==========================================================================
|
|
103
103
|
*
|
|
104
|
-
* Version 4.0.0-beta.
|
|
104
|
+
* Version 4.0.0-beta.19, Fri May 20 2022
|
|
105
105
|
*
|
|
106
106
|
* https://dexie.org
|
|
107
107
|
*
|
|
@@ -273,8 +273,8 @@ function applyOperation(target, table, op) {
|
|
|
273
273
|
switch (entry.type) {
|
|
274
274
|
case "ups":
|
|
275
275
|
// Adjust the existing upsert with additional updates
|
|
276
|
-
for (var
|
|
277
|
-
var
|
|
276
|
+
for (var _k = 0, _l = Object.entries(changeSpec); _k < _l.length; _k++) {
|
|
277
|
+
var _m = _l[_k], propPath = _m[0], value = _m[1];
|
|
278
278
|
setByKeyPath(entry.val, propPath, value);
|
|
279
279
|
}
|
|
280
280
|
break;
|
|
@@ -301,10 +301,10 @@ function applyOperation(target, table, op) {
|
|
|
301
301
|
return target;
|
|
302
302
|
}
|
|
303
303
|
function applyOperations(target, ops) {
|
|
304
|
-
for (var
|
|
305
|
-
var
|
|
306
|
-
for (var
|
|
307
|
-
var mut = muts_1[
|
|
304
|
+
for (var _k = 0, ops_1 = ops; _k < ops_1.length; _k++) {
|
|
305
|
+
var _l = ops_1[_k], table = _l.table, muts = _l.muts;
|
|
306
|
+
for (var _m = 0, muts_1 = muts; _m < muts_1.length; _m++) {
|
|
307
|
+
var mut = muts_1[_m];
|
|
308
308
|
applyOperation(target, table, mut);
|
|
309
309
|
}
|
|
310
310
|
}
|
|
@@ -313,10 +313,10 @@ function subtractChanges(target, // Server change set
|
|
|
313
313
|
changesToSubtract // additional mutations on client during syncWithServer()
|
|
314
314
|
) {
|
|
315
315
|
var _a, _b, _c;
|
|
316
|
-
for (var
|
|
317
|
-
var
|
|
318
|
-
for (var
|
|
319
|
-
var
|
|
316
|
+
for (var _k = 0, _l = Object.entries(changesToSubtract); _k < _l.length; _k++) {
|
|
317
|
+
var _m = _l[_k], table = _m[0], mutationSet = _m[1];
|
|
318
|
+
for (var _o = 0, _p = Object.entries(mutationSet); _o < _p.length; _o++) {
|
|
319
|
+
var _q = _p[_o], key = _q[0], mut = _q[1];
|
|
320
320
|
switch (mut.type) {
|
|
321
321
|
case 'ups':
|
|
322
322
|
{
|
|
@@ -346,8 +346,8 @@ changesToSubtract // additional mutations on client during syncWithServer()
|
|
|
346
346
|
switch (targetMut.type) {
|
|
347
347
|
case 'ups':
|
|
348
348
|
// Adjust the server upsert with locally updated values.
|
|
349
|
-
for (var
|
|
350
|
-
var
|
|
349
|
+
for (var _r = 0, _s = Object.entries(mut.mod); _r < _s.length; _r++) {
|
|
350
|
+
var _t = _s[_r], propPath = _t[0], value = _t[1];
|
|
351
351
|
setByKeyPath(targetMut.val, propPath, value);
|
|
352
352
|
}
|
|
353
353
|
break;
|
|
@@ -356,8 +356,8 @@ changesToSubtract // additional mutations on client during syncWithServer()
|
|
|
356
356
|
break;
|
|
357
357
|
case 'upd':
|
|
358
358
|
// Remove the local update props from the server update mutation.
|
|
359
|
-
for (var
|
|
360
|
-
var propPath = _u
|
|
359
|
+
for (var _u = 0, _v = Object.keys(mut.mod); _u < _v.length; _u++) {
|
|
360
|
+
var propPath = _v[_u];
|
|
361
361
|
delete targetMut.mod[propPath];
|
|
362
362
|
}
|
|
363
363
|
break;
|
|
@@ -380,10 +380,10 @@ function toDBOperationSet(inSet) {
|
|
|
380
380
|
var txid = randomString$1(16);
|
|
381
381
|
// Convert data into a temporary map to collect mutations of same table and type
|
|
382
382
|
var map = {};
|
|
383
|
-
for (var
|
|
384
|
-
var
|
|
385
|
-
for (var
|
|
386
|
-
var
|
|
383
|
+
for (var _k = 0, _l = Object.entries(inSet); _k < _l.length; _k++) {
|
|
384
|
+
var _m = _l[_k], table = _m[0], ops = _m[1];
|
|
385
|
+
for (var _o = 0, _p = Object.entries(ops); _o < _p.length; _o++) {
|
|
386
|
+
var _q = _p[_o], key = _q[0], op = _q[1];
|
|
387
387
|
var mapEntry = map[table] || (map[table] = {});
|
|
388
388
|
var ops_2 = mapEntry[op.type] || (mapEntry[op.type] = []);
|
|
389
389
|
ops_2.push(Object.assign({ key: key }, op)); // DBKeyMutation doesn't contain key, so we need to bring it in.
|
|
@@ -391,14 +391,14 @@ function toDBOperationSet(inSet) {
|
|
|
391
391
|
}
|
|
392
392
|
// Start computing the resulting format:
|
|
393
393
|
var result = [];
|
|
394
|
-
for (var
|
|
395
|
-
var
|
|
394
|
+
for (var _r = 0, _s = Object.entries(map); _r < _s.length; _r++) {
|
|
395
|
+
var _t = _s[_r], table = _t[0], ops = _t[1];
|
|
396
396
|
var resultEntry = {
|
|
397
397
|
table: table,
|
|
398
398
|
muts: [],
|
|
399
399
|
};
|
|
400
|
-
for (var
|
|
401
|
-
var
|
|
400
|
+
for (var _u = 0, _v = Object.entries(ops); _u < _v.length; _u++) {
|
|
401
|
+
var _w = _v[_u], optype = _w[0], muts = _w[1];
|
|
402
402
|
switch (optype) {
|
|
403
403
|
case "ups": {
|
|
404
404
|
var op = {
|
|
@@ -2045,18 +2045,18 @@ var hasComplainedAboutSyncEvent = false;
|
|
|
2045
2045
|
function registerSyncEvent(db, purpose) {
|
|
2046
2046
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2047
2047
|
var sw, e_3;
|
|
2048
|
-
return __generator$1(this, function (
|
|
2049
|
-
switch (
|
|
2048
|
+
return __generator$1(this, function (_k) {
|
|
2049
|
+
switch (_k.label) {
|
|
2050
2050
|
case 0:
|
|
2051
|
-
|
|
2051
|
+
_k.trys.push([0, 4, , 5]);
|
|
2052
2052
|
return [4 /*yield*/, navigator.serviceWorker.ready];
|
|
2053
2053
|
case 1:
|
|
2054
|
-
sw =
|
|
2054
|
+
sw = _k.sent();
|
|
2055
2055
|
if (!(purpose === "push" && sw.sync)) return [3 /*break*/, 3];
|
|
2056
2056
|
return [4 /*yield*/, sw.sync.register("dexie-cloud:".concat(db.name))];
|
|
2057
2057
|
case 2:
|
|
2058
|
-
|
|
2059
|
-
|
|
2058
|
+
_k.sent();
|
|
2059
|
+
_k.label = 3;
|
|
2060
2060
|
case 3:
|
|
2061
2061
|
if (sw.active) {
|
|
2062
2062
|
// Use postMessage for pull syncs and for browsers not supporting sync event (Firefox, Safari).
|
|
@@ -2072,7 +2072,7 @@ function registerSyncEvent(db, purpose) {
|
|
|
2072
2072
|
}
|
|
2073
2073
|
return [2 /*return*/];
|
|
2074
2074
|
case 4:
|
|
2075
|
-
e_3 =
|
|
2075
|
+
e_3 = _k.sent();
|
|
2076
2076
|
if (!hasComplainedAboutSyncEvent) {
|
|
2077
2077
|
console.debug("Dexie Cloud: Could not register sync event", e_3);
|
|
2078
2078
|
hasComplainedAboutSyncEvent = true;
|
|
@@ -2087,33 +2087,33 @@ function registerPeriodicSyncEvent(db) {
|
|
|
2087
2087
|
var _a;
|
|
2088
2088
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2089
2089
|
var periodicSync, e_4, e_5;
|
|
2090
|
-
return __generator$1(this, function (
|
|
2091
|
-
switch (
|
|
2090
|
+
return __generator$1(this, function (_k) {
|
|
2091
|
+
switch (_k.label) {
|
|
2092
2092
|
case 0:
|
|
2093
|
-
|
|
2093
|
+
_k.trys.push([0, 8, , 9]);
|
|
2094
2094
|
return [4 /*yield*/, navigator.serviceWorker.ready];
|
|
2095
2095
|
case 1:
|
|
2096
|
-
periodicSync = (
|
|
2096
|
+
periodicSync = (_k.sent()).periodicSync;
|
|
2097
2097
|
if (!periodicSync) return [3 /*break*/, 6];
|
|
2098
|
-
|
|
2098
|
+
_k.label = 2;
|
|
2099
2099
|
case 2:
|
|
2100
|
-
|
|
2100
|
+
_k.trys.push([2, 4, , 5]);
|
|
2101
2101
|
return [4 /*yield*/, periodicSync.register("dexie-cloud:".concat(db.name), (_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.periodicSync)];
|
|
2102
2102
|
case 3:
|
|
2103
|
-
|
|
2103
|
+
_k.sent();
|
|
2104
2104
|
console.debug("Dexie Cloud: Successfully registered periodicsync event for ".concat(db.name));
|
|
2105
2105
|
return [3 /*break*/, 5];
|
|
2106
2106
|
case 4:
|
|
2107
|
-
e_4 =
|
|
2107
|
+
e_4 = _k.sent();
|
|
2108
2108
|
console.debug("Dexie Cloud: Failed to register periodic sync. Your PWA must be installed to allow background sync.", e_4);
|
|
2109
2109
|
return [3 /*break*/, 5];
|
|
2110
2110
|
case 5: return [3 /*break*/, 7];
|
|
2111
2111
|
case 6:
|
|
2112
2112
|
console.debug("Dexie Cloud: periodicSync not supported.");
|
|
2113
|
-
|
|
2113
|
+
_k.label = 7;
|
|
2114
2114
|
case 7: return [3 /*break*/, 9];
|
|
2115
2115
|
case 8:
|
|
2116
|
-
e_5 =
|
|
2116
|
+
e_5 = _k.sent();
|
|
2117
2117
|
console.debug("Dexie Cloud: Could not register periodicSync for ".concat(db.name), e_5);
|
|
2118
2118
|
return [3 /*break*/, 9];
|
|
2119
2119
|
case 9: return [2 /*return*/];
|
|
@@ -2168,8 +2168,8 @@ function interactWithUser(userInteraction, req) {
|
|
|
2168
2168
|
}
|
|
2169
2169
|
function alertUser(userInteraction, title) {
|
|
2170
2170
|
var alerts = [];
|
|
2171
|
-
for (var
|
|
2172
|
-
alerts[
|
|
2171
|
+
for (var _k = 2; _k < arguments.length; _k++) {
|
|
2172
|
+
alerts[_k - 2] = arguments[_k];
|
|
2173
2173
|
}
|
|
2174
2174
|
return interactWithUser(userInteraction, {
|
|
2175
2175
|
type: 'message-alert',
|
|
@@ -2181,11 +2181,11 @@ function alertUser(userInteraction, title) {
|
|
|
2181
2181
|
function promptForEmail(userInteraction, title, emailHint) {
|
|
2182
2182
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2183
2183
|
var email;
|
|
2184
|
-
return __generator$1(this, function (
|
|
2185
|
-
switch (
|
|
2184
|
+
return __generator$1(this, function (_k) {
|
|
2185
|
+
switch (_k.label) {
|
|
2186
2186
|
case 0:
|
|
2187
2187
|
email = emailHint || '';
|
|
2188
|
-
|
|
2188
|
+
_k.label = 1;
|
|
2189
2189
|
case 1:
|
|
2190
2190
|
if (!(!email || !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,10}$/.test(email))) return [3 /*break*/, 3];
|
|
2191
2191
|
return [4 /*yield*/, interactWithUser(userInteraction, {
|
|
@@ -2209,7 +2209,7 @@ function promptForEmail(userInteraction, title, emailHint) {
|
|
|
2209
2209
|
},
|
|
2210
2210
|
})];
|
|
2211
2211
|
case 2:
|
|
2212
|
-
email = (
|
|
2212
|
+
email = (_k.sent()).email;
|
|
2213
2213
|
return [3 /*break*/, 1];
|
|
2214
2214
|
case 3: return [2 /*return*/, email];
|
|
2215
2215
|
}
|
|
@@ -2219,8 +2219,8 @@ function promptForEmail(userInteraction, title, emailHint) {
|
|
|
2219
2219
|
function promptForOTP(userInteraction, email, alert) {
|
|
2220
2220
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2221
2221
|
var alerts, otp;
|
|
2222
|
-
return __generator$1(this, function (
|
|
2223
|
-
switch (
|
|
2222
|
+
return __generator$1(this, function (_k) {
|
|
2223
|
+
switch (_k.label) {
|
|
2224
2224
|
case 0:
|
|
2225
2225
|
alerts = [
|
|
2226
2226
|
{
|
|
@@ -2246,7 +2246,7 @@ function promptForOTP(userInteraction, email, alert) {
|
|
|
2246
2246
|
},
|
|
2247
2247
|
})];
|
|
2248
2248
|
case 1:
|
|
2249
|
-
otp = (
|
|
2249
|
+
otp = (_k.sent()).otp;
|
|
2250
2250
|
return [2 /*return*/, otp];
|
|
2251
2251
|
}
|
|
2252
2252
|
});
|
|
@@ -2256,11 +2256,11 @@ function loadAccessToken(db) {
|
|
|
2256
2256
|
var _a, _b;
|
|
2257
2257
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2258
2258
|
var currentUser, accessToken, accessTokenExpiration, refreshToken, refreshTokenExpiration, claims, expTime, refreshExpTime, refreshedLogin;
|
|
2259
|
-
return __generator$1(this, function (
|
|
2260
|
-
switch (
|
|
2259
|
+
return __generator$1(this, function (_k) {
|
|
2260
|
+
switch (_k.label) {
|
|
2261
2261
|
case 0: return [4 /*yield*/, db.getCurrentUser()];
|
|
2262
2262
|
case 1:
|
|
2263
|
-
currentUser =
|
|
2263
|
+
currentUser = _k.sent();
|
|
2264
2264
|
accessToken = currentUser.accessToken, accessTokenExpiration = currentUser.accessTokenExpiration, refreshToken = currentUser.refreshToken, refreshTokenExpiration = currentUser.refreshTokenExpiration, claims = currentUser.claims;
|
|
2265
2265
|
if (!accessToken)
|
|
2266
2266
|
return [2 /*return*/];
|
|
@@ -2277,13 +2277,13 @@ function loadAccessToken(db) {
|
|
|
2277
2277
|
}
|
|
2278
2278
|
return [4 /*yield*/, refreshAccessToken(db.cloud.options.databaseUrl, currentUser)];
|
|
2279
2279
|
case 2:
|
|
2280
|
-
refreshedLogin =
|
|
2280
|
+
refreshedLogin = _k.sent();
|
|
2281
2281
|
return [4 /*yield*/, db.table('$logins').update(claims.sub, {
|
|
2282
2282
|
accessToken: refreshedLogin.accessToken,
|
|
2283
2283
|
accessTokenExpiration: refreshedLogin.accessTokenExpiration,
|
|
2284
2284
|
})];
|
|
2285
2285
|
case 3:
|
|
2286
|
-
|
|
2286
|
+
_k.sent();
|
|
2287
2287
|
return [2 /*return*/, refreshedLogin.accessToken];
|
|
2288
2288
|
}
|
|
2289
2289
|
});
|
|
@@ -2291,8 +2291,8 @@ function loadAccessToken(db) {
|
|
|
2291
2291
|
}
|
|
2292
2292
|
function authenticate(url, context, fetchToken, userInteraction, hints) {
|
|
2293
2293
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2294
|
-
return __generator$1(this, function (
|
|
2295
|
-
switch (
|
|
2294
|
+
return __generator$1(this, function (_k) {
|
|
2295
|
+
switch (_k.label) {
|
|
2296
2296
|
case 0:
|
|
2297
2297
|
if (!(context.accessToken &&
|
|
2298
2298
|
context.accessTokenExpiration.getTime() > Date.now())) return [3 /*break*/, 1];
|
|
@@ -2302,9 +2302,9 @@ function authenticate(url, context, fetchToken, userInteraction, hints) {
|
|
|
2302
2302
|
(!context.refreshTokenExpiration ||
|
|
2303
2303
|
context.refreshTokenExpiration.getTime() > Date.now()))) return [3 /*break*/, 3];
|
|
2304
2304
|
return [4 /*yield*/, refreshAccessToken(url, context)];
|
|
2305
|
-
case 2: return [2 /*return*/,
|
|
2305
|
+
case 2: return [2 /*return*/, _k.sent()];
|
|
2306
2306
|
case 3: return [4 /*yield*/, userAuthenticate(context, fetchToken, userInteraction, hints)];
|
|
2307
|
-
case 4: return [2 /*return*/,
|
|
2307
|
+
case 4: return [2 /*return*/, _k.sent()];
|
|
2308
2308
|
}
|
|
2309
2309
|
});
|
|
2310
2310
|
});
|
|
@@ -2312,8 +2312,8 @@ function authenticate(url, context, fetchToken, userInteraction, hints) {
|
|
|
2312
2312
|
function refreshAccessToken(url, login) {
|
|
2313
2313
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2314
2314
|
var time_stamp, signing_algorithm, textEncoder, data, binarySignature, signature, tokenRequest, res, response;
|
|
2315
|
-
return __generator$1(this, function (
|
|
2316
|
-
switch (
|
|
2315
|
+
return __generator$1(this, function (_k) {
|
|
2316
|
+
switch (_k.label) {
|
|
2317
2317
|
case 0:
|
|
2318
2318
|
if (!login.refreshToken)
|
|
2319
2319
|
throw new Error("Cannot refresh token - refresh token is missing.");
|
|
@@ -2325,7 +2325,7 @@ function refreshAccessToken(url, login) {
|
|
|
2325
2325
|
data = textEncoder.encode(login.refreshToken + time_stamp);
|
|
2326
2326
|
return [4 /*yield*/, crypto.subtle.sign(signing_algorithm, login.nonExportablePrivateKey, data)];
|
|
2327
2327
|
case 1:
|
|
2328
|
-
binarySignature =
|
|
2328
|
+
binarySignature = _k.sent();
|
|
2329
2329
|
signature = b64encode(binarySignature);
|
|
2330
2330
|
tokenRequest = {
|
|
2331
2331
|
grant_type: 'refresh_token',
|
|
@@ -2342,12 +2342,12 @@ function refreshAccessToken(url, login) {
|
|
|
2342
2342
|
mode: 'cors',
|
|
2343
2343
|
})];
|
|
2344
2344
|
case 2:
|
|
2345
|
-
res =
|
|
2345
|
+
res = _k.sent();
|
|
2346
2346
|
if (res.status !== 200)
|
|
2347
2347
|
throw new Error("RefreshToken: Status ".concat(res.status, " from ").concat(url, "/token"));
|
|
2348
2348
|
return [4 /*yield*/, res.json()];
|
|
2349
2349
|
case 3:
|
|
2350
|
-
response =
|
|
2350
|
+
response = _k.sent();
|
|
2351
2351
|
login.accessToken = response.accessToken;
|
|
2352
2352
|
login.accessTokenExpiration = response.accessTokenExpiration
|
|
2353
2353
|
? new Date(response.accessTokenExpiration)
|
|
@@ -2359,9 +2359,9 @@ function refreshAccessToken(url, login) {
|
|
|
2359
2359
|
}
|
|
2360
2360
|
function userAuthenticate(context, fetchToken, userInteraction, hints) {
|
|
2361
2361
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2362
|
-
var
|
|
2363
|
-
return __generator$1(this, function (
|
|
2364
|
-
switch (
|
|
2362
|
+
var _k, privateKey, publicKey, publicKeySPKI, publicKeyPEM, response2, error_1;
|
|
2363
|
+
return __generator$1(this, function (_l) {
|
|
2364
|
+
switch (_l.label) {
|
|
2365
2365
|
case 0: return [4 /*yield*/, crypto.subtle.generateKey({
|
|
2366
2366
|
name: 'RSASSA-PKCS1-v1_5',
|
|
2367
2367
|
modulusLength: 2048,
|
|
@@ -2370,24 +2370,24 @@ function userAuthenticate(context, fetchToken, userInteraction, hints) {
|
|
|
2370
2370
|
}, false, // Non-exportable...
|
|
2371
2371
|
['sign', 'verify'])];
|
|
2372
2372
|
case 1:
|
|
2373
|
-
|
|
2373
|
+
_k = _l.sent(), privateKey = _k.privateKey, publicKey = _k.publicKey;
|
|
2374
2374
|
if (!privateKey || !publicKey)
|
|
2375
2375
|
throw new Error("Could not generate RSA keypair"); // Typings suggest these can be undefined...
|
|
2376
2376
|
context.nonExportablePrivateKey = privateKey; //...but storable!
|
|
2377
2377
|
return [4 /*yield*/, crypto.subtle.exportKey('spki', publicKey)];
|
|
2378
2378
|
case 2:
|
|
2379
|
-
publicKeySPKI =
|
|
2379
|
+
publicKeySPKI = _l.sent();
|
|
2380
2380
|
publicKeyPEM = spkiToPEM(publicKeySPKI);
|
|
2381
2381
|
context.publicKey = publicKey;
|
|
2382
|
-
|
|
2382
|
+
_l.label = 3;
|
|
2383
2383
|
case 3:
|
|
2384
|
-
|
|
2384
|
+
_l.trys.push([3, 7, , 9]);
|
|
2385
2385
|
return [4 /*yield*/, fetchToken({
|
|
2386
2386
|
public_key: publicKeyPEM,
|
|
2387
2387
|
hints: hints,
|
|
2388
2388
|
})];
|
|
2389
2389
|
case 4:
|
|
2390
|
-
response2 =
|
|
2390
|
+
response2 = _l.sent();
|
|
2391
2391
|
if (response2.type !== 'tokens')
|
|
2392
2392
|
throw new Error("Unexpected response type from token endpoint: ".concat(response2.type));
|
|
2393
2393
|
context.accessToken = response2.accessToken;
|
|
@@ -2408,11 +2408,11 @@ function userAuthenticate(context, fetchToken, userInteraction, hints) {
|
|
|
2408
2408
|
alerts: response2.alerts,
|
|
2409
2409
|
})];
|
|
2410
2410
|
case 5:
|
|
2411
|
-
|
|
2412
|
-
|
|
2411
|
+
_l.sent();
|
|
2412
|
+
_l.label = 6;
|
|
2413
2413
|
case 6: return [2 /*return*/, context];
|
|
2414
2414
|
case 7:
|
|
2415
|
-
error_1 =
|
|
2415
|
+
error_1 = _l.sent();
|
|
2416
2416
|
return [4 /*yield*/, alertUser(userInteraction, 'Authentication Failed', {
|
|
2417
2417
|
type: 'error',
|
|
2418
2418
|
messageCode: 'GENERIC_ERROR',
|
|
@@ -2420,7 +2420,7 @@ function userAuthenticate(context, fetchToken, userInteraction, hints) {
|
|
|
2420
2420
|
messageParams: {}
|
|
2421
2421
|
}).catch(function () { })];
|
|
2422
2422
|
case 8:
|
|
2423
|
-
|
|
2423
|
+
_l.sent();
|
|
2424
2424
|
throw error_1;
|
|
2425
2425
|
case 9: return [2 /*return*/];
|
|
2426
2426
|
}
|
|
@@ -2463,7 +2463,7 @@ var AuthPersistedContext = /** @class */ (function () {
|
|
|
2463
2463
|
AuthPersistedContext.prototype.save = function () {
|
|
2464
2464
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2465
2465
|
var db;
|
|
2466
|
-
return __generator$1(this, function (
|
|
2466
|
+
return __generator$1(this, function (_k) {
|
|
2467
2467
|
db = wm$1.get(this);
|
|
2468
2468
|
db.table("$logins").put(this);
|
|
2469
2469
|
return [2 /*return*/];
|
|
@@ -2490,13 +2490,13 @@ var HttpError = /** @class */ (function (_super_1) {
|
|
|
2490
2490
|
}(Error));
|
|
2491
2491
|
function otpFetchTokenCallback(db) {
|
|
2492
2492
|
var userInteraction = db.cloud.userInteraction;
|
|
2493
|
-
return function otpAuthenticate(
|
|
2494
|
-
var public_key =
|
|
2493
|
+
return function otpAuthenticate(_k) {
|
|
2494
|
+
var public_key = _k.public_key, hints = _k.hints;
|
|
2495
2495
|
var _a;
|
|
2496
2496
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2497
|
-
var tokenRequest, url, demo_user, email, res1, errMsg, response, otp, res2, errorText,
|
|
2498
|
-
return __generator$1(this, function (
|
|
2499
|
-
switch (
|
|
2497
|
+
var tokenRequest, url, demo_user, email, res1, errMsg, response, otp, res2, errorText, _k, errMsg, response2;
|
|
2498
|
+
return __generator$1(this, function (_l) {
|
|
2499
|
+
switch (_l.label) {
|
|
2500
2500
|
case 0:
|
|
2501
2501
|
url = (_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.databaseUrl;
|
|
2502
2502
|
if (!url)
|
|
@@ -2504,7 +2504,7 @@ function otpFetchTokenCallback(db) {
|
|
|
2504
2504
|
if (!((hints === null || hints === void 0 ? void 0 : hints.grant_type) === 'demo')) return [3 /*break*/, 2];
|
|
2505
2505
|
return [4 /*yield*/, promptForEmail(userInteraction, 'Enter a demo user email', (hints === null || hints === void 0 ? void 0 : hints.email) || (hints === null || hints === void 0 ? void 0 : hints.userId))];
|
|
2506
2506
|
case 1:
|
|
2507
|
-
demo_user =
|
|
2507
|
+
demo_user = _l.sent();
|
|
2508
2508
|
tokenRequest = {
|
|
2509
2509
|
demo_user: demo_user,
|
|
2510
2510
|
grant_type: 'demo',
|
|
@@ -2514,25 +2514,25 @@ function otpFetchTokenCallback(db) {
|
|
|
2514
2514
|
return [3 /*break*/, 4];
|
|
2515
2515
|
case 2: return [4 /*yield*/, promptForEmail(userInteraction, 'Enter email address', hints === null || hints === void 0 ? void 0 : hints.email)];
|
|
2516
2516
|
case 3:
|
|
2517
|
-
email =
|
|
2517
|
+
email = _l.sent();
|
|
2518
2518
|
tokenRequest = {
|
|
2519
2519
|
email: email,
|
|
2520
2520
|
grant_type: 'otp',
|
|
2521
2521
|
scopes: ['ACCESS_DB'],
|
|
2522
2522
|
public_key: public_key,
|
|
2523
2523
|
};
|
|
2524
|
-
|
|
2524
|
+
_l.label = 4;
|
|
2525
2525
|
case 4: return [4 /*yield*/, fetch("".concat(url, "/token"), {
|
|
2526
2526
|
body: JSON.stringify(tokenRequest),
|
|
2527
2527
|
method: 'post',
|
|
2528
2528
|
headers: { 'Content-Type': 'application/json', mode: 'cors' },
|
|
2529
2529
|
})];
|
|
2530
2530
|
case 5:
|
|
2531
|
-
res1 =
|
|
2531
|
+
res1 = _l.sent();
|
|
2532
2532
|
if (!(res1.status !== 200)) return [3 /*break*/, 8];
|
|
2533
2533
|
return [4 /*yield*/, res1.text()];
|
|
2534
2534
|
case 6:
|
|
2535
|
-
errMsg =
|
|
2535
|
+
errMsg = _l.sent();
|
|
2536
2536
|
return [4 /*yield*/, alertUser(userInteraction, "Token request failed", {
|
|
2537
2537
|
type: 'error',
|
|
2538
2538
|
messageCode: 'GENERIC_ERROR',
|
|
@@ -2540,11 +2540,11 @@ function otpFetchTokenCallback(db) {
|
|
|
2540
2540
|
messageParams: {}
|
|
2541
2541
|
}).catch(function () { })];
|
|
2542
2542
|
case 7:
|
|
2543
|
-
|
|
2543
|
+
_l.sent();
|
|
2544
2544
|
throw new HttpError(res1, errMsg);
|
|
2545
2545
|
case 8: return [4 /*yield*/, res1.json()];
|
|
2546
2546
|
case 9:
|
|
2547
|
-
response =
|
|
2547
|
+
response = _l.sent();
|
|
2548
2548
|
if (!(response.type === 'tokens')) return [3 /*break*/, 10];
|
|
2549
2549
|
// Demo user request can get a "tokens" response right away
|
|
2550
2550
|
return [2 /*return*/, response];
|
|
@@ -2554,7 +2554,7 @@ function otpFetchTokenCallback(db) {
|
|
|
2554
2554
|
throw new Error("Unexpected response from ".concat(url, "/token"));
|
|
2555
2555
|
return [4 /*yield*/, promptForOTP(userInteraction, tokenRequest.email)];
|
|
2556
2556
|
case 11:
|
|
2557
|
-
otp =
|
|
2557
|
+
otp = _l.sent();
|
|
2558
2558
|
tokenRequest.otp = otp || '';
|
|
2559
2559
|
tokenRequest.otp_id = response.otp_id;
|
|
2560
2560
|
return [4 /*yield*/, fetch("".concat(url, "/token"), {
|
|
@@ -2564,14 +2564,14 @@ function otpFetchTokenCallback(db) {
|
|
|
2564
2564
|
mode: 'cors',
|
|
2565
2565
|
})];
|
|
2566
2566
|
case 12:
|
|
2567
|
-
res2 =
|
|
2568
|
-
|
|
2567
|
+
res2 = _l.sent();
|
|
2568
|
+
_l.label = 13;
|
|
2569
2569
|
case 13:
|
|
2570
2570
|
if (!(res2.status === 401)) return [3 /*break*/, 17];
|
|
2571
2571
|
return [4 /*yield*/, res2.text()];
|
|
2572
2572
|
case 14:
|
|
2573
|
-
errorText =
|
|
2574
|
-
|
|
2573
|
+
errorText = _l.sent();
|
|
2574
|
+
_k = tokenRequest;
|
|
2575
2575
|
return [4 /*yield*/, promptForOTP(userInteraction, tokenRequest.email, {
|
|
2576
2576
|
type: 'error',
|
|
2577
2577
|
messageCode: 'INVALID_OTP',
|
|
@@ -2579,7 +2579,7 @@ function otpFetchTokenCallback(db) {
|
|
|
2579
2579
|
messageParams: {}
|
|
2580
2580
|
})];
|
|
2581
2581
|
case 15:
|
|
2582
|
-
|
|
2582
|
+
_k.otp = _l.sent();
|
|
2583
2583
|
return [4 /*yield*/, fetch("".concat(url, "/token"), {
|
|
2584
2584
|
body: JSON.stringify(tokenRequest),
|
|
2585
2585
|
method: 'post',
|
|
@@ -2587,13 +2587,13 @@ function otpFetchTokenCallback(db) {
|
|
|
2587
2587
|
mode: 'cors',
|
|
2588
2588
|
})];
|
|
2589
2589
|
case 16:
|
|
2590
|
-
res2 =
|
|
2590
|
+
res2 = _l.sent();
|
|
2591
2591
|
return [3 /*break*/, 13];
|
|
2592
2592
|
case 17:
|
|
2593
2593
|
if (!(res2.status !== 200)) return [3 /*break*/, 20];
|
|
2594
2594
|
return [4 /*yield*/, res2.text()];
|
|
2595
2595
|
case 18:
|
|
2596
|
-
errMsg =
|
|
2596
|
+
errMsg = _l.sent();
|
|
2597
2597
|
return [4 /*yield*/, alertUser(userInteraction, "OTP Authentication Failed", {
|
|
2598
2598
|
type: 'error',
|
|
2599
2599
|
messageCode: 'GENERIC_ERROR',
|
|
@@ -2601,11 +2601,11 @@ function otpFetchTokenCallback(db) {
|
|
|
2601
2601
|
messageParams: {}
|
|
2602
2602
|
}).catch(function () { })];
|
|
2603
2603
|
case 19:
|
|
2604
|
-
|
|
2604
|
+
_l.sent();
|
|
2605
2605
|
throw new HttpError(res2, errMsg);
|
|
2606
2606
|
case 20: return [4 /*yield*/, res2.json()];
|
|
2607
2607
|
case 21:
|
|
2608
|
-
response2 =
|
|
2608
|
+
response2 = _l.sent();
|
|
2609
2609
|
return [2 /*return*/, response2];
|
|
2610
2610
|
case 22: throw new Error("Unexpected response from ".concat(url, "/token"));
|
|
2611
2611
|
}
|
|
@@ -2628,19 +2628,19 @@ function setCurrentUser(db, user) {
|
|
|
2628
2628
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2629
2629
|
var $logins;
|
|
2630
2630
|
var _this_1 = this;
|
|
2631
|
-
return __generator$1(this, function (
|
|
2632
|
-
switch (
|
|
2631
|
+
return __generator$1(this, function (_k) {
|
|
2632
|
+
switch (_k.label) {
|
|
2633
2633
|
case 0:
|
|
2634
2634
|
if (user.userId === db.cloud.currentUserId)
|
|
2635
2635
|
return [2 /*return*/]; // Already this user.
|
|
2636
2636
|
$logins = db.table('$logins');
|
|
2637
2637
|
return [4 /*yield*/, db.transaction('rw', $logins, function (tx) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
2638
2638
|
var existingLogins;
|
|
2639
|
-
return __generator$1(this, function (
|
|
2640
|
-
switch (
|
|
2639
|
+
return __generator$1(this, function (_k) {
|
|
2640
|
+
switch (_k.label) {
|
|
2641
2641
|
case 0: return [4 /*yield*/, $logins.toArray()];
|
|
2642
2642
|
case 1:
|
|
2643
|
-
existingLogins =
|
|
2643
|
+
existingLogins = _k.sent();
|
|
2644
2644
|
return [4 /*yield*/, Promise.all(existingLogins
|
|
2645
2645
|
.filter(function (login) { return login.userId !== user.userId && login.isLoggedIn; })
|
|
2646
2646
|
.map(function (login) {
|
|
@@ -2648,19 +2648,19 @@ function setCurrentUser(db, user) {
|
|
|
2648
2648
|
return $logins.put(login);
|
|
2649
2649
|
}))];
|
|
2650
2650
|
case 2:
|
|
2651
|
-
|
|
2651
|
+
_k.sent();
|
|
2652
2652
|
user.isLoggedIn = true;
|
|
2653
2653
|
user.lastLogin = new Date();
|
|
2654
2654
|
return [4 /*yield*/, user.save()];
|
|
2655
2655
|
case 3:
|
|
2656
|
-
|
|
2656
|
+
_k.sent();
|
|
2657
2657
|
console.debug('Saved new user', user.email);
|
|
2658
2658
|
return [2 /*return*/];
|
|
2659
2659
|
}
|
|
2660
2660
|
});
|
|
2661
2661
|
}); })];
|
|
2662
2662
|
case 1:
|
|
2663
|
-
|
|
2663
|
+
_k.sent();
|
|
2664
2664
|
return [4 /*yield*/, new Promise(function (resolve) {
|
|
2665
2665
|
if (db.cloud.currentUserId === user.userId) {
|
|
2666
2666
|
resolve(null);
|
|
@@ -2675,7 +2675,7 @@ function setCurrentUser(db, user) {
|
|
|
2675
2675
|
}
|
|
2676
2676
|
})];
|
|
2677
2677
|
case 2:
|
|
2678
|
-
|
|
2678
|
+
_k.sent();
|
|
2679
2679
|
return [2 /*return*/];
|
|
2680
2680
|
}
|
|
2681
2681
|
});
|
|
@@ -2684,11 +2684,11 @@ function setCurrentUser(db, user) {
|
|
|
2684
2684
|
function login(db, hints) {
|
|
2685
2685
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2686
2686
|
var currentUser, context;
|
|
2687
|
-
return __generator$1(this, function (
|
|
2688
|
-
switch (
|
|
2687
|
+
return __generator$1(this, function (_k) {
|
|
2688
|
+
switch (_k.label) {
|
|
2689
2689
|
case 0: return [4 /*yield*/, db.getCurrentUser()];
|
|
2690
2690
|
case 1:
|
|
2691
|
-
currentUser =
|
|
2691
|
+
currentUser = _k.sent();
|
|
2692
2692
|
if (currentUser.isLoggedIn) {
|
|
2693
2693
|
if (hints) {
|
|
2694
2694
|
if (hints.email && db.cloud.currentUser.value.email !== hints.email) {
|
|
@@ -2707,13 +2707,13 @@ function login(db, hints) {
|
|
|
2707
2707
|
});
|
|
2708
2708
|
return [4 /*yield*/, authenticate(db.cloud.options.databaseUrl, context, db.cloud.options.fetchTokens || otpFetchTokenCallback(db), db.cloud.userInteraction, hints)];
|
|
2709
2709
|
case 2:
|
|
2710
|
-
|
|
2710
|
+
_k.sent();
|
|
2711
2711
|
return [4 /*yield*/, context.save()];
|
|
2712
2712
|
case 3:
|
|
2713
|
-
|
|
2713
|
+
_k.sent();
|
|
2714
2714
|
return [4 /*yield*/, setCurrentUser(db, context)];
|
|
2715
2715
|
case 4:
|
|
2716
|
-
|
|
2716
|
+
_k.sent();
|
|
2717
2717
|
// Make sure to resync as the new login will be authorized
|
|
2718
2718
|
// for new realms.
|
|
2719
2719
|
triggerSync(db, "pull");
|
|
@@ -2831,18 +2831,18 @@ var BroadcastedAndLocalEvent = /** @class */ (function (_super_1) {
|
|
|
2831
2831
|
};
|
|
2832
2832
|
return BroadcastedAndLocalEvent;
|
|
2833
2833
|
}(Observable$1));
|
|
2834
|
-
function computeRealmSetHash(
|
|
2835
|
-
var realms =
|
|
2834
|
+
function computeRealmSetHash(_k) {
|
|
2835
|
+
var realms = _k.realms, inviteRealms = _k.inviteRealms;
|
|
2836
2836
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2837
2837
|
var data, byteArray, digestBytes, base64;
|
|
2838
|
-
return __generator$1(this, function (
|
|
2839
|
-
switch (
|
|
2838
|
+
return __generator$1(this, function (_k) {
|
|
2839
|
+
switch (_k.label) {
|
|
2840
2840
|
case 0:
|
|
2841
2841
|
data = JSON.stringify(__spreadArray$1(__spreadArray$1([], realms.map(function (realmId) { return ({ realmId: realmId, accepted: true }); }), true), inviteRealms.map(function (realmId) { return ({ realmId: realmId, accepted: false }); }), true).sort(function (a, b) { return a.realmId < b.realmId ? -1 : a.realmId > b.realmId ? 1 : 0; }));
|
|
2842
2842
|
byteArray = new TextEncoder().encode(data);
|
|
2843
2843
|
return [4 /*yield*/, crypto.subtle.digest('SHA-1', byteArray)];
|
|
2844
2844
|
case 1:
|
|
2845
|
-
digestBytes =
|
|
2845
|
+
digestBytes = _k.sent();
|
|
2846
2846
|
base64 = b64encode(digestBytes);
|
|
2847
2847
|
return [2 /*return*/, base64];
|
|
2848
2848
|
}
|
|
@@ -2851,14 +2851,14 @@ function computeRealmSetHash(_j) {
|
|
|
2851
2851
|
}
|
|
2852
2852
|
function getSyncableTables(db) {
|
|
2853
2853
|
return Object.entries(db.cloud.schema || {})
|
|
2854
|
-
.filter(function (
|
|
2855
|
-
var markedForSync =
|
|
2854
|
+
.filter(function (_k) {
|
|
2855
|
+
var markedForSync = _k[1].markedForSync;
|
|
2856
2856
|
return markedForSync;
|
|
2857
2857
|
})
|
|
2858
|
-
.map(function (
|
|
2859
|
-
var tbl =
|
|
2860
|
-
return db.tables.filter(function (
|
|
2861
|
-
var name =
|
|
2858
|
+
.map(function (_k) {
|
|
2859
|
+
var tbl = _k[0];
|
|
2860
|
+
return db.tables.filter(function (_k) {
|
|
2861
|
+
var name = _k.name;
|
|
2862
2862
|
return name === tbl;
|
|
2863
2863
|
})[0];
|
|
2864
2864
|
})
|
|
@@ -2878,17 +2878,17 @@ var concat = [].concat;
|
|
|
2878
2878
|
function flatten(a) {
|
|
2879
2879
|
return concat.apply([], a);
|
|
2880
2880
|
}
|
|
2881
|
-
function listClientChanges(mutationTables, db,
|
|
2882
|
-
var
|
|
2881
|
+
function listClientChanges(mutationTables, db, _k) {
|
|
2882
|
+
var _l = _k === void 0 ? {} : _k, _m = _l.since, since = _m === void 0 ? {} : _m, _o = _l.limit, limit = _o === void 0 ? Infinity : _o;
|
|
2883
2883
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2884
|
-
var allMutsOnTables, sorted, result, currentEntry, currentTxid,
|
|
2884
|
+
var allMutsOnTables, sorted, result, currentEntry, currentTxid, _k, sorted_1, _l, table, mut;
|
|
2885
2885
|
var _this_1 = this;
|
|
2886
|
-
return __generator$1(this, function (
|
|
2887
|
-
switch (
|
|
2886
|
+
return __generator$1(this, function (_m) {
|
|
2887
|
+
switch (_m.label) {
|
|
2888
2888
|
case 0: return [4 /*yield*/, Promise.all(mutationTables.map(function (mutationTable) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
2889
2889
|
var tableName, lastRevision, query, muts;
|
|
2890
|
-
return __generator$1(this, function (
|
|
2891
|
-
switch (
|
|
2890
|
+
return __generator$1(this, function (_k) {
|
|
2891
|
+
switch (_k.label) {
|
|
2892
2892
|
case 0:
|
|
2893
2893
|
tableName = getTableFromMutationTable(mutationTable.name);
|
|
2894
2894
|
lastRevision = since[tableName];
|
|
@@ -2899,7 +2899,7 @@ function listClientChanges(mutationTables, db, _j) {
|
|
|
2899
2899
|
query = query.limit(limit);
|
|
2900
2900
|
return [4 /*yield*/, query.toArray()];
|
|
2901
2901
|
case 1:
|
|
2902
|
-
muts =
|
|
2902
|
+
muts = _k.sent();
|
|
2903
2903
|
//const objTable = db.table(tableName);
|
|
2904
2904
|
/*for (const mut of muts) {
|
|
2905
2905
|
if (mut.type === "insert" || mut.type === "upsert") {
|
|
@@ -2914,13 +2914,13 @@ function listClientChanges(mutationTables, db, _j) {
|
|
|
2914
2914
|
});
|
|
2915
2915
|
}); }))];
|
|
2916
2916
|
case 1:
|
|
2917
|
-
allMutsOnTables =
|
|
2917
|
+
allMutsOnTables = _m.sent();
|
|
2918
2918
|
sorted = flatten(allMutsOnTables).sort(function (a, b) { return a.mut.ts - b.mut.ts; });
|
|
2919
2919
|
result = [];
|
|
2920
2920
|
currentEntry = null;
|
|
2921
2921
|
currentTxid = null;
|
|
2922
|
-
for (
|
|
2923
|
-
|
|
2922
|
+
for (_k = 0, sorted_1 = sorted; _k < sorted_1.length; _k++) {
|
|
2923
|
+
_l = sorted_1[_k], table = _l.table, mut = _l.mut;
|
|
2924
2924
|
if (currentEntry &&
|
|
2925
2925
|
currentEntry.table === table &&
|
|
2926
2926
|
currentTxid === mut.txid) {
|
|
@@ -2950,8 +2950,8 @@ function listSyncifiedChanges(tablesToSyncify, currentUser, schema, alreadySynce
|
|
|
2950
2950
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2951
2951
|
var txid, ignoredRealms_1, upserts;
|
|
2952
2952
|
var _this_1 = this;
|
|
2953
|
-
return __generator$1(this, function (
|
|
2954
|
-
switch (
|
|
2953
|
+
return __generator$1(this, function (_k) {
|
|
2954
|
+
switch (_k.label) {
|
|
2955
2955
|
case 0:
|
|
2956
2956
|
txid = "upload-".concat(randomString(8));
|
|
2957
2957
|
if (!currentUser.isLoggedIn) return [3 /*break*/, 2];
|
|
@@ -2959,8 +2959,8 @@ function listSyncifiedChanges(tablesToSyncify, currentUser, schema, alreadySynce
|
|
|
2959
2959
|
ignoredRealms_1 = new Set(alreadySyncedRealms || []);
|
|
2960
2960
|
return [4 /*yield*/, Promise.all(tablesToSyncify.map(function (table) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
2961
2961
|
var extractKey, dexieCloudTableSchema, query, unsyncedObjects, mut;
|
|
2962
|
-
return __generator$1(this, function (
|
|
2963
|
-
switch (
|
|
2962
|
+
return __generator$1(this, function (_k) {
|
|
2963
|
+
switch (_k.label) {
|
|
2964
2964
|
case 0:
|
|
2965
2965
|
extractKey = table.core.schema.primaryKey.extractKey;
|
|
2966
2966
|
if (!extractKey)
|
|
@@ -2981,7 +2981,7 @@ function listSyncifiedChanges(tablesToSyncify, currentUser, schema, alreadySynce
|
|
|
2981
2981
|
});
|
|
2982
2982
|
return [4 /*yield*/, query.toArray()];
|
|
2983
2983
|
case 1:
|
|
2984
|
-
unsyncedObjects =
|
|
2984
|
+
unsyncedObjects = _k.sent();
|
|
2985
2985
|
if (unsyncedObjects.length > 0) {
|
|
2986
2986
|
mut = {
|
|
2987
2987
|
type: 'upsert',
|
|
@@ -3005,7 +3005,7 @@ function listSyncifiedChanges(tablesToSyncify, currentUser, schema, alreadySynce
|
|
|
3005
3005
|
});
|
|
3006
3006
|
}); }))];
|
|
3007
3007
|
case 1:
|
|
3008
|
-
upserts =
|
|
3008
|
+
upserts = _k.sent();
|
|
3009
3009
|
return [2 /*return*/, upserts.filter(function (op) { return op.muts.length > 0; })];
|
|
3010
3010
|
case 2: return [2 /*return*/, []];
|
|
3011
3011
|
}
|
|
@@ -3034,12 +3034,12 @@ function escapeDollarProps(value) {
|
|
|
3034
3034
|
if (!dollarKeys)
|
|
3035
3035
|
return value;
|
|
3036
3036
|
var clone = __assign({}, value);
|
|
3037
|
-
for (var
|
|
3038
|
-
var k_1 = dollarKeys_1[
|
|
3037
|
+
for (var _k = 0, dollarKeys_1 = dollarKeys; _k < dollarKeys_1.length; _k++) {
|
|
3038
|
+
var k_1 = dollarKeys_1[_k];
|
|
3039
3039
|
delete clone[k_1];
|
|
3040
3040
|
}
|
|
3041
|
-
for (var
|
|
3042
|
-
var k_2 = dollarKeys_2[
|
|
3041
|
+
for (var _l = 0, dollarKeys_2 = dollarKeys; _l < dollarKeys_2.length; _l++) {
|
|
3042
|
+
var k_2 = dollarKeys_2[_l];
|
|
3043
3043
|
clone["$" + k_2] = value[k_2];
|
|
3044
3044
|
}
|
|
3045
3045
|
return clone;
|
|
@@ -3049,8 +3049,8 @@ var ObjectDef = {
|
|
|
3049
3049
|
};
|
|
3050
3050
|
function TypesonSimplified() {
|
|
3051
3051
|
var typeDefsInputs = [];
|
|
3052
|
-
for (var
|
|
3053
|
-
typeDefsInputs[
|
|
3052
|
+
for (var _k = 0; _k < arguments.length; _k++) {
|
|
3053
|
+
typeDefsInputs[_k] = arguments[_k];
|
|
3054
3054
|
}
|
|
3055
3055
|
var typeDefs = typeDefsInputs.reduce(function (p, c) { return (__assign(__assign({}, p), c)); }, typeDefsInputs.reduce(function (p, c) { return (__assign(__assign({}, c), p)); }, {}));
|
|
3056
3056
|
var protoMap = new WeakMap();
|
|
@@ -3084,13 +3084,13 @@ function TypesonSimplified() {
|
|
|
3084
3084
|
// Unescape dollar props
|
|
3085
3085
|
value = __assign({}, value);
|
|
3086
3086
|
// Delete keys that children wanted us to delete
|
|
3087
|
-
for (var
|
|
3088
|
-
var k_3 = _k
|
|
3087
|
+
for (var _k = 0, _l = top[1]; _k < _l.length; _k++) {
|
|
3088
|
+
var k_3 = _l[_k];
|
|
3089
3089
|
delete value[k_3];
|
|
3090
3090
|
}
|
|
3091
3091
|
// Set keys that children wanted us to set
|
|
3092
|
-
for (var
|
|
3093
|
-
var
|
|
3092
|
+
for (var _m = 0, _o = Object.entries(top[2]); _m < _o.length; _m++) {
|
|
3093
|
+
var _p = _o[_m], k_4 = _p[0], v_1 = _p[1];
|
|
3094
3094
|
value[k_4] = v_1;
|
|
3095
3095
|
}
|
|
3096
3096
|
stack.pop();
|
|
@@ -3138,8 +3138,8 @@ function TypesonSimplified() {
|
|
|
3138
3138
|
if (typeDef !== undefined)
|
|
3139
3139
|
return typeDef; // Null counts to! So the caching of Array.prototype also counts.
|
|
3140
3140
|
var toStringTag_1 = getToStringTag(realVal);
|
|
3141
|
-
var entry = Object.entries(typeDefs).find(function (
|
|
3142
|
-
var typeName =
|
|
3141
|
+
var entry = Object.entries(typeDefs).find(function (_k) {
|
|
3142
|
+
var typeName = _k[0], typeDef = _k[1];
|
|
3143
3143
|
var _a, _b;
|
|
3144
3144
|
return (_b = (_a = typeDef === null || typeDef === void 0 ? void 0 : typeDef.test) === null || _a === void 0 ? void 0 : _a.call(typeDef, realVal, toStringTag_1)) !== null && _b !== void 0 ? _b : typeName === toStringTag_1;
|
|
3145
3145
|
});
|
|
@@ -3171,8 +3171,8 @@ var BisonBinaryTypes = {
|
|
|
3171
3171
|
i: i,
|
|
3172
3172
|
};
|
|
3173
3173
|
},
|
|
3174
|
-
revive: function (
|
|
3175
|
-
var i =
|
|
3174
|
+
revive: function (_k, altChannel) {
|
|
3175
|
+
var i = _k.i, mimeType = _k.mimeType;
|
|
3176
3176
|
return new Blob([altChannel[i]], { type: mimeType });
|
|
3177
3177
|
},
|
|
3178
3178
|
},
|
|
@@ -3191,8 +3191,8 @@ var numberDef = {
|
|
|
3191
3191
|
return num;
|
|
3192
3192
|
}
|
|
3193
3193
|
},
|
|
3194
|
-
revive: function (
|
|
3195
|
-
var v =
|
|
3194
|
+
revive: function (_k) {
|
|
3195
|
+
var v = _k.v;
|
|
3196
3196
|
return Number(v);
|
|
3197
3197
|
},
|
|
3198
3198
|
},
|
|
@@ -3211,8 +3211,8 @@ var DateDef = {
|
|
|
3211
3211
|
$t: "Date",
|
|
3212
3212
|
v: isNaN(date.getTime()) ? "NaN" : date.toISOString(),
|
|
3213
3213
|
}); },
|
|
3214
|
-
revive: function (
|
|
3215
|
-
var v =
|
|
3214
|
+
revive: function (_k) {
|
|
3215
|
+
var v = _k.v;
|
|
3216
3216
|
return new Date(v === "NaN" ? NaN : Date.parse(v));
|
|
3217
3217
|
},
|
|
3218
3218
|
},
|
|
@@ -3223,8 +3223,8 @@ var SetDef = {
|
|
|
3223
3223
|
$t: "Set",
|
|
3224
3224
|
v: Array.from(set.entries()),
|
|
3225
3225
|
}); },
|
|
3226
|
-
revive: function (
|
|
3227
|
-
var v =
|
|
3226
|
+
revive: function (_k) {
|
|
3227
|
+
var v = _k.v;
|
|
3228
3228
|
return new Set(v);
|
|
3229
3229
|
},
|
|
3230
3230
|
},
|
|
@@ -3235,8 +3235,8 @@ var MapDef = {
|
|
|
3235
3235
|
$t: "Map",
|
|
3236
3236
|
v: Array.from(map.entries()),
|
|
3237
3237
|
}); },
|
|
3238
|
-
revive: function (
|
|
3239
|
-
var v =
|
|
3238
|
+
revive: function (_k) {
|
|
3239
|
+
var v = _k.v;
|
|
3240
3240
|
return new Map(v);
|
|
3241
3241
|
},
|
|
3242
3242
|
},
|
|
@@ -3262,8 +3262,8 @@ var TypedArraysDefs = [
|
|
|
3262
3262
|
"BigInt64Array",
|
|
3263
3263
|
"BigUint64Array",
|
|
3264
3264
|
].reduce(function (specs, typeName) {
|
|
3265
|
-
var
|
|
3266
|
-
return (__assign(__assign({}, specs), (
|
|
3265
|
+
var _k;
|
|
3266
|
+
return (__assign(__assign({}, specs), (_k = {}, _k[typeName] = {
|
|
3267
3267
|
// Replace passes the the typed array into $t, buffer so that
|
|
3268
3268
|
// the ArrayBuffer typedef takes care of further handling of the buffer:
|
|
3269
3269
|
// {$t:"Uint8Array",buffer:{$t:"ArrayBuffer",idx:0}}
|
|
@@ -3278,13 +3278,13 @@ var TypedArraysDefs = [
|
|
|
3278
3278
|
};
|
|
3279
3279
|
return result;
|
|
3280
3280
|
},
|
|
3281
|
-
revive: function (
|
|
3282
|
-
var v =
|
|
3281
|
+
revive: function (_k, _, typeDefs) {
|
|
3282
|
+
var v = _k.v;
|
|
3283
3283
|
var TypedArray = _global[typeName];
|
|
3284
3284
|
return (TypedArray &&
|
|
3285
3285
|
new TypedArray(typeDefs.ArrayBuffer.revive({ v: v }, _, typeDefs)));
|
|
3286
3286
|
},
|
|
3287
|
-
},
|
|
3287
|
+
}, _k)));
|
|
3288
3288
|
}, {});
|
|
3289
3289
|
function b64LexEncode(b) {
|
|
3290
3290
|
return b64ToLex(b64encode(b));
|
|
@@ -3378,8 +3378,8 @@ var DECODE_TABLE = {
|
|
|
3378
3378
|
"|": "/",
|
|
3379
3379
|
};
|
|
3380
3380
|
var ENCODE_TABLE = {};
|
|
3381
|
-
for (var
|
|
3382
|
-
var c_1 = _k
|
|
3381
|
+
for (var _k = 0, _l = Object.keys(DECODE_TABLE); _k < _l.length; _k++) {
|
|
3382
|
+
var c_1 = _l[_k];
|
|
3383
3383
|
ENCODE_TABLE[DECODE_TABLE[c_1]] = c_1;
|
|
3384
3384
|
}
|
|
3385
3385
|
var ArrayBufferDef = {
|
|
@@ -3388,8 +3388,8 @@ var ArrayBufferDef = {
|
|
|
3388
3388
|
$t: "ArrayBuffer",
|
|
3389
3389
|
v: b64LexEncode(ab),
|
|
3390
3390
|
}); },
|
|
3391
|
-
revive: function (
|
|
3392
|
-
var v =
|
|
3391
|
+
revive: function (_k) {
|
|
3392
|
+
var v = _k.v;
|
|
3393
3393
|
var ba = b64LexDecode(v);
|
|
3394
3394
|
return ba.buffer.byteLength === ba.byteLength
|
|
3395
3395
|
? ba.buffer
|
|
@@ -3431,8 +3431,8 @@ var BlobDef = {
|
|
|
3431
3431
|
: b64encode(string2ArrayBuffer(readBlobSync(blob))),
|
|
3432
3432
|
type: blob.type,
|
|
3433
3433
|
}); },
|
|
3434
|
-
revive: function (
|
|
3435
|
-
var type =
|
|
3434
|
+
revive: function (_k) {
|
|
3435
|
+
var type = _k.type, v = _k.v;
|
|
3436
3436
|
var ab = b64decode(v);
|
|
3437
3437
|
return typeof Blob !== undefined
|
|
3438
3438
|
? new Blob([ab])
|
|
@@ -3443,13 +3443,13 @@ var BlobDef = {
|
|
|
3443
3443
|
var builtin = __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, numberDef), bigIntDef), DateDef), SetDef), MapDef), TypedArraysDefs), ArrayBufferDef), BlobDef);
|
|
3444
3444
|
function Bison() {
|
|
3445
3445
|
var typeDefsInputs = [];
|
|
3446
|
-
for (var
|
|
3447
|
-
typeDefsInputs[
|
|
3446
|
+
for (var _k = 0; _k < arguments.length; _k++) {
|
|
3447
|
+
typeDefsInputs[_k] = arguments[_k];
|
|
3448
3448
|
}
|
|
3449
3449
|
var tson = TypesonSimplified.apply(void 0, __spreadArray$1([builtin, BisonBinaryTypes], typeDefsInputs, false));
|
|
3450
3450
|
return {
|
|
3451
3451
|
toBinary: function (value) {
|
|
3452
|
-
var
|
|
3452
|
+
var _k = this.stringify(value), blob = _k[0], json = _k[1];
|
|
3453
3453
|
var lenBuf = new ArrayBuffer(4);
|
|
3454
3454
|
new DataView(lenBuf).setUint32(0, blob.size);
|
|
3455
3455
|
return new Blob([lenBuf, blob, json]);
|
|
@@ -3467,14 +3467,14 @@ function Bison() {
|
|
|
3467
3467
|
parse: function (json, binData) {
|
|
3468
3468
|
return __awaiter$2(this, void 0, void 0, function () {
|
|
3469
3469
|
var pos, arrayBuffers, buf, view, len, ab;
|
|
3470
|
-
return __generator$1(this, function (
|
|
3471
|
-
switch (
|
|
3470
|
+
return __generator$1(this, function (_k) {
|
|
3471
|
+
switch (_k.label) {
|
|
3472
3472
|
case 0:
|
|
3473
3473
|
pos = 0;
|
|
3474
3474
|
arrayBuffers = [];
|
|
3475
3475
|
return [4 /*yield*/, readBlobBinary(binData)];
|
|
3476
3476
|
case 1:
|
|
3477
|
-
buf =
|
|
3477
|
+
buf = _k.sent();
|
|
3478
3478
|
view = new DataView(buf);
|
|
3479
3479
|
while (pos < buf.byteLength) {
|
|
3480
3480
|
len = view.getUint32(pos);
|
|
@@ -3490,20 +3490,20 @@ function Bison() {
|
|
|
3490
3490
|
},
|
|
3491
3491
|
fromBinary: function (blob) {
|
|
3492
3492
|
return __awaiter$2(this, void 0, void 0, function () {
|
|
3493
|
-
var len,
|
|
3494
|
-
return __generator$1(this, function (
|
|
3495
|
-
switch (
|
|
3493
|
+
var len, _k, binData, json;
|
|
3494
|
+
return __generator$1(this, function (_l) {
|
|
3495
|
+
switch (_l.label) {
|
|
3496
3496
|
case 0:
|
|
3497
|
-
|
|
3497
|
+
_k = DataView.bind;
|
|
3498
3498
|
return [4 /*yield*/, readBlobBinary(blob.slice(0, 4))];
|
|
3499
3499
|
case 1:
|
|
3500
|
-
len = new (
|
|
3500
|
+
len = new (_k.apply(DataView, [void 0, _l.sent()]))().getUint32(0);
|
|
3501
3501
|
binData = blob.slice(4, len + 4);
|
|
3502
3502
|
return [4 /*yield*/, readBlob(blob.slice(len + 4))];
|
|
3503
3503
|
case 2:
|
|
3504
|
-
json =
|
|
3504
|
+
json = _l.sent();
|
|
3505
3505
|
return [4 /*yield*/, this.parse(json, binData)];
|
|
3506
|
-
case 3: return [2 /*return*/,
|
|
3506
|
+
case 3: return [2 /*return*/, _l.sent()];
|
|
3507
3507
|
}
|
|
3508
3508
|
});
|
|
3509
3509
|
});
|
|
@@ -3577,8 +3577,8 @@ var defs = Object.assign(Object.assign({}, undefinedDef), (hasBigIntSupport
|
|
|
3577
3577
|
replace: function (fakeBigInt) {
|
|
3578
3578
|
return Object.assign({ $t: 'bigint' }, fakeBigInt);
|
|
3579
3579
|
},
|
|
3580
|
-
revive: function (
|
|
3581
|
-
var v =
|
|
3580
|
+
revive: function (_k) {
|
|
3581
|
+
var v = _k.v;
|
|
3582
3582
|
return new FakeBigInt(v);
|
|
3583
3583
|
}
|
|
3584
3584
|
}
|
|
@@ -3626,8 +3626,8 @@ function encodeIdsForServer(schema, currentUser, changes) {
|
|
|
3626
3626
|
});
|
|
3627
3627
|
rv.push(changeClone);
|
|
3628
3628
|
};
|
|
3629
|
-
for (var
|
|
3630
|
-
var change = changes_1[
|
|
3629
|
+
for (var _k = 0, changes_1 = changes; _k < changes_1.length; _k++) {
|
|
3630
|
+
var change = changes_1[_k];
|
|
3631
3631
|
_loop_2(change);
|
|
3632
3632
|
}
|
|
3633
3633
|
return rv;
|
|
@@ -3641,9 +3641,9 @@ function cloneChange(change, rewriteValues) {
|
|
|
3641
3641
|
//import {BisonWebStreamReader} from "dreambase-library/dist/typeson-simplified/BisonWebStreamReader";
|
|
3642
3642
|
function syncWithServer(changes, syncState, baseRevs, db, databaseUrl, schema, clientIdentity, currentUser) {
|
|
3643
3643
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
3644
|
-
var headers, accessToken, syncRequest, res,
|
|
3645
|
-
return __generator$1(this, function (
|
|
3646
|
-
switch (
|
|
3644
|
+
var headers, accessToken, syncRequest, res, _k, _l, _m, text, syncRes;
|
|
3645
|
+
return __generator$1(this, function (_o) {
|
|
3646
|
+
switch (_o.label) {
|
|
3647
3647
|
case 0:
|
|
3648
3648
|
headers = {
|
|
3649
3649
|
Accept: 'application/json, application/x-bison, application/x-bison-stream',
|
|
@@ -3651,7 +3651,7 @@ function syncWithServer(changes, syncState, baseRevs, db, databaseUrl, schema, c
|
|
|
3651
3651
|
};
|
|
3652
3652
|
return [4 /*yield*/, loadAccessToken(db)];
|
|
3653
3653
|
case 1:
|
|
3654
|
-
accessToken =
|
|
3654
|
+
accessToken = _o.sent();
|
|
3655
3655
|
if (accessToken) {
|
|
3656
3656
|
headers.Authorization = "Bearer ".concat(accessToken);
|
|
3657
3657
|
}
|
|
@@ -3678,7 +3678,7 @@ function syncWithServer(changes, syncState, baseRevs, db, databaseUrl, schema, c
|
|
|
3678
3678
|
body: TSON.stringify(syncRequest)
|
|
3679
3679
|
})];
|
|
3680
3680
|
case 2:
|
|
3681
|
-
res =
|
|
3681
|
+
res = _o.sent();
|
|
3682
3682
|
//const contentLength = Number(res.headers.get('content-length'));
|
|
3683
3683
|
db.syncStateChangedEvent.next({
|
|
3684
3684
|
phase: 'pulling'
|
|
@@ -3686,20 +3686,20 @@ function syncWithServer(changes, syncState, baseRevs, db, databaseUrl, schema, c
|
|
|
3686
3686
|
if (!res.ok) {
|
|
3687
3687
|
throw new HttpError(res);
|
|
3688
3688
|
}
|
|
3689
|
-
|
|
3690
|
-
switch (
|
|
3689
|
+
_k = res.headers.get('content-type');
|
|
3690
|
+
switch (_k) {
|
|
3691
3691
|
case 'application/x-bison': return [3 /*break*/, 3];
|
|
3692
3692
|
case 'application/x-bison-stream': return [3 /*break*/, 5];
|
|
3693
3693
|
case 'application/json': return [3 /*break*/, 5];
|
|
3694
3694
|
}
|
|
3695
3695
|
return [3 /*break*/, 5];
|
|
3696
3696
|
case 3:
|
|
3697
|
-
|
|
3697
|
+
_m = (_l = BISON).fromBinary;
|
|
3698
3698
|
return [4 /*yield*/, res.blob()];
|
|
3699
|
-
case 4: return [2 /*return*/,
|
|
3699
|
+
case 4: return [2 /*return*/, _m.apply(_l, [_o.sent()])];
|
|
3700
3700
|
case 5: return [4 /*yield*/, res.text()];
|
|
3701
3701
|
case 6:
|
|
3702
|
-
text =
|
|
3702
|
+
text = _o.sent();
|
|
3703
3703
|
syncRes = TSON.parse(text);
|
|
3704
3704
|
return [2 /*return*/, syncRes];
|
|
3705
3705
|
}
|
|
@@ -3708,16 +3708,16 @@ function syncWithServer(changes, syncState, baseRevs, db, databaseUrl, schema, c
|
|
|
3708
3708
|
}
|
|
3709
3709
|
function modifyLocalObjectsWithNewUserId(syncifiedTables, currentUser, alreadySyncedRealms) {
|
|
3710
3710
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
3711
|
-
var ignoredRealms,
|
|
3712
|
-
return __generator$1(this, function (
|
|
3713
|
-
switch (
|
|
3711
|
+
var ignoredRealms, _k, syncifiedTables_1, table;
|
|
3712
|
+
return __generator$1(this, function (_l) {
|
|
3713
|
+
switch (_l.label) {
|
|
3714
3714
|
case 0:
|
|
3715
3715
|
ignoredRealms = new Set(alreadySyncedRealms || []);
|
|
3716
|
-
|
|
3717
|
-
|
|
3716
|
+
_k = 0, syncifiedTables_1 = syncifiedTables;
|
|
3717
|
+
_l.label = 1;
|
|
3718
3718
|
case 1:
|
|
3719
|
-
if (!(
|
|
3720
|
-
table = syncifiedTables_1[
|
|
3719
|
+
if (!(_k < syncifiedTables_1.length)) return [3 /*break*/, 9];
|
|
3720
|
+
table = syncifiedTables_1[_k];
|
|
3721
3721
|
if (!(table.name === "members")) return [3 /*break*/, 3];
|
|
3722
3722
|
// members
|
|
3723
3723
|
return [4 /*yield*/, table.toCollection().modify(function (member) {
|
|
@@ -3727,7 +3727,7 @@ function modifyLocalObjectsWithNewUserId(syncifiedTables, currentUser, alreadySy
|
|
|
3727
3727
|
})];
|
|
3728
3728
|
case 2:
|
|
3729
3729
|
// members
|
|
3730
|
-
|
|
3730
|
+
_l.sent();
|
|
3731
3731
|
return [3 /*break*/, 8];
|
|
3732
3732
|
case 3:
|
|
3733
3733
|
if (!(table.name === "roles")) return [3 /*break*/, 4];
|
|
@@ -3742,7 +3742,7 @@ function modifyLocalObjectsWithNewUserId(syncifiedTables, currentUser, alreadySy
|
|
|
3742
3742
|
})];
|
|
3743
3743
|
case 5:
|
|
3744
3744
|
// realms
|
|
3745
|
-
|
|
3745
|
+
_l.sent();
|
|
3746
3746
|
return [3 /*break*/, 8];
|
|
3747
3747
|
case 6:
|
|
3748
3748
|
// application entities
|
|
@@ -3757,10 +3757,10 @@ function modifyLocalObjectsWithNewUserId(syncifiedTables, currentUser, alreadySy
|
|
|
3757
3757
|
})];
|
|
3758
3758
|
case 7:
|
|
3759
3759
|
// application entities
|
|
3760
|
-
|
|
3761
|
-
|
|
3760
|
+
_l.sent();
|
|
3761
|
+
_l.label = 8;
|
|
3762
3762
|
case 8:
|
|
3763
|
-
|
|
3763
|
+
_k++;
|
|
3764
3764
|
return [3 /*break*/, 1];
|
|
3765
3765
|
case 9: return [2 /*return*/];
|
|
3766
3766
|
}
|
|
@@ -3780,8 +3780,8 @@ self.addEventListener('online', function () { return isOnline = true; });
|
|
|
3780
3780
|
self.addEventListener('offline', function () { return isOnline = false; });
|
|
3781
3781
|
function updateBaseRevs(db, schema, latestRevisions, serverRev) {
|
|
3782
3782
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
3783
|
-
return __generator$1(this, function (
|
|
3784
|
-
switch (
|
|
3783
|
+
return __generator$1(this, function (_k) {
|
|
3784
|
+
switch (_k.label) {
|
|
3785
3785
|
case 0: return [4 /*yield*/, db.$baseRevs.bulkPut(Object.keys(schema)
|
|
3786
3786
|
.filter(function (table) { return schema[table].markedForSync; })
|
|
3787
3787
|
.map(function (tableName) {
|
|
@@ -3793,7 +3793,7 @@ function updateBaseRevs(db, schema, latestRevisions, serverRev) {
|
|
|
3793
3793
|
};
|
|
3794
3794
|
}))];
|
|
3795
3795
|
case 1:
|
|
3796
|
-
|
|
3796
|
+
_k.sent();
|
|
3797
3797
|
return [2 /*return*/];
|
|
3798
3798
|
}
|
|
3799
3799
|
});
|
|
@@ -3801,8 +3801,8 @@ function updateBaseRevs(db, schema, latestRevisions, serverRev) {
|
|
|
3801
3801
|
}
|
|
3802
3802
|
function getLatestRevisionsPerTable(clientChangeSet, lastRevisions) {
|
|
3803
3803
|
if (lastRevisions === void 0) { lastRevisions = {}; }
|
|
3804
|
-
for (var
|
|
3805
|
-
var
|
|
3804
|
+
for (var _k = 0, clientChangeSet_1 = clientChangeSet; _k < clientChangeSet_1.length; _k++) {
|
|
3805
|
+
var _l = clientChangeSet_1[_k], table = _l.table, muts = _l.muts;
|
|
3806
3806
|
var lastRev = muts.length > 0 ? muts[muts.length - 1].rev : null;
|
|
3807
3807
|
lastRevisions[table] = lastRev || lastRevisions[table] || 0;
|
|
3808
3808
|
}
|
|
@@ -3811,18 +3811,18 @@ function getLatestRevisionsPerTable(clientChangeSet, lastRevisions) {
|
|
|
3811
3811
|
function bulkUpdate(table, keys, changeSpecs) {
|
|
3812
3812
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
3813
3813
|
var objs, resultKeys, resultObjs;
|
|
3814
|
-
return __generator$1(this, function (
|
|
3815
|
-
switch (
|
|
3814
|
+
return __generator$1(this, function (_k) {
|
|
3815
|
+
switch (_k.label) {
|
|
3816
3816
|
case 0: return [4 /*yield*/, table.bulkGet(keys)];
|
|
3817
3817
|
case 1:
|
|
3818
|
-
objs =
|
|
3818
|
+
objs = _k.sent();
|
|
3819
3819
|
resultKeys = [];
|
|
3820
3820
|
resultObjs = [];
|
|
3821
3821
|
keys.forEach(function (key, idx) {
|
|
3822
3822
|
var obj = objs[idx];
|
|
3823
3823
|
if (obj) {
|
|
3824
|
-
for (var
|
|
3825
|
-
var
|
|
3824
|
+
for (var _k = 0, _l = Object.entries(changeSpecs[idx]); _k < _l.length; _k++) {
|
|
3825
|
+
var _m = _l[_k], keyPath = _m[0], value = _m[1];
|
|
3826
3826
|
if (keyPath === table.schema.primKey.keyPath) {
|
|
3827
3827
|
if (cmp(value, key) !== 0) {
|
|
3828
3828
|
throw new Error("Cannot change primary key");
|
|
@@ -3840,7 +3840,7 @@ function bulkUpdate(table, keys, changeSpecs) {
|
|
|
3840
3840
|
? table.bulkPut(resultObjs, resultKeys)
|
|
3841
3841
|
: table.bulkPut(resultObjs))];
|
|
3842
3842
|
case 2:
|
|
3843
|
-
|
|
3843
|
+
_k.sent();
|
|
3844
3844
|
return [2 /*return*/];
|
|
3845
3845
|
}
|
|
3846
3846
|
});
|
|
@@ -3848,15 +3848,15 @@ function bulkUpdate(table, keys, changeSpecs) {
|
|
|
3848
3848
|
}
|
|
3849
3849
|
function applyServerChanges(changes, db) {
|
|
3850
3850
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
3851
|
-
var _loop_3,
|
|
3852
|
-
return __generator$1(this, function (
|
|
3853
|
-
switch (
|
|
3851
|
+
var _loop_3, _k, changes_2, _l, tableName, muts;
|
|
3852
|
+
return __generator$1(this, function (_m) {
|
|
3853
|
+
switch (_m.label) {
|
|
3854
3854
|
case 0:
|
|
3855
3855
|
console.debug('Applying server changes', changes, Dexie.currentTransaction);
|
|
3856
3856
|
_loop_3 = function (tableName, muts) {
|
|
3857
|
-
var table, primaryKey, keyDecoder, _loop_4,
|
|
3858
|
-
return __generator$1(this, function (
|
|
3859
|
-
switch (
|
|
3857
|
+
var table, primaryKey, keyDecoder, _loop_4, _o, muts_2, mut;
|
|
3858
|
+
return __generator$1(this, function (_p) {
|
|
3859
|
+
switch (_p.label) {
|
|
3860
3860
|
case 0:
|
|
3861
3861
|
table = db.table(tableName);
|
|
3862
3862
|
if (!table)
|
|
@@ -3884,13 +3884,13 @@ function applyServerChanges(changes, db) {
|
|
|
3884
3884
|
}
|
|
3885
3885
|
};
|
|
3886
3886
|
_loop_4 = function (mut) {
|
|
3887
|
-
var keys,
|
|
3888
|
-
return __generator$1(this, function (
|
|
3889
|
-
switch (
|
|
3887
|
+
var keys, _q;
|
|
3888
|
+
return __generator$1(this, function (_r) {
|
|
3889
|
+
switch (_r.label) {
|
|
3890
3890
|
case 0:
|
|
3891
3891
|
keys = mut.keys.map(keyDecoder);
|
|
3892
|
-
|
|
3893
|
-
switch (
|
|
3892
|
+
_q = mut.type;
|
|
3893
|
+
switch (_q) {
|
|
3894
3894
|
case 'insert': return [3 /*break*/, 1];
|
|
3895
3895
|
case 'upsert': return [3 /*break*/, 6];
|
|
3896
3896
|
case 'modify': return [3 /*break*/, 11];
|
|
@@ -3902,7 +3902,7 @@ function applyServerChanges(changes, db) {
|
|
|
3902
3902
|
if (!primaryKey.outbound) return [3 /*break*/, 3];
|
|
3903
3903
|
return [4 /*yield*/, table.bulkAdd(mut.values, keys)];
|
|
3904
3904
|
case 2:
|
|
3905
|
-
|
|
3905
|
+
_r.sent();
|
|
3906
3906
|
return [3 /*break*/, 5];
|
|
3907
3907
|
case 3:
|
|
3908
3908
|
keys.forEach(function (key, i) {
|
|
@@ -3911,14 +3911,14 @@ function applyServerChanges(changes, db) {
|
|
|
3911
3911
|
});
|
|
3912
3912
|
return [4 /*yield*/, table.bulkAdd(mut.values)];
|
|
3913
3913
|
case 4:
|
|
3914
|
-
|
|
3915
|
-
|
|
3914
|
+
_r.sent();
|
|
3915
|
+
_r.label = 5;
|
|
3916
3916
|
case 5: return [3 /*break*/, 20];
|
|
3917
3917
|
case 6:
|
|
3918
3918
|
if (!primaryKey.outbound) return [3 /*break*/, 8];
|
|
3919
3919
|
return [4 /*yield*/, table.bulkPut(mut.values, keys)];
|
|
3920
3920
|
case 7:
|
|
3921
|
-
|
|
3921
|
+
_r.sent();
|
|
3922
3922
|
return [3 /*break*/, 10];
|
|
3923
3923
|
case 8:
|
|
3924
3924
|
keys.forEach(function (key, i) {
|
|
@@ -3927,59 +3927,59 @@ function applyServerChanges(changes, db) {
|
|
|
3927
3927
|
});
|
|
3928
3928
|
return [4 /*yield*/, table.bulkPut(mut.values)];
|
|
3929
3929
|
case 9:
|
|
3930
|
-
|
|
3931
|
-
|
|
3930
|
+
_r.sent();
|
|
3931
|
+
_r.label = 10;
|
|
3932
3932
|
case 10: return [3 /*break*/, 20];
|
|
3933
3933
|
case 11:
|
|
3934
3934
|
if (!(keys.length === 1)) return [3 /*break*/, 13];
|
|
3935
3935
|
return [4 /*yield*/, table.update(keys[0], mut.changeSpec)];
|
|
3936
3936
|
case 12:
|
|
3937
|
-
|
|
3937
|
+
_r.sent();
|
|
3938
3938
|
return [3 /*break*/, 15];
|
|
3939
3939
|
case 13: return [4 /*yield*/, table.where(':id').anyOf(keys).modify(mut.changeSpec)];
|
|
3940
3940
|
case 14:
|
|
3941
|
-
|
|
3942
|
-
|
|
3941
|
+
_r.sent();
|
|
3942
|
+
_r.label = 15;
|
|
3943
3943
|
case 15: return [3 /*break*/, 20];
|
|
3944
3944
|
case 16: return [4 /*yield*/, bulkUpdate(table, keys, mut.changeSpecs)];
|
|
3945
3945
|
case 17:
|
|
3946
|
-
|
|
3946
|
+
_r.sent();
|
|
3947
3947
|
return [3 /*break*/, 20];
|
|
3948
3948
|
case 18: return [4 /*yield*/, table.bulkDelete(keys)];
|
|
3949
3949
|
case 19:
|
|
3950
|
-
|
|
3950
|
+
_r.sent();
|
|
3951
3951
|
return [3 /*break*/, 20];
|
|
3952
3952
|
case 20: return [2 /*return*/];
|
|
3953
3953
|
}
|
|
3954
3954
|
});
|
|
3955
3955
|
};
|
|
3956
|
-
|
|
3957
|
-
|
|
3956
|
+
_o = 0, muts_2 = muts;
|
|
3957
|
+
_p.label = 1;
|
|
3958
3958
|
case 1:
|
|
3959
|
-
if (!(
|
|
3960
|
-
mut = muts_2[
|
|
3959
|
+
if (!(_o < muts_2.length)) return [3 /*break*/, 4];
|
|
3960
|
+
mut = muts_2[_o];
|
|
3961
3961
|
return [5 /*yield**/, _loop_4(mut)];
|
|
3962
3962
|
case 2:
|
|
3963
|
-
|
|
3964
|
-
|
|
3963
|
+
_p.sent();
|
|
3964
|
+
_p.label = 3;
|
|
3965
3965
|
case 3:
|
|
3966
|
-
|
|
3966
|
+
_o++;
|
|
3967
3967
|
return [3 /*break*/, 1];
|
|
3968
3968
|
case 4: return [2 /*return*/];
|
|
3969
3969
|
}
|
|
3970
3970
|
});
|
|
3971
3971
|
};
|
|
3972
|
-
|
|
3973
|
-
|
|
3972
|
+
_k = 0, changes_2 = changes;
|
|
3973
|
+
_m.label = 1;
|
|
3974
3974
|
case 1:
|
|
3975
|
-
if (!(
|
|
3976
|
-
|
|
3975
|
+
if (!(_k < changes_2.length)) return [3 /*break*/, 4];
|
|
3976
|
+
_l = changes_2[_k], tableName = _l.table, muts = _l.muts;
|
|
3977
3977
|
return [5 /*yield**/, _loop_3(tableName, muts)];
|
|
3978
3978
|
case 2:
|
|
3979
|
-
|
|
3980
|
-
|
|
3979
|
+
_m.sent();
|
|
3980
|
+
_m.label = 3;
|
|
3981
3981
|
case 3:
|
|
3982
|
-
|
|
3982
|
+
_k++;
|
|
3983
3983
|
return [3 /*break*/, 1];
|
|
3984
3984
|
case 4: return [2 /*return*/];
|
|
3985
3985
|
}
|
|
@@ -3999,8 +3999,8 @@ function sync(db, options, schema, syncOptions) {
|
|
|
3999
3999
|
}
|
|
4000
4000
|
})
|
|
4001
4001
|
.catch(function (error) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
4002
|
-
return __generator$1(this, function (
|
|
4003
|
-
switch (
|
|
4002
|
+
return __generator$1(this, function (_k) {
|
|
4003
|
+
switch (_k.label) {
|
|
4004
4004
|
case 0:
|
|
4005
4005
|
if (syncOptions === null || syncOptions === void 0 ? void 0 : syncOptions.justCheckIfNeeded)
|
|
4006
4006
|
return [2 /*return*/, Promise.reject(error)]; // Just rethrow.
|
|
@@ -4021,9 +4021,9 @@ function sync(db, options, schema, syncOptions) {
|
|
|
4021
4021
|
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 500); })];
|
|
4022
4022
|
case 1:
|
|
4023
4023
|
// Retry again in 500 ms but if it fails again, don't retry.
|
|
4024
|
-
|
|
4024
|
+
_k.sent();
|
|
4025
4025
|
return [4 /*yield*/, sync(db, options, schema, Object.assign(Object.assign({}, syncOptions), { retryImmediatelyOnFetchError: false }))];
|
|
4026
|
-
case 2: return [2 /*return*/,
|
|
4026
|
+
case 2: return [2 /*return*/, _k.sent()];
|
|
4027
4027
|
case 3:
|
|
4028
4028
|
// Make sure that no matter whether sync() explodes or not,
|
|
4029
4029
|
// always update the timestamp. Also store the error.
|
|
@@ -4034,7 +4034,7 @@ function sync(db, options, schema, syncOptions) {
|
|
|
4034
4034
|
case 4:
|
|
4035
4035
|
// Make sure that no matter whether sync() explodes or not,
|
|
4036
4036
|
// always update the timestamp. Also store the error.
|
|
4037
|
-
|
|
4037
|
+
_k.sent();
|
|
4038
4038
|
db.syncStateChangedEvent.next({
|
|
4039
4039
|
phase: isOnline ? 'error' : 'offline',
|
|
4040
4040
|
error: error,
|
|
@@ -4044,16 +4044,16 @@ function sync(db, options, schema, syncOptions) {
|
|
|
4044
4044
|
});
|
|
4045
4045
|
}); });
|
|
4046
4046
|
}
|
|
4047
|
-
function _sync(db, options, schema,
|
|
4048
|
-
var
|
|
4047
|
+
function _sync(db, options, schema, _k) {
|
|
4048
|
+
var _l = _k === void 0 ? {
|
|
4049
4049
|
isInitialSync: false,
|
|
4050
|
-
} :
|
|
4050
|
+
} : _k, isInitialSync = _l.isInitialSync, cancelToken = _l.cancelToken, justCheckIfNeeded = _l.justCheckIfNeeded, purpose = _l.purpose;
|
|
4051
4051
|
var _a;
|
|
4052
4052
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
4053
|
-
var databaseUrl, currentUser, tablesToSync, mutationTables, persistedSyncState, tablesToSyncify, doSyncify,
|
|
4053
|
+
var databaseUrl, currentUser, tablesToSync, mutationTables, persistedSyncState, tablesToSyncify, doSyncify, _k, clientChangeSet, syncState, baseRevs, syncIsNeeded, latestRevisions, clientIdentity, res, done;
|
|
4054
4054
|
var _this_1 = this;
|
|
4055
|
-
return __generator$1(this, function (
|
|
4056
|
-
switch (
|
|
4055
|
+
return __generator$1(this, function (_l) {
|
|
4056
|
+
switch (_l.label) {
|
|
4057
4057
|
case 0:
|
|
4058
4058
|
if (!justCheckIfNeeded) {
|
|
4059
4059
|
console.debug('SYNC STARTED', { isInitialSync: isInitialSync, purpose: purpose });
|
|
@@ -4063,12 +4063,12 @@ function _sync(db, options, schema, _j) {
|
|
|
4063
4063
|
databaseUrl = options.databaseUrl;
|
|
4064
4064
|
return [4 /*yield*/, db.getCurrentUser()];
|
|
4065
4065
|
case 1:
|
|
4066
|
-
currentUser =
|
|
4066
|
+
currentUser = _l.sent();
|
|
4067
4067
|
tablesToSync = currentUser.isLoggedIn ? getSyncableTables(db) : [];
|
|
4068
4068
|
mutationTables = tablesToSync.map(function (tbl) { return db.table(getMutationTable(tbl.name)); });
|
|
4069
4069
|
return [4 /*yield*/, db.getPersistedSyncState()];
|
|
4070
4070
|
case 2:
|
|
4071
|
-
persistedSyncState =
|
|
4071
|
+
persistedSyncState = _l.sent();
|
|
4072
4072
|
tablesToSyncify = !isInitialSync && currentUser.isLoggedIn
|
|
4073
4073
|
? getTablesToSyncify(db, persistedSyncState)
|
|
4074
4074
|
: [];
|
|
@@ -4079,8 +4079,8 @@ function _sync(db, options, schema, _j) {
|
|
|
4079
4079
|
return [2 /*return*/, true];
|
|
4080
4080
|
//console.debug('sync doSyncify is true');
|
|
4081
4081
|
return [4 /*yield*/, db.transaction('rw', tablesToSyncify, function (tx) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
4082
|
-
return __generator$1(this, function (
|
|
4083
|
-
switch (
|
|
4082
|
+
return __generator$1(this, function (_k) {
|
|
4083
|
+
switch (_k.label) {
|
|
4084
4084
|
case 0:
|
|
4085
4085
|
// @ts-ignore
|
|
4086
4086
|
tx.idbtrans.disableChangeTracking = true;
|
|
@@ -4088,35 +4088,35 @@ function _sync(db, options, schema, _j) {
|
|
|
4088
4088
|
tx.idbtrans.disableAccessControl = true; // TODO: Take care of this flag in access control middleware!
|
|
4089
4089
|
return [4 /*yield*/, modifyLocalObjectsWithNewUserId(tablesToSyncify, currentUser, persistedSyncState === null || persistedSyncState === void 0 ? void 0 : persistedSyncState.realms)];
|
|
4090
4090
|
case 1:
|
|
4091
|
-
|
|
4091
|
+
_k.sent();
|
|
4092
4092
|
return [2 /*return*/];
|
|
4093
4093
|
}
|
|
4094
4094
|
});
|
|
4095
4095
|
}); })];
|
|
4096
4096
|
case 3:
|
|
4097
4097
|
//console.debug('sync doSyncify is true');
|
|
4098
|
-
|
|
4098
|
+
_l.sent();
|
|
4099
4099
|
throwIfCancelled(cancelToken);
|
|
4100
|
-
|
|
4100
|
+
_l.label = 4;
|
|
4101
4101
|
case 4: return [4 /*yield*/, db.transaction('r', db.tables, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
4102
4102
|
var syncState, baseRevs, clientChanges, alreadySyncedRealms, syncificationInserts;
|
|
4103
|
-
return __generator$1(this, function (
|
|
4104
|
-
switch (
|
|
4103
|
+
return __generator$1(this, function (_k) {
|
|
4104
|
+
switch (_k.label) {
|
|
4105
4105
|
case 0: return [4 /*yield*/, db.getPersistedSyncState()];
|
|
4106
4106
|
case 1:
|
|
4107
|
-
syncState =
|
|
4107
|
+
syncState = _k.sent();
|
|
4108
4108
|
return [4 /*yield*/, db.$baseRevs.toArray()];
|
|
4109
4109
|
case 2:
|
|
4110
|
-
baseRevs =
|
|
4110
|
+
baseRevs = _k.sent();
|
|
4111
4111
|
return [4 /*yield*/, listClientChanges(mutationTables)];
|
|
4112
4112
|
case 3:
|
|
4113
|
-
clientChanges =
|
|
4113
|
+
clientChanges = _k.sent();
|
|
4114
4114
|
throwIfCancelled(cancelToken);
|
|
4115
4115
|
if (!doSyncify) return [3 /*break*/, 5];
|
|
4116
4116
|
alreadySyncedRealms = __spreadArray$1(__spreadArray$1([], ((persistedSyncState === null || persistedSyncState === void 0 ? void 0 : persistedSyncState.realms) || []), true), ((persistedSyncState === null || persistedSyncState === void 0 ? void 0 : persistedSyncState.inviteRealms) || []), true);
|
|
4117
4117
|
return [4 /*yield*/, listSyncifiedChanges(tablesToSyncify, currentUser, schema, alreadySyncedRealms)];
|
|
4118
4118
|
case 4:
|
|
4119
|
-
syncificationInserts =
|
|
4119
|
+
syncificationInserts = _k.sent();
|
|
4120
4120
|
throwIfCancelled(cancelToken);
|
|
4121
4121
|
clientChanges = clientChanges.concat(syncificationInserts);
|
|
4122
4122
|
return [2 /*return*/, [clientChanges, syncState, baseRevs]];
|
|
@@ -4125,7 +4125,7 @@ function _sync(db, options, schema, _j) {
|
|
|
4125
4125
|
});
|
|
4126
4126
|
}); })];
|
|
4127
4127
|
case 5:
|
|
4128
|
-
|
|
4128
|
+
_k = _l.sent(), clientChangeSet = _k[0], syncState = _k[1], baseRevs = _k[2];
|
|
4129
4129
|
syncIsNeeded = clientChangeSet.some(function (set) { return set.muts.some(function (mut) { return mut.keys.length > 0; }); });
|
|
4130
4130
|
if (justCheckIfNeeded) {
|
|
4131
4131
|
console.debug('Sync is needed:', syncIsNeeded);
|
|
@@ -4143,12 +4143,12 @@ function _sync(db, options, schema, _j) {
|
|
|
4143
4143
|
throwIfCancelled(cancelToken);
|
|
4144
4144
|
return [4 /*yield*/, syncWithServer(clientChangeSet, syncState, baseRevs, db, databaseUrl, schema, clientIdentity, currentUser)];
|
|
4145
4145
|
case 6:
|
|
4146
|
-
res =
|
|
4146
|
+
res = _l.sent();
|
|
4147
4147
|
console.debug('Sync response', res);
|
|
4148
4148
|
return [4 /*yield*/, db.transaction('rw', db.tables, function (tx) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
4149
|
-
var
|
|
4150
|
-
return __generator$1(this, function (
|
|
4151
|
-
switch (
|
|
4149
|
+
var _k, _l, tableName, addedClientChanges, _loop_5, _m, mutationTables_1, mutTable, syncState, newSyncState, filteredChanges;
|
|
4150
|
+
return __generator$1(this, function (_o) {
|
|
4151
|
+
switch (_o.label) {
|
|
4152
4152
|
case 0:
|
|
4153
4153
|
// @ts-ignore
|
|
4154
4154
|
tx.idbtrans.disableChangeTracking = true;
|
|
@@ -4156,8 +4156,8 @@ function _sync(db, options, schema, _j) {
|
|
|
4156
4156
|
tx.idbtrans.disableAccessControl = true; // TODO: Take care of this flag in access control middleware!
|
|
4157
4157
|
// Update db.cloud.schema from server response.
|
|
4158
4158
|
// Local schema MAY include a subset of tables, so do not force all tables into local schema.
|
|
4159
|
-
for (
|
|
4160
|
-
tableName = _k
|
|
4159
|
+
for (_k = 0, _l = Object.keys(schema); _k < _l.length; _k++) {
|
|
4160
|
+
tableName = _l[_k];
|
|
4161
4161
|
if (res.schema[tableName]) {
|
|
4162
4162
|
// Write directly into configured schema. This code can only be executed alone.
|
|
4163
4163
|
schema[tableName] = res.schema[tableName];
|
|
@@ -4165,16 +4165,16 @@ function _sync(db, options, schema, _j) {
|
|
|
4165
4165
|
}
|
|
4166
4166
|
return [4 /*yield*/, db.$syncState.put(schema, 'schema')];
|
|
4167
4167
|
case 1:
|
|
4168
|
-
|
|
4168
|
+
_o.sent();
|
|
4169
4169
|
return [4 /*yield*/, listClientChanges(mutationTables, db, {
|
|
4170
4170
|
since: latestRevisions,
|
|
4171
4171
|
})];
|
|
4172
4172
|
case 2:
|
|
4173
|
-
addedClientChanges =
|
|
4173
|
+
addedClientChanges = _o.sent();
|
|
4174
4174
|
_loop_5 = function (mutTable) {
|
|
4175
4175
|
var tableName, latestRev;
|
|
4176
|
-
return __generator$1(this, function (
|
|
4177
|
-
switch (
|
|
4176
|
+
return __generator$1(this, function (_p) {
|
|
4177
|
+
switch (_p.label) {
|
|
4178
4178
|
case 0:
|
|
4179
4179
|
tableName = getTableFromMutationTable(mutTable.name);
|
|
4180
4180
|
if (!!addedClientChanges.some(function (ch) { return ch.table === tableName && ch.muts.length > 0; })) return [3 /*break*/, 2];
|
|
@@ -4191,7 +4191,7 @@ function _sync(db, options, schema, _j) {
|
|
|
4191
4191
|
// to the server.
|
|
4192
4192
|
// It is therefore safe to clear all changes (which is faster than
|
|
4193
4193
|
// deleting a range)
|
|
4194
|
-
|
|
4194
|
+
_p.sent();
|
|
4195
4195
|
return [3 /*break*/, 5];
|
|
4196
4196
|
case 2:
|
|
4197
4197
|
if (!latestRevisions[tableName]) return [3 /*break*/, 4];
|
|
@@ -4206,25 +4206,25 @@ function _sync(db, options, schema, _j) {
|
|
|
4206
4206
|
.delete(),
|
|
4207
4207
|
])];
|
|
4208
4208
|
case 3:
|
|
4209
|
-
|
|
4209
|
+
_p.sent();
|
|
4210
4210
|
return [3 /*break*/, 5];
|
|
4211
4211
|
case 4:
|
|
4212
|
-
|
|
4212
|
+
_p.label = 5;
|
|
4213
4213
|
case 5: return [2 /*return*/];
|
|
4214
4214
|
}
|
|
4215
4215
|
});
|
|
4216
4216
|
};
|
|
4217
|
-
|
|
4218
|
-
|
|
4217
|
+
_m = 0, mutationTables_1 = mutationTables;
|
|
4218
|
+
_o.label = 3;
|
|
4219
4219
|
case 3:
|
|
4220
|
-
if (!(
|
|
4221
|
-
mutTable = mutationTables_1[
|
|
4220
|
+
if (!(_m < mutationTables_1.length)) return [3 /*break*/, 6];
|
|
4221
|
+
mutTable = mutationTables_1[_m];
|
|
4222
4222
|
return [5 /*yield**/, _loop_5(mutTable)];
|
|
4223
4223
|
case 4:
|
|
4224
|
-
|
|
4225
|
-
|
|
4224
|
+
_o.sent();
|
|
4225
|
+
_o.label = 5;
|
|
4226
4226
|
case 5:
|
|
4227
|
-
|
|
4227
|
+
_m++;
|
|
4228
4228
|
return [3 /*break*/, 3];
|
|
4229
4229
|
case 6:
|
|
4230
4230
|
// Update latestRevisions object according to additional changes:
|
|
@@ -4247,10 +4247,10 @@ function _sync(db, options, schema, _j) {
|
|
|
4247
4247
|
// The purpose of this operation is to mark a start revision (per table)
|
|
4248
4248
|
// so that all client-mutations that come after this, will be mapped to current
|
|
4249
4249
|
// server revision.
|
|
4250
|
-
|
|
4250
|
+
_o.sent();
|
|
4251
4251
|
return [4 /*yield*/, db.getPersistedSyncState()];
|
|
4252
4252
|
case 8:
|
|
4253
|
-
syncState =
|
|
4253
|
+
syncState = _o.sent();
|
|
4254
4254
|
//
|
|
4255
4255
|
// Delete objects from removed realms
|
|
4256
4256
|
//
|
|
@@ -4259,7 +4259,7 @@ function _sync(db, options, schema, _j) {
|
|
|
4259
4259
|
//
|
|
4260
4260
|
// Delete objects from removed realms
|
|
4261
4261
|
//
|
|
4262
|
-
|
|
4262
|
+
_o.sent();
|
|
4263
4263
|
newSyncState = syncState || {
|
|
4264
4264
|
syncedTables: [],
|
|
4265
4265
|
latestRevisions: {},
|
|
@@ -4287,7 +4287,7 @@ function _sync(db, options, schema, _j) {
|
|
|
4287
4287
|
//
|
|
4288
4288
|
// apply server changes
|
|
4289
4289
|
//
|
|
4290
|
-
|
|
4290
|
+
_o.sent();
|
|
4291
4291
|
//
|
|
4292
4292
|
// Update syncState
|
|
4293
4293
|
//
|
|
@@ -4297,11 +4297,11 @@ function _sync(db, options, schema, _j) {
|
|
|
4297
4297
|
});
|
|
4298
4298
|
}); })];
|
|
4299
4299
|
case 7:
|
|
4300
|
-
done =
|
|
4300
|
+
done = _l.sent();
|
|
4301
4301
|
if (!!done) return [3 /*break*/, 9];
|
|
4302
4302
|
console.debug('MORE SYNC NEEDED. Go for it again!');
|
|
4303
4303
|
return [4 /*yield*/, _sync(db, options, schema, { isInitialSync: isInitialSync, cancelToken: cancelToken })];
|
|
4304
|
-
case 8: return [2 /*return*/,
|
|
4304
|
+
case 8: return [2 /*return*/, _l.sent()];
|
|
4305
4305
|
case 9:
|
|
4306
4306
|
console.debug('SYNC DONE', { isInitialSync: isInitialSync });
|
|
4307
4307
|
return [2 /*return*/, false]; // Not needed anymore
|
|
@@ -4311,9 +4311,9 @@ function _sync(db, options, schema, _j) {
|
|
|
4311
4311
|
}
|
|
4312
4312
|
function deleteObjectsFromRemovedRealms(db, res, prevState) {
|
|
4313
4313
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
4314
|
-
var deletedRealms, rejectedRealms, previousRealmSet, previousInviteRealmSet, updatedRealmSet, updatedTotalRealmSet,
|
|
4315
|
-
return __generator$1(this, function (
|
|
4316
|
-
switch (
|
|
4314
|
+
var deletedRealms, rejectedRealms, previousRealmSet, previousInviteRealmSet, updatedRealmSet, updatedTotalRealmSet, _k, previousRealmSet_1, realmId, _l, _m, realmId, tables, _loop_6, _o, tables_1, table;
|
|
4315
|
+
return __generator$1(this, function (_p) {
|
|
4316
|
+
switch (_p.label) {
|
|
4317
4317
|
case 0:
|
|
4318
4318
|
deletedRealms = new Set();
|
|
4319
4319
|
rejectedRealms = new Set();
|
|
@@ -4321,8 +4321,8 @@ function deleteObjectsFromRemovedRealms(db, res, prevState) {
|
|
|
4321
4321
|
previousInviteRealmSet = prevState ? prevState.inviteRealms : [];
|
|
4322
4322
|
updatedRealmSet = new Set(res.realms);
|
|
4323
4323
|
updatedTotalRealmSet = new Set(res.realms.concat(res.inviteRealms));
|
|
4324
|
-
for (
|
|
4325
|
-
realmId = previousRealmSet_1[
|
|
4324
|
+
for (_k = 0, previousRealmSet_1 = previousRealmSet; _k < previousRealmSet_1.length; _k++) {
|
|
4325
|
+
realmId = previousRealmSet_1[_k];
|
|
4326
4326
|
if (!updatedRealmSet.has(realmId)) {
|
|
4327
4327
|
rejectedRealms.add(realmId);
|
|
4328
4328
|
if (!updatedTotalRealmSet.has(realmId)) {
|
|
@@ -4330,8 +4330,8 @@ function deleteObjectsFromRemovedRealms(db, res, prevState) {
|
|
|
4330
4330
|
}
|
|
4331
4331
|
}
|
|
4332
4332
|
}
|
|
4333
|
-
for (
|
|
4334
|
-
realmId = _l
|
|
4333
|
+
for (_l = 0, _m = previousInviteRealmSet.concat(previousRealmSet); _l < _m.length; _l++) {
|
|
4334
|
+
realmId = _m[_l];
|
|
4335
4335
|
if (!updatedTotalRealmSet.has(realmId)) {
|
|
4336
4336
|
deletedRealms.add(realmId);
|
|
4337
4337
|
}
|
|
@@ -4340,8 +4340,8 @@ function deleteObjectsFromRemovedRealms(db, res, prevState) {
|
|
|
4340
4340
|
tables = getSyncableTables(db);
|
|
4341
4341
|
_loop_6 = function (table) {
|
|
4342
4342
|
var realmsToDelete;
|
|
4343
|
-
return __generator$1(this, function (
|
|
4344
|
-
switch (
|
|
4343
|
+
return __generator$1(this, function (_q) {
|
|
4344
|
+
switch (_q.label) {
|
|
4345
4345
|
case 0:
|
|
4346
4346
|
realmsToDelete = ['realms', 'members', 'roles'].includes(table.name)
|
|
4347
4347
|
? deletedRealms // These tables should spare rejected ones.
|
|
@@ -4359,7 +4359,7 @@ function deleteObjectsFromRemovedRealms(db, res, prevState) {
|
|
|
4359
4359
|
case 1:
|
|
4360
4360
|
// There's an index to use:
|
|
4361
4361
|
//console.debug(`REMOVAL: deleting all ${table.name} where realmId anyOf `, JSON.stringify([...realmsToDelete]));
|
|
4362
|
-
|
|
4362
|
+
_q.sent();
|
|
4363
4363
|
return [3 /*break*/, 4];
|
|
4364
4364
|
case 2:
|
|
4365
4365
|
// No index to use:
|
|
@@ -4370,23 +4370,23 @@ function deleteObjectsFromRemovedRealms(db, res, prevState) {
|
|
|
4370
4370
|
case 3:
|
|
4371
4371
|
// No index to use:
|
|
4372
4372
|
//console.debug(`REMOVAL: deleting all ${table.name} where realmId is any of `, JSON.stringify([...realmsToDelete]), realmsToDelete.size);
|
|
4373
|
-
|
|
4374
|
-
|
|
4373
|
+
_q.sent();
|
|
4374
|
+
_q.label = 4;
|
|
4375
4375
|
case 4: return [2 /*return*/];
|
|
4376
4376
|
}
|
|
4377
4377
|
});
|
|
4378
4378
|
};
|
|
4379
|
-
|
|
4380
|
-
|
|
4379
|
+
_o = 0, tables_1 = tables;
|
|
4380
|
+
_p.label = 1;
|
|
4381
4381
|
case 1:
|
|
4382
|
-
if (!(
|
|
4383
|
-
table = tables_1[
|
|
4382
|
+
if (!(_o < tables_1.length)) return [3 /*break*/, 4];
|
|
4383
|
+
table = tables_1[_o];
|
|
4384
4384
|
return [5 /*yield**/, _loop_6(table)];
|
|
4385
4385
|
case 2:
|
|
4386
|
-
|
|
4387
|
-
|
|
4386
|
+
_p.sent();
|
|
4387
|
+
_p.label = 3;
|
|
4388
4388
|
case 3:
|
|
4389
|
-
|
|
4389
|
+
_o++;
|
|
4390
4390
|
return [3 /*break*/, 1];
|
|
4391
4391
|
case 4: return [2 /*return*/];
|
|
4392
4392
|
}
|
|
@@ -4410,8 +4410,8 @@ function MessagesFromServerConsumer(db) {
|
|
|
4410
4410
|
var loopWarning = 0;
|
|
4411
4411
|
var loopDetection = [0, 0, 0, 0, 0, 0, 0, 0, 0, Date.now()];
|
|
4412
4412
|
event.subscribe(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
4413
|
-
return __generator$1(this, function (
|
|
4414
|
-
switch (
|
|
4413
|
+
return __generator$1(this, function (_k) {
|
|
4414
|
+
switch (_k.label) {
|
|
4415
4415
|
case 0:
|
|
4416
4416
|
if (isWorking)
|
|
4417
4417
|
return [2 /*return*/];
|
|
@@ -4420,12 +4420,12 @@ function MessagesFromServerConsumer(db) {
|
|
|
4420
4420
|
loopDetection.shift();
|
|
4421
4421
|
loopDetection.push(Date.now());
|
|
4422
4422
|
readyToServe.next(false);
|
|
4423
|
-
|
|
4423
|
+
_k.label = 1;
|
|
4424
4424
|
case 1:
|
|
4425
|
-
|
|
4425
|
+
_k.trys.push([1, , 3, 8]);
|
|
4426
4426
|
return [4 /*yield*/, consumeQueue()];
|
|
4427
4427
|
case 2:
|
|
4428
|
-
|
|
4428
|
+
_k.sent();
|
|
4429
4429
|
return [3 /*break*/, 8];
|
|
4430
4430
|
case 3:
|
|
4431
4431
|
if (!(loopDetection[loopDetection.length - 1] - loopDetection[0] <
|
|
@@ -4436,7 +4436,7 @@ function MessagesFromServerConsumer(db) {
|
|
|
4436
4436
|
loopWarning = Date.now() + 60000;
|
|
4437
4437
|
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 60000); })];
|
|
4438
4438
|
case 4:
|
|
4439
|
-
|
|
4439
|
+
_k.sent();
|
|
4440
4440
|
return [3 /*break*/, 7];
|
|
4441
4441
|
case 5:
|
|
4442
4442
|
// This is a one-time event. Just pause 10 seconds.
|
|
@@ -4444,8 +4444,8 @@ function MessagesFromServerConsumer(db) {
|
|
|
4444
4444
|
loopWarning = Date.now() + 10000;
|
|
4445
4445
|
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 10000); })];
|
|
4446
4446
|
case 6:
|
|
4447
|
-
|
|
4448
|
-
|
|
4447
|
+
_k.sent();
|
|
4448
|
+
_k.label = 7;
|
|
4449
4449
|
case 7:
|
|
4450
4450
|
isWorking = false;
|
|
4451
4451
|
readyToServe.next(true);
|
|
@@ -4463,24 +4463,24 @@ function MessagesFromServerConsumer(db) {
|
|
|
4463
4463
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
4464
4464
|
var _loop_7;
|
|
4465
4465
|
var _this_1 = this;
|
|
4466
|
-
return __generator$1(this, function (
|
|
4467
|
-
switch (
|
|
4466
|
+
return __generator$1(this, function (_k) {
|
|
4467
|
+
switch (_k.label) {
|
|
4468
4468
|
case 0:
|
|
4469
4469
|
_loop_7 = function () {
|
|
4470
|
-
var msg, persistedSyncState,
|
|
4471
|
-
return __generator$1(this, function (
|
|
4472
|
-
switch (
|
|
4470
|
+
var msg, persistedSyncState, _l, user, refreshedLogin, error_2;
|
|
4471
|
+
return __generator$1(this, function (_m) {
|
|
4472
|
+
switch (_m.label) {
|
|
4473
4473
|
case 0:
|
|
4474
4474
|
msg = queue.shift();
|
|
4475
|
-
|
|
4475
|
+
_m.label = 1;
|
|
4476
4476
|
case 1:
|
|
4477
|
-
|
|
4477
|
+
_m.trys.push([1, 13, , 14]);
|
|
4478
4478
|
// If the sync worker or service worker is syncing, wait 'til thei're done.
|
|
4479
4479
|
// It's no need to have two channels at the same time - even though it wouldnt
|
|
4480
4480
|
// be a problem - this is an optimization.
|
|
4481
4481
|
return [4 /*yield*/, db.cloud.syncState
|
|
4482
|
-
.pipe(filter(function (
|
|
4483
|
-
var phase =
|
|
4482
|
+
.pipe(filter(function (_k) {
|
|
4483
|
+
var phase = _k.phase;
|
|
4484
4484
|
return phase === 'in-sync' || phase === 'error';
|
|
4485
4485
|
}), take(1))
|
|
4486
4486
|
.toPromise()];
|
|
@@ -4488,14 +4488,14 @@ function MessagesFromServerConsumer(db) {
|
|
|
4488
4488
|
// If the sync worker or service worker is syncing, wait 'til thei're done.
|
|
4489
4489
|
// It's no need to have two channels at the same time - even though it wouldnt
|
|
4490
4490
|
// be a problem - this is an optimization.
|
|
4491
|
-
|
|
4491
|
+
_m.sent();
|
|
4492
4492
|
console.debug('processing msg', msg);
|
|
4493
4493
|
persistedSyncState = db.cloud.persistedSyncState.value;
|
|
4494
4494
|
//syncState.
|
|
4495
4495
|
if (!msg)
|
|
4496
4496
|
return [2 /*return*/, "continue"];
|
|
4497
|
-
|
|
4498
|
-
switch (
|
|
4497
|
+
_l = msg.type;
|
|
4498
|
+
switch (_l) {
|
|
4499
4499
|
case 'token-expired': return [3 /*break*/, 3];
|
|
4500
4500
|
case 'realm-added': return [3 /*break*/, 6];
|
|
4501
4501
|
case 'realm-accepted': return [3 /*break*/, 7];
|
|
@@ -4509,7 +4509,7 @@ function MessagesFromServerConsumer(db) {
|
|
|
4509
4509
|
user = db.cloud.currentUser.value;
|
|
4510
4510
|
return [4 /*yield*/, refreshAccessToken(db.cloud.options.databaseUrl, user)];
|
|
4511
4511
|
case 4:
|
|
4512
|
-
refreshedLogin =
|
|
4512
|
+
refreshedLogin = _m.sent();
|
|
4513
4513
|
// Persist updated access token
|
|
4514
4514
|
return [4 /*yield*/, db.table('$logins').update(user.userId, {
|
|
4515
4515
|
accessToken: refreshedLogin.accessToken,
|
|
@@ -4517,7 +4517,7 @@ function MessagesFromServerConsumer(db) {
|
|
|
4517
4517
|
})];
|
|
4518
4518
|
case 5:
|
|
4519
4519
|
// Persist updated access token
|
|
4520
|
-
|
|
4520
|
+
_m.sent();
|
|
4521
4521
|
// Updating $logins will trigger emission of db.cloud.currentUser observable, which
|
|
4522
4522
|
// in turn will lead to that connectWebSocket.ts will reconnect the socket with the
|
|
4523
4523
|
// new token. So we don't need to do anything more here.
|
|
@@ -4550,9 +4550,9 @@ function MessagesFromServerConsumer(db) {
|
|
|
4550
4550
|
return [3 /*break*/, 12];
|
|
4551
4551
|
}
|
|
4552
4552
|
return [4 /*yield*/, db.transaction('rw', db.dx.tables, function (tx) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
4553
|
-
var
|
|
4554
|
-
return __generator$1(this, function (
|
|
4555
|
-
switch (
|
|
4553
|
+
var _k, schema, syncState, currentUser, ourRealmSetHash, clientChanges, mutationTables, filteredChanges;
|
|
4554
|
+
return __generator$1(this, function (_l) {
|
|
4555
|
+
switch (_l.label) {
|
|
4556
4556
|
case 0:
|
|
4557
4557
|
// @ts-ignore
|
|
4558
4558
|
tx.idbtrans.disableChangeTracking = true;
|
|
@@ -4564,7 +4564,7 @@ function MessagesFromServerConsumer(db) {
|
|
|
4564
4564
|
db.getCurrentUser(),
|
|
4565
4565
|
])];
|
|
4566
4566
|
case 1:
|
|
4567
|
-
|
|
4567
|
+
_k = _l.sent(), schema = _k[0], syncState = _k[1], currentUser = _k[2];
|
|
4568
4568
|
console.debug('ws message queue: in transaction');
|
|
4569
4569
|
if (!syncState || !schema || !currentUser) {
|
|
4570
4570
|
console.debug('required vars not present', {
|
|
@@ -4599,7 +4599,7 @@ function MessagesFromServerConsumer(db) {
|
|
|
4599
4599
|
// Keep TX in non-IDB work
|
|
4600
4600
|
computeRealmSetHash(syncState))];
|
|
4601
4601
|
case 2:
|
|
4602
|
-
ourRealmSetHash =
|
|
4602
|
+
ourRealmSetHash = _l.sent();
|
|
4603
4603
|
console.debug('ourRealmSetHash', ourRealmSetHash);
|
|
4604
4604
|
if (ourRealmSetHash !== msg.realmSetHash) {
|
|
4605
4605
|
console.debug('not same realmSetHash', msg.realmSetHash);
|
|
@@ -4613,9 +4613,9 @@ function MessagesFromServerConsumer(db) {
|
|
|
4613
4613
|
mutationTables = getSyncableTables(db).map(function (tbl) { return db.table(getMutationTable(tbl.name)); });
|
|
4614
4614
|
return [4 /*yield*/, listClientChanges(mutationTables)];
|
|
4615
4615
|
case 3:
|
|
4616
|
-
clientChanges =
|
|
4616
|
+
clientChanges = _l.sent();
|
|
4617
4617
|
console.debug('msg queue: client changes', clientChanges);
|
|
4618
|
-
|
|
4618
|
+
_l.label = 4;
|
|
4619
4619
|
case 4:
|
|
4620
4620
|
if (!(msg.changes.length > 0)) return [3 /*break*/, 6];
|
|
4621
4621
|
filteredChanges = filterServerChangesThroughAddedClientChanges(msg.changes, clientChanges);
|
|
@@ -4625,8 +4625,8 @@ function MessagesFromServerConsumer(db) {
|
|
|
4625
4625
|
console.debug('applying filtered server changes', filteredChanges);
|
|
4626
4626
|
return [4 /*yield*/, applyServerChanges(filteredChanges, db)];
|
|
4627
4627
|
case 5:
|
|
4628
|
-
|
|
4629
|
-
|
|
4628
|
+
_l.sent();
|
|
4629
|
+
_l.label = 6;
|
|
4630
4630
|
case 6:
|
|
4631
4631
|
// Update latest revisions per table in case there are unsynced changes
|
|
4632
4632
|
// This can be a real case in future when we allow non-eagery sync.
|
|
@@ -4637,37 +4637,37 @@ function MessagesFromServerConsumer(db) {
|
|
|
4637
4637
|
console.debug('Updating baseRefs', syncState.latestRevisions);
|
|
4638
4638
|
return [4 /*yield*/, updateBaseRevs(db, schema, syncState.latestRevisions, msg.newRev)];
|
|
4639
4639
|
case 7:
|
|
4640
|
-
|
|
4640
|
+
_l.sent();
|
|
4641
4641
|
//
|
|
4642
4642
|
// Update syncState
|
|
4643
4643
|
//
|
|
4644
4644
|
console.debug('Updating syncState', syncState);
|
|
4645
4645
|
return [4 /*yield*/, db.$syncState.put(syncState, 'syncState')];
|
|
4646
4646
|
case 8:
|
|
4647
|
-
|
|
4647
|
+
_l.sent();
|
|
4648
4648
|
return [2 /*return*/];
|
|
4649
4649
|
}
|
|
4650
4650
|
});
|
|
4651
4651
|
}); })];
|
|
4652
4652
|
case 11:
|
|
4653
|
-
|
|
4653
|
+
_m.sent();
|
|
4654
4654
|
console.debug('msg queue: done with rw transaction');
|
|
4655
4655
|
return [3 /*break*/, 12];
|
|
4656
4656
|
case 12: return [3 /*break*/, 14];
|
|
4657
4657
|
case 13:
|
|
4658
|
-
error_2 =
|
|
4658
|
+
error_2 = _m.sent();
|
|
4659
4659
|
console.error("Error in msg queue", error_2);
|
|
4660
4660
|
return [3 /*break*/, 14];
|
|
4661
4661
|
case 14: return [2 /*return*/];
|
|
4662
4662
|
}
|
|
4663
4663
|
});
|
|
4664
4664
|
};
|
|
4665
|
-
|
|
4665
|
+
_k.label = 1;
|
|
4666
4666
|
case 1:
|
|
4667
4667
|
if (!(queue.length > 0)) return [3 /*break*/, 3];
|
|
4668
4668
|
return [5 /*yield**/, _loop_7()];
|
|
4669
4669
|
case 2:
|
|
4670
|
-
|
|
4670
|
+
_k.sent();
|
|
4671
4671
|
return [3 /*break*/, 1];
|
|
4672
4672
|
case 3: return [2 /*return*/];
|
|
4673
4673
|
}
|
|
@@ -5002,8 +5002,8 @@ function createImplicitPropSetterMiddleware(db) {
|
|
|
5002
5002
|
// however, application code will work better if we can always rely on that the properties realmId
|
|
5003
5003
|
// and owner are set. Application code may index them and query them based on db.cloud.currentUserId,
|
|
5004
5004
|
// and expect them to be returned. That scenario must work also when db.cloud.currentUserId === 'unauthorized'.
|
|
5005
|
-
for (var
|
|
5006
|
-
var obj = _k
|
|
5005
|
+
for (var _k = 0, _l = req.values; _k < _l.length; _k++) {
|
|
5006
|
+
var obj = _l[_k];
|
|
5007
5007
|
if (!obj.owner) {
|
|
5008
5008
|
obj.owner = trans.currentUser.userId;
|
|
5009
5009
|
}
|
|
@@ -5059,7 +5059,7 @@ function guardedTable(table) {
|
|
|
5059
5059
|
}
|
|
5060
5060
|
function readLock(fn, prop) {
|
|
5061
5061
|
return function readLocker(req) {
|
|
5062
|
-
var
|
|
5062
|
+
var _k = req.trans[prop] || (req.trans[prop] = { writers: [], readers: [] }), readers = _k.readers, writers = _k.writers;
|
|
5063
5063
|
var numWriters = writers.length;
|
|
5064
5064
|
var promise = (numWriters > 0
|
|
5065
5065
|
? writers[numWriters - 1].then(function () { return fn(req); }, function () { return fn(req); })
|
|
@@ -5070,7 +5070,7 @@ function readLock(fn, prop) {
|
|
|
5070
5070
|
}
|
|
5071
5071
|
function writeLock(fn, prop) {
|
|
5072
5072
|
return function writeLocker(req) {
|
|
5073
|
-
var
|
|
5073
|
+
var _k = req.trans[prop] || (req.trans[prop] = { writers: [], readers: [] }), readers = _k.readers, writers = _k.writers;
|
|
5074
5074
|
var promise = (writers.length > 0
|
|
5075
5075
|
? writers[writers.length - 1].then(function () { return fn(req); }, function () { return fn(req); })
|
|
5076
5076
|
: readers.length > 0
|
|
@@ -5089,8 +5089,8 @@ var outstandingTransactions = new BehaviorSubject(new Set());
|
|
|
5089
5089
|
* changes to server and cleanup the tracked mutations once the server has
|
|
5090
5090
|
* ackowledged that it got them.
|
|
5091
5091
|
*/
|
|
5092
|
-
function createMutationTrackingMiddleware(
|
|
5093
|
-
var currentUserObservable =
|
|
5092
|
+
function createMutationTrackingMiddleware(_k) {
|
|
5093
|
+
var currentUserObservable = _k.currentUserObservable, db = _k.db;
|
|
5094
5094
|
return {
|
|
5095
5095
|
stack: 'dbcore',
|
|
5096
5096
|
name: 'MutationTrackingMiddleware',
|
|
@@ -5331,13 +5331,13 @@ function overrideParseStoresSpec(origFunc, dexie) {
|
|
|
5331
5331
|
}
|
|
5332
5332
|
function performInitialSync(db, cloudOptions, cloudSchema) {
|
|
5333
5333
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5334
|
-
return __generator$1(this, function (
|
|
5335
|
-
switch (
|
|
5334
|
+
return __generator$1(this, function (_k) {
|
|
5335
|
+
switch (_k.label) {
|
|
5336
5336
|
case 0:
|
|
5337
5337
|
console.debug('Performing initial sync');
|
|
5338
5338
|
return [4 /*yield*/, sync(db, cloudOptions, cloudSchema, { isInitialSync: true })];
|
|
5339
5339
|
case 1:
|
|
5340
|
-
|
|
5340
|
+
_k.sent();
|
|
5341
5341
|
console.debug('Done initial sync');
|
|
5342
5342
|
return [2 /*return*/];
|
|
5343
5343
|
}
|
|
@@ -5488,8 +5488,8 @@ var WSConnection = /** @class */ (function (_super_1) {
|
|
|
5488
5488
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5489
5489
|
var wsUrl, searchParams, ws, everConnected_1;
|
|
5490
5490
|
var _this_1 = this;
|
|
5491
|
-
return __generator$1(this, function (
|
|
5492
|
-
switch (
|
|
5491
|
+
return __generator$1(this, function (_k) {
|
|
5492
|
+
switch (_k.label) {
|
|
5493
5493
|
case 0:
|
|
5494
5494
|
this.lastServerActivity = new Date();
|
|
5495
5495
|
if (this.pauseUntil && this.pauseUntil > new Date()) {
|
|
@@ -5515,7 +5515,7 @@ var WSConnection = /** @class */ (function (_super_1) {
|
|
|
5515
5515
|
this.webSocketStatus.next('connecting');
|
|
5516
5516
|
this.pinger = setInterval(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5517
5517
|
var _this_1 = this;
|
|
5518
|
-
return __generator$1(this, function (
|
|
5518
|
+
return __generator$1(this, function (_k) {
|
|
5519
5519
|
if (this.closed) {
|
|
5520
5520
|
console.debug('pinger check', this.id, 'CLOSED.');
|
|
5521
5521
|
this.teardown();
|
|
@@ -5600,9 +5600,9 @@ var WSConnection = /** @class */ (function (_super_1) {
|
|
|
5600
5600
|
_this_1.subscriber.error(e);
|
|
5601
5601
|
}
|
|
5602
5602
|
};
|
|
5603
|
-
|
|
5603
|
+
_k.label = 1;
|
|
5604
5604
|
case 1:
|
|
5605
|
-
|
|
5605
|
+
_k.trys.push([1, 3, , 4]);
|
|
5606
5606
|
everConnected_1 = false;
|
|
5607
5607
|
return [4 /*yield*/, new Promise(function (resolve, reject) {
|
|
5608
5608
|
ws.onopen = function (event) {
|
|
@@ -5623,7 +5623,7 @@ var WSConnection = /** @class */ (function (_super_1) {
|
|
|
5623
5623
|
};
|
|
5624
5624
|
})];
|
|
5625
5625
|
case 2:
|
|
5626
|
-
|
|
5626
|
+
_k.sent();
|
|
5627
5627
|
this.messageProducerSubscription = this.messageProducer.subscribe(function (msg) {
|
|
5628
5628
|
var _a;
|
|
5629
5629
|
if (!_this_1.closed) {
|
|
@@ -5636,7 +5636,7 @@ var WSConnection = /** @class */ (function (_super_1) {
|
|
|
5636
5636
|
});
|
|
5637
5637
|
return [3 /*break*/, 4];
|
|
5638
5638
|
case 3:
|
|
5639
|
-
|
|
5639
|
+
_k.sent();
|
|
5640
5640
|
this.pauseUntil = new Date(Date.now() + FAIL_RETRY_WAIT_TIME);
|
|
5641
5641
|
return [3 /*break*/, 4];
|
|
5642
5642
|
case 4: return [2 /*return*/];
|
|
@@ -5651,20 +5651,20 @@ function sleep(ms) {
|
|
|
5651
5651
|
}
|
|
5652
5652
|
function waitAndReconnectWhenUserDoesSomething(error) {
|
|
5653
5653
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5654
|
-
return __generator$1(this, function (
|
|
5655
|
-
switch (
|
|
5654
|
+
return __generator$1(this, function (_k) {
|
|
5655
|
+
switch (_k.label) {
|
|
5656
5656
|
case 0:
|
|
5657
5657
|
console.error("WebSocket observable: error but revive when user does some active thing...", error);
|
|
5658
5658
|
// Sleep some seconds...
|
|
5659
5659
|
return [4 /*yield*/, sleep(3000)];
|
|
5660
5660
|
case 1:
|
|
5661
5661
|
// Sleep some seconds...
|
|
5662
|
-
|
|
5662
|
+
_k.sent();
|
|
5663
5663
|
// Wait til user does something (move mouse, tap, scroll, click etc)
|
|
5664
5664
|
console.debug('waiting for someone to do something');
|
|
5665
5665
|
return [4 /*yield*/, userDoesSomething.pipe(take(1)).toPromise()];
|
|
5666
5666
|
case 2:
|
|
5667
|
-
|
|
5667
|
+
_k.sent();
|
|
5668
5668
|
console.debug('someone did something!');
|
|
5669
5669
|
return [2 /*return*/];
|
|
5670
5670
|
}
|
|
@@ -5688,21 +5688,21 @@ function connectWebSocket(db) {
|
|
|
5688
5688
|
var _this_1 = this;
|
|
5689
5689
|
return db.cloud.persistedSyncState.pipe(filter(function (syncState) { return syncState === null || syncState === void 0 ? void 0 : syncState.serverRevision; }), // Don't connect before there's no initial sync performed.
|
|
5690
5690
|
take(1), // Don't continue waking up whenever syncState change
|
|
5691
|
-
switchMap(function (syncState) { return db.cloud.currentUser.pipe(map(function (userLogin) { return [userLogin, syncState]; })); }), switchMap(function (
|
|
5692
|
-
var userLogin =
|
|
5691
|
+
switchMap(function (syncState) { return db.cloud.currentUser.pipe(map(function (userLogin) { return [userLogin, syncState]; })); }), switchMap(function (_k) {
|
|
5692
|
+
var userLogin = _k[0], syncState = _k[1];
|
|
5693
5693
|
return userIsReallyActive.pipe(map(function (isActive) { return [isActive ? userLogin : null, syncState]; }));
|
|
5694
|
-
}), switchMap(function (
|
|
5695
|
-
var userLogin =
|
|
5696
|
-
return __awaiter$1(_this_1, void 0, void 0, function () { var
|
|
5697
|
-
switch (
|
|
5694
|
+
}), switchMap(function (_k) {
|
|
5695
|
+
var userLogin = _k[0], syncState = _k[1];
|
|
5696
|
+
return __awaiter$1(_this_1, void 0, void 0, function () { var _k; return __generator$1(this, function (_l) {
|
|
5697
|
+
switch (_l.label) {
|
|
5698
5698
|
case 0:
|
|
5699
|
-
|
|
5699
|
+
_k = [userLogin];
|
|
5700
5700
|
return [4 /*yield*/, computeRealmSetHash(syncState)];
|
|
5701
|
-
case 1: return [2 /*return*/,
|
|
5701
|
+
case 1: return [2 /*return*/, _k.concat([_l.sent()])];
|
|
5702
5702
|
}
|
|
5703
5703
|
}); });
|
|
5704
|
-
}), switchMap(function (
|
|
5705
|
-
var userLogin =
|
|
5704
|
+
}), switchMap(function (_k) {
|
|
5705
|
+
var userLogin = _k[0], realmSetHash = _k[1];
|
|
5706
5706
|
// Let server end query changes from last entry of same client-ID and forward.
|
|
5707
5707
|
// If no new entries, server won't bother the client. If new entries, server sends only those
|
|
5708
5708
|
// and the baseRev of the last from same client-ID.
|
|
@@ -5714,14 +5714,14 @@ function connectWebSocket(db) {
|
|
|
5714
5714
|
console.debug('WebSocket observable: Token expired. Refreshing token...');
|
|
5715
5715
|
return of(true).pipe(switchMap(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5716
5716
|
var user, refreshedLogin;
|
|
5717
|
-
return __generator$1(this, function (
|
|
5718
|
-
switch (
|
|
5717
|
+
return __generator$1(this, function (_k) {
|
|
5718
|
+
switch (_k.label) {
|
|
5719
5719
|
case 0: return [4 /*yield*/, db.getCurrentUser()];
|
|
5720
5720
|
case 1:
|
|
5721
|
-
user =
|
|
5721
|
+
user = _k.sent();
|
|
5722
5722
|
return [4 /*yield*/, refreshAccessToken(db.cloud.options.databaseUrl, user)];
|
|
5723
5723
|
case 2:
|
|
5724
|
-
refreshedLogin =
|
|
5724
|
+
refreshedLogin = _k.sent();
|
|
5725
5725
|
// Persist updated access token
|
|
5726
5726
|
return [4 /*yield*/, db.table('$logins').update(user.userId, {
|
|
5727
5727
|
accessToken: refreshedLogin.accessToken,
|
|
@@ -5729,7 +5729,7 @@ function connectWebSocket(db) {
|
|
|
5729
5729
|
})];
|
|
5730
5730
|
case 3:
|
|
5731
5731
|
// Persist updated access token
|
|
5732
|
-
|
|
5732
|
+
_k.sent();
|
|
5733
5733
|
return [2 /*return*/];
|
|
5734
5734
|
}
|
|
5735
5735
|
});
|
|
@@ -5757,19 +5757,19 @@ function connectWebSocket(db) {
|
|
|
5757
5757
|
function isSyncNeeded(db) {
|
|
5758
5758
|
var _a;
|
|
5759
5759
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5760
|
-
var
|
|
5761
|
-
return __generator$1(this, function (
|
|
5762
|
-
switch (
|
|
5760
|
+
var _k;
|
|
5761
|
+
return __generator$1(this, function (_l) {
|
|
5762
|
+
switch (_l.label) {
|
|
5763
5763
|
case 0:
|
|
5764
5764
|
if (!(((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.databaseUrl) && db.cloud.schema)) return [3 /*break*/, 2];
|
|
5765
5765
|
return [4 /*yield*/, sync(db, db.cloud.options, db.cloud.schema, { justCheckIfNeeded: true })];
|
|
5766
5766
|
case 1:
|
|
5767
|
-
|
|
5767
|
+
_k = _l.sent();
|
|
5768
5768
|
return [3 /*break*/, 3];
|
|
5769
5769
|
case 2:
|
|
5770
|
-
|
|
5771
|
-
|
|
5772
|
-
case 3: return [2 /*return*/,
|
|
5770
|
+
_k = false;
|
|
5771
|
+
_l.label = 3;
|
|
5772
|
+
case 3: return [2 /*return*/, _k];
|
|
5773
5773
|
}
|
|
5774
5774
|
});
|
|
5775
5775
|
});
|
|
@@ -5779,22 +5779,22 @@ var MINUTES = 60 * SECONDS;
|
|
|
5779
5779
|
var myId = randomString(16);
|
|
5780
5780
|
var GUARDED_JOB_HEARTBEAT = 1 * SECONDS;
|
|
5781
5781
|
var GUARDED_JOB_TIMEOUT = 1 * MINUTES;
|
|
5782
|
-
function performGuardedJob(db, jobName, jobsTableName, job,
|
|
5783
|
-
var
|
|
5782
|
+
function performGuardedJob(db, jobName, jobsTableName, job, _k) {
|
|
5783
|
+
var _l = _k === void 0 ? {} : _k, awaitRemoteJob = _l.awaitRemoteJob;
|
|
5784
5784
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5785
5785
|
function aquireLock() {
|
|
5786
5786
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5787
5787
|
var gotTheLock, jobDoneObservable, err_1;
|
|
5788
5788
|
var _this_1 = this;
|
|
5789
|
-
return __generator$1(this, function (
|
|
5790
|
-
switch (
|
|
5789
|
+
return __generator$1(this, function (_k) {
|
|
5790
|
+
switch (_k.label) {
|
|
5791
5791
|
case 0: return [4 /*yield*/, db.transaction('rw!', jobsTableName, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5792
5792
|
var currentWork;
|
|
5793
|
-
return __generator$1(this, function (
|
|
5794
|
-
switch (
|
|
5793
|
+
return __generator$1(this, function (_k) {
|
|
5794
|
+
switch (_k.label) {
|
|
5795
5795
|
case 0: return [4 /*yield*/, jobsTable.get(jobName)];
|
|
5796
5796
|
case 1:
|
|
5797
|
-
currentWork =
|
|
5797
|
+
currentWork = _k.sent();
|
|
5798
5798
|
if (!!currentWork) return [3 /*break*/, 3];
|
|
5799
5799
|
// No one else is working. Let's record that we are.
|
|
5800
5800
|
return [4 /*yield*/, jobsTable.add({
|
|
@@ -5804,7 +5804,7 @@ function performGuardedJob(db, jobName, jobsTableName, job, _j) {
|
|
|
5804
5804
|
}, jobName)];
|
|
5805
5805
|
case 2:
|
|
5806
5806
|
// No one else is working. Let's record that we are.
|
|
5807
|
-
|
|
5807
|
+
_k.sent();
|
|
5808
5808
|
return [2 /*return*/, true];
|
|
5809
5809
|
case 3:
|
|
5810
5810
|
if (!(currentWork.heartbeat.getTime() <
|
|
@@ -5818,27 +5818,27 @@ function performGuardedJob(db, jobName, jobsTableName, job, _j) {
|
|
|
5818
5818
|
}, jobName)];
|
|
5819
5819
|
case 4:
|
|
5820
5820
|
// Now, take over!
|
|
5821
|
-
|
|
5821
|
+
_k.sent();
|
|
5822
5822
|
return [2 /*return*/, true];
|
|
5823
5823
|
case 5: return [2 /*return*/, false];
|
|
5824
5824
|
}
|
|
5825
5825
|
});
|
|
5826
5826
|
}); })];
|
|
5827
5827
|
case 1:
|
|
5828
|
-
gotTheLock =
|
|
5828
|
+
gotTheLock = _k.sent();
|
|
5829
5829
|
if (gotTheLock)
|
|
5830
5830
|
return [2 /*return*/, true];
|
|
5831
5831
|
if (!awaitRemoteJob) return [3 /*break*/, 6];
|
|
5832
|
-
|
|
5832
|
+
_k.label = 2;
|
|
5833
5833
|
case 2:
|
|
5834
|
-
|
|
5834
|
+
_k.trys.push([2, 4, , 6]);
|
|
5835
5835
|
jobDoneObservable = from$1(liveQuery(function () { return jobsTable.get(jobName); })).pipe(timeout(GUARDED_JOB_TIMEOUT), filter(function (job) { return !job; }));
|
|
5836
5836
|
return [4 /*yield*/, jobDoneObservable.toPromise()];
|
|
5837
5837
|
case 3:
|
|
5838
|
-
|
|
5838
|
+
_k.sent();
|
|
5839
5839
|
return [2 /*return*/, false];
|
|
5840
5840
|
case 4:
|
|
5841
|
-
err_1 =
|
|
5841
|
+
err_1 = _k.sent();
|
|
5842
5842
|
if (err_1.name !== 'TimeoutError') {
|
|
5843
5843
|
throw err_1;
|
|
5844
5844
|
}
|
|
@@ -5847,7 +5847,7 @@ function performGuardedJob(db, jobName, jobsTableName, job, _j) {
|
|
|
5847
5847
|
// Timeout stopped us! Try aquire the lock now.
|
|
5848
5848
|
// It will likely succeed this time unless
|
|
5849
5849
|
// another client took it.
|
|
5850
|
-
return [2 /*return*/,
|
|
5850
|
+
return [2 /*return*/, _k.sent()];
|
|
5851
5851
|
case 6: return [2 /*return*/, false];
|
|
5852
5852
|
}
|
|
5853
5853
|
});
|
|
@@ -5855,13 +5855,13 @@ function performGuardedJob(db, jobName, jobsTableName, job, _j) {
|
|
|
5855
5855
|
}
|
|
5856
5856
|
var jobsTable, heartbeat;
|
|
5857
5857
|
var _this_1 = this;
|
|
5858
|
-
return __generator$1(this, function (
|
|
5859
|
-
switch (
|
|
5858
|
+
return __generator$1(this, function (_k) {
|
|
5859
|
+
switch (_k.label) {
|
|
5860
5860
|
case 0:
|
|
5861
5861
|
jobsTable = db.table(jobsTableName);
|
|
5862
5862
|
return [4 /*yield*/, aquireLock()];
|
|
5863
5863
|
case 1:
|
|
5864
|
-
if (!
|
|
5864
|
+
if (!_k.sent()) return [3 /*break*/, 6];
|
|
5865
5865
|
heartbeat = setInterval(function () {
|
|
5866
5866
|
jobsTable.update(jobName, function (job) {
|
|
5867
5867
|
if (job.nodeId === myId) {
|
|
@@ -5869,34 +5869,34 @@ function performGuardedJob(db, jobName, jobsTableName, job, _j) {
|
|
|
5869
5869
|
}
|
|
5870
5870
|
});
|
|
5871
5871
|
}, GUARDED_JOB_HEARTBEAT);
|
|
5872
|
-
|
|
5872
|
+
_k.label = 2;
|
|
5873
5873
|
case 2:
|
|
5874
|
-
|
|
5874
|
+
_k.trys.push([2, , 4, 6]);
|
|
5875
5875
|
return [4 /*yield*/, job()];
|
|
5876
|
-
case 3: return [2 /*return*/,
|
|
5876
|
+
case 3: return [2 /*return*/, _k.sent()];
|
|
5877
5877
|
case 4:
|
|
5878
5878
|
// Stop heartbeat
|
|
5879
5879
|
clearInterval(heartbeat);
|
|
5880
5880
|
// Remove the persisted job state:
|
|
5881
5881
|
return [4 /*yield*/, db.transaction('rw!', jobsTableName, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5882
5882
|
var currentWork;
|
|
5883
|
-
return __generator$1(this, function (
|
|
5884
|
-
switch (
|
|
5883
|
+
return __generator$1(this, function (_k) {
|
|
5884
|
+
switch (_k.label) {
|
|
5885
5885
|
case 0: return [4 /*yield*/, jobsTable.get(jobName)];
|
|
5886
5886
|
case 1:
|
|
5887
|
-
currentWork =
|
|
5887
|
+
currentWork = _k.sent();
|
|
5888
5888
|
if (!(currentWork && currentWork.nodeId === myId)) return [3 /*break*/, 3];
|
|
5889
5889
|
return [4 /*yield*/, jobsTable.delete(jobName)];
|
|
5890
5890
|
case 2:
|
|
5891
|
-
|
|
5892
|
-
|
|
5891
|
+
_k.sent();
|
|
5892
|
+
_k.label = 3;
|
|
5893
5893
|
case 3: return [2 /*return*/];
|
|
5894
5894
|
}
|
|
5895
5895
|
});
|
|
5896
5896
|
}); })];
|
|
5897
5897
|
case 5:
|
|
5898
5898
|
// Remove the persisted job state:
|
|
5899
|
-
|
|
5899
|
+
_k.sent();
|
|
5900
5900
|
return [7 /*endfinally*/];
|
|
5901
5901
|
case 6: return [2 /*return*/];
|
|
5902
5902
|
}
|
|
@@ -5954,32 +5954,36 @@ function syncIfPossible(db, cloudOptions, cloudSchema, options) {
|
|
|
5954
5954
|
function _syncIfPossible() {
|
|
5955
5955
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5956
5956
|
var error_4;
|
|
5957
|
-
return __generator$1(this, function (
|
|
5958
|
-
switch (
|
|
5957
|
+
return __generator$1(this, function (_k) {
|
|
5958
|
+
switch (_k.label) {
|
|
5959
5959
|
case 0:
|
|
5960
|
-
|
|
5961
|
-
if (!db.cloud.
|
|
5962
|
-
|
|
5960
|
+
_k.trys.push([0, 6, , 7]);
|
|
5961
|
+
if (!db.cloud.isServiceWorkerDB) return [3 /*break*/, 2];
|
|
5962
|
+
// We are the dedicated sync SW:
|
|
5963
5963
|
return [4 /*yield*/, sync(db, cloudOptions, cloudSchema, options)];
|
|
5964
5964
|
case 1:
|
|
5965
|
-
|
|
5966
|
-
|
|
5967
|
-
|
|
5968
|
-
case
|
|
5969
|
-
|
|
5970
|
-
|
|
5971
|
-
|
|
5972
|
-
|
|
5965
|
+
// We are the dedicated sync SW:
|
|
5966
|
+
_k.sent();
|
|
5967
|
+
return [3 /*break*/, 5];
|
|
5968
|
+
case 2:
|
|
5969
|
+
if (!!db.cloud.usingServiceWorker) return [3 /*break*/, 4];
|
|
5970
|
+
// We use a flow that is better suited for the case when multiple workers want to
|
|
5971
|
+
// do the same thing.
|
|
5972
|
+
return [4 /*yield*/, performGuardedJob(db, CURRENT_SYNC_WORKER, '$jobs', function () { return sync(db, cloudOptions, cloudSchema, options); })];
|
|
5973
|
+
case 3:
|
|
5973
5974
|
// We use a flow that is better suited for the case when multiple workers want to
|
|
5974
5975
|
// do the same thing.
|
|
5975
|
-
|
|
5976
|
-
|
|
5976
|
+
_k.sent();
|
|
5977
|
+
return [3 /*break*/, 5];
|
|
5978
|
+
case 4:
|
|
5979
|
+
assert(false);
|
|
5980
|
+
throw new Error('Internal _syncIfPossible() - invalid precondition - should not have been called.');
|
|
5977
5981
|
case 5:
|
|
5978
5982
|
ongoingSyncs.delete(db);
|
|
5979
5983
|
console.debug('Done sync');
|
|
5980
5984
|
return [3 /*break*/, 7];
|
|
5981
5985
|
case 6:
|
|
5982
|
-
error_4 =
|
|
5986
|
+
error_4 = _k.sent();
|
|
5983
5987
|
ongoingSyncs.delete(db);
|
|
5984
5988
|
console.error("Failed to sync client changes", error_4);
|
|
5985
5989
|
throw error_4; // Make sure we rethrow error so that sync event is retried.
|
|
@@ -6021,8 +6025,8 @@ function LocalSyncWorker(db, cloudOptions, cloudSchema) {
|
|
|
6021
6025
|
// Sync eagerly whenever a change has happened (+ initially when there's no syncState yet)
|
|
6022
6026
|
// This initial subscribe will also trigger an sync also now.
|
|
6023
6027
|
console.debug('Starting LocalSyncWorker', db.localSyncEvent['id']);
|
|
6024
|
-
localSyncEventSubscription = db.localSyncEvent.subscribe(function (
|
|
6025
|
-
var purpose =
|
|
6028
|
+
localSyncEventSubscription = db.localSyncEvent.subscribe(function (_k) {
|
|
6029
|
+
var purpose = _k.purpose;
|
|
6026
6030
|
try {
|
|
6027
6031
|
syncAndRetry(purpose || 'pull');
|
|
6028
6032
|
}
|
|
@@ -6046,8 +6050,8 @@ function LocalSyncWorker(db, cloudOptions, cloudSchema) {
|
|
|
6046
6050
|
function updateSchemaFromOptions(schema, options) {
|
|
6047
6051
|
if (schema && options) {
|
|
6048
6052
|
if (options.unsyncedTables) {
|
|
6049
|
-
for (var
|
|
6050
|
-
var tableName = _k
|
|
6053
|
+
for (var _k = 0, _l = options.unsyncedTables; _k < _l.length; _k++) {
|
|
6054
|
+
var tableName = _l[_k];
|
|
6051
6055
|
if (schema[tableName]) {
|
|
6052
6056
|
schema[tableName].markedForSync = false;
|
|
6053
6057
|
}
|
|
@@ -6057,8 +6061,8 @@ function updateSchemaFromOptions(schema, options) {
|
|
|
6057
6061
|
}
|
|
6058
6062
|
function verifySchema(db) {
|
|
6059
6063
|
var _a, _b;
|
|
6060
|
-
for (var
|
|
6061
|
-
var table = _k
|
|
6064
|
+
for (var _k = 0, _l = db.tables; _k < _l.length; _k++) {
|
|
6065
|
+
var table = _l[_k];
|
|
6062
6066
|
if ((_b = (_a = db.cloud.schema) === null || _a === void 0 ? void 0 : _a[table.name]) === null || _b === void 0 ? void 0 : _b.markedForSync) {
|
|
6063
6067
|
if (table.schema.primKey.auto) {
|
|
6064
6068
|
throw new Dexie.SchemaError("Table ".concat(table.name, " is both autoIncremented and synced. ") +
|
|
@@ -6301,8 +6305,8 @@ var Styles = {
|
|
|
6301
6305
|
padding: "8px"
|
|
6302
6306
|
}
|
|
6303
6307
|
};
|
|
6304
|
-
function Dialog(
|
|
6305
|
-
var children =
|
|
6308
|
+
function Dialog(_k) {
|
|
6309
|
+
var children = _k.children;
|
|
6306
6310
|
return (a$1("div", null, a$1("div", { style: Styles.Darken }), a$1("div", { style: Styles.DialogOuter }, a$1("div", { style: Styles.DialogInner }, children))));
|
|
6307
6311
|
}
|
|
6308
6312
|
var t, u, r, o = 0, i = [], c = n.__b, f = n.__r, e = n.diffed, a = n.__c, v = n.unmount;
|
|
@@ -6336,24 +6340,24 @@ function g(n) { var t = u; "function" == typeof n.__c && n.__c(), u = t; }
|
|
|
6336
6340
|
function j(n) { var t = u; n.__c = n.__(), u = t; }
|
|
6337
6341
|
function k(n, t) { return !n || n.length !== t.length || t.some(function (t, u) { return t !== n[u]; }); }
|
|
6338
6342
|
function w(n, t) { return "function" == typeof t ? t(n) : t; }
|
|
6339
|
-
function resolveText(
|
|
6340
|
-
var message =
|
|
6343
|
+
function resolveText(_k) {
|
|
6344
|
+
var message = _k.message; _k.messageCode; var messageParams = _k.messageParams;
|
|
6341
6345
|
return message.replace(/\{\w+\}/ig, function (n) { return messageParams[n.substr(1, n.length - 2)]; });
|
|
6342
6346
|
}
|
|
6343
|
-
function LoginDialog(
|
|
6344
|
-
var title =
|
|
6345
|
-
var
|
|
6347
|
+
function LoginDialog(_k) {
|
|
6348
|
+
var title = _k.title, alerts = _k.alerts, fields = _k.fields, onCancel = _k.onCancel, onSubmit = _k.onSubmit;
|
|
6349
|
+
var _l = l({}), params = _l[0], setParams = _l[1];
|
|
6346
6350
|
var firstFieldRef = s();
|
|
6347
6351
|
h(function () { var _a; return (_a = firstFieldRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, []);
|
|
6348
6352
|
return (a$1(Dialog, null, a$1(y, null, a$1("h3", { style: Styles.WindowHeader }, title), alerts.map(function (alert) { return (a$1("p", { style: Styles.Alert[alert.type] }, resolveText(alert))); }), a$1("form", { onSubmit: function (ev) {
|
|
6349
6353
|
ev.preventDefault();
|
|
6350
6354
|
onSubmit(params);
|
|
6351
|
-
} }, Object.entries(fields).map(function (
|
|
6352
|
-
var fieldName =
|
|
6355
|
+
} }, Object.entries(fields).map(function (_k, idx) {
|
|
6356
|
+
var fieldName = _k[0], _l = _k[1], type = _l.type, label = _l.label, placeholder = _l.placeholder;
|
|
6353
6357
|
return (a$1("label", { style: Styles.Label }, label ? "".concat(label, ": ") : '', a$1("input", { ref: idx === 0 ? firstFieldRef : undefined, type: type, name: fieldName, autoComplete: "on", style: Styles.Input, autoFocus: true, placeholder: placeholder, value: params[fieldName] || '', onInput: function (ev) {
|
|
6354
|
-
var
|
|
6358
|
+
var _k;
|
|
6355
6359
|
var _a;
|
|
6356
|
-
return setParams(Object.assign(Object.assign({}, params), (
|
|
6360
|
+
return setParams(Object.assign(Object.assign({}, params), (_k = {}, _k[fieldName] = valueTransformer(type, (_a = ev.target) === null || _a === void 0 ? void 0 : _a['value']), _k)));
|
|
6357
6361
|
} })));
|
|
6358
6362
|
}))), a$1("div", { style: Styles.ButtonsDiv }, a$1("button", { type: "submit", style: Styles.Button, onClick: function () { return onSubmit(params); } }, "Submit"), a$1("button", { style: Styles.Button, onClick: onCancel }, "Cancel"))));
|
|
6359
6363
|
}
|
|
@@ -6381,8 +6385,8 @@ var LoginGui = /** @class */ (function (_super_1) {
|
|
|
6381
6385
|
delete this.subscription;
|
|
6382
6386
|
}
|
|
6383
6387
|
};
|
|
6384
|
-
LoginGui.prototype.render = function (props,
|
|
6385
|
-
var userInteraction =
|
|
6388
|
+
LoginGui.prototype.render = function (props, _k) {
|
|
6389
|
+
var userInteraction = _k.userInteraction;
|
|
6386
6390
|
if (!userInteraction)
|
|
6387
6391
|
return null;
|
|
6388
6392
|
//if (props.db.cloud.userInteraction.observers.length > 1) return null; // Someone else subscribes.
|
|
@@ -6437,8 +6441,8 @@ function computeSyncState(db) {
|
|
|
6437
6441
|
lazyWebSocketStatus,
|
|
6438
6442
|
db.syncStateChangedEvent.pipe(startWith({ phase: 'initial' })),
|
|
6439
6443
|
userIsReallyActive
|
|
6440
|
-
]).pipe(map(function (
|
|
6441
|
-
var status =
|
|
6444
|
+
]).pipe(map(function (_k) {
|
|
6445
|
+
var status = _k[0], syncState = _k[1], userIsActive = _k[2];
|
|
6442
6446
|
var phase = syncState.phase, error = syncState.error, progress = syncState.progress;
|
|
6443
6447
|
var adjustedStatus = status;
|
|
6444
6448
|
if (phase === 'error') {
|
|
@@ -6517,10 +6521,10 @@ var getGlobalRolesObservable = associate(function (db) {
|
|
|
6517
6521
|
.toArray()
|
|
6518
6522
|
.then(function (roles) {
|
|
6519
6523
|
var rv = {};
|
|
6520
|
-
for (var
|
|
6524
|
+
for (var _k = 0, _l = roles
|
|
6521
6525
|
.slice()
|
|
6522
|
-
.sort(function (a, b) { return (a.sortOrder || 0) - (b.sortOrder || 0); });
|
|
6523
|
-
var role = _k
|
|
6526
|
+
.sort(function (a, b) { return (a.sortOrder || 0) - (b.sortOrder || 0); }); _k < _l.length; _k++) {
|
|
6527
|
+
var role = _l[_k];
|
|
6524
6528
|
rv[role.name] = role;
|
|
6525
6529
|
}
|
|
6526
6530
|
return rv;
|
|
@@ -6532,8 +6536,8 @@ var getInternalAccessControlObservable = associate(function (db) {
|
|
|
6532
6536
|
db.members.where({ userId: currentUser.userId }).toArray(),
|
|
6533
6537
|
db.realms.toArray(),
|
|
6534
6538
|
currentUser.userId,
|
|
6535
|
-
]).then(function (
|
|
6536
|
-
var selfMembers =
|
|
6539
|
+
]).then(function (_k) {
|
|
6540
|
+
var selfMembers = _k[0], realms = _k[1], userId = _k[2];
|
|
6537
6541
|
//console.debug(`PERMS: Result from liveQUery():`, JSON.stringify({selfMembers, realms, userId}, null, 2))
|
|
6538
6542
|
return { selfMembers: selfMembers, realms: realms, userId: userId };
|
|
6539
6543
|
}); }); }); })), {
|
|
@@ -6566,15 +6570,15 @@ function mapValueObservable(o, mapper) {
|
|
|
6566
6570
|
// TODO: Move to dexie-cloud-common
|
|
6567
6571
|
function mergePermissions() {
|
|
6568
6572
|
var permissions = [];
|
|
6569
|
-
for (var
|
|
6570
|
-
permissions[
|
|
6573
|
+
for (var _k = 0; _k < arguments.length; _k++) {
|
|
6574
|
+
permissions[_k] = arguments[_k];
|
|
6571
6575
|
}
|
|
6572
6576
|
if (permissions.length === 0)
|
|
6573
6577
|
return {};
|
|
6574
6578
|
var reduced = permissions.reduce(function (result, next) {
|
|
6575
6579
|
var ret = Object.assign({}, result);
|
|
6576
|
-
for (var
|
|
6577
|
-
var
|
|
6580
|
+
for (var _k = 0, _l = Object.entries(next); _k < _l.length; _k++) {
|
|
6581
|
+
var _m = _l[_k], verb = _m[0], rights = _m[1];
|
|
6578
6582
|
if (verb in ret && ret[verb]) {
|
|
6579
6583
|
if (ret[verb] === '*')
|
|
6580
6584
|
continue;
|
|
@@ -6592,8 +6596,8 @@ function mergePermissions() {
|
|
|
6592
6596
|
typeof ret[verb] === 'object') {
|
|
6593
6597
|
// Both are objects (verb is 'update')
|
|
6594
6598
|
var mergedRights = ret[verb]; // because we've checked that typeof ret[verb] === 'object' and earlier that not ret[verb] === '*'.
|
|
6595
|
-
for (var
|
|
6596
|
-
var
|
|
6599
|
+
for (var _o = 0, _p = Object.entries(rights); _o < _p.length; _o++) {
|
|
6600
|
+
var _q = _p[_o], tableName = _q[0], tableRights = _q[1];
|
|
6597
6601
|
if (mergedRights[tableName] === '*')
|
|
6598
6602
|
continue;
|
|
6599
6603
|
if (tableRights === '*') {
|
|
@@ -6631,8 +6635,8 @@ var getPermissionsLookupObservable = associate(function (db) {
|
|
|
6631
6635
|
var o = createSharedValueObservable(combineLatest([
|
|
6632
6636
|
getInternalAccessControlObservable(db._novip),
|
|
6633
6637
|
getGlobalRolesObservable(db._novip),
|
|
6634
|
-
]).pipe(map(function (
|
|
6635
|
-
var
|
|
6638
|
+
]).pipe(map(function (_k) {
|
|
6639
|
+
var _l = _k[0], selfMembers = _l.selfMembers, realms = _l.realms, userId = _l.userId, globalRoles = _k[1];
|
|
6636
6640
|
return ({
|
|
6637
6641
|
selfMembers: selfMembers,
|
|
6638
6642
|
realms: realms,
|
|
@@ -6645,9 +6649,9 @@ var getPermissionsLookupObservable = associate(function (db) {
|
|
|
6645
6649
|
userId: UNAUTHORIZED_USER.userId,
|
|
6646
6650
|
globalRoles: {},
|
|
6647
6651
|
});
|
|
6648
|
-
return mapValueObservable(o, function (
|
|
6649
|
-
var
|
|
6650
|
-
var selfMembers =
|
|
6652
|
+
return mapValueObservable(o, function (_k) {
|
|
6653
|
+
var _l;
|
|
6654
|
+
var selfMembers = _k.selfMembers, realms = _k.realms, userId = _k.userId, globalRoles = _k.globalRoles;
|
|
6651
6655
|
var rv = realms
|
|
6652
6656
|
.map(function (realm) {
|
|
6653
6657
|
var selfRealmMembers = selfMembers.filter(function (m) { return m.realmId === realm.realmId; });
|
|
@@ -6663,16 +6667,16 @@ var getPermissionsLookupObservable = associate(function (db) {
|
|
|
6663
6667
|
: mergePermissions.apply(void 0, __spreadArray$1(__spreadArray$1([], directPermissionSets, false), rolePermissionSets, false)) });
|
|
6664
6668
|
})
|
|
6665
6669
|
.reduce(function (p, c) {
|
|
6666
|
-
var
|
|
6667
|
-
return (Object.assign(Object.assign({}, p), (
|
|
6668
|
-
}, (
|
|
6669
|
-
|
|
6670
|
+
var _k;
|
|
6671
|
+
return (Object.assign(Object.assign({}, p), (_k = {}, _k[c.realmId] = c, _k)));
|
|
6672
|
+
}, (_l = {},
|
|
6673
|
+
_l[userId] = {
|
|
6670
6674
|
realmId: userId,
|
|
6671
6675
|
owner: userId,
|
|
6672
6676
|
name: userId,
|
|
6673
6677
|
permissions: { manage: '*' },
|
|
6674
6678
|
},
|
|
6675
|
-
|
|
6679
|
+
_l));
|
|
6676
6680
|
return rv;
|
|
6677
6681
|
});
|
|
6678
6682
|
});
|
|
@@ -6685,8 +6689,8 @@ var PermissionChecker = /** @class */ (function () {
|
|
|
6685
6689
|
PermissionChecker.prototype.add = function () {
|
|
6686
6690
|
var _this_1 = this;
|
|
6687
6691
|
var tableNames = [];
|
|
6688
|
-
for (var
|
|
6689
|
-
tableNames[
|
|
6692
|
+
for (var _k = 0; _k < arguments.length; _k++) {
|
|
6693
|
+
tableNames[_k] = arguments[_k];
|
|
6690
6694
|
}
|
|
6691
6695
|
var _a;
|
|
6692
6696
|
// If user can manage the whole realm, return true.
|
|
@@ -6706,8 +6710,8 @@ var PermissionChecker = /** @class */ (function () {
|
|
|
6706
6710
|
};
|
|
6707
6711
|
PermissionChecker.prototype.update = function () {
|
|
6708
6712
|
var props = [];
|
|
6709
|
-
for (var
|
|
6710
|
-
props[
|
|
6713
|
+
for (var _k = 0; _k < arguments.length; _k++) {
|
|
6714
|
+
props[_k] = arguments[_k];
|
|
6711
6715
|
}
|
|
6712
6716
|
var _a, _b;
|
|
6713
6717
|
// If user is owner of this object, or if user can manage the whole realm, return true.
|
|
@@ -6769,11 +6773,11 @@ var getInvitesObservable = associate(function (db) {
|
|
|
6769
6773
|
var membersByEmail = getCurrentUserEmitter(db._novip).pipe(switchMap$1(function (currentUser) { return liveQuery(function () { return db.members.where({ email: currentUser.email || '' }).toArray(); }); }));
|
|
6770
6774
|
var permissions = getPermissionsLookupObservable(db._novip);
|
|
6771
6775
|
var accessControl = getInternalAccessControlObservable(db._novip);
|
|
6772
|
-
return createSharedValueObservable(combineLatest([membersByEmail, accessControl, permissions]).pipe(map$1(function (
|
|
6773
|
-
var membersByEmail =
|
|
6776
|
+
return createSharedValueObservable(combineLatest([membersByEmail, accessControl, permissions]).pipe(map$1(function (_k) {
|
|
6777
|
+
var membersByEmail = _k[0], accessControl = _k[1], realmLookup = _k[2];
|
|
6774
6778
|
var reducer = function (result, m) {
|
|
6775
|
-
var
|
|
6776
|
-
return (Object.assign(Object.assign({}, result), (
|
|
6779
|
+
var _k;
|
|
6780
|
+
return (Object.assign(Object.assign({}, result), (_k = {}, _k[m.id] = Object.assign(Object.assign({}, m), { realm: realmLookup[m.realmId] }), _k)));
|
|
6777
6781
|
};
|
|
6778
6782
|
var emailMembersById = membersByEmail.reduce(reducer, {});
|
|
6779
6783
|
var membersById = accessControl.selfMembers.reduce(reducer, emailMembersById);
|
|
@@ -6802,16 +6806,16 @@ function dexieCloud(dexie) {
|
|
|
6802
6806
|
var localSyncWorker = null;
|
|
6803
6807
|
dexie.on('ready', function (dexie) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
6804
6808
|
var error_5;
|
|
6805
|
-
return __generator$1(this, function (
|
|
6806
|
-
switch (
|
|
6809
|
+
return __generator$1(this, function (_k) {
|
|
6810
|
+
switch (_k.label) {
|
|
6807
6811
|
case 0:
|
|
6808
|
-
|
|
6812
|
+
_k.trys.push([0, 2, , 3]);
|
|
6809
6813
|
return [4 /*yield*/, onDbReady(dexie)];
|
|
6810
6814
|
case 1:
|
|
6811
|
-
|
|
6815
|
+
_k.sent();
|
|
6812
6816
|
return [3 /*break*/, 3];
|
|
6813
6817
|
case 2:
|
|
6814
|
-
error_5 =
|
|
6818
|
+
error_5 = _k.sent();
|
|
6815
6819
|
console.error(error_5);
|
|
6816
6820
|
return [3 /*break*/, 3];
|
|
6817
6821
|
case 3: return [2 /*return*/];
|
|
@@ -6833,7 +6837,7 @@ function dexieCloud(dexie) {
|
|
|
6833
6837
|
currentUserEmitter.next(UNAUTHORIZED_USER);
|
|
6834
6838
|
});
|
|
6835
6839
|
dexie.cloud = {
|
|
6836
|
-
version: '4.0.0-beta.
|
|
6840
|
+
version: '4.0.0-beta.19',
|
|
6837
6841
|
options: Object.assign({}, DEFAULT_OPTIONS),
|
|
6838
6842
|
schema: null,
|
|
6839
6843
|
serverState: null,
|
|
@@ -6851,16 +6855,16 @@ function dexieCloud(dexie) {
|
|
|
6851
6855
|
login: function (hint) {
|
|
6852
6856
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
6853
6857
|
var db;
|
|
6854
|
-
return __generator$1(this, function (
|
|
6855
|
-
switch (
|
|
6858
|
+
return __generator$1(this, function (_k) {
|
|
6859
|
+
switch (_k.label) {
|
|
6856
6860
|
case 0:
|
|
6857
6861
|
db = DexieCloudDB(dexie);
|
|
6858
6862
|
return [4 /*yield*/, db.cloud.sync()];
|
|
6859
6863
|
case 1:
|
|
6860
|
-
|
|
6864
|
+
_k.sent();
|
|
6861
6865
|
return [4 /*yield*/, login(db, hint)];
|
|
6862
6866
|
case 2:
|
|
6863
|
-
|
|
6867
|
+
_k.sent();
|
|
6864
6868
|
return [2 /*return*/];
|
|
6865
6869
|
}
|
|
6866
6870
|
});
|
|
@@ -6878,13 +6882,13 @@ function dexieCloud(dexie) {
|
|
|
6878
6882
|
}
|
|
6879
6883
|
updateSchemaFromOptions(dexie.cloud.schema, dexie.cloud.options);
|
|
6880
6884
|
},
|
|
6881
|
-
sync: function (
|
|
6882
|
-
var
|
|
6885
|
+
sync: function (_k) {
|
|
6886
|
+
var _l = _k === void 0 ? { wait: true, purpose: 'push' } : _k, wait = _l.wait, purpose = _l.purpose;
|
|
6883
6887
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
6884
6888
|
var db, syncState_1, newSyncState, syncState_2;
|
|
6885
6889
|
var _this_1 = this;
|
|
6886
|
-
return __generator$1(this, function (
|
|
6887
|
-
switch (
|
|
6890
|
+
return __generator$1(this, function (_k) {
|
|
6891
|
+
switch (_k.label) {
|
|
6888
6892
|
case 0:
|
|
6889
6893
|
if (wait === undefined)
|
|
6890
6894
|
wait = true;
|
|
@@ -6898,29 +6902,29 @@ function dexieCloud(dexie) {
|
|
|
6898
6902
|
(!syncState_1 || newSyncState.timestamp > syncState_1.timestamp); }), take(1))
|
|
6899
6903
|
.toPromise()];
|
|
6900
6904
|
case 1:
|
|
6901
|
-
newSyncState =
|
|
6905
|
+
newSyncState = _k.sent();
|
|
6902
6906
|
if (newSyncState === null || newSyncState === void 0 ? void 0 : newSyncState.error) {
|
|
6903
6907
|
throw new Error("Sync error: " + newSyncState.error);
|
|
6904
6908
|
}
|
|
6905
|
-
|
|
6909
|
+
_k.label = 2;
|
|
6906
6910
|
case 2: return [3 /*break*/, 6];
|
|
6907
6911
|
case 3: return [4 /*yield*/, isSyncNeeded(db)];
|
|
6908
6912
|
case 4:
|
|
6909
|
-
if (!
|
|
6913
|
+
if (!_k.sent()) return [3 /*break*/, 6];
|
|
6910
6914
|
syncState_2 = db.cloud.persistedSyncState.value;
|
|
6911
6915
|
triggerSync(db, purpose);
|
|
6912
6916
|
if (!wait) return [3 /*break*/, 6];
|
|
6913
6917
|
console.debug('db.cloud.login() is waiting for sync completion...');
|
|
6914
6918
|
return [4 /*yield*/, from$1(liveQuery(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
6915
6919
|
var syncNeeded, newSyncState;
|
|
6916
|
-
return __generator$1(this, function (
|
|
6917
|
-
switch (
|
|
6920
|
+
return __generator$1(this, function (_k) {
|
|
6921
|
+
switch (_k.label) {
|
|
6918
6922
|
case 0: return [4 /*yield*/, isSyncNeeded(db)];
|
|
6919
6923
|
case 1:
|
|
6920
|
-
syncNeeded =
|
|
6924
|
+
syncNeeded = _k.sent();
|
|
6921
6925
|
return [4 /*yield*/, db.getPersistedSyncState()];
|
|
6922
6926
|
case 2:
|
|
6923
|
-
newSyncState =
|
|
6927
|
+
newSyncState = _k.sent();
|
|
6924
6928
|
if ((newSyncState === null || newSyncState === void 0 ? void 0 : newSyncState.timestamp) !== (syncState_2 === null || syncState_2 === void 0 ? void 0 : syncState_2.timestamp) &&
|
|
6925
6929
|
(newSyncState === null || newSyncState === void 0 ? void 0 : newSyncState.error))
|
|
6926
6930
|
throw new Error("Sync error: " + newSyncState.error);
|
|
@@ -6931,9 +6935,9 @@ function dexieCloud(dexie) {
|
|
|
6931
6935
|
.pipe(filter(function (isNeeded) { return !isNeeded; }), take(1))
|
|
6932
6936
|
.toPromise()];
|
|
6933
6937
|
case 5:
|
|
6934
|
-
|
|
6938
|
+
_k.sent();
|
|
6935
6939
|
console.debug('Done waiting for sync completion because we have nothing to push anymore');
|
|
6936
|
-
|
|
6940
|
+
_k.label = 6;
|
|
6937
6941
|
case 6: return [2 /*return*/];
|
|
6938
6942
|
}
|
|
6939
6943
|
});
|
|
@@ -6944,8 +6948,8 @@ function dexieCloud(dexie) {
|
|
|
6944
6948
|
},
|
|
6945
6949
|
};
|
|
6946
6950
|
dexie.Version.prototype['_parseStoresSpec'] = Dexie.override(dexie.Version.prototype['_parseStoresSpec'], function (origFunc) { return overrideParseStoresSpec(origFunc, dexie); });
|
|
6947
|
-
dexie.Table.prototype.newId = function (
|
|
6948
|
-
var
|
|
6951
|
+
dexie.Table.prototype.newId = function (_k) {
|
|
6952
|
+
var _l = _k === void 0 ? {} : _k, colocateWith = _l.colocateWith;
|
|
6949
6953
|
var shardKey = colocateWith && colocateWith.substr(colocateWith.length - 3);
|
|
6950
6954
|
return generateKey(dexie.cloud.schema[this.name].idPrefix || '', shardKey);
|
|
6951
6955
|
};
|
|
@@ -6960,20 +6964,22 @@ function dexieCloud(dexie) {
|
|
|
6960
6964
|
dexie.use(createImplicitPropSetterMiddleware(DexieCloudDB(dexie)));
|
|
6961
6965
|
dexie.use(createIdGenerationMiddleware(DexieCloudDB(dexie)));
|
|
6962
6966
|
function onDbReady(dexie) {
|
|
6963
|
-
var _a, _b, _c, _d, _e, _f;
|
|
6967
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
6964
6968
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
6965
|
-
var db, swRegistrations,
|
|
6969
|
+
var db, swRegistrations, _k, initiallySynced;
|
|
6966
6970
|
var _this_1 = this;
|
|
6967
|
-
return __generator$1(this, function (
|
|
6968
|
-
switch (
|
|
6971
|
+
return __generator$1(this, function (_l) {
|
|
6972
|
+
switch (_l.label) {
|
|
6969
6973
|
case 0:
|
|
6970
6974
|
closed = false; // As Dexie calls us, we are not closed anymore. Maybe reopened? Remember db.ready event is registered with sticky flag!
|
|
6971
6975
|
db = DexieCloudDB(dexie);
|
|
6972
6976
|
// Setup default GUI:
|
|
6973
|
-
if (
|
|
6977
|
+
if (typeof window !== 'undefined' && typeof document !== 'undefined') {
|
|
6974
6978
|
if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.customLoginGui)) {
|
|
6975
6979
|
subscriptions.push(setupDefaultGUI(dexie));
|
|
6976
6980
|
}
|
|
6981
|
+
}
|
|
6982
|
+
if (!db.cloud.isServiceWorkerDB) {
|
|
6977
6983
|
subscriptions.push(computeSyncState(db).subscribe(dexie.cloud.syncState));
|
|
6978
6984
|
}
|
|
6979
6985
|
//verifyConfig(db.cloud.options); Not needed (yet at least!)
|
|
@@ -6984,26 +6990,26 @@ function dexieCloud(dexie) {
|
|
|
6984
6990
|
if (!('serviceWorker' in navigator)) return [3 /*break*/, 2];
|
|
6985
6991
|
return [4 /*yield*/, navigator.serviceWorker.getRegistrations()];
|
|
6986
6992
|
case 1:
|
|
6987
|
-
|
|
6993
|
+
_k = _l.sent();
|
|
6988
6994
|
return [3 /*break*/, 3];
|
|
6989
6995
|
case 2:
|
|
6990
|
-
|
|
6991
|
-
|
|
6996
|
+
_k = [];
|
|
6997
|
+
_l.label = 3;
|
|
6992
6998
|
case 3:
|
|
6993
|
-
swRegistrations =
|
|
6999
|
+
swRegistrations = _k;
|
|
6994
7000
|
return [4 /*yield*/, db.transaction('rw', db.$syncState, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
6995
|
-
var
|
|
6996
|
-
return __generator$1(this, function (
|
|
6997
|
-
switch (
|
|
7001
|
+
var _h, _j, _k, options, schema, _l, persistedOptions, persistedSchema, persistedSyncState, newPersistedSchema, _m, _o, _p, table, tblSchema, newTblSchema;
|
|
7002
|
+
return __generator$1(this, function (_q) {
|
|
7003
|
+
switch (_q.label) {
|
|
6998
7004
|
case 0:
|
|
6999
|
-
|
|
7005
|
+
_k = db.cloud, options = _k.options, schema = _k.schema;
|
|
7000
7006
|
return [4 /*yield*/, Promise.all([
|
|
7001
7007
|
db.getOptions(),
|
|
7002
7008
|
db.getSchema(),
|
|
7003
7009
|
db.getPersistedSyncState(),
|
|
7004
7010
|
])];
|
|
7005
7011
|
case 1:
|
|
7006
|
-
|
|
7012
|
+
_l = _q.sent(), persistedOptions = _l[0], persistedSchema = _l[1], persistedSyncState = _l[2];
|
|
7007
7013
|
if (!!configuredProgramatically) return [3 /*break*/, 2];
|
|
7008
7014
|
// Options not specified programatically (use case for SW!)
|
|
7009
7015
|
// Take persisted options:
|
|
@@ -7017,10 +7023,10 @@ function dexieCloud(dexie) {
|
|
|
7017
7023
|
throw new Error("Internal error"); // options cannot be null if configuredProgramatically is set.
|
|
7018
7024
|
return [4 /*yield*/, db.$syncState.put(options, 'options')];
|
|
7019
7025
|
case 3:
|
|
7020
|
-
|
|
7021
|
-
|
|
7026
|
+
_q.sent();
|
|
7027
|
+
_q.label = 4;
|
|
7022
7028
|
case 4:
|
|
7023
|
-
if (((
|
|
7029
|
+
if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) &&
|
|
7024
7030
|
'serviceWorker' in navigator &&
|
|
7025
7031
|
swRegistrations.length > 0 &&
|
|
7026
7032
|
!DISABLE_SERVICEWORKER_STRATEGY) {
|
|
@@ -7034,7 +7040,8 @@ function dexieCloud(dexie) {
|
|
|
7034
7040
|
// Not configured for using service worker or no service worker
|
|
7035
7041
|
// registration exists. Don't rely on service worker to do any job.
|
|
7036
7042
|
// Use LocalSyncWorker instead.
|
|
7037
|
-
if (((
|
|
7043
|
+
if (((_j = db.cloud.options) === null || _j === void 0 ? void 0 : _j.tryUseServiceWorker) &&
|
|
7044
|
+
!db.cloud.isServiceWorkerDB) {
|
|
7038
7045
|
console.debug('dexie-cloud-addon: Not using service worker.', swRegistrations.length === 0
|
|
7039
7046
|
? 'No SW registrations found.'
|
|
7040
7047
|
: 'serviceWorker' in navigator && DISABLE_SERVICEWORKER_STRATEGY
|
|
@@ -7054,8 +7061,8 @@ function dexieCloud(dexie) {
|
|
|
7054
7061
|
if (!(!persistedSchema ||
|
|
7055
7062
|
JSON.stringify(persistedSchema) !== JSON.stringify(schema))) return [3 /*break*/, 7];
|
|
7056
7063
|
newPersistedSchema = persistedSchema || {};
|
|
7057
|
-
for (
|
|
7058
|
-
|
|
7064
|
+
for (_m = 0, _o = Object.entries(schema); _m < _o.length; _m++) {
|
|
7065
|
+
_p = _o[_m], table = _p[0], tblSchema = _p[1];
|
|
7059
7066
|
newTblSchema = newPersistedSchema[table];
|
|
7060
7067
|
if (!newTblSchema) {
|
|
7061
7068
|
newPersistedSchema[table] = Object.assign({}, tblSchema);
|
|
@@ -7068,17 +7075,17 @@ function dexieCloud(dexie) {
|
|
|
7068
7075
|
}
|
|
7069
7076
|
return [4 /*yield*/, db.$syncState.put(newPersistedSchema, 'schema')];
|
|
7070
7077
|
case 6:
|
|
7071
|
-
|
|
7078
|
+
_q.sent();
|
|
7072
7079
|
// Make sure persisted table prefixes are being used instead of computed ones:
|
|
7073
7080
|
// Let's assign all props as the newPersistedSchems should be what we should be working with.
|
|
7074
7081
|
Object.assign(schema, newPersistedSchema);
|
|
7075
|
-
|
|
7082
|
+
_q.label = 7;
|
|
7076
7083
|
case 7: return [2 /*return*/, persistedSyncState === null || persistedSyncState === void 0 ? void 0 : persistedSyncState.initiallySynced];
|
|
7077
7084
|
}
|
|
7078
7085
|
});
|
|
7079
7086
|
}); })];
|
|
7080
7087
|
case 4:
|
|
7081
|
-
initiallySynced =
|
|
7088
|
+
initiallySynced = _l.sent();
|
|
7082
7089
|
if (initiallySynced) {
|
|
7083
7090
|
db.setInitiallySynced(true);
|
|
7084
7091
|
}
|
|
@@ -7086,13 +7093,13 @@ function dexieCloud(dexie) {
|
|
|
7086
7093
|
if (!(((_b = db.cloud.options) === null || _b === void 0 ? void 0 : _b.databaseUrl) && !initiallySynced)) return [3 /*break*/, 6];
|
|
7087
7094
|
return [4 /*yield*/, performInitialSync(db, db.cloud.options, db.cloud.schema)];
|
|
7088
7095
|
case 5:
|
|
7089
|
-
|
|
7096
|
+
_l.sent();
|
|
7090
7097
|
db.setInitiallySynced(true);
|
|
7091
|
-
|
|
7098
|
+
_l.label = 6;
|
|
7092
7099
|
case 6:
|
|
7093
7100
|
// Manage CurrentUser observable:
|
|
7094
7101
|
throwIfClosed();
|
|
7095
|
-
if (!!
|
|
7102
|
+
if (!!db.cloud.isServiceWorkerDB) return [3 /*break*/, 8];
|
|
7096
7103
|
subscriptions.push(liveQuery(function () { return db.getCurrentUser(); }).subscribe(currentUserEmitter));
|
|
7097
7104
|
// Manage PersistendSyncState observable:
|
|
7098
7105
|
subscriptions.push(liveQuery(function () { return db.getPersistedSyncState(); }).subscribe(db.cloud.persistedSyncState));
|
|
@@ -7109,14 +7116,14 @@ function dexieCloud(dexie) {
|
|
|
7109
7116
|
// with things from the database and not just the default values.
|
|
7110
7117
|
// This is so that when db.open() completes, user should be safe
|
|
7111
7118
|
// to subscribe to these observables and get actual data.
|
|
7112
|
-
|
|
7113
|
-
|
|
7119
|
+
_l.sent();
|
|
7120
|
+
_l.label = 8;
|
|
7114
7121
|
case 8:
|
|
7115
7122
|
if (!((_c = db.cloud.options) === null || _c === void 0 ? void 0 : _c.requireAuth)) return [3 /*break*/, 10];
|
|
7116
7123
|
return [4 /*yield*/, login(db)];
|
|
7117
7124
|
case 9:
|
|
7118
|
-
|
|
7119
|
-
|
|
7125
|
+
_l.sent();
|
|
7126
|
+
_l.label = 10;
|
|
7120
7127
|
case 10:
|
|
7121
7128
|
if (localSyncWorker)
|
|
7122
7129
|
localSyncWorker.stop();
|
|
@@ -7128,7 +7135,7 @@ function dexieCloud(dexie) {
|
|
|
7128
7135
|
}
|
|
7129
7136
|
else if (((_e = db.cloud.options) === null || _e === void 0 ? void 0 : _e.databaseUrl) &&
|
|
7130
7137
|
db.cloud.schema &&
|
|
7131
|
-
!
|
|
7138
|
+
!db.cloud.isServiceWorkerDB) {
|
|
7132
7139
|
// There's no SW. Start SyncWorker instead.
|
|
7133
7140
|
localSyncWorker = LocalSyncWorker(db, db.cloud.options, db.cloud.schema);
|
|
7134
7141
|
localSyncWorker.start();
|
|
@@ -7136,7 +7143,7 @@ function dexieCloud(dexie) {
|
|
|
7136
7143
|
}
|
|
7137
7144
|
// Listen to online event and do sync.
|
|
7138
7145
|
throwIfClosed();
|
|
7139
|
-
if (!
|
|
7146
|
+
if (!db.cloud.isServiceWorkerDB) {
|
|
7140
7147
|
subscriptions.push(fromEvent(self, 'online').subscribe(function () {
|
|
7141
7148
|
console.debug('online!');
|
|
7142
7149
|
db.syncStateChangedEvent.next({
|
|
@@ -7150,10 +7157,10 @@ function dexieCloud(dexie) {
|
|
|
7150
7157
|
});
|
|
7151
7158
|
}));
|
|
7152
7159
|
}
|
|
7153
|
-
// Connect WebSocket
|
|
7154
|
-
if (
|
|
7155
|
-
!
|
|
7156
|
-
|
|
7160
|
+
// Connect WebSocket unless we
|
|
7161
|
+
if (((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl) &&
|
|
7162
|
+
!((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.disableWebSocket) &&
|
|
7163
|
+
!IS_SERVICE_WORKER) {
|
|
7157
7164
|
subscriptions.push(connectWebSocket(db));
|
|
7158
7165
|
}
|
|
7159
7166
|
return [2 /*return*/];
|
|
@@ -7162,7 +7169,7 @@ function dexieCloud(dexie) {
|
|
|
7162
7169
|
});
|
|
7163
7170
|
}
|
|
7164
7171
|
}
|
|
7165
|
-
dexieCloud.version = '4.0.0-beta.
|
|
7172
|
+
dexieCloud.version = '4.0.0-beta.19';
|
|
7166
7173
|
Dexie.Cloud = dexieCloud;
|
|
7167
7174
|
|
|
7168
7175
|
export { dexieCloud as default, dexieCloud, getTiedObjectId, getTiedRealmId };
|