core-3nweb-client-lib 0.41.14 → 0.42.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.
Files changed (48) hide show
  1. package/build/core/asmail/inbox/inbox-events.d.ts +21 -2
  2. package/build/core/asmail/inbox/inbox-events.js +123 -19
  3. package/build/core/asmail/inbox/index.d.ts +2 -0
  4. package/build/core/asmail/inbox/index.js +11 -5
  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 +17 -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/asmail/recipient.js +1 -2
  15. package/build/lib-client/server-events.d.ts +1 -6
  16. package/build/lib-client/server-events.js +5 -51
  17. package/build/lib-client/xsp-fs/common.d.ts +2 -0
  18. package/build/lib-client/xsp-fs/common.js +3 -1
  19. package/build/lib-common/service-api/asmail/retrieval.d.ts +6 -1
  20. package/build/lib-common/service-api/asmail/retrieval.js +7 -2
  21. package/build/lib-index.d.ts +1 -1
  22. package/build/lib-index.js +1 -2
  23. package/package.json +2 -2
  24. package/{test-data-10-1759456540615/util/logs/2025-10-03.log.txt → test-data-1-1759636324169/util/logs/2025-10-05.log.txt} +4 -4
  25. package/test-data-10-1759636364594/util/logs/2025-10-05.log.txt +14 -0
  26. package/test-data-11-1759636364595/util/logs/2025-10-05.log.txt +14 -0
  27. package/test-data-12-1759636368628/util/logs/2025-10-05.log.txt +14 -0
  28. package/test-data-13-1759636369614/util/logs/2025-10-05.log.txt +28 -0
  29. package/test-data-2-1759636324173/util/logs/2025-10-05.log.txt +14 -0
  30. package/test-data-3-1759636329651/util/logs/2025-10-05.log.txt +28 -0
  31. package/test-data-4-1759636335955/util/logs/2025-10-05.log.txt +28 -0
  32. package/test-data-5-1759636345925/util/logs/2025-10-05.log.txt +14 -0
  33. package/test-data-6-1759636347983/util/logs/2025-10-05.log.txt +14 -0
  34. package/test-data-7-1759636350156/util/logs/2025-10-05.log.txt +14 -0
  35. package/test-data-8-1759636359769/util/logs/2025-10-05.log.txt +14 -0
  36. package/test-data-9-1759636360774/util/logs/2025-10-05.log.txt +28 -0
  37. package/test-data-1-1759456500985/util/logs/2025-10-03.log.txt +0 -7
  38. package/test-data-11-1759456540616/util/logs/2025-10-03.log.txt +0 -7
  39. package/test-data-12-1759456544627/util/logs/2025-10-03.log.txt +0 -7
  40. package/test-data-13-1759456545560/util/logs/2025-10-03.log.txt +0 -14
  41. package/test-data-2-1759456500988/util/logs/2025-10-03.log.txt +0 -7
  42. package/test-data-3-1759456506409/util/logs/2025-10-03.log.txt +0 -14
  43. package/test-data-4-1759456512650/util/logs/2025-10-03.log.txt +0 -14
  44. package/test-data-5-1759456522373/util/logs/2025-10-03.log.txt +0 -7
  45. package/test-data-6-1759456524407/util/logs/2025-10-03.log.txt +0 -7
  46. package/test-data-7-1759456526517/util/logs/2025-10-03.log.txt +0 -7
  47. package/test-data-8-1759456536045/util/logs/2025-10-03.log.txt +0 -7
  48. package/test-data-9-1759456536980/util/logs/2025-10-03.log.txt +0 -14
@@ -3,6 +3,7 @@ import { LogError } from '../../../lib-client/logging/log-to-file';
3
3
  type IncomingMessage = web3n.asmail.IncomingMessage;
4
4
  type InboxEventType = web3n.asmail.InboxEventType;
5
5
  type Observer<T> = web3n.Observer<T>;
6
+ type MsgInfo = web3n.asmail.MsgInfo;
6
7
  /**
7
8
  * Instance of this class handles event subscription from UI side. It observes
8
9
  * inbox server events, handles them, and generates respective events for UI
@@ -14,8 +15,26 @@ type Observer<T> = web3n.Observer<T>;
14
15
  * Hence, this should do restarts to server around wakeup events.
15
16
  */
