core-3nweb-client-lib 0.41.14 → 0.42.0

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.
Files changed (45) hide show
  1. package/build/core/asmail/inbox/inbox-events.d.ts +16 -2
  2. package/build/core/asmail/inbox/inbox-events.js +91 -17
  3. package/build/core/asmail/inbox/index.d.ts +2 -0
  4. package/build/core/asmail/inbox/index.js +9 -2
  5. package/build/core/asmail/index.d.ts +2 -0
  6. package/build/core/asmail/index.js +6 -0
  7. package/build/core/index.js +8 -2
  8. package/build/core/storage/index.d.ts +2 -19
  9. package/build/core/storage/index.js +10 -3
  10. package/build/core/storage/synced/remote-events.d.ts +2 -0
  11. package/build/core/storage/synced/remote-events.js +19 -3
  12. package/build/core/storage/synced/storage.d.ts +2 -0
  13. package/build/core/storage/synced/storage.js +7 -1
  14. package/build/lib-client/server-events.d.ts +1 -3
  15. package/build/lib-client/server-events.js +6 -32
  16. package/build/lib-client/xsp-fs/common.d.ts +2 -0
  17. package/build/lib-client/xsp-fs/common.js +3 -1
  18. package/build/lib-index.d.ts +1 -1
  19. package/build/lib-index.js +1 -2
  20. package/package.json +1 -1
  21. package/{test-data-10-1759456540615/util/logs/2025-10-03.log.txt → test-data-1-1759545630658/util/logs/2025-10-04.log.txt} +4 -4
  22. package/test-data-10-1759545670471/util/logs/2025-10-04.log.txt +14 -0
  23. package/test-data-11-1759545670472/util/logs/2025-10-04.log.txt +14 -0
  24. package/test-data-12-1759545674484/util/logs/2025-10-04.log.txt +14 -0
  25. package/test-data-13-1759545675527/util/logs/2025-10-04.log.txt +28 -0
  26. package/test-data-2-1759545630661/util/logs/2025-10-04.log.txt +14 -0
  27. package/test-data-3-1759545636022/util/logs/2025-10-04.log.txt +28 -0
  28. package/test-data-4-1759545642255/util/logs/2025-10-04.log.txt +28 -0
  29. package/test-data-5-1759545652091/util/logs/2025-10-04.log.txt +14 -0
  30. package/test-data-6-1759545654150/util/logs/2025-10-04.log.txt +14 -0
  31. package/test-data-7-1759545656281/util/logs/2025-10-04.log.txt +14 -0
  32. package/test-data-8-1759545665798/util/logs/2025-10-04.log.txt +14 -0
  33. package/test-data-9-1759545666746/util/logs/2025-10-04.log.txt +28 -0
  34. package/test-data-1-1759456500985/util/logs/2025-10-03.log.txt +0 -7
  35. package/test-data-11-1759456540616/util/logs/2025-10-03.log.txt +0 -7
  36. package/test-data-12-1759456544627/util/logs/2025-10-03.log.txt +0 -7
  37. package/test-data-13-1759456545560/util/logs/2025-10-03.log.txt +0 -14
  38. package/test-data-2-1759456500988/util/logs/2025-10-03.log.txt +0 -7
  39. package/test-data-3-1759456506409/util/logs/2025-10-03.log.txt +0 -14
  40. package/test-data-4-1759456512650/util/logs/2025-10-03.log.txt +0 -14
  41. package/test-data-5-1759456522373/util/logs/2025-10-03.log.txt +0 -7
  42. package/test-data-6-1759456524407/util/logs/2025-10-03.log.txt +0 -7
  43. package/test-data-7-1759456526517/util/logs/2025-10-03.log.txt +0 -7
  44. package/test-data-8-1759456536045/util/logs/2025-10-03.log.txt +0 -7
  45. package/test-data-9-1759456536980/util/logs/2025-10-03.log.txt +0 -14
@@ -14,8 +14,22 @@ type Observer<T> = web3n.Observer<T>;
14
14
  * Hence, this should do restarts to server around wakeup events.
15
15
  */
16
16
  export declare class InboxEvents {
17
- constructor(msgReceiver: MailRecipient, getMsg: (msgId: string) => Promise<IncomingMessage>, logError: LogError);
18
- private newMsg$;
17
+ private readonly getMsg;
18
+ private readonly rmMsg;
19
+ private readonly logError;
20
+ private readonly newMsgs;
21
+ private readonly newMsg$;
22
+ private listeningProc;
23
+ private readonly makeServerEvents;
24
+ private networkActive;
25
+ constructor(msgReceiver: MailRecipient, getMsg: (msgId: string) => Promise<IncomingMessage>, rmMsg: (msgId: string) => Promise<void>, logError: LogError);
26
+ private startListening;
19
27
  subscribe<T>(event: InboxEventType, observer: Observer<T>): () => void;
28
+ close(): void;
29
+ get isListening(): boolean;
30
+ private shouldRestartAfterErr;
31
+ private stopListening;
32
+ suspendNetworkActivity(): void;
33
+ resumeNetworkActivity(): void;
20
34
  }
