cbcore-ts 1.0.0

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 (39) hide show
  1. package/.idea/misc.xml +6 -0
  2. package/.idea/modules.xml +8 -0
  3. package/.idea/uicore.iml +9 -0
  4. package/.idea/vcs.xml +6 -0
  5. package/.jshintrc +4 -0
  6. package/LICENSE +21 -0
  7. package/README.md +5 -0
  8. package/compiledScripts/CBCore.d.ts +54 -0
  9. package/compiledScripts/CBCore.js +182 -0
  10. package/compiledScripts/CBCore.js.map +7 -0
  11. package/compiledScripts/CBDataInterfaces.d.ts +156 -0
  12. package/compiledScripts/CBDataInterfaces.js +35 -0
  13. package/compiledScripts/CBDataInterfaces.js.map +7 -0
  14. package/compiledScripts/CBLanguageService.d.ts +43 -0
  15. package/compiledScripts/CBLanguageService.js +167 -0
  16. package/compiledScripts/CBLanguageService.js.map +7 -0
  17. package/compiledScripts/CBServerClient.d.ts +10 -0
  18. package/compiledScripts/CBServerClient.js +88 -0
  19. package/compiledScripts/CBServerClient.js.map +7 -0
  20. package/compiledScripts/CBSocketCallbackHolder.d.ts +65 -0
  21. package/compiledScripts/CBSocketCallbackHolder.js +343 -0
  22. package/compiledScripts/CBSocketCallbackHolder.js.map +7 -0
  23. package/compiledScripts/CBSocketClient.d.ts +70 -0
  24. package/compiledScripts/CBSocketClient.js +371 -0
  25. package/compiledScripts/CBSocketClient.js.map +7 -0
  26. package/compiledScripts/index.d.ts +6 -0
  27. package/compiledScripts/index.js +23 -0
  28. package/compiledScripts/index.js.map +7 -0
  29. package/etsc.config.mjs +23 -0
  30. package/package.json +51 -0
  31. package/rollup.config.js +49 -0
  32. package/scripts/CBCore.ts +381 -0
  33. package/scripts/CBDataInterfaces.ts +336 -0
  34. package/scripts/CBLanguageService.ts +371 -0
  35. package/scripts/CBServerClient.ts +147 -0
  36. package/scripts/CBSocketCallbackHolder.ts +872 -0
  37. package/scripts/CBSocketClient.ts +748 -0
  38. package/scripts/index.ts +18 -0
  39. package/tsconfig.json +69 -0