16
17
  export declare class InboxEvents {
17
- constructor(msgReceiver: MailRecipient, getMsg: (msgId: string) => Promise<IncomingMessage>, logError: LogError);
18
- private newMsg$;
18
+ private readonly getMsg;
19
+ private readonly listMsgs;
20
+ private readonly rmMsg;
21
+ private readonly logError;
22
+ private readonly newMsgs;
23
+ private readonly newMsg$;
24
+ private listeningProc;
25
+ private readonly makeServerEvents;
26
+ private networkActive;
27
+ private listMsgsFrom;
28
+ constructor(msgReceiver: MailRecipient, getMsg: (msgId: string) => Promise<IncomingMessage>, listMsgs: (fromTS: number) => Promise<MsgInfo[]>, rmMsg: (msgId: string) => Promise<void>, logError: LogError);
29
+ private startListening;
30
+ private getMessage;
19
31
  subscribe<T>(event: InboxEventType, observer: Observer<T>): () => void;
32
+ close(): void;
33
+ get isListening(): boolean;
34
+ private shouldRestartAfterErr;
35
+ private stopListening;
36
+ suspendNetworkActivity(): void;
37
+ resumeNetworkActivity(): void;
38
+ private startListingOfDisconnectedPeriod;
20
39
  }
21
40
  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,60 @@ 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) => {
44
- try {
45
- const msg = await getMsg(ev.msgId);
46
- return msg;
38
+ constructor(msgReceiver, getMsg, listMsgs, rmMsg, logError) {
39
+ this.getMsg = getMsg;
40
+ this.listMsgs = listMsgs;
41
+ this.rmMsg = rmMsg;
42
+ this.logError = logError;
43
+ this.newMsgs = new rxjs_1.Subject();
44
+ this.newMsg$ = this.newMsgs.asObservable().pipe((0, operators_1.share)());
45
+ this.listeningProc = undefined;
46
+ this.networkActive = true;
47
+ this.listMsgsFrom = undefined;
48
+ this.makeServerEvents = () => new server_events_1.ServerEvents(() => msgReceiver.openEventSource(this.logError));
49
+ this.startListening();
50
+ Object.seal(this);
51
+ }
52
+ startListening() {
53
+ if (this.listeningProc || !this.networkActive) {
54
+ return;
55
+ }
56
+ function clearListeningProc() {
57
+ if (this.listeningProc === sub) {
58
+ this.listeningProc = undefined;
47
59
  }
48
- catch (err) {
49
- // TODO should more error handling logic be added here?
50
- await logError(err, `Cannot get message ${ev.msgId}`);
60
+ }
61
+ const sub = this.makeServerEvents()
62
+ .observe(retrieval_1.msgRecievedCompletely.EVENT_NAME)
63
+ .pipe((0, operators_1.mergeMap)(async (ev) => this.getMessage(ev.msgId), 5))
64
+ .subscribe({
65
+ next: msg => {
66
+ if (msg) {
67
+ this.newMsgs.next(msg);
68
+ }
69
+ },
70
+ complete: () => {
71
+ clearListeningProc();
72
+ },
73
+ error: async (exc) => {
74
+ clearListeningProc();
75
+ if (this.shouldRestartAfterErr(exc)) {
76
+ await (0, sleep_1.sleep)(SERVER_EVENTS_RESTART_WAIT_SECS);
77
+ this.startListening();
78
+ }
51
79
  }
52
- }), (0, operators_1.filter)(msg => !!msg), (0, operators_1.share)());
53
- Object.seal(this);
80
+ });
81
+ this.listeningProc = sub;
82
+ }
83
+ async getMessage(msgId) {
84
+ try {
85
+ return await this.getMsg(msgId);
86
+ }
87
+ catch (err) {
88
+ // XXX we need to skip, if it is a connectivity error here
89
+ await this.rmMsg(msgId);
90
+ await this.logError(err, `Cannot get message ${msgId}, and removing it as a result`);
91
+ }
54
92
  }
