@push.rocks/smartsocket 2.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +10311 -0
- package/dist_bundle/bundle.js.map +7 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/index.d.ts +4 -0
- package/dist_ts/index.js +7 -0
- package/dist_ts/interfaces/connection.d.ts +4 -0
- package/dist_ts/interfaces/connection.js +2 -0
- package/dist_ts/interfaces/index.d.ts +2 -0
- package/dist_ts/interfaces/index.js +3 -0
- package/dist_ts/interfaces/tag.d.ts +7 -0
- package/dist_ts/interfaces/tag.js +2 -0
- package/dist_ts/smartsocket.classes.smartsocket.d.ts +43 -0
- package/dist_ts/smartsocket.classes.smartsocket.js +102 -0
- package/dist_ts/smartsocket.classes.smartsocketclient.d.ts +64 -0
- package/dist_ts/smartsocket.classes.smartsocketclient.js +217 -0
- package/dist_ts/smartsocket.classes.socketconnection.d.ts +65 -0
- package/dist_ts/smartsocket.classes.socketconnection.js +169 -0
- package/dist_ts/smartsocket.classes.socketfunction.d.ts +45 -0
- package/dist_ts/smartsocket.classes.socketfunction.js +40 -0
- package/dist_ts/smartsocket.classes.socketrequest.d.ts +47 -0
- package/dist_ts/smartsocket.classes.socketrequest.js +72 -0
- package/dist_ts/smartsocket.classes.socketserver.d.ts +35 -0
- package/dist_ts/smartsocket.classes.socketserver.js +78 -0
- package/dist_ts/smartsocket.logging.d.ts +2 -0
- package/dist_ts/smartsocket.logging.js +3 -0
- package/dist_ts/smartsocket.plugins.d.ts +13 -0
- package/dist_ts/smartsocket.plugins.js +16 -0
- package/dist_ts/smartsocket.pluginstyped.d.ts +15 -0
- package/dist_ts/smartsocket.pluginstyped.js +2 -0
- package/npmextra.json +18 -0
- package/package.json +64 -0
- package/readme.md +120 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/index.ts +7 -0
- package/ts/interfaces/connection.ts +11 -0
- package/ts/interfaces/index.ts +2 -0
- package/ts/interfaces/tag.ts +6 -0
- package/ts/smartsocket.classes.smartsocket.ts +137 -0
- package/ts/smartsocket.classes.smartsocketclient.ts +266 -0
- package/ts/smartsocket.classes.socketconnection.ts +224 -0
- package/ts/smartsocket.classes.socketfunction.ts +93 -0
- package/ts/smartsocket.classes.socketrequest.ts +126 -0
- package/ts/smartsocket.classes.socketserver.ts +94 -0
- package/ts/smartsocket.logging.ts +3 -0
- package/ts/smartsocket.plugins.ts +29 -0
- package/ts/smartsocket.pluginstyped.ts +23 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autocreated commitinfo by @pushrocks/commitinfo
|
|
3
|
+
*/
|
|
4
|
+
export const commitinfo = {
|
|
5
|
+
name: '@pushrocks/smartsocket',
|
|
6
|
+
version: '2.0.19',
|
|
7
|
+
description: 'easy and secure websocket communication'
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHlDQUF5QztDQUN2RCxDQUFBIn0=
|
package/dist_ts/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// export main classes
|
|
2
|
+
export * from './smartsocket.classes.smartsocket.js';
|
|
3
|
+
export * from './smartsocket.classes.smartsocketclient.js';
|
|
4
|
+
// export further classes and objects
|
|
5
|
+
export * from './smartsocket.classes.socketfunction.js';
|
|
6
|
+
export * from './smartsocket.classes.socketconnection.js';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDRDQUE0QyxDQUFDO0FBRTNELHFDQUFxQztBQUNyQyxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsMkNBQTJDLENBQUMifQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './connection.js';
|
|
2
|
+
export * from './tag.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxVQUFVLENBQUMifQ==
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as plugins from './smartsocket.plugins.js';
|
|
2
|
+
import * as pluginsTyped from './smartsocket.pluginstyped.js';
|
|
3
|
+
import * as interfaces from './interfaces/index.js';
|
|
4
|
+
import { SocketConnection } from './smartsocket.classes.socketconnection.js';
|
|
5
|
+
import { SocketFunction } from './smartsocket.classes.socketfunction.js';
|
|
6
|
+
import { SocketRequest } from './smartsocket.classes.socketrequest.js';
|
|
7
|
+
export interface ISmartsocketConstructorOptions {
|
|
8
|
+
alias: string;
|
|
9
|
+
port?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare class Smartsocket {
|
|
12
|
+
/**
|
|
13
|
+
* a unique id to detect server restarts
|
|
14
|
+
*/
|
|
15
|
+
alias: string;
|
|
16
|
+
smartenv: plugins.smartenv.Smartenv;
|
|
17
|
+
options: ISmartsocketConstructorOptions;
|
|
18
|
+
io: pluginsTyped.socketIo.Server;
|
|
19
|
+
socketConnections: plugins.lik.ObjectMap<SocketConnection>;
|
|
20
|
+
socketFunctions: plugins.lik.ObjectMap<SocketFunction<any>>;
|
|
21
|
+
socketRequests: plugins.lik.ObjectMap<SocketRequest<any>>;
|
|
22
|
+
eventSubject: plugins.smartrx.rxjs.Subject<interfaces.TConnectionStatus>;
|
|
23
|
+
private socketServer;
|
|
24
|
+
constructor(optionsArg: ISmartsocketConstructorOptions);
|
|
25
|
+
setExternalServer(serverType: 'smartexpress', serverArg: any): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* starts smartsocket
|
|
28
|
+
*/
|
|
29
|
+
start(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* stops smartsocket
|
|
32
|
+
*/
|
|
33
|
+
stop(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* allows call to specific client.
|
|
36
|
+
*/
|
|
37
|
+
clientCall<T extends plugins.typedrequestInterfaces.ITypedRequest>(functionNameArg: T['method'], dataArg: T['request'], targetSocketConnectionArg: SocketConnection): Promise<T['response']>;
|
|
38
|
+
addSocketFunction(socketFunction: SocketFunction<any>): void;
|
|
39
|
+
/**
|
|
40
|
+
* the standard handler for new socket connections
|
|
41
|
+
*/
|
|
42
|
+
private _handleSocketConnection;
|
|
43
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import * as plugins from './smartsocket.plugins.js';
|
|
2
|
+
import './smartsocket.pluginstyped.js';
|
|
3
|
+
import './interfaces/index.js';
|
|
4
|
+
// classes
|
|
5
|
+
import { SocketConnection } from './smartsocket.classes.socketconnection.js';
|
|
6
|
+
import './smartsocket.classes.socketfunction.js';
|
|
7
|
+
import { SocketRequest } from './smartsocket.classes.socketrequest.js';
|
|
8
|
+
import { SocketServer } from './smartsocket.classes.socketserver.js';
|
|
9
|
+
import { logger } from './smartsocket.logging.js';
|
|
10
|
+
export class Smartsocket {
|
|
11
|
+
constructor(optionsArg) {
|
|
12
|
+
this.smartenv = new plugins.smartenv.Smartenv();
|
|
13
|
+
this.socketConnections = new plugins.lik.ObjectMap();
|
|
14
|
+
this.socketFunctions = new plugins.lik.ObjectMap();
|
|
15
|
+
this.socketRequests = new plugins.lik.ObjectMap();
|
|
16
|
+
this.eventSubject = new plugins.smartrx.rxjs.Subject();
|
|
17
|
+
this.socketServer = new SocketServer(this);
|
|
18
|
+
this.options = optionsArg;
|
|
19
|
+
this.alias = plugins.isounique.uni(this.options.alias);
|
|
20
|
+
}
|
|
21
|
+
async setExternalServer(serverType, serverArg) {
|
|
22
|
+
await this.socketServer.setExternalServer(serverType, serverArg);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* starts smartsocket
|
|
26
|
+
*/
|
|
27
|
+
async start() {
|
|
28
|
+
const socketIoModule = await this.smartenv.getSafeNodeModule('socket.io');
|
|
29
|
+
this.io = new socketIoModule.Server(await this.socketServer.getServerForSocketIo(), {
|
|
30
|
+
cors: {
|
|
31
|
+
allowedHeaders: '*',
|
|
32
|
+
methods: '*',
|
|
33
|
+
origin: '*',
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
await this.socketServer.start();
|
|
37
|
+
this.io.on('connection', (socketArg) => {
|
|
38
|
+
this._handleSocketConnection(socketArg);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* stops smartsocket
|
|
43
|
+
*/
|
|
44
|
+
async stop() {
|
|
45
|
+
await plugins.smartdelay.delayFor(1000);
|
|
46
|
+
this.socketConnections.forEach((socketObjectArg) => {
|
|
47
|
+
if (socketObjectArg) {
|
|
48
|
+
logger.log('info', `disconnecting socket with >>alias ${socketObjectArg.alias} due to server stop...`);
|
|
49
|
+
socketObjectArg.disconnect();
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
this.socketConnections.wipe();
|
|
53
|
+
this.io.close();
|
|
54
|
+
// stop the corresponging server
|
|
55
|
+
this.socketServer.stop();
|
|
56
|
+
}
|
|
57
|
+
// communication
|
|
58
|
+
/**
|
|
59
|
+
* allows call to specific client.
|
|
60
|
+
*/
|
|
61
|
+
async clientCall(functionNameArg, dataArg, targetSocketConnectionArg) {
|
|
62
|
+
const socketRequest = new SocketRequest(this, {
|
|
63
|
+
funcCallData: {
|
|
64
|
+
funcDataArg: dataArg,
|
|
65
|
+
funcName: functionNameArg,
|
|
66
|
+
},
|
|
67
|
+
originSocketConnection: targetSocketConnectionArg,
|
|
68
|
+
shortId: plugins.isounique.uni(),
|
|
69
|
+
side: 'requesting',
|
|
70
|
+
});
|
|
71
|
+
const response = await socketRequest.dispatch();
|
|
72
|
+
const result = response.funcDataArg;
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
addSocketFunction(socketFunction) {
|
|
76
|
+
this.socketFunctions.add(socketFunction);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* the standard handler for new socket connections
|
|
80
|
+
*/
|
|
81
|
+
async _handleSocketConnection(socketArg) {
|
|
82
|
+
const socketConnection = new SocketConnection({
|
|
83
|
+
alias: undefined,
|
|
84
|
+
authenticated: false,
|
|
85
|
+
side: 'server',
|
|
86
|
+
smartsocketHost: this,
|
|
87
|
+
socket: socketArg,
|
|
88
|
+
});
|
|
89
|
+
logger.log('info', 'Socket connected. Trying to authenticate...');
|
|
90
|
+
this.socketConnections.add(socketConnection);
|
|
91
|
+
const disconnectSubscription = socketConnection.eventSubject.subscribe((eventArg) => {
|
|
92
|
+
if (eventArg === 'disconnected') {
|
|
93
|
+
this.socketConnections.remove(socketConnection);
|
|
94
|
+
disconnectSubscription.unsubscribe();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
await socketConnection.authenticate();
|
|
98
|
+
await socketConnection.listenToFunctionRequests();
|
|
99
|
+
await socketConnection.socket.emit('serverFullyReactive');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zbWFydHNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc21hcnRzb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUE4QiwrQkFBK0IsQ0FBQztBQUM5RCxPQUE0Qix1QkFBdUIsQ0FBQztBQUVwRCxVQUFVO0FBQ1YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FJTyx5Q0FBeUMsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU9sRCxNQUFNLE9BQU8sV0FBVztJQWdCdEIsWUFBWSxVQUEwQztRQVgvQyxhQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRzNDLHNCQUFpQixHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQW9CLENBQUM7UUFDbEUsb0JBQWUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUF1QixDQUFDO1FBQ25FLG1CQUFjLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBc0IsQ0FBQztRQUVqRSxpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFnQyxDQUFDO1FBRS9FLGlCQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFHNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMs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
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as plugins from './smartsocket.plugins.js';
|
|
2
|
+
import * as interfaces from './interfaces/index.js';
|
|
3
|
+
import { SocketConnection } from './smartsocket.classes.socketconnection.js';
|
|
4
|
+
import { SocketFunction } from './smartsocket.classes.socketfunction.js';
|
|
5
|
+
import { SocketRequest } from './smartsocket.classes.socketrequest.js';
|
|
6
|
+
/**
|
|
7
|
+
* interface for class SmartsocketClient
|
|
8
|
+
*/
|
|
9
|
+
export interface ISmartsocketClientOptions {
|
|
10
|
+
port: number;
|
|
11
|
+
url: string;
|
|
12
|
+
alias: string;
|
|
13
|
+
autoReconnect?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare class SmartsocketClient {
|
|
16
|
+
shortId: string;
|
|
17
|
+
remoteShortId: string;
|
|
18
|
+
alias: string;
|
|
19
|
+
socketConnection: SocketConnection;
|
|
20
|
+
serverUrl: string;
|
|
21
|
+
serverPort: number;
|
|
22
|
+
autoReconnect: boolean;
|
|
23
|
+
eventSubject: plugins.smartrx.rxjs.Subject<interfaces.TConnectionStatus>;
|
|
24
|
+
eventStatus: interfaces.TConnectionStatus;
|
|
25
|
+
socketFunctions: plugins.lik.ObjectMap<SocketFunction<any>>;
|
|
26
|
+
socketRequests: plugins.lik.ObjectMap<SocketRequest<any>>;
|
|
27
|
+
private tagStore;
|
|
28
|
+
private tagStoreSubscription;
|
|
29
|
+
/**
|
|
30
|
+
* adds a tag to a connection
|
|
31
|
+
*/
|
|
32
|
+
addTag(tagArg: interfaces.ITag): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* gets a tag by id
|
|
35
|
+
* @param tagIdArg
|
|
36
|
+
*/
|
|
37
|
+
getTagById(tagIdArg: interfaces.ITag['id']): Promise<interfaces.ITag<any>>;
|
|
38
|
+
/**
|
|
39
|
+
* removes a tag from a connection
|
|
40
|
+
*/
|
|
41
|
+
removeTagById(tagIdArg: interfaces.ITag['id']): Promise<void>;
|
|
42
|
+
constructor(optionsArg: ISmartsocketClientOptions);
|
|
43
|
+
addSocketFunction(socketFunction: SocketFunction<any>): void;
|
|
44
|
+
/**
|
|
45
|
+
* connect the client to the server
|
|
46
|
+
*/
|
|
47
|
+
connect(): Promise<unknown>;
|
|
48
|
+
private disconnectRunning;
|
|
49
|
+
/**
|
|
50
|
+
* disconnect from the server
|
|
51
|
+
*/
|
|
52
|
+
disconnect(useAutoReconnectSetting?: boolean): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* stops the client completely
|
|
55
|
+
*/
|
|
56
|
+
stop(): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* dispatches a server call
|
|
59
|
+
* @param functionNameArg
|
|
60
|
+
* @param dataArg
|
|
61
|
+
*/
|
|
62
|
+
serverCall<T extends plugins.typedrequestInterfaces.ITypedRequest>(functionNameArg: T['method'], dataArg: T['request']): Promise<T['response']>;
|
|
63
|
+
private updateStatus;
|
|
64
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import * as plugins from './smartsocket.plugins.js';
|
|
2
|
+
import './smartsocket.pluginstyped.js';
|
|
3
|
+
import './interfaces/index.js';
|
|
4
|
+
import { SocketConnection } from './smartsocket.classes.socketconnection.js';
|
|
5
|
+
import './smartsocket.classes.socketfunction.js';
|
|
6
|
+
import { SocketRequest } from './smartsocket.classes.socketrequest.js';
|
|
7
|
+
import { logger } from './smartsocket.logging.js';
|
|
8
|
+
export class SmartsocketClient {
|
|
9
|
+
/**
|
|
10
|
+
* adds a tag to a connection
|
|
11
|
+
*/
|
|
12
|
+
async addTag(tagArg) {
|
|
13
|
+
if (this.socketConnection) {
|
|
14
|
+
await this.socketConnection.addTag(tagArg);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
this.tagStore[tagArg.id] = tagArg;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* gets a tag by id
|
|
22
|
+
* @param tagIdArg
|
|
23
|
+
*/
|
|
24
|
+
async getTagById(tagIdArg) {
|
|
25
|
+
return this.tagStore[tagIdArg];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* removes a tag from a connection
|
|
29
|
+
*/
|
|
30
|
+
async removeTagById(tagIdArg) {
|
|
31
|
+
if (this.socketConnection) {
|
|
32
|
+
this.socketConnection.removeTagById(tagIdArg);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
delete this.tagStore[tagIdArg];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
constructor(optionsArg) {
|
|
39
|
+
// a unique id
|
|
40
|
+
this.shortId = plugins.isounique.uni();
|
|
41
|
+
// the shortId of the remote we connect to
|
|
42
|
+
this.remoteShortId = null;
|
|
43
|
+
// status handling
|
|
44
|
+
this.eventSubject = new plugins.smartrx.rxjs.Subject();
|
|
45
|
+
this.eventStatus = 'new';
|
|
46
|
+
this.socketFunctions = new plugins.lik.ObjectMap();
|
|
47
|
+
this.socketRequests = new plugins.lik.ObjectMap();
|
|
48
|
+
// tagStore
|
|
49
|
+
this.tagStore = {};
|
|
50
|
+
this.disconnectRunning = false;
|
|
51
|
+
this.alias = optionsArg.alias;
|
|
52
|
+
this.serverUrl = optionsArg.url;
|
|
53
|
+
this.serverPort = optionsArg.port;
|
|
54
|
+
this.autoReconnect = optionsArg.autoReconnect;
|
|
55
|
+
}
|
|
56
|
+
addSocketFunction(socketFunction) {
|
|
57
|
+
this.socketFunctions.add(socketFunction);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* connect the client to the server
|
|
61
|
+
*/
|
|
62
|
+
async connect() {
|
|
63
|
+
const done = plugins.smartpromise.defer();
|
|
64
|
+
const smartenvInstance = new plugins.smartenv.Smartenv();
|
|
65
|
+
const socketIoClient = await smartenvInstance.getEnvAwareModule({
|
|
66
|
+
nodeModuleName: 'socket.io-client',
|
|
67
|
+
webUrlArg: 'https://cdn.jsdelivr.net/npm/socket.io-client@4/dist/socket.io.js',
|
|
68
|
+
getFunction: () => {
|
|
69
|
+
const socketIoBrowserModule = globalThis.io;
|
|
70
|
+
// console.log('loaded socket.io for browser');
|
|
71
|
+
return socketIoBrowserModule;
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
// console.log(socketIoClient);
|
|
75
|
+
logger.log('info', 'trying to connect...');
|
|
76
|
+
const socketUrl = `${this.serverUrl}:${this.serverPort}`;
|
|
77
|
+
this.socketConnection = new SocketConnection({
|
|
78
|
+
alias: this.alias,
|
|
79
|
+
authenticated: false,
|
|
80
|
+
side: 'client',
|
|
81
|
+
smartsocketHost: this,
|
|
82
|
+
socket: await socketIoClient
|
|
83
|
+
.connect(socketUrl, {
|
|
84
|
+
multiplex: true,
|
|
85
|
+
rememberUpgrade: true,
|
|
86
|
+
autoConnect: false,
|
|
87
|
+
reconnectionAttempts: 0,
|
|
88
|
+
rejectUnauthorized: socketUrl.startsWith('https://localhost') ? false : true,
|
|
89
|
+
})
|
|
90
|
+
.open(),
|
|
91
|
+
});
|
|
92
|
+
const timer = new plugins.smarttime.Timer(5000);
|
|
93
|
+
timer.start();
|
|
94
|
+
timer.completed.then(() => {
|
|
95
|
+
this.updateStatus('timedOut');
|
|
96
|
+
logger.log('warn', 'connection to server timed out.');
|
|
97
|
+
this.disconnect(true);
|
|
98
|
+
});
|
|
99
|
+
// authentication flow
|
|
100
|
+
this.socketConnection.socket.on('requestAuth', (dataArg) => {
|
|
101
|
+
timer.reset();
|
|
102
|
+
logger.log('info', `server ${dataArg.serverAlias} requested authentication`);
|
|
103
|
+
// lets register the authenticated event
|
|
104
|
+
this.socketConnection.socket.on('authenticated', async () => {
|
|
105
|
+
this.remoteShortId = dataArg.serverAlias;
|
|
106
|
+
logger.log('info', 'client is authenticated');
|
|
107
|
+
this.socketConnection.authenticated = true;
|
|
108
|
+
await this.socketConnection.listenToFunctionRequests();
|
|
109
|
+
});
|
|
110
|
+
this.socketConnection.socket.on('serverFullyReactive', async () => {
|
|
111
|
+
// lets take care of retagging
|
|
112
|
+
const oldTagStore = this.tagStore;
|
|
113
|
+
this.tagStoreSubscription?.unsubscribe();
|
|
114
|
+
for (const keyArg of Object.keys(this.tagStore)) {
|
|
115
|
+
this.socketConnection.addTag(this.tagStore[keyArg]);
|
|
116
|
+
}
|
|
117
|
+
this.tagStoreSubscription = this.socketConnection.tagStoreObservable.subscribe((tagStoreArg) => {
|
|
118
|
+
this.tagStore = tagStoreArg;
|
|
119
|
+
});
|
|
120
|
+
for (const tag of Object.keys(oldTagStore)) {
|
|
121
|
+
await this.addTag(oldTagStore[tag]);
|
|
122
|
+
}
|
|
123
|
+
this.updateStatus('connected');
|
|
124
|
+
done.resolve();
|
|
125
|
+
});
|
|
126
|
+
// lets register the forbidden event
|
|
127
|
+
this.socketConnection.socket.on('forbidden', async () => {
|
|
128
|
+
logger.log('warn', `disconnecting due to being forbidden to use the ressource`);
|
|
129
|
+
await this.disconnect();
|
|
130
|
+
});
|
|
131
|
+
// lets provide the actual auth data
|
|
132
|
+
this.socketConnection.socket.emit('dataAuth', {
|
|
133
|
+
alias: this.alias,
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
// handle connection
|
|
137
|
+
this.socketConnection.socket.on('connect', async () => { });
|
|
138
|
+
// handle disconnection and errors
|
|
139
|
+
this.socketConnection.socket.on('disconnect', async () => {
|
|
140
|
+
await this.disconnect(true);
|
|
141
|
+
});
|
|
142
|
+
this.socketConnection.socket.on('reconnect_failed', async () => {
|
|
143
|
+
await this.disconnect(true);
|
|
144
|
+
});
|
|
145
|
+
this.socketConnection.socket.on('connect_error', async () => {
|
|
146
|
+
await this.disconnect(true);
|
|
147
|
+
});
|
|
148
|
+
return done.promise;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* disconnect from the server
|
|
152
|
+
*/
|
|
153
|
+
async disconnect(useAutoReconnectSetting = false) {
|
|
154
|
+
if (this.disconnectRunning) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
this.disconnectRunning = true;
|
|
158
|
+
this.updateStatus('disconnecting');
|
|
159
|
+
this.tagStoreSubscription?.unsubscribe();
|
|
160
|
+
if (this.socketConnection) {
|
|
161
|
+
await this.socketConnection.disconnect();
|
|
162
|
+
this.socketConnection = undefined;
|
|
163
|
+
logger.log('ok', 'disconnected socket!');
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
this.disconnectRunning = false;
|
|
167
|
+
logger.log('warn', 'tried to disconnect, without a SocketConnection');
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
logger.log('warn', `disconnected from server ${this.remoteShortId}`);
|
|
171
|
+
this.remoteShortId = null;
|
|
172
|
+
if (this.autoReconnect && useAutoReconnectSetting && this.eventStatus !== 'connecting') {
|
|
173
|
+
this.updateStatus('connecting');
|
|
174
|
+
console.log('debounced reconnect!');
|
|
175
|
+
await plugins.smartdelay.delayForRandom(10000, 20000);
|
|
176
|
+
this.disconnectRunning = false;
|
|
177
|
+
await this.connect();
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
this.disconnectRunning = false;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* stops the client completely
|
|
185
|
+
*/
|
|
186
|
+
async stop() {
|
|
187
|
+
this.autoReconnect = false;
|
|
188
|
+
await this.disconnect();
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* dispatches a server call
|
|
192
|
+
* @param functionNameArg
|
|
193
|
+
* @param dataArg
|
|
194
|
+
*/
|
|
195
|
+
async serverCall(functionNameArg, dataArg) {
|
|
196
|
+
const done = plugins.smartpromise.defer();
|
|
197
|
+
const socketRequest = new SocketRequest(this, {
|
|
198
|
+
side: 'requesting',
|
|
199
|
+
originSocketConnection: this.socketConnection,
|
|
200
|
+
shortId: plugins.isounique.uni(),
|
|
201
|
+
funcCallData: {
|
|
202
|
+
funcName: functionNameArg,
|
|
203
|
+
funcDataArg: dataArg,
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
const response = await socketRequest.dispatch();
|
|
207
|
+
const result = response.funcDataArg;
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
updateStatus(statusArg) {
|
|
211
|
+
if (this.eventStatus !== statusArg) {
|
|
212
|
+
this.eventSubject.next(statusArg);
|
|
213
|
+
}
|
|
214
|
+
this.eventStatus = statusArg;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zbWFydHNvY2tldGNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc21hcnRzb2NrZXRjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUE4QiwrQkFBK0IsQ0FBQztBQUM5RCxPQUE0Qix1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUdPLHlDQUF5QyxDQUFDO0FBQ2pELE9BQU8sRUFBNEIsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBWWxELE1BQU0sT0FBTyxpQkFBaUI7SUF3QjVCOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUF1QjtRQUN6QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUM7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQStCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQStCO1FBQ3hELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0M7YUFBTTtZQUNMLE9BQU8sSUFB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
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as plugins from './smartsocket.plugins.js';
|
|
2
|
+
import * as pluginsTyped from './smartsocket.pluginstyped.js';
|
|
3
|
+
import * as interfaces from './interfaces/index.js';
|
|
4
|
+
import { Smartsocket } from './smartsocket.classes.smartsocket.js';
|
|
5
|
+
import { SmartsocketClient } from './smartsocket.classes.smartsocketclient.js';
|
|
6
|
+
/**
|
|
7
|
+
* defines is a SocketConnection is server or client side. Important for mesh setups.
|
|
8
|
+
*/
|
|
9
|
+
export type TSocketConnectionSide = 'server' | 'client';
|
|
10
|
+
/**
|
|
11
|
+
* interface for constructor of class SocketConnection
|
|
12
|
+
*/
|
|
13
|
+
export interface ISocketConnectionConstructorOptions {
|
|
14
|
+
alias: string;
|
|
15
|
+
authenticated: boolean;
|
|
16
|
+
side: TSocketConnectionSide;
|
|
17
|
+
smartsocketHost: Smartsocket | SmartsocketClient;
|
|
18
|
+
socket: pluginsTyped.socketIo.Socket | pluginsTyped.socketIoClient.Socket;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* interface for authentication data
|
|
22
|
+
*/
|
|
23
|
+
export interface ISocketConnectionAuthenticationObject {
|
|
24
|
+
alias: string;
|
|
25
|
+
}
|
|
26
|
+
export declare let allSocketConnections: plugins.lik.ObjectMap<SocketConnection>;
|
|
27
|
+
/**
|
|
28
|
+
* class SocketConnection represents a websocket connection
|
|
29
|
+
*/
|
|
30
|
+
export declare class SocketConnection {
|
|
31
|
+
alias: string;
|
|
32
|
+
side: TSocketConnectionSide;
|
|
33
|
+
authenticated: boolean;
|
|
34
|
+
smartsocketRef: Smartsocket | SmartsocketClient;
|
|
35
|
+
socket: pluginsTyped.socketIo.Socket | pluginsTyped.socketIoClient.Socket;
|
|
36
|
+
eventSubject: plugins.smartrx.rxjs.Subject<interfaces.TConnectionStatus>;
|
|
37
|
+
eventStatus: interfaces.TConnectionStatus;
|
|
38
|
+
private tagStore;
|
|
39
|
+
tagStoreObservable: plugins.smartrx.rxjs.Subject<interfaces.TTagStore>;
|
|
40
|
+
remoteTagStoreObservable: plugins.smartrx.rxjs.Subject<interfaces.TTagStore>;
|
|
41
|
+
constructor(optionsArg: ISocketConnectionConstructorOptions);
|
|
42
|
+
/**
|
|
43
|
+
* adds a tag to a connection
|
|
44
|
+
*/
|
|
45
|
+
addTag(tagArg: interfaces.ITag): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* gets a tag by id
|
|
48
|
+
* @param tagIdArg
|
|
49
|
+
*/
|
|
50
|
+
getTagById(tagIdArg: interfaces.ITag['id']): Promise<interfaces.ITag<any>>;
|
|
51
|
+
/**
|
|
52
|
+
* removes a tag from a connection
|
|
53
|
+
*/
|
|
54
|
+
removeTagById(tagIdArg: interfaces.ITag['id']): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* authenticate the socket
|
|
57
|
+
*/
|
|
58
|
+
authenticate(): Promise<unknown>;
|
|
59
|
+
/**
|
|
60
|
+
* listen to function requests
|
|
61
|
+
*/
|
|
62
|
+
listenToFunctionRequests(): Promise<unknown>;
|
|
63
|
+
disconnect(): Promise<void>;
|
|
64
|
+
private updateStatus;
|
|
65
|
+
}
|