@boatkit-io/restream 0.0.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 (75) hide show
  1. package/README.md +19 -0
  2. package/dist/cjs/index.js +34 -0
  3. package/dist/cjs/index.js.map +1 -0
  4. package/dist/cjs/package.json +3 -0
  5. package/dist/cjs/restream/PackageRestream.js +371 -0
  6. package/dist/cjs/restream/PackageRestream.js.map +1 -0
  7. package/dist/cjs/stores/TriggerStore.js +130 -0
  8. package/dist/cjs/stores/TriggerStore.js.map +1 -0
  9. package/dist/cjs/utils/BinaryReader.js +171 -0
  10. package/dist/cjs/utils/BinaryReader.js.map +1 -0
  11. package/dist/cjs/utils/BinaryWriter.js +74 -0
  12. package/dist/cjs/utils/BinaryWriter.js.map +1 -0
  13. package/dist/cjs/utils/Decoders.js +286 -0
  14. package/dist/cjs/utils/Decoders.js.map +1 -0
  15. package/dist/cjs/utils/Encoders.js +232 -0
  16. package/dist/cjs/utils/Encoders.js.map +1 -0
  17. package/dist/cjs/utils/SerializationTypes.js +279 -0
  18. package/dist/cjs/utils/SerializationTypes.js.map +1 -0
  19. package/dist/cjs/utils/SimpleAssert.js +9 -0
  20. package/dist/cjs/utils/SimpleAssert.js.map +1 -0
  21. package/dist/cjs/utils/SubscribableEvent.js +60 -0
  22. package/dist/cjs/utils/SubscribableEvent.js.map +1 -0
  23. package/dist/cjs/utils/TSUtils.js +62 -0
  24. package/dist/cjs/utils/TSUtils.js.map +1 -0
  25. package/dist/cjs/websocket/SocketHelper.js +134 -0
  26. package/dist/cjs/websocket/SocketHelper.js.map +1 -0
  27. package/dist/esm/index.d.ts +10 -0
  28. package/dist/esm/index.d.ts.map +1 -0
  29. package/dist/esm/index.js +9 -0
  30. package/dist/esm/index.js.map +1 -0
  31. package/dist/esm/restream/PackageRestream.d.ts +71 -0
  32. package/dist/esm/restream/PackageRestream.d.ts.map +1 -0
  33. package/dist/esm/restream/PackageRestream.js +330 -0
  34. package/dist/esm/restream/PackageRestream.js.map +1 -0
  35. package/dist/esm/stores/TriggerStore.d.ts +34 -0
  36. package/dist/esm/stores/TriggerStore.d.ts.map +1 -0
  37. package/dist/esm/stores/TriggerStore.js +124 -0
  38. package/dist/esm/stores/TriggerStore.js.map +1 -0
  39. package/dist/esm/utils/BinaryReader.d.ts +27 -0
  40. package/dist/esm/utils/BinaryReader.d.ts.map +1 -0
  41. package/dist/esm/utils/BinaryReader.js +168 -0
  42. package/dist/esm/utils/BinaryReader.js.map +1 -0
  43. package/dist/esm/utils/BinaryWriter.d.ts +18 -0
  44. package/dist/esm/utils/BinaryWriter.d.ts.map +1 -0
  45. package/dist/esm/utils/BinaryWriter.js +71 -0
  46. package/dist/esm/utils/BinaryWriter.js.map +1 -0
  47. package/dist/esm/utils/Decoders.d.ts +27 -0
  48. package/dist/esm/utils/Decoders.d.ts.map +1 -0
  49. package/dist/esm/utils/Decoders.js +235 -0
  50. package/dist/esm/utils/Decoders.js.map +1 -0
  51. package/dist/esm/utils/Encoders.d.ts +25 -0
  52. package/dist/esm/utils/Encoders.d.ts.map +1 -0
  53. package/dist/esm/utils/Encoders.js +211 -0
  54. package/dist/esm/utils/Encoders.js.map +1 -0
  55. package/dist/esm/utils/SerializationTypes.d.ts +101 -0
  56. package/dist/esm/utils/SerializationTypes.d.ts.map +1 -0
  57. package/dist/esm/utils/SerializationTypes.js +267 -0
  58. package/dist/esm/utils/SerializationTypes.js.map +1 -0
  59. package/dist/esm/utils/SimpleAssert.d.ts +2 -0
  60. package/dist/esm/utils/SimpleAssert.d.ts.map +1 -0
  61. package/dist/esm/utils/SimpleAssert.js +6 -0
  62. package/dist/esm/utils/SimpleAssert.js.map +1 -0
  63. package/dist/esm/utils/SubscribableEvent.d.ts +26 -0
  64. package/dist/esm/utils/SubscribableEvent.d.ts.map +1 -0
  65. package/dist/esm/utils/SubscribableEvent.js +55 -0
  66. package/dist/esm/utils/SubscribableEvent.js.map +1 -0
  67. package/dist/esm/utils/TSUtils.d.ts +8 -0
  68. package/dist/esm/utils/TSUtils.d.ts.map +1 -0
  69. package/dist/esm/utils/TSUtils.js +58 -0
  70. package/dist/esm/utils/TSUtils.js.map +1 -0
  71. package/dist/esm/websocket/SocketHelper.d.ts +64 -0
  72. package/dist/esm/websocket/SocketHelper.d.ts.map +1 -0
  73. package/dist/esm/websocket/SocketHelper.js +125 -0
  74. package/dist/esm/websocket/SocketHelper.js.map +1 -0
  75. package/package.json +58 -0