55
93
  subscribe(event, observer) {
56
94
  if (event === 'message') {
@@ -61,6 +99,72 @@ class InboxEvents {
61
99
  throw new Error(`Event type ${event} is unknown to inbox`);
62
100
  }
63
101
  }
102
+ close() {
103
+ this.newMsgs.complete();
104
+ }
105
+ get isListening() {
106
+ return !!this.listeningProc;
107
+ }
108
+ shouldRestartAfterErr(exc) {
109
+ if (!exc.runtimeException) {
110
+ return false;
111
+ }
112
+ if (exc.type === 'connect') {
113
+ return true;
114
+ }
115
+ else if (exc.type === 'http-request') {
116
+ return false;
117
+ }
118
+ else if (exc.type === 'websocket') {
119
+ return true;
120
+ }
121
+ else {
122
+ return false;
123
+ }
124
+ }
125
+ stopListening() {
126
+ var _a;
127
+ (_a = this.listeningProc) === null || _a === void 0 ? void 0 : _a.unsubscribe();
128
+ this.listeningProc = undefined;
129
+ }
130
+ suspendNetworkActivity() {
131
+ this.networkActive = false;
132
+ if (this.isListening) {
133
+ if (!this.listMsgsFrom) {
134
+ this.listMsgsFrom = Date.now();
135
+ }
136
+ this.stopListening();
137
+ }
138
+ }
139
+ resumeNetworkActivity() {
140
+ this.networkActive = true;
141
+ if (!this.isListening) {
142
+ this.startListening();
143
+ this.startListingOfDisconnectedPeriod();
144
+ }
145
+ }
146
+ async startListingOfDisconnectedPeriod() {
147
+ if (!this.listMsgsFrom) {
148
+ return;
149
+ }
150
+ const fromTS = this.listMsgsFrom + 2 * 60 * 1000;
151
+ let msgInfos = (await this.listMsgs(fromTS))
152
+ .filter(info => (fromTS <= info.deliveryTS))
153
+ .sort((a, b) => (a.deliveryTS - b.deliveryTS));
154
+ for (const info of msgInfos) {
155
+ const msg = await this.getMessage(info.msgId);
156
+ if (msg) {
157
+ this.newMsgs.next(msg);
158
+ }
159
+ else if (!this.networkActive) {
160
+ return;
161
+ }
162
+ else {
163
+ // XXX
164
+ }
165
+ }
166
+ this.listMsgsFrom = undefined;
167
+ }
64
168
  }
65
169
  exports.InboxEvents = InboxEvents;
66
170
  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.listMsgs.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 = {
@@ -229,11 +230,10 @@ class InboxOnServer {
229
230
  if (msgIds.length === 0) {
230
231
  return indexedMsgs;
231
232
  }
232
- const keying = msgIds.map(msgId => this.startCachingAndAddKeyToIndex(msgId)
233
+ await Promise.all(msgIds.map(msgId => this.startCachingAndAddKeyToIndex(msgId)
233
234
  .catch(async (exc) => {
234
235
  await this.logError(exc, `Failed to start caching message ${msgId}`);
235
- }));
236
- await Promise.all(keying);
236
+ })));
237
237
  return this.index.listMsgs(fromTS);
238
238
  });
239
239
  }
@@ -309,6 +309,12 @@ class InboxOnServer {
309
309
  }
310
310
  return m;
311
311
  }
312
+ suspendNetworkActivity() {
313
+ this.inboxEvents.suspendNetworkActivity();
314
+ }
315
+ resumeNetworkActivity() {
316
+ this.inboxEvents.resumeNetworkActivity();
317
+ }
312
318
  }
313
319
  exports.InboxOnServer = InboxOnServer;
314
320
  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,12 @@ 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
+ this.absorbingRemoteEventsProc = (0, rxjs_1.merge)(this.absorbObjChange(serverEvents), this.absorbObjRemoval(serverEvents),
41
+ // XXX commenting out to see if unknownEvent exception goes away
42
+ // Is server doesn't know it?
43
+ // this.absorbObjVersionArchival(serverEvents),
44
+ this.absorbArchVersionRemoval(serverEvents))
41
45
  .subscribe({
42
46
  next: noop,
43
47
  error: async (err) => {
@@ -117,6 +121,16 @@ class RemoteEvents {
117
121
  });
118
122
  }, 1));
119
123
  }
124
+ suspendNetworkActivity() {
125
+ // XXX
126
+ // - set haveNetwork flag to false
127
+ // - press breaks on events from server
128
+ }
129
+ resumeNetworkActivity() {
130
+ // XXX
131
+ // - set haveNetwork flag to true
132
+ // - restart watching events from server
133
+ }
120
134
  }
