@based/server 6.3.0 → 6.4.1

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 (216) hide show
  1. package/dist/channel/start.js +1 -1
  2. package/dist/channel/start.js.map +1 -1
  3. package/dist/incoming/http/function.js +40 -0
  4. package/dist/incoming/http/function.js.map +1 -1
  5. package/dist/incoming/http/index.js +3 -0
  6. package/dist/incoming/http/index.js.map +1 -1
  7. package/dist/incoming/upgrade.js +2 -0
  8. package/dist/incoming/upgrade.js.map +1 -1
  9. package/dist/incoming/ws/function.js +1 -1
  10. package/dist/incoming/ws/function.js.map +1 -1
  11. package/dist/query/start/index.js +1 -1
  12. package/dist/query/start/index.js.map +1 -1
  13. package/dist/query/start/relay.d.ts +4 -1
  14. package/dist/query/start/relay.js +2 -2
  15. package/dist/query/start/relay.js.map +1 -1
  16. package/dist/security.js +1 -0
  17. package/dist/security.js.map +1 -1
  18. package/package.json +1 -1
  19. package/dist/BasedServerClient.d.ts +0 -71
  20. package/dist/BasedServerClient.js +0 -390
  21. package/dist/BasedServerClient.js.map +0 -1
  22. package/dist/Client.d.ts +0 -75
  23. package/dist/Client.js +0 -277
  24. package/dist/Client.js.map +0 -1
  25. package/dist/Params.d.ts +0 -20
  26. package/dist/Params.js +0 -48
  27. package/dist/Params.js.map +0 -1
  28. package/dist/closeListener.d.ts +0 -4
  29. package/dist/closeListener.js +0 -13
  30. package/dist/closeListener.js.map +0 -1
  31. package/dist/createSimpleServer.d.ts +0 -34
  32. package/dist/createSimpleServer.js +0 -209
  33. package/dist/createSimpleServer.js.map +0 -1
  34. package/dist/findPrefix.d.ts +0 -3
  35. package/dist/findPrefix.js +0 -20
  36. package/dist/findPrefix.js.map +0 -1
  37. package/dist/getFromConfig.d.ts +0 -3
  38. package/dist/getFromConfig.js +0 -50
  39. package/dist/getFromConfig.js.map +0 -1
  40. package/dist/handlers/authorize.d.ts +0 -5
  41. package/dist/handlers/authorize.js +0 -196
  42. package/dist/handlers/authorize.js.map +0 -1
  43. package/dist/handlers/bulkUpdate/index.d.ts +0 -5
  44. package/dist/handlers/bulkUpdate/index.js +0 -26
  45. package/dist/handlers/bulkUpdate/index.js.map +0 -1
  46. package/dist/handlers/configuration/index.d.ts +0 -10
  47. package/dist/handlers/configuration/index.js +0 -74
  48. package/dist/handlers/configuration/index.js.map +0 -1
  49. package/dist/handlers/configuration/observable/index.d.ts +0 -46
  50. package/dist/handlers/configuration/observable/index.js +0 -277
  51. package/dist/handlers/configuration/observable/index.js.map +0 -1
  52. package/dist/handlers/configure/index.d.ts +0 -5
  53. package/dist/handlers/configure/index.js +0 -44
  54. package/dist/handlers/configure/index.js.map +0 -1
  55. package/dist/handlers/copy/index.d.ts +0 -8
  56. package/dist/handlers/copy/index.js +0 -135
  57. package/dist/handlers/copy/index.js.map +0 -1
  58. package/dist/handlers/delete/index.d.ts +0 -5
  59. package/dist/handlers/delete/index.js +0 -34
  60. package/dist/handlers/delete/index.js.map +0 -1
  61. package/dist/handlers/digest/index.d.ts +0 -5
  62. package/dist/handlers/digest/index.js +0 -23
  63. package/dist/handlers/digest/index.js.map +0 -1
  64. package/dist/handlers/functions/call.d.ts +0 -6
  65. package/dist/handlers/functions/call.js +0 -54
  66. package/dist/handlers/functions/call.js.map +0 -1
  67. package/dist/handlers/functions/observable/Observable.d.ts +0 -49
  68. package/dist/handlers/functions/observable/Observable.js +0 -290
  69. package/dist/handlers/functions/observable/Observable.js.map +0 -1
  70. package/dist/handlers/functions/observable/SharedObservable.d.ts +0 -45
  71. package/dist/handlers/functions/observable/SharedObservable.js +0 -291
  72. package/dist/handlers/functions/observable/SharedObservable.js.map +0 -1
  73. package/dist/handlers/functions/observable/index.d.ts +0 -14
  74. package/dist/handlers/functions/observable/index.js +0 -130
  75. package/dist/handlers/functions/observable/index.js.map +0 -1
  76. package/dist/handlers/get/index.d.ts +0 -5
  77. package/dist/handlers/get/index.js +0 -23
  78. package/dist/handlers/get/index.js.map +0 -1
  79. package/dist/handlers/getConfig/index.d.ts +0 -5
  80. package/dist/handlers/getConfig/index.js +0 -38
  81. package/dist/handlers/getConfig/index.js.map +0 -1
  82. package/dist/handlers/handleRequests.d.ts +0 -5
  83. package/dist/handlers/handleRequests.js +0 -78
  84. package/dist/handlers/handleRequests.js.map +0 -1
  85. package/dist/handlers/index.d.ts +0 -4
  86. package/dist/handlers/index.js +0 -49
  87. package/dist/handlers/index.js.map +0 -1
  88. package/dist/handlers/messageParser.d.ts +0 -5
  89. package/dist/handlers/messageParser.js +0 -122
  90. package/dist/handlers/messageParser.js.map +0 -1
  91. package/dist/handlers/removeField/index.d.ts +0 -5
  92. package/dist/handlers/removeField/index.js +0 -42
  93. package/dist/handlers/removeField/index.js.map +0 -1
  94. package/dist/handlers/removeType/index.d.ts +0 -5
  95. package/dist/handlers/removeType/index.js +0 -30
  96. package/dist/handlers/removeType/index.js.map +0 -1
  97. package/dist/handlers/rest/file/DataStream.d.ts +0 -7
  98. package/dist/handlers/rest/file/DataStream.js +0 -17
  99. package/dist/handlers/rest/file/DataStream.js.map +0 -1
  100. package/dist/handlers/rest/file/formStream.d.ts +0 -4
  101. package/dist/handlers/rest/file/formStream.js +0 -188
  102. package/dist/handlers/rest/file/formStream.js.map +0 -1
  103. package/dist/handlers/rest/file/getExtenstion.d.ts +0 -2
  104. package/dist/handlers/rest/file/getExtenstion.js +0 -22
  105. package/dist/handlers/rest/file/getExtenstion.js.map +0 -1
  106. package/dist/handlers/rest/file/index.d.ts +0 -4
  107. package/dist/handlers/rest/file/index.js +0 -53
  108. package/dist/handlers/rest/file/index.js.map +0 -1
  109. package/dist/handlers/rest/file/storeFile.d.ts +0 -6
  110. package/dist/handlers/rest/file/storeFile.js +0 -44
  111. package/dist/handlers/rest/file/storeFile.js.map +0 -1
  112. package/dist/handlers/rest/file/stream.d.ts +0 -5
  113. package/dist/handlers/rest/file/stream.js +0 -104
  114. package/dist/handlers/rest/file/stream.js.map +0 -1
  115. package/dist/handlers/rest/file/types.d.ts +0 -9
  116. package/dist/handlers/rest/file/types.js +0 -3
  117. package/dist/handlers/rest/file/types.js.map +0 -1
  118. package/dist/handlers/rest/getReqMessage.d.ts +0 -3
  119. package/dist/handlers/rest/getReqMessage.js +0 -92
  120. package/dist/handlers/rest/getReqMessage.js.map +0 -1
  121. package/dist/handlers/rest/index.d.ts +0 -4
  122. package/dist/handlers/rest/index.js +0 -121
  123. package/dist/handlers/rest/index.js.map +0 -1
  124. package/dist/handlers/rest/invalidReq.d.ts +0 -4
  125. package/dist/handlers/rest/invalidReq.js +0 -20
  126. package/dist/handlers/rest/invalidReq.js.map +0 -1
  127. package/dist/handlers/rest/parseResponse.d.ts +0 -6
  128. package/dist/handlers/rest/parseResponse.js +0 -230
  129. package/dist/handlers/rest/parseResponse.js.map +0 -1
  130. package/dist/handlers/rest/playground/index.d.ts +0 -5
  131. package/dist/handlers/rest/playground/index.js +0 -308
  132. package/dist/handlers/rest/playground/index.js.map +0 -1
  133. package/dist/handlers/rest/readBody.d.ts +0 -3
  134. package/dist/handlers/rest/readBody.js +0 -45
  135. package/dist/handlers/rest/readBody.js.map +0 -1
  136. package/dist/handlers/set/index.d.ts +0 -5
  137. package/dist/handlers/set/index.js +0 -20
  138. package/dist/handlers/set/index.js.map +0 -1
  139. package/dist/handlers/subscription/index.d.ts +0 -32
  140. package/dist/handlers/subscription/index.js +0 -223
  141. package/dist/handlers/subscription/index.js.map +0 -1
  142. package/dist/handlers/token.d.ts +0 -5
  143. package/dist/handlers/token.js +0 -122
  144. package/dist/handlers/token.js.map +0 -1
  145. package/dist/handlers/track/index.d.ts +0 -7
  146. package/dist/handlers/track/index.js +0 -102
  147. package/dist/handlers/track/index.js.map +0 -1
  148. package/dist/handlers/userAuth/index.d.ts +0 -5
  149. package/dist/handlers/userAuth/index.js +0 -78
  150. package/dist/handlers/userAuth/index.js.map +0 -1
  151. package/dist/incoming/ws/observable.d.ts +0 -7
  152. package/dist/incoming/ws/observable.js +0 -91
  153. package/dist/incoming/ws/observable.js.map +0 -1
  154. package/dist/observable/cleanup.d.ts +0 -2
  155. package/dist/observable/cleanup.js +0 -66
  156. package/dist/observable/cleanup.js.map +0 -1
  157. package/dist/observable/create.d.ts +0 -3
  158. package/dist/observable/create.js +0 -35
  159. package/dist/observable/create.js.map +0 -1
  160. package/dist/observable/destroy.d.ts +0 -4
  161. package/dist/observable/destroy.js +0 -47
  162. package/dist/observable/destroy.js.map +0 -1
  163. package/dist/observable/extendCache.d.ts +0 -2
  164. package/dist/observable/extendCache.js +0 -10
  165. package/dist/observable/extendCache.js.map +0 -1
  166. package/dist/observable/genObservableId.d.ts +0 -1
  167. package/dist/observable/genObservableId.js +0 -12
  168. package/dist/observable/genObservableId.js.map +0 -1
  169. package/dist/observable/get.d.ts +0 -4
  170. package/dist/observable/get.js +0 -15
  171. package/dist/observable/get.js.map +0 -1
  172. package/dist/observable/index.d.ts +0 -10
  173. package/dist/observable/index.js +0 -27
  174. package/dist/observable/index.js.map +0 -1
  175. package/dist/observable/send.d.ts +0 -5
  176. package/dist/observable/send.js +0 -26
  177. package/dist/observable/send.js.map +0 -1
  178. package/dist/observable/start/error.d.ts +0 -3
  179. package/dist/observable/start/error.js +0 -43
  180. package/dist/observable/start/error.js.map +0 -1
  181. package/dist/observable/start/index.d.ts +0 -2
  182. package/dist/observable/start/index.js +0 -67
  183. package/dist/observable/start/index.js.map +0 -1
  184. package/dist/observable/start/relay.d.ts +0 -4
  185. package/dist/observable/start/relay.js +0 -14
  186. package/dist/observable/start/relay.js.map +0 -1
  187. package/dist/observable/start/update.d.ts +0 -3
  188. package/dist/observable/start/update.js +0 -116
  189. package/dist/observable/start/update.js.map +0 -1
  190. package/dist/observable/subscribe.d.ts +0 -7
  191. package/dist/observable/subscribe.js +0 -47
  192. package/dist/observable/subscribe.js.map +0 -1
  193. package/dist/observable/types.d.ts +0 -25
  194. package/dist/observable/types.js +0 -3
  195. package/dist/observable/types.js.map +0 -1
  196. package/dist/observable/unsub.d.ts +0 -6
  197. package/dist/observable/unsub.js +0 -46
  198. package/dist/observable/unsub.js.map +0 -1
  199. package/dist/openListener.d.ts +0 -4
  200. package/dist/openListener.js +0 -13
  201. package/dist/openListener.js.map +0 -1
  202. package/dist/secrets.d.ts +0 -9
  203. package/dist/secrets.js +0 -150
  204. package/dist/secrets.js.map +0 -1
  205. package/dist/types.d.ts +0 -129
  206. package/dist/types.js +0 -17
  207. package/dist/types.js.map +0 -1
  208. package/dist/upgradeListener.d.ts +0 -4
  209. package/dist/upgradeListener.js +0 -47
  210. package/dist/upgradeListener.js.map +0 -1
  211. package/dist/workers/index.d.ts +0 -0
  212. package/dist/workers/index.js +0 -20
  213. package/dist/workers/index.js.map +0 -1
  214. package/dist/workers/workerCode.d.ts +0 -12
  215. package/dist/workers/workerCode.js +0 -46
  216. package/dist/workers/workerCode.js.map +0 -1
