@instantdb/core 1.0.50 → 1.0.51-branch-optional-async-storage.29876965683.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/Reactor.d.ts +15 -0
- package/dist/commonjs/Reactor.d.ts.map +1 -1
- package/dist/commonjs/Reactor.js +65 -0
- package/dist/commonjs/Reactor.js.map +1 -1
- package/dist/commonjs/clientTypes.d.ts +7 -0
- package/dist/commonjs/clientTypes.d.ts.map +1 -1
- package/dist/commonjs/clientTypes.js.map +1 -1
- package/dist/commonjs/index.d.ts +14 -2
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +14 -0
- package/dist/commonjs/index.js.map +1 -1
- package/dist/esm/Reactor.d.ts +15 -0
- package/dist/esm/Reactor.d.ts.map +1 -1
- package/dist/esm/Reactor.js +65 -0
- package/dist/esm/Reactor.js.map +1 -1
- package/dist/esm/clientTypes.d.ts +7 -0
- package/dist/esm/clientTypes.d.ts.map +1 -1
- package/dist/esm/clientTypes.js.map +1 -1
- package/dist/esm/index.d.ts +14 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +14 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/standalone/index.js +115 -54
- package/dist/standalone/index.umd.cjs +3 -3
- package/package.json +2 -2
- package/src/Reactor.js +72 -0
- package/src/clientTypes.ts +4 -0
- package/src/index.ts +17 -0
|
@@ -39,6 +39,15 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
|
|
|
39
39
|
attrsCbs: any[];
|
|
40
40
|
mutationErrorCbs: any[];
|
|
41
41
|
connectionStatusCbs: any[];
|
|
42
|
+
appStatusCbs: any[];
|
|
43
|
+
/**
|
|
44
|
+
* Carries the raw server status off the public type: `disabled` is an
|
|
45
|
+
* operator-level state we don't surface to apps.
|
|
46
|
+
* @type {import('./clientTypes.ts').AppStatusState & { status?: 'active' | 'read-only' | 'disabled' }}
|
|
47
|
+
*/
|
|
48
|
+
_appStatusState: import("./clientTypes.ts").AppStatusState & {
|
|
49
|
+
status?: "active" | "read-only" | "disabled";
|
|
50
|
+
};
|
|
42
51
|
config: any;
|
|
43
52
|
mutationDeferredStore: Map<any, any>;
|
|
44
53
|
_reconnectTimeoutId: null;
|
|
@@ -263,11 +272,17 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
|
|
|
263
272
|
subscribeAuth(cb: any): () => void;
|
|
264
273
|
getAuth(): Promise<import("./clientTypes.ts").User | null>;
|
|
265
274
|
subscribeConnectionStatus(cb: any): () => void;
|
|
275
|
+
/**
|
|
276
|
+
* @param {'active' | 'read-only' | 'disabled' | undefined} status
|
|
277
|
+
*/
|
|
278
|
+
_setAppStatus(status: "active" | "read-only" | "disabled" | undefined): void;
|
|
279
|
+
subscribeAppStatus(cb: any): () => void;
|
|
266
280
|
subscribeAttrs(cb: any): () => void;
|
|
267
281
|
notifyAuthSubs(user: any): void;
|
|
268
282
|
notifyMutationErrorSubs(error: any): void;
|
|
269
283
|
notifyAttrsSubs(): void;
|
|
270
284
|
notifyConnectionStatusSubs(status: any): void;
|
|
285
|
+
notifyAppStatusSubs(state: any): void;
|
|
271
286
|
setCurrentUser(user: any): Promise<void>;
|
|
272
287
|
getCurrentUserCached(): {
|
|
273
288
|
isLoading: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reactor.d.ts","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":";;;;;;;AA4DA,2CAA4C,sBAAsB,CAAC;AAyJnE;;GAEG;AACH,6BAFwD,UAAU,SAArD,OAAQ,eAAe,EAAE,eAAgB;
|
|
1
|
+
{"version":3,"file":"Reactor.d.ts","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":"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"}
|
package/dist/commonjs/Reactor.js
CHANGED
|
@@ -233,6 +233,13 @@ class Reactor {
|
|
|
233
233
|
attrsCbs = [];
|
|
234
234
|
mutationErrorCbs = [];
|
|
235
235
|
connectionStatusCbs = [];
|
|
236
|
+
appStatusCbs = [];
|
|
237
|
+
/**
|
|
238
|
+
* Carries the raw server status off the public type: `disabled` is an
|
|
239
|
+
* operator-level state we don't surface to apps.
|
|
240
|
+
* @type {import('./clientTypes.ts').AppStatusState & { status?: 'active' | 'read-only' | 'disabled' }}
|
|
241
|
+
*/
|
|
242
|
+
_appStatusState = { isLoading: true, isReadOnly: undefined };
|
|
236
243
|
config;
|
|
237
244
|
mutationDeferredStore = new Map();
|
|
238
245
|
_reconnectTimeoutId = null;
|
|
@@ -554,6 +561,7 @@ class Reactor {
|
|
|
554
561
|
case 'init-ok': {
|
|
555
562
|
this._setStatus(exports.STATUS.AUTHENTICATED);
|
|
556
563
|
this._reconnectTimeoutMs = 0;
|
|
564
|
+
this._setAppStatus(msg['app-status']?.status ?? 'active');
|
|
557
565
|
this._setAttrs(msg.attrs);
|
|
558
566
|
this._flushPendingMessages();
|
|
559
567
|
// (EPH): set session-id, so we know
|
|
@@ -760,6 +768,26 @@ class Reactor {
|
|
|
760
768
|
this._trySetRoomConnected(roomId, false);
|
|
761
769
|
break;
|
|
762
770
|
}
|
|
771
|
+
case 'app-status-changed': {
|
|
772
|
+
const prevStatus = this._appStatusState.status;
|
|
773
|
+
this._setAppStatus(msg.status);
|
|
774
|
+
if (msg.status === 'disabled' && prevStatus !== 'disabled') {
|
|
775
|
+
// The server has stopped serving reads; surface the typed error on
|
|
776
|
+
// every registered query immediately instead of waiting for the
|
|
777
|
+
// next round trip.
|
|
778
|
+
const error = {
|
|
779
|
+
message: 'This app is currently disabled.',
|
|
780
|
+
hint: { status: 'disabled' },
|
|
781
|
+
};
|
|
782
|
+
Object.keys(this.queryCbs).forEach((hash) => this.notifyQueryError(hash, error));
|
|
783
|
+
}
|
|
784
|
+
if (prevStatus === 'disabled' && msg.status !== 'disabled') {
|
|
785
|
+
// Leaving `disabled`: refreshes were paused server-side, so restart
|
|
786
|
+
// the socket to re-add every query and get fresh results.
|
|
787
|
+
this._startSocket();
|
|
788
|
+
}
|
|
789
|
+
break;
|
|
790
|
+
}
|
|
763
791
|
case 'join-room-error':
|
|
764
792
|
const errorRoomId = msg['room-id'];
|
|
765
793
|
const errorRoom = this._rooms[errorRoomId];
|
|
@@ -1227,6 +1255,9 @@ class Reactor {
|
|
|
1227
1255
|
});
|
|
1228
1256
|
};
|
|
1229
1257
|
notifyQueryError = (hash, error) => {
|
|
1258
|
+
// Clear the dedupe cache so the next successful result re-notifies
|
|
1259
|
+
// subscribers even if the data is unchanged from before the error
|
|
1260
|
+
delete this._dataForQueryCache[hash];
|
|
1230
1261
|
const cbs = this.queryCbs[hash] || [];
|
|
1231
1262
|
cbs.forEach((r) => r.cb({ error }));
|
|
1232
1263
|
};
|
|
@@ -1247,6 +1278,17 @@ class Reactor {
|
|
|
1247
1278
|
}
|
|
1248
1279
|
/** Applies transactions locally and sends transact message to server */
|
|
1249
1280
|
pushTx = (chunks) => {
|
|
1281
|
+
// The server rejects every write while read-only or disabled, so reject
|
|
1282
|
+
// locally instead of applying an optimistic update
|
|
1283
|
+
if (this._appStatusState.isReadOnly) {
|
|
1284
|
+
return Promise.reject(this._appStatusState.status === 'disabled'
|
|
1285
|
+
? new InstantError_ts_1.InstantError('This app is currently disabled.', {
|
|
1286
|
+
status: 'disabled',
|
|
1287
|
+
})
|
|
1288
|
+
: new InstantError_ts_1.InstantError('This app is in read-only mode.', {
|
|
1289
|
+
status: 'read-only',
|
|
1290
|
+
}));
|
|
1291
|
+
}
|
|
1250
1292
|
// Throws if transactions are invalid
|
|
1251
1293
|
if (!this.config.disableValidation) {
|
|
1252
1294
|
(0, transactionValidation_ts_1.validateTransactions)(chunks, this.config.schema);
|
|
@@ -1737,6 +1779,26 @@ class Reactor {
|
|
|
1737
1779
|
this.connectionStatusCbs = this.connectionStatusCbs.filter((x) => x !== cb);
|
|
1738
1780
|
};
|
|
1739
1781
|
}
|
|
1782
|
+
/**
|
|
1783
|
+
* @param {'active' | 'read-only' | 'disabled' | undefined} status
|
|
1784
|
+
*/
|
|
1785
|
+
_setAppStatus(status) {
|
|
1786
|
+
if (!status || status === this._appStatusState.status)
|
|
1787
|
+
return;
|
|
1788
|
+
this._appStatusState = {
|
|
1789
|
+
isLoading: false,
|
|
1790
|
+
isReadOnly: status !== 'active',
|
|
1791
|
+
status,
|
|
1792
|
+
};
|
|
1793
|
+
this.notifyAppStatusSubs(this._appStatusState);
|
|
1794
|
+
}
|
|
1795
|
+
subscribeAppStatus(cb) {
|
|
1796
|
+
this.appStatusCbs.push(cb);
|
|
1797
|
+
cb(this._appStatusState);
|
|
1798
|
+
return () => {
|
|
1799
|
+
this.appStatusCbs = this.appStatusCbs.filter((x) => x !== cb);
|
|
1800
|
+
};
|
|
1801
|
+
}
|
|
1740
1802
|
subscribeAttrs(cb) {
|
|
1741
1803
|
this.attrsCbs.push(cb);
|
|
1742
1804
|
if (this.attrs) {
|
|
@@ -1761,6 +1823,9 @@ class Reactor {
|
|
|
1761
1823
|
notifyConnectionStatusSubs(status) {
|
|
1762
1824
|
this.connectionStatusCbs.forEach((cb) => cb(status));
|
|
1763
1825
|
}
|
|
1826
|
+
notifyAppStatusSubs(state) {
|
|
1827
|
+
this.appStatusCbs.forEach((cb) => cb(state));
|
|
1828
|
+
}
|
|
1764
1829
|
async setCurrentUser(user) {
|
|
1765
1830
|
this.kv.updateInPlace((prev) => {
|
|
1766
1831
|
prev[currentUserKey] = user;
|