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
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
*
|
|
109
109
|
* ==========================================================================
|
|
110
110
|
*
|
|
111
|
-
* Version 4.0.0-beta.
|
|
111
|
+
* Version 4.0.0-beta.19, Fri May 20 2022
|
|
112
112
|
*
|
|
113
113
|
* https://dexie.org
|
|
114
114
|
*
|
|
@@ -280,8 +280,8 @@
|
|
|
280
280
|
switch (entry.type) {
|
|
281
281
|
case "ups":
|
|
282
282
|
// Adjust the existing upsert with additional updates
|
|
283
|
-
for (var
|
|
284
|
-
var
|
|
283
|
+
for (var _k = 0, _l = Object.entries(changeSpec); _k < _l.length; _k++) {
|
|
284
|
+
var _m = _l[_k], propPath = _m[0], value = _m[1];
|
|
285
285
|
setByKeyPath(entry.val, propPath, value);
|
|
286
286
|
}
|
|
287
287
|
break;
|
|
@@ -308,10 +308,10 @@
|
|
|
308
308
|
return target;
|
|
309
309
|
}
|
|
310
310
|
function applyOperations(target, ops) {
|
|
311
|
-
for (var
|
|
312
|
-
var
|
|
313
|
-
for (var
|
|
314
|
-
var mut = muts_1[
|
|
311
|
+
for (var _k = 0, ops_1 = ops; _k < ops_1.length; _k++) {
|
|
312
|
+
var _l = ops_1[_k], table = _l.table, muts = _l.muts;
|
|
313
|
+
for (var _m = 0, muts_1 = muts; _m < muts_1.length; _m++) {
|
|
314
|
+
var mut = muts_1[_m];
|
|
315
315
|
applyOperation(target, table, mut);
|
|
316
316
|
}
|
|
317
317
|
}
|
|
@@ -320,10 +320,10 @@
|
|
|
320
320
|
changesToSubtract // additional mutations on client during syncWithServer()
|
|
321
321
|
) {
|
|
322
322
|
var _a, _b, _c;
|
|
323
|
-
for (var
|
|
324
|
-
var
|
|
325
|
-
for (var
|
|
326
|
-
var
|
|
323
|
+
for (var _k = 0, _l = Object.entries(changesToSubtract); _k < _l.length; _k++) {
|
|
324
|
+
var _m = _l[_k], table = _m[0], mutationSet = _m[1];
|
|
325
|
+
for (var _o = 0, _p = Object.entries(mutationSet); _o < _p.length; _o++) {
|
|
326
|
+
var _q = _p[_o], key = _q[0], mut = _q[1];
|
|
327
327
|
switch (mut.type) {
|
|
328
328
|
case 'ups':
|
|
329
329
|
{
|
|
@@ -353,8 +353,8 @@
|
|
|
353
353
|
switch (targetMut.type) {
|
|
354
354
|
case 'ups':
|
|
355
355
|
// Adjust the server upsert with locally updated values.
|
|
356
|
-
for (var
|
|
357
|
-
var
|
|
356
|
+
for (var _r = 0, _s = Object.entries(mut.mod); _r < _s.length; _r++) {
|
|
357
|
+
var _t = _s[_r], propPath = _t[0], value = _t[1];
|
|
358
358
|
setByKeyPath(targetMut.val, propPath, value);
|
|
359
359
|
}
|
|
360
360
|
break;
|
|
@@ -363,8 +363,8 @@
|
|
|
363
363
|
break;
|
|
364
364
|
case 'upd':
|
|
365
365
|
// Remove the local update props from the server update mutation.
|
|
366
|
-
for (var
|
|
367
|
-
var propPath = _u
|
|
366
|
+
for (var _u = 0, _v = Object.keys(mut.mod); _u < _v.length; _u++) {
|
|
367
|
+
var propPath = _v[_u];
|
|
368
368
|
delete targetMut.mod[propPath];
|
|
369
369
|
}
|
|
370
370
|
break;
|
|
@@ -387,10 +387,10 @@
|
|
|
387
387
|
var txid = randomString$1(16);
|
|
388
388
|
// Convert data into a temporary map to collect mutations of same table and type
|
|
389
389
|
var map = {};
|
|
390
|
-
for (var
|
|
391
|
-
var
|
|
392
|
-
for (var
|
|
393
|
-
var
|
|
390
|
+
for (var _k = 0, _l = Object.entries(inSet); _k < _l.length; _k++) {
|
|
391
|
+
var _m = _l[_k], table = _m[0], ops = _m[1];
|
|
392
|
+
for (var _o = 0, _p = Object.entries(ops); _o < _p.length; _o++) {
|
|
393
|
+
var _q = _p[_o], key = _q[0], op = _q[1];
|
|
394
394
|
var mapEntry = map[table] || (map[table] = {});
|
|
395
395
|
var ops_2 = mapEntry[op.type] || (mapEntry[op.type] = []);
|
|
396
396
|
ops_2.push(Object.assign({ key: key }, op)); // DBKeyMutation doesn't contain key, so we need to bring it in.
|
|
@@ -398,14 +398,14 @@
|
|
|
398
398
|
}
|
|
399
399
|
// Start computing the resulting format:
|
|
400
400
|
var result = [];
|
|
401
|
-
for (var
|
|
402
|
-
var
|
|
401
|
+
for (var _r = 0, _s = Object.entries(map); _r < _s.length; _r++) {
|
|
402
|
+
var _t = _s[_r], table = _t[0], ops = _t[1];
|
|
403
403
|
var resultEntry = {
|
|
404
404
|
table: table,
|
|
405
405
|
muts: [],
|
|
406
406
|
};
|
|
407
|
-
for (var
|
|
408
|
-
var
|
|
407
|
+
for (var _u = 0, _v = Object.entries(ops); _u < _v.length; _u++) {
|
|
408
|
+
var _w = _v[_u], optype = _w[0], muts = _w[1];
|
|
409
409
|
switch (optype) {
|
|
410
410
|
case "ups": {
|
|
411
411
|
var op = {
|
|
@@ -2052,18 +2052,18 @@
|
|
|
2052
2052
|
function registerSyncEvent(db, purpose) {
|
|
2053
2053
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2054
2054
|
var sw, e_3;
|
|
2055
|
-
return __generator$1(this, function (
|
|
2056
|
-
switch (
|
|
2055
|
+
return __generator$1(this, function (_k) {
|
|
2056
|
+
switch (_k.label) {
|
|
2057
2057
|
case 0:
|
|
2058
|
-
|
|
2058
|
+
_k.trys.push([0, 4, , 5]);
|
|
2059
2059
|
return [4 /*yield*/, navigator.serviceWorker.ready];
|
|
2060
2060
|
case 1:
|
|
2061
|
-
sw =
|
|
2061
|
+
sw = _k.sent();
|
|
2062
2062
|
if (!(purpose === "push" && sw.sync)) return [3 /*break*/, 3];
|
|
2063
2063
|
return [4 /*yield*/, sw.sync.register("dexie-cloud:".concat(db.name))];
|
|
2064
2064
|
case 2:
|
|
2065
|
-
|
|
2066
|
-
|
|
2065
|
+
_k.sent();
|
|
2066
|
+
_k.label = 3;
|
|
2067
2067
|
case 3:
|
|
2068
2068
|
if (sw.active) {
|
|
2069
2069
|
// Use postMessage for pull syncs and for browsers not supporting sync event (Firefox, Safari).
|
|
@@ -2079,7 +2079,7 @@
|
|
|
2079
2079
|
}
|
|
2080
2080
|
return [2 /*return*/];
|
|
2081
2081
|
case 4:
|
|
2082
|
-
e_3 =
|
|
2082
|
+
e_3 = _k.sent();
|
|
2083
2083
|
if (!hasComplainedAboutSyncEvent) {
|
|
2084
2084
|
console.debug("Dexie Cloud: Could not register sync event", e_3);
|
|
2085
2085
|
hasComplainedAboutSyncEvent = true;
|
|
@@ -2094,33 +2094,33 @@
|
|
|
2094
2094
|
var _a;
|
|
2095
2095
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2096
2096
|
var periodicSync, e_4, e_5;
|
|
2097
|
-
return __generator$1(this, function (
|
|
2098
|
-
switch (
|
|
2097
|
+
return __generator$1(this, function (_k) {
|
|
2098
|
+
switch (_k.label) {
|
|
2099
2099
|
case 0:
|
|
2100
|
-
|
|
2100
|
+
_k.trys.push([0, 8, , 9]);
|
|
2101
2101
|
return [4 /*yield*/, navigator.serviceWorker.ready];
|
|
2102
2102
|
case 1:
|
|
2103
|
-
periodicSync = (
|
|
2103
|
+
periodicSync = (_k.sent()).periodicSync;
|
|
2104
2104
|
if (!periodicSync) return [3 /*break*/, 6];
|
|
2105
|
-
|
|
2105
|
+
_k.label = 2;
|
|
2106
2106
|
case 2:
|
|
2107
|
-
|
|
2107
|
+
_k.trys.push([2, 4, , 5]);
|
|
2108
2108
|
return [4 /*yield*/, periodicSync.register("dexie-cloud:".concat(db.name), (_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.periodicSync)];
|
|
2109
2109
|
case 3:
|
|
2110
|
-
|
|
2110
|
+
_k.sent();
|
|
2111
2111
|
console.debug("Dexie Cloud: Successfully registered periodicsync event for ".concat(db.name));
|
|
2112
2112
|
return [3 /*break*/, 5];
|
|
2113
2113
|
case 4:
|
|
2114
|
-
e_4 =
|
|
2114
|
+
e_4 = _k.sent();
|
|
2115
2115
|
console.debug("Dexie Cloud: Failed to register periodic sync. Your PWA must be installed to allow background sync.", e_4);
|
|
2116
2116
|
return [3 /*break*/, 5];
|
|
2117
2117
|
case 5: return [3 /*break*/, 7];
|
|
2118
2118
|
case 6:
|
|
2119
2119
|
console.debug("Dexie Cloud: periodicSync not supported.");
|
|
2120
|
-
|
|
2120
|
+
_k.label = 7;
|
|
2121
2121
|
case 7: return [3 /*break*/, 9];
|
|
2122
2122
|
case 8:
|
|
2123
|
-
e_5 =
|
|
2123
|
+
e_5 = _k.sent();
|
|
2124
2124
|
console.debug("Dexie Cloud: Could not register periodicSync for ".concat(db.name), e_5);
|
|
2125
2125
|
return [3 /*break*/, 9];
|
|
2126
2126
|
case 9: return [2 /*return*/];
|
|
@@ -2175,8 +2175,8 @@
|
|
|
2175
2175
|
}
|
|
2176
2176
|
function alertUser(userInteraction, title) {
|
|
2177
2177
|
var alerts = [];
|
|
2178
|
-
for (var
|
|
2179
|
-
alerts[
|
|
2178
|
+
for (var _k = 2; _k < arguments.length; _k++) {
|
|
2179
|
+
alerts[_k - 2] = arguments[_k];
|
|
2180
2180
|
}
|
|
2181
2181
|
return interactWithUser(userInteraction, {
|
|
2182
2182
|
type: 'message-alert',
|
|
@@ -2188,11 +2188,11 @@
|
|
|
2188
2188
|
function promptForEmail(userInteraction, title, emailHint) {
|
|
2189
2189
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2190
2190
|
var email;
|
|
2191
|
-
return __generator$1(this, function (
|
|
2192
|
-
switch (
|
|
2191
|
+
return __generator$1(this, function (_k) {
|
|
2192
|
+
switch (_k.label) {
|
|
2193
2193
|
case 0:
|
|
2194
2194
|
email = emailHint || '';
|
|
2195
|
-
|
|
2195
|
+
_k.label = 1;
|
|
2196
2196
|
case 1:
|
|
2197
2197
|
if (!(!email || !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,10}$/.test(email))) return [3 /*break*/, 3];
|
|
2198
2198
|
return [4 /*yield*/, interactWithUser(userInteraction, {
|
|
@@ -2216,7 +2216,7 @@
|
|
|
2216
2216
|
},
|
|
2217
2217
|
})];
|
|
2218
2218
|
case 2:
|
|
2219
|
-
email = (
|
|
2219
|
+
email = (_k.sent()).email;
|
|
2220
2220
|
return [3 /*break*/, 1];
|
|
2221
2221
|
case 3: return [2 /*return*/, email];
|
|
2222
2222
|
}
|
|
@@ -2226,8 +2226,8 @@
|
|
|
2226
2226
|
function promptForOTP(userInteraction, email, alert) {
|
|
2227
2227
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2228
2228
|
var alerts, otp;
|
|
2229
|
-
return __generator$1(this, function (
|
|
2230
|
-
switch (
|
|
2229
|
+
return __generator$1(this, function (_k) {
|
|
2230
|
+
switch (_k.label) {
|
|
2231
2231
|
case 0:
|
|
2232
2232
|
alerts = [
|
|
2233
2233
|
{
|
|
@@ -2253,7 +2253,7 @@
|
|
|
2253
2253
|
},
|
|
2254
2254
|
})];
|
|
2255
2255
|
case 1:
|
|
2256
|
-
otp = (
|
|
2256
|
+
otp = (_k.sent()).otp;
|
|
2257
2257
|
return [2 /*return*/, otp];
|
|
2258
2258
|
}
|
|
2259
2259
|
});
|
|
@@ -2263,11 +2263,11 @@
|
|
|
2263
2263
|
var _a, _b;
|
|
2264
2264
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2265
2265
|
var currentUser, accessToken, accessTokenExpiration, refreshToken, refreshTokenExpiration, claims, expTime, refreshExpTime, refreshedLogin;
|
|
2266
|
-
return __generator$1(this, function (
|
|
2267
|
-
switch (
|
|
2266
|
+
return __generator$1(this, function (_k) {
|
|
2267
|
+
switch (_k.label) {
|
|
2268
2268
|
case 0: return [4 /*yield*/, db.getCurrentUser()];
|
|
2269
2269
|
case 1:
|
|
2270
|
-
currentUser =
|
|
2270
|
+
currentUser = _k.sent();
|
|
2271
2271
|
accessToken = currentUser.accessToken, accessTokenExpiration = currentUser.accessTokenExpiration, refreshToken = currentUser.refreshToken, refreshTokenExpiration = currentUser.refreshTokenExpiration, claims = currentUser.claims;
|
|
2272
2272
|
if (!accessToken)
|
|
2273
2273
|
return [2 /*return*/];
|
|
@@ -2284,13 +2284,13 @@
|
|
|
2284
2284
|
}
|
|
2285
2285
|
return [4 /*yield*/, refreshAccessToken(db.cloud.options.databaseUrl, currentUser)];
|
|
2286
2286
|
case 2:
|
|
2287
|
-
refreshedLogin =
|
|
2287
|
+
refreshedLogin = _k.sent();
|
|
2288
2288
|
return [4 /*yield*/, db.table('$logins').update(claims.sub, {
|
|
2289
2289
|
accessToken: refreshedLogin.accessToken,
|
|
2290
2290
|
accessTokenExpiration: refreshedLogin.accessTokenExpiration,
|
|
2291
2291
|
})];
|
|
2292
2292
|
case 3:
|
|
2293
|
-
|
|
2293
|
+
_k.sent();
|
|
2294
2294
|
return [2 /*return*/, refreshedLogin.accessToken];
|
|
2295
2295
|
}
|
|
2296
2296
|
});
|
|
@@ -2298,8 +2298,8 @@
|
|
|
2298
2298
|
}
|
|
2299
2299
|
function authenticate(url, context, fetchToken, userInteraction, hints) {
|
|
2300
2300
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2301
|
-
return __generator$1(this, function (
|
|
2302
|
-
switch (
|
|
2301
|
+
return __generator$1(this, function (_k) {
|
|
2302
|
+
switch (_k.label) {
|
|
2303
2303
|
case 0:
|
|
2304
2304
|
if (!(context.accessToken &&
|
|
2305
2305
|
context.accessTokenExpiration.getTime() > Date.now())) return [3 /*break*/, 1];
|
|
@@ -2309,9 +2309,9 @@
|
|
|
2309
2309
|
(!context.refreshTokenExpiration ||
|
|
2310
2310
|
context.refreshTokenExpiration.getTime() > Date.now()))) return [3 /*break*/, 3];
|
|
2311
2311
|
return [4 /*yield*/, refreshAccessToken(url, context)];
|
|
2312
|
-
case 2: return [2 /*return*/,
|
|
2312
|
+
case 2: return [2 /*return*/, _k.sent()];
|
|
2313
2313
|
case 3: return [4 /*yield*/, userAuthenticate(context, fetchToken, userInteraction, hints)];
|
|
2314
|
-
case 4: return [2 /*return*/,
|
|
2314
|
+
case 4: return [2 /*return*/, _k.sent()];
|
|
2315
2315
|
}
|
|
2316
2316
|
});
|
|
2317
2317
|
});
|
|
@@ -2319,8 +2319,8 @@
|
|
|
2319
2319
|
function refreshAccessToken(url, login) {
|
|
2320
2320
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2321
2321
|
var time_stamp, signing_algorithm, textEncoder, data, binarySignature, signature, tokenRequest, res, response;
|
|
2322
|
-
return __generator$1(this, function (
|
|
2323
|
-
switch (
|
|
2322
|
+
return __generator$1(this, function (_k) {
|
|
2323
|
+
switch (_k.label) {
|
|
2324
2324
|
case 0:
|
|
2325
2325
|
if (!login.refreshToken)
|
|
2326
2326
|
throw new Error("Cannot refresh token - refresh token is missing.");
|
|
@@ -2332,7 +2332,7 @@
|
|
|
2332
2332
|
data = textEncoder.encode(login.refreshToken + time_stamp);
|
|
2333
2333
|
return [4 /*yield*/, crypto.subtle.sign(signing_algorithm, login.nonExportablePrivateKey, data)];
|
|
2334
2334
|
case 1:
|
|
2335
|
-
binarySignature =
|
|
2335
|
+
binarySignature = _k.sent();
|
|
2336
2336
|
signature = b64encode(binarySignature);
|
|
2337
2337
|
tokenRequest = {
|
|
2338
2338
|
grant_type: 'refresh_token',
|
|
@@ -2349,12 +2349,12 @@
|
|
|
2349
2349
|
mode: 'cors',
|
|
2350
2350
|
})];
|
|
2351
2351
|
case 2:
|
|
2352
|
-
res =
|
|
2352
|
+
res = _k.sent();
|
|
2353
2353
|
if (res.status !== 200)
|
|
2354
2354
|
throw new Error("RefreshToken: Status ".concat(res.status, " from ").concat(url, "/token"));
|
|
2355
2355
|
return [4 /*yield*/, res.json()];
|
|
2356
2356
|
case 3:
|
|
2357
|
-
response =
|
|
2357
|
+
response = _k.sent();
|
|
2358
2358
|
login.accessToken = response.accessToken;
|
|
2359
2359
|
login.accessTokenExpiration = response.accessTokenExpiration
|
|
2360
2360
|
? new Date(response.accessTokenExpiration)
|
|
@@ -2366,9 +2366,9 @@
|
|
|
2366
2366
|
}
|
|
2367
2367
|
function userAuthenticate(context, fetchToken, userInteraction, hints) {
|
|
2368
2368
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2369
|
-
var
|
|
2370
|
-
return __generator$1(this, function (
|
|
2371
|
-
switch (
|
|
2369
|
+
var _k, privateKey, publicKey, publicKeySPKI, publicKeyPEM, response2, error_1;
|
|
2370
|
+
return __generator$1(this, function (_l) {
|
|
2371
|
+
switch (_l.label) {
|
|
2372
2372
|
case 0: return [4 /*yield*/, crypto.subtle.generateKey({
|
|
2373
2373
|
name: 'RSASSA-PKCS1-v1_5',
|
|
2374
2374
|
modulusLength: 2048,
|
|
@@ -2377,24 +2377,24 @@
|
|
|
2377
2377
|
}, false, // Non-exportable...
|
|
2378
2378
|
['sign', 'verify'])];
|
|
2379
2379
|
case 1:
|
|
2380
|
-
|
|
2380
|
+
_k = _l.sent(), privateKey = _k.privateKey, publicKey = _k.publicKey;
|
|
2381
2381
|
if (!privateKey || !publicKey)
|
|
2382
2382
|
throw new Error("Could not generate RSA keypair"); // Typings suggest these can be undefined...
|
|
2383
2383
|
context.nonExportablePrivateKey = privateKey; //...but storable!
|
|
2384
2384
|
return [4 /*yield*/, crypto.subtle.exportKey('spki', publicKey)];
|
|
2385
2385
|
case 2:
|
|
2386
|
-
publicKeySPKI =
|
|
2386
|
+
publicKeySPKI = _l.sent();
|
|
2387
2387
|
publicKeyPEM = spkiToPEM(publicKeySPKI);
|
|
2388
2388
|
context.publicKey = publicKey;
|
|
2389
|
-
|
|
2389
|
+
_l.label = 3;
|
|
2390
2390
|
case 3:
|
|
2391
|
-
|
|
2391
|
+
_l.trys.push([3, 7, , 9]);
|
|
2392
2392
|
return [4 /*yield*/, fetchToken({
|
|
2393
2393
|
public_key: publicKeyPEM,
|
|
2394
2394
|
hints: hints,
|
|
2395
2395
|
})];
|
|
2396
2396
|
case 4:
|
|
2397
|
-
response2 =
|
|
2397
|
+
response2 = _l.sent();
|
|
2398
2398
|
if (response2.type !== 'tokens')
|
|
2399
2399
|
throw new Error("Unexpected response type from token endpoint: ".concat(response2.type));
|
|
2400
2400
|
context.accessToken = response2.accessToken;
|
|
@@ -2415,11 +2415,11 @@
|
|
|
2415
2415
|
alerts: response2.alerts,
|
|
2416
2416
|
})];
|
|
2417
2417
|
case 5:
|
|
2418
|
-
|
|
2419
|
-
|
|
2418
|
+
_l.sent();
|
|
2419
|
+
_l.label = 6;
|
|
2420
2420
|
case 6: return [2 /*return*/, context];
|
|
2421
2421
|
case 7:
|
|
2422
|
-
error_1 =
|
|
2422
|
+
error_1 = _l.sent();
|
|
2423
2423
|
return [4 /*yield*/, alertUser(userInteraction, 'Authentication Failed', {
|
|
2424
2424
|
type: 'error',
|
|
2425
2425
|
messageCode: 'GENERIC_ERROR',
|
|
@@ -2427,7 +2427,7 @@
|
|
|
2427
2427
|
messageParams: {}
|
|
2428
2428
|
}).catch(function () { })];
|
|
2429
2429
|
case 8:
|
|
2430
|
-
|
|
2430
|
+
_l.sent();
|
|
2431
2431
|
throw error_1;
|
|
2432
2432
|
case 9: return [2 /*return*/];
|
|
2433
2433
|
}
|
|
@@ -2470,7 +2470,7 @@
|
|
|
2470
2470
|
AuthPersistedContext.prototype.save = function () {
|
|
2471
2471
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2472
2472
|
var db;
|
|
2473
|
-
return __generator$1(this, function (
|
|
2473
|
+
return __generator$1(this, function (_k) {
|
|
2474
2474
|
db = wm$1.get(this);
|
|
2475
2475
|
db.table("$logins").put(this);
|
|
2476
2476
|
return [2 /*return*/];
|
|
@@ -2497,13 +2497,13 @@
|
|
|
2497
2497
|
}(Error));
|
|
2498
2498
|
function otpFetchTokenCallback(db) {
|
|
2499
2499
|
var userInteraction = db.cloud.userInteraction;
|
|
2500
|
-
return function otpAuthenticate(
|
|
2501
|
-
var public_key =
|
|
2500
|
+
return function otpAuthenticate(_k) {
|
|
2501
|
+
var public_key = _k.public_key, hints = _k.hints;
|
|
2502
2502
|
var _a;
|
|
2503
2503
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2504
|
-
var tokenRequest, url, demo_user, email, res1, errMsg, response, otp, res2, errorText,
|
|
2505
|
-
return __generator$1(this, function (
|
|
2506
|
-
switch (
|
|
2504
|
+
var tokenRequest, url, demo_user, email, res1, errMsg, response, otp, res2, errorText, _k, errMsg, response2;
|
|
2505
|
+
return __generator$1(this, function (_l) {
|
|
2506
|
+
switch (_l.label) {
|
|
2507
2507
|
case 0:
|
|
2508
2508
|
url = (_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.databaseUrl;
|
|
2509
2509
|
if (!url)
|
|
@@ -2511,7 +2511,7 @@
|
|
|
2511
2511
|
if (!((hints === null || hints === void 0 ? void 0 : hints.grant_type) === 'demo')) return [3 /*break*/, 2];
|
|
2512
2512
|
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))];
|
|
2513
2513
|
case 1:
|
|
2514
|
-
demo_user =
|
|
2514
|
+
demo_user = _l.sent();
|
|
2515
2515
|
tokenRequest = {
|
|
2516
2516
|
demo_user: demo_user,
|
|
2517
2517
|
grant_type: 'demo',
|
|
@@ -2521,25 +2521,25 @@
|
|
|
2521
2521
|
return [3 /*break*/, 4];
|
|
2522
2522
|
case 2: return [4 /*yield*/, promptForEmail(userInteraction, 'Enter email address', hints === null || hints === void 0 ? void 0 : hints.email)];
|
|
2523
2523
|
case 3:
|
|
2524
|
-
email =
|
|
2524
|
+
email = _l.sent();
|
|
2525
2525
|
tokenRequest = {
|
|
2526
2526
|
email: email,
|
|
2527
2527
|
grant_type: 'otp',
|
|
2528
2528
|
scopes: ['ACCESS_DB'],
|
|
2529
2529
|
public_key: public_key,
|
|
2530
2530
|
};
|
|
2531
|
-
|
|
2531
|
+
_l.label = 4;
|
|
2532
2532
|
case 4: return [4 /*yield*/, fetch("".concat(url, "/token"), {
|
|
2533
2533
|
body: JSON.stringify(tokenRequest),
|
|
2534
2534
|
method: 'post',
|
|
2535
2535
|
headers: { 'Content-Type': 'application/json', mode: 'cors' },
|
|
2536
2536
|
})];
|
|
2537
2537
|
case 5:
|
|
2538
|
-
res1 =
|
|
2538
|
+
res1 = _l.sent();
|
|
2539
2539
|
if (!(res1.status !== 200)) return [3 /*break*/, 8];
|
|
2540
2540
|
return [4 /*yield*/, res1.text()];
|
|
2541
2541
|
case 6:
|
|
2542
|
-
errMsg =
|
|
2542
|
+
errMsg = _l.sent();
|
|
2543
2543
|
return [4 /*yield*/, alertUser(userInteraction, "Token request failed", {
|
|
2544
2544
|
type: 'error',
|
|
2545
2545
|
messageCode: 'GENERIC_ERROR',
|
|
@@ -2547,11 +2547,11 @@
|
|
|
2547
2547
|
messageParams: {}
|
|
2548
2548
|
}).catch(function () { })];
|
|
2549
2549
|
case 7:
|
|
2550
|
-
|
|
2550
|
+
_l.sent();
|
|
2551
2551
|
throw new HttpError(res1, errMsg);
|
|
2552
2552
|
case 8: return [4 /*yield*/, res1.json()];
|
|
2553
2553
|
case 9:
|
|
2554
|
-
response =
|
|
2554
|
+
response = _l.sent();
|
|
2555
2555
|
if (!(response.type === 'tokens')) return [3 /*break*/, 10];
|
|
2556
2556
|
// Demo user request can get a "tokens" response right away
|
|
2557
2557
|
return [2 /*return*/, response];
|
|
@@ -2561,7 +2561,7 @@
|
|
|
2561
2561
|
throw new Error("Unexpected response from ".concat(url, "/token"));
|
|
2562
2562
|
return [4 /*yield*/, promptForOTP(userInteraction, tokenRequest.email)];
|
|
2563
2563
|
case 11:
|
|
2564
|
-
otp =
|
|
2564
|
+
otp = _l.sent();
|
|
2565
2565
|
tokenRequest.otp = otp || '';
|
|
2566
2566
|
tokenRequest.otp_id = response.otp_id;
|
|
2567
2567
|
return [4 /*yield*/, fetch("".concat(url, "/token"), {
|
|
@@ -2571,14 +2571,14 @@
|
|
|
2571
2571
|
mode: 'cors',
|
|
2572
2572
|
})];
|
|
2573
2573
|
case 12:
|
|
2574
|
-
res2 =
|
|
2575
|
-
|
|
2574
|
+
res2 = _l.sent();
|
|
2575
|
+
_l.label = 13;
|
|
2576
2576
|
case 13:
|
|
2577
2577
|
if (!(res2.status === 401)) return [3 /*break*/, 17];
|
|
2578
2578
|
return [4 /*yield*/, res2.text()];
|
|
2579
2579
|
case 14:
|
|
2580
|
-
errorText =
|
|
2581
|
-
|
|
2580
|
+
errorText = _l.sent();
|
|
2581
|
+
_k = tokenRequest;
|
|
2582
2582
|
return [4 /*yield*/, promptForOTP(userInteraction, tokenRequest.email, {
|
|
2583
2583
|
type: 'error',
|
|
2584
2584
|
messageCode: 'INVALID_OTP',
|
|
@@ -2586,7 +2586,7 @@
|
|
|
2586
2586
|
messageParams: {}
|
|
2587
2587
|
})];
|
|
2588
2588
|
case 15:
|
|
2589
|
-
|
|
2589
|
+
_k.otp = _l.sent();
|
|
2590
2590
|
return [4 /*yield*/, fetch("".concat(url, "/token"), {
|
|
2591
2591
|
body: JSON.stringify(tokenRequest),
|
|
2592
2592
|
method: 'post',
|
|
@@ -2594,13 +2594,13 @@
|
|
|
2594
2594
|
mode: 'cors',
|
|
2595
2595
|
})];
|
|
2596
2596
|
case 16:
|
|
2597
|
-
res2 =
|
|
2597
|
+
res2 = _l.sent();
|
|
2598
2598
|
return [3 /*break*/, 13];
|
|
2599
2599
|
case 17:
|
|
2600
2600
|
if (!(res2.status !== 200)) return [3 /*break*/, 20];
|
|
2601
2601
|
return [4 /*yield*/, res2.text()];
|
|
2602
2602
|
case 18:
|
|
2603
|
-
errMsg =
|
|
2603
|
+
errMsg = _l.sent();
|
|
2604
2604
|
return [4 /*yield*/, alertUser(userInteraction, "OTP Authentication Failed", {
|
|
2605
2605
|
type: 'error',
|
|
2606
2606
|
messageCode: 'GENERIC_ERROR',
|
|
@@ -2608,11 +2608,11 @@
|
|
|
2608
2608
|
messageParams: {}
|
|
2609
2609
|
}).catch(function () { })];
|
|
2610
2610
|
case 19:
|
|
2611
|
-
|
|
2611
|
+
_l.sent();
|
|
2612
2612
|
throw new HttpError(res2, errMsg);
|
|
2613
2613
|
case 20: return [4 /*yield*/, res2.json()];
|
|
2614
2614
|
case 21:
|
|
2615
|
-
response2 =
|
|
2615
|
+
response2 = _l.sent();
|
|
2616
2616
|
return [2 /*return*/, response2];
|
|
2617
2617
|
case 22: throw new Error("Unexpected response from ".concat(url, "/token"));
|
|
2618
2618
|
}
|
|
@@ -2635,19 +2635,19 @@
|
|
|
2635
2635
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2636
2636
|
var $logins;
|
|
2637
2637
|
var _this_1 = this;
|
|
2638
|
-
return __generator$1(this, function (
|
|
2639
|
-
switch (
|
|
2638
|
+
return __generator$1(this, function (_k) {
|
|
2639
|
+
switch (_k.label) {
|
|
2640
2640
|
case 0:
|
|
2641
2641
|
if (user.userId === db.cloud.currentUserId)
|
|
2642
2642
|
return [2 /*return*/]; // Already this user.
|
|
2643
2643
|
$logins = db.table('$logins');
|
|
2644
2644
|
return [4 /*yield*/, db.transaction('rw', $logins, function (tx) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
2645
2645
|
var existingLogins;
|
|
2646
|
-
return __generator$1(this, function (
|
|
2647
|
-
switch (
|
|
2646
|
+
return __generator$1(this, function (_k) {
|
|
2647
|
+
switch (_k.label) {
|
|
2648
2648
|
case 0: return [4 /*yield*/, $logins.toArray()];
|
|
2649
2649
|
case 1:
|
|
2650
|
-
existingLogins =
|
|
2650
|
+
existingLogins = _k.sent();
|
|
2651
2651
|
return [4 /*yield*/, Promise.all(existingLogins
|
|
2652
2652
|
.filter(function (login) { return login.userId !== user.userId && login.isLoggedIn; })
|
|
2653
2653
|
.map(function (login) {
|
|
@@ -2655,19 +2655,19 @@
|
|
|
2655
2655
|
return $logins.put(login);
|
|
2656
2656
|
}))];
|
|
2657
2657
|
case 2:
|
|
2658
|
-
|
|
2658
|
+
_k.sent();
|
|
2659
2659
|
user.isLoggedIn = true;
|
|
2660
2660
|
user.lastLogin = new Date();
|
|
2661
2661
|
return [4 /*yield*/, user.save()];
|
|
2662
2662
|
case 3:
|
|
2663
|
-
|
|
2663
|
+
_k.sent();
|
|
2664
2664
|
console.debug('Saved new user', user.email);
|
|
2665
2665
|
return [2 /*return*/];
|
|
2666
2666
|
}
|
|
2667
2667
|
});
|
|
2668
2668
|
}); })];
|
|
2669
2669
|
case 1:
|
|
2670
|
-
|
|
2670
|
+
_k.sent();
|
|
2671
2671
|
return [4 /*yield*/, new Promise(function (resolve) {
|
|
2672
2672
|
if (db.cloud.currentUserId === user.userId) {
|
|
2673
2673
|
resolve(null);
|
|
@@ -2682,7 +2682,7 @@
|
|
|
2682
2682
|
}
|
|
2683
2683
|
})];
|
|
2684
2684
|
case 2:
|
|
2685
|
-
|
|
2685
|
+
_k.sent();
|
|
2686
2686
|
return [2 /*return*/];
|
|
2687
2687
|
}
|
|
2688
2688
|
});
|
|
@@ -2691,11 +2691,11 @@
|
|
|
2691
2691
|
function login(db, hints) {
|
|
2692
2692
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2693
2693
|
var currentUser, context;
|
|
2694
|
-
return __generator$1(this, function (
|
|
2695
|
-
switch (
|
|
2694
|
+
return __generator$1(this, function (_k) {
|
|
2695
|
+
switch (_k.label) {
|
|
2696
2696
|
case 0: return [4 /*yield*/, db.getCurrentUser()];
|
|
2697
2697
|
case 1:
|
|
2698
|
-
currentUser =
|
|
2698
|
+
currentUser = _k.sent();
|
|
2699
2699
|
if (currentUser.isLoggedIn) {
|
|
2700
2700
|
if (hints) {
|
|
2701
2701
|
if (hints.email && db.cloud.currentUser.value.email !== hints.email) {
|
|
@@ -2714,13 +2714,13 @@
|
|
|
2714
2714
|
});
|
|
2715
2715
|
return [4 /*yield*/, authenticate(db.cloud.options.databaseUrl, context, db.cloud.options.fetchTokens || otpFetchTokenCallback(db), db.cloud.userInteraction, hints)];
|
|
2716
2716
|
case 2:
|
|
2717
|
-
|
|
2717
|
+
_k.sent();
|
|
2718
2718
|
return [4 /*yield*/, context.save()];
|
|
2719
2719
|
case 3:
|
|
2720
|
-
|
|
2720
|
+
_k.sent();
|
|
2721
2721
|
return [4 /*yield*/, setCurrentUser(db, context)];
|
|
2722
2722
|
case 4:
|
|
2723
|
-
|
|
2723
|
+
_k.sent();
|
|
2724
2724
|
// Make sure to resync as the new login will be authorized
|
|
2725
2725
|
// for new realms.
|
|
2726
2726
|
triggerSync(db, "pull");
|
|
@@ -2838,18 +2838,18 @@
|
|
|
2838
2838
|
};
|
|
2839
2839
|
return BroadcastedAndLocalEvent;
|
|
2840
2840
|
}(rxjs.Observable));
|
|
2841
|
-
function computeRealmSetHash(
|
|
2842
|
-
var realms =
|
|
2841
|
+
function computeRealmSetHash(_k) {
|
|
2842
|
+
var realms = _k.realms, inviteRealms = _k.inviteRealms;
|
|
2843
2843
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2844
2844
|
var data, byteArray, digestBytes, base64;
|
|
2845
|
-
return __generator$1(this, function (
|
|
2846
|
-
switch (
|
|
2845
|
+
return __generator$1(this, function (_k) {
|
|
2846
|
+
switch (_k.label) {
|
|
2847
2847
|
case 0:
|
|
2848
2848
|
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; }));
|
|
2849
2849
|
byteArray = new TextEncoder().encode(data);
|
|
2850
2850
|
return [4 /*yield*/, crypto.subtle.digest('SHA-1', byteArray)];
|
|
2851
2851
|
case 1:
|
|
2852
|
-
digestBytes =
|
|
2852
|
+
digestBytes = _k.sent();
|
|
2853
2853
|
base64 = b64encode(digestBytes);
|
|
2854
2854
|
return [2 /*return*/, base64];
|
|
2855
2855
|
}
|
|
@@ -2858,14 +2858,14 @@
|
|
|
2858
2858
|
}
|
|
2859
2859
|
function getSyncableTables(db) {
|
|
2860
2860
|
return Object.entries(db.cloud.schema || {})
|
|
2861
|
-
.filter(function (
|
|
2862
|
-
var markedForSync =
|
|
2861
|
+
.filter(function (_k) {
|
|
2862
|
+
var markedForSync = _k[1].markedForSync;
|
|
2863
2863
|
return markedForSync;
|
|
2864
2864
|
})
|
|
2865
|
-
.map(function (
|
|
2866
|
-
var tbl =
|
|
2867
|
-
return db.tables.filter(function (
|
|
2868
|
-
var name =
|
|
2865
|
+
.map(function (_k) {
|
|
2866
|
+
var tbl = _k[0];
|
|
2867
|
+
return db.tables.filter(function (_k) {
|
|
2868
|
+
var name = _k.name;
|
|
2869
2869
|
return name === tbl;
|
|
2870
2870
|
})[0];
|
|
2871
2871
|
})
|
|
@@ -2885,17 +2885,17 @@
|
|
|
2885
2885
|
function flatten(a) {
|
|
2886
2886
|
return concat.apply([], a);
|
|
2887
2887
|
}
|
|
2888
|
-
function listClientChanges(mutationTables, db,
|
|
2889
|
-
var
|
|
2888
|
+
function listClientChanges(mutationTables, db, _k) {
|
|
2889
|
+
var _l = _k === void 0 ? {} : _k, _m = _l.since, since = _m === void 0 ? {} : _m, _o = _l.limit, limit = _o === void 0 ? Infinity : _o;
|
|
2890
2890
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2891
|
-
var allMutsOnTables, sorted, result, currentEntry, currentTxid,
|
|
2891
|
+
var allMutsOnTables, sorted, result, currentEntry, currentTxid, _k, sorted_1, _l, table, mut;
|
|
2892
2892
|
var _this_1 = this;
|
|
2893
|
-
return __generator$1(this, function (
|
|
2894
|
-
switch (
|
|
2893
|
+
return __generator$1(this, function (_m) {
|
|
2894
|
+
switch (_m.label) {
|
|
2895
2895
|
case 0: return [4 /*yield*/, Promise.all(mutationTables.map(function (mutationTable) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
2896
2896
|
var tableName, lastRevision, query, muts;
|
|
2897
|
-
return __generator$1(this, function (
|
|
2898
|
-
switch (
|
|
2897
|
+
return __generator$1(this, function (_k) {
|
|
2898
|
+
switch (_k.label) {
|
|
2899
2899
|
case 0:
|
|
2900
2900
|
tableName = getTableFromMutationTable(mutationTable.name);
|
|
2901
2901
|
lastRevision = since[tableName];
|
|
@@ -2906,7 +2906,7 @@
|
|
|
2906
2906
|
query = query.limit(limit);
|
|
2907
2907
|
return [4 /*yield*/, query.toArray()];
|
|
2908
2908
|
case 1:
|
|
2909
|
-
muts =
|
|
2909
|
+
muts = _k.sent();
|
|
2910
2910
|
//const objTable = db.table(tableName);
|
|
2911
2911
|
/*for (const mut of muts) {
|
|
2912
2912
|
if (mut.type === "insert" || mut.type === "upsert") {
|
|
@@ -2921,13 +2921,13 @@
|
|
|
2921
2921
|
});
|
|
2922
2922
|
}); }))];
|
|
2923
2923
|
case 1:
|
|
2924
|
-
allMutsOnTables =
|
|
2924
|
+
allMutsOnTables = _m.sent();
|
|
2925
2925
|
sorted = flatten(allMutsOnTables).sort(function (a, b) { return a.mut.ts - b.mut.ts; });
|
|
2926
2926
|
result = [];
|
|
2927
2927
|
currentEntry = null;
|
|
2928
2928
|
currentTxid = null;
|
|
2929
|
-
for (
|
|
2930
|
-
|
|
2929
|
+
for (_k = 0, sorted_1 = sorted; _k < sorted_1.length; _k++) {
|
|
2930
|
+
_l = sorted_1[_k], table = _l.table, mut = _l.mut;
|
|
2931
2931
|
if (currentEntry &&
|
|
2932
2932
|
currentEntry.table === table &&
|
|
2933
2933
|
currentTxid === mut.txid) {
|
|
@@ -2957,8 +2957,8 @@
|
|
|
2957
2957
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
2958
2958
|
var txid, ignoredRealms_1, upserts;
|
|
2959
2959
|
var _this_1 = this;
|
|
2960
|
-
return __generator$1(this, function (
|
|
2961
|
-
switch (
|
|
2960
|
+
return __generator$1(this, function (_k) {
|
|
2961
|
+
switch (_k.label) {
|
|
2962
2962
|
case 0:
|
|
2963
2963
|
txid = "upload-".concat(randomString(8));
|
|
2964
2964
|
if (!currentUser.isLoggedIn) return [3 /*break*/, 2];
|
|
@@ -2966,8 +2966,8 @@
|
|
|
2966
2966
|
ignoredRealms_1 = new Set(alreadySyncedRealms || []);
|
|
2967
2967
|
return [4 /*yield*/, Promise.all(tablesToSyncify.map(function (table) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
2968
2968
|
var extractKey, dexieCloudTableSchema, query, unsyncedObjects, mut;
|
|
2969
|
-
return __generator$1(this, function (
|
|
2970
|
-
switch (
|
|
2969
|
+
return __generator$1(this, function (_k) {
|
|
2970
|
+
switch (_k.label) {
|
|
2971
2971
|
case 0:
|
|
2972
2972
|
extractKey = table.core.schema.primaryKey.extractKey;
|
|
2973
2973
|
if (!extractKey)
|
|
@@ -2988,7 +2988,7 @@
|
|
|
2988
2988
|
});
|
|
2989
2989
|
return [4 /*yield*/, query.toArray()];
|
|
2990
2990
|
case 1:
|
|
2991
|
-
unsyncedObjects =
|
|
2991
|
+
unsyncedObjects = _k.sent();
|
|
2992
2992
|
if (unsyncedObjects.length > 0) {
|
|
2993
2993
|
mut = {
|
|
2994
2994
|
type: 'upsert',
|
|
@@ -3012,7 +3012,7 @@
|
|
|
3012
3012
|
});
|
|
3013
3013
|
}); }))];
|
|
3014
3014
|
case 1:
|
|
3015
|
-
upserts =
|
|
3015
|
+
upserts = _k.sent();
|
|
3016
3016
|
return [2 /*return*/, upserts.filter(function (op) { return op.muts.length > 0; })];
|
|
3017
3017
|
case 2: return [2 /*return*/, []];
|
|
3018
3018
|
}
|
|
@@ -3041,12 +3041,12 @@
|
|
|
3041
3041
|
if (!dollarKeys)
|
|
3042
3042
|
return value;
|
|
3043
3043
|
var clone = __assign({}, value);
|
|
3044
|
-
for (var
|
|
3045
|
-
var k_1 = dollarKeys_1[
|
|
3044
|
+
for (var _k = 0, dollarKeys_1 = dollarKeys; _k < dollarKeys_1.length; _k++) {
|
|
3045
|
+
var k_1 = dollarKeys_1[_k];
|
|
3046
3046
|
delete clone[k_1];
|
|
3047
3047
|
}
|
|
3048
|
-
for (var
|
|
3049
|
-
var k_2 = dollarKeys_2[
|
|
3048
|
+
for (var _l = 0, dollarKeys_2 = dollarKeys; _l < dollarKeys_2.length; _l++) {
|
|
3049
|
+
var k_2 = dollarKeys_2[_l];
|
|
3050
3050
|
clone["$" + k_2] = value[k_2];
|
|
3051
3051
|
}
|
|
3052
3052
|
return clone;
|
|
@@ -3056,8 +3056,8 @@
|
|
|
3056
3056
|
};
|
|
3057
3057
|
function TypesonSimplified() {
|
|
3058
3058
|
var typeDefsInputs = [];
|
|
3059
|
-
for (var
|
|
3060
|
-
typeDefsInputs[
|
|
3059
|
+
for (var _k = 0; _k < arguments.length; _k++) {
|
|
3060
|
+
typeDefsInputs[_k] = arguments[_k];
|
|
3061
3061
|
}
|
|
3062
3062
|
var typeDefs = typeDefsInputs.reduce(function (p, c) { return (__assign(__assign({}, p), c)); }, typeDefsInputs.reduce(function (p, c) { return (__assign(__assign({}, c), p)); }, {}));
|
|
3063
3063
|
var protoMap = new WeakMap();
|
|
@@ -3091,13 +3091,13 @@
|
|
|
3091
3091
|
// Unescape dollar props
|
|
3092
3092
|
value = __assign({}, value);
|
|
3093
3093
|
// Delete keys that children wanted us to delete
|
|
3094
|
-
for (var
|
|
3095
|
-
var k_3 = _k
|
|
3094
|
+
for (var _k = 0, _l = top[1]; _k < _l.length; _k++) {
|
|
3095
|
+
var k_3 = _l[_k];
|
|
3096
3096
|
delete value[k_3];
|
|
3097
3097
|
}
|
|
3098
3098
|
// Set keys that children wanted us to set
|
|
3099
|
-
for (var
|
|
3100
|
-
var
|
|
3099
|
+
for (var _m = 0, _o = Object.entries(top[2]); _m < _o.length; _m++) {
|
|
3100
|
+
var _p = _o[_m], k_4 = _p[0], v_1 = _p[1];
|
|
3101
3101
|
value[k_4] = v_1;
|
|
3102
3102
|
}
|
|
3103
3103
|
stack.pop();
|
|
@@ -3145,8 +3145,8 @@
|
|
|
3145
3145
|
if (typeDef !== undefined)
|
|
3146
3146
|
return typeDef; // Null counts to! So the caching of Array.prototype also counts.
|
|
3147
3147
|
var toStringTag_1 = getToStringTag(realVal);
|
|
3148
|
-
var entry = Object.entries(typeDefs).find(function (
|
|
3149
|
-
var typeName =
|
|
3148
|
+
var entry = Object.entries(typeDefs).find(function (_k) {
|
|
3149
|
+
var typeName = _k[0], typeDef = _k[1];
|
|
3150
3150
|
var _a, _b;
|
|
3151
3151
|
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;
|
|
3152
3152
|
});
|
|
@@ -3178,8 +3178,8 @@
|
|
|
3178
3178
|
i: i,
|
|
3179
3179
|
};
|
|
3180
3180
|
},
|
|
3181
|
-
revive: function (
|
|
3182
|
-
var i =
|
|
3181
|
+
revive: function (_k, altChannel) {
|
|
3182
|
+
var i = _k.i, mimeType = _k.mimeType;
|
|
3183
3183
|
return new Blob([altChannel[i]], { type: mimeType });
|
|
3184
3184
|
},
|
|
3185
3185
|
},
|
|
@@ -3198,8 +3198,8 @@
|
|
|
3198
3198
|
return num;
|
|
3199
3199
|
}
|
|
3200
3200
|
},
|
|
3201
|
-
revive: function (
|
|
3202
|
-
var v =
|
|
3201
|
+
revive: function (_k) {
|
|
3202
|
+
var v = _k.v;
|
|
3203
3203
|
return Number(v);
|
|
3204
3204
|
},
|
|
3205
3205
|
},
|
|
@@ -3218,8 +3218,8 @@
|
|
|
3218
3218
|
$t: "Date",
|
|
3219
3219
|
v: isNaN(date.getTime()) ? "NaN" : date.toISOString(),
|
|
3220
3220
|
}); },
|
|
3221
|
-
revive: function (
|
|
3222
|
-
var v =
|
|
3221
|
+
revive: function (_k) {
|
|
3222
|
+
var v = _k.v;
|
|
3223
3223
|
return new Date(v === "NaN" ? NaN : Date.parse(v));
|
|
3224
3224
|
},
|
|
3225
3225
|
},
|
|
@@ -3230,8 +3230,8 @@
|
|
|
3230
3230
|
$t: "Set",
|
|
3231
3231
|
v: Array.from(set.entries()),
|
|
3232
3232
|
}); },
|
|
3233
|
-
revive: function (
|
|
3234
|
-
var v =
|
|
3233
|
+
revive: function (_k) {
|
|
3234
|
+
var v = _k.v;
|
|
3235
3235
|
return new Set(v);
|
|
3236
3236
|
},
|
|
3237
3237
|
},
|
|
@@ -3242,8 +3242,8 @@
|
|
|
3242
3242
|
$t: "Map",
|
|
3243
3243
|
v: Array.from(map.entries()),
|
|
3244
3244
|
}); },
|
|
3245
|
-
revive: function (
|
|
3246
|
-
var v =
|
|
3245
|
+
revive: function (_k) {
|
|
3246
|
+
var v = _k.v;
|
|
3247
3247
|
return new Map(v);
|
|
3248
3248
|
},
|
|
3249
3249
|
},
|
|
@@ -3269,8 +3269,8 @@
|
|
|
3269
3269
|
"BigInt64Array",
|
|
3270
3270
|
"BigUint64Array",
|
|
3271
3271
|
].reduce(function (specs, typeName) {
|
|
3272
|
-
var
|
|
3273
|
-
return (__assign(__assign({}, specs), (
|
|
3272
|
+
var _k;
|
|
3273
|
+
return (__assign(__assign({}, specs), (_k = {}, _k[typeName] = {
|
|
3274
3274
|
// Replace passes the the typed array into $t, buffer so that
|
|
3275
3275
|
// the ArrayBuffer typedef takes care of further handling of the buffer:
|
|
3276
3276
|
// {$t:"Uint8Array",buffer:{$t:"ArrayBuffer",idx:0}}
|
|
@@ -3285,13 +3285,13 @@
|
|
|
3285
3285
|
};
|
|
3286
3286
|
return result;
|
|
3287
3287
|
},
|
|
3288
|
-
revive: function (
|
|
3289
|
-
var v =
|
|
3288
|
+
revive: function (_k, _, typeDefs) {
|
|
3289
|
+
var v = _k.v;
|
|
3290
3290
|
var TypedArray = _global[typeName];
|
|
3291
3291
|
return (TypedArray &&
|
|
3292
3292
|
new TypedArray(typeDefs.ArrayBuffer.revive({ v: v }, _, typeDefs)));
|
|
3293
3293
|
},
|
|
3294
|
-
},
|
|
3294
|
+
}, _k)));
|
|
3295
3295
|
}, {});
|
|
3296
3296
|
function b64LexEncode(b) {
|
|
3297
3297
|
return b64ToLex(b64encode(b));
|
|
@@ -3385,8 +3385,8 @@
|
|
|
3385
3385
|
"|": "/",
|
|
3386
3386
|
};
|
|
3387
3387
|
var ENCODE_TABLE = {};
|
|
3388
|
-
for (var
|
|
3389
|
-
var c_1 = _k
|
|
3388
|
+
for (var _k = 0, _l = Object.keys(DECODE_TABLE); _k < _l.length; _k++) {
|
|
3389
|
+
var c_1 = _l[_k];
|
|
3390
3390
|
ENCODE_TABLE[DECODE_TABLE[c_1]] = c_1;
|
|
3391
3391
|
}
|
|
3392
3392
|
var ArrayBufferDef = {
|
|
@@ -3395,8 +3395,8 @@
|
|
|
3395
3395
|
$t: "ArrayBuffer",
|
|
3396
3396
|
v: b64LexEncode(ab),
|
|
3397
3397
|
}); },
|
|
3398
|
-
revive: function (
|
|
3399
|
-
var v =
|
|
3398
|
+
revive: function (_k) {
|
|
3399
|
+
var v = _k.v;
|
|
3400
3400
|
var ba = b64LexDecode(v);
|
|
3401
3401
|
return ba.buffer.byteLength === ba.byteLength
|
|
3402
3402
|
? ba.buffer
|
|
@@ -3438,8 +3438,8 @@
|
|
|
3438
3438
|
: b64encode(string2ArrayBuffer(readBlobSync(blob))),
|
|
3439
3439
|
type: blob.type,
|
|
3440
3440
|
}); },
|
|
3441
|
-
revive: function (
|
|
3442
|
-
var type =
|
|
3441
|
+
revive: function (_k) {
|
|
3442
|
+
var type = _k.type, v = _k.v;
|
|
3443
3443
|
var ab = b64decode(v);
|
|
3444
3444
|
return typeof Blob !== undefined
|
|
3445
3445
|
? new Blob([ab])
|
|
@@ -3450,13 +3450,13 @@
|
|
|
3450
3450
|
var builtin = __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, numberDef), bigIntDef), DateDef), SetDef), MapDef), TypedArraysDefs), ArrayBufferDef), BlobDef);
|
|
3451
3451
|
function Bison() {
|
|
3452
3452
|
var typeDefsInputs = [];
|
|
3453
|
-
for (var
|
|
3454
|
-
typeDefsInputs[
|
|
3453
|
+
for (var _k = 0; _k < arguments.length; _k++) {
|
|
3454
|
+
typeDefsInputs[_k] = arguments[_k];
|
|
3455
3455
|
}
|
|
3456
3456
|
var tson = TypesonSimplified.apply(void 0, __spreadArray$1([builtin, BisonBinaryTypes], typeDefsInputs, false));
|
|
3457
3457
|
return {
|
|
3458
3458
|
toBinary: function (value) {
|
|
3459
|
-
var
|
|
3459
|
+
var _k = this.stringify(value), blob = _k[0], json = _k[1];
|
|
3460
3460
|
var lenBuf = new ArrayBuffer(4);
|
|
3461
3461
|
new DataView(lenBuf).setUint32(0, blob.size);
|
|
3462
3462
|
return new Blob([lenBuf, blob, json]);
|
|
@@ -3474,14 +3474,14 @@
|
|
|
3474
3474
|
parse: function (json, binData) {
|
|
3475
3475
|
return __awaiter$2(this, void 0, void 0, function () {
|
|
3476
3476
|
var pos, arrayBuffers, buf, view, len, ab;
|
|
3477
|
-
return __generator$1(this, function (
|
|
3478
|
-
switch (
|
|
3477
|
+
return __generator$1(this, function (_k) {
|
|
3478
|
+
switch (_k.label) {
|
|
3479
3479
|
case 0:
|
|
3480
3480
|
pos = 0;
|
|
3481
3481
|
arrayBuffers = [];
|
|
3482
3482
|
return [4 /*yield*/, readBlobBinary(binData)];
|
|
3483
3483
|
case 1:
|
|
3484
|
-
buf =
|
|
3484
|
+
buf = _k.sent();
|
|
3485
3485
|
view = new DataView(buf);
|
|
3486
3486
|
while (pos < buf.byteLength) {
|
|
3487
3487
|
len = view.getUint32(pos);
|
|
@@ -3497,20 +3497,20 @@
|
|
|
3497
3497
|
},
|
|
3498
3498
|
fromBinary: function (blob) {
|
|
3499
3499
|
return __awaiter$2(this, void 0, void 0, function () {
|
|
3500
|
-
var len,
|
|
3501
|
-
return __generator$1(this, function (
|
|
3502
|
-
switch (
|
|
3500
|
+
var len, _k, binData, json;
|
|
3501
|
+
return __generator$1(this, function (_l) {
|
|
3502
|
+
switch (_l.label) {
|
|
3503
3503
|
case 0:
|
|
3504
|
-
|
|
3504
|
+
_k = DataView.bind;
|
|
3505
3505
|
return [4 /*yield*/, readBlobBinary(blob.slice(0, 4))];
|
|
3506
3506
|
case 1:
|
|
3507
|
-
len = new (
|
|
3507
|
+
len = new (_k.apply(DataView, [void 0, _l.sent()]))().getUint32(0);
|
|
3508
3508
|
binData = blob.slice(4, len + 4);
|
|
3509
3509
|
return [4 /*yield*/, readBlob(blob.slice(len + 4))];
|
|
3510
3510
|
case 2:
|
|
3511
|
-
json =
|
|
3511
|
+
json = _l.sent();
|
|
3512
3512
|
return [4 /*yield*/, this.parse(json, binData)];
|
|
3513
|
-
case 3: return [2 /*return*/,
|
|
3513
|
+
case 3: return [2 /*return*/, _l.sent()];
|
|
3514
3514
|
}
|
|
3515
3515
|
});
|
|
3516
3516
|
});
|
|
@@ -3584,8 +3584,8 @@
|
|
|
3584
3584
|
replace: function (fakeBigInt) {
|
|
3585
3585
|
return Object.assign({ $t: 'bigint' }, fakeBigInt);
|
|
3586
3586
|
},
|
|
3587
|
-
revive: function (
|
|
3588
|
-
var v =
|
|
3587
|
+
revive: function (_k) {
|
|
3588
|
+
var v = _k.v;
|
|
3589
3589
|
return new FakeBigInt(v);
|
|
3590
3590
|
}
|
|
3591
3591
|
}
|
|
@@ -3633,8 +3633,8 @@
|
|
|
3633
3633
|
});
|
|
3634
3634
|
rv.push(changeClone);
|
|
3635
3635
|
};
|
|
3636
|
-
for (var
|
|
3637
|
-
var change = changes_1[
|
|
3636
|
+
for (var _k = 0, changes_1 = changes; _k < changes_1.length; _k++) {
|
|
3637
|
+
var change = changes_1[_k];
|
|
3638
3638
|
_loop_2(change);
|
|
3639
3639
|
}
|
|
3640
3640
|
return rv;
|
|
@@ -3648,9 +3648,9 @@
|
|
|
3648
3648
|
//import {BisonWebStreamReader} from "dreambase-library/dist/typeson-simplified/BisonWebStreamReader";
|
|
3649
3649
|
function syncWithServer(changes, syncState, baseRevs, db, databaseUrl, schema, clientIdentity, currentUser) {
|
|
3650
3650
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
3651
|
-
var headers, accessToken, syncRequest, res,
|
|
3652
|
-
return __generator$1(this, function (
|
|
3653
|
-
switch (
|
|
3651
|
+
var headers, accessToken, syncRequest, res, _k, _l, _m, text, syncRes;
|
|
3652
|
+
return __generator$1(this, function (_o) {
|
|
3653
|
+
switch (_o.label) {
|
|
3654
3654
|
case 0:
|
|
3655
3655
|
headers = {
|
|
3656
3656
|
Accept: 'application/json, application/x-bison, application/x-bison-stream',
|
|
@@ -3658,7 +3658,7 @@
|
|
|
3658
3658
|
};
|
|
3659
3659
|
return [4 /*yield*/, loadAccessToken(db)];
|
|
3660
3660
|
case 1:
|
|
3661
|
-
accessToken =
|
|
3661
|
+
accessToken = _o.sent();
|
|
3662
3662
|
if (accessToken) {
|
|
3663
3663
|
headers.Authorization = "Bearer ".concat(accessToken);
|
|
3664
3664
|
}
|
|
@@ -3685,7 +3685,7 @@
|
|
|
3685
3685
|
body: TSON.stringify(syncRequest)
|
|
3686
3686
|
})];
|
|
3687
3687
|
case 2:
|
|
3688
|
-
res =
|
|
3688
|
+
res = _o.sent();
|
|
3689
3689
|
//const contentLength = Number(res.headers.get('content-length'));
|
|
3690
3690
|
db.syncStateChangedEvent.next({
|
|
3691
3691
|
phase: 'pulling'
|
|
@@ -3693,20 +3693,20 @@
|
|
|
3693
3693
|
if (!res.ok) {
|
|
3694
3694
|
throw new HttpError(res);
|
|
3695
3695
|
}
|
|
3696
|
-
|
|
3697
|
-
switch (
|
|
3696
|
+
_k = res.headers.get('content-type');
|
|
3697
|
+
switch (_k) {
|
|
3698
3698
|
case 'application/x-bison': return [3 /*break*/, 3];
|
|
3699
3699
|
case 'application/x-bison-stream': return [3 /*break*/, 5];
|
|
3700
3700
|
case 'application/json': return [3 /*break*/, 5];
|
|
3701
3701
|
}
|
|
3702
3702
|
return [3 /*break*/, 5];
|
|
3703
3703
|
case 3:
|
|
3704
|
-
|
|
3704
|
+
_m = (_l = BISON).fromBinary;
|
|
3705
3705
|
return [4 /*yield*/, res.blob()];
|
|
3706
|
-
case 4: return [2 /*return*/,
|
|
3706
|
+
case 4: return [2 /*return*/, _m.apply(_l, [_o.sent()])];
|
|
3707
3707
|
case 5: return [4 /*yield*/, res.text()];
|
|
3708
3708
|
case 6:
|
|
3709
|
-
text =
|
|
3709
|
+
text = _o.sent();
|
|
3710
3710
|
syncRes = TSON.parse(text);
|
|
3711
3711
|
return [2 /*return*/, syncRes];
|
|
3712
3712
|
}
|
|
@@ -3715,16 +3715,16 @@
|
|
|
3715
3715
|
}
|
|
3716
3716
|
function modifyLocalObjectsWithNewUserId(syncifiedTables, currentUser, alreadySyncedRealms) {
|
|
3717
3717
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
3718
|
-
var ignoredRealms,
|
|
3719
|
-
return __generator$1(this, function (
|
|
3720
|
-
switch (
|
|
3718
|
+
var ignoredRealms, _k, syncifiedTables_1, table;
|
|
3719
|
+
return __generator$1(this, function (_l) {
|
|
3720
|
+
switch (_l.label) {
|
|
3721
3721
|
case 0:
|
|
3722
3722
|
ignoredRealms = new Set(alreadySyncedRealms || []);
|
|
3723
|
-
|
|
3724
|
-
|
|
3723
|
+
_k = 0, syncifiedTables_1 = syncifiedTables;
|
|
3724
|
+
_l.label = 1;
|
|
3725
3725
|
case 1:
|
|
3726
|
-
if (!(
|
|
3727
|
-
table = syncifiedTables_1[
|
|
3726
|
+
if (!(_k < syncifiedTables_1.length)) return [3 /*break*/, 9];
|
|
3727
|
+
table = syncifiedTables_1[_k];
|
|
3728
3728
|
if (!(table.name === "members")) return [3 /*break*/, 3];
|
|
3729
3729
|
// members
|
|
3730
3730
|
return [4 /*yield*/, table.toCollection().modify(function (member) {
|
|
@@ -3734,7 +3734,7 @@
|
|
|
3734
3734
|
})];
|
|
3735
3735
|
case 2:
|
|
3736
3736
|
// members
|
|
3737
|
-
|
|
3737
|
+
_l.sent();
|
|
3738
3738
|
return [3 /*break*/, 8];
|
|
3739
3739
|
case 3:
|
|
3740
3740
|
if (!(table.name === "roles")) return [3 /*break*/, 4];
|
|
@@ -3749,7 +3749,7 @@
|
|
|
3749
3749
|
})];
|
|
3750
3750
|
case 5:
|
|
3751
3751
|
// realms
|
|
3752
|
-
|
|
3752
|
+
_l.sent();
|
|
3753
3753
|
return [3 /*break*/, 8];
|
|
3754
3754
|
case 6:
|
|
3755
3755
|
// application entities
|
|
@@ -3764,10 +3764,10 @@
|
|
|
3764
3764
|
})];
|
|
3765
3765
|
case 7:
|
|
3766
3766
|
// application entities
|
|
3767
|
-
|
|
3768
|
-
|
|
3767
|
+
_l.sent();
|
|
3768
|
+
_l.label = 8;
|
|
3769
3769
|
case 8:
|
|
3770
|
-
|
|
3770
|
+
_k++;
|
|
3771
3771
|
return [3 /*break*/, 1];
|
|
3772
3772
|
case 9: return [2 /*return*/];
|
|
3773
3773
|
}
|
|
@@ -3787,8 +3787,8 @@
|
|
|
3787
3787
|
self.addEventListener('offline', function () { return isOnline = false; });
|
|
3788
3788
|
function updateBaseRevs(db, schema, latestRevisions, serverRev) {
|
|
3789
3789
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
3790
|
-
return __generator$1(this, function (
|
|
3791
|
-
switch (
|
|
3790
|
+
return __generator$1(this, function (_k) {
|
|
3791
|
+
switch (_k.label) {
|
|
3792
3792
|
case 0: return [4 /*yield*/, db.$baseRevs.bulkPut(Object.keys(schema)
|
|
3793
3793
|
.filter(function (table) { return schema[table].markedForSync; })
|
|
3794
3794
|
.map(function (tableName) {
|
|
@@ -3800,7 +3800,7 @@
|
|
|
3800
3800
|
};
|
|
3801
3801
|
}))];
|
|
3802
3802
|
case 1:
|
|
3803
|
-
|
|
3803
|
+
_k.sent();
|
|
3804
3804
|
return [2 /*return*/];
|
|
3805
3805
|
}
|
|
3806
3806
|
});
|
|
@@ -3808,8 +3808,8 @@
|
|
|
3808
3808
|
}
|
|
3809
3809
|
function getLatestRevisionsPerTable(clientChangeSet, lastRevisions) {
|
|
3810
3810
|
if (lastRevisions === void 0) { lastRevisions = {}; }
|
|
3811
|
-
for (var
|
|
3812
|
-
var
|
|
3811
|
+
for (var _k = 0, clientChangeSet_1 = clientChangeSet; _k < clientChangeSet_1.length; _k++) {
|
|
3812
|
+
var _l = clientChangeSet_1[_k], table = _l.table, muts = _l.muts;
|
|
3813
3813
|
var lastRev = muts.length > 0 ? muts[muts.length - 1].rev : null;
|
|
3814
3814
|
lastRevisions[table] = lastRev || lastRevisions[table] || 0;
|
|
3815
3815
|
}
|
|
@@ -3818,18 +3818,18 @@
|
|
|
3818
3818
|
function bulkUpdate(table, keys, changeSpecs) {
|
|
3819
3819
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
3820
3820
|
var objs, resultKeys, resultObjs;
|
|
3821
|
-
return __generator$1(this, function (
|
|
3822
|
-
switch (
|
|
3821
|
+
return __generator$1(this, function (_k) {
|
|
3822
|
+
switch (_k.label) {
|
|
3823
3823
|
case 0: return [4 /*yield*/, table.bulkGet(keys)];
|
|
3824
3824
|
case 1:
|
|
3825
|
-
objs =
|
|
3825
|
+
objs = _k.sent();
|
|
3826
3826
|
resultKeys = [];
|
|
3827
3827
|
resultObjs = [];
|
|
3828
3828
|
keys.forEach(function (key, idx) {
|
|
3829
3829
|
var obj = objs[idx];
|
|
3830
3830
|
if (obj) {
|
|
3831
|
-
for (var
|
|
3832
|
-
var
|
|
3831
|
+
for (var _k = 0, _l = Object.entries(changeSpecs[idx]); _k < _l.length; _k++) {
|
|
3832
|
+
var _m = _l[_k], keyPath = _m[0], value = _m[1];
|
|
3833
3833
|
if (keyPath === table.schema.primKey.keyPath) {
|
|
3834
3834
|
if (Dexie.cmp(value, key) !== 0) {
|
|
3835
3835
|
throw new Error("Cannot change primary key");
|
|
@@ -3847,7 +3847,7 @@
|
|
|
3847
3847
|
? table.bulkPut(resultObjs, resultKeys)
|
|
3848
3848
|
: table.bulkPut(resultObjs))];
|
|
3849
3849
|
case 2:
|
|
3850
|
-
|
|
3850
|
+
_k.sent();
|
|
3851
3851
|
return [2 /*return*/];
|
|
3852
3852
|
}
|
|
3853
3853
|
});
|
|
@@ -3855,15 +3855,15 @@
|
|
|
3855
3855
|
}
|
|
3856
3856
|
function applyServerChanges(changes, db) {
|
|
3857
3857
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
3858
|
-
var _loop_3,
|
|
3859
|
-
return __generator$1(this, function (
|
|
3860
|
-
switch (
|
|
3858
|
+
var _loop_3, _k, changes_2, _l, tableName, muts;
|
|
3859
|
+
return __generator$1(this, function (_m) {
|
|
3860
|
+
switch (_m.label) {
|
|
3861
3861
|
case 0:
|
|
3862
3862
|
console.debug('Applying server changes', changes, Dexie__default["default"].currentTransaction);
|
|
3863
3863
|
_loop_3 = function (tableName, muts) {
|
|
3864
|
-
var table, primaryKey, keyDecoder, _loop_4,
|
|
3865
|
-
return __generator$1(this, function (
|
|
3866
|
-
switch (
|
|
3864
|
+
var table, primaryKey, keyDecoder, _loop_4, _o, muts_2, mut;
|
|
3865
|
+
return __generator$1(this, function (_p) {
|
|
3866
|
+
switch (_p.label) {
|
|
3867
3867
|
case 0:
|
|
3868
3868
|
table = db.table(tableName);
|
|
3869
3869
|
if (!table)
|
|
@@ -3891,13 +3891,13 @@
|
|
|
3891
3891
|
}
|
|
3892
3892
|
};
|
|
3893
3893
|
_loop_4 = function (mut) {
|
|
3894
|
-
var keys,
|
|
3895
|
-
return __generator$1(this, function (
|
|
3896
|
-
switch (
|
|
3894
|
+
var keys, _q;
|
|
3895
|
+
return __generator$1(this, function (_r) {
|
|
3896
|
+
switch (_r.label) {
|
|
3897
3897
|
case 0:
|
|
3898
3898
|
keys = mut.keys.map(keyDecoder);
|
|
3899
|
-
|
|
3900
|
-
switch (
|
|
3899
|
+
_q = mut.type;
|
|
3900
|
+
switch (_q) {
|
|
3901
3901
|
case 'insert': return [3 /*break*/, 1];
|
|
3902
3902
|
case 'upsert': return [3 /*break*/, 6];
|
|
3903
3903
|
case 'modify': return [3 /*break*/, 11];
|
|
@@ -3909,7 +3909,7 @@
|
|
|
3909
3909
|
if (!primaryKey.outbound) return [3 /*break*/, 3];
|
|
3910
3910
|
return [4 /*yield*/, table.bulkAdd(mut.values, keys)];
|
|
3911
3911
|
case 2:
|
|
3912
|
-
|
|
3912
|
+
_r.sent();
|
|
3913
3913
|
return [3 /*break*/, 5];
|
|
3914
3914
|
case 3:
|
|
3915
3915
|
keys.forEach(function (key, i) {
|
|
@@ -3918,14 +3918,14 @@
|
|
|
3918
3918
|
});
|
|
3919
3919
|
return [4 /*yield*/, table.bulkAdd(mut.values)];
|
|
3920
3920
|
case 4:
|
|
3921
|
-
|
|
3922
|
-
|
|
3921
|
+
_r.sent();
|
|
3922
|
+
_r.label = 5;
|
|
3923
3923
|
case 5: return [3 /*break*/, 20];
|
|
3924
3924
|
case 6:
|
|
3925
3925
|
if (!primaryKey.outbound) return [3 /*break*/, 8];
|
|
3926
3926
|
return [4 /*yield*/, table.bulkPut(mut.values, keys)];
|
|
3927
3927
|
case 7:
|
|
3928
|
-
|
|
3928
|
+
_r.sent();
|
|
3929
3929
|
return [3 /*break*/, 10];
|
|
3930
3930
|
case 8:
|
|
3931
3931
|
keys.forEach(function (key, i) {
|
|
@@ -3934,59 +3934,59 @@
|
|
|
3934
3934
|
});
|
|
3935
3935
|
return [4 /*yield*/, table.bulkPut(mut.values)];
|
|
3936
3936
|
case 9:
|
|
3937
|
-
|
|
3938
|
-
|
|
3937
|
+
_r.sent();
|
|
3938
|
+
_r.label = 10;
|
|
3939
3939
|
case 10: return [3 /*break*/, 20];
|
|
3940
3940
|
case 11:
|
|
3941
3941
|
if (!(keys.length === 1)) return [3 /*break*/, 13];
|
|
3942
3942
|
return [4 /*yield*/, table.update(keys[0], mut.changeSpec)];
|
|
3943
3943
|
case 12:
|
|
3944
|
-
|
|
3944
|
+
_r.sent();
|
|
3945
3945
|
return [3 /*break*/, 15];
|
|
3946
3946
|
case 13: return [4 /*yield*/, table.where(':id').anyOf(keys).modify(mut.changeSpec)];
|
|
3947
3947
|
case 14:
|
|
3948
|
-
|
|
3949
|
-
|
|
3948
|
+
_r.sent();
|
|
3949
|
+
_r.label = 15;
|
|
3950
3950
|
case 15: return [3 /*break*/, 20];
|
|
3951
3951
|
case 16: return [4 /*yield*/, bulkUpdate(table, keys, mut.changeSpecs)];
|
|
3952
3952
|
case 17:
|
|
3953
|
-
|
|
3953
|
+
_r.sent();
|
|
3954
3954
|
return [3 /*break*/, 20];
|
|
3955
3955
|
case 18: return [4 /*yield*/, table.bulkDelete(keys)];
|
|
3956
3956
|
case 19:
|
|
3957
|
-
|
|
3957
|
+
_r.sent();
|
|
3958
3958
|
return [3 /*break*/, 20];
|
|
3959
3959
|
case 20: return [2 /*return*/];
|
|
3960
3960
|
}
|
|
3961
3961
|
});
|
|
3962
3962
|
};
|
|
3963
|
-
|
|
3964
|
-
|
|
3963
|
+
_o = 0, muts_2 = muts;
|
|
3964
|
+
_p.label = 1;
|
|
3965
3965
|
case 1:
|
|
3966
|
-
if (!(
|
|
3967
|
-
mut = muts_2[
|
|
3966
|
+
if (!(_o < muts_2.length)) return [3 /*break*/, 4];
|
|
3967
|
+
mut = muts_2[_o];
|
|
3968
3968
|
return [5 /*yield**/, _loop_4(mut)];
|
|
3969
3969
|
case 2:
|
|
3970
|
-
|
|
3971
|
-
|
|
3970
|
+
_p.sent();
|
|
3971
|
+
_p.label = 3;
|
|
3972
3972
|
case 3:
|
|
3973
|
-
|
|
3973
|
+
_o++;
|
|
3974
3974
|
return [3 /*break*/, 1];
|
|
3975
3975
|
case 4: return [2 /*return*/];
|
|
3976
3976
|
}
|
|
3977
3977
|
});
|
|
3978
3978
|
};
|
|
3979
|
-
|
|
3980
|
-
|
|
3979
|
+
_k = 0, changes_2 = changes;
|
|
3980
|
+
_m.label = 1;
|
|
3981
3981
|
case 1:
|
|
3982
|
-
if (!(
|
|
3983
|
-
|
|
3982
|
+
if (!(_k < changes_2.length)) return [3 /*break*/, 4];
|
|
3983
|
+
_l = changes_2[_k], tableName = _l.table, muts = _l.muts;
|
|
3984
3984
|
return [5 /*yield**/, _loop_3(tableName, muts)];
|
|
3985
3985
|
case 2:
|
|
3986
|
-
|
|
3987
|
-
|
|
3986
|
+
_m.sent();
|
|
3987
|
+
_m.label = 3;
|
|
3988
3988
|
case 3:
|
|
3989
|
-
|
|
3989
|
+
_k++;
|
|
3990
3990
|
return [3 /*break*/, 1];
|
|
3991
3991
|
case 4: return [2 /*return*/];
|
|
3992
3992
|
}
|
|
@@ -4006,8 +4006,8 @@
|
|
|
4006
4006
|
}
|
|
4007
4007
|
})
|
|
4008
4008
|
.catch(function (error) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
4009
|
-
return __generator$1(this, function (
|
|
4010
|
-
switch (
|
|
4009
|
+
return __generator$1(this, function (_k) {
|
|
4010
|
+
switch (_k.label) {
|
|
4011
4011
|
case 0:
|
|
4012
4012
|
if (syncOptions === null || syncOptions === void 0 ? void 0 : syncOptions.justCheckIfNeeded)
|
|
4013
4013
|
return [2 /*return*/, Promise.reject(error)]; // Just rethrow.
|
|
@@ -4028,9 +4028,9 @@
|
|
|
4028
4028
|
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 500); })];
|
|
4029
4029
|
case 1:
|
|
4030
4030
|
// Retry again in 500 ms but if it fails again, don't retry.
|
|
4031
|
-
|
|
4031
|
+
_k.sent();
|
|
4032
4032
|
return [4 /*yield*/, sync(db, options, schema, Object.assign(Object.assign({}, syncOptions), { retryImmediatelyOnFetchError: false }))];
|
|
4033
|
-
case 2: return [2 /*return*/,
|
|
4033
|
+
case 2: return [2 /*return*/, _k.sent()];
|
|
4034
4034
|
case 3:
|
|
4035
4035
|
// Make sure that no matter whether sync() explodes or not,
|
|
4036
4036
|
// always update the timestamp. Also store the error.
|
|
@@ -4041,7 +4041,7 @@
|
|
|
4041
4041
|
case 4:
|
|
4042
4042
|
// Make sure that no matter whether sync() explodes or not,
|
|
4043
4043
|
// always update the timestamp. Also store the error.
|
|
4044
|
-
|
|
4044
|
+
_k.sent();
|
|
4045
4045
|
db.syncStateChangedEvent.next({
|
|
4046
4046
|
phase: isOnline ? 'error' : 'offline',
|
|
4047
4047
|
error: error,
|
|
@@ -4051,16 +4051,16 @@
|
|
|
4051
4051
|
});
|
|
4052
4052
|
}); });
|
|
4053
4053
|
}
|
|
4054
|
-
function _sync(db, options, schema,
|
|
4055
|
-
var
|
|
4054
|
+
function _sync(db, options, schema, _k) {
|
|
4055
|
+
var _l = _k === void 0 ? {
|
|
4056
4056
|
isInitialSync: false,
|
|
4057
|
-
} :
|
|
4057
|
+
} : _k, isInitialSync = _l.isInitialSync, cancelToken = _l.cancelToken, justCheckIfNeeded = _l.justCheckIfNeeded, purpose = _l.purpose;
|
|
4058
4058
|
var _a;
|
|
4059
4059
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
4060
|
-
var databaseUrl, currentUser, tablesToSync, mutationTables, persistedSyncState, tablesToSyncify, doSyncify,
|
|
4060
|
+
var databaseUrl, currentUser, tablesToSync, mutationTables, persistedSyncState, tablesToSyncify, doSyncify, _k, clientChangeSet, syncState, baseRevs, syncIsNeeded, latestRevisions, clientIdentity, res, done;
|
|
4061
4061
|
var _this_1 = this;
|
|
4062
|
-
return __generator$1(this, function (
|
|
4063
|
-
switch (
|
|
4062
|
+
return __generator$1(this, function (_l) {
|
|
4063
|
+
switch (_l.label) {
|
|
4064
4064
|
case 0:
|
|
4065
4065
|
if (!justCheckIfNeeded) {
|
|
4066
4066
|
console.debug('SYNC STARTED', { isInitialSync: isInitialSync, purpose: purpose });
|
|
@@ -4070,12 +4070,12 @@
|
|
|
4070
4070
|
databaseUrl = options.databaseUrl;
|
|
4071
4071
|
return [4 /*yield*/, db.getCurrentUser()];
|
|
4072
4072
|
case 1:
|
|
4073
|
-
currentUser =
|
|
4073
|
+
currentUser = _l.sent();
|
|
4074
4074
|
tablesToSync = currentUser.isLoggedIn ? getSyncableTables(db) : [];
|
|
4075
4075
|
mutationTables = tablesToSync.map(function (tbl) { return db.table(getMutationTable(tbl.name)); });
|
|
4076
4076
|
return [4 /*yield*/, db.getPersistedSyncState()];
|
|
4077
4077
|
case 2:
|
|
4078
|
-
persistedSyncState =
|
|
4078
|
+
persistedSyncState = _l.sent();
|
|
4079
4079
|
tablesToSyncify = !isInitialSync && currentUser.isLoggedIn
|
|
4080
4080
|
? getTablesToSyncify(db, persistedSyncState)
|
|
4081
4081
|
: [];
|
|
@@ -4086,8 +4086,8 @@
|
|
|
4086
4086
|
return [2 /*return*/, true];
|
|
4087
4087
|
//console.debug('sync doSyncify is true');
|
|
4088
4088
|
return [4 /*yield*/, db.transaction('rw', tablesToSyncify, function (tx) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
4089
|
-
return __generator$1(this, function (
|
|
4090
|
-
switch (
|
|
4089
|
+
return __generator$1(this, function (_k) {
|
|
4090
|
+
switch (_k.label) {
|
|
4091
4091
|
case 0:
|
|
4092
4092
|
// @ts-ignore
|
|
4093
4093
|
tx.idbtrans.disableChangeTracking = true;
|
|
@@ -4095,35 +4095,35 @@
|
|
|
4095
4095
|
tx.idbtrans.disableAccessControl = true; // TODO: Take care of this flag in access control middleware!
|
|
4096
4096
|
return [4 /*yield*/, modifyLocalObjectsWithNewUserId(tablesToSyncify, currentUser, persistedSyncState === null || persistedSyncState === void 0 ? void 0 : persistedSyncState.realms)];
|
|
4097
4097
|
case 1:
|
|
4098
|
-
|
|
4098
|
+
_k.sent();
|
|
4099
4099
|
return [2 /*return*/];
|
|
4100
4100
|
}
|
|
4101
4101
|
});
|
|
4102
4102
|
}); })];
|
|
4103
4103
|
case 3:
|
|
4104
4104
|
//console.debug('sync doSyncify is true');
|
|
4105
|
-
|
|
4105
|
+
_l.sent();
|
|
4106
4106
|
throwIfCancelled(cancelToken);
|
|
4107
|
-
|
|
4107
|
+
_l.label = 4;
|
|
4108
4108
|
case 4: return [4 /*yield*/, db.transaction('r', db.tables, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
4109
4109
|
var syncState, baseRevs, clientChanges, alreadySyncedRealms, syncificationInserts;
|
|
4110
|
-
return __generator$1(this, function (
|
|
4111
|
-
switch (
|
|
4110
|
+
return __generator$1(this, function (_k) {
|
|
4111
|
+
switch (_k.label) {
|
|
4112
4112
|
case 0: return [4 /*yield*/, db.getPersistedSyncState()];
|
|
4113
4113
|
case 1:
|
|
4114
|
-
syncState =
|
|
4114
|
+
syncState = _k.sent();
|
|
4115
4115
|
return [4 /*yield*/, db.$baseRevs.toArray()];
|
|
4116
4116
|
case 2:
|
|
4117
|
-
baseRevs =
|
|
4117
|
+
baseRevs = _k.sent();
|
|
4118
4118
|
return [4 /*yield*/, listClientChanges(mutationTables)];
|
|
4119
4119
|
case 3:
|
|
4120
|
-
clientChanges =
|
|
4120
|
+
clientChanges = _k.sent();
|
|
4121
4121
|
throwIfCancelled(cancelToken);
|
|
4122
4122
|
if (!doSyncify) return [3 /*break*/, 5];
|
|
4123
4123
|
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);
|
|
4124
4124
|
return [4 /*yield*/, listSyncifiedChanges(tablesToSyncify, currentUser, schema, alreadySyncedRealms)];
|
|
4125
4125
|
case 4:
|
|
4126
|
-
syncificationInserts =
|
|
4126
|
+
syncificationInserts = _k.sent();
|
|
4127
4127
|
throwIfCancelled(cancelToken);
|
|
4128
4128
|
clientChanges = clientChanges.concat(syncificationInserts);
|
|
4129
4129
|
return [2 /*return*/, [clientChanges, syncState, baseRevs]];
|
|
@@ -4132,7 +4132,7 @@
|
|
|
4132
4132
|
});
|
|
4133
4133
|
}); })];
|
|
4134
4134
|
case 5:
|
|
4135
|
-
|
|
4135
|
+
_k = _l.sent(), clientChangeSet = _k[0], syncState = _k[1], baseRevs = _k[2];
|
|
4136
4136
|
syncIsNeeded = clientChangeSet.some(function (set) { return set.muts.some(function (mut) { return mut.keys.length > 0; }); });
|
|
4137
4137
|
if (justCheckIfNeeded) {
|
|
4138
4138
|
console.debug('Sync is needed:', syncIsNeeded);
|
|
@@ -4150,12 +4150,12 @@
|
|
|
4150
4150
|
throwIfCancelled(cancelToken);
|
|
4151
4151
|
return [4 /*yield*/, syncWithServer(clientChangeSet, syncState, baseRevs, db, databaseUrl, schema, clientIdentity, currentUser)];
|
|
4152
4152
|
case 6:
|
|
4153
|
-
res =
|
|
4153
|
+
res = _l.sent();
|
|
4154
4154
|
console.debug('Sync response', res);
|
|
4155
4155
|
return [4 /*yield*/, db.transaction('rw', db.tables, function (tx) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
4156
|
-
var
|
|
4157
|
-
return __generator$1(this, function (
|
|
4158
|
-
switch (
|
|
4156
|
+
var _k, _l, tableName, addedClientChanges, _loop_5, _m, mutationTables_1, mutTable, syncState, newSyncState, filteredChanges;
|
|
4157
|
+
return __generator$1(this, function (_o) {
|
|
4158
|
+
switch (_o.label) {
|
|
4159
4159
|
case 0:
|
|
4160
4160
|
// @ts-ignore
|
|
4161
4161
|
tx.idbtrans.disableChangeTracking = true;
|
|
@@ -4163,8 +4163,8 @@
|
|
|
4163
4163
|
tx.idbtrans.disableAccessControl = true; // TODO: Take care of this flag in access control middleware!
|
|
4164
4164
|
// Update db.cloud.schema from server response.
|
|
4165
4165
|
// Local schema MAY include a subset of tables, so do not force all tables into local schema.
|
|
4166
|
-
for (
|
|
4167
|
-
tableName = _k
|
|
4166
|
+
for (_k = 0, _l = Object.keys(schema); _k < _l.length; _k++) {
|
|
4167
|
+
tableName = _l[_k];
|
|
4168
4168
|
if (res.schema[tableName]) {
|
|
4169
4169
|
// Write directly into configured schema. This code can only be executed alone.
|
|
4170
4170
|
schema[tableName] = res.schema[tableName];
|
|
@@ -4172,16 +4172,16 @@
|
|
|
4172
4172
|
}
|
|
4173
4173
|
return [4 /*yield*/, db.$syncState.put(schema, 'schema')];
|
|
4174
4174
|
case 1:
|
|
4175
|
-
|
|
4175
|
+
_o.sent();
|
|
4176
4176
|
return [4 /*yield*/, listClientChanges(mutationTables, db, {
|
|
4177
4177
|
since: latestRevisions,
|
|
4178
4178
|
})];
|
|
4179
4179
|
case 2:
|
|
4180
|
-
addedClientChanges =
|
|
4180
|
+
addedClientChanges = _o.sent();
|
|
4181
4181
|
_loop_5 = function (mutTable) {
|
|
4182
4182
|
var tableName, latestRev;
|
|
4183
|
-
return __generator$1(this, function (
|
|
4184
|
-
switch (
|
|
4183
|
+
return __generator$1(this, function (_p) {
|
|
4184
|
+
switch (_p.label) {
|
|
4185
4185
|
case 0:
|
|
4186
4186
|
tableName = getTableFromMutationTable(mutTable.name);
|
|
4187
4187
|
if (!!addedClientChanges.some(function (ch) { return ch.table === tableName && ch.muts.length > 0; })) return [3 /*break*/, 2];
|
|
@@ -4198,7 +4198,7 @@
|
|
|
4198
4198
|
// to the server.
|
|
4199
4199
|
// It is therefore safe to clear all changes (which is faster than
|
|
4200
4200
|
// deleting a range)
|
|
4201
|
-
|
|
4201
|
+
_p.sent();
|
|
4202
4202
|
return [3 /*break*/, 5];
|
|
4203
4203
|
case 2:
|
|
4204
4204
|
if (!latestRevisions[tableName]) return [3 /*break*/, 4];
|
|
@@ -4213,25 +4213,25 @@
|
|
|
4213
4213
|
.delete(),
|
|
4214
4214
|
])];
|
|
4215
4215
|
case 3:
|
|
4216
|
-
|
|
4216
|
+
_p.sent();
|
|
4217
4217
|
return [3 /*break*/, 5];
|
|
4218
4218
|
case 4:
|
|
4219
|
-
|
|
4219
|
+
_p.label = 5;
|
|
4220
4220
|
case 5: return [2 /*return*/];
|
|
4221
4221
|
}
|
|
4222
4222
|
});
|
|
4223
4223
|
};
|
|
4224
|
-
|
|
4225
|
-
|
|
4224
|
+
_m = 0, mutationTables_1 = mutationTables;
|
|
4225
|
+
_o.label = 3;
|
|
4226
4226
|
case 3:
|
|
4227
|
-
if (!(
|
|
4228
|
-
mutTable = mutationTables_1[
|
|
4227
|
+
if (!(_m < mutationTables_1.length)) return [3 /*break*/, 6];
|
|
4228
|
+
mutTable = mutationTables_1[_m];
|
|
4229
4229
|
return [5 /*yield**/, _loop_5(mutTable)];
|
|
4230
4230
|
case 4:
|
|
4231
|
-
|
|
4232
|
-
|
|
4231
|
+
_o.sent();
|
|
4232
|
+
_o.label = 5;
|
|
4233
4233
|
case 5:
|
|
4234
|
-
|
|
4234
|
+
_m++;
|
|
4235
4235
|
return [3 /*break*/, 3];
|
|
4236
4236
|
case 6:
|
|
4237
4237
|
// Update latestRevisions object according to additional changes:
|
|
@@ -4254,10 +4254,10 @@
|
|
|
4254
4254
|
// The purpose of this operation is to mark a start revision (per table)
|
|
4255
4255
|
// so that all client-mutations that come after this, will be mapped to current
|
|
4256
4256
|
// server revision.
|
|
4257
|
-
|
|
4257
|
+
_o.sent();
|
|
4258
4258
|
return [4 /*yield*/, db.getPersistedSyncState()];
|
|
4259
4259
|
case 8:
|
|
4260
|
-
syncState =
|
|
4260
|
+
syncState = _o.sent();
|
|
4261
4261
|
//
|
|
4262
4262
|
// Delete objects from removed realms
|
|
4263
4263
|
//
|
|
@@ -4266,7 +4266,7 @@
|
|
|
4266
4266
|
//
|
|
4267
4267
|
// Delete objects from removed realms
|
|
4268
4268
|
//
|
|
4269
|
-
|
|
4269
|
+
_o.sent();
|
|
4270
4270
|
newSyncState = syncState || {
|
|
4271
4271
|
syncedTables: [],
|
|
4272
4272
|
latestRevisions: {},
|
|
@@ -4294,7 +4294,7 @@
|
|
|
4294
4294
|
//
|
|
4295
4295
|
// apply server changes
|
|
4296
4296
|
//
|
|
4297
|
-
|
|
4297
|
+
_o.sent();
|
|
4298
4298
|
//
|
|
4299
4299
|
// Update syncState
|
|
4300
4300
|
//
|
|
@@ -4304,11 +4304,11 @@
|
|
|
4304
4304
|
});
|
|
4305
4305
|
}); })];
|
|
4306
4306
|
case 7:
|
|
4307
|
-
done =
|
|
4307
|
+
done = _l.sent();
|
|
4308
4308
|
if (!!done) return [3 /*break*/, 9];
|
|
4309
4309
|
console.debug('MORE SYNC NEEDED. Go for it again!');
|
|
4310
4310
|
return [4 /*yield*/, _sync(db, options, schema, { isInitialSync: isInitialSync, cancelToken: cancelToken })];
|
|
4311
|
-
case 8: return [2 /*return*/,
|
|
4311
|
+
case 8: return [2 /*return*/, _l.sent()];
|
|
4312
4312
|
case 9:
|
|
4313
4313
|
console.debug('SYNC DONE', { isInitialSync: isInitialSync });
|
|
4314
4314
|
return [2 /*return*/, false]; // Not needed anymore
|
|
@@ -4318,9 +4318,9 @@
|
|
|
4318
4318
|
}
|
|
4319
4319
|
function deleteObjectsFromRemovedRealms(db, res, prevState) {
|
|
4320
4320
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
4321
|
-
var deletedRealms, rejectedRealms, previousRealmSet, previousInviteRealmSet, updatedRealmSet, updatedTotalRealmSet,
|
|
4322
|
-
return __generator$1(this, function (
|
|
4323
|
-
switch (
|
|
4321
|
+
var deletedRealms, rejectedRealms, previousRealmSet, previousInviteRealmSet, updatedRealmSet, updatedTotalRealmSet, _k, previousRealmSet_1, realmId, _l, _m, realmId, tables, _loop_6, _o, tables_1, table;
|
|
4322
|
+
return __generator$1(this, function (_p) {
|
|
4323
|
+
switch (_p.label) {
|
|
4324
4324
|
case 0:
|
|
4325
4325
|
deletedRealms = new Set();
|
|
4326
4326
|
rejectedRealms = new Set();
|
|
@@ -4328,8 +4328,8 @@
|
|
|
4328
4328
|
previousInviteRealmSet = prevState ? prevState.inviteRealms : [];
|
|
4329
4329
|
updatedRealmSet = new Set(res.realms);
|
|
4330
4330
|
updatedTotalRealmSet = new Set(res.realms.concat(res.inviteRealms));
|
|
4331
|
-
for (
|
|
4332
|
-
realmId = previousRealmSet_1[
|
|
4331
|
+
for (_k = 0, previousRealmSet_1 = previousRealmSet; _k < previousRealmSet_1.length; _k++) {
|
|
4332
|
+
realmId = previousRealmSet_1[_k];
|
|
4333
4333
|
if (!updatedRealmSet.has(realmId)) {
|
|
4334
4334
|
rejectedRealms.add(realmId);
|
|
4335
4335
|
if (!updatedTotalRealmSet.has(realmId)) {
|
|
@@ -4337,8 +4337,8 @@
|
|
|
4337
4337
|
}
|
|
4338
4338
|
}
|
|
4339
4339
|
}
|
|
4340
|
-
for (
|
|
4341
|
-
realmId = _l
|
|
4340
|
+
for (_l = 0, _m = previousInviteRealmSet.concat(previousRealmSet); _l < _m.length; _l++) {
|
|
4341
|
+
realmId = _m[_l];
|
|
4342
4342
|
if (!updatedTotalRealmSet.has(realmId)) {
|
|
4343
4343
|
deletedRealms.add(realmId);
|
|
4344
4344
|
}
|
|
@@ -4347,8 +4347,8 @@
|
|
|
4347
4347
|
tables = getSyncableTables(db);
|
|
4348
4348
|
_loop_6 = function (table) {
|
|
4349
4349
|
var realmsToDelete;
|
|
4350
|
-
return __generator$1(this, function (
|
|
4351
|
-
switch (
|
|
4350
|
+
return __generator$1(this, function (_q) {
|
|
4351
|
+
switch (_q.label) {
|
|
4352
4352
|
case 0:
|
|
4353
4353
|
realmsToDelete = ['realms', 'members', 'roles'].includes(table.name)
|
|
4354
4354
|
? deletedRealms // These tables should spare rejected ones.
|
|
@@ -4366,7 +4366,7 @@
|
|
|
4366
4366
|
case 1:
|
|
4367
4367
|
// There's an index to use:
|
|
4368
4368
|
//console.debug(`REMOVAL: deleting all ${table.name} where realmId anyOf `, JSON.stringify([...realmsToDelete]));
|
|
4369
|
-
|
|
4369
|
+
_q.sent();
|
|
4370
4370
|
return [3 /*break*/, 4];
|
|
4371
4371
|
case 2:
|
|
4372
4372
|
// No index to use:
|
|
@@ -4377,23 +4377,23 @@
|
|
|
4377
4377
|
case 3:
|
|
4378
4378
|
// No index to use:
|
|
4379
4379
|
//console.debug(`REMOVAL: deleting all ${table.name} where realmId is any of `, JSON.stringify([...realmsToDelete]), realmsToDelete.size);
|
|
4380
|
-
|
|
4381
|
-
|
|
4380
|
+
_q.sent();
|
|
4381
|
+
_q.label = 4;
|
|
4382
4382
|
case 4: return [2 /*return*/];
|
|
4383
4383
|
}
|
|
4384
4384
|
});
|
|
4385
4385
|
};
|
|
4386
|
-
|
|
4387
|
-
|
|
4386
|
+
_o = 0, tables_1 = tables;
|
|
4387
|
+
_p.label = 1;
|
|
4388
4388
|
case 1:
|
|
4389
|
-
if (!(
|
|
4390
|
-
table = tables_1[
|
|
4389
|
+
if (!(_o < tables_1.length)) return [3 /*break*/, 4];
|
|
4390
|
+
table = tables_1[_o];
|
|
4391
4391
|
return [5 /*yield**/, _loop_6(table)];
|
|
4392
4392
|
case 2:
|
|
4393
|
-
|
|
4394
|
-
|
|
4393
|
+
_p.sent();
|
|
4394
|
+
_p.label = 3;
|
|
4395
4395
|
case 3:
|
|
4396
|
-
|
|
4396
|
+
_o++;
|
|
4397
4397
|
return [3 /*break*/, 1];
|
|
4398
4398
|
case 4: return [2 /*return*/];
|
|
4399
4399
|
}
|
|
@@ -4417,8 +4417,8 @@
|
|
|
4417
4417
|
var loopWarning = 0;
|
|
4418
4418
|
var loopDetection = [0, 0, 0, 0, 0, 0, 0, 0, 0, Date.now()];
|
|
4419
4419
|
event.subscribe(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
4420
|
-
return __generator$1(this, function (
|
|
4421
|
-
switch (
|
|
4420
|
+
return __generator$1(this, function (_k) {
|
|
4421
|
+
switch (_k.label) {
|
|
4422
4422
|
case 0:
|
|
4423
4423
|
if (isWorking)
|
|
4424
4424
|
return [2 /*return*/];
|
|
@@ -4427,12 +4427,12 @@
|
|
|
4427
4427
|
loopDetection.shift();
|
|
4428
4428
|
loopDetection.push(Date.now());
|
|
4429
4429
|
readyToServe.next(false);
|
|
4430
|
-
|
|
4430
|
+
_k.label = 1;
|
|
4431
4431
|
case 1:
|
|
4432
|
-
|
|
4432
|
+
_k.trys.push([1, , 3, 8]);
|
|
4433
4433
|
return [4 /*yield*/, consumeQueue()];
|
|
4434
4434
|
case 2:
|
|
4435
|
-
|
|
4435
|
+
_k.sent();
|
|
4436
4436
|
return [3 /*break*/, 8];
|
|
4437
4437
|
case 3:
|
|
4438
4438
|
if (!(loopDetection[loopDetection.length - 1] - loopDetection[0] <
|
|
@@ -4443,7 +4443,7 @@
|
|
|
4443
4443
|
loopWarning = Date.now() + 60000;
|
|
4444
4444
|
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 60000); })];
|
|
4445
4445
|
case 4:
|
|
4446
|
-
|
|
4446
|
+
_k.sent();
|
|
4447
4447
|
return [3 /*break*/, 7];
|
|
4448
4448
|
case 5:
|
|
4449
4449
|
// This is a one-time event. Just pause 10 seconds.
|
|
@@ -4451,8 +4451,8 @@
|
|
|
4451
4451
|
loopWarning = Date.now() + 10000;
|
|
4452
4452
|
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 10000); })];
|
|
4453
4453
|
case 6:
|
|
4454
|
-
|
|
4455
|
-
|
|
4454
|
+
_k.sent();
|
|
4455
|
+
_k.label = 7;
|
|
4456
4456
|
case 7:
|
|
4457
4457
|
isWorking = false;
|
|
4458
4458
|
readyToServe.next(true);
|
|
@@ -4470,24 +4470,24 @@
|
|
|
4470
4470
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
4471
4471
|
var _loop_7;
|
|
4472
4472
|
var _this_1 = this;
|
|
4473
|
-
return __generator$1(this, function (
|
|
4474
|
-
switch (
|
|
4473
|
+
return __generator$1(this, function (_k) {
|
|
4474
|
+
switch (_k.label) {
|
|
4475
4475
|
case 0:
|
|
4476
4476
|
_loop_7 = function () {
|
|
4477
|
-
var msg, persistedSyncState,
|
|
4478
|
-
return __generator$1(this, function (
|
|
4479
|
-
switch (
|
|
4477
|
+
var msg, persistedSyncState, _l, user, refreshedLogin, error_2;
|
|
4478
|
+
return __generator$1(this, function (_m) {
|
|
4479
|
+
switch (_m.label) {
|
|
4480
4480
|
case 0:
|
|
4481
4481
|
msg = queue.shift();
|
|
4482
|
-
|
|
4482
|
+
_m.label = 1;
|
|
4483
4483
|
case 1:
|
|
4484
|
-
|
|
4484
|
+
_m.trys.push([1, 13, , 14]);
|
|
4485
4485
|
// If the sync worker or service worker is syncing, wait 'til thei're done.
|
|
4486
4486
|
// It's no need to have two channels at the same time - even though it wouldnt
|
|
4487
4487
|
// be a problem - this is an optimization.
|
|
4488
4488
|
return [4 /*yield*/, db.cloud.syncState
|
|
4489
|
-
.pipe(filter(function (
|
|
4490
|
-
var phase =
|
|
4489
|
+
.pipe(filter(function (_k) {
|
|
4490
|
+
var phase = _k.phase;
|
|
4491
4491
|
return phase === 'in-sync' || phase === 'error';
|
|
4492
4492
|
}), take(1))
|
|
4493
4493
|
.toPromise()];
|
|
@@ -4495,14 +4495,14 @@
|
|
|
4495
4495
|
// If the sync worker or service worker is syncing, wait 'til thei're done.
|
|
4496
4496
|
// It's no need to have two channels at the same time - even though it wouldnt
|
|
4497
4497
|
// be a problem - this is an optimization.
|
|
4498
|
-
|
|
4498
|
+
_m.sent();
|
|
4499
4499
|
console.debug('processing msg', msg);
|
|
4500
4500
|
persistedSyncState = db.cloud.persistedSyncState.value;
|
|
4501
4501
|
//syncState.
|
|
4502
4502
|
if (!msg)
|
|
4503
4503
|
return [2 /*return*/, "continue"];
|
|
4504
|
-
|
|
4505
|
-
switch (
|
|
4504
|
+
_l = msg.type;
|
|
4505
|
+
switch (_l) {
|
|
4506
4506
|
case 'token-expired': return [3 /*break*/, 3];
|
|
4507
4507
|
case 'realm-added': return [3 /*break*/, 6];
|
|
4508
4508
|
case 'realm-accepted': return [3 /*break*/, 7];
|
|
@@ -4516,7 +4516,7 @@
|
|
|
4516
4516
|
user = db.cloud.currentUser.value;
|
|
4517
4517
|
return [4 /*yield*/, refreshAccessToken(db.cloud.options.databaseUrl, user)];
|
|
4518
4518
|
case 4:
|
|
4519
|
-
refreshedLogin =
|
|
4519
|
+
refreshedLogin = _m.sent();
|
|
4520
4520
|
// Persist updated access token
|
|
4521
4521
|
return [4 /*yield*/, db.table('$logins').update(user.userId, {
|
|
4522
4522
|
accessToken: refreshedLogin.accessToken,
|
|
@@ -4524,7 +4524,7 @@
|
|
|
4524
4524
|
})];
|
|
4525
4525
|
case 5:
|
|
4526
4526
|
// Persist updated access token
|
|
4527
|
-
|
|
4527
|
+
_m.sent();
|
|
4528
4528
|
// Updating $logins will trigger emission of db.cloud.currentUser observable, which
|
|
4529
4529
|
// in turn will lead to that connectWebSocket.ts will reconnect the socket with the
|
|
4530
4530
|
// new token. So we don't need to do anything more here.
|
|
@@ -4557,9 +4557,9 @@
|
|
|
4557
4557
|
return [3 /*break*/, 12];
|
|
4558
4558
|
}
|
|
4559
4559
|
return [4 /*yield*/, db.transaction('rw', db.dx.tables, function (tx) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
4560
|
-
var
|
|
4561
|
-
return __generator$1(this, function (
|
|
4562
|
-
switch (
|
|
4560
|
+
var _k, schema, syncState, currentUser, ourRealmSetHash, clientChanges, mutationTables, filteredChanges;
|
|
4561
|
+
return __generator$1(this, function (_l) {
|
|
4562
|
+
switch (_l.label) {
|
|
4563
4563
|
case 0:
|
|
4564
4564
|
// @ts-ignore
|
|
4565
4565
|
tx.idbtrans.disableChangeTracking = true;
|
|
@@ -4571,7 +4571,7 @@
|
|
|
4571
4571
|
db.getCurrentUser(),
|
|
4572
4572
|
])];
|
|
4573
4573
|
case 1:
|
|
4574
|
-
|
|
4574
|
+
_k = _l.sent(), schema = _k[0], syncState = _k[1], currentUser = _k[2];
|
|
4575
4575
|
console.debug('ws message queue: in transaction');
|
|
4576
4576
|
if (!syncState || !schema || !currentUser) {
|
|
4577
4577
|
console.debug('required vars not present', {
|
|
@@ -4606,7 +4606,7 @@
|
|
|
4606
4606
|
// Keep TX in non-IDB work
|
|
4607
4607
|
computeRealmSetHash(syncState))];
|
|
4608
4608
|
case 2:
|
|
4609
|
-
ourRealmSetHash =
|
|
4609
|
+
ourRealmSetHash = _l.sent();
|
|
4610
4610
|
console.debug('ourRealmSetHash', ourRealmSetHash);
|
|
4611
4611
|
if (ourRealmSetHash !== msg.realmSetHash) {
|
|
4612
4612
|
console.debug('not same realmSetHash', msg.realmSetHash);
|
|
@@ -4620,9 +4620,9 @@
|
|
|
4620
4620
|
mutationTables = getSyncableTables(db).map(function (tbl) { return db.table(getMutationTable(tbl.name)); });
|
|
4621
4621
|
return [4 /*yield*/, listClientChanges(mutationTables)];
|
|
4622
4622
|
case 3:
|
|
4623
|
-
clientChanges =
|
|
4623
|
+
clientChanges = _l.sent();
|
|
4624
4624
|
console.debug('msg queue: client changes', clientChanges);
|
|
4625
|
-
|
|
4625
|
+
_l.label = 4;
|
|
4626
4626
|
case 4:
|
|
4627
4627
|
if (!(msg.changes.length > 0)) return [3 /*break*/, 6];
|
|
4628
4628
|
filteredChanges = filterServerChangesThroughAddedClientChanges(msg.changes, clientChanges);
|
|
@@ -4632,8 +4632,8 @@
|
|
|
4632
4632
|
console.debug('applying filtered server changes', filteredChanges);
|
|
4633
4633
|
return [4 /*yield*/, applyServerChanges(filteredChanges, db)];
|
|
4634
4634
|
case 5:
|
|
4635
|
-
|
|
4636
|
-
|
|
4635
|
+
_l.sent();
|
|
4636
|
+
_l.label = 6;
|
|
4637
4637
|
case 6:
|
|
4638
4638
|
// Update latest revisions per table in case there are unsynced changes
|
|
4639
4639
|
// This can be a real case in future when we allow non-eagery sync.
|
|
@@ -4644,37 +4644,37 @@
|
|
|
4644
4644
|
console.debug('Updating baseRefs', syncState.latestRevisions);
|
|
4645
4645
|
return [4 /*yield*/, updateBaseRevs(db, schema, syncState.latestRevisions, msg.newRev)];
|
|
4646
4646
|
case 7:
|
|
4647
|
-
|
|
4647
|
+
_l.sent();
|
|
4648
4648
|
//
|
|
4649
4649
|
// Update syncState
|
|
4650
4650
|
//
|
|
4651
4651
|
console.debug('Updating syncState', syncState);
|
|
4652
4652
|
return [4 /*yield*/, db.$syncState.put(syncState, 'syncState')];
|
|
4653
4653
|
case 8:
|
|
4654
|
-
|
|
4654
|
+
_l.sent();
|
|
4655
4655
|
return [2 /*return*/];
|
|
4656
4656
|
}
|
|
4657
4657
|
});
|
|
4658
4658
|
}); })];
|
|
4659
4659
|
case 11:
|
|
4660
|
-
|
|
4660
|
+
_m.sent();
|
|
4661
4661
|
console.debug('msg queue: done with rw transaction');
|
|
4662
4662
|
return [3 /*break*/, 12];
|
|
4663
4663
|
case 12: return [3 /*break*/, 14];
|
|
4664
4664
|
case 13:
|
|
4665
|
-
error_2 =
|
|
4665
|
+
error_2 = _m.sent();
|
|
4666
4666
|
console.error("Error in msg queue", error_2);
|
|
4667
4667
|
return [3 /*break*/, 14];
|
|
4668
4668
|
case 14: return [2 /*return*/];
|
|
4669
4669
|
}
|
|
4670
4670
|
});
|
|
4671
4671
|
};
|
|
4672
|
-
|
|
4672
|
+
_k.label = 1;
|
|
4673
4673
|
case 1:
|
|
4674
4674
|
if (!(queue.length > 0)) return [3 /*break*/, 3];
|
|
4675
4675
|
return [5 /*yield**/, _loop_7()];
|
|
4676
4676
|
case 2:
|
|
4677
|
-
|
|
4677
|
+
_k.sent();
|
|
4678
4678
|
return [3 /*break*/, 1];
|
|
4679
4679
|
case 3: return [2 /*return*/];
|
|
4680
4680
|
}
|
|
@@ -5009,8 +5009,8 @@
|
|
|
5009
5009
|
// however, application code will work better if we can always rely on that the properties realmId
|
|
5010
5010
|
// and owner are set. Application code may index them and query them based on db.cloud.currentUserId,
|
|
5011
5011
|
// and expect them to be returned. That scenario must work also when db.cloud.currentUserId === 'unauthorized'.
|
|
5012
|
-
for (var
|
|
5013
|
-
var obj = _k
|
|
5012
|
+
for (var _k = 0, _l = req.values; _k < _l.length; _k++) {
|
|
5013
|
+
var obj = _l[_k];
|
|
5014
5014
|
if (!obj.owner) {
|
|
5015
5015
|
obj.owner = trans.currentUser.userId;
|
|
5016
5016
|
}
|
|
@@ -5066,7 +5066,7 @@
|
|
|
5066
5066
|
}
|
|
5067
5067
|
function readLock(fn, prop) {
|
|
5068
5068
|
return function readLocker(req) {
|
|
5069
|
-
var
|
|
5069
|
+
var _k = req.trans[prop] || (req.trans[prop] = { writers: [], readers: [] }), readers = _k.readers, writers = _k.writers;
|
|
5070
5070
|
var numWriters = writers.length;
|
|
5071
5071
|
var promise = (numWriters > 0
|
|
5072
5072
|
? writers[numWriters - 1].then(function () { return fn(req); }, function () { return fn(req); })
|
|
@@ -5077,7 +5077,7 @@
|
|
|
5077
5077
|
}
|
|
5078
5078
|
function writeLock(fn, prop) {
|
|
5079
5079
|
return function writeLocker(req) {
|
|
5080
|
-
var
|
|
5080
|
+
var _k = req.trans[prop] || (req.trans[prop] = { writers: [], readers: [] }), readers = _k.readers, writers = _k.writers;
|
|
5081
5081
|
var promise = (writers.length > 0
|
|
5082
5082
|
? writers[writers.length - 1].then(function () { return fn(req); }, function () { return fn(req); })
|
|
5083
5083
|
: readers.length > 0
|
|
@@ -5096,8 +5096,8 @@
|
|
|
5096
5096
|
* changes to server and cleanup the tracked mutations once the server has
|
|
5097
5097
|
* ackowledged that it got them.
|
|
5098
5098
|
*/
|
|
5099
|
-
function createMutationTrackingMiddleware(
|
|
5100
|
-
var currentUserObservable =
|
|
5099
|
+
function createMutationTrackingMiddleware(_k) {
|
|
5100
|
+
var currentUserObservable = _k.currentUserObservable, db = _k.db;
|
|
5101
5101
|
return {
|
|
5102
5102
|
stack: 'dbcore',
|
|
5103
5103
|
name: 'MutationTrackingMiddleware',
|
|
@@ -5338,13 +5338,13 @@
|
|
|
5338
5338
|
}
|
|
5339
5339
|
function performInitialSync(db, cloudOptions, cloudSchema) {
|
|
5340
5340
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5341
|
-
return __generator$1(this, function (
|
|
5342
|
-
switch (
|
|
5341
|
+
return __generator$1(this, function (_k) {
|
|
5342
|
+
switch (_k.label) {
|
|
5343
5343
|
case 0:
|
|
5344
5344
|
console.debug('Performing initial sync');
|
|
5345
5345
|
return [4 /*yield*/, sync(db, cloudOptions, cloudSchema, { isInitialSync: true })];
|
|
5346
5346
|
case 1:
|
|
5347
|
-
|
|
5347
|
+
_k.sent();
|
|
5348
5348
|
console.debug('Done initial sync');
|
|
5349
5349
|
return [2 /*return*/];
|
|
5350
5350
|
}
|
|
@@ -5495,8 +5495,8 @@
|
|
|
5495
5495
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5496
5496
|
var wsUrl, searchParams, ws, everConnected_1;
|
|
5497
5497
|
var _this_1 = this;
|
|
5498
|
-
return __generator$1(this, function (
|
|
5499
|
-
switch (
|
|
5498
|
+
return __generator$1(this, function (_k) {
|
|
5499
|
+
switch (_k.label) {
|
|
5500
5500
|
case 0:
|
|
5501
5501
|
this.lastServerActivity = new Date();
|
|
5502
5502
|
if (this.pauseUntil && this.pauseUntil > new Date()) {
|
|
@@ -5522,7 +5522,7 @@
|
|
|
5522
5522
|
this.webSocketStatus.next('connecting');
|
|
5523
5523
|
this.pinger = setInterval(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5524
5524
|
var _this_1 = this;
|
|
5525
|
-
return __generator$1(this, function (
|
|
5525
|
+
return __generator$1(this, function (_k) {
|
|
5526
5526
|
if (this.closed) {
|
|
5527
5527
|
console.debug('pinger check', this.id, 'CLOSED.');
|
|
5528
5528
|
this.teardown();
|
|
@@ -5607,9 +5607,9 @@
|
|
|
5607
5607
|
_this_1.subscriber.error(e);
|
|
5608
5608
|
}
|
|
5609
5609
|
};
|
|
5610
|
-
|
|
5610
|
+
_k.label = 1;
|
|
5611
5611
|
case 1:
|
|
5612
|
-
|
|
5612
|
+
_k.trys.push([1, 3, , 4]);
|
|
5613
5613
|
everConnected_1 = false;
|
|
5614
5614
|
return [4 /*yield*/, new Promise(function (resolve, reject) {
|
|
5615
5615
|
ws.onopen = function (event) {
|
|
@@ -5630,7 +5630,7 @@
|
|
|
5630
5630
|
};
|
|
5631
5631
|
})];
|
|
5632
5632
|
case 2:
|
|
5633
|
-
|
|
5633
|
+
_k.sent();
|
|
5634
5634
|
this.messageProducerSubscription = this.messageProducer.subscribe(function (msg) {
|
|
5635
5635
|
var _a;
|
|
5636
5636
|
if (!_this_1.closed) {
|
|
@@ -5643,7 +5643,7 @@
|
|
|
5643
5643
|
});
|
|
5644
5644
|
return [3 /*break*/, 4];
|
|
5645
5645
|
case 3:
|
|
5646
|
-
|
|
5646
|
+
_k.sent();
|
|
5647
5647
|
this.pauseUntil = new Date(Date.now() + FAIL_RETRY_WAIT_TIME);
|
|
5648
5648
|
return [3 /*break*/, 4];
|
|
5649
5649
|
case 4: return [2 /*return*/];
|
|
@@ -5658,20 +5658,20 @@
|
|
|
5658
5658
|
}
|
|
5659
5659
|
function waitAndReconnectWhenUserDoesSomething(error) {
|
|
5660
5660
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5661
|
-
return __generator$1(this, function (
|
|
5662
|
-
switch (
|
|
5661
|
+
return __generator$1(this, function (_k) {
|
|
5662
|
+
switch (_k.label) {
|
|
5663
5663
|
case 0:
|
|
5664
5664
|
console.error("WebSocket observable: error but revive when user does some active thing...", error);
|
|
5665
5665
|
// Sleep some seconds...
|
|
5666
5666
|
return [4 /*yield*/, sleep(3000)];
|
|
5667
5667
|
case 1:
|
|
5668
5668
|
// Sleep some seconds...
|
|
5669
|
-
|
|
5669
|
+
_k.sent();
|
|
5670
5670
|
// Wait til user does something (move mouse, tap, scroll, click etc)
|
|
5671
5671
|
console.debug('waiting for someone to do something');
|
|
5672
5672
|
return [4 /*yield*/, userDoesSomething.pipe(take(1)).toPromise()];
|
|
5673
5673
|
case 2:
|
|
5674
|
-
|
|
5674
|
+
_k.sent();
|
|
5675
5675
|
console.debug('someone did something!');
|
|
5676
5676
|
return [2 /*return*/];
|
|
5677
5677
|
}
|
|
@@ -5695,21 +5695,21 @@
|
|
|
5695
5695
|
var _this_1 = this;
|
|
5696
5696
|
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.
|
|
5697
5697
|
take(1), // Don't continue waking up whenever syncState change
|
|
5698
|
-
switchMap(function (syncState) { return db.cloud.currentUser.pipe(map(function (userLogin) { return [userLogin, syncState]; })); }), switchMap(function (
|
|
5699
|
-
var userLogin =
|
|
5698
|
+
switchMap(function (syncState) { return db.cloud.currentUser.pipe(map(function (userLogin) { return [userLogin, syncState]; })); }), switchMap(function (_k) {
|
|
5699
|
+
var userLogin = _k[0], syncState = _k[1];
|
|
5700
5700
|
return userIsReallyActive.pipe(map(function (isActive) { return [isActive ? userLogin : null, syncState]; }));
|
|
5701
|
-
}), switchMap(function (
|
|
5702
|
-
var userLogin =
|
|
5703
|
-
return __awaiter$1(_this_1, void 0, void 0, function () { var
|
|
5704
|
-
switch (
|
|
5701
|
+
}), switchMap(function (_k) {
|
|
5702
|
+
var userLogin = _k[0], syncState = _k[1];
|
|
5703
|
+
return __awaiter$1(_this_1, void 0, void 0, function () { var _k; return __generator$1(this, function (_l) {
|
|
5704
|
+
switch (_l.label) {
|
|
5705
5705
|
case 0:
|
|
5706
|
-
|
|
5706
|
+
_k = [userLogin];
|
|
5707
5707
|
return [4 /*yield*/, computeRealmSetHash(syncState)];
|
|
5708
|
-
case 1: return [2 /*return*/,
|
|
5708
|
+
case 1: return [2 /*return*/, _k.concat([_l.sent()])];
|
|
5709
5709
|
}
|
|
5710
5710
|
}); });
|
|
5711
|
-
}), switchMap(function (
|
|
5712
|
-
var userLogin =
|
|
5711
|
+
}), switchMap(function (_k) {
|
|
5712
|
+
var userLogin = _k[0], realmSetHash = _k[1];
|
|
5713
5713
|
// Let server end query changes from last entry of same client-ID and forward.
|
|
5714
5714
|
// If no new entries, server won't bother the client. If new entries, server sends only those
|
|
5715
5715
|
// and the baseRev of the last from same client-ID.
|
|
@@ -5721,14 +5721,14 @@
|
|
|
5721
5721
|
console.debug('WebSocket observable: Token expired. Refreshing token...');
|
|
5722
5722
|
return rxjs.of(true).pipe(switchMap(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5723
5723
|
var user, refreshedLogin;
|
|
5724
|
-
return __generator$1(this, function (
|
|
5725
|
-
switch (
|
|
5724
|
+
return __generator$1(this, function (_k) {
|
|
5725
|
+
switch (_k.label) {
|
|
5726
5726
|
case 0: return [4 /*yield*/, db.getCurrentUser()];
|
|
5727
5727
|
case 1:
|
|
5728
|
-
user =
|
|
5728
|
+
user = _k.sent();
|
|
5729
5729
|
return [4 /*yield*/, refreshAccessToken(db.cloud.options.databaseUrl, user)];
|
|
5730
5730
|
case 2:
|
|
5731
|
-
refreshedLogin =
|
|
5731
|
+
refreshedLogin = _k.sent();
|
|
5732
5732
|
// Persist updated access token
|
|
5733
5733
|
return [4 /*yield*/, db.table('$logins').update(user.userId, {
|
|
5734
5734
|
accessToken: refreshedLogin.accessToken,
|
|
@@ -5736,7 +5736,7 @@
|
|
|
5736
5736
|
})];
|
|
5737
5737
|
case 3:
|
|
5738
5738
|
// Persist updated access token
|
|
5739
|
-
|
|
5739
|
+
_k.sent();
|
|
5740
5740
|
return [2 /*return*/];
|
|
5741
5741
|
}
|
|
5742
5742
|
});
|
|
@@ -5764,19 +5764,19 @@
|
|
|
5764
5764
|
function isSyncNeeded(db) {
|
|
5765
5765
|
var _a;
|
|
5766
5766
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5767
|
-
var
|
|
5768
|
-
return __generator$1(this, function (
|
|
5769
|
-
switch (
|
|
5767
|
+
var _k;
|
|
5768
|
+
return __generator$1(this, function (_l) {
|
|
5769
|
+
switch (_l.label) {
|
|
5770
5770
|
case 0:
|
|
5771
5771
|
if (!(((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.databaseUrl) && db.cloud.schema)) return [3 /*break*/, 2];
|
|
5772
5772
|
return [4 /*yield*/, sync(db, db.cloud.options, db.cloud.schema, { justCheckIfNeeded: true })];
|
|
5773
5773
|
case 1:
|
|
5774
|
-
|
|
5774
|
+
_k = _l.sent();
|
|
5775
5775
|
return [3 /*break*/, 3];
|
|
5776
5776
|
case 2:
|
|
5777
|
-
|
|
5778
|
-
|
|
5779
|
-
case 3: return [2 /*return*/,
|
|
5777
|
+
_k = false;
|
|
5778
|
+
_l.label = 3;
|
|
5779
|
+
case 3: return [2 /*return*/, _k];
|
|
5780
5780
|
}
|
|
5781
5781
|
});
|
|
5782
5782
|
});
|
|
@@ -5786,22 +5786,22 @@
|
|
|
5786
5786
|
var myId = randomString(16);
|
|
5787
5787
|
var GUARDED_JOB_HEARTBEAT = 1 * SECONDS;
|
|
5788
5788
|
var GUARDED_JOB_TIMEOUT = 1 * MINUTES;
|
|
5789
|
-
function performGuardedJob(db, jobName, jobsTableName, job,
|
|
5790
|
-
var
|
|
5789
|
+
function performGuardedJob(db, jobName, jobsTableName, job, _k) {
|
|
5790
|
+
var _l = _k === void 0 ? {} : _k, awaitRemoteJob = _l.awaitRemoteJob;
|
|
5791
5791
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5792
5792
|
function aquireLock() {
|
|
5793
5793
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5794
5794
|
var gotTheLock, jobDoneObservable, err_1;
|
|
5795
5795
|
var _this_1 = this;
|
|
5796
|
-
return __generator$1(this, function (
|
|
5797
|
-
switch (
|
|
5796
|
+
return __generator$1(this, function (_k) {
|
|
5797
|
+
switch (_k.label) {
|
|
5798
5798
|
case 0: return [4 /*yield*/, db.transaction('rw!', jobsTableName, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5799
5799
|
var currentWork;
|
|
5800
|
-
return __generator$1(this, function (
|
|
5801
|
-
switch (
|
|
5800
|
+
return __generator$1(this, function (_k) {
|
|
5801
|
+
switch (_k.label) {
|
|
5802
5802
|
case 0: return [4 /*yield*/, jobsTable.get(jobName)];
|
|
5803
5803
|
case 1:
|
|
5804
|
-
currentWork =
|
|
5804
|
+
currentWork = _k.sent();
|
|
5805
5805
|
if (!!currentWork) return [3 /*break*/, 3];
|
|
5806
5806
|
// No one else is working. Let's record that we are.
|
|
5807
5807
|
return [4 /*yield*/, jobsTable.add({
|
|
@@ -5811,7 +5811,7 @@
|
|
|
5811
5811
|
}, jobName)];
|
|
5812
5812
|
case 2:
|
|
5813
5813
|
// No one else is working. Let's record that we are.
|
|
5814
|
-
|
|
5814
|
+
_k.sent();
|
|
5815
5815
|
return [2 /*return*/, true];
|
|
5816
5816
|
case 3:
|
|
5817
5817
|
if (!(currentWork.heartbeat.getTime() <
|
|
@@ -5825,27 +5825,27 @@
|
|
|
5825
5825
|
}, jobName)];
|
|
5826
5826
|
case 4:
|
|
5827
5827
|
// Now, take over!
|
|
5828
|
-
|
|
5828
|
+
_k.sent();
|
|
5829
5829
|
return [2 /*return*/, true];
|
|
5830
5830
|
case 5: return [2 /*return*/, false];
|
|
5831
5831
|
}
|
|
5832
5832
|
});
|
|
5833
5833
|
}); })];
|
|
5834
5834
|
case 1:
|
|
5835
|
-
gotTheLock =
|
|
5835
|
+
gotTheLock = _k.sent();
|
|
5836
5836
|
if (gotTheLock)
|
|
5837
5837
|
return [2 /*return*/, true];
|
|
5838
5838
|
if (!awaitRemoteJob) return [3 /*break*/, 6];
|
|
5839
|
-
|
|
5839
|
+
_k.label = 2;
|
|
5840
5840
|
case 2:
|
|
5841
|
-
|
|
5841
|
+
_k.trys.push([2, 4, , 6]);
|
|
5842
5842
|
jobDoneObservable = rxjs.from(Dexie.liveQuery(function () { return jobsTable.get(jobName); })).pipe(timeout(GUARDED_JOB_TIMEOUT), filter(function (job) { return !job; }));
|
|
5843
5843
|
return [4 /*yield*/, jobDoneObservable.toPromise()];
|
|
5844
5844
|
case 3:
|
|
5845
|
-
|
|
5845
|
+
_k.sent();
|
|
5846
5846
|
return [2 /*return*/, false];
|
|
5847
5847
|
case 4:
|
|
5848
|
-
err_1 =
|
|
5848
|
+
err_1 = _k.sent();
|
|
5849
5849
|
if (err_1.name !== 'TimeoutError') {
|
|
5850
5850
|
throw err_1;
|
|
5851
5851
|
}
|
|
@@ -5854,7 +5854,7 @@
|
|
|
5854
5854
|
// Timeout stopped us! Try aquire the lock now.
|
|
5855
5855
|
// It will likely succeed this time unless
|
|
5856
5856
|
// another client took it.
|
|
5857
|
-
return [2 /*return*/,
|
|
5857
|
+
return [2 /*return*/, _k.sent()];
|
|
5858
5858
|
case 6: return [2 /*return*/, false];
|
|
5859
5859
|
}
|
|
5860
5860
|
});
|
|
@@ -5862,13 +5862,13 @@
|
|
|
5862
5862
|
}
|
|
5863
5863
|
var jobsTable, heartbeat;
|
|
5864
5864
|
var _this_1 = this;
|
|
5865
|
-
return __generator$1(this, function (
|
|
5866
|
-
switch (
|
|
5865
|
+
return __generator$1(this, function (_k) {
|
|
5866
|
+
switch (_k.label) {
|
|
5867
5867
|
case 0:
|
|
5868
5868
|
jobsTable = db.table(jobsTableName);
|
|
5869
5869
|
return [4 /*yield*/, aquireLock()];
|
|
5870
5870
|
case 1:
|
|
5871
|
-
if (!
|
|
5871
|
+
if (!_k.sent()) return [3 /*break*/, 6];
|
|
5872
5872
|
heartbeat = setInterval(function () {
|
|
5873
5873
|
jobsTable.update(jobName, function (job) {
|
|
5874
5874
|
if (job.nodeId === myId) {
|
|
@@ -5876,34 +5876,34 @@
|
|
|
5876
5876
|
}
|
|
5877
5877
|
});
|
|
5878
5878
|
}, GUARDED_JOB_HEARTBEAT);
|
|
5879
|
-
|
|
5879
|
+
_k.label = 2;
|
|
5880
5880
|
case 2:
|
|
5881
|
-
|
|
5881
|
+
_k.trys.push([2, , 4, 6]);
|
|
5882
5882
|
return [4 /*yield*/, job()];
|
|
5883
|
-
case 3: return [2 /*return*/,
|
|
5883
|
+
case 3: return [2 /*return*/, _k.sent()];
|
|
5884
5884
|
case 4:
|
|
5885
5885
|
// Stop heartbeat
|
|
5886
5886
|
clearInterval(heartbeat);
|
|
5887
5887
|
// Remove the persisted job state:
|
|
5888
5888
|
return [4 /*yield*/, db.transaction('rw!', jobsTableName, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5889
5889
|
var currentWork;
|
|
5890
|
-
return __generator$1(this, function (
|
|
5891
|
-
switch (
|
|
5890
|
+
return __generator$1(this, function (_k) {
|
|
5891
|
+
switch (_k.label) {
|
|
5892
5892
|
case 0: return [4 /*yield*/, jobsTable.get(jobName)];
|
|
5893
5893
|
case 1:
|
|
5894
|
-
currentWork =
|
|
5894
|
+
currentWork = _k.sent();
|
|
5895
5895
|
if (!(currentWork && currentWork.nodeId === myId)) return [3 /*break*/, 3];
|
|
5896
5896
|
return [4 /*yield*/, jobsTable.delete(jobName)];
|
|
5897
5897
|
case 2:
|
|
5898
|
-
|
|
5899
|
-
|
|
5898
|
+
_k.sent();
|
|
5899
|
+
_k.label = 3;
|
|
5900
5900
|
case 3: return [2 /*return*/];
|
|
5901
5901
|
}
|
|
5902
5902
|
});
|
|
5903
5903
|
}); })];
|
|
5904
5904
|
case 5:
|
|
5905
5905
|
// Remove the persisted job state:
|
|
5906
|
-
|
|
5906
|
+
_k.sent();
|
|
5907
5907
|
return [7 /*endfinally*/];
|
|
5908
5908
|
case 6: return [2 /*return*/];
|
|
5909
5909
|
}
|
|
@@ -5961,32 +5961,36 @@
|
|
|
5961
5961
|
function _syncIfPossible() {
|
|
5962
5962
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5963
5963
|
var error_4;
|
|
5964
|
-
return __generator$1(this, function (
|
|
5965
|
-
switch (
|
|
5964
|
+
return __generator$1(this, function (_k) {
|
|
5965
|
+
switch (_k.label) {
|
|
5966
5966
|
case 0:
|
|
5967
|
-
|
|
5968
|
-
if (!db.cloud.
|
|
5969
|
-
|
|
5967
|
+
_k.trys.push([0, 6, , 7]);
|
|
5968
|
+
if (!db.cloud.isServiceWorkerDB) return [3 /*break*/, 2];
|
|
5969
|
+
// We are the dedicated sync SW:
|
|
5970
5970
|
return [4 /*yield*/, sync(db, cloudOptions, cloudSchema, options)];
|
|
5971
5971
|
case 1:
|
|
5972
|
-
|
|
5973
|
-
|
|
5974
|
-
|
|
5975
|
-
case
|
|
5976
|
-
|
|
5977
|
-
|
|
5978
|
-
|
|
5979
|
-
|
|
5972
|
+
// We are the dedicated sync SW:
|
|
5973
|
+
_k.sent();
|
|
5974
|
+
return [3 /*break*/, 5];
|
|
5975
|
+
case 2:
|
|
5976
|
+
if (!!db.cloud.usingServiceWorker) return [3 /*break*/, 4];
|
|
5977
|
+
// We use a flow that is better suited for the case when multiple workers want to
|
|
5978
|
+
// do the same thing.
|
|
5979
|
+
return [4 /*yield*/, performGuardedJob(db, CURRENT_SYNC_WORKER, '$jobs', function () { return sync(db, cloudOptions, cloudSchema, options); })];
|
|
5980
|
+
case 3:
|
|
5980
5981
|
// We use a flow that is better suited for the case when multiple workers want to
|
|
5981
5982
|
// do the same thing.
|
|
5982
|
-
|
|
5983
|
-
|
|
5983
|
+
_k.sent();
|
|
5984
|
+
return [3 /*break*/, 5];
|
|
5985
|
+
case 4:
|
|
5986
|
+
assert(false);
|
|
5987
|
+
throw new Error('Internal _syncIfPossible() - invalid precondition - should not have been called.');
|
|
5984
5988
|
case 5:
|
|
5985
5989
|
ongoingSyncs.delete(db);
|
|
5986
5990
|
console.debug('Done sync');
|
|
5987
5991
|
return [3 /*break*/, 7];
|
|
5988
5992
|
case 6:
|
|
5989
|
-
error_4 =
|
|
5993
|
+
error_4 = _k.sent();
|
|
5990
5994
|
ongoingSyncs.delete(db);
|
|
5991
5995
|
console.error("Failed to sync client changes", error_4);
|
|
5992
5996
|
throw error_4; // Make sure we rethrow error so that sync event is retried.
|
|
@@ -6028,8 +6032,8 @@
|
|
|
6028
6032
|
// Sync eagerly whenever a change has happened (+ initially when there's no syncState yet)
|
|
6029
6033
|
// This initial subscribe will also trigger an sync also now.
|
|
6030
6034
|
console.debug('Starting LocalSyncWorker', db.localSyncEvent['id']);
|
|
6031
|
-
localSyncEventSubscription = db.localSyncEvent.subscribe(function (
|
|
6032
|
-
var purpose =
|
|
6035
|
+
localSyncEventSubscription = db.localSyncEvent.subscribe(function (_k) {
|
|
6036
|
+
var purpose = _k.purpose;
|
|
6033
6037
|
try {
|
|
6034
6038
|
syncAndRetry(purpose || 'pull');
|
|
6035
6039
|
}
|
|
@@ -6053,8 +6057,8 @@
|
|
|
6053
6057
|
function updateSchemaFromOptions(schema, options) {
|
|
6054
6058
|
if (schema && options) {
|
|
6055
6059
|
if (options.unsyncedTables) {
|
|
6056
|
-
for (var
|
|
6057
|
-
var tableName = _k
|
|
6060
|
+
for (var _k = 0, _l = options.unsyncedTables; _k < _l.length; _k++) {
|
|
6061
|
+
var tableName = _l[_k];
|
|
6058
6062
|
if (schema[tableName]) {
|
|
6059
6063
|
schema[tableName].markedForSync = false;
|
|
6060
6064
|
}
|
|
@@ -6064,8 +6068,8 @@
|
|
|
6064
6068
|
}
|
|
6065
6069
|
function verifySchema(db) {
|
|
6066
6070
|
var _a, _b;
|
|
6067
|
-
for (var
|
|
6068
|
-
var table = _k
|
|
6071
|
+
for (var _k = 0, _l = db.tables; _k < _l.length; _k++) {
|
|
6072
|
+
var table = _l[_k];
|
|
6069
6073
|
if ((_b = (_a = db.cloud.schema) === null || _a === void 0 ? void 0 : _a[table.name]) === null || _b === void 0 ? void 0 : _b.markedForSync) {
|
|
6070
6074
|
if (table.schema.primKey.auto) {
|
|
6071
6075
|
throw new Dexie__default["default"].SchemaError("Table ".concat(table.name, " is both autoIncremented and synced. ") +
|
|
@@ -6308,8 +6312,8 @@
|
|
|
6308
6312
|
padding: "8px"
|
|
6309
6313
|
}
|
|
6310
6314
|
};
|
|
6311
|
-
function Dialog(
|
|
6312
|
-
var children =
|
|
6315
|
+
function Dialog(_k) {
|
|
6316
|
+
var children = _k.children;
|
|
6313
6317
|
return (a$1("div", null, a$1("div", { style: Styles.Darken }), a$1("div", { style: Styles.DialogOuter }, a$1("div", { style: Styles.DialogInner }, children))));
|
|
6314
6318
|
}
|
|
6315
6319
|
var t, u, r, o = 0, i = [], c = n.__b, f = n.__r, e = n.diffed, a = n.__c, v = n.unmount;
|
|
@@ -6343,24 +6347,24 @@
|
|
|
6343
6347
|
function j(n) { var t = u; n.__c = n.__(), u = t; }
|
|
6344
6348
|
function k(n, t) { return !n || n.length !== t.length || t.some(function (t, u) { return t !== n[u]; }); }
|
|
6345
6349
|
function w(n, t) { return "function" == typeof t ? t(n) : t; }
|
|
6346
|
-
function resolveText(
|
|
6347
|
-
var message =
|
|
6350
|
+
function resolveText(_k) {
|
|
6351
|
+
var message = _k.message; _k.messageCode; var messageParams = _k.messageParams;
|
|
6348
6352
|
return message.replace(/\{\w+\}/ig, function (n) { return messageParams[n.substr(1, n.length - 2)]; });
|
|
6349
6353
|
}
|
|
6350
|
-
function LoginDialog(
|
|
6351
|
-
var title =
|
|
6352
|
-
var
|
|
6354
|
+
function LoginDialog(_k) {
|
|
6355
|
+
var title = _k.title, alerts = _k.alerts, fields = _k.fields, onCancel = _k.onCancel, onSubmit = _k.onSubmit;
|
|
6356
|
+
var _l = l({}), params = _l[0], setParams = _l[1];
|
|
6353
6357
|
var firstFieldRef = s();
|
|
6354
6358
|
h(function () { var _a; return (_a = firstFieldRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, []);
|
|
6355
6359
|
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) {
|
|
6356
6360
|
ev.preventDefault();
|
|
6357
6361
|
onSubmit(params);
|
|
6358
|
-
} }, Object.entries(fields).map(function (
|
|
6359
|
-
var fieldName =
|
|
6362
|
+
} }, Object.entries(fields).map(function (_k, idx) {
|
|
6363
|
+
var fieldName = _k[0], _l = _k[1], type = _l.type, label = _l.label, placeholder = _l.placeholder;
|
|
6360
6364
|
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) {
|
|
6361
|
-
var
|
|
6365
|
+
var _k;
|
|
6362
6366
|
var _a;
|
|
6363
|
-
return setParams(Object.assign(Object.assign({}, params), (
|
|
6367
|
+
return setParams(Object.assign(Object.assign({}, params), (_k = {}, _k[fieldName] = valueTransformer(type, (_a = ev.target) === null || _a === void 0 ? void 0 : _a['value']), _k)));
|
|
6364
6368
|
} })));
|
|
6365
6369
|
}))), 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"))));
|
|
6366
6370
|
}
|
|
@@ -6388,8 +6392,8 @@
|
|
|
6388
6392
|
delete this.subscription;
|
|
6389
6393
|
}
|
|
6390
6394
|
};
|
|
6391
|
-
LoginGui.prototype.render = function (props,
|
|
6392
|
-
var userInteraction =
|
|
6395
|
+
LoginGui.prototype.render = function (props, _k) {
|
|
6396
|
+
var userInteraction = _k.userInteraction;
|
|
6393
6397
|
if (!userInteraction)
|
|
6394
6398
|
return null;
|
|
6395
6399
|
//if (props.db.cloud.userInteraction.observers.length > 1) return null; // Someone else subscribes.
|
|
@@ -6444,8 +6448,8 @@
|
|
|
6444
6448
|
lazyWebSocketStatus,
|
|
6445
6449
|
db.syncStateChangedEvent.pipe(startWith({ phase: 'initial' })),
|
|
6446
6450
|
userIsReallyActive
|
|
6447
|
-
]).pipe(map(function (
|
|
6448
|
-
var status =
|
|
6451
|
+
]).pipe(map(function (_k) {
|
|
6452
|
+
var status = _k[0], syncState = _k[1], userIsActive = _k[2];
|
|
6449
6453
|
var phase = syncState.phase, error = syncState.error, progress = syncState.progress;
|
|
6450
6454
|
var adjustedStatus = status;
|
|
6451
6455
|
if (phase === 'error') {
|
|
@@ -6524,10 +6528,10 @@
|
|
|
6524
6528
|
.toArray()
|
|
6525
6529
|
.then(function (roles) {
|
|
6526
6530
|
var rv = {};
|
|
6527
|
-
for (var
|
|
6531
|
+
for (var _k = 0, _l = roles
|
|
6528
6532
|
.slice()
|
|
6529
|
-
.sort(function (a, b) { return (a.sortOrder || 0) - (b.sortOrder || 0); });
|
|
6530
|
-
var role = _k
|
|
6533
|
+
.sort(function (a, b) { return (a.sortOrder || 0) - (b.sortOrder || 0); }); _k < _l.length; _k++) {
|
|
6534
|
+
var role = _l[_k];
|
|
6531
6535
|
rv[role.name] = role;
|
|
6532
6536
|
}
|
|
6533
6537
|
return rv;
|
|
@@ -6539,8 +6543,8 @@
|
|
|
6539
6543
|
db.members.where({ userId: currentUser.userId }).toArray(),
|
|
6540
6544
|
db.realms.toArray(),
|
|
6541
6545
|
currentUser.userId,
|
|
6542
|
-
]).then(function (
|
|
6543
|
-
var selfMembers =
|
|
6546
|
+
]).then(function (_k) {
|
|
6547
|
+
var selfMembers = _k[0], realms = _k[1], userId = _k[2];
|
|
6544
6548
|
//console.debug(`PERMS: Result from liveQUery():`, JSON.stringify({selfMembers, realms, userId}, null, 2))
|
|
6545
6549
|
return { selfMembers: selfMembers, realms: realms, userId: userId };
|
|
6546
6550
|
}); }); }); })), {
|
|
@@ -6573,15 +6577,15 @@
|
|
|
6573
6577
|
// TODO: Move to dexie-cloud-common
|
|
6574
6578
|
function mergePermissions() {
|
|
6575
6579
|
var permissions = [];
|
|
6576
|
-
for (var
|
|
6577
|
-
permissions[
|
|
6580
|
+
for (var _k = 0; _k < arguments.length; _k++) {
|
|
6581
|
+
permissions[_k] = arguments[_k];
|
|
6578
6582
|
}
|
|
6579
6583
|
if (permissions.length === 0)
|
|
6580
6584
|
return {};
|
|
6581
6585
|
var reduced = permissions.reduce(function (result, next) {
|
|
6582
6586
|
var ret = Object.assign({}, result);
|
|
6583
|
-
for (var
|
|
6584
|
-
var
|
|
6587
|
+
for (var _k = 0, _l = Object.entries(next); _k < _l.length; _k++) {
|
|
6588
|
+
var _m = _l[_k], verb = _m[0], rights = _m[1];
|
|
6585
6589
|
if (verb in ret && ret[verb]) {
|
|
6586
6590
|
if (ret[verb] === '*')
|
|
6587
6591
|
continue;
|
|
@@ -6599,8 +6603,8 @@
|
|
|
6599
6603
|
typeof ret[verb] === 'object') {
|
|
6600
6604
|
// Both are objects (verb is 'update')
|
|
6601
6605
|
var mergedRights = ret[verb]; // because we've checked that typeof ret[verb] === 'object' and earlier that not ret[verb] === '*'.
|
|
6602
|
-
for (var
|
|
6603
|
-
var
|
|
6606
|
+
for (var _o = 0, _p = Object.entries(rights); _o < _p.length; _o++) {
|
|
6607
|
+
var _q = _p[_o], tableName = _q[0], tableRights = _q[1];
|
|
6604
6608
|
if (mergedRights[tableName] === '*')
|
|
6605
6609
|
continue;
|
|
6606
6610
|
if (tableRights === '*') {
|
|
@@ -6638,8 +6642,8 @@
|
|
|
6638
6642
|
var o = createSharedValueObservable(rxjs.combineLatest([
|
|
6639
6643
|
getInternalAccessControlObservable(db._novip),
|
|
6640
6644
|
getGlobalRolesObservable(db._novip),
|
|
6641
|
-
]).pipe(map(function (
|
|
6642
|
-
var
|
|
6645
|
+
]).pipe(map(function (_k) {
|
|
6646
|
+
var _l = _k[0], selfMembers = _l.selfMembers, realms = _l.realms, userId = _l.userId, globalRoles = _k[1];
|
|
6643
6647
|
return ({
|
|
6644
6648
|
selfMembers: selfMembers,
|
|
6645
6649
|
realms: realms,
|
|
@@ -6652,9 +6656,9 @@
|
|
|
6652
6656
|
userId: UNAUTHORIZED_USER.userId,
|
|
6653
6657
|
globalRoles: {},
|
|
6654
6658
|
});
|
|
6655
|
-
return mapValueObservable(o, function (
|
|
6656
|
-
var
|
|
6657
|
-
var selfMembers =
|
|
6659
|
+
return mapValueObservable(o, function (_k) {
|
|
6660
|
+
var _l;
|
|
6661
|
+
var selfMembers = _k.selfMembers, realms = _k.realms, userId = _k.userId, globalRoles = _k.globalRoles;
|
|
6658
6662
|
var rv = realms
|
|
6659
6663
|
.map(function (realm) {
|
|
6660
6664
|
var selfRealmMembers = selfMembers.filter(function (m) { return m.realmId === realm.realmId; });
|
|
@@ -6670,16 +6674,16 @@
|
|
|
6670
6674
|
: mergePermissions.apply(void 0, __spreadArray$1(__spreadArray$1([], directPermissionSets, false), rolePermissionSets, false)) });
|
|
6671
6675
|
})
|
|
6672
6676
|
.reduce(function (p, c) {
|
|
6673
|
-
var
|
|
6674
|
-
return (Object.assign(Object.assign({}, p), (
|
|
6675
|
-
}, (
|
|
6676
|
-
|
|
6677
|
+
var _k;
|
|
6678
|
+
return (Object.assign(Object.assign({}, p), (_k = {}, _k[c.realmId] = c, _k)));
|
|
6679
|
+
}, (_l = {},
|
|
6680
|
+
_l[userId] = {
|
|
6677
6681
|
realmId: userId,
|
|
6678
6682
|
owner: userId,
|
|
6679
6683
|
name: userId,
|
|
6680
6684
|
permissions: { manage: '*' },
|
|
6681
6685
|
},
|
|
6682
|
-
|
|
6686
|
+
_l));
|
|
6683
6687
|
return rv;
|
|
6684
6688
|
});
|
|
6685
6689
|
});
|
|
@@ -6692,8 +6696,8 @@
|
|
|
6692
6696
|
PermissionChecker.prototype.add = function () {
|
|
6693
6697
|
var _this_1 = this;
|
|
6694
6698
|
var tableNames = [];
|
|
6695
|
-
for (var
|
|
6696
|
-
tableNames[
|
|
6699
|
+
for (var _k = 0; _k < arguments.length; _k++) {
|
|
6700
|
+
tableNames[_k] = arguments[_k];
|
|
6697
6701
|
}
|
|
6698
6702
|
var _a;
|
|
6699
6703
|
// If user can manage the whole realm, return true.
|
|
@@ -6713,8 +6717,8 @@
|
|
|
6713
6717
|
};
|
|
6714
6718
|
PermissionChecker.prototype.update = function () {
|
|
6715
6719
|
var props = [];
|
|
6716
|
-
for (var
|
|
6717
|
-
props[
|
|
6720
|
+
for (var _k = 0; _k < arguments.length; _k++) {
|
|
6721
|
+
props[_k] = arguments[_k];
|
|
6718
6722
|
}
|
|
6719
6723
|
var _a, _b;
|
|
6720
6724
|
// If user is owner of this object, or if user can manage the whole realm, return true.
|
|
@@ -6776,11 +6780,11 @@
|
|
|
6776
6780
|
var membersByEmail = getCurrentUserEmitter(db._novip).pipe(rxjs.switchMap(function (currentUser) { return Dexie.liveQuery(function () { return db.members.where({ email: currentUser.email || '' }).toArray(); }); }));
|
|
6777
6781
|
var permissions = getPermissionsLookupObservable(db._novip);
|
|
6778
6782
|
var accessControl = getInternalAccessControlObservable(db._novip);
|
|
6779
|
-
return createSharedValueObservable(rxjs.combineLatest([membersByEmail, accessControl, permissions]).pipe(rxjs.map(function (
|
|
6780
|
-
var membersByEmail =
|
|
6783
|
+
return createSharedValueObservable(rxjs.combineLatest([membersByEmail, accessControl, permissions]).pipe(rxjs.map(function (_k) {
|
|
6784
|
+
var membersByEmail = _k[0], accessControl = _k[1], realmLookup = _k[2];
|
|
6781
6785
|
var reducer = function (result, m) {
|
|
6782
|
-
var
|
|
6783
|
-
return (Object.assign(Object.assign({}, result), (
|
|
6786
|
+
var _k;
|
|
6787
|
+
return (Object.assign(Object.assign({}, result), (_k = {}, _k[m.id] = Object.assign(Object.assign({}, m), { realm: realmLookup[m.realmId] }), _k)));
|
|
6784
6788
|
};
|
|
6785
6789
|
var emailMembersById = membersByEmail.reduce(reducer, {});
|
|
6786
6790
|
var membersById = accessControl.selfMembers.reduce(reducer, emailMembersById);
|
|
@@ -6809,16 +6813,16 @@
|
|
|
6809
6813
|
var localSyncWorker = null;
|
|
6810
6814
|
dexie.on('ready', function (dexie) { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
6811
6815
|
var error_5;
|
|
6812
|
-
return __generator$1(this, function (
|
|
6813
|
-
switch (
|
|
6816
|
+
return __generator$1(this, function (_k) {
|
|
6817
|
+
switch (_k.label) {
|
|
6814
6818
|
case 0:
|
|
6815
|
-
|
|
6819
|
+
_k.trys.push([0, 2, , 3]);
|
|
6816
6820
|
return [4 /*yield*/, onDbReady(dexie)];
|
|
6817
6821
|
case 1:
|
|
6818
|
-
|
|
6822
|
+
_k.sent();
|
|
6819
6823
|
return [3 /*break*/, 3];
|
|
6820
6824
|
case 2:
|
|
6821
|
-
error_5 =
|
|
6825
|
+
error_5 = _k.sent();
|
|
6822
6826
|
console.error(error_5);
|
|
6823
6827
|
return [3 /*break*/, 3];
|
|
6824
6828
|
case 3: return [2 /*return*/];
|
|
@@ -6840,7 +6844,7 @@
|
|
|
6840
6844
|
currentUserEmitter.next(UNAUTHORIZED_USER);
|
|
6841
6845
|
});
|
|
6842
6846
|
dexie.cloud = {
|
|
6843
|
-
version: '4.0.0-beta.
|
|
6847
|
+
version: '4.0.0-beta.19',
|
|
6844
6848
|
options: Object.assign({}, DEFAULT_OPTIONS),
|
|
6845
6849
|
schema: null,
|
|
6846
6850
|
serverState: null,
|
|
@@ -6858,16 +6862,16 @@
|
|
|
6858
6862
|
login: function (hint) {
|
|
6859
6863
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
6860
6864
|
var db;
|
|
6861
|
-
return __generator$1(this, function (
|
|
6862
|
-
switch (
|
|
6865
|
+
return __generator$1(this, function (_k) {
|
|
6866
|
+
switch (_k.label) {
|
|
6863
6867
|
case 0:
|
|
6864
6868
|
db = DexieCloudDB(dexie);
|
|
6865
6869
|
return [4 /*yield*/, db.cloud.sync()];
|
|
6866
6870
|
case 1:
|
|
6867
|
-
|
|
6871
|
+
_k.sent();
|
|
6868
6872
|
return [4 /*yield*/, login(db, hint)];
|
|
6869
6873
|
case 2:
|
|
6870
|
-
|
|
6874
|
+
_k.sent();
|
|
6871
6875
|
return [2 /*return*/];
|
|
6872
6876
|
}
|
|
6873
6877
|
});
|
|
@@ -6885,13 +6889,13 @@
|
|
|
6885
6889
|
}
|
|
6886
6890
|
updateSchemaFromOptions(dexie.cloud.schema, dexie.cloud.options);
|
|
6887
6891
|
},
|
|
6888
|
-
sync: function (
|
|
6889
|
-
var
|
|
6892
|
+
sync: function (_k) {
|
|
6893
|
+
var _l = _k === void 0 ? { wait: true, purpose: 'push' } : _k, wait = _l.wait, purpose = _l.purpose;
|
|
6890
6894
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
6891
6895
|
var db, syncState_1, newSyncState, syncState_2;
|
|
6892
6896
|
var _this_1 = this;
|
|
6893
|
-
return __generator$1(this, function (
|
|
6894
|
-
switch (
|
|
6897
|
+
return __generator$1(this, function (_k) {
|
|
6898
|
+
switch (_k.label) {
|
|
6895
6899
|
case 0:
|
|
6896
6900
|
if (wait === undefined)
|
|
6897
6901
|
wait = true;
|
|
@@ -6905,29 +6909,29 @@
|
|
|
6905
6909
|
(!syncState_1 || newSyncState.timestamp > syncState_1.timestamp); }), take(1))
|
|
6906
6910
|
.toPromise()];
|
|
6907
6911
|
case 1:
|
|
6908
|
-
newSyncState =
|
|
6912
|
+
newSyncState = _k.sent();
|
|
6909
6913
|
if (newSyncState === null || newSyncState === void 0 ? void 0 : newSyncState.error) {
|
|
6910
6914
|
throw new Error("Sync error: " + newSyncState.error);
|
|
6911
6915
|
}
|
|
6912
|
-
|
|
6916
|
+
_k.label = 2;
|
|
6913
6917
|
case 2: return [3 /*break*/, 6];
|
|
6914
6918
|
case 3: return [4 /*yield*/, isSyncNeeded(db)];
|
|
6915
6919
|
case 4:
|
|
6916
|
-
if (!
|
|
6920
|
+
if (!_k.sent()) return [3 /*break*/, 6];
|
|
6917
6921
|
syncState_2 = db.cloud.persistedSyncState.value;
|
|
6918
6922
|
triggerSync(db, purpose);
|
|
6919
6923
|
if (!wait) return [3 /*break*/, 6];
|
|
6920
6924
|
console.debug('db.cloud.login() is waiting for sync completion...');
|
|
6921
6925
|
return [4 /*yield*/, rxjs.from(Dexie.liveQuery(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
6922
6926
|
var syncNeeded, newSyncState;
|
|
6923
|
-
return __generator$1(this, function (
|
|
6924
|
-
switch (
|
|
6927
|
+
return __generator$1(this, function (_k) {
|
|
6928
|
+
switch (_k.label) {
|
|
6925
6929
|
case 0: return [4 /*yield*/, isSyncNeeded(db)];
|
|
6926
6930
|
case 1:
|
|
6927
|
-
syncNeeded =
|
|
6931
|
+
syncNeeded = _k.sent();
|
|
6928
6932
|
return [4 /*yield*/, db.getPersistedSyncState()];
|
|
6929
6933
|
case 2:
|
|
6930
|
-
newSyncState =
|
|
6934
|
+
newSyncState = _k.sent();
|
|
6931
6935
|
if ((newSyncState === null || newSyncState === void 0 ? void 0 : newSyncState.timestamp) !== (syncState_2 === null || syncState_2 === void 0 ? void 0 : syncState_2.timestamp) &&
|
|
6932
6936
|
(newSyncState === null || newSyncState === void 0 ? void 0 : newSyncState.error))
|
|
6933
6937
|
throw new Error("Sync error: " + newSyncState.error);
|
|
@@ -6938,9 +6942,9 @@
|
|
|
6938
6942
|
.pipe(filter(function (isNeeded) { return !isNeeded; }), take(1))
|
|
6939
6943
|
.toPromise()];
|
|
6940
6944
|
case 5:
|
|
6941
|
-
|
|
6945
|
+
_k.sent();
|
|
6942
6946
|
console.debug('Done waiting for sync completion because we have nothing to push anymore');
|
|
6943
|
-
|
|
6947
|
+
_k.label = 6;
|
|
6944
6948
|
case 6: return [2 /*return*/];
|
|
6945
6949
|
}
|
|
6946
6950
|
});
|
|
@@ -6951,8 +6955,8 @@
|
|
|
6951
6955
|
},
|
|
6952
6956
|
};
|
|
6953
6957
|
dexie.Version.prototype['_parseStoresSpec'] = Dexie__default["default"].override(dexie.Version.prototype['_parseStoresSpec'], function (origFunc) { return overrideParseStoresSpec(origFunc, dexie); });
|
|
6954
|
-
dexie.Table.prototype.newId = function (
|
|
6955
|
-
var
|
|
6958
|
+
dexie.Table.prototype.newId = function (_k) {
|
|
6959
|
+
var _l = _k === void 0 ? {} : _k, colocateWith = _l.colocateWith;
|
|
6956
6960
|
var shardKey = colocateWith && colocateWith.substr(colocateWith.length - 3);
|
|
6957
6961
|
return generateKey(dexie.cloud.schema[this.name].idPrefix || '', shardKey);
|
|
6958
6962
|
};
|
|
@@ -6967,20 +6971,22 @@
|
|
|
6967
6971
|
dexie.use(createImplicitPropSetterMiddleware(DexieCloudDB(dexie)));
|
|
6968
6972
|
dexie.use(createIdGenerationMiddleware(DexieCloudDB(dexie)));
|
|
6969
6973
|
function onDbReady(dexie) {
|
|
6970
|
-
var _a, _b, _c, _d, _e, _f;
|
|
6974
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
6971
6975
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
6972
|
-
var db, swRegistrations,
|
|
6976
|
+
var db, swRegistrations, _k, initiallySynced;
|
|
6973
6977
|
var _this_1 = this;
|
|
6974
|
-
return __generator$1(this, function (
|
|
6975
|
-
switch (
|
|
6978
|
+
return __generator$1(this, function (_l) {
|
|
6979
|
+
switch (_l.label) {
|
|
6976
6980
|
case 0:
|
|
6977
6981
|
closed = false; // As Dexie calls us, we are not closed anymore. Maybe reopened? Remember db.ready event is registered with sticky flag!
|
|
6978
6982
|
db = DexieCloudDB(dexie);
|
|
6979
6983
|
// Setup default GUI:
|
|
6980
|
-
if (
|
|
6984
|
+
if (typeof window !== 'undefined' && typeof document !== 'undefined') {
|
|
6981
6985
|
if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.customLoginGui)) {
|
|
6982
6986
|
subscriptions.push(setupDefaultGUI(dexie));
|
|
6983
6987
|
}
|
|
6988
|
+
}
|
|
6989
|
+
if (!db.cloud.isServiceWorkerDB) {
|
|
6984
6990
|
subscriptions.push(computeSyncState(db).subscribe(dexie.cloud.syncState));
|
|
6985
6991
|
}
|
|
6986
6992
|
//verifyConfig(db.cloud.options); Not needed (yet at least!)
|
|
@@ -6991,26 +6997,26 @@
|
|
|
6991
6997
|
if (!('serviceWorker' in navigator)) return [3 /*break*/, 2];
|
|
6992
6998
|
return [4 /*yield*/, navigator.serviceWorker.getRegistrations()];
|
|
6993
6999
|
case 1:
|
|
6994
|
-
|
|
7000
|
+
_k = _l.sent();
|
|
6995
7001
|
return [3 /*break*/, 3];
|
|
6996
7002
|
case 2:
|
|
6997
|
-
|
|
6998
|
-
|
|
7003
|
+
_k = [];
|
|
7004
|
+
_l.label = 3;
|
|
6999
7005
|
case 3:
|
|
7000
|
-
swRegistrations =
|
|
7006
|
+
swRegistrations = _k;
|
|
7001
7007
|
return [4 /*yield*/, db.transaction('rw', db.$syncState, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
7002
|
-
var
|
|
7003
|
-
return __generator$1(this, function (
|
|
7004
|
-
switch (
|
|
7008
|
+
var _h, _j, _k, options, schema, _l, persistedOptions, persistedSchema, persistedSyncState, newPersistedSchema, _m, _o, _p, table, tblSchema, newTblSchema;
|
|
7009
|
+
return __generator$1(this, function (_q) {
|
|
7010
|
+
switch (_q.label) {
|
|
7005
7011
|
case 0:
|
|
7006
|
-
|
|
7012
|
+
_k = db.cloud, options = _k.options, schema = _k.schema;
|
|
7007
7013
|
return [4 /*yield*/, Promise.all([
|
|
7008
7014
|
db.getOptions(),
|
|
7009
7015
|
db.getSchema(),
|
|
7010
7016
|
db.getPersistedSyncState(),
|
|
7011
7017
|
])];
|
|
7012
7018
|
case 1:
|
|
7013
|
-
|
|
7019
|
+
_l = _q.sent(), persistedOptions = _l[0], persistedSchema = _l[1], persistedSyncState = _l[2];
|
|
7014
7020
|
if (!!configuredProgramatically) return [3 /*break*/, 2];
|
|
7015
7021
|
// Options not specified programatically (use case for SW!)
|
|
7016
7022
|
// Take persisted options:
|
|
@@ -7024,10 +7030,10 @@
|
|
|
7024
7030
|
throw new Error("Internal error"); // options cannot be null if configuredProgramatically is set.
|
|
7025
7031
|
return [4 /*yield*/, db.$syncState.put(options, 'options')];
|
|
7026
7032
|
case 3:
|
|
7027
|
-
|
|
7028
|
-
|
|
7033
|
+
_q.sent();
|
|
7034
|
+
_q.label = 4;
|
|
7029
7035
|
case 4:
|
|
7030
|
-
if (((
|
|
7036
|
+
if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) &&
|
|
7031
7037
|
'serviceWorker' in navigator &&
|
|
7032
7038
|
swRegistrations.length > 0 &&
|
|
7033
7039
|
!DISABLE_SERVICEWORKER_STRATEGY) {
|
|
@@ -7041,7 +7047,8 @@
|
|
|
7041
7047
|
// Not configured for using service worker or no service worker
|
|
7042
7048
|
// registration exists. Don't rely on service worker to do any job.
|
|
7043
7049
|
// Use LocalSyncWorker instead.
|
|
7044
|
-
if (((
|
|
7050
|
+
if (((_j = db.cloud.options) === null || _j === void 0 ? void 0 : _j.tryUseServiceWorker) &&
|
|
7051
|
+
!db.cloud.isServiceWorkerDB) {
|
|
7045
7052
|
console.debug('dexie-cloud-addon: Not using service worker.', swRegistrations.length === 0
|
|
7046
7053
|
? 'No SW registrations found.'
|
|
7047
7054
|
: 'serviceWorker' in navigator && DISABLE_SERVICEWORKER_STRATEGY
|
|
@@ -7061,8 +7068,8 @@
|
|
|
7061
7068
|
if (!(!persistedSchema ||
|
|
7062
7069
|
JSON.stringify(persistedSchema) !== JSON.stringify(schema))) return [3 /*break*/, 7];
|
|
7063
7070
|
newPersistedSchema = persistedSchema || {};
|
|
7064
|
-
for (
|
|
7065
|
-
|
|
7071
|
+
for (_m = 0, _o = Object.entries(schema); _m < _o.length; _m++) {
|
|
7072
|
+
_p = _o[_m], table = _p[0], tblSchema = _p[1];
|
|
7066
7073
|
newTblSchema = newPersistedSchema[table];
|
|
7067
7074
|
if (!newTblSchema) {
|
|
7068
7075
|
newPersistedSchema[table] = Object.assign({}, tblSchema);
|
|
@@ -7075,17 +7082,17 @@
|
|
|
7075
7082
|
}
|
|
7076
7083
|
return [4 /*yield*/, db.$syncState.put(newPersistedSchema, 'schema')];
|
|
7077
7084
|
case 6:
|
|
7078
|
-
|
|
7085
|
+
_q.sent();
|
|
7079
7086
|
// Make sure persisted table prefixes are being used instead of computed ones:
|
|
7080
7087
|
// Let's assign all props as the newPersistedSchems should be what we should be working with.
|
|
7081
7088
|
Object.assign(schema, newPersistedSchema);
|
|
7082
|
-
|
|
7089
|
+
_q.label = 7;
|
|
7083
7090
|
case 7: return [2 /*return*/, persistedSyncState === null || persistedSyncState === void 0 ? void 0 : persistedSyncState.initiallySynced];
|
|
7084
7091
|
}
|
|
7085
7092
|
});
|
|
7086
7093
|
}); })];
|
|
7087
7094
|
case 4:
|
|
7088
|
-
initiallySynced =
|
|
7095
|
+
initiallySynced = _l.sent();
|
|
7089
7096
|
if (initiallySynced) {
|
|
7090
7097
|
db.setInitiallySynced(true);
|
|
7091
7098
|
}
|
|
@@ -7093,13 +7100,13 @@
|
|
|
7093
7100
|
if (!(((_b = db.cloud.options) === null || _b === void 0 ? void 0 : _b.databaseUrl) && !initiallySynced)) return [3 /*break*/, 6];
|
|
7094
7101
|
return [4 /*yield*/, performInitialSync(db, db.cloud.options, db.cloud.schema)];
|
|
7095
7102
|
case 5:
|
|
7096
|
-
|
|
7103
|
+
_l.sent();
|
|
7097
7104
|
db.setInitiallySynced(true);
|
|
7098
|
-
|
|
7105
|
+
_l.label = 6;
|
|
7099
7106
|
case 6:
|
|
7100
7107
|
// Manage CurrentUser observable:
|
|
7101
7108
|
throwIfClosed();
|
|
7102
|
-
if (!!
|
|
7109
|
+
if (!!db.cloud.isServiceWorkerDB) return [3 /*break*/, 8];
|
|
7103
7110
|
subscriptions.push(Dexie.liveQuery(function () { return db.getCurrentUser(); }).subscribe(currentUserEmitter));
|
|
7104
7111
|
// Manage PersistendSyncState observable:
|
|
7105
7112
|
subscriptions.push(Dexie.liveQuery(function () { return db.getPersistedSyncState(); }).subscribe(db.cloud.persistedSyncState));
|
|
@@ -7116,14 +7123,14 @@
|
|
|
7116
7123
|
// with things from the database and not just the default values.
|
|
7117
7124
|
// This is so that when db.open() completes, user should be safe
|
|
7118
7125
|
// to subscribe to these observables and get actual data.
|
|
7119
|
-
|
|
7120
|
-
|
|
7126
|
+
_l.sent();
|
|
7127
|
+
_l.label = 8;
|
|
7121
7128
|
case 8:
|
|
7122
7129
|
if (!((_c = db.cloud.options) === null || _c === void 0 ? void 0 : _c.requireAuth)) return [3 /*break*/, 10];
|
|
7123
7130
|
return [4 /*yield*/, login(db)];
|
|
7124
7131
|
case 9:
|
|
7125
|
-
|
|
7126
|
-
|
|
7132
|
+
_l.sent();
|
|
7133
|
+
_l.label = 10;
|
|
7127
7134
|
case 10:
|
|
7128
7135
|
if (localSyncWorker)
|
|
7129
7136
|
localSyncWorker.stop();
|
|
@@ -7135,7 +7142,7 @@
|
|
|
7135
7142
|
}
|
|
7136
7143
|
else if (((_e = db.cloud.options) === null || _e === void 0 ? void 0 : _e.databaseUrl) &&
|
|
7137
7144
|
db.cloud.schema &&
|
|
7138
|
-
!
|
|
7145
|
+
!db.cloud.isServiceWorkerDB) {
|
|
7139
7146
|
// There's no SW. Start SyncWorker instead.
|
|
7140
7147
|
localSyncWorker = LocalSyncWorker(db, db.cloud.options, db.cloud.schema);
|
|
7141
7148
|
localSyncWorker.start();
|
|
@@ -7143,7 +7150,7 @@
|
|
|
7143
7150
|
}
|
|
7144
7151
|
// Listen to online event and do sync.
|
|
7145
7152
|
throwIfClosed();
|
|
7146
|
-
if (!
|
|
7153
|
+
if (!db.cloud.isServiceWorkerDB) {
|
|
7147
7154
|
subscriptions.push(rxjs.fromEvent(self, 'online').subscribe(function () {
|
|
7148
7155
|
console.debug('online!');
|
|
7149
7156
|
db.syncStateChangedEvent.next({
|
|
@@ -7157,10 +7164,10 @@
|
|
|
7157
7164
|
});
|
|
7158
7165
|
}));
|
|
7159
7166
|
}
|
|
7160
|
-
// Connect WebSocket
|
|
7161
|
-
if (
|
|
7162
|
-
!
|
|
7163
|
-
|
|
7167
|
+
// Connect WebSocket unless we
|
|
7168
|
+
if (((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl) &&
|
|
7169
|
+
!((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.disableWebSocket) &&
|
|
7170
|
+
!IS_SERVICE_WORKER) {
|
|
7164
7171
|
subscriptions.push(connectWebSocket(db));
|
|
7165
7172
|
}
|
|
7166
7173
|
return [2 /*return*/];
|
|
@@ -7169,7 +7176,7 @@
|
|
|
7169
7176
|
});
|
|
7170
7177
|
}
|
|
7171
7178
|
}
|
|
7172
|
-
dexieCloud.version = '4.0.0-beta.
|
|
7179
|
+
dexieCloud.version = '4.0.0-beta.19';
|
|
7173
7180
|
Dexie__default["default"].Cloud = dexieCloud;
|
|
7174
7181
|
|
|
7175
7182
|
exports["default"] = dexieCloud;
|