121
135
  exports.RemoteEvents = RemoteEvents;
122
136
  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);
@@ -67,9 +67,8 @@ class MailRecipient extends user_with_mid_session_1.ServiceUser {
67
67
  return this.net;
68
68
  }
69
69
  async listMsgs(fromTS) {
70
- // XXX modify request to take fromTS parameter to limit number of msgs
71
70
  const rep = await this.doBodylessSessionRequest({
72
- appPath: api.listMsgs.URL_END,
71
+ appPath: api.listMsgs.genUrlEnd(fromTS ? { from: fromTS } : undefined),
73
72
  method: 'GET',
74
73
  responseType: 'json'
75
74
  });
@@ -1,19 +1,14 @@
1
1
  import { SubscribingClient } from '../lib-common/ipc/generic-ipc';
2
2
  import { Observable } from 'rxjs';
3
- import { LogError } from './logging/log-to-file';
4
3
  export declare class ServerEvents<N extends string, T> {
5
4
  private readonly subscribeToServer;
6
- private restartWaitSecs;
7
- private readonly logError;
8
5
  private server;
9
6
  private openningServer;
10
- constructor(subscribeToServer: () => Promise<SubscribingClient>, restartWaitSecs: number, logError: LogError);
7
+ constructor(subscribeToServer: () => Promise<SubscribingClient>);
11
8
  /**
12
9
  * This method creates an observable of server's events.
13
10
  * @param event is an event on server, to which to subscribe.
14
11
  */
15
12
  observe(event: N): Observable<T>;
16
13
  private setServer;
17
- private shouldRestartAfterErr;
18
- private restartObservation;
19
14
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2017, 2019, 2022 3NSoft Inc.
3
+ Copyright (C) 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
@@ -19,13 +19,9 @@ 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) {
26
24
  this.subscribeToServer = subscribeToServer;
27
- this.restartWaitSecs = restartWaitSecs;
28
- this.logError = logError;
29
25
  this.server = undefined;
30
26
  this.openningServer = new synced_1.SingleProc();
31
27
  Object.seal(this);
@@ -35,7 +31,7 @@ class ServerEvents {
35
31
  * @param event is an event on server, to which to subscribe.
36
32
  */
37
33
  observe(event) {
38
- const event$ = new rxjs_1.Observable(observer => {
34
+ return new rxjs_1.Observable(observer => {
39
35
  // simple sync creation of detach function
40
36
  if (this.server) {
41
37
  return this.server.subscribe(event, observer);
@@ -57,9 +53,7 @@ class ServerEvents {
57
53
  obs = undefined;
58
54
  })
59
55
  .catch(err => {
60
- if (obs) {
61
- obs.error(err);
62
- }
56
+ obs === null || obs === void 0 ? void 0 : obs.error(err);
63
57
  obs = undefined;
64
58
  });
65
59
  return () => {
@@ -71,22 +65,7 @@ class ServerEvents {
71
65
  obs = undefined;
72
66
  }
73
67
  };
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$;
68
+ });
90
69
  }
91
70
  setServer(server) {
92
71
  this.server = server;
@@ -96,31 +75,6 @@ class ServerEvents {
96
75
  }
97
76
  });
98
77
  }
99
- shouldRestartAfterErr(exc) {
100
- if (!exc.runtimeException) {
101
- return false;
102
- }
103
- if (exc.type === 'connect') {
104
- return true;
105
- }
106
- else if (exc.type === 'http-request') {
107
- return false;
108
- }
109
- else if (exc.type === 'websocket') {
110
- return true;
111
- }
112
- else {
113
- return false;
114
- }
115
- }
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
78
  }
125
79
  exports.ServerEvents = ServerEvents;
126
80
  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) {
@@ -19,8 +19,13 @@ export declare namespace midLogin {
19
19
  export declare namespace closeSession {
20
20
  const URL_END = "close-session";
21
21
  }
22
+ export interface ListMsgsOpts {
23
+ from?: number;
24
+ to?: number;
25
+ }
22
26
  export declare namespace listMsgs {
23
- const URL_END = "msg/ids";
27
+ const EXPRESS_URL_END = "msg/ids";
28
+ function genUrlEnd(opts?: ListMsgsOpts): string;
24
29
  interface Reply extends Array<string> {
25
30
  }
26
31
  const SC: {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2015, 2017, 2019 3NSoft Inc.
3
+ Copyright (C) 2015, 2017, 2019, 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
@@ -50,7 +50,12 @@ var closeSession;
50
50
  Object.freeze(closeSession);
51
51
  var listMsgs;
52
52
  (function (listMsgs) {
53
- listMsgs.URL_END = 'msg/ids';
53
+ listMsgs.EXPRESS_URL_END = 'msg/ids';
54
+ function genUrlEnd(opts) {
55
+ let optStr = (opts ? '?' + (0, querystring_1.stringify)(opts) : '');
56
+ return `msg/ids${optStr}`;
57
+ }
58
+ listMsgs.genUrlEnd = genUrlEnd;
54
59
  listMsgs.SC = {
55
60
  ok: 200,
56
61
  };
@@ -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.1",
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",
@@ -41,7 +41,7 @@
41
41
  "@types/ws": "^7.4.7",
42
42
  "jasmine": "^3.9.0",
43
43
  "protobufjs-cli": "^1.0.2",
44
- "spec-3nweb-server": "^1.7.14",
44
+ "spec-3nweb-server": "^1.8.0",
45
45
  "tsuml2": "^0.17.1",
46
46
  "typescript": "^5.5.3"
47
47
  }
@@ -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
+ Sat Oct 04 2025 23:52:23 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:23 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Sat Oct 04 2025 23:52:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Sat Oct 04 2025 23:52:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:52 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Sat Oct 04 2025 23:52:52 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:52 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Sat Oct 04 2025 23:52:52 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
13
+
14
+ Error message: undefined
15
+
16
+ Sat Oct 04 2025 23:52:52 GMT-0400 (Eastern Daylight Saving Time) ==================================
17
+ Core version 0.42.1
18
+ Log level: error.
19
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
20
+
21
+ Error message: undefined
22
+
23
+ Sat Oct 04 2025 23:52:52 GMT-0400 (Eastern Daylight Saving Time) ==================================
24
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:25 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Sat Oct 04 2025 23:52:25 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:15 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Sat Oct 04 2025 23:52:15 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
13
+
14
+ Error message: undefined
15
+
16
+ Sat Oct 04 2025 23:52:15 GMT-0400 (Eastern Daylight Saving Time) ==================================
17
+ Core version 0.42.1
18
+ Log level: error.
19
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
20
+
21
+ Error message: undefined
22
+
23
+ Sat Oct 04 2025 23:52:15 GMT-0400 (Eastern Daylight Saving Time) ==================================
24
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:21 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Sat Oct 04 2025 23:52:21 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
13
+
14
+ Error message: undefined
15
+
16
+ Sat Oct 04 2025 23:52:21 GMT-0400 (Eastern Daylight Saving Time) ==================================
17
+ Core version 0.42.1
18
+ Log level: error.
19
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
20
+
21
+ Error message: undefined
22
+
23
+ Sat Oct 04 2025 23:52:21 GMT-0400 (Eastern Daylight Saving Time) ==================================
24
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:27 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Sat Oct 04 2025 23:52:27 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:30 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Sat Oct 04 2025 23:52:30 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:39 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Sat Oct 04 2025 23:52:39 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:44 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Sat Oct 04 2025 23:52:44 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
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
+ Sat Oct 04 2025 23:52:44 GMT-0400 (Eastern Daylight Saving Time) ==================================
3
+ Core version 0.42.1
4
+ Log level: error.
5
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
6
+
7
+ Error message: undefined
8
+
9
+ Sat Oct 04 2025 23:52:44 GMT-0400 (Eastern Daylight Saving Time) ==================================
10
+ Core version 0.42.1
11
+ Log level: error.
12
+ WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
13
+
14
+ Error message: undefined
15
+
16
+ Sat Oct 04 2025 23:52:44 GMT-0400 (Eastern Daylight Saving Time) ==================================
17
+ Core version 0.42.1
18
+ Log level: error.
19
+ WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
20
+
21
+ Error message: undefined
22
+
23
+ Sat Oct 04 2025 23:52:44 GMT-0400 (Eastern Daylight Saving Time) ==================================
24
+ Core version 0.42.1
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