cdsclient-lib 0.0.2 → 0.0.4

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 (62) hide show
  1. package/README.md +19 -20
  2. package/dist/lib/cjs/client.d.ts +304 -0
  3. package/dist/lib/cjs/client.js +916 -0
  4. package/dist/lib/cjs/client.js.map +1 -0
  5. package/dist/lib/cjs/enums.d.ts +23 -0
  6. package/dist/lib/cjs/enums.js +28 -0
  7. package/dist/lib/cjs/enums.js.map +1 -0
  8. package/dist/lib/cjs/errors.d.ts +20 -0
  9. package/dist/lib/cjs/errors.js +25 -0
  10. package/dist/lib/cjs/errors.js.map +1 -0
  11. package/dist/lib/cjs/event/channelstates.d.ts +24 -0
  12. package/dist/lib/cjs/event/channelstates.js +28 -0
  13. package/dist/lib/cjs/event/channelstates.js.map +1 -0
  14. package/dist/lib/cjs/event/eventprovider.d.ts +40 -0
  15. package/dist/lib/cjs/event/eventprovider.js +62 -0
  16. package/dist/lib/cjs/event/eventprovider.js.map +1 -0
  17. package/dist/lib/cjs/event/events.d.ts +32 -0
  18. package/dist/lib/cjs/event/events.js +38 -0
  19. package/dist/lib/cjs/event/events.js.map +1 -0
  20. package/dist/lib/cjs/index.d.ts +23 -0
  21. package/dist/lib/cjs/index.js +68 -0
  22. package/dist/lib/cjs/index.js.map +1 -0
  23. package/dist/lib/cjs/interfaces.d.ts +162 -0
  24. package/dist/lib/cjs/interfaces.js +20 -0
  25. package/dist/lib/cjs/interfaces.js.map +1 -0
  26. package/dist/lib/cjs/models.d.ts +198 -0
  27. package/dist/lib/cjs/models.js +234 -0
  28. package/dist/lib/cjs/models.js.map +1 -0
  29. package/dist/lib/cjs/wsclient.d.ts +99 -0
  30. package/dist/lib/cjs/wsclient.js +330 -0
  31. package/dist/lib/cjs/wsclient.js.map +1 -0
  32. package/dist/lib/es6/client.d.ts +304 -0
  33. package/dist/lib/es6/client.js +876 -0
  34. package/dist/lib/es6/client.js.map +1 -0
  35. package/dist/lib/es6/enums.d.ts +23 -0
  36. package/dist/lib/es6/enums.js +25 -0
  37. package/dist/lib/es6/enums.js.map +1 -0
  38. package/dist/lib/es6/errors.d.ts +20 -0
  39. package/dist/lib/es6/errors.js +25 -0
  40. package/dist/lib/es6/errors.js.map +1 -0
  41. package/dist/lib/es6/event/channelstates.d.ts +24 -0
  42. package/dist/lib/es6/event/channelstates.js +25 -0
  43. package/dist/lib/es6/event/channelstates.js.map +1 -0
  44. package/dist/lib/es6/event/eventprovider.d.ts +40 -0
  45. package/dist/lib/es6/event/eventprovider.js +57 -0
  46. package/dist/lib/es6/event/eventprovider.js.map +1 -0
  47. package/dist/lib/es6/event/events.d.ts +32 -0
  48. package/dist/lib/es6/event/events.js +35 -0
  49. package/dist/lib/es6/event/events.js.map +1 -0
  50. package/dist/lib/es6/index.d.ts +23 -0
  51. package/dist/lib/es6/index.js +23 -0
  52. package/dist/lib/es6/index.js.map +1 -0
  53. package/dist/lib/es6/interfaces.d.ts +162 -0
  54. package/dist/lib/es6/interfaces.js +19 -0
  55. package/dist/lib/es6/interfaces.js.map +1 -0
  56. package/dist/lib/es6/models.d.ts +198 -0
  57. package/dist/lib/es6/models.js +201 -0
  58. package/dist/lib/es6/models.js.map +1 -0
  59. package/dist/lib/es6/wsclient.d.ts +99 -0
  60. package/dist/lib/es6/wsclient.js +292 -0
  61. package/dist/lib/es6/wsclient.js.map +1 -0
  62. package/package.json +28 -14
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Copyright © 2024 Rajdeep Rath. All Rights Reserved.
3
+ *
4
+ * This codebase is open-source and provided for use exclusively with the Cloudisense platform,
5
+ * as governed by its End-User License Agreement (EULA). Unauthorized use, reproduction,
6
+ * or distribution of this code outside of the Cloudisense ecosystem is strictly prohibited.
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * You may not use this file except in compliance with the License.
10
+ * A copy of the License is available at:
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * This code may include third-party open-source libraries subject to their respective licenses.
14
+ * Such licenses are referenced in the source files or accompanying documentation.
15
+ *
16
+ * For questions or permissions beyond the scope of this notice, please contact Rajdeep Rath.
17
+ */
18
+ import { IServiceSocket, ISocketServiceObject } from "./interfaces";
19
+ import { ChannelEventProvider } from "./event/eventprovider";
20
+ declare const Deferred: any;
21
+ export declare class RequestRecord {
22
+ defer: typeof Deferred;
23
+ timestamp: number;
24
+ constructor(defer: typeof Deferred, timestamp: number);
25
+ }
26
+ export declare class WSClient extends ChannelEventProvider implements IServiceSocket {
27
+ host: string;
28
+ port: number;
29
+ authtoken: string;
30
+ queryparams?: string | undefined;
31
+ private _connectTimeout;
32
+ private _connected;
33
+ private _wsEndPoint;
34
+ private _client;
35
+ private _disconnectFlag;
36
+ private _requests;
37
+ private _cleanupId;
38
+ constructor(config: ISocketServiceObject);
39
+ private getSocketEndPoint;
40
+ /**
41
+ * Returns host IP/address of the socket endpoint
42
+ * @returns IP/hostname
43
+ */
44
+ getHost(): string;
45
+ /**
46
+ * Returns port number for websocket client
47
+ * @returns port number
48
+ */
49
+ getPort(): number;
50
+ /**
51
+ * Connects websocket service to backend
52
+ *
53
+ * @returns Promise which is resolved when connection is successful else rejected
54
+ *
55
+ */
56
+ connectService(): Promise<any>;
57
+ /**
58
+ * Disconnects websocket on demand and cleans the websocket object + handlers
59
+ */
60
+ disconnectService(): void;
61
+ /**
62
+ * Clears up websocket callback handlers
63
+ */
64
+ private _clear_handlers;
65
+ /**
66
+ * Checks to see whether socket is conencted or not.
67
+ * @returns true is socket is conencted, false otherwise
68
+ */
69
+ is_connected(): boolean;
70
+ /**
71
+ * Builds JSON request format for RPC with Cloudisense backend
72
+ *
73
+ * @param requestid
74
+ * @param intent
75
+ * @param params
76
+ * @returns
77
+ */
78
+ private buildRequest;
79
+ /**
80
+ * Makes RPC request to server with an intent and parameter map
81
+ * `
82
+ * @param methodName
83
+ * @param params
84
+ */
85
+ doRPC(intent: string, params?: object): Promise<any>;
86
+ /**
87
+ * Cleans up old/delayed requests from the requests queue
88
+ * by looking up request timestamp. Requests are thereby rejected
89
+ * with a timeout error.
90
+ */
91
+ private cleanup_requests;
92
+ /**
93
+ * Determined whether a RPC was successful or not and accordingly
94
+ * resolves or rejects the client promise
95
+ * @param response
96
+ */
97
+ private resolve_request;
98
+ }
99
+ export {};
@@ -0,0 +1,330 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright © 2024 Rajdeep Rath. All Rights Reserved.
4
+ *
5
+ * This codebase is open-source and provided for use exclusively with the Cloudisense platform,
6
+ * as governed by its End-User License Agreement (EULA). Unauthorized use, reproduction,
7
+ * or distribution of this code outside of the Cloudisense ecosystem is strictly prohibited.
8
+ *
9
+ * Licensed under the Apache License, Version 2.0 (the "License");
10
+ * You may not use this file except in compliance with the License.
11
+ * A copy of the License is available at:
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * This code may include third-party open-source libraries subject to their respective licenses.
15
+ * Such licenses are referenced in the source files or accompanying documentation.
16
+ *
17
+ * For questions or permissions beyond the scope of this notice, please contact Rajdeep Rath.
18
+ */
19
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
26
+ }) : (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ o[k2] = m[k];
29
+ }));
30
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32
+ }) : function(o, v) {
33
+ o["default"] = v;
34
+ });
35
+ var __importStar = (this && this.__importStar) || (function () {
36
+ var ownKeys = function(o) {
37
+ ownKeys = Object.getOwnPropertyNames || function (o) {
38
+ var ar = [];
39
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40
+ return ar;
41
+ };
42
+ return ownKeys(o);
43
+ };
44
+ return function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ })();
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.WSClient = exports.RequestRecord = void 0;
54
+ const nanoid_1 = require("nanoid");
55
+ const eventprovider_1 = require("./event/eventprovider");
56
+ const CHANNEL_STATES = __importStar(require("./event/channelstates"));
57
+ const Deferred = require('promise-deferred');
58
+ //var deferred = new Deferred();
59
+ const REQUEST_DELAYED_TIME_MILLISECONDS = 10000;
60
+ class RequestRecord {
61
+ constructor(defer, timestamp) {
62
+ this.defer = defer;
63
+ this.timestamp = timestamp;
64
+ }
65
+ }
66
+ exports.RequestRecord = RequestRecord;
67
+ class WSClient extends eventprovider_1.ChannelEventProvider {
68
+ constructor(config) {
69
+ super();
70
+ this._connectTimeout = 5000;
71
+ this._connected = false;
72
+ this._disconnectFlag = false;
73
+ this._requests = new Map();
74
+ this.host = config.host;
75
+ this.port = config.port;
76
+ this.authtoken = config.authtoken;
77
+ this._wsEndPoint = "ws" + "://" + this.host + ":" + this.port + "/" + "ws" + "?" + "token=" + this.authtoken;
78
+ /* Auto cleanup */
79
+ this._cleanupId = setInterval(() => this.cleanup_requests(), 30000);
80
+ }
81
+ getSocketEndPoint() {
82
+ return this._wsEndPoint;
83
+ }
84
+ /**
85
+ * Returns host IP/address of the socket endpoint
86
+ * @returns IP/hostname
87
+ */
88
+ getHost() {
89
+ return this.host;
90
+ }
91
+ /**
92
+ * Returns port number for websocket client
93
+ * @returns port number
94
+ */
95
+ getPort() {
96
+ return this.port;
97
+ }
98
+ /**
99
+ * Connects websocket service to backend
100
+ *
101
+ * @returns Promise which is resolved when connection is successful else rejected
102
+ *
103
+ */
104
+ connectService() {
105
+ return new Promise((resolve, reject) => {
106
+ let resolved = false;
107
+ if (!this.is_connected()) {
108
+ if (this._client === undefined) {
109
+ this._client = new WebSocket(this._wsEndPoint);
110
+ }
111
+ /**
112
+ * Handle socket error
113
+ */
114
+ this._client.onerror = (error) => {
115
+ this._connected = false;
116
+ this._onChannelState.dispatch(CHANNEL_STATES.STATE_CHANNEL_ERROR);
117
+ console.error('Socket Error: ' + error.toString());
118
+ if (!resolved) {
119
+ reject(error);
120
+ resolved = true;
121
+ }
122
+ };
123
+ /**
124
+ * Handle socket connect
125
+ */
126
+ this._client.onopen = (e) => {
127
+ this._onChannelState.dispatch(CHANNEL_STATES.STATE_CHANNEL_CONNECTED);
128
+ this._connected = true;
129
+ if (!resolved) {
130
+ resolve(this);
131
+ resolved = true;
132
+ }
133
+ };
134
+ /**
135
+ * Handle socket close
136
+ */
137
+ this._client.onclose = (event) => {
138
+ this._connected = false;
139
+ if (this._disconnectFlag && event.wasClean) {
140
+ this._onChannelState.dispatch(CHANNEL_STATES.STATE_CHANNEL_DISCONNECTED);
141
+ }
142
+ else {
143
+ this._onChannelState.dispatch(CHANNEL_STATES.STATE_CHANNEL_CONNECTION_LOST);
144
+ }
145
+ };
146
+ /**
147
+ * Handle socket message
148
+ */
149
+ this._client.onmessage = (event) => {
150
+ if (typeof event.data === "string") {
151
+ const message = event.data;
152
+ console.debug("Received: '" + message + "'");
153
+ try {
154
+ let data = JSON.parse(message);
155
+ if (data.hasOwnProperty('type') && data["type"] == "rpc") {
156
+ this.resolve_request(data);
157
+ }
158
+ else {
159
+ this._onChannelData.dispatch(data);
160
+ this._onChannelState.dispatch(CHANNEL_STATES.STATE_CHANNEL_DATA);
161
+ }
162
+ }
163
+ catch (e) {
164
+ throw new TypeError("Unexpected message type (not JSON) : " + String(e));
165
+ }
166
+ }
167
+ else if (event.data instanceof Blob) {
168
+ throw new TypeError("Invalid message type [Blob]");
169
+ }
170
+ else if (event.data instanceof ArrayBuffer) {
171
+ throw new TypeError("Invalid message type [ArrayBuffer]");
172
+ }
173
+ };
174
+ setTimeout(() => {
175
+ if (!resolved) {
176
+ reject("Connect timeout");
177
+ resolved = true;
178
+ }
179
+ }, this._connectTimeout);
180
+ }
181
+ });
182
+ }
183
+ /**
184
+ * Disconnects websocket on demand and cleans the websocket object + handlers
185
+ */
186
+ disconnectService() {
187
+ if (this.is_connected()) {
188
+ // use flag to see if disconnect was requested or automatic
189
+ this._disconnectFlag = true;
190
+ setTimeout(() => {
191
+ this._disconnectFlag = false;
192
+ }, 3000);
193
+ try {
194
+ this._client.close();
195
+ }
196
+ catch (error) {
197
+ throw error;
198
+ }
199
+ finally {
200
+ this._clear_handlers();
201
+ }
202
+ }
203
+ else {
204
+ throw new Error("socket is not connected");
205
+ }
206
+ }
207
+ /**
208
+ * Clears up websocket callback handlers
209
+ */
210
+ _clear_handlers() {
211
+ if (this._client != null && this._client != undefined) {
212
+ this._client.onmessage = null;
213
+ this._client.onopen = null;
214
+ this._client.onerror = null;
215
+ this._client.onclose = null;
216
+ }
217
+ }
218
+ /**
219
+ * Checks to see whether socket is conencted or not.
220
+ * @returns true is socket is conencted, false otherwise
221
+ */
222
+ is_connected() {
223
+ if (this._connected === undefined) {
224
+ return false;
225
+ }
226
+ else {
227
+ return this._connected;
228
+ }
229
+ }
230
+ /**
231
+ * Builds JSON request format for RPC with Cloudisense backend
232
+ *
233
+ * @param requestid
234
+ * @param intent
235
+ * @param params
236
+ * @returns
237
+ */
238
+ buildRequest(requestid, intent, params) {
239
+ return {
240
+ "requestid": requestid,
241
+ "intent": intent,
242
+ "type": "rpc",
243
+ "params": params
244
+ };
245
+ }
246
+ /**
247
+ * Makes RPC request to server with an intent and parameter map
248
+ * `
249
+ * @param methodName
250
+ * @param params
251
+ */
252
+ doRPC(intent, params) {
253
+ if (params == undefined || params == null) {
254
+ params = {};
255
+ }
256
+ let requestid = (0, nanoid_1.nanoid)();
257
+ let request = this.buildRequest(requestid, intent, params);
258
+ let deferred = new Deferred();
259
+ let record = new RequestRecord(deferred, new Date().getUTCMilliseconds());
260
+ if (this.is_connected()) {
261
+ try {
262
+ setTimeout(() => {
263
+ this._client.send(JSON.stringify(request));
264
+ }, 10);
265
+ }
266
+ catch (err) {
267
+ console.error("Unable to send request");
268
+ }
269
+ }
270
+ else {
271
+ console.error("Socket is not connected");
272
+ }
273
+ ;
274
+ this._requests.set(requestid, record);
275
+ return deferred.promise;
276
+ }
277
+ /**
278
+ * Cleans up old/delayed requests from the requests queue
279
+ * by looking up request timestamp. Requests are thereby rejected
280
+ * with a timeout error.
281
+ */
282
+ cleanup_requests() {
283
+ const now = new Date().getUTCMilliseconds();
284
+ this._requests.forEach((value, requestid, map) => {
285
+ const record = value;
286
+ const request_timestamp = record.timestamp;
287
+ if (now - request_timestamp > REQUEST_DELAYED_TIME_MILLISECONDS) {
288
+ try {
289
+ const defer = record.defer;
290
+ defer.reject("RPC Timed out");
291
+ }
292
+ catch (e) {
293
+ console.error(e);
294
+ }
295
+ finally {
296
+ map.delete(requestid);
297
+ }
298
+ }
299
+ });
300
+ }
301
+ /**
302
+ * Determined whether a RPC was successful or not and accordingly
303
+ * resolves or rejects the client promise
304
+ * @param response
305
+ */
306
+ resolve_request(response) {
307
+ var _a;
308
+ let requestid = response["requestid"];
309
+ try {
310
+ let response_timestamp = response["timestamp"];
311
+ let def = (_a = this._requests.get(requestid)) === null || _a === void 0 ? void 0 : _a.defer;
312
+ if (response["status"] == "success") {
313
+ let data = response["data"];
314
+ def.resolve(data);
315
+ }
316
+ else if (response["status"] == "error") {
317
+ let error_message = response["message"];
318
+ def.reject(error_message);
319
+ }
320
+ }
321
+ catch (e) {
322
+ console.error("Error processing request");
323
+ }
324
+ finally {
325
+ this._requests.delete(requestid);
326
+ }
327
+ }
328
+ }
329
+ exports.WSClient = WSClient;
330
+ //# sourceMappingURL=wsclient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsclient.js","sourceRoot":"","sources":["../../../src/wsclient.ts"],"names":[],"mappings":"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"}