21
35
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2017, 2019, 2022, 2024 3NSoft Inc.
3
+ Copyright (C) 2017, 2019, 2022, 2024 - 2025 3NSoft Inc.
4
4
 
5
5
  This program is free software: you can redistribute it and/or modify it under
6
6
  the terms of the GNU General Public License as published by the Free Software
@@ -13,13 +13,16 @@
13
13
  See the GNU General Public License for more details.
14
14
 
15
15
  You should have received a copy of the GNU General Public License along with
16
- this program. If not, see <http://www.gnu.org/licenses/>. */
16
+ this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
17
18
  Object.defineProperty(exports, "__esModule", { value: true });
18
19
  exports.InboxEvents = void 0;
20
+ const rxjs_1 = require("rxjs");
19
21
  const retrieval_1 = require("../../../lib-common/service-api/asmail/retrieval");
20
22
  const server_events_1 = require("../../../lib-client/server-events");
21
23
  const operators_1 = require("rxjs/operators");
22
24
  const utils_for_observables_1 = require("../../../lib-common/utils-for-observables");
25
+ const sleep_1 = require("../../../lib-common/processes/sleep");
23
26
  const SERVER_EVENTS_RESTART_WAIT_SECS = 5;
24
27
  /**
25
28
  * Instance of this class handles event subscription from UI side. It observes
@@ -32,25 +35,56 @@ const SERVER_EVENTS_RESTART_WAIT_SECS = 5;
32
35
  * Hence, this should do restarts to server around wakeup events.
33
36
  */
