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.
- package/build/core/asmail/inbox/inbox-events.d.ts +21 -2
- package/build/core/asmail/inbox/inbox-events.js +123 -19
- package/build/core/asmail/inbox/index.d.ts +2 -0
- package/build/core/asmail/inbox/index.js +11 -5
- package/build/core/asmail/index.d.ts +2 -0
- package/build/core/asmail/index.js +6 -0
- package/build/core/index.js +8 -2
- package/build/core/storage/index.d.ts +2 -19
- package/build/core/storage/index.js +10 -3
- package/build/core/storage/synced/remote-events.d.ts +2 -0
- package/build/core/storage/synced/remote-events.js +17 -3
- package/build/core/storage/synced/storage.d.ts +2 -0
- package/build/core/storage/synced/storage.js +7 -1
- package/build/lib-client/asmail/recipient.js +1 -2
- package/build/lib-client/server-events.d.ts +1 -6
- package/build/lib-client/server-events.js +5 -51
- package/build/lib-client/xsp-fs/common.d.ts +2 -0
- package/build/lib-client/xsp-fs/common.js +3 -1
- package/build/lib-common/service-api/asmail/retrieval.d.ts +6 -1
- package/build/lib-common/service-api/asmail/retrieval.js +7 -2
- package/build/lib-index.d.ts +1 -1
- package/build/lib-index.js +1 -2
- package/package.json +2 -2
- 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
- package/test-data-10-1759636364594/util/logs/2025-10-05.log.txt +14 -0
- package/test-data-11-1759636364595/util/logs/2025-10-05.log.txt +14 -0
- package/test-data-12-1759636368628/util/logs/2025-10-05.log.txt +14 -0
- package/test-data-13-1759636369614/util/logs/2025-10-05.log.txt +28 -0
- package/test-data-2-1759636324173/util/logs/2025-10-05.log.txt +14 -0
- package/test-data-3-1759636329651/util/logs/2025-10-05.log.txt +28 -0
- package/test-data-4-1759636335955/util/logs/2025-10-05.log.txt +28 -0
- package/test-data-5-1759636345925/util/logs/2025-10-05.log.txt +14 -0
- package/test-data-6-1759636347983/util/logs/2025-10-05.log.txt +14 -0
- package/test-data-7-1759636350156/util/logs/2025-10-05.log.txt +14 -0
- package/test-data-8-1759636359769/util/logs/2025-10-05.log.txt +14 -0
- package/test-data-9-1759636360774/util/logs/2025-10-05.log.txt +28 -0
- package/test-data-1-1759456500985/util/logs/2025-10-03.log.txt +0 -7
- package/test-data-11-1759456540616/util/logs/2025-10-03.log.txt +0 -7
- package/test-data-12-1759456544627/util/logs/2025-10-03.log.txt +0 -7
- package/test-data-13-1759456545560/util/logs/2025-10-03.log.txt +0 -14
- package/test-data-2-1759456500988/util/logs/2025-10-03.log.txt +0 -7
- package/test-data-3-1759456506409/util/logs/2025-10-03.log.txt +0 -14
- package/test-data-4-1759456512650/util/logs/2025-10-03.log.txt +0 -14
- package/test-data-5-1759456522373/util/logs/2025-10-03.log.txt +0 -7
- package/test-data-6-1759456524407/util/logs/2025-10-03.log.txt +0 -7
- package/test-data-7-1759456526517/util/logs/2025-10-03.log.txt +0 -7
- package/test-data-8-1759456536045/util/logs/2025-10-03.log.txt +0 -7
- 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
|
-
|
|
18
|
-
private
|
|
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
|
-
|
|
37
|
-
this.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
})
|
|
53
|
-
|
|
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);
|
|
@@ -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
|
-
|
|
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);
|
|
@@ -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);
|
package/build/core/index.js
CHANGED
|
@@ -326,8 +326,14 @@ class Core {
|
|
|
326
326
|
getStorages() {
|
|
327
327
|
return this.storages.wrap();
|
|
328
328
|
}
|
|
329
|
-
async onDeviceSystemSuspend() {
|
|
330
|
-
|
|
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.
|
|
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) {
|
|
@@ -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)
|
|
40
|
-
this.absorbingRemoteEventsProc = (0, rxjs_1.merge)(this.absorbObjChange(serverEvents), this.absorbObjRemoval(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.
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
};
|
package/build/lib-index.d.ts
CHANGED
|
@@ -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
|
|
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";
|
package/build/lib-index.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
3
|
-
Core version 0.
|
|
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
|
-
|
|
10
|
-
Core version 0.
|
|
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,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,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,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
|