@@ -0,0 +1,267 @@
1
+ import { deepEqual } from './TSUtils.js';
2
+ export var SerializationType;
3
+ (function (SerializationType) {
4
+ SerializationType[SerializationType["Invalid"] = 0] = "Invalid";
5
+ SerializationType[SerializationType["Bool"] = 1] = "Bool";
6
+ SerializationType[SerializationType["String"] = 2] = "String";
7
+ SerializationType[SerializationType["Int8"] = 3] = "Int8";
8
+ SerializationType[SerializationType["Int16"] = 4] = "Int16";
9
+ SerializationType[SerializationType["Int32"] = 5] = "Int32";
10
+ SerializationType[SerializationType["Int64"] = 6] = "Int64";
11
+ SerializationType[SerializationType["Uint8"] = 7] = "Uint8";
12
+ SerializationType[SerializationType["Uint16"] = 8] = "Uint16";
13
+ SerializationType[SerializationType["Uint32"] = 9] = "Uint32";
14
+ SerializationType[SerializationType["Uint64"] = 10] = "Uint64";
15
+ SerializationType[SerializationType["Float32"] = 11] = "Float32";
16
+ SerializationType[SerializationType["Float64"] = 12] = "Float64";
17
+ SerializationType[SerializationType["Time"] = 13] = "Time";
18
+ SerializationType[SerializationType["Pointer"] = 14] = "Pointer";
19
+ SerializationType[SerializationType["Array"] = 15] = "Array";
20
+ SerializationType[SerializationType["Map"] = 16] = "Map";
21
+ SerializationType[SerializationType["Dynamic"] = 17] = "Dynamic";
22
+ SerializationType[SerializationType["Void"] = 18] = "Void";
23
+ })(SerializationType || (SerializationType = {}));
24
+ export class VarInfoDynamic {
25
+ getSerializationData() {
26
+ return new Uint8Array([SerializationType.Dynamic]);
27
+ }
28
+ fillGenerics(_) {
29
+ return this;
30
+ }
31
+ }
32
+ export class VarInfoPrimitive {
33
+ dataType;
34
+ mappedType;
35
+ constructor(dataType, mappedType) {
36
+ this.dataType = dataType;
37
+ this.mappedType = mappedType;
38
+ }
39
+ getSerializationData() {
40
+ return new Uint8Array([this.dataType]);
41
+ }
42
+ fillGenerics(_) {
43
+ return this;
44
+ }
45
+ }
46
+ export class VarInfoPointer {
47
+ notNil;
48
+ subType;
49
+ constructor(notNil, subType) {
50
+ this.notNil = notNil;
51
+ this.subType = subType;
52
+ }
53
+ getSerializationData() {
54
+ const sd = this.subType.getSerializationData();
55
+ const na = new Uint8Array(1 + sd.length);
56
+ na[0] = SerializationType.Pointer;
57
+ na.set(sd, 1);
58
+ return na;
59
+ }
60
+ fillGenerics(gm) {
61
+ return new VarInfoPointer(this.notNil, this.subType.fillGenerics(gm));
62
+ }
63
+ }
64
+ export class VarInfoArray {
65
+ notNil;
66
+ elemType;
67
+ constructor(notNil, elemType) {
68
+ this.notNil = notNil;
69
+ this.elemType = elemType;
70
+ }
71
+ getSerializationData() {
72
+ const sd = this.elemType.getSerializationData();
73
+ const na = new Uint8Array(1 + sd.length);
74
+ na[0] = SerializationType.Array;
75
+ na.set(sd, 1);
76
+ return na;
77
+ }
78
+ fillGenerics(gm) {
79
+ return new VarInfoArray(this.notNil, this.elemType.fillGenerics(gm));
80
+ }
81
+ }
82
+ export class VarInfoMap {
83
+ notNil;
84
+ keyType;
85
+ elemType;
86
+ constructor(notNil, keyType, elemType) {
87
+ this.notNil = notNil;
88
+ this.keyType = keyType;
89
+ this.elemType = elemType;
90
+ }
91
+ getSerializationData() {
92
+ const ksd = this.keyType.getSerializationData();
93
+ const esd = this.elemType ? this.elemType.getSerializationData() : new Uint8Array([SerializationType.Void]);
94
+ const na = new Uint8Array(1 + ksd.length + esd.length);
95
+ na[0] = SerializationType.Map;
96
+ na.set(ksd, 1);
97
+ na.set(esd, 1 + ksd.length);
98
+ return na;
99
+ }
100
+ fillGenerics(gm) {
101
+ const elemType = this.elemType ? this.elemType.fillGenerics(gm) : undefined;
102
+ return new VarInfoMap(this.notNil, this.keyType.fillGenerics(gm), elemType);
103
+ }
104
+ }
105
+ export class VarInfoStruct {
106
+ name;
107
+ packageName;
108
+ deserializer;
109
+ fieldList;
110
+ genericTypes;
111
+ constructor(name, packageName, deserializer, fieldList, genericTypes) {
112
+ this.name = name;
113
+ this.packageName = packageName;
114
+ this.deserializer = deserializer;
115
+ this.fieldList = fieldList;
116
+ this.genericTypes = genericTypes;
117
+ }
118
+ getSerializationData() {
119
+ throw new Error("dynamic GetSerializationData of structs not supported");
120
+ }
121
+ fillGenerics(_) {
122
+ return this;
123
+ }
124
+ }
125
+ export class VarInfoGenericParam {
126
+ name;
127
+ constructor(name) {
128
+ this.name = name;
129
+ }
130
+ getSerializationData() {
131
+ throw new Error("dynamic GetSerializationData of structs not supported");
132
+ }
133
+ fillGenerics(gm) {
134
+ if (gm.has(this.name)) {
135
+ return gm.get(this.name);
136
+ }
137
+ return this;
138
+ }
139
+ }
140
+ export function varInfoFromReader(r) {
141
+ const st = r.readByte();
142
+ switch (st) {
143
+ case SerializationType.Bool:
144
+ case SerializationType.String:
145
+ case SerializationType.Int8:
146
+ case SerializationType.Int16:
147
+ case SerializationType.Int32:
148
+ case SerializationType.Int64:
149
+ case SerializationType.Uint8:
150
+ case SerializationType.Uint16:
151
+ case SerializationType.Uint32:
152
+ case SerializationType.Uint64:
153
+ case SerializationType.Float32:
154
+ case SerializationType.Float64:
155
+ case SerializationType.Time:
156
+ return new VarInfoPrimitive(st);
157
+ case SerializationType.Pointer: {
158
+ const sub = varInfoFromReader(r);
159
+ if (sub == undefined) {
160
+ throw new Error("undefined varinfo for Pointer in varInfoFromReader");
161
+ }
162
+ return new VarInfoPointer(false, sub);
163
+ }
164
+ case SerializationType.Array: {
165
+ const sub = varInfoFromReader(r);
166
+ if (sub == undefined) {
167
+ throw new Error("undefined varinfo for Array in varInfoFromReader");
168
+ }
169
+ return new VarInfoArray(false, sub);
170
+ }
171
+ case SerializationType.Map: {
172
+ const key = varInfoFromReader(r);
173
+ const elem = varInfoFromReader(r);
174
+ if (key == undefined) {
175
+ throw new Error("undefined varinfo for Map key in varInfoFromReader");
176
+ }
177
+ return new VarInfoMap(false, key, elem);
178
+ }
179
+ case SerializationType.Dynamic:
180
+ return new VarInfoDynamic();
181
+ case SerializationType.Void:
182
+ return undefined;
183
+ default:
184
+ throw new Error("can't dynamically deserialize varinfo for unknown serialization type: " + st);
185
+ }
186
+ }
187
+ export function varInfoFromObj(obj) {
188
+ switch (typeof obj) {
189
+ case 'boolean':
190
+ return new VarInfoPrimitive(SerializationType.Bool);
191
+ case 'string':
192
+ return new VarInfoPrimitive(SerializationType.String);
193
+ case 'number':
194
+ return (obj === (obj | 0)) ? new VarInfoPrimitive(SerializationType.Int64) : new VarInfoPrimitive(SerializationType.Float64);
195
+ case 'bigint':
196
+ return new VarInfoPrimitive(SerializationType.Int64);
197
+ case 'undefined':
198
+ return new VarInfoPointer(false, new VarInfoPrimitive(SerializationType.Int64));
199
+ case 'object':
200
+ if (obj === null) {
201
+ return new VarInfoPointer(false, new VarInfoPrimitive(SerializationType.Int64));
202
+ }
203
+ if (obj instanceof Date) {
204
+ return new VarInfoPrimitive(SerializationType.Time);
205
+ }
206
+ if (obj instanceof Uint8Array) {
207
+ return new VarInfoArray(false, new VarInfoPrimitive(SerializationType.Uint8));
208
+ }
209
+ if (obj instanceof Array) {
210
+ if (obj.length === 0) {
211
+ return new VarInfoArray(false, new VarInfoPrimitive(SerializationType.Int64));
212
+ }
213
+ const firstVI = varInfoFromObj(obj[0]);
214
+ for (let i = 1; i < obj.length; i++) {
215
+ if (!deepEqual(varInfoFromObj(obj[i]), firstVI)) {
216
+ return new VarInfoArray(false, new VarInfoDynamic());
217
+ }
218
+ }
219
+ return new VarInfoArray(false, firstVI);
220
+ }
221
+ if (obj instanceof Map) {
222
+ if (obj.size === 0) {
223
+ return new VarInfoMap(false, new VarInfoPrimitive(SerializationType.Int64), new VarInfoPrimitive(SerializationType.Int64));
224
+ }
225
+ const entries = obj.entries();
226
+ let entry = entries.next();
227
+ const firstKT = varInfoFromObj(entry.value[0]);
228
+ let keyDiff = false;
229
+ const firstVT = varInfoFromObj(entry.value[1]);
230
+ let valueDiff = false;
231
+ for (; !entry.done; entry = entries.next()) {
232
+ if (!keyDiff && !deepEqual(varInfoFromObj(entry.value[0]), firstKT)) {
233
+ keyDiff = true;
234
+ }
235
+ if (!valueDiff && !deepEqual(varInfoFromObj(entry.value[1]), firstVT)) {
236
+ valueDiff = true;
237
+ }
238
+ if (keyDiff && valueDiff) {
239
+ break;
240
+ }
241
+ }
242
+ const kt = keyDiff ? new VarInfoDynamic() : firstKT;
243
+ const vt = valueDiff ? new VarInfoDynamic() : firstVT;
244
+ return new VarInfoMap(false, kt, vt);
245
+ }
246
+ if (obj instanceof Set) {
247
+ if (obj.size === 0) {
248
+ return new VarInfoMap(false, new VarInfoPrimitive(SerializationType.Int64), new VarInfoPrimitive(SerializationType.Int64));
249
+ }
250
+ const entries = obj.entries();
251
+ let entry = entries.next();
252
+ const firstKT = varInfoFromObj(entry.value[0]);
253
+ for (; !entry.done; entry = entries.next()) {
254
+ if (!deepEqual(varInfoFromObj(entry.value[0]), firstKT)) {
255
+ return new VarInfoMap(false, new VarInfoDynamic(), undefined);
256
+ }
257
+ }
258
+ return new VarInfoMap(false, firstKT, undefined);
259
+ }
260
+ // TODO: not sure if this works at all
261
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
262
+ return new VarInfoStruct(obj.constructor.name, "", obj.prototype);
263
+ default:
264
+ throw new Error("can't create varinfo for unknown type: " + typeof obj);
265
+ }
266
+ }
267
+ //# sourceMappingURL=SerializationTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerializationTypes.js","sourceRoot":"","sources":["../../../src/utils/SerializationTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function ok(condition: unknown, message?: string): asserts condition;
2
+ //# sourceMappingURL=SimpleAssert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleAssert.d.ts","sourceRoot":"","sources":["../../../src/utils/SimpleAssert.ts"],"names":[],"mappings":"AAAA,wBAAgB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,SAAqB,GAAG,OAAO,CAAC,SAAS,CAItF"}
@@ -0,0 +1,6 @@
1
+ export function ok(condition, message = 'Assertion failed') {
2
+ if (!condition) {
3
+ throw new Error(message);
4
+ }
5
+ }
6
+ //# sourceMappingURL=SimpleAssert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleAssert.js","sourceRoot":"","sources":["../../../src/utils/SimpleAssert.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,EAAE,CAAC,SAAkB,EAAE,OAAO,GAAG,kBAAkB;IAC/D,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;AACL,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * SubscribableEvent.ts
3
+ *
4
+ * Copyright (c) Microsoft Corporation. All rights reserved.
5
+ * Licensed under the MIT license.
6
+ *
7
+ * A simple strongly-typed pub/sub/fire eventing system.
8
+ */
9
+ export declare class SubscriptionToken {
10
+ private _event;
11
+ private _callback;
12
+ constructor(_event: SubscribableEvent<any>, _callback: (...args: any[]) => boolean | void);
13
+ unsubscribe(): void;
14
+ }
15
+ export default class SubscribableEvent<F extends {
16
+ (...args: any[]): boolean | void;
17
+ }> {
18
+ private _allowStopPropagation;
19
+ private _subscribers;
20
+ constructor(_allowStopPropagation?: boolean);
21
+ dispose(): void;
22
+ subscribe(callback: F): SubscriptionToken;
23
+ unsubscribe(callback: F): void;
24
+ fire: F;
25
+ }
26
+ //# sourceMappingURL=SubscribableEvent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscribableEvent.d.ts","sourceRoot":"","sources":["../../../src/utils/SubscribableEvent.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,qBAAa,iBAAiB;IACd,OAAO,CAAC,MAAM;IACtB,OAAO,CAAC,SAAS;gBADD,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,EACtC,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,GAAC,IAAI;IAGvD,WAAW;CAGd;AAED,MAAM,CAAC,OAAO,OAAO,iBAAiB,CAAC,CAAC,SAAS;IAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,GAAC,IAAI,CAAA;CAAE;IAKnE,OAAO,CAAC,qBAAqB;IAJzC,OAAO,CAAC,YAAY,CAA0B;gBAI1B,qBAAqB,UAAQ;IAIjD,OAAO;IAIP,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,iBAAiB;IAMzC,WAAW,CAAC,QAAQ,EAAE,CAAC;IAIvB,IAAI,EAAE,CAAC,CAcJ;CACN"}
@@ -0,0 +1,55 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* eslint-disable @typescript-eslint/no-unsafe-function-type */
3
+ /**
4
+ * SubscribableEvent.ts
5
+ *
6
+ * Copyright (c) Microsoft Corporation. All rights reserved.
7
+ * Licensed under the MIT license.
8
+ *
9
+ * A simple strongly-typed pub/sub/fire eventing system.
10
+ */
11
+ export class SubscriptionToken {
12
+ _event;
13
+ _callback;
14
+ constructor(_event, _callback) {
15
+ this._event = _event;
16
+ this._callback = _callback;
17
+ }
18
+ unsubscribe() {
19
+ this._event.unsubscribe(this._callback);
20
+ }
21
+ }
22
+ export default class SubscribableEvent {
23
+ _allowStopPropagation;
24
+ _subscribers;
25
+ // By default, SubscribableEvent will fire to all subscribers regardless of any conditions.
26
+ // If you enable allowStopPropagation, then a subscription callback can return a truthy response and it will halt further callbacks.
27
+ constructor(_allowStopPropagation = false) {
28
+ this._allowStopPropagation = _allowStopPropagation;
29
+ this._subscribers = [];
30
+ }
31
+ dispose() {
32
+ this._subscribers = [];
33
+ }
34
+ subscribe(callback) {
35
+ this._subscribers = this._subscribers.concat(callback);
36
+ return new SubscriptionToken(this, callback);
37
+ }
38
+ unsubscribe(callback) {
39
+ this._subscribers = this._subscribers.filter(value => value !== callback);
40
+ }
41
+ fire = ((...args) => {
42
+ // Keep reference to the original readonly array. We don't want to have it change while we're firing
43
+ const subs = this._subscribers;
44
+ // Execute handlers in the reverse order in which they were registered.
45
+ for (let i = subs.length - 1; i >= 0; i--) {
46
+ const ret = subs[i].apply(null, args);
47
+ if (this._allowStopPropagation && !!ret) {
48
+ // If the value was handled, early out.
49
+ return true;
50
+ }
51
+ }
52
+ return false;
53
+ });
54
+ }
55
+ //# sourceMappingURL=SubscribableEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscribableEvent.js","sourceRoot":"","sources":["../../../src/utils/SubscribableEvent.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,+DAA+D;AAC/D;;;;;;;GAOG;AAEH,MAAM,OAAO,iBAAiB;IACN;IACR;IADZ,YAAoB,MAA8B,EACtC,SAA2C;QADnC,WAAM,GAAN,MAAM,CAAwB;QACtC,cAAS,GAAT,SAAS,CAAkC;IACvD,CAAC;IAED,WAAW;QACP,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;CACJ;AAED,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAKd;IAJZ,YAAY,CAA0B;IAE9C,2FAA2F;IAC3F,oIAAoI;IACpI,YAAoB,wBAAwB,KAAK;QAA7B,0BAAqB,GAArB,qBAAqB,CAAQ;QAC7C,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO;QACH,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,QAAW;QACjB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEvD,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,WAAW,CAAC,QAAW;QACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,GAAY,CAAC,CAAC,GAAG,IAAW,EAAE,EAAE;QAChC,oGAAoG;QACpG,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;QAE/B,uEAAuE;QACvE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;gBACtC,uCAAuC;gBACvC,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC,CAAC;CACN"}
@@ -0,0 +1,8 @@
1
+ export declare function deepEqual(a: unknown, b: unknown): boolean;
2
+ export interface Deferred<T> {
3
+ promise: Promise<T>;
4
+ resolve: (t: T) => void;
5
+ reject: (r: unknown) => void;
6
+ }
7
+ export declare function deferred<T>(): Deferred<T>;
8
+ //# sourceMappingURL=TSUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TSUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/TSUtils.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CA2CzD;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAChC;AAED,wBAAgB,QAAQ,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAYzC"}
@@ -0,0 +1,58 @@
1
+ export function deepEqual(a, b) {
2
+ if (a === b) {
3
+ return true;
4
+ }
5
+ if (typeof a !== 'object' || typeof b !== 'object' || !a || !b) {
6
+ // Can't compare non-objects as anything other than triple-equals.
7
+ // Functions must be reference equal to be equal, otherwise are ALWAYS unequal.
8
+ return false;
9
+ }
10
+ if (Array.isArray(a)) {
11
+ // Optimize array checks a bit
12
+ if (!Array.isArray(b)) {
13
+ return false;
14
+ }
15
+ const aLen = a.length;
16
+ if (aLen !== b.length) {
17
+ return false;
18
+ }
19
+ for (let i = 0; i < aLen; i++) {
20
+ if (!deepEqual(a[i], b[i])) {
21
+ return false;
22
+ }
23
+ }
24
+ }
25
+ const aKeys = Object.keys(a);
26
+ const bKeys = Object.keys(b);
27
+ if (aKeys.length !== bKeys.length) {
28
+ return false;
29
+ }
30
+ // First check that all the keys exist in both
31
+ for (const key of aKeys) {
32
+ if (!(key in b)) {
33
+ return false;
34
+ }
35
+ }
36
+ // Got this far, now check that the values are deep equal
37
+ for (const key of aKeys) {
38
+ // @ts-expect-error deep equals
39
+ if (!deepEqual(a[key], b[key])) {
40
+ return false;
41
+ }
42
+ }
43
+ return true;
44
+ }
45
+ export function deferred() {
46
+ let resolve;
47
+ let reject;
48
+ const promise = new Promise((res, rej) => {
49
+ resolve = res;
50
+ reject = rej;
51
+ });
52
+ return {
53
+ promise,
54
+ resolve,
55
+ reject,
56
+ };
57
+ }
58
+ //# sourceMappingURL=TSUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TSUtils.js","sourceRoot":"","sources":["../../../src/utils/TSUtils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,CAAU,EAAE,CAAU;IAC5C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC7D,kEAAkE;QAClE,+EAA+E;QAC/E,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACnB,8BAA8B;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;QACtB,IAAI,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,8CAA8C;IAC9C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,yDAAyD;IACzD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACtB,+BAA+B;QAC/B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAQD,MAAM,UAAU,QAAQ;IACpB,IAAI,OAAwB,CAAC;IAC7B,IAAI,MAA6B,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACxC,OAAO,GAAG,GAAG,CAAC;QACd,MAAM,GAAG,GAAG,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,OAAO;QACH,OAAO;QACP,OAAO;QACP,MAAM;KACT,CAAC;AACN,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { Socket } from 'socket.io-client';
2
+ import { Deserializable, Serializable, VarInfoStruct } from '../utils/SerializationTypes.js';
3
+ import BinaryWriter from '../utils/BinaryWriter.js';
4
+ export declare abstract class RPCStruct<RS extends RPCResponseStruct<RT>, RT> implements Serializable {
5
+ readonly rpcBoundName: string;
6
+ readonly responseType: Deserializable<RS>;
7
+ constructor(rpcBoundName: string, responseType: Deserializable<RS>);
8
+ abstract serialize(w: BinaryWriter, vi: VarInfoStruct | undefined): void;
9
+ }
10
+ export declare abstract class RPCResponseStruct<RT = void> {
11
+ result?: RT;
12
+ error: string | undefined;
13
+ }
14
+ export declare enum StoreSubscriptionAction {
15
+ Subscribe = 0,
16
+ Unsubscribe = 1
17
+ }
18
+ export interface StoreSubscriptionMessage {
19
+ storeName: string;
20
+ action: StoreSubscriptionAction;
21
+ key?: string;
22
+ }
23
+ export declare enum StoreUpdateMessageKind {
24
+ Full = 0,
25
+ Partial = 2
26
+ }
27
+ export interface StoreUpdateMessage {
28
+ time: number;
29
+ kind: StoreUpdateMessageKind;
30
+ storeName: string;
31
+ }
32
+ export interface StoreUpdateFullMessage extends StoreUpdateMessage {
33
+ kind: StoreUpdateMessageKind.Full;
34
+ state: ArrayBuffer;
35
+ }
36
+ export interface StoreUpdatePartialMessage extends StoreUpdateMessage {
37
+ kind: StoreUpdateMessageKind.Partial;
38
+ partial: ArrayBuffer;
39
+ }
40
+ export interface RPCCallMessage {
41
+ callID: number;
42
+ methodName: string;
43
+ request: ArrayBufferLike;
44
+ }
45
+ export interface RPCCallResponseMessage {
46
+ callID: number;
47
+ response?: ArrayBufferLike;
48
+ error?: RPCCallError;
49
+ }
50
+ export interface RPCCallError {
51
+ message: string;
52
+ data: Record<string, unknown>;
53
+ }
54
+ export declare class ReStreamSocket {
55
+ private _socket;
56
+ private _timestampOffset;
57
+ private _authenticated;
58
+ private _rpcCallID;
59
+ private _rpcCallsPending;
60
+ constructor(socket: Socket);
61
+ markAuthenticated(): void;
62
+ sendRPC<RS extends RPCResponseStruct<RT>, RT>(rpcStruct: RPCStruct<RS, RT>): Promise<RT>;
63
+ }
64
+ //# sourceMappingURL=SocketHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SocketHelper.d.ts","sourceRoot":"","sources":["../../../src/websocket/SocketHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE7F,OAAO,YAAY,MAAM,0BAA0B,CAAC;AASpD,8BAAsB,SAAS,CAAC,EAAE,SAAS,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAE,YAAW,YAAY;aAC7D,YAAY,EAAE,MAAM;aAAkB,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;gBAAtE,YAAY,EAAE,MAAM,EAAkB,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;IAElG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI;CAC3E;AAED,8BAAsB,iBAAiB,CAAC,EAAE,GAAG,IAAI;IACtC,MAAM,CAAC,EAAE,EAAE,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAUD,oBAAY,uBAAuB;IAC/B,SAAS,IAAI;IACb,WAAW,IAAI;CAClB;AAED,MAAM,WAAW,wBAAwB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,uBAAuB,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oBAAY,sBAAsB;IAC9B,IAAI,IAAI;IACR,OAAO,IAAI;CACd;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,sBAAsB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,sBAAuB,SAAQ,kBAAkB;IAC9D,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC;IAClC,KAAK,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACjE,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC;IACrC,OAAO,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,qBAAa,cAAc;IACvB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,gBAAgB,CAAiC;gBAE7C,MAAM,EAAE,MAAM;IA8D1B,iBAAiB;IAajB,OAAO,CAAC,EAAE,SAAS,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;CAyB3F"}
@@ -0,0 +1,125 @@
1
+ import { deferred } from '../utils/TSUtils.js';
2
+ import BinaryWriter from '../utils/BinaryWriter.js';
3
+ import BinaryReader from '../utils/BinaryReader.js';
4
+ import TriggerStore from '../stores/TriggerStore.js';
5
+ export class RPCStruct {
6
+ rpcBoundName;
7
+ responseType;
8
+ constructor(rpcBoundName, responseType) {
9
+ this.rpcBoundName = rpcBoundName;
10
+ this.responseType = responseType;
11
+ }
12
+ }
13
+ export class RPCResponseStruct {
14
+ result;
15
+ error;
16
+ }
17
+ var SocketEventNames;
18
+ (function (SocketEventNames) {
19
+ SocketEventNames["StoreUpdate"] = "storeupdate";
20
+ SocketEventNames["StoreSubscription"] = "storesub";
21
+ SocketEventNames["RPCCall"] = "rpccall";
22
+ SocketEventNames["RPCCallResponse"] = "rpccallresp";
23
+ })(SocketEventNames || (SocketEventNames = {}));
24
+ export var StoreSubscriptionAction;
25
+ (function (StoreSubscriptionAction) {
26
+ StoreSubscriptionAction[StoreSubscriptionAction["Subscribe"] = 0] = "Subscribe";
27
+ StoreSubscriptionAction[StoreSubscriptionAction["Unsubscribe"] = 1] = "Unsubscribe";
28
+ })(StoreSubscriptionAction || (StoreSubscriptionAction = {}));
29
+ export var StoreUpdateMessageKind;
30
+ (function (StoreUpdateMessageKind) {
31
+ StoreUpdateMessageKind[StoreUpdateMessageKind["Full"] = 0] = "Full";
32
+ StoreUpdateMessageKind[StoreUpdateMessageKind["Partial"] = 2] = "Partial";
33
+ })(StoreUpdateMessageKind || (StoreUpdateMessageKind = {}));
34
+ export class ReStreamSocket {
35
+ _socket;
36
+ _timestampOffset = 0;
37
+ _authenticated = false;
38
+ _rpcCallID = 1;
39
+ _rpcCallsPending = new Map();
40
+ constructor(socket) {
41
+ this._socket = socket;
42
+ socket.on('disconnect', () => {
43
+ for (const v of this._rpcCallsPending.values()) {
44
+ v.def.reject({ message: "Server is disconnected", data: {} });
45
+ }
46
+ this._rpcCallsPending.clear();
47
+ this._authenticated = false;
48
+ });
49
+ socket.on(SocketEventNames.StoreUpdate, (message) => {
50
+ this._timestampOffset = Date.now() - message.time;
51
+ TriggerStore.handleUpdateMessage(message);
52
+ });
53
+ socket.on(SocketEventNames.RPCCallResponse, (message) => {
54
+ const waiting = this._rpcCallsPending.get(message.callID);
55
+ this._rpcCallsPending.delete(message.callID);
56
+ if (!waiting) {
57
+ alert("got binary RPC response for untracked RPC call " + message.callID);
58
+ return;
59
+ }
60
+ if (!message.response || message.error) {
61
+ waiting.def.reject(message.error?.message ?? "Server is disconnected");
62
+ return;
63
+ }
64
+ const resp = waiting.responseType.deserialized(new BinaryReader(message.response), undefined);
65
+ if (resp.error) {
66
+ waiting.def.reject(resp.error);
67
+ }
68
+ else {
69
+ waiting.def.resolve(resp.result);
70
+ }
71
+ });
72
+ TriggerStore.eventSubscriptionStarted.subscribe((storeName, key) => {
73
+ if (this._authenticated) {
74
+ const message = {
75
+ action: StoreSubscriptionAction.Subscribe,
76
+ storeName,
77
+ key,
78
+ };
79
+ this._socket.emit(SocketEventNames.StoreSubscription, message);
80
+ }
81
+ });
82
+ TriggerStore.eventSubscriptionStopped.subscribe((storeName, key) => {
83
+ if (this._authenticated) {
84
+ const message = {
85
+ action: StoreSubscriptionAction.Unsubscribe,
86
+ storeName,
87
+ key,
88
+ };
89
+ this._socket.emit(SocketEventNames.StoreSubscription, message);
90
+ }
91
+ });
92
+ }
93
+ markAuthenticated() {
94
+ this._authenticated = true;
95
+ for (const storeSub of TriggerStore.getStoreSubs()) {
96
+ const message = {
97
+ action: StoreSubscriptionAction.Subscribe,
98
+ storeName: storeSub.storeName,
99
+ key: storeSub.key,
100
+ };
101
+ this._socket.emit(SocketEventNames.StoreSubscription, message);
102
+ }
103
+ }
104
+ sendRPC(rpcStruct) {
105
+ if (this._authenticated) {
106
+ return Promise.reject(new Error("Server is disconnected"));
107
+ }
108
+ const w = new BinaryWriter();
109
+ rpcStruct.serialize(w, undefined);
110
+ const msg = {
111
+ callID: this._rpcCallID++,
112
+ methodName: rpcStruct.rpcBoundName,
113
+ request: w.getBytes().buffer,
114
+ };
115
+ const def = deferred();
116
+ const waiting = {
117
+ def,
118
+ responseType: rpcStruct.responseType,
119
+ };
120
+ this._rpcCallsPending.set(msg.callID, waiting);
121
+ this._socket.emit(SocketEventNames.RPCCall, msg);
122
+ return def.promise;
123
+ }
124
+ }
125
+ //# sourceMappingURL=SocketHelper.js.map