34
37
  class InboxEvents {
35
- constructor(msgReceiver, getMsg, logError) {
36
- const serverEvents = new server_events_1.ServerEvents(() => msgReceiver.openEventSource(logError), SERVER_EVENTS_RESTART_WAIT_SECS, logError);
37
- this.newMsg$ = serverEvents.observe(retrieval_1.msgRecievedCompletely.EVENT_NAME)
38
- .pipe(
39
- // XXX tap to log more details
40
- (0, operators_1.tap)({
41
- complete: () => logError({}, `InboxEvents.newMsg$ completes`),
42
- error: err => logError(err, `InboxEvents.newMsg$ has error`)
43
- }), (0, operators_1.mergeMap)(async (ev) => {
38
+ constructor(msgReceiver, getMsg, rmMsg, logError) {
39
+ this.getMsg = getMsg;
40
+ this.rmMsg = rmMsg;
41
+ this.logError = logError;
42
+ this.newMsgs = new rxjs_1.Subject();
43
+ this.newMsg$ = this.newMsgs.asObservable().pipe((0, operators_1.share)());
44
+ this.listeningProc = undefined;
45
+ this.networkActive = true;
46
+ this.makeServerEvents = () => new server_events_1.ServerEvents(() => msgReceiver.openEventSource(this.logError), this.logError);
47
+ this.startListening();
48
+ Object.seal(this);
49
+ }
50
+ startListening() {
51
+ if (this.listeningProc || !this.networkActive) {
52
+ return;
53
+ }
54
+ function clearListeningProc() {
55
+ if (this.listeningProc === sub) {
56
+ this.listeningProc = undefined;
57
+ }
58
+ }
59
+ const sub = this.makeServerEvents()
60
+ .observe(retrieval_1.msgRecievedCompletely.EVENT_NAME)
61
+ .pipe((0, operators_1.mergeMap)(async (ev) => {
44
62
  try {
45
- const msg = await getMsg(ev.msgId);
46
- return msg;
63
+ return await this.getMsg(ev.msgId);
47
64
  }
48
65
  catch (err) {
49
- // TODO should more error handling logic be added here?
50
- await logError(err, `Cannot get message ${ev.msgId}`);
66
+ await this.rmMsg(ev.msgId);
67
+ await this.logError(err, `Cannot get message ${ev.msgId}, and removing it as a result`);
51
68
  }
52
- }), (0, operators_1.filter)(msg => !!msg), (0, operators_1.share)());
53
- Object.seal(this);
69
+ }, 5))
70
+ .subscribe({
71
+ next: msg => {
72
+ if (msg) {
73
+ this.newMsgs.next(msg);
74
+ }
75
+ },
76
+ complete: () => {
77
+ clearListeningProc();
78
+ },
79
+ error: async (exc) => {
80
+ clearListeningProc();
81
+ if (this.shouldRestartAfterErr(exc)) {
82
+ await (0, sleep_1.sleep)(SERVER_EVENTS_RESTART_WAIT_SECS);
83
+ this.startListening();
84
+ }
85
+ }
86
+ });
87
+ this.listeningProc = sub;
54
88
  }
55
89
  subscribe(event, observer) {
56
90
  if (event === 'message') {
@@ -61,6 +95,46 @@ class InboxEvents {
61
95
  throw new Error(`Event type ${event} is unknown to inbox`);
62
96
  }
63
97
  }
98
+ close() {
99
+ this.newMsgs.complete();
100
+ }
101
+ get isListening() {
102
+ return !!this.listeningProc;
103
+ }
104
+ shouldRestartAfterErr(exc) {
105
+ if (!exc.runtimeException) {
106
+ return false;
107
+ }
108
+ if (exc.type === 'connect') {
109
+ return true;
110
+ }
111
+ else if (exc.type === 'http-request') {
112
+ return false;
113
+ }
114
+ else if (exc.type === 'websocket') {
115
+ return true;
116
+ }
117
+ else {
118
+ return false;
119
+ }
120
+ }
121
+ stopListening() {
122
+ var _a;
123
+ (_a = this.listeningProc) === null || _a === void 0 ? void 0 : _a.unsubscribe();
124
+ this.listeningProc = undefined;
125
+ }
126
+ suspendNetworkActivity() {
127
+ this.networkActive = false;
128
+ if (this.isListening) {
129
+ this.stopListening();
130
+ }
131
+ }
132
+ resumeNetworkActivity() {
133
+ this.networkActive = true;
134
+ if (!this.isListening) {
135
+ this.startListening();
136
+ }
137
+ }
64
138
  }
65
139
  exports.InboxEvents = InboxEvents;
66
140
  Object.freeze(InboxEvents.prototype);
@@ -96,5 +96,7 @@ export declare class InboxOnServer {
96
96
  private listMsgs;
97
97
  private getMsg;
98
98
  private msgToUIForm;
99
+ suspendNetworkActivity(): void;
100
+ resumeNetworkActivity(): void;
99
101
  }
100
102
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2015 - 2020, 2022 3NSoft Inc.
3
+ Copyright (C) 2015 - 2020, 2022, 2025 3NSoft Inc.
4
4
 
5
5
  This program is free software: you can redistribute it and/or modify it under
6
6
  the terms of the GNU General Public License as published by the Free Software
@@ -51,7 +51,7 @@ class InboxOnServer {
51
51
  this.logError = logError;
52
52
  this.procs = new synced_1.NamedProcs();
53
53
  this.recentlyOpenedMsgs = (0, timed_cache_1.makeTimedCache)(60 * 1000);
54
- this.inboxEvents = new inbox_events_1.InboxEvents(this.msgReceiver, this.getMsg.bind(this), this.logError);
54
+ this.inboxEvents = new inbox_events_1.InboxEvents(this.msgReceiver, this.getMsg.bind(this), this.removeMsg.bind(this), this.logError);
55
55
  Object.seal(this);
56
56
  }
57
57
  static async makeAndStart(cachePath, syncedFS, r) {
@@ -71,6 +71,7 @@ class InboxOnServer {
71
71
  }
72
72
  async close() {
73
73
  this.index.stopSyncing();
74
+ this.inboxEvents.close();
74
75
  }
75
76
  makeCAP() {
76
77
  const service = {
@@ -309,6 +310,12 @@ class InboxOnServer {
309
310
  }
310
311
  return m;
311
312
  }
313
+ suspendNetworkActivity() {
314
+ this.inboxEvents.suspendNetworkActivity();
315
+ }
316
+ resumeNetworkActivity() {
317
+ this.inboxEvents.resumeNetworkActivity();
318
+ }
312
319
  }
313
320
  exports.InboxOnServer = InboxOnServer;
314
321
  Object.freeze(InboxOnServer.prototype);
@@ -29,5 +29,7 @@ export declare class ASMail {
29
29
  makeASMailCAP(): Service;
30
30
  makePreflightOnlyASMailCAP(): Service;
31
31
  close(): Promise<void>;
32
+ suspendNetworkActivity(): void;
33
+ resumeNetworkActivity(): void;
32
34
  }
33
35
  export {};
@@ -129,6 +129,12 @@ class ASMail {
129
129
  await this.keyring.close();
130
130
  await this.sendingParams.close();
131
131
  }
132
+ suspendNetworkActivity() {
133
+ this.inbox.suspendNetworkActivity();
134
+ }
135
+ resumeNetworkActivity() {
136
+ this.inbox.resumeNetworkActivity();
137
+ }
132
138
  }
133
139
  exports.ASMail = ASMail;
134
140
  Object.freeze(ASMail.prototype);
@@ -326,8 +326,14 @@ class Core {
326
326
  getStorages() {
327
327
  return this.storages.wrap();
328
328
  }
329
- async onDeviceSystemSuspend() { }
330
- async onDeviceSystemResume() { }
329
+ async onDeviceSystemSuspend() {
330
+ this.asmail.suspendNetworkActivity();
331
+ this.storages.suspendNetworkActivity();
332
+ }
333
+ async onDeviceSystemResume() {
334
+ this.storages.resumeNetworkActivity();
335
+ this.asmail.resumeNetworkActivity();
336
+ }
331
337
  }
332
338
  exports.Core = Core;
333
339
  Object.freeze(Core.prototype);
@@ -46,6 +46,8 @@ export declare class Storages implements FactoryOfFSs {
46
46
  * @param dst is a path starting with core app folder name
47
47
  */
48
48
  migrateCoreAppDataOnFirstRun(type: StorageType, src: string, dst: string): Promise<void>;
49
+ suspendNetworkActivity(): void;
50
+ resumeNetworkActivity(): void;
49
51
  }
50
52
  export interface FactoryOfFSs {
51
53
  makeSyncedFSForApp(appFolder: string): Promise<WritableFS>;
@@ -57,23 +59,4 @@ export interface FactoryOfFSs {
57
59
  export declare function reverseDomain(domain: string): string;
58
60
  type Service = web3n.storage.Service;
59
61
  type StoragePolicy = web3n.caps.common.StoragePolicy;
60
- export declare class PerAppStorage {
61
- private readonly appFSsFactory;
62
- private readonly policy;
63
- private readonly appFSs;
64
- private readonly revAppDomain;
65
- constructor(appFSsFactory: FactoryOfFSs, appDomain: string, policy: StoragePolicy);
66
- wrap(): ReturnType<Storages['makeStorageCAP']>;
67
- private getAppSyncedFS;
68
- private getAppLocalFS;
69
- /**
70
- * This throws up, if given file system is not allowed to be opened.
71
- * @param appFolder
72
- * @param type
73
- */
74
- private ensureAppFSAllowed;
75
- private getUserFS;
76
- private getSysFS;
77
- private close;
78
- }
79
62
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2015 - 2017, 2019 - 2022 3NSoft Inc.
3
+ Copyright (C) 2015 - 2017, 2019 - 2022, 2025 3NSoft Inc.
4
4
 
5
5
  This program is free software: you can redistribute it and/or modify it under
6
6
  the terms of the GNU General Public License as published by the Free Software
@@ -16,7 +16,7 @@
16
16
  this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.PerAppStorage = exports.Storages = void 0;
19
+ exports.Storages = void 0;
20
20
  exports.reverseDomain = reverseDomain;
21
21
  const fs_1 = require("../../lib-client/xsp-fs/fs");
22
22
  const storage_1 = require("./synced/storage");
@@ -386,6 +386,14 @@ class Storages {
386
386
  await this.local.migrateCoreAppDataOnFirstRun(src, dst);
387
387
  }
388
388
  }
389
+ suspendNetworkActivity() {
390
+ var _a;
391
+ (_a = this.synced) === null || _a === void 0 ? void 0 : _a.storage.suspendNetworkActivity();
392
+ }
393
+ resumeNetworkActivity() {
394
+ var _a;
395
+ (_a = this.synced) === null || _a === void 0 ? void 0 : _a.storage.resumeNetworkActivity();
396
+ }
389
397
  }
390
398
  exports.Storages = Storages;
391
399
  Object.freeze(Storages.prototype);
@@ -482,7 +490,6 @@ class PerAppStorage {
482
490
  this.appFSs.clear();
483
491
  }
484
492
  }
485
- exports.PerAppStorage = PerAppStorage;
486
493
  Object.freeze(PerAppStorage.prototype);
487
494
  Object.freeze(PerAppStorage);
488
495
  async function applyPolicyToFSItem(fsi, policy, path) {
@@ -19,4 +19,6 @@ export declare class RemoteEvents {
19
19
  private absorbObjRemoval;
20
20
  private absorbObjVersionArchival;
21
21
  private absorbArchVersionRemoval;
22
+ suspendNetworkActivity(): void;
23
+ resumeNetworkActivity(): void;
22
24
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2019 - 2020, 2022 3NSoft Inc.
3
+ Copyright (C) 2019 - 2020, 2022, 2025 3NSoft Inc.
4
4
 
5
5
  This program is free software: you can redistribute it and/or modify it under
6
6
  the terms of the GNU General Public License as published by the Free Software
@@ -36,8 +36,14 @@ class RemoteEvents {
36
36
  Object.seal(this);
37
37
  }
38
38
  startAbsorbingRemoteEvents() {
39
- const serverEvents = new server_events_1.ServerEvents(() => this.remoteStorage.openEventSource(this.logError), SERVER_EVENTS_RESTART_WAIT_SECS, this.logError);
40
- this.absorbingRemoteEventsProc = (0, rxjs_1.merge)(this.absorbObjChange(serverEvents), this.absorbObjRemoval(serverEvents), this.absorbObjVersionArchival(serverEvents), this.absorbArchVersionRemoval(serverEvents))
39
+ const serverEvents = new server_events_1.ServerEvents(() => this.remoteStorage.openEventSource(this.logError),
40
+ // SERVER_EVENTS_RESTART_WAIT_SECS,
41
+ this.logError);
42
+ this.absorbingRemoteEventsProc = (0, rxjs_1.merge)(this.absorbObjChange(serverEvents), this.absorbObjRemoval(serverEvents),
43
+ // XXX commenting out to see if unknownEvent exception goes away
44
+ // Is server doesn't know it?
45
+ // this.absorbObjVersionArchival(serverEvents),
46
+ this.absorbArchVersionRemoval(serverEvents))
41
47
  .subscribe({
42
48
  next: noop,
43
49
  error: async (err) => {
@@ -117,6 +123,16 @@ class RemoteEvents {
117
123
  });
118
124
  }, 1));
119
125
  }
126
+ suspendNetworkActivity() {
127
+ // XXX
128
+ // - set haveNetwork flag to false
129
+ // - press breaks on events from server
130
+ }
131
+ resumeNetworkActivity() {
132
+ // XXX
133
+ // - set haveNetwork flag to true
134
+ // - restart watching events from server
135
+ }
120
136
  }
121
137
  exports.RemoteEvents = RemoteEvents;
122
138
  Object.freeze(RemoteEvents.prototype);
@@ -53,5 +53,7 @@ export declare class SyncedStore implements ISyncedStorage {
53
53
  saveObj(objId: ObjId, version: number, encSub: Subscribe): Promise<void>;
54
54
  removeObj(objId: string): Promise<void>;
55
55
  close(): Promise<void>;
56
+ suspendNetworkActivity(): void;
57
+ resumeNetworkActivity(): void;
56
58
  }
57
59
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2015 - 2020, 2022 3NSoft Inc.
3
+ Copyright (C) 2015 - 2020, 2022, 2025 3NSoft Inc.
4
4
 
5
5
  This program is free software: you can redistribute it and/or modify it under
6
6
  the terms of the GNU General Public License as published by the Free Software
@@ -248,6 +248,12 @@ class SyncedStore {
248
248
  await this.logError(err);
249
249
  }
250
250
  }