@@ -1,49 +0,0 @@
1
- /// <reference types="node" />
2
- import { BasedServer } from '../../..';
3
- import Client from '../../../Client';
4
- import { ObservableFunction, DataListener } from '../../../types';
5
- import { Params } from '../../../Params';
6
- declare type GenericObject = {
7
- [key: string]: any;
8
- };
9
- export declare class UserEmitter {
10
- constructor(params: Params, observable: FunctionObservable, checksum?: number, get?: 0 | 1 | 2 | 3, dataListener?: DataListener);
11
- dataListeners: Set<DataListener>;
12
- onData(fn: DataListener): void;
13
- removeDataListener(fn: DataListener): void;
14
- isClosed: boolean;
15
- checksum: number;
16
- lastDiff: [GenericObject, number];
17
- type: 0 | 1 | 2 | 3;
18
- params: Params;
19
- state: GenericObject;
20
- private observable;
21
- close: () => void;
22
- isInit: boolean;
23
- init(fn?: DataListener): void;
24
- update(data: GenericObject, version?: number): void;
25
- error(data: GenericObject, version?: number): void;
26
- destroy(): void;
27
- }
28
- export declare class FunctionObservable {
29
- server: BasedServer;
30
- removeTimer: NodeJS.Timeout;
31
- id: number;
32
- clients: {
33
- [id: string]: UserEmitter;
34
- };
35
- clientsCnt: number;
36
- payload: GenericObject;
37
- isClosed: boolean;
38
- functionDefinition: ObservableFunction;
39
- name: string;
40
- constructor(server: BasedServer, id: number, payload: GenericObject, functionDefinition: ObservableFunction, name: string);
41
- restart(): Promise<void>;
42
- unsubscribeDataListener(client: Client, fn: DataListener, id?: string): void;
43
- subscribeDataListener(client: Client, fn: DataListener, id?: string): void;
44
- destroyIfEmpty(): void;
45
- unsubscribe(client: Client): void;
46
- subscribe(client: Client, checksum?: number, get?: 0 | 1 | 2): void;
47
- sendData(client: Client): void;
48
- }
49
- export {};
@@ -1,290 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FunctionObservable = exports.UserEmitter = void 0;
4
- const client_1 = require("@based/client");
5
- const diff_1 = require("@saulx/diff");
6
- const utils_1 = require("@saulx/utils");
7
- const hash_1 = require("@saulx/hash");
8
- const Params_1 = require("../../../Params");
9
- const getFromConfig_1 = require("../../../getFromConfig");
10
- class UserEmitter {
11
- constructor(params, observable, checksum, get = 0, dataListener) {
12
- this.checksum = checksum;
13
- this.type = get;
14
- this.params = params;
15
- params.update = (d, v) => {
16
- try {
17
- this.update(d, v);
18
- }
19
- catch (err) {
20
- // log in the function
21
- console.error(err);
22
- }
23
- };
24
- this.observable = observable;
25
- this.init(dataListener);
26
- }
27
- onData(fn) {
28
- if (!this.dataListeners) {
29
- this.dataListeners = new Set();
30
- }
31
- this.dataListeners.add(fn);
32
- }
33
- removeDataListener(fn) {
34
- if (this.dataListeners) {
35
- this.dataListeners.delete(fn);
36
- if (this.dataListeners.size === 0) {
37
- delete this.dataListeners;
38
- if (this.type === 3) {
39
- this.destroy();
40
- }
41
- }
42
- }
43
- }
44
- init(fn) {
45
- this.isInit = true;
46
- this.observable.functionDefinition
47
- .function(this.params)
48
- .then((close) => {
49
- if (this.isClosed) {
50
- close();
51
- }
52
- else {
53
- this.close = close;
54
- }
55
- })
56
- .catch((err) => {
57
- const errObj = {
58
- type: err.name,
59
- name: `observable "${this.observable.name}"`,
60
- message: err.message,
61
- payload: this.observable.payload,
62
- auth: err.name === 'AuthorizationError',
63
- };
64
- if (fn) {
65
- fn(null, 0, errObj);
66
- }
67
- else {
68
- this.params.user.send([
69
- client_1.RequestTypes.Subscription,
70
- this.observable.id,
71
- {},
72
- 0,
73
- errObj,
74
- ]);
75
- }
76
- });
77
- }
78
- update(data, version) {
79
- if (typeof data !== 'object') {
80
- console.error('observables need to use objects as data type');
81
- }
82
- else {
83
- this.isInit = false;
84
- if (!version) {
85
- version = (0, hash_1.hashObjectIgnoreKeyOrder)(data);
86
- }
87
- let payload;
88
- if (this.state) {
89
- const s = this.state;
90
- const checksum = this.checksum;
91
- try {
92
- const diff = (0, diff_1.createPatch)(s, data);
93
- this.lastDiff = [diff, checksum];
94
- payload = [
95
- client_1.RequestTypes.SubscriptionDiff,
96
- this.observable.id,
97
- diff,
98
- [checksum, version],
99
- ];
100
- }
101
- catch (err) {
102
- console.error('cannot create patch', err);
103
- }
104
- }
105
- if (!payload) {
106
- if (this.lastDiff) {
107
- delete this.lastDiff;
108
- }
109
- payload = [client_1.RequestTypes.Subscription, this.observable.id, data, version];
110
- }
111
- this.state = (0, utils_1.deepCopy)(data || {});
112
- if (this.dataListeners) {
113
- this.dataListeners.forEach((fn) => {
114
- fn(this.state, this.checksum);
115
- });
116
- }
117
- if (this.type !== 3) {
118
- if (version !== this.checksum) {
119
- this.checksum = version;
120
- this.params.user.send(payload);
121
- if (this.type === 1) {
122
- this.observable.unsubscribe(this.params.user);
123
- }
124
- }
125
- else if (this.type) {
126
- this.checksum = version;
127
- this.params.user.send([
128
- client_1.RequestTypes.Subscription,
129
- this.observable.id,
130
- null,
131
- version,
132
- ]);
133
- if (this.type === 1) {
134
- this.observable.unsubscribe(this.params.user);
135
- }
136
- }
137
- }
138
- }
139
- }
140
- error(data, version) {
141
- console.info('error send it');
142
- }
143
- destroy() {
144
- delete this.observable.clients[this.params.user.id];
145
- delete this.params.user.subscriptions[this.observable.id];
146
- this.observable.clientsCnt--;
147
- if (this.close) {
148
- try {
149
- this.close();
150
- }
151
- catch (err) {
152
- console.error('Cannot close user defined observable');
153
- }
154
- }
155
- this.observable.destroyIfEmpty();
156
- // delete this.observable.server.subscriptions[this.observable.id]
157
- this.isClosed = true;
158
- }
159
- }
160
- exports.UserEmitter = UserEmitter;
161
- class FunctionObservable {
162
- constructor(server, id, payload, functionDefinition, name) {
163
- this.clients = {};
164
- this.clientsCnt = 0;
165
- this.id = id;
166
- this.functionDefinition = functionDefinition;
167
- server.subscriptions[id] = this;
168
- this.payload = payload;
169
- this.server = server;
170
- this.name = name;
171
- }
172
- async restart() {
173
- const functionDefinition = await (0, getFromConfig_1.getFunction)(this.server, this.name);
174
- if (functionDefinition) {
175
- for (const id in this.clients) {
176
- const emitter = this.clients[id];
177
- if (!emitter.isClosed) {
178
- if (emitter.close) {
179
- emitter.close();
180
- }
181
- emitter.init();
182
- }
183
- }
184
- }
185
- }
186
- unsubscribeDataListener(client, fn, id) {
187
- const userSub = this.clients[client.id];
188
- if (userSub) {
189
- userSub.removeDataListener(fn);
190
- }
191
- }
192
- subscribeDataListener(client, fn, id) {
193
- // console.info('go time', client, fn)
194
- const userSub = this.clients[client.id];
195
- if (userSub && !userSub.isClosed) {
196
- // yes attach
197
- userSub.onData(fn);
198
- }
199
- else {
200
- if (!client.subscriptions[this.id]) {
201
- client.subscriptions[this.id] = this;
202
- }
203
- const params = new Params_1.Params(this.server, this.payload, client, [
204
- id,
205
- this.name,
206
- ]);
207
- this.clients[client.id] = new UserEmitter(params, this, 0, 3, fn);
208
- this.clients[client.id].onData(fn);
209
- this.clientsCnt++;
210
- }
211
- }
212
- destroyIfEmpty() {
213
- if (this.clientsCnt === 0) {
214
- this.removeTimer = setTimeout(() => {
215
- delete this.server.subscriptions[this.id];
216
- this.isClosed = true;
217
- }, 10);
218
- }
219
- }
220
- unsubscribe(client) {
221
- if (this.clients[client.id]) {
222
- if (!this.clients[client.id].dataListeners) {
223
- this.clients[client.id].destroy();
224
- }
225
- else {
226
- this.clients[client.id].type = 3;
227
- }
228
- }
229
- }
230
- subscribe(client, checksum, get = 0) {
231
- if (!client.subscriptions) {
232
- client.subscriptions = {};
233
- }
234
- if (this.removeTimer) {
235
- clearTimeout(this.removeTimer);
236
- }
237
- const userSub = this.clients[client.id];
238
- // && !userSub.isInit -- maybe dont need this!
239
- if (userSub && !userSub.isClosed) {
240
- if (get === 1) {
241
- // this is wrong
242
- const payload = [
243
- client_1.RequestTypes.Subscription,
244
- this.id,
245
- userSub.state,
246
- userSub.checksum,
247
- ];
248
- client.send(payload);
249
- }
250
- else {
251
- if (userSub.type === 3) {
252
- userSub.type = get;
253
- }
254
- if (!client.subscriptions[this.id]) {
255
- client.subscriptions[this.id] = this;
256
- }
257
- if (get === 2) {
258
- const payload = [
259
- client_1.RequestTypes.Subscription,
260
- this.id,
261
- userSub.state,
262
- userSub.checksum,
263
- ];
264
- client.send(payload);
265
- }
266
- }
267
- }
268
- else {
269
- // add the params
270
- const params = new Params_1.Params(this.server, this.payload, client, [this.name]);
271
- this.clients[client.id] = new UserEmitter(params, this, checksum, get);
272
- client.subscriptions[this.id] = this;
273
- this.clientsCnt++;
274
- }
275
- }
276
- sendData(client) {
277
- const store = this.clients[client.id];
278
- if (store && store.state && store.checksum && !store.isInit) {
279
- const payload = [
280
- client_1.RequestTypes.Subscription,
281
- this.id,
282
- store.state,
283
- store.checksum,
284
- ];
285
- client.send(payload);
286
- }
287
- }
288
- }
289
- exports.FunctionObservable = FunctionObservable;
290
- //# sourceMappingURL=Observable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Observable.js","sourceRoot":"","sources":["../../../../src/handlers/functions/observable/Observable.ts"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- /// <reference types="node" />
2
- import { BasedServer } from '../../..';
3
- import Client from '../../../Client';
4
- import { ErrorObject } from '@based/client';
5
- import { DataListener, ObservableFunction } from '../../../types';
6
- import { Params } from '../../../Params';
7
- declare type GenericObject = {
8
- [key: string]: any;
9
- };
10
- export declare class SharedFunctionObservable {
11
- lastDiff: number;
12
- jsonDiffCache: string;
13
- jsonCache: string;
14
- server: BasedServer;
15
- removeTimer: NodeJS.Timeout;
16
- id: number;
17
- clients: {
18
- [id: string]: [Client, number, 0 | 1 | 2];
19
- };
20
- dataListenersCnt: number;
21
- dataListeners: {
22
- [id: string]: Set<DataListener>;
23
- };
24
- clientsCnt: number;
25
- errorState: ErrorObject;
26
- payload: GenericObject;
27
- state: GenericObject;
28
- checksum: number;
29
- close: () => void;
30
- isClosed: boolean;
31
- params: Params;
32
- name: string;
33
- constructor(server: BasedServer, id: number, payload: GenericObject, functionDefinition: ObservableFunction, name: string, client?: Client, // tmp
34
- fn?: DataListener);
35
- restart(): Promise<void>;
36
- update(data: GenericObject, version?: number): void;
37
- error(err: Error): void;
38
- destroyIfEmpty(): void;
39
- unsubscribe(client: Client): void;
40
- unsubscribeDataListener(client: Client | void, fn: DataListener, id?: string): void;
41
- subscribeDataListener(client: Client | void, fn: DataListener, id?: string): void;
42
- subscribe(client: Client, checksum?: number, get?: 0 | 1 | 2): void;
43
- sendData(client: Client): void;
44
- }
45
- export {};
@@ -1,291 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SharedFunctionObservable = void 0;
4
- const client_1 = require("@based/client");
5
- const utils_1 = require("@saulx/utils");
6
- const diff_1 = require("@saulx/diff");
7
- const Params_1 = require("../../../Params");
8
- const getFromConfig_1 = require("../../../getFromConfig");
9
- const hash_1 = require("@saulx/hash");
10
- class SharedFunctionObservable {
11
- constructor(server, id, payload, functionDefinition, name, client, // tmp
12
- fn) {
13
- // will store the close funciton in here unfortunately
14
- // handle abort of functions or something
15
- this.clients = {};
16
- this.dataListenersCnt = 0;
17
- this.clientsCnt = 0;
18
- this.id = id;
19
- server.subscriptions[id] = this;
20
- this.payload = payload;
21
- this.name = name;
22
- // shared never from a callstack...
23
- // update needs to be bound
24
- // can maybe extend the name thing here...
25
- this.params = new Params_1.Params(server, payload, null, [name], (val, version) => this.update(val, version));
26
- functionDefinition
27
- .function(this.params)
28
- .then((close) => {
29
- if (this.isClosed) {
30
- close();
31
- }
32
- else {
33
- this.close = close;
34
- }
35
- })
36
- .catch((err) => {
37
- const errObject = {
38
- type: err.name,
39
- name: `observable "${name}"`,
40
- message: err.message,
41
- payload,
42
- auth: err.name === 'AuthorizationError',
43
- };
44
- // console.error('Make observable error', this.name, err)
45
- if (fn) {
46
- fn(null, 0, errObject);
47
- }
48
- else if (client) {
49
- client.send([client_1.RequestTypes.Subscription, id, {}, 0, errObject]);
50
- }
51
- });
52
- this.server = server;
53
- }
54
- async restart() {
55
- if (this.isClosed) {
56
- return;
57
- }
58
- const functionDefinition = await (0, getFromConfig_1.getFunction)(this.params.server, this.name);
59
- if (functionDefinition) {
60
- if (this.close) {
61
- this.close();
62
- }
63
- functionDefinition
64
- .function(this.params)
65
- .then((close) => {
66
- if (this.isClosed) {
67
- close();
68
- }
69
- else {
70
- this.close = close;
71
- }
72
- // this is a bit of a problem - the close needs to be handled differently
73
- })
74
- .catch((err) => {
75
- console.error('restart error handler not done', this.name, err);
76
- // update do this later
77
- });
78
- }
79
- else {
80
- console.error('FN NOT DEFINED ANYMORE', this.name);
81
- // TODO: empty and destroy !!
82
- // this.destroyIfEmpty()
83
- }
84
- // nessecary for updating functions
85
- }
86
- update(data, version) {
87
- if (typeof data !== 'object') {
88
- console.error('observables need to use objects as data type', this.name, data);
89
- }
90
- else {
91
- if (!version) {
92
- version = !data ? 0 : (0, hash_1.hashObjectIgnoreKeyOrder)(data);
93
- }
94
- if (version && version !== this.checksum) {
95
- let payload;
96
- if (this.state) {
97
- const s = this.state;
98
- const checksum = this.checksum;
99
- try {
100
- const diff = (0, diff_1.createPatch)(s, data);
101
- this.lastDiff = checksum;
102
- payload = this.jsonDiffCache = `[2,${this.id},${JSON.stringify(diff)},[${checksum},${version}]]`;
103
- }
104
- catch (err) {
105
- // cannot create patch
106
- console.error('cannot create patch', err);
107
- }
108
- }
109
- this.checksum = version;
110
- if (!payload) {
111
- if (this.lastDiff) {
112
- delete this.lastDiff;
113
- delete this.jsonDiffCache;
114
- }
115
- payload = `[1,${this.id},${JSON.stringify(data)},${version}]`;
116
- this.jsonCache = payload;
117
- }
118
- else {
119
- this.jsonCache = `[1,${this.id},${JSON.stringify(data)},${version}]`;
120
- }
121
- if (!data) {
122
- console.warn('No data supplied - default to empty object', this.name, this.payload);
123
- }
124
- this.state = (0, utils_1.deepCopy)(data) || {};
125
- if (this.dataListeners) {
126
- for (const id in this.dataListeners) {
127
- this.dataListeners[id].forEach((fn) => {
128
- fn(this.state, this.checksum);
129
- });
130
- }
131
- }
132
- let sameVersion;
133
- for (const id in this.clients) {
134
- const c = this.clients[id];
135
- if (version !== c[1]) {
136
- c[1] = version;
137
- c[0].send(payload);
138
- if (c[2] === 1) {
139
- // have to make it different if it converts to a subscription
140
- this.unsubscribe(c[0]);
141
- }
142
- }
143
- else if (c[2]) {
144
- if (!sameVersion) {
145
- sameVersion = `[1,${this.id},null,${version}]`;
146
- }
147
- c[1] = version;
148
- c[0].send(sameVersion);
149
- if (c[2] === 1) {
150
- this.unsubscribe(c[0]);
151
- }
152
- }
153
- }
154
- }
155
- }
156
- }
157
- error(err) {
158
- // SEND ERROR
159
- console.info(err);
160
- }
161
- destroyIfEmpty() {
162
- // different close also needs to be called for every client :/
163
- if (this.clientsCnt === 0 && this.dataListenersCnt === 0) {
164
- this.removeTimer = setTimeout(() => {
165
- if (this.close) {
166
- try {
167
- this.close();
168
- }
169
- catch (err) {
170
- console.error('Cannot close user defined observable');
171
- }
172
- }
173
- delete this.server.subscriptions[this.id];
174
- this.isClosed = true;
175
- }, 5e3);
176
- }
177
- }
178
- unsubscribe(client) {
179
- if (this.clients[client.id]) {
180
- delete this.clients[client.id];
181
- delete client.subscriptions[this.id];
182
- this.clientsCnt--;
183
- this.destroyIfEmpty();
184
- }
185
- }
186
- unsubscribeDataListener(client, fn, id) {
187
- if (this.dataListeners?.[id]) {
188
- this.dataListeners[id].delete(fn);
189
- if (this.dataListeners[id].size === 0) {
190
- delete this.dataListeners[id];
191
- this.dataListenersCnt--;
192
- this.destroyIfEmpty();
193
- }
194
- }
195
- }
196
- subscribeDataListener(client, fn, id) {
197
- if (!this.dataListeners) {
198
- this.dataListeners = {};
199
- }
200
- if (!this.dataListeners[id]) {
201
- this.dataListenersCnt++;
202
- this.dataListeners[id] = new Set();
203
- if (this.removeTimer) {
204
- clearTimeout(this.removeTimer);
205
- }
206
- }
207
- if (this.state) {
208
- fn(this.state, this.checksum);
209
- }
210
- else if (this.errorState) {
211
- fn(null, 0, this.errorState);
212
- }
213
- this.dataListeners[id].add(fn);
214
- }
215
- // get 0 = normal sub, 1 = get, 2 = sub but force get
216
- subscribe(client, checksum, get = 0) {
217
- if (!client.subscriptions) {
218
- client.subscriptions = {};
219
- }
220
- if (this.removeTimer) {
221
- clearTimeout(this.removeTimer);
222
- }
223
- let isSend = false;
224
- if (get !== 1) {
225
- this.clients[client.id] = [client, checksum, get];
226
- client.subscriptions[this.id] = this;
227
- this.clientsCnt++;
228
- }
229
- if (this.errorState) {
230
- const payload = [
231
- client_1.RequestTypes.Subscription,
232
- this.id,
233
- {},
234
- 0,
235
- this.errorState,
236
- ];
237
- isSend = true;
238
- client.send(payload);
239
- }
240
- else if (this.state) {
241
- if (checksum && checksum === this.checksum) {
242
- if (get) {
243
- const payload = [
244
- client_1.RequestTypes.Subscription,
245
- this.id,
246
- null,
247
- checksum,
248
- this.errorState,
249
- ];
250
- isSend = true;
251
- client.send(payload);
252
- }
253
- }
254
- else {
255
- if (this.clients[client.id]) {
256
- this.clients[client.id][1] = this.checksum;
257
- }
258
- // this send has to be checked dont want to resend if it immediatly updates from the sub
259
- if (checksum && this.lastDiff === checksum) {
260
- isSend = true;
261
- client.send(this.jsonDiffCache);
262
- }
263
- else {
264
- isSend = true;
265
- client.send(this.jsonCache);
266
- }
267
- }
268
- }
269
- if (get === 1) {
270
- if (isSend) {
271
- this.destroyIfEmpty();
272
- }
273
- else {
274
- this.clients[client.id] = [client, checksum, get];
275
- client.subscriptions[this.id] = this;
276
- this.clientsCnt++;
277
- }
278
- }
279
- }
280
- sendData(client) {
281
- if (this.checksum && !this.errorState) {
282
- const store = this.clients[client.id];
283
- if (store) {
284
- store[1] = this.checksum;
285
- client.send(this.jsonCache);
286
- }
287
- }
288
- }
289
- }
290
- exports.SharedFunctionObservable = SharedFunctionObservable;
291
- //# sourceMappingURL=SharedObservable.js.map