core-3nweb-client-lib 0.42.4 → 0.42.5
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 +7 -1
- package/build/core/asmail/inbox/inbox-events.js +17 -5
- package/build/core/asmail/inbox/index.d.ts +1 -0
- package/build/core/asmail/inbox/index.js +3 -0
- package/build/core/asmail/index.d.ts +1 -0
- package/build/core/asmail/index.js +3 -0
- package/build/core/index.d.ts +3 -0
- package/build/core/index.js +5 -0
- package/build/core/storage/common/constants.d.ts +1 -1
- package/build/core/storage/common/constants.js +6 -5
- package/build/core/storage/index.js +3 -3
- package/build/core/storage/synced/remote-events.d.ts +7 -0
- package/build/core/storage/synced/remote-events.js +27 -14
- package/build/lib-client/3nstorage/storage-owner.d.ts +2 -3
- package/build/lib-client/3nstorage/storage-owner.js +2 -2
- package/build/lib-client/asmail/recipient.d.ts +2 -3
- package/build/lib-client/asmail/recipient.js +2 -2
- package/build/lib-common/ipc/ws-ipc.d.ts +18 -2
- package/build/lib-common/ipc/ws-ipc.js +62 -79
- package/build/lib-index.d.ts +1 -0
- package/build/lib-index.js +2 -1
- package/package.json +1 -1
- package/build/lib-client/server-events.d.ts +0 -14
- package/build/lib-client/server-events.js +0 -82
- package/test-data-1-1759766726524/util/logs/2025-10-06.log.txt +0 -14
- package/test-data-10-1759766763382/util/logs/2025-10-06.log.txt +0 -14
- package/test-data-11-1759766763382/util/logs/2025-10-06.log.txt +0 -14
- package/test-data-12-1759766767122/util/logs/2025-10-06.log.txt +0 -14
- package/test-data-13-1759766767971/util/logs/2025-10-06.log.txt +0 -28
- package/test-data-2-1759766726527/util/logs/2025-10-06.log.txt +0 -14
- package/test-data-3-1759766731046/util/logs/2025-10-06.log.txt +0 -28
- package/test-data-4-1759766737027/util/logs/2025-10-06.log.txt +0 -28
- package/test-data-5-1759766746387/util/logs/2025-10-06.log.txt +0 -14
- package/test-data-6-1759766748340/util/logs/2025-10-06.log.txt +0 -14
- package/test-data-7-1759766750334/util/logs/2025-10-06.log.txt +0 -14
- package/test-data-8-1759766759011/util/logs/2025-10-06.log.txt +0 -14
- package/test-data-9-1759766759878/util/logs/2025-10-06.log.txt +0 -28
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { MailRecipient } from '../../../lib-client/asmail/recipient';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
2
3
|
import { LogError } from '../../../lib-client/logging/log-to-file';
|
|
4
|
+
import { ConnectionStatus } from '../../../lib-common/ipc/ws-ipc';
|
|
3
5
|
type IncomingMessage = web3n.asmail.IncomingMessage;
|
|
4
6
|
type InboxEventType = web3n.asmail.InboxEventType;
|
|
5
7
|
type Observer<T> = web3n.Observer<T>;
|
|
6
8
|
type MsgInfo = web3n.asmail.MsgInfo;
|
|
9
|
+
export interface InboxConnectionStatus extends ConnectionStatus {
|
|
10
|
+
service: 'inbox';
|
|
11
|
+
}
|
|
7
12
|
/**
|
|
8
13
|
* Instance of this class handles event subscription from UI side. It observes
|
|
9
14
|
* inbox server events, handles them, and generates respective events for UI
|
|
@@ -22,8 +27,9 @@ export declare class InboxEvents {
|
|
|
22
27
|
private readonly logError;
|
|
23
28
|
private readonly newMsgs;
|
|
24
29
|
private readonly newMsg$;
|
|
30
|
+
private readonly connectionEvents;
|
|
31
|
+
readonly connectionEvent$: Observable<InboxConnectionStatus>;
|
|
25
32
|
private listeningProc;
|
|
26
|
-
private readonly makeServerEvents;
|
|
27
33
|
private networkActive;
|
|
28
34
|
private disconnectedAt;
|
|
29
35
|
constructor(msgReceiver: MailRecipient, getMsg: (msgId: string) => Promise<IncomingMessage>, listNewMsgs: (fromTS: number) => Promise<MsgInfo[]>, rmMsg: (msgId: string) => Promise<void>, logError: LogError);
|
|
@@ -19,10 +19,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
19
19
|
exports.InboxEvents = void 0;
|
|
20
20
|
const rxjs_1 = require("rxjs");
|
|
21
21
|
const retrieval_1 = require("../../../lib-common/service-api/asmail/retrieval");
|
|
22
|
-
const server_events_1 = require("../../../lib-client/server-events");
|
|
23
22
|
const operators_1 = require("rxjs/operators");
|
|
24
23
|
const utils_for_observables_1 = require("../../../lib-common/utils-for-observables");
|
|
24
|
+
const ws_ipc_1 = require("../../../lib-common/ipc/ws-ipc");
|
|
25
25
|
const sleep_1 = require("../../../lib-common/processes/sleep");
|
|
26
|
+
function toInboxConnectionStatus(status, params) {
|
|
27
|
+
return (0, ws_ipc_1.addToStatus)(status, {
|
|
28
|
+
service: 'inbox',
|
|
29
|
+
...params
|
|
30
|
+
});
|
|
31
|
+
}
|
|
26
32
|
const SERVER_EVENTS_RESTART_WAIT_SECS = 5;
|
|
27
33
|
const BUFFER_MILLIS_FOR_LISTING = 2 * 60 * 1000;
|
|
28
34
|
/**
|
|
@@ -44,10 +50,11 @@ class InboxEvents {
|
|
|
44
50
|
this.logError = logError;
|
|
45
51
|
this.newMsgs = new rxjs_1.Subject();
|
|
46
52
|
this.newMsg$ = this.newMsgs.asObservable().pipe((0, operators_1.share)());
|
|
53
|
+
this.connectionEvents = new rxjs_1.Subject();
|
|
54
|
+
this.connectionEvent$ = this.connectionEvents.asObservable().pipe((0, operators_1.share)());
|
|
47
55
|
this.listeningProc = undefined;
|
|
48
56
|
this.networkActive = true;
|
|
49
57
|
this.disconnectedAt = undefined;
|
|
50
|
-
this.makeServerEvents = () => new server_events_1.ServerEvents(() => msgReceiver.openEventSource(this.logError));
|
|
51
58
|
this.startListening();
|
|
52
59
|
Object.seal(this);
|
|
53
60
|
}
|
|
@@ -63,9 +70,14 @@ class InboxEvents {
|
|
|
63
70
|
this.disconnectedAt = Date.now();
|
|
64
71
|
}
|
|
65
72
|
};
|
|
66
|
-
const sub = this.
|
|
67
|
-
|
|
68
|
-
.
|
|
73
|
+
const sub = (0, rxjs_1.from)(this.msgReceiver.openEventSource().then(({ client, heartbeat }) => {
|
|
74
|
+
const channel = retrieval_1.msgRecievedCompletely.EVENT_NAME;
|
|
75
|
+
heartbeat.subscribe({
|
|
76
|
+
next: ev => this.connectionEvents.next(toInboxConnectionStatus(ev))
|
|
77
|
+
});
|
|
78
|
+
return new rxjs_1.Observable(obs => client.subscribe(channel, obs));
|
|
79
|
+
}))
|
|
80
|
+
.pipe((0, operators_1.mergeMap)(events => events), (0, operators_1.mergeMap)(async (ev) => this.getMessage(ev.msgId), 5))
|
|
69
81
|
.subscribe({
|
|
70
82
|
next: msg => {
|
|
71
83
|
if (msg) {
|
|
@@ -333,6 +333,9 @@ class InboxOnServer {
|
|
|
333
333
|
resumeNetworkActivity() {
|
|
334
334
|
this.inboxEvents.resumeNetworkActivity();
|
|
335
335
|
}
|
|
336
|
+
get connectivityEvent$() {
|
|
337
|
+
return this.inboxEvents.connectionEvent$;
|
|
338
|
+
}
|
|
336
339
|
}
|
|
337
340
|
exports.InboxOnServer = InboxOnServer;
|
|
338
341
|
Object.freeze(InboxOnServer.prototype);
|
package/build/core/index.d.ts
CHANGED
|
@@ -47,5 +47,8 @@ export declare class Core {
|
|
|
47
47
|
getStorages(): FactoryOfFSs;
|
|
48
48
|
onDeviceSystemSuspend(): Promise<void>;
|
|
49
49
|
onDeviceSystemResume(): Promise<void>;
|
|
50
|
+
get connectivityEvents(): {
|
|
51
|
+
inbox$: import("rxjs").Observable<import("./asmail/inbox/inbox-events").InboxConnectionStatus>;
|
|
52
|
+
};
|
|
50
53
|
}
|
|
51
54
|
export {};
|
package/build/core/index.js
CHANGED
|
@@ -334,6 +334,11 @@ class Core {
|
|
|
334
334
|
this.storages.resumeNetworkActivity();
|
|
335
335
|
this.asmail.resumeNetworkActivity();
|
|
336
336
|
}
|
|
337
|
+
get connectivityEvents() {
|
|
338
|
+
return {
|
|
339
|
+
inbox$: this.asmail.connectivityEvent$
|
|
340
|
+
};
|
|
341
|
+
}
|
|
337
342
|
}
|
|
338
343
|
exports.Core = Core;
|
|
339
344
|
Object.freeze(Core.prototype);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const SYSTEM_PREFIX = "computer.3nweb";
|
|
2
2
|
export declare const ASMAIL_APP_NAME = "computer.3nweb.core.asmail";
|
|
3
3
|
export declare const KEYRINGS_APP_NAME = "computer.3nweb.core.keyrings";
|
|
4
4
|
export declare const MAILERID_APP_NAME = "computer.3nweb.core.mailerid";
|
|
@@ -16,9 +16,10 @@
|
|
|
16
16
|
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.MAILERID_APP_NAME = exports.KEYRINGS_APP_NAME = exports.ASMAIL_APP_NAME = exports.
|
|
20
|
-
exports.
|
|
21
|
-
|
|
22
|
-
exports.
|
|
23
|
-
exports.
|
|
19
|
+
exports.MAILERID_APP_NAME = exports.KEYRINGS_APP_NAME = exports.ASMAIL_APP_NAME = exports.SYSTEM_PREFIX = void 0;
|
|
20
|
+
exports.SYSTEM_PREFIX = 'computer.3nweb';
|
|
21
|
+
const CORE_APPS_PREFIX = `${exports.SYSTEM_PREFIX}.core`;
|
|
22
|
+
exports.ASMAIL_APP_NAME = `${CORE_APPS_PREFIX}.asmail`;
|
|
23
|
+
exports.KEYRINGS_APP_NAME = `${CORE_APPS_PREFIX}.keyrings`;
|
|
24
|
+
exports.MAILERID_APP_NAME = `${CORE_APPS_PREFIX}.mailerid`;
|
|
24
25
|
Object.freeze(exports);
|
|
@@ -186,8 +186,8 @@ class StorageAndFS {
|
|
|
186
186
|
* @param dst is a path starting with core app folder name
|
|
187
187
|
*/
|
|
188
188
|
async migrateCoreAppDataOnFirstRun(src, dst) {
|
|
189
|
-
(0, assert_1.assert)(src.startsWith(constants_1.
|
|
190
|
-
dst.startsWith(constants_1.
|
|
189
|
+
(0, assert_1.assert)(src.startsWith(constants_1.SYSTEM_PREFIX) && !src.includes('..') &&
|
|
190
|
+
dst.startsWith(constants_1.SYSTEM_PREFIX) && !dst.includes('..'), `Invalid core app data migration paths`);
|
|
191
191
|
if (!(await this.rootFS.checkFolderPresence(src))
|
|
192
192
|
|| !(await this.rootFS.checkFilePresence(src))
|
|
193
193
|
|| (await this.rootFS.checkFolderPresence(dst))
|
|
@@ -454,7 +454,7 @@ class PerAppStorage {
|
|
|
454
454
|
if (typeof appFolder !== 'string') {
|
|
455
455
|
throw makeBadAppNameExc(appFolder);
|
|
456
456
|
}
|
|
457
|
-
if (appFolder.startsWith(constants_1.
|
|
457
|
+
if (appFolder.startsWith(constants_1.SYSTEM_PREFIX)) {
|
|
458
458
|
throw makeNotAllowedToOpenAppFSExc(appFolder);
|
|
459
459
|
}
|
|
460
460
|
if (!this.policy.canOpenAppFS(appFolder, type)) {
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
1
2
|
import { StorageOwner } from '../../../lib-client/3nstorage/storage-owner';
|
|
2
3
|
import { ObjFiles } from './obj-files';
|
|
3
4
|
import { Storage } from '../../../lib-client/xsp-fs/common';
|
|
4
5
|
import { LogError } from '../../../lib-client/logging/log-to-file';
|
|
6
|
+
import { ConnectionStatus } from '../../../lib-common/ipc/ws-ipc';
|
|
7
|
+
export interface StorageConnectionStatus extends ConnectionStatus {
|
|
8
|
+
service: 'storage';
|
|
9
|
+
}
|
|
5
10
|
/**
|
|
6
11
|
* Remote events are absorbed into objects' statuses, broadcasting respective
|
|
7
12
|
* events. Someone down the stream can react to these changes from remote.
|
|
@@ -11,6 +16,8 @@ export declare class RemoteEvents {
|
|
|
11
16
|
private readonly files;
|
|
12
17
|
private readonly broadcastNodeEvent;
|
|
13
18
|
private readonly logError;
|
|
19
|
+
private readonly connectionEvents;
|
|
20
|
+
readonly connectionEvent$: Observable<StorageConnectionStatus>;
|
|
14
21
|
constructor(remoteStorage: StorageOwner, files: ObjFiles, broadcastNodeEvent: Storage['broadcastNodeEvent'], logError: LogError);
|
|
15
22
|
private absorbingRemoteEventsProc;
|
|
16
23
|
startAbsorbingRemoteEvents(): void;
|
|
@@ -18,9 +18,15 @@
|
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
exports.RemoteEvents = void 0;
|
|
20
20
|
const rxjs_1 = require("rxjs");
|
|
21
|
-
const server_events_1 = require("../../../lib-client/server-events");
|
|
22
21
|
const owner_1 = require("../../../lib-common/service-api/3nstorage/owner");
|
|
23
22
|
const operators_1 = require("rxjs/operators");
|
|
23
|
+
const ws_ipc_1 = require("../../../lib-common/ipc/ws-ipc");
|
|
24
|
+
function toStorageConnectionStatus(status, params) {
|
|
25
|
+
return (0, ws_ipc_1.addToStatus)(status, {
|
|
26
|
+
service: 'storage',
|
|
27
|
+
...params
|
|
28
|
+
});
|
|
29
|
+
}
|
|
24
30
|
const SERVER_EVENTS_RESTART_WAIT_SECS = 5;
|
|
25
31
|
/**
|
|
26
32
|
* Remote events are absorbed into objects' statuses, broadcasting respective
|
|
@@ -32,16 +38,23 @@ class RemoteEvents {
|
|
|
32
38
|
this.files = files;
|
|
33
39
|
this.broadcastNodeEvent = broadcastNodeEvent;
|
|
34
40
|
this.logError = logError;
|
|
41
|
+
this.connectionEvents = new rxjs_1.Subject();
|
|
42
|
+
this.connectionEvent$ = this.connectionEvents.asObservable().pipe((0, operators_1.share)());
|
|
35
43
|
this.absorbingRemoteEventsProc = undefined;
|
|
36
44
|
Object.seal(this);
|
|
37
45
|
}
|
|
38
46
|
startAbsorbingRemoteEvents() {
|
|
39
|
-
|
|
40
|
-
|
|
47
|
+
this.absorbingRemoteEventsProc = (0, rxjs_1.from)(this.remoteStorage.openEventSource().then(({ client, heartbeat }) => {
|
|
48
|
+
heartbeat.subscribe({
|
|
49
|
+
next: ev => this.connectionEvents.next(toStorageConnectionStatus(ev))
|
|
50
|
+
});
|
|
51
|
+
return client;
|
|
52
|
+
}))
|
|
53
|
+
.pipe((0, operators_1.map)(client => (0, rxjs_1.merge)(this.absorbObjChange(client), this.absorbObjRemoval(client),
|
|
41
54
|
// XXX commenting out to see if unknownEvent exception goes away
|
|
42
55
|
// Is server doesn't know it?
|
|
43
|
-
// this.absorbObjVersionArchival(
|
|
44
|
-
this.absorbArchVersionRemoval(
|
|
56
|
+
// this.absorbObjVersionArchival(client),
|
|
57
|
+
this.absorbArchVersionRemoval(client))), (0, operators_1.mergeMap)(event$ => event$))
|
|
45
58
|
.subscribe({
|
|
46
59
|
next: noop,
|
|
47
60
|
error: async (err) => {
|
|
@@ -59,8 +72,8 @@ class RemoteEvents {
|
|
|
59
72
|
this.absorbingRemoteEventsProc = undefined;
|
|
60
73
|
}
|
|
61
74
|
}
|
|
62
|
-
absorbObjChange(
|
|
63
|
-
return
|
|
75
|
+
absorbObjChange(client) {
|
|
76
|
+
return (new rxjs_1.Observable(obs => client.subscribe(owner_1.events.objChanged.EVENT_NAME, obs)))
|
|
64
77
|
.pipe((0, operators_1.mergeMap)(async ({ newVer, objId }) => {
|
|
65
78
|
if (!Number.isInteger(newVer) || (newVer < 1)) {
|
|
66
79
|
return;
|
|
@@ -77,9 +90,9 @@ class RemoteEvents {
|
|
|
77
90
|
});
|
|
78
91
|
}, 1));
|
|
79
92
|
}
|
|
80
|
-
absorbObjRemoval(
|
|
81
|
-
return
|
|
82
|
-
.pipe((0, operators_1.filter)(
|
|
93
|
+
absorbObjRemoval(client) {
|
|
94
|
+
return (new rxjs_1.Observable(obs => client.subscribe(owner_1.events.objRemoved.EVENT_NAME, obs)))
|
|
95
|
+
.pipe((0, operators_1.filter)(objRmEvent => !!objRmEvent.objId), (0, operators_1.mergeMap)(async ({ objId }) => {
|
|
83
96
|
const obj = await this.files.findObj(objId);
|
|
84
97
|
if (!obj) {
|
|
85
98
|
return;
|
|
@@ -91,8 +104,8 @@ class RemoteEvents {
|
|
|
91
104
|
});
|
|
92
105
|
}, 1));
|
|
93
106
|
}
|
|
94
|
-
absorbObjVersionArchival(
|
|
95
|
-
return
|
|
107
|
+
absorbObjVersionArchival(client) {
|
|
108
|
+
return (new rxjs_1.Observable(obs => client.subscribe(owner_1.events.objVersionArchived.EVENT_NAME, obs)))
|
|
96
109
|
.pipe((0, operators_1.mergeMap)(async ({ objId, archivedVer }) => {
|
|
97
110
|
const obj = await this.files.findObj(objId);
|
|
98
111
|
if (!obj) {
|
|
@@ -106,8 +119,8 @@ class RemoteEvents {
|
|
|
106
119
|
});
|
|
107
120
|
}, 1));
|
|
108
121
|
}
|
|
109
|
-
absorbArchVersionRemoval(
|
|
110
|
-
return
|
|
122
|
+
absorbArchVersionRemoval(client) {
|
|
123
|
+
return (new rxjs_1.Observable(obs => client.subscribe(owner_1.events.objArchivedVersionRemoved.EVENT_NAME, obs)))
|
|
111
124
|
.pipe((0, operators_1.mergeMap)(async ({ objId, archivedVer }) => {
|
|
112
125
|
const obj = await this.files.findObj(objId);
|
|
113
126
|
if (!obj) {
|
|
@@ -2,9 +2,8 @@ import { NetClient } from '../request-utils';
|
|
|
2
2
|
import * as api from '../../lib-common/service-api/3nstorage/owner';
|
|
3
3
|
import { ServiceUser, IGetMailerIdSigner } from '../user-with-mid-session';
|
|
4
4
|
import * as keyGen from '../key-derivation';
|
|
5
|
-
import {
|
|
5
|
+
import { makeSubscriber } from '../../lib-common/ipc/ws-ipc';
|
|
6
6
|
import { ObjId } from '../xsp-fs/common';
|
|
7
|
-
import { LogError } from '../logging/log-to-file';
|
|
8
7
|
export type FirstSaveReqOpts = api.PutObjFirstQueryOpts;
|
|
9
8
|
export type FollowingSaveReqOpts = api.PutObjSecondQueryOpts;
|
|
10
9
|
export declare class StorageOwner extends ServiceUser {
|
|
@@ -87,5 +86,5 @@ export declare class StorageOwner extends ServiceUser {
|
|
|
87
86
|
* @return a promise, resolvable, when an object is deleted.
|
|
88
87
|
*/
|
|
89
88
|
deleteObj(objId: string): Promise<void>;
|
|
90
|
-
openEventSource(
|
|
89
|
+
openEventSource(): Promise<ReturnType<typeof makeSubscriber>>;
|
|
91
90
|
}
|
|
@@ -329,10 +329,10 @@ class StorageOwner extends user_with_mid_session_1.ServiceUser {
|
|
|
329
329
|
throw (0, request_utils_1.makeException)(rep, 'Unexpected status');
|
|
330
330
|
}
|
|
331
331
|
}
|
|
332
|
-
async openEventSource(
|
|
332
|
+
async openEventSource() {
|
|
333
333
|
const rep = await this.openWS(api.wsEventChannel.URL_END);
|
|
334
334
|
if (rep.status === api.wsEventChannel.SC.ok) {
|
|
335
|
-
return (0, ws_ipc_1.makeSubscriber)(rep.data, undefined
|
|
335
|
+
return (0, ws_ipc_1.makeSubscriber)(rep.data, undefined);
|
|
336
336
|
}
|
|
337
337
|
else {
|
|
338
338
|
throw (0, request_utils_1.makeException)(rep, 'Unexpected status');
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { NetClient } from '../request-utils';
|
|
2
2
|
import * as api from '../../lib-common/service-api/asmail/retrieval';
|
|
3
3
|
import { ServiceUser, IGetMailerIdSigner } from '../user-with-mid-session';
|
|
4
|
-
import {
|
|
5
|
-
import { LogError } from '../logging/log-to-file';
|
|
4
|
+
import { makeSubscriber } from '../../lib-common/ipc/ws-ipc';
|
|
6
5
|
type InboxException = web3n.asmail.InboxException;
|
|
7
6
|
export declare function makeMsgNotFoundException(msgId: string): InboxException;
|
|
8
7
|
export declare function makeObjNotFoundException(msgId: string, objId: string): InboxException;
|
|
@@ -37,6 +36,6 @@ export declare class MailRecipient extends ServiceUser {
|
|
|
37
36
|
*/
|
|
38
37
|
getObjSegs(msgId: string, objId: string, start: number, end: number): Promise<Uint8Array>;
|
|
39
38
|
removeMsg(msgId: string): Promise<void>;
|
|
40
|
-
openEventSource(
|
|
39
|
+
openEventSource(): Promise<ReturnType<typeof makeSubscriber>>;
|
|
41
40
|
}
|
|
42
41
|
export {};
|
|
@@ -191,10 +191,10 @@ class MailRecipient extends user_with_mid_session_1.ServiceUser {
|
|
|
191
191
|
throw (0, request_utils_1.makeException)(rep, 'Unexpected status');
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
|
-
async openEventSource(
|
|
194
|
+
async openEventSource() {
|
|
195
195
|
const rep = await this.openWS(api.wsEventChannel.URL_END);
|
|
196
196
|
if (rep.status === api.wsEventChannel.SC.ok) {
|
|
197
|
-
return (0, ws_ipc_1.makeSubscriber)(rep.data, undefined
|
|
197
|
+
return (0, ws_ipc_1.makeSubscriber)(rep.data, undefined);
|
|
198
198
|
}
|
|
199
199
|
else {
|
|
200
200
|
throw (0, request_utils_1.makeException)(rep, 'Unexpected status');
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
2
|
import { SubscribingClient } from './generic-ipc';
|
|
3
3
|
import * as WebSocket from 'ws';
|
|
4
4
|
export { RequestEnvelope, RequestHandler, EventfulServer, makeEventfulServer, SubscribingClient } from './generic-ipc';
|
|
@@ -8,4 +8,20 @@ export interface WSException extends web3n.RuntimeException {
|
|
|
8
8
|
socketClosed?: true;
|
|
9
9
|
}
|
|
10
10
|
export declare function makeWSException(params: Partial<WSException>, flags?: Partial<WSException>): WSException;
|
|
11
|
-
export
|
|
11
|
+
export interface ConnectionStatus {
|
|
12
|
+
/**
|
|
13
|
+
* ping number is a number of millisecond between previous and current data receiving from server.
|
|
14
|
+
*/
|
|
15
|
+
ping?: number;
|
|
16
|
+
/**
|
|
17
|
+
* This mirrors a "slow socket" exception, thrown to data sending process.
|
|
18
|
+
*/
|
|
19
|
+
slowSocket?: true;
|
|
20
|
+
socketClosed?: true;
|
|
21
|
+
error?: any;
|
|
22
|
+
}
|
|
23
|
+
export declare function makeSubscriber(ws: WebSocket, ipcChannel: string | undefined): {
|
|
24
|
+
client: SubscribingClient;
|
|
25
|
+
heartbeat: Observable<ConnectionStatus>;
|
|
26
|
+
};
|
|
27
|
+
export declare function addToStatus<T extends ConnectionStatus>(status: ConnectionStatus, params: Partial<T>): T;
|
|
@@ -18,6 +18,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
exports.makeEventfulServer = void 0;
|
|
19
19
|
exports.makeWSException = makeWSException;
|
|
20
20
|
exports.makeSubscriber = makeSubscriber;
|
|
21
|
+
exports.addToStatus = addToStatus;
|
|
22
|
+
const rxjs_1 = require("rxjs");
|
|
21
23
|
const runtime_1 = require("../exceptions/runtime");
|
|
22
24
|
const generic_ipc_1 = require("./generic-ipc");
|
|
23
25
|
var generic_ipc_2 = require("./generic-ipc");
|
|
@@ -32,31 +34,10 @@ const MAX_TXT_BUFFER = 64 * 1024;
|
|
|
32
34
|
* messages.
|
|
33
35
|
* @param ws
|
|
34
36
|
*/
|
|
35
|
-
function makeJsonCommPoint(ws
|
|
37
|
+
function makeJsonCommPoint(ws) {
|
|
36
38
|
const observers = new generic_ipc_1.MultiObserverWrap();
|
|
37
|
-
const
|
|
38
|
-
ws.on('message',
|
|
39
|
-
ws.on('close', onClose(observers, resetTimer));
|
|
40
|
-
ws.on('error', onError(ws, observers, resetTimer));
|
|
41
|
-
ws.on('ping', onPing(ws, resetTimer));
|
|
42
|
-
const commPoint = {
|
|
43
|
-
subscribe: obs => observers.add(obs),
|
|
44
|
-
postMessage(env) {
|
|
45
|
-
if (ws.bufferedAmount > MAX_TXT_BUFFER) {
|
|
46
|
-
throw makeWSException({ socketSlow: true });
|
|
47
|
-
}
|
|
48
|
-
ws.send(JSON.stringify(env));
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
return commPoint;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* This generates an on-message callback for text messages in a web socket.
|
|
55
|
-
* @param ws
|
|
56
|
-
* @param observers
|
|
57
|
-
*/
|
|
58
|
-
function onTxtMessage(ws, observers, resetTimer) {
|
|
59
|
-
return (data) => {
|
|
39
|
+
const { heartbeat, healthyBeat, otherBeat } = makeHeartbeat();
|
|
40
|
+
ws.on('message', data => {
|
|
60
41
|
if (typeof data !== 'string') {
|
|
61
42
|
return;
|
|
62
43
|
}
|
|
@@ -69,83 +50,85 @@ function onTxtMessage(ws, observers, resetTimer) {
|
|
|
69
50
|
}
|
|
70
51
|
catch (err) {
|
|
71
52
|
ws.close();
|
|
53
|
+
otherBeat(err, true);
|
|
72
54
|
observers.error(err);
|
|
73
55
|
return;
|
|
74
56
|
}
|
|
75
57
|
observers.next(env);
|
|
76
|
-
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* This generates an on-close callback for a web socket.
|
|
81
|
-
* @param observers
|
|
82
|
-
*/
|
|
83
|
-
function onClose(observers, resetTimer) {
|
|
84
|
-
return (code, reason) => {
|
|
58
|
+
healthyBeat();
|
|
59
|
+
});
|
|
60
|
+
ws.on('close', (code, reason) => {
|
|
85
61
|
if (code === 1000) {
|
|
86
|
-
|
|
62
|
+
otherBeat(undefined, true);
|
|
87
63
|
observers.complete();
|
|
88
64
|
}
|
|
89
65
|
else {
|
|
90
|
-
|
|
66
|
+
otherBeat({ error: { code, reason } }, true);
|
|
91
67
|
observers.error(makeWSException({
|
|
92
68
|
socketClosed: true,
|
|
93
69
|
cause: { code, reason }
|
|
94
70
|
}));
|
|
95
71
|
}
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
* This generates an on-error callback for a web socket.
|
|
100
|
-
* @param ws
|
|
101
|
-
* @param observers
|
|
102
|
-
*/
|
|
103
|
-
function onError(ws, observers, closeTimer) {
|
|
104
|
-
return (err) => {
|
|
105
|
-
closeTimer(true, err);
|
|
72
|
+
});
|
|
73
|
+
ws.on('error', (err) => {
|
|
74
|
+
otherBeat(err, true);
|
|
106
75
|
observers.error(makeWSException({ cause: err }));
|
|
107
76
|
ws.close();
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
function onPing(ws, resetTimer) {
|
|
111
|
-
return () => {
|
|
112
|
-
resetTimer();
|
|
77
|
+
});
|
|
78
|
+
ws.on('ping', () => {
|
|
113
79
|
ws.pong();
|
|
80
|
+
healthyBeat();
|
|
81
|
+
});
|
|
82
|
+
const comm = {
|
|
83
|
+
subscribe: obs => observers.add(obs),
|
|
84
|
+
postMessage(env) {
|
|
85
|
+
if (ws.bufferedAmount > MAX_TXT_BUFFER) {
|
|
86
|
+
otherBeat({ slowSocket: true });
|
|
87
|
+
throw makeWSException({ socketSlow: true });
|
|
88
|
+
}
|
|
89
|
+
ws.send(JSON.stringify(env));
|
|
90
|
+
}
|
|
114
91
|
};
|
|
92
|
+
return { comm, heartbeat };
|
|
115
93
|
}
|
|
116
|
-
function
|
|
117
|
-
const
|
|
118
|
-
let
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
if (setNew) {
|
|
127
|
-
int = setInterval(() => {
|
|
128
|
-
log(`Ping/data from ${url} is not observed in last ${Math.floor((Date.now() - lastMoment) / 1000)} seconds`);
|
|
129
|
-
}, serverPingSettings * 1.5).unref();
|
|
130
|
-
}
|
|
94
|
+
function makeHeartbeat() {
|
|
95
|
+
const status = new rxjs_1.Subject();
|
|
96
|
+
let lastInfo = Date.now();
|
|
97
|
+
function healthyBeat() {
|
|
98
|
+
const now = Date.now();
|
|
99
|
+
status.next({
|
|
100
|
+
ping: now - lastInfo
|
|
101
|
+
});
|
|
102
|
+
lastInfo = now;
|
|
131
103
|
}
|
|
132
|
-
|
|
133
|
-
if (
|
|
134
|
-
|
|
135
|
-
log(err, `WebSocket to ${url} closed with error`);
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
log(null, `WebSocket to ${url} closed`);
|
|
139
|
-
}
|
|
140
|
-
resetWait(false);
|
|
104
|
+
function otherBeat(beat, end = false) {
|
|
105
|
+
if (beat) {
|
|
106
|
+
status.next(beat);
|
|
141
107
|
}
|
|
142
|
-
|
|
143
|
-
|
|
108
|
+
if (end) {
|
|
109
|
+
status.next({
|
|
110
|
+
socketClosed: true
|
|
111
|
+
});
|
|
112
|
+
status.complete();
|
|
144
113
|
}
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
heartbeat: status.asObservable().pipe((0, rxjs_1.share)()),
|
|
117
|
+
healthyBeat,
|
|
118
|
+
otherBeat
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function makeSubscriber(ws, ipcChannel) {
|
|
122
|
+
const { comm, heartbeat } = makeJsonCommPoint(ws);
|
|
123
|
+
return {
|
|
124
|
+
client: (0, generic_ipc_1.makeSubscribingClient)(ipcChannel, comm),
|
|
125
|
+
heartbeat
|
|
145
126
|
};
|
|
146
127
|
}
|
|
147
|
-
function
|
|
148
|
-
const
|
|
149
|
-
|
|
128
|
+
function addToStatus(status, params) {
|
|
129
|
+
for (const [field, value] of Object.values(params)) {
|
|
130
|
+
status[field] = value;
|
|
131
|
+
}
|
|
132
|
+
return status;
|
|
150
133
|
}
|
|
151
134
|
Object.freeze(exports);
|
package/build/lib-index.d.ts
CHANGED
|
@@ -11,3 +11,4 @@ export { appDirs } from './core/app-files';
|
|
|
11
11
|
export { sysFolders } from "./core/storage/system-folders";
|
|
12
12
|
export { DeviceFS } from './lib-client/local-files/device-fs';
|
|
13
13
|
export { makeLogger } from './lib-client/logging/log-to-file';
|
|
14
|
+
export declare const SYSTEM_DOMAIN = "3nweb.computer";
|
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.reverseDomain = exports.Storages = exports.IdManager = exports.SignUp = void 0;
|
|
33
|
+
exports.SYSTEM_DOMAIN = 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; } });
|
|
@@ -55,4 +55,5 @@ var device_fs_1 = require("./lib-client/local-files/device-fs");
|
|
|
55
55
|
Object.defineProperty(exports, "DeviceFS", { enumerable: true, get: function () { return device_fs_1.DeviceFS; } });
|
|
56
56
|
var log_to_file_1 = require("./lib-client/logging/log-to-file");
|
|
57
57
|
Object.defineProperty(exports, "makeLogger", { enumerable: true, get: function () { return log_to_file_1.makeLogger; } });
|
|
58
|
+
exports.SYSTEM_DOMAIN = '3nweb.computer';
|
|
58
59
|
Object.freeze(exports);
|
package/package.json
CHANGED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { SubscribingClient } from '../lib-common/ipc/generic-ipc';
|
|
2
|
-
import { Observable } from 'rxjs';
|
|
3
|
-
export declare class ServerEvents<N extends string, T> {
|
|
4
|
-
private readonly subscribeToServer;
|
|
5
|
-
private server;
|
|
6
|
-
private openningServer;
|
|
7
|
-
constructor(subscribeToServer: () => Promise<SubscribingClient>);
|
|
8
|
-
/**
|
|
9
|
-
* This method creates an observable of server's events.
|
|
10
|
-
* @param event is an event on server, to which to subscribe.
|
|
11
|
-
*/
|
|
12
|
-
observe(event: N): Observable<T>;
|
|
13
|
-
private setServer;
|
|
14
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
Copyright (C) 2017, 2019, 2022, 2025 3NSoft Inc.
|
|
4
|
-
|
|
5
|
-
This program is free software: you can redistribute it and/or modify it under
|
|
6
|
-
the terms of the GNU General Public License as published by the Free Software
|
|
7
|
-
Foundation, either version 3 of the License, or (at your option) any later
|
|
8
|
-
version.
|
|
9
|
-
|
|
10
|
-
This program is distributed in the hope that it will be useful, but
|
|
11
|
-
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
13
|
-
See the GNU General Public License for more details.
|
|
14
|
-
|
|
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/>.
|
|
17
|
-
*/
|
|
18
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.ServerEvents = void 0;
|
|
20
|
-
const rxjs_1 = require("rxjs");
|
|
21
|
-
const synced_1 = require("../lib-common/processes/synced");
|
|
22
|
-
class ServerEvents {
|
|
23
|
-
constructor(subscribeToServer) {
|
|
24
|
-
this.subscribeToServer = subscribeToServer;
|
|
25
|
-
this.server = undefined;
|
|
26
|
-
this.openningServer = new synced_1.SingleProc();
|
|
27
|
-
Object.seal(this);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* This method creates an observable of server's events.
|
|
31
|
-
* @param event is an event on server, to which to subscribe.
|
|
32
|
-
*/
|
|
33
|
-
observe(event) {
|
|
34
|
-
return new rxjs_1.Observable(observer => {
|
|
35
|
-
// simple sync creation of detach function
|
|
36
|
-
if (this.server) {
|
|
37
|
-
return this.server.subscribe(event, observer);
|
|
38
|
-
}
|
|
39
|
-
// detach function that works around of async creation of event source
|
|
40
|
-
let detach;
|
|
41
|
-
let obs = observer;
|
|
42
|
-
// open server, ensuring only one process running
|
|
43
|
-
if (!this.openningServer.isProcessing()) {
|
|
44
|
-
this.openningServer.addStarted(this.subscribeToServer());
|
|
45
|
-
}
|
|
46
|
-
this.openningServer.latestTaskAtThisMoment()
|
|
47
|
-
.then((server) => {
|
|
48
|
-
this.setServer(server);
|
|
49
|
-
if (!obs) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
detach = this.server.subscribe(event, obs);
|
|
53
|
-
obs = undefined;
|
|
54
|
-
})
|
|
55
|
-
.catch(err => {
|
|
56
|
-
obs === null || obs === void 0 ? void 0 : obs.error(err);
|
|
57
|
-
obs = undefined;
|
|
58
|
-
});
|
|
59
|
-
return () => {
|
|
60
|
-
if (detach) {
|
|
61
|
-
detach();
|
|
62
|
-
detach = undefined;
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
obs = undefined;
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
setServer(server) {
|
|
71
|
-
this.server = server;
|
|
72
|
-
this.server.on('end', () => {
|
|
73
|
-
if (this.server === server) {
|
|
74
|
-
this.server = undefined;
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
exports.ServerEvents = ServerEvents;
|
|
80
|
-
Object.freeze(ServerEvents.prototype);
|
|
81
|
-
Object.freeze(ServerEvents);
|
|
82
|
-
Object.freeze(exports);
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
Mon Oct 06 2025 12:05:44 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:05:44 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
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
|
-
Mon Oct 06 2025 12:06:07 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:06:07 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
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
|
-
Mon Oct 06 2025 12:06:07 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:06:07 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
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
|
-
Mon Oct 06 2025 12:06:10 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:06:10 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
11
|
-
Log level: error.
|
|
12
|
-
WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
|
|
13
|
-
|
|
14
|
-
Error message: undefined
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
Mon Oct 06 2025 12:06:10 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:06:10 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
11
|
-
Log level: error.
|
|
12
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
13
|
-
|
|
14
|
-
Error message: undefined
|
|
15
|
-
|
|
16
|
-
Mon Oct 06 2025 12:06:10 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
17
|
-
Core version 0.42.4
|
|
18
|
-
Log level: error.
|
|
19
|
-
WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
|
|
20
|
-
|
|
21
|
-
Error message: undefined
|
|
22
|
-
|
|
23
|
-
Mon Oct 06 2025 12:06:10 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
24
|
-
Core version 0.42.4
|
|
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
|
-
Mon Oct 06 2025 12:05:46 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:05:46 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
11
|
-
Log level: error.
|
|
12
|
-
WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
|
|
13
|
-
|
|
14
|
-
Error message: undefined
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
Mon Oct 06 2025 12:05:37 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:05:37 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
11
|
-
Log level: error.
|
|
12
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
13
|
-
|
|
14
|
-
Error message: undefined
|
|
15
|
-
|
|
16
|
-
Mon Oct 06 2025 12:05:37 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
17
|
-
Core version 0.42.4
|
|
18
|
-
Log level: error.
|
|
19
|
-
WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
|
|
20
|
-
|
|
21
|
-
Error message: undefined
|
|
22
|
-
|
|
23
|
-
Mon Oct 06 2025 12:05:37 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
24
|
-
Core version 0.42.4
|
|
25
|
-
Log level: error.
|
|
26
|
-
WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
|
|
27
|
-
|
|
28
|
-
Error message: undefined
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
Mon Oct 06 2025 12:05:42 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:05:42 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
11
|
-
Log level: error.
|
|
12
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
13
|
-
|
|
14
|
-
Error message: undefined
|
|
15
|
-
|
|
16
|
-
Mon Oct 06 2025 12:05:42 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
17
|
-
Core version 0.42.4
|
|
18
|
-
Log level: error.
|
|
19
|
-
WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
|
|
20
|
-
|
|
21
|
-
Error message: undefined
|
|
22
|
-
|
|
23
|
-
Mon Oct 06 2025 12:05:42 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
24
|
-
Core version 0.42.4
|
|
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
|
-
Mon Oct 06 2025 12:05:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:05:48 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
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
|
-
Mon Oct 06 2025 12:05:50 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:05:50 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
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
|
-
Mon Oct 06 2025 12:05:58 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:05:58 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
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
|
-
Mon Oct 06 2025 12:06:03 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:06:03 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
11
|
-
Log level: error.
|
|
12
|
-
WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
|
|
13
|
-
|
|
14
|
-
Error message: undefined
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
Mon Oct 06 2025 12:06:03 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
3
|
-
Core version 0.42.4
|
|
4
|
-
Log level: error.
|
|
5
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
6
|
-
|
|
7
|
-
Error message: undefined
|
|
8
|
-
|
|
9
|
-
Mon Oct 06 2025 12:06:03 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
10
|
-
Core version 0.42.4
|
|
11
|
-
Log level: error.
|
|
12
|
-
WebSocket to wss://localhost:8088/asmail/retrieval/events closed with error
|
|
13
|
-
|
|
14
|
-
Error message: undefined
|
|
15
|
-
|
|
16
|
-
Mon Oct 06 2025 12:06:03 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
17
|
-
Core version 0.42.4
|
|
18
|
-
Log level: error.
|
|
19
|
-
WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
|
|
20
|
-
|
|
21
|
-
Error message: undefined
|
|
22
|
-
|
|
23
|
-
Mon Oct 06 2025 12:06:03 GMT-0400 (Eastern Daylight Saving Time) ==================================
|
|
24
|
-
Core version 0.42.4
|
|
25
|
-
Log level: error.
|
|
26
|
-
WebSocket to wss://localhost:8088/3nstorage/owner/events closed with error
|
|
27
|
-
|
|
28
|
-
Error message: undefined
|