251
+ suspendNetworkActivity() {
252
+ this.remoteEvents.suspendNetworkActivity();
253
+ }
254
+ resumeNetworkActivity() {
255
+ this.remoteEvents.resumeNetworkActivity();
256
+ }
251
257
  }
252
258
  exports.SyncedStore = SyncedStore;
253
259
  Object.freeze(SyncedStore.prototype);
@@ -3,11 +3,10 @@ import { Observable } from 'rxjs';
3
3
  import { LogError } from './logging/log-to-file';
4
4
  export declare class ServerEvents<N extends string, T> {
5
5
  private readonly subscribeToServer;
6
- private restartWaitSecs;
7
6
  private readonly logError;
8
7
  private server;
9
8
  private openningServer;
10
- constructor(subscribeToServer: () => Promise<SubscribingClient>, restartWaitSecs: number, logError: LogError);
9
+ constructor(subscribeToServer: () => Promise<SubscribingClient>, logError: LogError);
11
10
  /**
12
11
  * This method creates an observable of server's events.
13
12
  * @param event is an event on server, to which to subscribe.
@@ -15,5 +14,4 @@ export declare class ServerEvents<N extends string, T> {
15
14
  observe(event: N): Observable<T>;
16
15
  private setServer;
17
16
  private shouldRestartAfterErr;
18
- private restartObservation;
19
17
  }
@@ -19,12 +19,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
19
19
  exports.ServerEvents = void 0;
20
20
  const rxjs_1 = require("rxjs");
21
21
  const synced_1 = require("../lib-common/processes/synced");
22
- const sleep_1 = require("../lib-common/processes/sleep");
23
- const operators_1 = require("rxjs/operators");
24
22
  class ServerEvents {
25
- constructor(subscribeToServer, restartWaitSecs, logError) {
23
+ constructor(subscribeToServer,
24
+ // private restartWaitSecs: number,
25
+ logError) {
26
26
  this.subscribeToServer = subscribeToServer;
27
- this.restartWaitSecs = restartWaitSecs;
28
27
  this.logError = logError;
29
28
  this.server = undefined;
30
29
  this.openningServer = new synced_1.SingleProc();
@@ -35,7 +34,7 @@ class ServerEvents {
35
34
  * @param event is an event on server, to which to subscribe.
36
35
  */
37
36
  observe(event) {
38
- const event$ = new rxjs_1.Observable(observer => {
37
+ return new rxjs_1.Observable(observer => {
39
38
  // simple sync creation of detach function
40
39
  if (this.server) {
41
40
  return this.server.subscribe(event, observer);
@@ -57,9 +56,7 @@ class ServerEvents {
57
56
  obs = undefined;
58
57
  })
59
58
  .catch(err => {
60
- if (obs) {
61
- obs.error(err);
62
- }
59
+ obs === null || obs === void 0 ? void 0 : obs.error(err);
63
60
  obs = undefined;
64
61
  });
65
62
  return () => {
@@ -71,22 +68,7 @@ class ServerEvents {
71
68
  obs = undefined;
72
69
  }
73
70
  };
74
- })
75
- .pipe(
76
- // XXX tap to log more details
77
- (0, operators_1.tap)({
78
- complete: () => this.logError(null, `ServerEvents.observe('${event}') stream completes`),
79
- error: err => this.logError(err, `ServerEvents.observe('${event}') stream has error`)
80
- }), (0, operators_1.catchError)(err => {
81
- if (this.shouldRestartAfterErr(err)) {
82
- // console.error(stringifyErr(err));
83
- return this.restartObservation(event);
84
- }
85
- else {
86
- return (0, rxjs_1.throwError)(() => err);
87
- }
88
- }));
89
- return event$;
71
+ });
90
72
  }
91
73
  setServer(server) {
92
74
  this.server = server;
@@ -113,14 +95,6 @@ class ServerEvents {
113
95
  return false;
114
96
  }
115
97
  }
116
- restartObservation(event) {
117
- return (0, rxjs_1.from)((0, sleep_1.sleep)(this.restartWaitSecs * 1000))
118
- .pipe(
119
- // XXX tap to log more details
120
- (0, operators_1.tap)({
121
- next: () => this.logError(null, `ServerEvents.restartObservation of ${event} events`)
122
- }), (0, operators_1.mergeMap)(() => this.observe(event)));
123
- }
124
98
  }