@@ -0,0 +1,343 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
+ mod
22
+ ));
23
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
+ var CBSocketCallbackHolder_exports = {};
25
+ __export(CBSocketCallbackHolder_exports, {
26
+ CBSocketCallbackHolder: () => CBSocketCallbackHolder
27
+ });
28
+ module.exports = __toCommonJS(CBSocketCallbackHolder_exports);
29
+ var import_object_hash = __toESM(require("object-hash"));
30
+ var import_uicore_ts = require("../../uicore-ts");
31
+ var import_CBSocketClient = require("./CBSocketClient");
32
+ class CBSocketCallbackHolder extends import_uicore_ts.UIObject {
33
+ constructor(socketClient, previousCallbackHolder) {
34
+ super();
35
+ this.messageDescriptors = {};
36
+ this.handlers = {};
37
+ this.onetimeHandlers = {};
38
+ this.keysForIdentifiers = {};
39
+ this.isValid = import_uicore_ts.YES;
40
+ this._verifiedResponseHashesDictionary = {};
41
+ this._socketClient = socketClient;
42
+ if ((0, import_uicore_ts.IS)(previousCallbackHolder)) {
43
+ this.handlers = previousCallbackHolder.handlers;
44
+ this._verifiedResponseHashesDictionary = previousCallbackHolder._verifiedResponseHashesDictionary;
45
+ }
46
+ }
47
+ triggerDisconnectHandlers() {
48
+ this.messageDescriptors.forEach(function(descriptor, key) {
49
+ if (descriptor.mainResponseReceived) {
50
+ descriptor.completionFunction(import_CBSocketClient.CBSocketClient.disconnectionMessage, import_uicore_ts.nil);
51
+ }
52
+ });
53
+ }
54
+ registerHandler(key, handlerFunction) {
55
+ if (!this.handlers[key]) {
56
+ this.handlers[key] = [];
57
+ }
58
+ this.handlers[key].push(handlerFunction);
59
+ }
60
+ registerOnetimeHandler(key, handlerFunction) {
61
+ if (!this.onetimeHandlers[key]) {
62
+ this.onetimeHandlers[key] = [];
63
+ }
64
+ this.onetimeHandlers[key].push(handlerFunction);
65
+ }
66
+ get storedResponseHashesDictionary() {
67
+ if ((0, import_uicore_ts.IS_NOT)(this._storedResponseHashesDictionary)) {
68
+ this._storedResponseHashesDictionary = JSON.parse(localStorage["CBSocketResponseHashesDictionary"] || "{}");
69
+ }
70
+ return this._storedResponseHashesDictionary;
71
+ }
72
+ storedResponseHashObjectForKey(requestKey, requestDataHash) {
73
+ const localStorageKey = this.keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash);
74
+ const hashObject = this.storedResponseHashesDictionary[localStorageKey];
75
+ const result = (0, import_uicore_ts.FIRST)(hashObject, {});
76
+ return result;
77
+ }
78
+ storedResponseForKey(requestKey, requestDataHash) {
79
+ const localStorageKey = this.keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash);
80
+ const storedObject = JSON.parse(localStorage[localStorageKey] || "{}");
81
+ return storedObject.responseMessageData;
82
+ }
83
+ keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash) {
84
+ const result = "_CBSCH_LS_key_" + requestKey + "_" + requestDataHash;
85
+ return result;
86
+ }
87
+ storeResponse(requestKey, requestDataHash, responseMessage, responseDataHash) {
88
+ if (!responseMessage.canBeStoredAsResponse || (0, import_uicore_ts.IS_NOT)(responseMessage.messageData) && (0, import_uicore_ts.IS_NOT)(responseMessage.messageDataHash)) {
89
+ return;
90
+ }
91
+ const localStorageKey = this.keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash);
92
+ var validityDate;
93
+ if (responseMessage.responseValidityDuration) {
94
+ validityDate = Date.now() + responseMessage.responseValidityDuration;
95
+ }
96
+ const storedResponseHashesDictionary = this.storedResponseHashesDictionary;
97
+ storedResponseHashesDictionary[localStorageKey] = {
98
+ hash: responseDataHash,
99
+ validityDate
100
+ };
101
+ this.saveInLocalStorage(localStorageKey, {
102
+ responseMessageData: responseMessage.messageData,
103
+ responseHash: responseDataHash
104
+ });
105
+ this.saveStoredResponseHashesDictionary(storedResponseHashesDictionary);
106
+ }
107
+ saveStoredResponseHashesDictionary(storedResponseHashesDictionary) {
108
+ this.saveInLocalStorage("CBSocketResponseHashesDictionary", storedResponseHashesDictionary);
109
+ }
110
+ saveInLocalStorage(key, object) {
111
+ const stringToSave = JSON.stringify(object);
112
+ if (stringToSave != localStorage[key]) {
113
+ localStorage[key] = stringToSave;
114
+ }
115
+ }
116
+ socketShouldSendMessage(key, message, completionPolicy, completionFunction) {
117
+ var result = import_uicore_ts.YES;
118
+ var triggerStoredResponseImmediately = import_uicore_ts.NO;
119
+ const messageDataHash = (0, import_object_hash.default)(message.messageData || import_uicore_ts.nil);
120
+ const descriptorKey = "socketMessageDescriptor_" + key + messageDataHash;
121
+ this.messageDescriptors[descriptorKey] = this.messageDescriptors[descriptorKey] || [];
122
+ const hashObject = this.storedResponseHashObjectForKey(key, messageDataHash);
123
+ message.storedResponseHash = hashObject.hash;
124
+ if (completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.first) {
125
+ const descriptorsForKey = this.messageDescriptors[descriptorKey] || [];
126
+ const matchingDescriptor = descriptorsForKey.find(function(descriptor, index, array) {
127
+ return descriptor.messageDataHash == messageDataHash;
128
+ });
129
+ if (matchingDescriptor) {
130
+ result = import_uicore_ts.NO;
131
+ }
132
+ }
133
+ if (completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.storedOrFirst) {
134
+ const descriptorsForKey = this.messageDescriptors[descriptorKey] || [];
135
+ const matchingDescriptor = descriptorsForKey.find(function(descriptor, index, array) {
136
+ return descriptor.messageDataHash == messageDataHash;
137
+ });
138
+ const storedResponse = (0, import_uicore_ts.IS)(message.storedResponseHash);
139
+ if (matchingDescriptor || storedResponse && this._verifiedResponseHashesDictionary[message.storedResponseHash]) {
140
+ result = import_uicore_ts.NO;
141
+ triggerStoredResponseImmediately = import_uicore_ts.YES;
142
+ }
143
+ }
144
+ if (completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.firstOnly) {
145
+ const descriptorsForKey = this.messageDescriptors[descriptorKey] || [];
146
+ const matchingDescriptor = descriptorsForKey.find(function(descriptor, index, array) {
147
+ return descriptor.messageDataHash == messageDataHash;
148
+ });
149
+ if (matchingDescriptor) {
150
+ return import_uicore_ts.NO;
151
+ }
152
+ }
153
+ if (hashObject && hashObject.hash && hashObject.validityDate && message.storedResponseHash && this._verifiedResponseHashesDictionary[message.storedResponseHash] && hashObject.validityDate > Date.now()) {
154
+ result = import_uicore_ts.NO;
155
+ triggerStoredResponseImmediately = import_uicore_ts.YES;
156
+ }
157
+ if ((0, import_uicore_ts.IS)(completionFunction)) {
158
+ this.messageDescriptors[descriptorKey].push({
159
+ key,
160
+ message: {
161
+ identifier: message.identifier,
162
+ inResponseToIdentifier: message.inResponseToIdentifier,
163
+ keepWaitingForResponses: message.keepWaitingForResponses
164
+ },
165
+ sentAtTime: Date.now(),
166
+ messageDataHash,
167
+ mainResponseReceived: import_uicore_ts.NO,
168
+ anyMainResponseReceived: import_uicore_ts.NO,
169
+ completionPolicy,
170
+ completionFunction
171
+ });
172
+ this.keysForIdentifiers[message.identifier] = descriptorKey;
173
+ }
174
+ if (triggerStoredResponseImmediately) {
175
+ this.socketDidReceiveMessageForKey(
176
+ import_CBSocketClient.CBSocketClient.responseMessageKey,
177
+ {
178
+ identifier: import_uicore_ts.nil,
179
+ messageData: import_uicore_ts.nil,
180
+ inResponseToIdentifier: message.identifier,
181
+ useStoredResponse: import_uicore_ts.YES
182
+ },
183
+ import_uicore_ts.nil
184
+ );
185
+ }
186
+ return result;
187
+ }
188
+ static defaultMultipleMessagecompletionFunction(responseMessages, callcompletionFunctions) {
189
+ callcompletionFunctions();
190
+ }
191
+ socketWillSendMultipleMessage(messageToSend, completionFunction = CBSocketCallbackHolder.defaultMultipleMessagecompletionFunction) {
192
+ const key = import_CBSocketClient.CBSocketClient.multipleMessageKey;
193
+ const messageDataHash = (0, import_object_hash.default)(messageToSend.messageData || import_uicore_ts.nil);
194
+ const descriptorKey = "socketMessageDescriptor_" + key + messageDataHash;
195
+ this.messageDescriptors[descriptorKey] = this.messageDescriptors[descriptorKey] || [];
196
+ messageToSend.storedResponseHash = this.storedResponseHashObjectForKey(key, messageDataHash).hash;
197
+ this.messageDescriptors[descriptorKey].push({
198
+ key,
199
+ message: {
200
+ identifier: messageToSend.identifier,
201
+ inResponseToIdentifier: messageToSend.inResponseToIdentifier,
202
+ keepWaitingForResponses: messageToSend.keepWaitingForResponses
203
+ },
204
+ sentAtTime: Date.now(),
205
+ messageDataHash,
206
+ mainResponseReceived: import_uicore_ts.NO,
207
+ anyMainResponseReceived: import_uicore_ts.NO,
208
+ completionPolicy: import_CBSocketClient.CBSocketClient.completionPolicy.directOnly,
209
+ completionFunction: function(responseMessage, respondWithMessage) {
210
+ completionFunction(
211
+ responseMessage.map(function(messageObject, index, array) {
212
+ return messageObject.message.messageData;
213
+ }),
214
+ function() {
215
+ responseMessage.forEach(function(messageObject, index, array) {
216
+ this._socketClient.didReceiveMessageForKey(messageObject.key, messageObject.message);
217
+ }.bind(this));
218
+ }.bind(this)
219
+ );
220
+ }.bind(this)
221
+ });
222
+ this.keysForIdentifiers[messageToSend.identifier] = descriptorKey;
223
+ }
224
+ socketDidReceiveMessageForKey(key, message, sendResponseFunction) {
225
+ if (!this.isValid) {
226
+ return;
227
+ }
228
+ if (this.handlers[key]) {
229
+ this.handlers[key].forEach(function(handler, index, array) {
230
+ handler(message.messageData, sendResponseFunction);
231
+ }.bind(this));
232
+ }
233
+ if (this.onetimeHandlers[key]) {
234
+ this.onetimeHandlers[key].forEach(function(handler, index, array) {
235
+ handler(message.messageData, sendResponseFunction);
236
+ }.bind(this));
237
+ delete this.onetimeHandlers[key];
238
+ }
239
+ if (message.inResponseToIdentifier && (import_CBSocketClient.CBSocketClient.responseMessageKey == key || import_CBSocketClient.CBSocketClient.multipleMessageKey == key)) {
240
+ const descriptorKey = this.keysForIdentifiers[message.inResponseToIdentifier];
241
+ const descriptorsForKey = this.messageDescriptors[descriptorKey] || [];
242
+ const responseDataHash = message.messageDataHash;
243
+ if (!message.keepWaitingForResponses) {
244
+ delete this.keysForIdentifiers[message.inResponseToIdentifier];
245
+ delete this.messageDescriptors[descriptorKey];
246
+ }
247
+ const callCompletionFunction = (descriptor, storedResponseCondition = import_uicore_ts.NO) => {
248
+ var messageData = message.messageData;
249
+ if (message.useStoredResponse && storedResponseCondition) {
250
+ messageData = this.storedResponseForKey(descriptor.key, descriptor.messageDataHash);
251
+ const responseHash = this.storedResponseHashObjectForKey(
252
+ descriptor.key,
253
+ descriptor.messageDataHash
254
+ ).hash;
255
+ const localStorageKey = this.keyForRequestKeyAndRequestDataHash(
256
+ descriptor.key,
257
+ descriptor.messageDataHash
258
+ );
259
+ if (message.responseValidityDuration && this.storedResponseHashesDictionary[localStorageKey]) {
260
+ this.storedResponseHashesDictionary[localStorageKey].validityDate = Date.now() + message.responseValidityDuration;
261
+ this.saveStoredResponseHashesDictionary(this.storedResponseHashesDictionary);
262
+ }
263
+ this._verifiedResponseHashesDictionary[responseHash] = import_uicore_ts.YES;
264
+ console.log("Using stored response.");
265
+ }
266
+ descriptor.completionFunction(messageData, sendResponseFunction);
267
+ descriptor.responseDataHash = responseDataHash;
268
+ };
269
+ descriptorsForKey.copy().forEach(function(descriptor, index, array) {
270
+ if (descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.directOnly && descriptor.message.identifier == message.inResponseToIdentifier || descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.first || descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.firstOnly || descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.storedOrFirst) {
271
+ if (!message.keepWaitingForResponses) {
272
+ this.storeResponse(descriptor.key, descriptor.messageDataHash, message, responseDataHash);
273
+ descriptorsForKey.removeElement(descriptor);
274
+ sendResponseFunction.respondingToMainResponse = import_uicore_ts.YES;
275
+ }
276
+ callCompletionFunction(descriptor, !message.keepWaitingForResponses);
277
+ } else if (descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.all) {
278
+ callCompletionFunction(descriptor, !message.keepWaitingForResponses);
279
+ if (!message.keepWaitingForResponses) {
280
+ if (message.inResponseToIdentifier == descriptor.message.identifier) {
281
+ sendResponseFunction.respondingToMainResponse = import_uicore_ts.YES;
282
+ descriptor.mainResponseReceived = import_uicore_ts.YES;
283
+ descriptorsForKey.removeElement(descriptor);
284
+ }
285
+ descriptor.anyMainResponseReceived = import_uicore_ts.YES;
286
+ }
287
+ } else if (descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.allDifferent) {
288
+ if (descriptor.responseDataHash != responseDataHash) {
289
+ callCompletionFunction(descriptor, !message.keepWaitingForResponses);
290
+ }
291
+ if (!message.keepWaitingForResponses) {
292
+ if (message.inResponseToIdentifier == descriptor.message.identifier) {
293
+ sendResponseFunction.respondingToMainResponse = import_uicore_ts.YES;
294
+ descriptor.mainResponseReceived = import_uicore_ts.YES;
295
+ descriptorsForKey.removeElement(descriptor);
296
+ }
297
+ descriptor.anyMainResponseReceived = import_uicore_ts.YES;
298
+ }
299
+ } else if (descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.last && descriptor.message.identifier == message.inResponseToIdentifier) {
300
+ if (!message.keepWaitingForResponses) {
301
+ descriptor.mainResponseReceived = import_uicore_ts.YES;
302
+ descriptor.anyMainResponseReceived = import_uicore_ts.YES;
303
+ sendResponseFunction.respondingToMainResponse = import_uicore_ts.YES;
304
+ } else {
305
+ descriptor.completionFunction(message.messageData, sendResponseFunction);
306
+ }
307
+ } else if (descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.firstAndLast || descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.firstAndLastIfDifferent) {
308
+ if (!message.keepWaitingForResponses) {
309
+ if (!descriptor.anyMainResponseReceived) {
310
+ callCompletionFunction(descriptor, !message.keepWaitingForResponses);
311
+ }
312
+ if (descriptor.message.identifier == message.inResponseToIdentifier) {
313
+ descriptor.mainResponseReceived = import_uicore_ts.YES;
314
+ sendResponseFunction.respondingToMainResponse = import_uicore_ts.YES;
315
+ }
316
+ descriptor.anyMainResponseReceived = import_uicore_ts.YES;
317
+ } else if (descriptor.message.identifier == message.inResponseToIdentifier && message.keepWaitingForResponses) {
318
+ descriptor.completionFunction(message.messageData, sendResponseFunction);
319
+ }
320
+ }
321
+ }.bind(this));
322
+ const allResponsesReceived = descriptorsForKey.allMatch(function(descriptorObject, index, array) {
323
+ return descriptorObject.mainResponseReceived;
324
+ });
325
+ descriptorsForKey.copy().forEach(function(descriptor, index, array) {
326
+ if ((descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.last || descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.firstAndLast) && allResponsesReceived && !message.keepWaitingForResponses) {
327
+ callCompletionFunction(descriptor, !message.keepWaitingForResponses);
328
+ descriptorsForKey.removeElement(descriptor);
329
+ } else if (descriptor.completionPolicy == import_CBSocketClient.CBSocketClient.completionPolicy.firstAndLastIfDifferent && allResponsesReceived && !message.keepWaitingForResponses) {
330
+ if (descriptor.responseDataHash != responseDataHash) {
331
+ callCompletionFunction(descriptor, !message.keepWaitingForResponses);
332
+ }
333
+ descriptorsForKey.removeElement(descriptor);
334
+ }
335
+ }.bind(this));
336
+ }
337
+ }
338
+ }
339
+ // Annotate the CommonJS export names for ESM import in node:
340
+ 0 && (module.exports = {
341
+ CBSocketCallbackHolder
342
+ });
343
+ //# sourceMappingURL=CBSocketCallbackHolder.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../scripts/CBSocketCallbackHolder.ts"],
4
+ "sourcesContent": ["import objectHash from \"object-hash\"\nimport { FIRST, IS, IS_NOT, nil, NO, UIObject, YES } from \"../../uicore-ts\"\nimport {\n CBSocketMessage,\n CBSocketMessageCompletionFunction,\n CBSocketMessageHandlerFunction, CBSocketMessageSendResponseFunction, CBSocketMultipleMessage,\n CBSocketMultipleMessagecompletionFunction, CBSocketMultipleMessageObject\n} from \"./CBDataInterfaces\"\nimport { CBSocketClient } from \"./CBSocketClient\"\n\n\n\n\n\ninterface CBSocketCallbackHolderMessageDescriptor {\n \n key: string;\n message: {\n identifier: string;\n inResponseToIdentifier?: string;\n keepWaitingForResponses?: boolean;\n }\n \n \n sentAtTime: number;\n \n //completionTriggered: boolean;\n \n messageDataHash: string;\n \n responseDataHash?: string;\n \n mainResponseReceived: boolean;\n \n anyMainResponseReceived: boolean;\n \n completionPolicy: string;\n completionFunction: CBSocketMessageCompletionFunction;\n \n}\n\n\ninterface CBSocketCallbackHolderStoredResponseObject {\n \n messageKey: string;\n messageData: any;\n messageDataHash: string;\n \n}\n\n\n\n\nexport class CBSocketCallbackHolder extends UIObject {\n \n messageDescriptors: {\n \n [x: string]: CBSocketCallbackHolderMessageDescriptor[]\n \n } = {}\n \n handlers: {\n [x: string]: CBSocketMessageHandlerFunction[]\n } = {}\n \n onetimeHandlers: {\n [x: string]: CBSocketMessageHandlerFunction[]\n } = {}\n \n keysForIdentifiers: {\n \n [x: string]: string\n \n } = {}\n \n \n isValid = YES\n _storeableResponseKeys: string[]\n _storedResponseHashesDictionary: {\n \n [x: string]: {\n \n hash: string,\n validityDate: number\n \n }\n \n }\n _verifiedResponseHashesDictionary: {\n \n [x: string]: boolean\n \n } = {}\n \n _socketClient: CBSocketClient\n \n \n \n \n \n constructor(socketClient: CBSocketClient, previousCallbackHolder?: CBSocketCallbackHolder) {\n \n super()\n \n \n this._socketClient = socketClient\n \n if (IS(previousCallbackHolder)) {\n \n this.handlers = previousCallbackHolder.handlers\n this._verifiedResponseHashesDictionary = previousCallbackHolder._verifiedResponseHashesDictionary\n \n }\n \n \n \n \n \n }\n \n \n \n \n \n triggerDisconnectHandlers() {\n \n this.messageDescriptors.forEach(function (descriptor: CBSocketCallbackHolderMessageDescriptor, key: string) {\n \n if (descriptor.mainResponseReceived) {\n \n descriptor.completionFunction(CBSocketClient.disconnectionMessage, nil)\n \n }\n \n })\n \n }\n \n \n \n \n \n registerHandler(key: string, handlerFunction: CBSocketMessageHandlerFunction) {\n \n \n if (!this.handlers[key]) {\n \n this.handlers[key] = []\n \n }\n \n this.handlers[key].push(handlerFunction)\n \n \n \n }\n \n registerOnetimeHandler(key: string, handlerFunction: CBSocketMessageHandlerFunction) {\n \n \n if (!this.onetimeHandlers[key]) {\n \n this.onetimeHandlers[key] = []\n \n }\n \n this.onetimeHandlers[key].push(handlerFunction)\n \n \n \n }\n \n \n \n \n \n get storedResponseHashesDictionary() {\n \n if (IS_NOT(this._storedResponseHashesDictionary)) {\n \n this._storedResponseHashesDictionary = JSON.parse(localStorage[\"CBSocketResponseHashesDictionary\"] || \"{}\")\n \n }\n \n return this._storedResponseHashesDictionary\n \n }\n \n storedResponseHashObjectForKey(requestKey: string, requestDataHash: string) {\n \n const localStorageKey = this.keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash)\n \n const hashObject = this.storedResponseHashesDictionary[localStorageKey]\n \n const result = FIRST(hashObject, {} as any)\n \n \n \n return result\n \n }\n \n storedResponseForKey(requestKey: string, requestDataHash: string) {\n \n const localStorageKey = this.keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash)\n \n const storedObject = JSON.parse(localStorage[localStorageKey] || \"{}\")\n \n return storedObject.responseMessageData\n \n }\n \n keyForRequestKeyAndRequestDataHash(requestKey: string, requestDataHash: string) {\n \n const result = \"_CBSCH_LS_key_\" + requestKey + \"_\" + requestDataHash\n \n return result\n \n }\n \n storeResponse(\n requestKey: string,\n requestDataHash: string,\n responseMessage: CBSocketMessage<any>,\n responseDataHash: string\n ) {\n \n \n if (!responseMessage.canBeStoredAsResponse ||\n (IS_NOT(responseMessage.messageData) && IS_NOT(responseMessage.messageDataHash))) {\n \n return\n \n }\n \n \n const localStorageKey = this.keyForRequestKeyAndRequestDataHash(requestKey, requestDataHash)\n \n \n var validityDate: number\n \n if (responseMessage.responseValidityDuration) {\n \n validityDate = Date.now() + responseMessage.responseValidityDuration\n \n }\n \n const storedResponseHashesDictionary = this.storedResponseHashesDictionary\n storedResponseHashesDictionary[localStorageKey] = {\n \n hash: responseDataHash,\n validityDate: validityDate\n \n }\n \n this.saveInLocalStorage(localStorageKey, {\n \n responseMessageData: responseMessage.messageData,\n responseHash: responseDataHash\n \n })\n \n \n this.saveStoredResponseHashesDictionary(storedResponseHashesDictionary)\n \n }\n \n \n \n \n \n private saveStoredResponseHashesDictionary(storedResponseHashesDictionary: { [x: string]: { hash: string; validityDate: number; }; }) {\n \n this.saveInLocalStorage(\"CBSocketResponseHashesDictionary\", storedResponseHashesDictionary)\n \n }\n \n saveInLocalStorage(key: string, object: any) {\n \n \n const stringToSave = JSON.stringify(object)\n \n if (stringToSave != localStorage[key]) {\n \n localStorage[key] = stringToSave\n \n }\n \n \n }\n \n \n \n \n \n socketShouldSendMessage(\n key: string,\n message: CBSocketMessage<any>,\n completionPolicy: string,\n completionFunction: CBSocketMessageCompletionFunction\n ) {\n \n \n \n var result = YES\n \n var triggerStoredResponseImmediately = NO\n \n \n const messageDataHash = objectHash(message.messageData || nil)\n \n const descriptorKey = \"socketMessageDescriptor_\" + key + messageDataHash\n \n this.messageDescriptors[descriptorKey] = (this.messageDescriptors[descriptorKey] || [])\n \n \n const hashObject = this.storedResponseHashObjectForKey(key, messageDataHash)\n message.storedResponseHash = hashObject.hash\n \n \n \n if (completionPolicy == CBSocketClient.completionPolicy.first) {\n \n const descriptorsForKey = (this.messageDescriptors[descriptorKey] || [])\n \n const matchingDescriptor = descriptorsForKey.find(function (descriptor, index, array) {\n return (descriptor.messageDataHash == messageDataHash)\n })\n \n if (matchingDescriptor) {\n \n result = NO\n \n }\n \n }\n \n if (completionPolicy == CBSocketClient.completionPolicy.storedOrFirst) {\n \n const descriptorsForKey = (this.messageDescriptors[descriptorKey] || [])\n \n const matchingDescriptor = descriptorsForKey.find(function (descriptor, index, array) {\n return (descriptor.messageDataHash == messageDataHash)\n })\n \n const storedResponse = IS(message.storedResponseHash)\n \n if (matchingDescriptor ||\n (storedResponse && this._verifiedResponseHashesDictionary[message.storedResponseHash])) {\n \n result = NO\n \n triggerStoredResponseImmediately = YES\n \n }\n \n }\n \n if (completionPolicy == CBSocketClient.completionPolicy.firstOnly) {\n \n const descriptorsForKey = (this.messageDescriptors[descriptorKey] || [])\n \n const matchingDescriptor = descriptorsForKey.find(function (descriptor, index, array) {\n return (descriptor.messageDataHash == messageDataHash)\n })\n \n if (matchingDescriptor) {\n \n return NO\n \n }\n \n }\n \n \n if (hashObject && hashObject.hash && hashObject.validityDate && message.storedResponseHash &&\n this._verifiedResponseHashesDictionary[message.storedResponseHash] && hashObject.validityDate >\n Date.now()) {\n \n result = NO\n \n triggerStoredResponseImmediately = YES\n \n }\n \n \n if (IS(completionFunction)) {\n \n this.messageDescriptors[descriptorKey].push({\n \n key: key,\n message: {\n \n identifier: message.identifier,\n inResponseToIdentifier: message.inResponseToIdentifier,\n keepWaitingForResponses: message.keepWaitingForResponses\n \n },\n \n sentAtTime: Date.now(),\n \n //completionTriggered: NO,\n \n \n messageDataHash: messageDataHash,\n \n mainResponseReceived: NO,\n anyMainResponseReceived: NO,\n \n \n completionPolicy: completionPolicy,\n completionFunction: completionFunction\n \n })\n \n this.keysForIdentifiers[message.identifier] = descriptorKey\n \n }\n \n \n if (triggerStoredResponseImmediately) {\n \n this.socketDidReceiveMessageForKey(\n CBSocketClient.responseMessageKey,\n {\n \n identifier: nil,\n messageData: nil,\n \n inResponseToIdentifier: message.identifier,\n \n useStoredResponse: YES\n \n },\n nil\n )\n \n }\n \n \n return result\n \n \n }\n \n \n \n \n \n static defaultMultipleMessagecompletionFunction(responseMessages: any[], callcompletionFunctions: () => void) {\n callcompletionFunctions()\n }\n \n \n socketWillSendMultipleMessage(\n messageToSend: CBSocketMultipleMessage,\n completionFunction: CBSocketMultipleMessagecompletionFunction = CBSocketCallbackHolder.defaultMultipleMessagecompletionFunction\n ) {\n \n \n \n const key = CBSocketClient.multipleMessageKey\n \n \n const messageDataHash = objectHash(messageToSend.messageData || nil)\n \n const descriptorKey = \"socketMessageDescriptor_\" + key + messageDataHash\n \n this.messageDescriptors[descriptorKey] = (this.messageDescriptors[descriptorKey] || [])\n \n \n messageToSend.storedResponseHash = this.storedResponseHashObjectForKey(key, messageDataHash).hash\n \n \n \n \n \n this.messageDescriptors[descriptorKey].push({\n \n key: key,\n message: {\n \n identifier: messageToSend.identifier,\n inResponseToIdentifier: messageToSend.inResponseToIdentifier,\n keepWaitingForResponses: messageToSend.keepWaitingForResponses\n \n },\n \n sentAtTime: Date.now(),\n \n //completionTriggered: NO,\n \n \n messageDataHash: messageDataHash,\n \n mainResponseReceived: NO,\n anyMainResponseReceived: NO,\n \n \n completionPolicy: CBSocketClient.completionPolicy.directOnly,\n completionFunction: function (\n this: CBSocketCallbackHolder,\n responseMessage: CBSocketMultipleMessageObject[],\n respondWithMessage\n ) {\n \n completionFunction(\n responseMessage.map(function (messageObject, index, array) {\n \n return messageObject.message.messageData\n \n }),\n function (this: CBSocketCallbackHolder) {\n \n //console.log(\"Received multiple message response with length of \" + responseMessage.length + \".\");\n \n // Call all completion functions\n responseMessage.forEach(function (\n this: CBSocketCallbackHolder,\n messageObject: CBSocketMultipleMessageObject,\n index: number,\n array: CBSocketMultipleMessageObject[]\n ) {\n \n this._socketClient.didReceiveMessageForKey(messageObject.key, messageObject.message)\n \n }.bind(this))\n \n }.bind(this)\n )\n \n }.bind(this)\n \n })\n \n this.keysForIdentifiers[messageToSend.identifier] = descriptorKey\n \n \n }\n \n \n \n \n \n socketDidReceiveMessageForKey(\n key: string,\n message: CBSocketMessage<any>,\n sendResponseFunction: CBSocketMessageSendResponseFunction\n ) {\n \n \n if (!this.isValid) {\n \n return\n \n }\n \n \n // Call static handlers\n if (this.handlers[key]) {\n \n this.handlers[key].forEach(function (\n this: CBSocketCallbackHolder,\n handler: CBSocketMessageHandlerFunction,\n index,\n array\n ) {\n \n handler(message.messageData, sendResponseFunction)\n \n }.bind(this))\n \n }\n \n if (this.onetimeHandlers[key]) {\n \n this.onetimeHandlers[key].forEach(function (\n this: CBSocketCallbackHolder,\n handler: CBSocketMessageHandlerFunction,\n index,\n array\n ) {\n \n handler(message.messageData, sendResponseFunction)\n \n }.bind(this))\n \n delete this.onetimeHandlers[key]\n \n }\n \n \n \n // Temporary response handlers are evaluated here\n if (message.inResponseToIdentifier &&\n (CBSocketClient.responseMessageKey == key || CBSocketClient.multipleMessageKey == key)) {\n \n // Find descriptors for the key of the message that is being responded to\n const descriptorKey = this.keysForIdentifiers[message.inResponseToIdentifier]\n const descriptorsForKey = (this.messageDescriptors[descriptorKey] || [])\n \n // Find response data hash to check for differences\n const responseDataHash = message.messageDataHash\n \n // Remove identifier from dictionary\n if (!message.keepWaitingForResponses) {\n \n delete this.keysForIdentifiers[message.inResponseToIdentifier]\n \n delete this.messageDescriptors[descriptorKey]\n \n }\n \n \n // Function to call completion function\n const callCompletionFunction = (descriptor, storedResponseCondition = NO) => {\n \n var messageData = message.messageData\n \n if (message.useStoredResponse && storedResponseCondition) {\n \n messageData = this.storedResponseForKey(descriptor.key, descriptor.messageDataHash)\n \n const responseHash = this.storedResponseHashObjectForKey(\n descriptor.key,\n descriptor.messageDataHash\n ).hash\n \n const localStorageKey = this.keyForRequestKeyAndRequestDataHash(\n descriptor.key,\n descriptor.messageDataHash\n )\n \n if (message.responseValidityDuration && this.storedResponseHashesDictionary[localStorageKey]) {\n \n this.storedResponseHashesDictionary[localStorageKey].validityDate = Date.now() +\n message.responseValidityDuration\n \n this.saveStoredResponseHashesDictionary(this.storedResponseHashesDictionary)\n \n }\n \n this._verifiedResponseHashesDictionary[responseHash] = YES\n \n console.log(\"Using stored response.\")\n \n }\n \n // Call completionFunction and set response data hash\n descriptor.completionFunction(messageData, sendResponseFunction)\n descriptor.responseDataHash = responseDataHash\n \n }\n \n \n descriptorsForKey.copy().forEach(function (\n this: CBSocketCallbackHolder,\n descriptor: CBSocketCallbackHolderMessageDescriptor,\n index: number,\n array: CBSocketCallbackHolderMessageDescriptor[]\n ) {\n \n \n if ((descriptor.completionPolicy == CBSocketClient.completionPolicy.directOnly &&\n descriptor.message.identifier == message.inResponseToIdentifier) || descriptor.completionPolicy ==\n CBSocketClient.completionPolicy.first || descriptor.completionPolicy ==\n CBSocketClient.completionPolicy.firstOnly || descriptor.completionPolicy ==\n CBSocketClient.completionPolicy.storedOrFirst) {\n \n // Calling completion function and removing descriptor\n \n if (!message.keepWaitingForResponses) {\n \n this.storeResponse(descriptor.key, descriptor.messageDataHash, message, responseDataHash)\n \n descriptorsForKey.removeElement(descriptor)\n \n sendResponseFunction.respondingToMainResponse = YES\n \n }\n \n callCompletionFunction(descriptor, !message.keepWaitingForResponses)\n \n }\n else if (descriptor.completionPolicy == CBSocketClient.completionPolicy.all) {\n \n // Calling completion function\n callCompletionFunction(descriptor, !message.keepWaitingForResponses)\n \n // Marking descriptor as having been responded to\n if (!message.keepWaitingForResponses) {\n \n if (message.inResponseToIdentifier == descriptor.message.identifier) {\n \n sendResponseFunction.respondingToMainResponse = YES\n descriptor.mainResponseReceived = YES\n descriptorsForKey.removeElement(descriptor)\n \n }\n \n descriptor.anyMainResponseReceived = YES\n \n }\n \n \n \n }\n else if (descriptor.completionPolicy == CBSocketClient.completionPolicy.allDifferent) {\n \n // Calling completionFunction if messageData is different from previous\n if (descriptor.responseDataHash != responseDataHash) {\n \n callCompletionFunction(descriptor, !message.keepWaitingForResponses)\n \n }\n \n // Marking descriptor as having been responded to\n if (!message.keepWaitingForResponses) {\n \n if (message.inResponseToIdentifier == descriptor.message.identifier) {\n \n sendResponseFunction.respondingToMainResponse = YES\n descriptor.mainResponseReceived = YES\n descriptorsForKey.removeElement(descriptor)\n \n }\n \n descriptor.anyMainResponseReceived = YES\n \n }\n \n }\n else if (descriptor.completionPolicy == CBSocketClient.completionPolicy.last &&\n descriptor.message.identifier == message.inResponseToIdentifier) {\n \n if (!message.keepWaitingForResponses) {\n \n // Marking descriptor as having been responded to\n descriptor.mainResponseReceived = YES\n descriptor.anyMainResponseReceived = YES\n \n sendResponseFunction.respondingToMainResponse = YES\n \n }\n else {\n \n descriptor.completionFunction(message.messageData, sendResponseFunction)\n \n }\n \n }\n else if (descriptor.completionPolicy == CBSocketClient.completionPolicy.firstAndLast ||\n descriptor.completionPolicy == CBSocketClient.completionPolicy.firstAndLastIfDifferent) {\n \n if (!message.keepWaitingForResponses) {\n \n // Only calling completionFunction once as a first response call\n if (!descriptor.anyMainResponseReceived) {\n \n callCompletionFunction(descriptor, !message.keepWaitingForResponses)\n \n }\n \n // Marking descriptor as having been responded to\n if (descriptor.message.identifier == message.inResponseToIdentifier) {\n \n descriptor.mainResponseReceived = YES\n sendResponseFunction.respondingToMainResponse = YES\n \n }\n \n descriptor.anyMainResponseReceived = YES\n \n }\n else if (descriptor.message.identifier == message.inResponseToIdentifier &&\n message.keepWaitingForResponses) {\n \n descriptor.completionFunction(message.messageData, sendResponseFunction)\n \n }\n \n }\n \n }.bind(this))\n \n \n \n \n \n // Last message completion policies\n \n const allResponsesReceived = descriptorsForKey.allMatch(function (descriptorObject, index, array) {\n return descriptorObject.mainResponseReceived\n })\n \n descriptorsForKey.copy().forEach(function (\n this: CBSocketCallbackHolder,\n descriptor: CBSocketCallbackHolderMessageDescriptor,\n index: number,\n array: CBSocketCallbackHolderMessageDescriptor[]\n ) {\n \n if ((descriptor.completionPolicy == CBSocketClient.completionPolicy.last ||\n descriptor.completionPolicy == CBSocketClient.completionPolicy.firstAndLast) &&\n allResponsesReceived && !message.keepWaitingForResponses) {\n \n // Calling completionFunction\n callCompletionFunction(descriptor, !message.keepWaitingForResponses)\n \n // Cleaning up\n descriptorsForKey.removeElement(descriptor)\n \n }\n else if (descriptor.completionPolicy == CBSocketClient.completionPolicy.firstAndLastIfDifferent &&\n allResponsesReceived && !message.keepWaitingForResponses) {\n \n // Calling completionFunction if needed\n if (descriptor.responseDataHash != responseDataHash) {\n \n callCompletionFunction(descriptor, !message.keepWaitingForResponses)\n \n }\n \n // Cleaning up\n descriptorsForKey.removeElement(descriptor)\n \n }\n \n }.bind(this))\n \n \n }\n \n \n \n \n \n }\n \n \n \n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
5
+ "mappings": "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",
6
+ "names": ["objectHash"]
7
+ }
@@ -0,0 +1,70 @@
1
+ import { Socket } from "socket.io-client";
2
+ import { UIObject } from "../../uicore-ts";
3
+ import { CBCore } from "./CBCore";
4
+ import { CBSocketMessage, CBSocketMessageCompletionFunction, CBSocketMessageHandlerFunction, CBSocketMessageSendResponseFunction, CBSocketMultipleMessagecompletionFunction, SocketClientInterface } from "./CBDataInterfaces";
5
+ import { CBSocketCallbackHolder } from "./CBSocketCallbackHolder";
6
+ declare interface CBSocketClientMessageToBeSent {
7
+ key: string;
8
+ message: any;
9
+ inResponseToMessage: CBSocketMessage<any>;
10
+ keepWaitingForResponses: boolean;
11
+ isBoundToUserWithID: string;
12
+ completionPolicy: string;
13
+ didSendFunction?: () => void;
14
+ completion: CBSocketMessageCompletionFunction;
15
+ }
16
+ declare interface CBSocketClientErrorMessage {
17
+ _isCBSocketErrorMessage: boolean;
18
+ messageData: any;
19
+ }
20
+ export declare function IS_SOCKET_ERROR(object: any): object is CBSocketClientErrorMessage;
21
+ export declare function IS_NOT_SOCKET_ERROR(object: any): boolean;
22
+ export declare class CBSocketClient extends UIObject {
23
+ _socket: Socket;
24
+ _isConnectionEstablished: boolean;
25
+ _collectMessagesToSendLater: boolean;
26
+ _messagesToBeSent: CBSocketClientMessageToBeSent[];
27
+ static _sharedInstance: CBSocketClient;
28
+ _core: CBCore;
29
+ _subscribedKeys: {
30
+ [x: string]: boolean;
31
+ };
32
+ _callbackHolder: CBSocketCallbackHolder;
33
+ static responseMessageKey: string;
34
+ static multipleMessageKey: string;
35
+ static disconnectionMessage: CBSocketClientErrorMessage;
36
+ constructor(core: CBCore);
37
+ get socket(): Socket<import("@socket.io/component-emitter").DefaultEventsMap, import("@socket.io/component-emitter").DefaultEventsMap>;
38
+ cancelUnsentMessages(messagesToCancel: CBSocketClientMessageToBeSent[]): void;
39
+ sendUnsentMessages(receiveResponsesTogether?: boolean, completion?: CBSocketMultipleMessagecompletionFunction): void;
40
+ static completionPolicy: {
41
+ all: string;
42
+ allDifferent: string;
43
+ first: string;
44
+ last: string;
45
+ firstAndLast: string;
46
+ firstAndLastIfDifferent: string;
47
+ directOnly: string;
48
+ firstOnly: string;
49
+ storedOrFirst: string;
50
+ };
51
+ sendUserBoundMessageForKeyWithPolicy(key: keyof SocketClientInterface, message: any, completionPolicy: keyof typeof CBSocketClient.completionPolicy, completion?: CBSocketMessageCompletionFunction): void;
52
+ sendUserBoundMessageForKey(key: keyof SocketClientInterface, message: any, completion?: CBSocketMessageCompletionFunction): void;
53
+ sendMessageForKeyWithPolicy(key: keyof SocketClientInterface, message: any, completionPolicy: keyof typeof CBSocketClient.completionPolicy, completion?: CBSocketMessageCompletionFunction): void;
54
+ sendMessageForKey(key: keyof SocketClientInterface, message: any, completion?: CBSocketMessageCompletionFunction): void;
55
+ resultForMessageForKey(key: keyof SocketClientInterface, message: any, completionPolicy?: keyof typeof CBSocketClient.completionPolicy, isUserBound?: boolean): Promise<{
56
+ responseMessage: any;
57
+ result: any;
58
+ errorResult: any;
59
+ respondWithMessage: CBSocketMessageSendResponseFunction;
60
+ }>;
61
+ _sendMessageForKey(key: string, message: any, inResponseToMessage?: CBSocketMessage<any>, keepMessageConnectionOpen?: boolean, completionPolicy?: string, isUserBound?: boolean, didSendFunction?: () => void, completion?: CBSocketMessageCompletionFunction): CBSocketClientMessageToBeSent;
62
+ sendMessagesAsGroup<FunctionReturnType extends object>(functionToCall: () => FunctionReturnType): FunctionReturnType;
63
+ sendAndReceiveMessagesAsGroup<FunctionReturnType extends object>(functionToCall: () => FunctionReturnType, completion?: CBSocketMultipleMessagecompletionFunction): FunctionReturnType;
64
+ didReceiveMessageForKey(key: string, message: CBSocketMessage<any>): void;
65
+ addTargetForMessagesForKeys(keys: string[], handlerFunction: CBSocketMessageHandlerFunction): void;
66
+ addTargetForMessagesForKey(key: string, handlerFunction: CBSocketMessageHandlerFunction): void;
67
+ addTargetForOneMessageForKey(key: string, handlerFunction: CBSocketMessageHandlerFunction): void;
68
+ }
69
+ export declare const SocketClient: SocketClientInterface;
70
+ export {};