dexie-cloud-addon 4.0.0-beta.15 → 4.0.0-beta.16
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 +96 -36
- 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 +95 -35
- 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 +94 -31
- 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 +4 -1
- package/dist/types/DexieCloudEntity.d.ts +8 -0
- package/dist/types/WSObservable.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/getGlobalRolesObservable.d.ts +5 -0
- package/dist/types/getInvitesObservable.d.ts +1 -1
- 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 +94 -31
- 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 +95 -35
- 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 +93 -33
- package/dist/umd-modern/dexie-cloud-addon.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DexieCloudOptions } from './DexieCloudOptions';
|
|
2
|
-
import { DexieCloudSchema } from 'dexie-cloud-common';
|
|
2
|
+
import { DBRealmRole, DexieCloudSchema } from 'dexie-cloud-common';
|
|
3
3
|
import { UserLogin } from './db/entities/UserLogin';
|
|
4
4
|
import * as Rx from 'rxjs';
|
|
5
5
|
import { PersistedSyncState } from './db/entities/PersistedSyncState';
|
|
@@ -22,6 +22,9 @@ export interface DexieCloudAPI {
|
|
|
22
22
|
persistedSyncState: Rx.BehaviorSubject<PersistedSyncState | undefined>;
|
|
23
23
|
userInteraction: Rx.BehaviorSubject<DXCUserInteraction | undefined>;
|
|
24
24
|
invites: Rx.Observable<Invite[]>;
|
|
25
|
+
roles: Rx.Observable<{
|
|
26
|
+
[roleName: string]: DBRealmRole;
|
|
27
|
+
}>;
|
|
25
28
|
usingServiceWorker?: boolean;
|
|
26
29
|
/** Login using Dexie Cloud OTP or Demo user.
|
|
27
30
|
*
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import Dexie, { Entity, IndexableType, OwnClonableProperties, TableProp } from 'dexie';
|
|
2
|
+
export declare class DexieCloudEntity<DexieSubClass extends Dexie = Dexie> extends Entity<DexieSubClass> {
|
|
3
|
+
realmId: string;
|
|
4
|
+
owner: string;
|
|
5
|
+
can(...args: [verb: 'add', table: TableProp<DexieSubClass> | string] | [verb: 'update', ...fields: (keyof OwnClonableProperties<this>)[]] | [verb: 'delete']): boolean;
|
|
6
|
+
$id(): IndexableType;
|
|
7
|
+
isRealm(): boolean;
|
|
8
|
+
}
|
|
@@ -61,6 +61,7 @@ export declare class WSConnection extends Subscription {
|
|
|
61
61
|
constructor(databaseUrl: string, rev: string, realmSetHash: string, clientIdentity: string, token: string | undefined, tokenExpiration: Date | undefined, subscriber: Subscriber<WSConnectionMsg>, messageProducer: Observable<WSClientToServerMsg>, webSocketStatus: BehaviorSubject<DXCWebSocketStatus>);
|
|
62
62
|
private teardown;
|
|
63
63
|
private disconnect;
|
|
64
|
+
reconnecting: boolean;
|
|
64
65
|
reconnect(): void;
|
|
65
66
|
connect(): Promise<void>;
|
|
66
67
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare type WebSocketStatus = "not-started" | "connecting" | "connected" | "error" | "asleep";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Dexie from 'dexie';
|
|
2
|
+
import { DBPermissionSet, DBRealm, DBRealmMember } from 'dexie-cloud-common';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { UserLogin } from './db/entities/UserLogin';
|
|
5
|
+
export declare function createMyMembersObservable(db: Dexie, currentUserObservable: Observable<UserLogin>): Observable<{
|
|
6
|
+
invites: Array<DBRealmMember & {
|
|
7
|
+
realm: DBRealm;
|
|
8
|
+
}>;
|
|
9
|
+
permissions: {
|
|
10
|
+
[realmId: string]: DBRealm & {
|
|
11
|
+
permissions: DBPermissionSet;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
}>;
|
|
@@ -4,7 +4,7 @@ export declare const getInvitesObservable: (x: Dexie) => import("./mapValueObser
|
|
|
4
4
|
realm: import("dexie-cloud-common").DBRealm & {
|
|
5
5
|
permissions: import("dexie-cloud-common").DBPermissionSet;
|
|
6
6
|
};
|
|
7
|
-
id
|
|
7
|
+
id: string;
|
|
8
8
|
userId?: string | undefined;
|
|
9
9
|
email?: string | undefined;
|
|
10
10
|
name?: string | undefined;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
import { SWBroadcastChannel } from "./SWBroadcastChannel";
|
|
3
|
+
export declare class BroadcastedAndLocalEvent<T> extends Observable<T> {
|
|
4
|
+
name: string;
|
|
5
|
+
bc: BroadcastChannel | SWBroadcastChannel;
|
|
6
|
+
constructor(name: string);
|
|
7
|
+
next(message: T): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getVisibilityStateObservable(): import("rxjs").Observable<VisibilityState>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import Dexie from 'dexie';
|
|
2
|
+
import { DBPermissionSet, DBRealm } from 'dexie-cloud-common';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
export declare type PermissionsLookupObservable = Observable<{
|
|
5
|
+
[realmId: string]: DBRealm & {
|
|
6
|
+
permissions: DBPermissionSet;
|
|
7
|
+
};
|
|
8
|
+
}>;
|
|
9
|
+
export declare const getPermissionsLookupObservable: (x: Dexie) => PermissionsLookupObservable;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Dexie from 'dexie';
|
|
2
|
+
import { DBPermissionSet, DBRealm, DBRealmMember } from 'dexie-cloud-common';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { UserLogin } from './db/entities/UserLogin';
|
|
5
|
+
export declare function createMyMembersObservable(db: Dexie, currentUserObservable: Observable<UserLogin>): Observable<{
|
|
6
|
+
invites: Array<DBRealmMember & {
|
|
7
|
+
realm: DBRealm;
|
|
8
|
+
}>;
|
|
9
|
+
permissions: {
|
|
10
|
+
[realmId: string]: DBRealm & {
|
|
11
|
+
permissions: DBPermissionSet;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { DBCoreSchema } from 'dexie';
|
|
2
|
+
import { DBOperationsSet } from 'dexie-cloud-common';
|
|
3
|
+
import { UserLogin } from '../db/entities/UserLogin';
|
|
4
|
+
export declare function encodePrimaryKeys(schema: DBCoreSchema, currentUser: UserLogin, changes: DBOperationsSet): DBOperationsSet;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { DexieCloudDB } from '../db/DexieCloudDB';
|
|
2
|
+
import { ChangesFromServerMessage } from '../WSObservable';
|
|
3
|
+
export declare function syncServerToClientOnly(db: DexieCloudDB, { baseRev, newRev, changes, realmSetHash }: ChangesFromServerMessage): import("rxjs").Observable<void>;
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare type LoginState = LoginStateSilent | LoginStateInteraction | LoginStateError;
|
|
2
|
+
export interface LoginStateSilent {
|
|
3
|
+
type: 'silent';
|
|
4
|
+
}
|
|
5
|
+
export declare type LoginStateInteraction = (Alert | EmailRequested | OTPRequested) & {
|
|
6
|
+
type: 'interaction';
|
|
7
|
+
alerts?: {
|
|
8
|
+
type: 'error' | 'warning' | 'info';
|
|
9
|
+
message: string;
|
|
10
|
+
}[];
|
|
11
|
+
isWorking?: boolean;
|
|
12
|
+
onSubmit: (params: LoginPromptReply) => void;
|
|
13
|
+
onCancel: () => void;
|
|
14
|
+
};
|
|
15
|
+
export declare type LoginPromptReply = {
|
|
16
|
+
email?: string;
|
|
17
|
+
otp?: string;
|
|
18
|
+
name?: string;
|
|
19
|
+
};
|
|
20
|
+
export interface LoginStateError {
|
|
21
|
+
type: 'error';
|
|
22
|
+
message: string;
|
|
23
|
+
}
|
|
24
|
+
interface Alert {
|
|
25
|
+
interactionType: 'alert';
|
|
26
|
+
alerts: {
|
|
27
|
+
type: 'error' | 'warning' | 'info';
|
|
28
|
+
message: string;
|
|
29
|
+
}[];
|
|
30
|
+
submitText: 'OK';
|
|
31
|
+
}
|
|
32
|
+
interface EmailRequested {
|
|
33
|
+
interactionType: 'emailRequested';
|
|
34
|
+
submitText: 'Send OTP';
|
|
35
|
+
}
|
|
36
|
+
interface OTPRequested {
|
|
37
|
+
interactionType: 'otpRequested';
|
|
38
|
+
isWorking: boolean;
|
|
39
|
+
submitText: 'Login';
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare type SyncConnectionStatus = "not-started" | "connecting" | "connected" | "disconnected" | "error" | "offline";
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
*
|
|
109
109
|
* ==========================================================================
|
|
110
110
|
*
|
|
111
|
-
* Version 4.0.0-beta.
|
|
111
|
+
* Version 4.0.0-beta.16, Fri Apr 01 2022
|
|
112
112
|
*
|
|
113
113
|
* https://dexie.org
|
|
114
114
|
*
|
|
@@ -5462,7 +5462,7 @@
|
|
|
5462
5462
|
});
|
|
5463
5463
|
});
|
|
5464
5464
|
}
|
|
5465
|
-
var USER_INACTIVITY_TIMEOUT =
|
|
5465
|
+
var USER_INACTIVITY_TIMEOUT = 180000; // 3 minutes
|
|
5466
5466
|
var INACTIVE_WAIT_TIME = 20000;
|
|
5467
5467
|
// This observable will be emitted to later down....
|
|
5468
5468
|
var userIsActive = new rxjs.BehaviorSubject(true);
|
|
@@ -5476,9 +5476,12 @@
|
|
|
5476
5476
|
// for just a short time.
|
|
5477
5477
|
var userIsReallyActive = new rxjs.BehaviorSubject(true);
|
|
5478
5478
|
userIsActive
|
|
5479
|
-
.pipe(switchMap(function (isActive) {
|
|
5480
|
-
|
|
5481
|
-
|
|
5479
|
+
.pipe(switchMap(function (isActive) {
|
|
5480
|
+
//console.debug('SyncStatus: DUBB: isActive changed to', isActive);
|
|
5481
|
+
return isActive
|
|
5482
|
+
? rxjs.of(true)
|
|
5483
|
+
: rxjs.of(false).pipe(delay(INACTIVE_WAIT_TIME));
|
|
5484
|
+
}), distinctUntilChanged())
|
|
5482
5485
|
.subscribe(userIsReallyActive);
|
|
5483
5486
|
//
|
|
5484
5487
|
// First create some corner-stone observables to build the flow on
|
|
@@ -5493,7 +5496,7 @@
|
|
|
5493
5496
|
var documentBecomesVisible = visibilityStateIsChanged.pipe(filter(function () { return document.visibilityState === 'visible'; }));
|
|
5494
5497
|
// Any of various user-activity-related events happen:
|
|
5495
5498
|
var userDoesSomething = typeof window !== 'undefined'
|
|
5496
|
-
? rxjs.merge(documentBecomesVisible, rxjs.fromEvent(window, 'mousemove'), rxjs.fromEvent(window, 'keydown'), rxjs.fromEvent(window, 'wheel'), rxjs.fromEvent(window, 'touchmove'))
|
|
5499
|
+
? rxjs.merge(documentBecomesVisible, rxjs.fromEvent(window, 'mousedown'), rxjs.fromEvent(window, 'mousemove'), rxjs.fromEvent(window, 'keydown'), rxjs.fromEvent(window, 'wheel'), rxjs.fromEvent(window, 'touchmove'))
|
|
5497
5500
|
: rxjs.of({});
|
|
5498
5501
|
if (typeof document !== 'undefined') {
|
|
5499
5502
|
//
|
|
@@ -5548,6 +5551,7 @@
|
|
|
5548
5551
|
function WSConnection(databaseUrl, rev, realmSetHash, clientIdentity, token, tokenExpiration, subscriber, messageProducer, webSocketStatus) {
|
|
5549
5552
|
var _this_1 = _super_1.call(this, function () { return _this_1.teardown(); }) || this;
|
|
5550
5553
|
_this_1.id = ++counter;
|
|
5554
|
+
_this_1.reconnecting = false;
|
|
5551
5555
|
console.debug('New WebSocket Connection', _this_1.id, token ? 'authorized' : 'unauthorized');
|
|
5552
5556
|
_this_1.databaseUrl = databaseUrl;
|
|
5553
5557
|
_this_1.rev = rev;
|
|
@@ -5568,7 +5572,7 @@
|
|
|
5568
5572
|
this.disconnect();
|
|
5569
5573
|
};
|
|
5570
5574
|
WSConnection.prototype.disconnect = function () {
|
|
5571
|
-
this.webSocketStatus.next(
|
|
5575
|
+
this.webSocketStatus.next('disconnected');
|
|
5572
5576
|
if (this.pinger) {
|
|
5573
5577
|
clearInterval(this.pinger);
|
|
5574
5578
|
this.pinger = null;
|
|
@@ -5586,17 +5590,25 @@
|
|
|
5586
5590
|
}
|
|
5587
5591
|
};
|
|
5588
5592
|
WSConnection.prototype.reconnect = function () {
|
|
5589
|
-
this
|
|
5590
|
-
this.
|
|
5593
|
+
var _this_1 = this;
|
|
5594
|
+
if (this.reconnecting)
|
|
5595
|
+
return;
|
|
5596
|
+
this.reconnecting = true;
|
|
5597
|
+
try {
|
|
5598
|
+
this.disconnect();
|
|
5599
|
+
}
|
|
5600
|
+
catch (_e) { }
|
|
5601
|
+
this.connect()
|
|
5602
|
+
.catch(function () { })
|
|
5603
|
+
.then(function () { return (_this_1.reconnecting = false); }); // finally()
|
|
5591
5604
|
};
|
|
5592
5605
|
WSConnection.prototype.connect = function () {
|
|
5593
5606
|
return __awaiter$1(this, void 0, void 0, function () {
|
|
5594
|
-
var wsUrl, searchParams, ws;
|
|
5607
|
+
var wsUrl, searchParams, ws, everConnected_1;
|
|
5595
5608
|
var _this_1 = this;
|
|
5596
5609
|
return __generator$1(this, function (_e) {
|
|
5597
5610
|
switch (_e.label) {
|
|
5598
5611
|
case 0:
|
|
5599
|
-
this.webSocketStatus.next("connecting");
|
|
5600
5612
|
this.lastServerActivity = new Date();
|
|
5601
5613
|
if (this.pauseUntil && this.pauseUntil > new Date()) {
|
|
5602
5614
|
console.debug('WS not reconnecting just yet', {
|
|
@@ -5611,12 +5623,14 @@
|
|
|
5611
5623
|
if (!this.databaseUrl)
|
|
5612
5624
|
throw new Error("Cannot connect without a database URL");
|
|
5613
5625
|
if (this.closed) {
|
|
5626
|
+
//console.debug('SyncStatus: DUBB: Ooops it was closed!');
|
|
5614
5627
|
return [2 /*return*/];
|
|
5615
5628
|
}
|
|
5616
5629
|
if (this.tokenExpiration && this.tokenExpiration < new Date()) {
|
|
5617
5630
|
this.subscriber.error(new TokenExpiredError()); // Will be handled in connectWebSocket.ts.
|
|
5618
5631
|
return [2 /*return*/];
|
|
5619
5632
|
}
|
|
5633
|
+
this.webSocketStatus.next('connecting');
|
|
5620
5634
|
this.pinger = setInterval(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
|
|
5621
5635
|
var _this_1 = this;
|
|
5622
5636
|
return __generator$1(this, function (_e) {
|
|
@@ -5666,7 +5680,7 @@
|
|
|
5666
5680
|
searchParams = new URLSearchParams();
|
|
5667
5681
|
if (this.subscriber.closed)
|
|
5668
5682
|
return [2 /*return*/];
|
|
5669
|
-
searchParams.set('v',
|
|
5683
|
+
searchParams.set('v', '2');
|
|
5670
5684
|
searchParams.set('rev', this.rev);
|
|
5671
5685
|
searchParams.set('realmsHash', this.realmSetHash);
|
|
5672
5686
|
searchParams.set('clientId', this.clientIdentity);
|
|
@@ -5707,17 +5721,23 @@
|
|
|
5707
5721
|
_e.label = 1;
|
|
5708
5722
|
case 1:
|
|
5709
5723
|
_e.trys.push([1, 3, , 4]);
|
|
5724
|
+
everConnected_1 = false;
|
|
5710
5725
|
return [4 /*yield*/, new Promise(function (resolve, reject) {
|
|
5711
5726
|
ws.onopen = function (event) {
|
|
5712
5727
|
console.debug('dexie-cloud WebSocket onopen');
|
|
5728
|
+
everConnected_1 = true;
|
|
5713
5729
|
resolve(null);
|
|
5714
5730
|
};
|
|
5715
5731
|
ws.onerror = function (event) {
|
|
5716
|
-
|
|
5717
|
-
|
|
5718
|
-
|
|
5719
|
-
|
|
5720
|
-
|
|
5732
|
+
if (!everConnected_1) {
|
|
5733
|
+
var error = event.error || new Error('WebSocket Error');
|
|
5734
|
+
_this_1.subscriber.error(error);
|
|
5735
|
+
_this_1.webSocketStatus.next('error');
|
|
5736
|
+
reject(error);
|
|
5737
|
+
}
|
|
5738
|
+
else {
|
|
5739
|
+
_this_1.reconnect();
|
|
5740
|
+
}
|
|
5721
5741
|
};
|
|
5722
5742
|
})];
|
|
5723
5743
|
case 2:
|
|
@@ -5725,8 +5745,9 @@
|
|
|
5725
5745
|
this.messageProducerSubscription = this.messageProducer.subscribe(function (msg) {
|
|
5726
5746
|
var _e;
|
|
5727
5747
|
if (!_this_1.closed) {
|
|
5728
|
-
if (msg.type === 'ready' &&
|
|
5729
|
-
_this_1.webSocketStatus.
|
|
5748
|
+
if (msg.type === 'ready' &&
|
|
5749
|
+
_this_1.webSocketStatus.value !== 'connected') {
|
|
5750
|
+
_this_1.webSocketStatus.next('connected');
|
|
5730
5751
|
}
|
|
5731
5752
|
(_e = _this_1.ws) === null || _e === void 0 ? void 0 : _e.send(TSON.stringify(msg));
|
|
5732
5753
|
}
|
|
@@ -5835,7 +5856,10 @@
|
|
|
5835
5856
|
else {
|
|
5836
5857
|
return rxjs.throwError(error);
|
|
5837
5858
|
}
|
|
5838
|
-
}), catchError(function (error) {
|
|
5859
|
+
}), catchError(function (error) {
|
|
5860
|
+
db.cloud.webSocketStatus.next("error");
|
|
5861
|
+
return rxjs.from(waitAndReconnectWhenUserDoesSomething(error)).pipe(switchMap(function () { return createObservable(); }));
|
|
5862
|
+
}));
|
|
5839
5863
|
}
|
|
5840
5864
|
return createObservable().subscribe(function (msg) {
|
|
5841
5865
|
if (msg) {
|
|
@@ -6476,6 +6500,21 @@
|
|
|
6476
6500
|
rv.getValue = function () { return currentValue; };
|
|
6477
6501
|
return rv;
|
|
6478
6502
|
}
|
|
6503
|
+
var getGlobalRolesObservable = associate(function (db) {
|
|
6504
|
+
return createSharedValueObservable(Dexie.liveQuery(function () { return db.roles
|
|
6505
|
+
.where({ realmId: 'rlm-public' })
|
|
6506
|
+
.toArray()
|
|
6507
|
+
.then(function (roles) {
|
|
6508
|
+
var rv = {};
|
|
6509
|
+
for (var _e = 0, _f = roles
|
|
6510
|
+
.slice()
|
|
6511
|
+
.sort(function (a, b) { return (a.sortOrder || 0) - (b.sortOrder || 0); }); _e < _f.length; _e++) {
|
|
6512
|
+
var role = _f[_e];
|
|
6513
|
+
rv[role.name] = role;
|
|
6514
|
+
}
|
|
6515
|
+
return rv;
|
|
6516
|
+
}); }), {});
|
|
6517
|
+
});
|
|
6479
6518
|
var getCurrentUserEmitter = associate(function (db) { return new rxjs.BehaviorSubject(UNAUTHORIZED_USER); });
|
|
6480
6519
|
var getInternalAccessControlObservable = associate(function (db) {
|
|
6481
6520
|
return createSharedValueObservable(getCurrentUserEmitter(db._novip).pipe(switchMap(function (currentUser) { return Dexie.liveQuery(function () { return db.transaction('r', 'realms', 'members', function () { return Promise.all([
|
|
@@ -6578,17 +6617,40 @@
|
|
|
6578
6617
|
return reduced;
|
|
6579
6618
|
}
|
|
6580
6619
|
var getPermissionsLookupObservable = associate(function (db) {
|
|
6581
|
-
var o =
|
|
6620
|
+
var o = createSharedValueObservable(rxjs.combineLatest([
|
|
6621
|
+
getInternalAccessControlObservable(db._novip),
|
|
6622
|
+
getGlobalRolesObservable(db._novip),
|
|
6623
|
+
]).pipe(map(function (_e) {
|
|
6624
|
+
var _f = _e[0], selfMembers = _f.selfMembers, realms = _f.realms, userId = _f.userId, globalRoles = _e[1];
|
|
6625
|
+
return ({
|
|
6626
|
+
selfMembers: selfMembers,
|
|
6627
|
+
realms: realms,
|
|
6628
|
+
userId: userId,
|
|
6629
|
+
globalRoles: globalRoles,
|
|
6630
|
+
});
|
|
6631
|
+
})), {
|
|
6632
|
+
selfMembers: [],
|
|
6633
|
+
realms: [],
|
|
6634
|
+
userId: UNAUTHORIZED_USER.userId,
|
|
6635
|
+
globalRoles: {},
|
|
6636
|
+
});
|
|
6582
6637
|
return mapValueObservable(o, function (_e) {
|
|
6583
6638
|
var _f;
|
|
6584
|
-
var selfMembers = _e.selfMembers, realms = _e.realms, userId = _e.userId;
|
|
6639
|
+
var selfMembers = _e.selfMembers, realms = _e.realms, userId = _e.userId, globalRoles = _e.globalRoles;
|
|
6585
6640
|
var rv = realms
|
|
6586
|
-
.map(function (realm) {
|
|
6587
|
-
|
|
6588
|
-
|
|
6589
|
-
|
|
6590
|
-
|
|
6591
|
-
|
|
6641
|
+
.map(function (realm) {
|
|
6642
|
+
var selfRealmMembers = selfMembers.filter(function (m) { return m.realmId === realm.realmId; });
|
|
6643
|
+
var directPermissionSets = selfRealmMembers
|
|
6644
|
+
.map(function (m) { return m.permissions; })
|
|
6645
|
+
.filter(function (p) { return p; });
|
|
6646
|
+
var rolePermissionSets = flatten(selfRealmMembers.map(function (m) { return m.roles; }).filter(function (roleName) { return roleName; }))
|
|
6647
|
+
.map(function (role) { return globalRoles[role]; })
|
|
6648
|
+
.filter(function (role) { return role; })
|
|
6649
|
+
.map(function (role) { return role.permissions; });
|
|
6650
|
+
return __assign(__assign({}, realm), { permissions: realm.owner === userId
|
|
6651
|
+
? { manage: '*' }
|
|
6652
|
+
: mergePermissions.apply(void 0, __spreadArray$1(__spreadArray$1([], directPermissionSets, false), rolePermissionSets, false)) });
|
|
6653
|
+
})
|
|
6592
6654
|
.reduce(function (p, c) {
|
|
6593
6655
|
var _e;
|
|
6594
6656
|
return (__assign(__assign({}, p), (_e = {}, _e[c.realmId] = c, _e)));
|
|
@@ -6686,7 +6748,7 @@
|
|
|
6686
6748
|
var realm = permissionsLookup[realmId || dexie.cloud.currentUserId];
|
|
6687
6749
|
if (!realm)
|
|
6688
6750
|
return new PermissionChecker({}, tableName, !owner || owner === dexie.cloud.currentUserId);
|
|
6689
|
-
return new PermissionChecker(realm.permissions, tableName,
|
|
6751
|
+
return new PermissionChecker(realm.permissions, tableName, realmId === dexie.cloud.currentUserId || owner === dexie.cloud.currentUserId);
|
|
6690
6752
|
};
|
|
6691
6753
|
var o = source.pipe(map(mapper));
|
|
6692
6754
|
o.getValue = function () { return mapper(source.getValue()); };
|
|
@@ -6760,7 +6822,7 @@
|
|
|
6760
6822
|
currentUserEmitter.next(UNAUTHORIZED_USER);
|
|
6761
6823
|
});
|
|
6762
6824
|
dexie.cloud = {
|
|
6763
|
-
version: '4.0.0-beta.
|
|
6825
|
+
version: '4.0.0-beta.16',
|
|
6764
6826
|
options: __assign({}, DEFAULT_OPTIONS),
|
|
6765
6827
|
schema: null,
|
|
6766
6828
|
serverState: null,
|
|
@@ -6794,6 +6856,7 @@
|
|
|
6794
6856
|
});
|
|
6795
6857
|
},
|
|
6796
6858
|
invites: getInvitesObservable(dexie),
|
|
6859
|
+
roles: getGlobalRolesObservable(dexie),
|
|
6797
6860
|
configure: function (options) {
|
|
6798
6861
|
options = dexie.cloud.options = __assign(__assign({}, dexie.cloud.options), options);
|
|
6799
6862
|
configuredProgramatically = true;
|
|
@@ -7089,7 +7152,7 @@
|
|
|
7089
7152
|
});
|
|
7090
7153
|
}
|
|
7091
7154
|
}
|
|
7092
|
-
dexieCloud.version = '4.0.0-beta.
|
|
7155
|
+
dexieCloud.version = '4.0.0-beta.16';
|
|
7093
7156
|
Dexie__default["default"].Cloud = dexieCloud;
|
|
7094
7157
|
|
|
7095
7158
|
exports["default"] = dexieCloud;
|