125
99
  exports.ServerEvents = ServerEvents;
126
100
  Object.freeze(ServerEvents.prototype);
@@ -120,6 +120,8 @@ export interface SyncedStorage extends Storage {
120
120
  dropCachedLocalObjVersionsLessOrEqual(objId: ObjId, localVersion: number): void;
121
121
  uploadObjRemoval(objId: ObjId): Promise<void>;
122
122
  status(objId: ObjId): Promise<SyncedObjStatus>;
123
+ suspendNetworkActivity(): void;
124
+ resumeNetworkActivity(): void;
123
125
  }
124
126
  export interface SyncedObjStatus extends LocalObjStatus {
125
127
  syncStatus(): SyncStatus;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2015 - 2017, 2019 - 2020, 2022 3NSoft Inc.
3
+ Copyright (C) 2015 - 2017, 2019 - 2020, 2022, 2025 3NSoft Inc.
4
4
 
5
5
  This program is free software: you can redistribute it and/or modify it under
6
6
  the terms of the GNU General Public License as published by the Free Software
@@ -136,6 +136,8 @@ function wrapSyncStorageImplementation(impl) {
136
136
  wrap.dropCachedLocalObjVersionsLessOrEqual = impl.dropCachedLocalObjVersionsLessOrEqual.bind(impl);
137
137
  wrap.adoptRemote = impl.adoptRemote.bind(impl);
138
138
  wrap.updateStatusInfo = impl.updateStatusInfo.bind(impl);
139
+ wrap.suspendNetworkActivity = impl.suspendNetworkActivity.bind(impl);
140
+ wrap.resumeNetworkActivity = impl.resumeNetworkActivity.bind(impl);
139
141
  return Object.freeze(wrap);
140
142
  }
141
143
  function isSyncedStorage(storage) {
@@ -2,7 +2,7 @@
2
2
  export * from "./core";
3
3
  export { SignUp, CreatedUser } from './core/startup/sign-up';
4
4
  export { IdManager } from './core/id-manager';
5
- export { Storages, FactoryOfFSs, reverseDomain, PerAppStorage } from './core/storage';
5
+ export { Storages, FactoryOfFSs, reverseDomain } from './core/storage';
6
6
  export { SignIn, GenerateKey, CompleteInitWithoutCache } from './core/startup/sign-in';
7
7
  export { ASMail } from './core/asmail';
8
8
  export { makeServiceLocator, ServiceLocatorMaker } from "./lib-client/service-locator";
@@ -30,7 +30,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
30
30
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
31
31
  };
32
32
  Object.defineProperty(exports, "__esModule", { value: true });
33
- exports.makeLogger = exports.DeviceFS = exports.sysFolders = exports.appDirs = exports.makeNetClient = exports.makeServiceLocator = exports.ASMail = exports.SignIn = exports.PerAppStorage = exports.reverseDomain = exports.Storages = exports.IdManager = exports.SignUp = void 0;
33
+ exports.makeLogger = exports.DeviceFS = exports.sysFolders = exports.appDirs = exports.makeNetClient = exports.makeServiceLocator = exports.ASMail = exports.SignIn = exports.reverseDomain = exports.Storages = exports.IdManager = exports.SignUp = void 0;
34
34
  __exportStar(require("./core"), exports);
35
35
  var sign_up_1 = require("./core/startup/sign-up");
36
36
  Object.defineProperty(exports, "SignUp", { enumerable: true, get: function () { return sign_up_1.SignUp; } });
@@ -39,7 +39,6 @@ Object.defineProperty(exports, "IdManager", { enumerable: true, get: function ()
39
39
  var storage_1 = require("./core/storage");
40
40
  Object.defineProperty(exports, "Storages", { enumerable: true, get: function () { return storage_1.Storages; } });
41
41
  Object.defineProperty(exports, "reverseDomain", { enumerable: true, get: function () { return storage_1.reverseDomain; } });
42
- Object.defineProperty(exports, "PerAppStorage", { enumerable: true, get: function () { return storage_1.PerAppStorage; } });
43
42
  var sign_in_1 = require("./core/startup/sign-in");
44
43
  Object.defineProperty(exports, "SignIn", { enumerable: true, get: function () { return sign_in_1.SignIn; } });
45
44
  var asmail_1 = require("./core/asmail");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "core-3nweb-client-lib",
3
- "version": "0.41.14",
3
+ "version": "0.42.0",
4
4
  "description": "3NWeb client core library, embeddable into different environments",
5
5
  "main": "build/lib-index.js",
6
6
  "types": "build/lib-index.d.ts",
@@ -1,13 +1,13 @@
1
1
 
2
- Thu Oct 02 2025 21:55:44 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
2
+ Fri Oct 03 2025 22:40:50 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
4
  Log level: error.
5
5
  WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
6
 
7
7
  Error message: undefined
8
8
 
9
- Thu Oct 02 2025 21:55:44 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
- Core version 0.41.14
9
+ Fri Oct 03 2025 22:40:50 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
11
  Log level: error.
12
12
  WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
13
 
@@ -0,0 +1,14 @@
1
+
2
+ Fri Oct 03 2025 22:41:14 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Fri Oct 03 2025 22:41:14 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
+
14
+ Error message: undefined
@@ -0,0 +1,14 @@
1
+
2
+ Fri Oct 03 2025 22:41:14 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Fri Oct 03 2025 22:41:14 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
+
14
+ Error message: undefined
@@ -0,0 +1,14 @@
1
+
2
+ Fri Oct 03 2025 22:41:18 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Fri Oct 03 2025 22:41:18 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
+
14
+ Error message: undefined
@@ -0,0 +1,28 @@
1
+
2
+ Fri Oct 03 2025 22:41:18 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Fri Oct 03 2025 22:41:18 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
13
+
14
+ Error message: undefined
15
+
16
+ Fri Oct 03 2025 22:41:18 GMT-0400 (Eastern Daylight Saving Time) ==================================
17
+ Core version 0.42.0
18
+ Log level: error.
19
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
20
+
21
+ Error message: undefined
22
+
23
+ Fri Oct 03 2025 22:41:18 GMT-0400 (Eastern Daylight Saving Time) ==================================
24
+ Core version 0.42.0
25
+ Log level: error.
26
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
27
+
28
+ Error message: undefined
@@ -0,0 +1,14 @@
1
+
2
+ Fri Oct 03 2025 22:40:52 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Fri Oct 03 2025 22:40:52 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
+
14
+ Error message: undefined
@@ -0,0 +1,28 @@
1
+
2
+ Fri Oct 03 2025 22:40:42 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Fri Oct 03 2025 22:40:42 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
13
+
14
+ Error message: undefined
15
+
16
+ Fri Oct 03 2025 22:40:42 GMT-0400 (Eastern Daylight Saving Time) ==================================
17
+ Core version 0.42.0
18
+ Log level: error.
19
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
20
+
21
+ Error message: undefined
22
+
23
+ Fri Oct 03 2025 22:40:42 GMT-0400 (Eastern Daylight Saving Time) ==================================
24
+ Core version 0.42.0
25
+ Log level: error.
26
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
27
+
28
+ Error message: undefined
@@ -0,0 +1,28 @@
1
+
2
+ Fri Oct 03 2025 22:40:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Fri Oct 03 2025 22:40:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
13
+
14
+ Error message: undefined
15
+
16
+ Fri Oct 03 2025 22:40:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
17
+ Core version 0.42.0
18
+ Log level: error.
19
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
20
+
21
+ Error message: undefined
22
+
23
+ Fri Oct 03 2025 22:40:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
24
+ Core version 0.42.0
25
+ Log level: error.
26
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
27
+
28
+ Error message: undefined
@@ -0,0 +1,14 @@
1
+
2
+ Fri Oct 03 2025 22:40:54 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Fri Oct 03 2025 22:40:54 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
+
14
+ Error message: undefined
@@ -0,0 +1,14 @@
1
+
2
+ Fri Oct 03 2025 22:40:56 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Fri Oct 03 2025 22:40:56 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
+
14
+ Error message: undefined
@@ -0,0 +1,14 @@
1
+
2
+ Fri Oct 03 2025 22:41:05 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Fri Oct 03 2025 22:41:05 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
+
14
+ Error message: undefined
@@ -0,0 +1,14 @@
1
+
2
+ Fri Oct 03 2025 22:41:10 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Fri Oct 03 2025 22:41:10 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
+
14
+ Error message: undefined
@@ -0,0 +1,28 @@
1
+
2
+ Fri Oct 03 2025 22:41:10 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.0
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Fri Oct 03 2025 22:41:10 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.0
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
13
+
14
+ Error message: undefined
15
+
16
+ Fri Oct 03 2025 22:41:10 GMT-0400 (Eastern Daylight Saving Time) ==================================
17
+ Core version 0.42.0
18
+ Log level: error.
19
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
20
+
21
+ Error message: undefined
22
+
23
+ Fri Oct 03 2025 22:41:10 GMT-0400 (Eastern Daylight Saving Time) ==================================
24
+ Core version 0.42.0
25
+ Log level: error.
26
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
27
+
28
+ Error message: undefined
@@ -1,7 +0,0 @@
1
-
2
- Thu Oct 02 2025 21:55:20 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
4
- Log level: error.
5
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
6
-
7
- Error message: undefined
@@ -1,7 +0,0 @@
1
-
2
- Thu Oct 02 2025 21:55:44 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
4
- Log level: error.
5
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
6
-
7
- Error message: undefined
@@ -1,7 +0,0 @@
1
-
2
- Thu Oct 02 2025 21:55:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
4
- Log level: error.
5
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
6
-
7
- Error message: undefined
@@ -1,14 +0,0 @@
1
-
2
- Thu Oct 02 2025 21:55:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
4
- Log level: error.
5
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
6
-
7
- Error message: undefined
8
-
9
- Thu Oct 02 2025 21:55:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
- Core version 0.41.14
11
- Log level: error.
12
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
-
14
- Error message: undefined
@@ -1,7 +0,0 @@
1
-
2
- Thu Oct 02 2025 21:55:22 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
4
- Log level: error.
5
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
6
-
7
- Error message: undefined
@@ -1,14 +0,0 @@
1
-
2
- Thu Oct 02 2025 21:55:12 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
4
- Log level: error.
5
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
6
-
7
- Error message: undefined
8
-
9
- Thu Oct 02 2025 21:55:12 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
- Core version 0.41.14
11
- Log level: error.
12
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
-
14
- Error message: undefined
@@ -1,14 +0,0 @@
1
-
2
- Thu Oct 02 2025 21:55:18 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
4
- Log level: error.
5
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
6
-
7
- Error message: undefined
8
-
9
- Thu Oct 02 2025 21:55:18 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
- Core version 0.41.14
11
- Log level: error.
12
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
-
14
- Error message: undefined
@@ -1,7 +0,0 @@
1
-
2
- Thu Oct 02 2025 21:55:24 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
4
- Log level: error.
5
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
6
-
7
- Error message: undefined
@@ -1,7 +0,0 @@
1
-
2
- Thu Oct 02 2025 21:55:26 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
4
- Log level: error.
5
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
6
-
7
- Error message: undefined
@@ -1,7 +0,0 @@
1
-
2
- Thu Oct 02 2025 21:55:36 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
4
- Log level: error.
5
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
6
-
7
- Error message: undefined
@@ -1,7 +0,0 @@
1
-
2
- Thu Oct 02 2025 21:55:40 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
4
- Log level: error.
5
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
6
-
7
- Error message: undefined
@@ -1,14 +0,0 @@
1
-
2
- Thu Oct 02 2025 21:55:40 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
- Core version 0.41.14
4
- Log level: error.
5
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
6
-
7
- Error message: undefined
8
-
9
- Thu Oct 02 2025 21:55:40 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
- Core version 0.41.14
11
- Log level: error.
12
- WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
13
-
14
- Error message: undefined