@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.
Files changed (47) hide show
  1. package/dist_bundle/bundle.js +10311 -0
  2. package/dist_bundle/bundle.js.map +7 -0
  3. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  4. package/dist_ts/00_commitinfo_data.js +9 -0
  5. package/dist_ts/index.d.ts +4 -0
  6. package/dist_ts/index.js +7 -0
  7. package/dist_ts/interfaces/connection.d.ts +4 -0
  8. package/dist_ts/interfaces/connection.js +2 -0
  9. package/dist_ts/interfaces/index.d.ts +2 -0
  10. package/dist_ts/interfaces/index.js +3 -0
  11. package/dist_ts/interfaces/tag.d.ts +7 -0
  12. package/dist_ts/interfaces/tag.js +2 -0
  13. package/dist_ts/smartsocket.classes.smartsocket.d.ts +43 -0
  14. package/dist_ts/smartsocket.classes.smartsocket.js +102 -0
  15. package/dist_ts/smartsocket.classes.smartsocketclient.d.ts +64 -0
  16. package/dist_ts/smartsocket.classes.smartsocketclient.js +217 -0
  17. package/dist_ts/smartsocket.classes.socketconnection.d.ts +65 -0
  18. package/dist_ts/smartsocket.classes.socketconnection.js +169 -0
  19. package/dist_ts/smartsocket.classes.socketfunction.d.ts +45 -0
  20. package/dist_ts/smartsocket.classes.socketfunction.js +40 -0
  21. package/dist_ts/smartsocket.classes.socketrequest.d.ts +47 -0
  22. package/dist_ts/smartsocket.classes.socketrequest.js +72 -0
  23. package/dist_ts/smartsocket.classes.socketserver.d.ts +35 -0
  24. package/dist_ts/smartsocket.classes.socketserver.js +78 -0
  25. package/dist_ts/smartsocket.logging.d.ts +2 -0
  26. package/dist_ts/smartsocket.logging.js +3 -0
  27. package/dist_ts/smartsocket.plugins.d.ts +13 -0
  28. package/dist_ts/smartsocket.plugins.js +16 -0
  29. package/dist_ts/smartsocket.pluginstyped.d.ts +15 -0
  30. package/dist_ts/smartsocket.pluginstyped.js +2 -0
  31. package/npmextra.json +18 -0
  32. package/package.json +64 -0
  33. package/readme.md +120 -0
  34. package/ts/00_commitinfo_data.ts +8 -0
  35. package/ts/index.ts +7 -0
  36. package/ts/interfaces/connection.ts +11 -0
  37. package/ts/interfaces/index.ts +2 -0
  38. package/ts/interfaces/tag.ts +6 -0
  39. package/ts/smartsocket.classes.smartsocket.ts +137 -0
  40. package/ts/smartsocket.classes.smartsocketclient.ts +266 -0
  41. package/ts/smartsocket.classes.socketconnection.ts +224 -0
  42. package/ts/smartsocket.classes.socketfunction.ts +93 -0
  43. package/ts/smartsocket.classes.socketrequest.ts +126 -0
  44. package/ts/smartsocket.classes.socketserver.ts +94 -0
  45. package/ts/smartsocket.logging.ts +3 -0
  46. package/ts/smartsocket.plugins.ts +29 -0
  47. package/ts/smartsocket.pluginstyped.ts +23 -0
@@ -0,0 +1,8 @@
1
+ /**
2
+ * autocreated commitinfo by @pushrocks/commitinfo
3
+ */
4
+ export declare const commitinfo: {
5
+ name: string;
6
+ version: string;
7
+ description: string;
8
+ };
@@ -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=
@@ -0,0 +1,4 @@
1
+ export * from './smartsocket.classes.smartsocket.js';
2
+ export * from './smartsocket.classes.smartsocketclient.js';
3
+ export * from './smartsocket.classes.socketfunction.js';
4
+ export * from './smartsocket.classes.socketconnection.js';
@@ -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,4 @@
1
+ export interface IRequestAuthPayload {
2
+ serverAlias: string;
3
+ }
4
+ export type TConnectionStatus = 'new' | 'connecting' | 'connected' | 'disconnecting' | 'disconnected' | 'timedOut';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2ludGVyZmFjZXMvY29ubmVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1,2 @@
1
+ export * from './connection.js';
2
+ export * from './tag.js';
@@ -0,0 +1,3 @@
1
+ export * from './connection.js';
2
+ export * from './tag.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxVQUFVLENBQUMifQ==
@@ -0,0 +1,7 @@
1
+ export interface ITag<T = any> {
2
+ id: string;
3
+ payload: T;
4
+ }
5
+ export type TTagStore = {
6
+ [key: string]: ITag;
7
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvaW50ZXJmYWNlcy90YWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -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
+ }