@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,169 @@
1
+ import * as plugins from './smartsocket.plugins.js';
2
+ import './smartsocket.pluginstyped.js';
3
+ import './interfaces/index.js';
4
+ // import classes
5
+ import './smartsocket.classes.smartsocket.js';
6
+ import './smartsocket.classes.socketfunction.js';
7
+ import { SocketRequest } from './smartsocket.classes.socketrequest.js';
8
+ // socket.io
9
+ import './smartsocket.classes.smartsocketclient.js';
10
+ import { logger } from './smartsocket.logging.js';
11
+ // export classes
12
+ export let allSocketConnections = new plugins.lik.ObjectMap();
13
+ /**
14
+ * class SocketConnection represents a websocket connection
15
+ */
16
+ export class SocketConnection {
17
+ constructor(optionsArg) {
18
+ this.authenticated = false;
19
+ this.eventSubject = new plugins.smartrx.rxjs.Subject();
20
+ this.eventStatus = 'new';
21
+ this.tagStore = {};
22
+ this.tagStoreObservable = new plugins.smartrx.rxjs.Subject();
23
+ this.remoteTagStoreObservable = new plugins.smartrx.rxjs.Subject();
24
+ this.alias = optionsArg.alias;
25
+ this.authenticated = optionsArg.authenticated;
26
+ this.side = optionsArg.side;
27
+ this.smartsocketRef = optionsArg.smartsocketHost;
28
+ this.socket = optionsArg.socket;
29
+ // standard behaviour that is always true
30
+ allSocketConnections.add(this);
31
+ // handle connection
32
+ this.socket.on('connect', async () => {
33
+ this.updateStatus('connected');
34
+ });
35
+ this.socket.on('disconnect', async () => {
36
+ logger.log('info', `SocketConnection with >alias ${this.alias} on >side ${this.side} disconnected`);
37
+ await this.disconnect();
38
+ allSocketConnections.remove(this);
39
+ this.eventSubject.next('disconnected');
40
+ });
41
+ }
42
+ /**
43
+ * adds a tag to a connection
44
+ */
45
+ async addTag(tagArg) {
46
+ const done = plugins.smartpromise.defer();
47
+ this.tagStore[tagArg.id] = tagArg;
48
+ this.tagStoreObservable.next(this.tagStore);
49
+ const remoteSubscription = this.remoteTagStoreObservable.subscribe((remoteTagStore) => {
50
+ if (!remoteTagStore[tagArg.id]) {
51
+ return;
52
+ }
53
+ const localTagString = plugins.smartjson.stringify(tagArg);
54
+ const remoteTagString = plugins.smartjson.stringify(remoteTagStore[tagArg.id]);
55
+ if (localTagString === remoteTagString) {
56
+ remoteSubscription.unsubscribe();
57
+ done.resolve();
58
+ }
59
+ });
60
+ this.socket.emit('updateTagStore', this.tagStore);
61
+ await done.promise;
62
+ }
63
+ /**
64
+ * gets a tag by id
65
+ * @param tagIdArg
66
+ */
67
+ async getTagById(tagIdArg) {
68
+ return this.tagStore[tagIdArg];
69
+ }
70
+ /**
71
+ * removes a tag from a connection
72
+ */
73
+ async removeTagById(tagIdArg) {
74
+ delete this.tagStore[tagIdArg];
75
+ this.tagStoreObservable.next(this.tagStore);
76
+ this.socket.emit('updateTagStore', this.tagStore);
77
+ }
78
+ // authenticating --------------------------
79
+ /**
80
+ * authenticate the socket
81
+ */
82
+ authenticate() {
83
+ const done = plugins.smartpromise.defer();
84
+ this.socket.on('dataAuth', async (dataArg) => {
85
+ logger.log('info', 'received authentication data...');
86
+ this.socket.removeAllListeners('dataAuth');
87
+ if (dataArg.alias) {
88
+ // TODO: authenticate password
89
+ this.alias = dataArg.alias;
90
+ this.authenticated = true;
91
+ this.socket.emit('authenticated');
92
+ logger.log('ok', `socket with >>alias ${this.alias} is authenticated!`);
93
+ done.resolve(this);
94
+ }
95
+ else {
96
+ this.authenticated = false;
97
+ await this.disconnect();
98
+ done.reject('a socket tried to connect, but could not authenticated.');
99
+ }
100
+ });
101
+ const requestAuthPayload = {
102
+ serverAlias: this.smartsocketRef.alias,
103
+ };
104
+ this.socket.emit('requestAuth', requestAuthPayload);
105
+ return done.promise;
106
+ }
107
+ // listening -------------------------------
108
+ /**
109
+ * listen to function requests
110
+ */
111
+ listenToFunctionRequests() {
112
+ const done = plugins.smartpromise.defer();
113
+ if (this.authenticated) {
114
+ this.socket.on('function', (dataArg) => {
115
+ // check if requested function is available to the socket's scope
116
+ // logger.log('info', 'function request received');
117
+ const referencedFunction = this.smartsocketRef.socketFunctions.findSync((socketFunctionArg) => {
118
+ return socketFunctionArg.name === dataArg.funcCallData.funcName;
119
+ });
120
+ if (referencedFunction) {
121
+ // logger.log('ok', 'function in access scope');
122
+ const localSocketRequest = new SocketRequest(this.smartsocketRef, {
123
+ side: 'responding',
124
+ originSocketConnection: this,
125
+ shortId: dataArg.shortId,
126
+ funcCallData: dataArg.funcCallData,
127
+ });
128
+ localSocketRequest.createResponse(); // takes care of creating response and sending it back
129
+ }
130
+ else {
131
+ logger.log('warn', 'function not existent or out of access scope');
132
+ }
133
+ });
134
+ this.socket.on('functionResponse', (dataArg) => {
135
+ // logger.log('info', `received response for request with id ${dataArg.shortId}`);
136
+ const targetSocketRequest = SocketRequest.getSocketRequestById(this.smartsocketRef, dataArg.shortId);
137
+ targetSocketRequest.handleResponse(dataArg);
138
+ });
139
+ this.socket.on('updateTagStore', async (tagStoreArg) => {
140
+ if (!plugins.smartjson.deepEqualObjects(this.tagStore, tagStoreArg)) {
141
+ this.tagStore = tagStoreArg;
142
+ this.socket.emit('updateTagStore', this.tagStore);
143
+ this.tagStoreObservable.next(this.tagStore);
144
+ }
145
+ this.remoteTagStoreObservable.next(tagStoreArg);
146
+ });
147
+ logger.log('info', `now listening to function requests for ${this.alias} on side ${this.side}`);
148
+ done.resolve(this);
149
+ }
150
+ else {
151
+ const errMessage = 'socket needs to be authenticated first';
152
+ logger.log('error', errMessage);
153
+ done.reject(errMessage);
154
+ }
155
+ return done.promise;
156
+ }
157
+ // disconnecting ----------------------
158
+ async disconnect() {
159
+ this.socket.disconnect(true);
160
+ this.updateStatus('disconnected');
161
+ }
162
+ updateStatus(statusArg) {
163
+ if (this.eventStatus !== statusArg) {
164
+ this.eventSubject.next(statusArg);
165
+ }
166
+ this.eventStatus = statusArg;
167
+ }
168
+ }
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRjb25uZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRjb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBOEIsK0JBQStCLENBQUM7QUFDOUQsT0FBNEIsdUJBQXVCLENBQUM7QUFFcEQsaUJBQWlCO0FBQ2pCLE9BQTRCLHNDQUFzQyxDQUFDO0FBQ25FLE9BQStCLHlDQUF5QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQTRCLE1BQU0sd0NBQXdDLENBQUM7QUFFakcsWUFBWTtBQUNaLE9BQWtDLDRDQUE0QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQTJCbEQsaUJBQWlCO0FBQ2pCLE1BQU0sQ0FBQyxJQUFJLG9CQUFvQixHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQW9CLENBQUM7QUFFaEY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBYzNCLFlBQVksVUFBK0M7UUFYcEQsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFJL0IsaUJBQVksR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBZ0MsQ0FBQztRQUNoRixnQkFBVyxHQUFpQyxLQUFLLENBQUM7UUFFakQsYUFBUSxHQUF5QixFQUFFLENBQUM7UUFDckMsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQXdCLENBQUM7UUFDOUUsNkJBQXdCLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQXdCLENBQUM7UUFHekYsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFD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
@@ -0,0 +1,45 @@
1
+ import * as plugins from './smartsocket.plugins.js';
2
+ import { SocketConnection } from './smartsocket.classes.socketconnection.js';
3
+ import { Smartsocket } from './smartsocket.classes.smartsocket.js';
4
+ import { SmartsocketClient } from './smartsocket.classes.smartsocketclient.js';
5
+ /**
6
+ * interface of the contructor options of class SocketFunction
7
+ */
8
+ export interface ISocketFunctionConstructorOptions<T extends plugins.typedrequestInterfaces.ITypedRequest> {
9
+ funcName: T['method'];
10
+ funcDef: TFuncDef<T>;
11
+ }
12
+ /**
13
+ * interface of the Socket Function call, in other words the object that routes a call to a function
14
+ */
15
+ export interface ISocketFunctionCallDataRequest<T extends plugins.typedrequestInterfaces.ITypedRequest> {
16
+ funcName: T['method'];
17
+ funcDataArg: T['request'];
18
+ }
19
+ /**
20
+ * interface of the Socket Function call, in other words the object that routes a call to a function
21
+ */
22
+ export interface ISocketFunctionCallDataResponse<T extends plugins.typedrequestInterfaces.ITypedRequest> {
23
+ funcName: T['method'];
24
+ funcDataArg: T['response'];
25
+ }
26
+ /**
27
+ * interface for function definition of SocketFunction
28
+ */
29
+ export type TFuncDef<T extends plugins.typedrequestInterfaces.ITypedRequest> = (dataArg: T['request'], connectionArg: SocketConnection) => PromiseLike<T['response']>;
30
+ /**
31
+ * class that respresents a function that can be transparently called using a SocketConnection
32
+ */
33
+ export declare class SocketFunction<T extends plugins.typedrequestInterfaces.ITypedRequest> {
34
+ static getSocketFunctionByName<Q extends plugins.typedrequestInterfaces.ITypedRequest>(smartsocketRefArg: Smartsocket | SmartsocketClient, functionNameArg: string): SocketFunction<Q>;
35
+ name: string;
36
+ funcDef: TFuncDef<T>;
37
+ /**
38
+ * the constructor for SocketFunction
39
+ */
40
+ constructor(optionsArg: ISocketFunctionConstructorOptions<T>);
41
+ /**
42
+ * invokes the function of this SocketFunction
43
+ */
44
+ invoke(dataArg: ISocketFunctionCallDataRequest<T>, socketConnectionArg: SocketConnection): Promise<ISocketFunctionCallDataResponse<T>>;
45
+ }
@@ -0,0 +1,40 @@
1
+ import './smartsocket.plugins.js';
2
+ // import classes
3
+ import './smartsocket.classes.socketconnection.js';
4
+ import './smartsocket.classes.smartsocket.js';
5
+ import './smartsocket.classes.smartsocketclient.js';
6
+ // export classes
7
+ /**
8
+ * class that respresents a function that can be transparently called using a SocketConnection
9
+ */
10
+ export class SocketFunction {
11
+ // STATIC
12
+ static getSocketFunctionByName(smartsocketRefArg, functionNameArg) {
13
+ return smartsocketRefArg.socketFunctions.findSync((socketFunctionArg) => {
14
+ return socketFunctionArg.name === functionNameArg;
15
+ });
16
+ }
17
+ /**
18
+ * the constructor for SocketFunction
19
+ */
20
+ constructor(optionsArg) {
21
+ this.name = optionsArg.funcName;
22
+ this.funcDef = optionsArg.funcDef;
23
+ }
24
+ /**
25
+ * invokes the function of this SocketFunction
26
+ */
27
+ async invoke(dataArg, socketConnectionArg) {
28
+ if (dataArg.funcName === this.name) {
29
+ const funcResponseData = {
30
+ funcName: this.name,
31
+ funcDataArg: await this.funcDef(dataArg.funcDataArg, socketConnectionArg),
32
+ };
33
+ return funcResponseData;
34
+ }
35
+ else {
36
+ throw new Error("SocketFunction.name does not match the data argument's .name!");
37
+ }
38
+ }
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRmdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmNsYXNzZXMuc29ja2V0ZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBeUIsMEJBQTBCLENBQUM7QUFFcEQsaUJBQWlCO0FBQ2pCLE9BQWlDLDJDQUEyQyxDQUFDO0FBQzdFLE9BQTRCLHNDQUFzQyxDQUFDO0FBQ25FLE9BQWtDLDRDQUE0QyxDQUFDO0FBMEMvRSxpQkFBaUI7QUFFakI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUN6QixTQUFTO0lBQ0YsTUFBTSxDQUFDLHVCQUF1QixDQUNuQyxpQkFBa0QsRUFDbEQsZUFBdUI7UUFFdkIsT0FBTyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtZQUN0RSxPQUFPLGlCQUFpQixDQUFDLElBQUksS0FBSyxlQUFlLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBTUQ7O09BRUc7SUFDSCxZQUFZLFVBQWdEO1FBQzFELElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLE1BQU0sQ0FDakIsT0FBMEMsRUFDMUMsbUJBQXFDO1FBRXJDLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2xDLE1BQU0sZ0JBQWdCLEdBQXVDO2dCQUMzRCxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ25CLFdBQVcsRUFBRSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQzthQUMxRSxDQUFDO1lBQ0YsT0FBTyxnQkFBZ0IsQ0FBQztTQUN6QjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1NBQ2xGO0lBQ0gsQ0FBQztDQUNGIn0=
@@ -0,0 +1,47 @@
1
+ import * as plugins from './smartsocket.plugins.js';
2
+ import { ISocketFunctionCallDataRequest, ISocketFunctionCallDataResponse } from './smartsocket.classes.socketfunction.js';
3
+ import { SocketConnection } from './smartsocket.classes.socketconnection.js';
4
+ import { Smartsocket } from './smartsocket.classes.smartsocket.js';
5
+ import { SmartsocketClient } from './smartsocket.classes.smartsocketclient.js';
6
+ export type TSocketRequestStatus = 'new' | 'pending' | 'finished';
7
+ export type TSocketRequestSide = 'requesting' | 'responding';
8
+ /**
9
+ * interface of constructor of class SocketRequest
10
+ */
11
+ export interface ISocketRequestConstructorOptions<T extends plugins.typedrequestInterfaces.ITypedRequest> {
12
+ side: TSocketRequestSide;
13
+ originSocketConnection: SocketConnection;
14
+ shortId: string;
15
+ funcCallData?: ISocketFunctionCallDataRequest<T>;
16
+ }
17
+ /**
18
+ * request object that is sent initially and may or may not receive a response
19
+ */
20
+ export interface ISocketRequestDataObject<T extends plugins.typedrequestInterfaces.ITypedRequest> {
21
+ funcCallData: ISocketFunctionCallDataRequest<T> | ISocketFunctionCallDataResponse<T>;
22
+ shortId: string;
23
+ responseTimeout?: number;
24
+ }
25
+ export declare class SocketRequest<T extends plugins.typedrequestInterfaces.ITypedRequest> {
26
+ static getSocketRequestById(smartsocketRef: Smartsocket | SmartsocketClient, shortIdArg: string): SocketRequest<any>;
27
+ status: TSocketRequestStatus;
28
+ side: TSocketRequestSide;
29
+ shortid: string;
30
+ originSocketConnection: SocketConnection;
31
+ funcCallData: ISocketFunctionCallDataRequest<T>;
32
+ done: plugins.smartpromise.Deferred<ISocketFunctionCallDataResponse<T>>;
33
+ smartsocketRef: Smartsocket | SmartsocketClient;
34
+ constructor(smartsocketRefArg: Smartsocket | SmartsocketClient, optionsArg: ISocketRequestConstructorOptions<T>);
35
+ /**
36
+ * dispatches a socketrequest from the requesting to the receiving side
37
+ */
38
+ dispatch(): Promise<ISocketFunctionCallDataResponse<T>>;
39
+ /**
40
+ * handles the response that is received by the requesting side
41
+ */
42
+ handleResponse(responseDataArg: ISocketRequestDataObject<T>): Promise<void>;
43
+ /**
44
+ * creates the response on the responding side
45
+ */
46
+ createResponse(): Promise<void>;
47
+ }
@@ -0,0 +1,72 @@
1
+ import * as plugins from './smartsocket.plugins.js';
2
+ // import interfaces
3
+ import { SocketFunction, } from './smartsocket.classes.socketfunction.js';
4
+ // import classes
5
+ import './smartsocket.classes.socketconnection.js';
6
+ import { logger } from './smartsocket.logging.js';
7
+ import './smartsocket.classes.smartsocket.js';
8
+ import './smartsocket.classes.smartsocketclient.js';
9
+ // export classes
10
+ export class SocketRequest {
11
+ // STATIC
12
+ static getSocketRequestById(smartsocketRef, shortIdArg) {
13
+ return smartsocketRef.socketRequests.findSync((socketRequestArg) => {
14
+ return socketRequestArg.shortid === shortIdArg;
15
+ });
16
+ }
17
+ constructor(smartsocketRefArg, optionsArg) {
18
+ // INSTANCE
19
+ this.status = 'new';
20
+ this.done = plugins.smartpromise.defer();
21
+ this.smartsocketRef = smartsocketRefArg;
22
+ this.side = optionsArg.side;
23
+ this.shortid = optionsArg.shortId;
24
+ this.funcCallData = optionsArg.funcCallData;
25
+ this.originSocketConnection = optionsArg.originSocketConnection;
26
+ this.smartsocketRef.socketRequests.add(this);
27
+ }
28
+ // requesting --------------------------
29
+ /**
30
+ * dispatches a socketrequest from the requesting to the receiving side
31
+ */
32
+ dispatch() {
33
+ const requestData = {
34
+ funcCallData: this.funcCallData,
35
+ shortId: this.shortid,
36
+ };
37
+ this.originSocketConnection.socket.emit('function', requestData);
38
+ return this.done.promise;
39
+ }
40
+ /**
41
+ * handles the response that is received by the requesting side
42
+ */
43
+ async handleResponse(responseDataArg) {
44
+ // logger.log('info', 'handling response!');
45
+ this.done.resolve(responseDataArg.funcCallData);
46
+ this.smartsocketRef.socketRequests.remove(this);
47
+ }
48
+ // responding --------------------------
49
+ /**
50
+ * creates the response on the responding side
51
+ */
52
+ async createResponse() {
53
+ const targetSocketFunction = SocketFunction.getSocketFunctionByName(this.smartsocketRef, this.funcCallData.funcName);
54
+ if (!targetSocketFunction) {
55
+ logger.log('error', `There is no SocketFunction defined for ${this.funcCallData.funcName}`);
56
+ return;
57
+ }
58
+ // logger.log('info', `invoking ${targetSocketFunction.name}`);
59
+ targetSocketFunction
60
+ .invoke(this.funcCallData, this.originSocketConnection)
61
+ .then((resultData) => {
62
+ // logger.log('info', 'got resultData. Sending it to requesting party.');
63
+ const responseData = {
64
+ funcCallData: resultData,
65
+ shortId: this.shortid,
66
+ };
67
+ this.originSocketConnection.socket.emit('functionResponse', responseData);
68
+ this.smartsocketRef.socketRequests.remove(this);
69
+ });
70
+ }
71
+ }
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRyZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRyZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sMEJBQTBCLENBQUM7QUFFcEQsb0JBQW9CO0FBQ3BCLE9BQU8sRUFDTCxjQUFjLEdBR2YsTUFBTSx5Q0FBeUMsQ0FBQztBQUVqRCxpQkFBaUI7QUFDakIsT0FBaUMsMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2xELE9BQTRCLHNDQUFzQyxDQUFDO0FBQ25FLE9BQWtDLDRDQUE0QyxDQUFDO0FBMkIvRSxpQkFBaUI7QUFDakIsTUFBTSxPQUFPLGFBQWE7SUFDeEIsU0FBUztJQUNGLE1BQU0sQ0FBQyxvQkFBb0IsQ0FDaEMsY0FBK0MsRUFDL0MsVUFBa0I7UUFFbEIsT0FBTyxjQUFjLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDakUsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQVlELFlBQ0UsaUJBQWtELEVBQ2xELFVBQStDO1FBWmpELFdBQVc7UUFDSixXQUFNLEdBQXlCLEtBQUssQ0FBQztRQUtyQyxTQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQXNDLENBQUM7UUFRN0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUM1QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDLHNCQUFzQixDQUFDO1FBQ2hFLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsd0NBQXdDO0lBRXhDOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE1BQU0sV0FBVyxHQUFnQztZQUMvQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7UUFDRixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsY0FBYyxDQUFDLGVBQTRDO1FBQ3RFLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCx3Q0FBd0M7SUFFeEM7O09BRUc7SUFDSSxLQUFLLENBQUMsY0FBYztRQUN6QixNQUFNLG9CQUFvQixHQUFzQixjQUFjLENBQUMsdUJBQXVCLENBQ3BGLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUMzQixDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLDBDQUEwQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUYsT0FBTztTQUNSO1FBQ0QsK0RBQStEO1FBQy9ELG9CQUFvQjthQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUM7YUFDdEQsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDbkIseUVBQXlFO1lBQ3pFLE1BQU0sWUFBWSxHQUFnQztnQkFDaEQsWUFBWSxFQUFFLFVBQVU7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzthQUN0QixDQUFDO1lBQ0YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNGIn0=
@@ -0,0 +1,35 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
3
+ import * as pluginsTyped from './smartsocket.pluginstyped.js';
4
+ import { Smartsocket } from './smartsocket.classes.smartsocket.js';
5
+ /**
6
+ * class socketServer
7
+ * handles the attachment of socketIo to whatever server is in play
8
+ */
9
+ export declare class SocketServer {
10
+ private smartsocket;
11
+ private httpServerDeferred;
12
+ private httpServer;
13
+ /**
14
+ * wether httpServer is standalone
15
+ */
16
+ private standaloneServer;
17
+ constructor(smartSocketInstance: Smartsocket);
18
+ /**
19
+ * starts the server with another server
20
+ * also works with an express style server
21
+ */
22
+ setExternalServer(serverType: 'smartexpress', serverArg: pluginsTyped.smartexpress.Server): Promise<void>;
23
+ /**
24
+ * gets the server for socket.io
25
+ */
26
+ getServerForSocketIo(): Promise<pluginsTyped.http.Server<typeof pluginsTyped.http.IncomingMessage, typeof pluginsTyped.http.ServerResponse> | pluginsTyped.https.Server<typeof pluginsTyped.http.IncomingMessage, typeof pluginsTyped.http.ServerResponse>>;
27
+ /**
28
+ * starts listening to incoming sockets:
29
+ */
30
+ start(): Promise<void>;
31
+ /**
32
+ * closes the server
33
+ */
34
+ stop(): Promise<void>;
35
+ }
@@ -0,0 +1,78 @@
1
+ import * as plugins from './smartsocket.plugins.js';
2
+ import './smartsocket.pluginstyped.js';
3
+ // used in case no other server is supplied
4
+ import './smartsocket.classes.smartsocket.js';
5
+ import { logger } from './smartsocket.logging.js';
6
+ /**
7
+ * class socketServer
8
+ * handles the attachment of socketIo to whatever server is in play
9
+ */
10
+ export class SocketServer {
11
+ constructor(smartSocketInstance) {
12
+ /**
13
+ * wether httpServer is standalone
14
+ */
15
+ this.standaloneServer = false;
16
+ this.smartsocket = smartSocketInstance;
17
+ }
18
+ /**
19
+ * starts the server with another server
20
+ * also works with an express style server
21
+ */
22
+ async setExternalServer(serverType, serverArg) {
23
+ this.httpServerDeferred = plugins.smartpromise.defer();
24
+ await serverArg.startedPromise;
25
+ this.httpServer = serverArg.httpServer;
26
+ this.httpServerDeferred.resolve();
27
+ }
28
+ /**
29
+ * gets the server for socket.io
30
+ */
31
+ async getServerForSocketIo() {
32
+ if (this.httpServerDeferred) {
33
+ await this.httpServerDeferred.promise;
34
+ }
35
+ if (this.httpServer) {
36
+ return this.httpServer;
37
+ }
38
+ else {
39
+ const httpModule = await this.smartsocket.smartenv.getSafeNodeModule('http');
40
+ this.httpServer = new httpModule.Server();
41
+ this.standaloneServer = true;
42
+ return this.httpServer;
43
+ }
44
+ }
45
+ /**
46
+ * starts listening to incoming sockets:
47
+ */
48
+ async start() {
49
+ const done = plugins.smartpromise.defer();
50
+ // handle http servers
51
+ // in case an external server has been set "this.standaloneServer" should be false
52
+ if (this.httpServer && this.standaloneServer) {
53
+ if (!this.smartsocket.options.port) {
54
+ logger.log('error', 'there should be a port specifed for smartsocket!');
55
+ throw new Error('there should be a port specified for smartsocket');
56
+ }
57
+ this.httpServer.listen(this.smartsocket.options.port, () => {
58
+ logger.log('success', `Server started in standalone mode on ${this.smartsocket.options.port}`);
59
+ done.resolve();
60
+ });
61
+ }
62
+ else {
63
+ done.resolve();
64
+ }
65
+ // nothing else to do if express server is set
66
+ await done.promise;
67
+ return;
68
+ }
69
+ /**
70
+ * closes the server
71
+ */
72
+ async stop() {
73
+ if (this.httpServer) {
74
+ this.httpServer.close();
75
+ }
76
+ }
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQuY2xhc3Nlcy5zb2NrZXRzZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHNvY2tldC5jbGFzc2VzLnNvY2tldHNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQThCLCtCQUErQixDQUFDO0FBRTlELDJDQUEyQztBQUMzQyxPQUE0QixzQ0FBc0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbEQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFVdkIsWUFBWSxtQkFBZ0M7UUFMNUM7O1dBRUc7UUFDSyxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFHL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGlCQUFpQixDQUM1QixVQUEwQixFQUMxQixTQUEyQztRQUUzQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2RCxNQUFNLFNBQVMsQ0FBQyxjQUFjLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsb0JBQW9CO1FBQy9CLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzNCLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztTQUN2QztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7U0FDeEI7YUFBTTtZQUNMLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFMUMsc0JBQXNCO1FBQ3RCLGtGQUFrRjtRQUNsRixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2xDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGtEQUFrRCxDQUFDLENBQUM7Z0JBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQzthQUNyRTtZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQ1IsU0FBUyxFQUNULHdDQUF3QyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FDeEUsQ0FBQztnQkFDRixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO1FBRUQsOENBQThDO1FBQzlDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNuQixPQUFPO0lBQ1QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUk7UUFDZixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7Q0FDRiJ9
@@ -0,0 +1,2 @@
1
+ import * as plugins from './smartsocket.plugins.js';
2
+ export declare const logger: plugins.smartlog.ConsoleLog;
@@ -0,0 +1,3 @@
1
+ import * as plugins from './smartsocket.plugins.js';
2
+ export const logger = new plugins.smartlog.ConsoleLog();
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQubG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LmxvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDIn0=
@@ -0,0 +1,13 @@
1
+ import * as typedrequestInterfaces from '@apiglobal/typedrequest-interfaces';
2
+ export { typedrequestInterfaces };
3
+ import * as isohash from '@pushrocks/isohash';
4
+ import * as isounique from '@pushrocks/isounique';
5
+ import * as lik from '@pushrocks/lik';
6
+ import * as smartenv from '@pushrocks/smartenv';
7
+ import * as smartjson from '@pushrocks/smartjson';
8
+ import * as smartlog from '@pushrocks/smartlog';
9
+ import * as smartdelay from '@pushrocks/smartdelay';
10
+ import * as smartpromise from '@pushrocks/smartpromise';
11
+ import * as smarttime from '@pushrocks/smarttime';
12
+ import * as smartrx from '@pushrocks/smartrx';
13
+ export { isohash, isounique, lik, smartenv, smartjson, smartlog, smartdelay, smartpromise, smarttime, smartrx, };
@@ -0,0 +1,16 @@
1
+ // apiglobal scope
2
+ import * as typedrequestInterfaces from '@apiglobal/typedrequest-interfaces';
3
+ export { typedrequestInterfaces };
4
+ // pushrocks scope
5
+ import * as isohash from '@pushrocks/isohash';
6
+ import * as isounique from '@pushrocks/isounique';
7
+ import * as lik from '@pushrocks/lik';
8
+ import * as smartenv from '@pushrocks/smartenv';
9
+ import * as smartjson from '@pushrocks/smartjson';
10
+ import * as smartlog from '@pushrocks/smartlog';
11
+ import * as smartdelay from '@pushrocks/smartdelay';
12
+ import * as smartpromise from '@pushrocks/smartpromise';
13
+ import * as smarttime from '@pushrocks/smarttime';
14
+ import * as smartrx from '@pushrocks/smartrx';
15
+ export { isohash, isounique, lik, smartenv, smartjson, smartlog, smartdelay, smartpromise, smarttime, smartrx, };
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c29ja2V0LnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCLE9BQU8sS0FBSyxzQkFBc0IsTUFBTSxvQ0FBb0MsQ0FBQztBQUU3RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztBQUVsQyxrQkFBa0I7QUFDbEIsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEtBQUssU0FBUyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEtBQUssU0FBUyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxRQUFRLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxLQUFLLFVBQVUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssWUFBWSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxTQUFTLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEVBQ0wsT0FBTyxFQUNQLFNBQVMsRUFDVCxHQUFHLEVBQ0gsUUFBUSxFQUNSLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1QsT0FBTyxHQUNSLENBQUMifQ==
@@ -0,0 +1,15 @@
1
+ import type * as http from 'http';
2
+ import type * as https from 'https';
3
+ export { http, https };
4
+ import type * as smartexpress from '@pushrocks/smartexpress';
5
+ export { smartexpress };
6
+ import type { Socket as ServerSocket, Server as ServerServer } from 'socket.io';
7
+ import type { Socket as ClientSocket, connect as ClientIo } from 'socket.io-client';
8
+ export declare namespace socketIo {
9
+ type Socket = ServerSocket;
10
+ type Server = ServerServer;
11
+ }
12
+ export declare namespace socketIoClient {
13
+ type Socket = ClientSocket;
14
+ type connect = typeof ClientIo;
15
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzb2NrZXQucGx1Z2luc3R5cGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzb2NrZXQucGx1Z2luc3R5cGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
package/npmextra.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "gitzone": {
3
+ "projectType": "npm",
4
+ "module": {
5
+ "githost": "gitlab.com",
6
+ "gitscope": "pushrocks",
7
+ "gitrepo": "smartsocket",
8
+ "description": "easy and secure websocket communication",
9
+ "npmPackagename": "@pushrocks/smartsocket",
10
+ "license": "MIT",
11
+ "projectDomain": "push.rocks"
12
+ }
13
+ },
14
+ "npmci": {
15
+ "npmGlobalTools": [],
16
+ "npmAccessLevel": "public"
17
+ }
18
+ }