motion-master-client 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 (71) hide show
  1. package/README.md +7 -0
  2. package/package.json +9 -0
  3. package/src/index.d.ts +21 -0
  4. package/src/index.js +22 -0
  5. package/src/index.js.map +1 -0
  6. package/src/lib/device-log-line.d.ts +5 -0
  7. package/src/lib/device-log-line.js +2 -0
  8. package/src/lib/device-log-line.js.map +1 -0
  9. package/src/lib/hardware-description.d.ts +36 -0
  10. package/src/lib/hardware-description.js +38 -0
  11. package/src/lib/hardware-description.js.map +1 -0
  12. package/src/lib/logger.d.ts +1 -0
  13. package/src/lib/logger.js +5 -0
  14. package/src/lib/logger.js.map +1 -0
  15. package/src/lib/monitoring-config.d.ts +6 -0
  16. package/src/lib/monitoring-config.js +2 -0
  17. package/src/lib/monitoring-config.js.map +1 -0
  18. package/src/lib/monitoring-entry.d.ts +10 -0
  19. package/src/lib/monitoring-entry.js +2 -0
  20. package/src/lib/monitoring-entry.js.map +1 -0
  21. package/src/lib/motion-master-client.d.ts +18 -0
  22. package/src/lib/motion-master-client.js +48 -0
  23. package/src/lib/motion-master-client.js.map +1 -0
  24. package/src/lib/motion-master-pub-sub-client.d.ts +16 -0
  25. package/src/lib/motion-master-pub-sub-client.js +64 -0
  26. package/src/lib/motion-master-pub-sub-client.js.map +1 -0
  27. package/src/lib/motion-master-pub-sub-socket.d.ts +28 -0
  28. package/src/lib/motion-master-pub-sub-socket.js +2 -0
  29. package/src/lib/motion-master-pub-sub-socket.js.map +1 -0
  30. package/src/lib/motion-master-pub-sub-web-socket.d.ts +13 -0
  31. package/src/lib/motion-master-pub-sub-web-socket.js +57 -0
  32. package/src/lib/motion-master-pub-sub-web-socket.js.map +1 -0
  33. package/src/lib/motion-master-pub-sub-worker-socket.d.ts +16 -0
  34. package/src/lib/motion-master-pub-sub-worker-socket.js +37 -0
  35. package/src/lib/motion-master-pub-sub-worker-socket.js.map +1 -0
  36. package/src/lib/motion-master-req-res-client.d.ts +370 -0
  37. package/src/lib/motion-master-req-res-client.js +1067 -0
  38. package/src/lib/motion-master-req-res-client.js.map +1 -0
  39. package/src/lib/motion-master-req-res-socket.d.ts +38 -0
  40. package/src/lib/motion-master-req-res-socket.js +2 -0
  41. package/src/lib/motion-master-req-res-socket.js.map +1 -0
  42. package/src/lib/motion-master-req-res-web-socket.d.ts +20 -0
  43. package/src/lib/motion-master-req-res-web-socket.js +96 -0
  44. package/src/lib/motion-master-req-res-web-socket.js.map +1 -0
  45. package/src/lib/motion-master-req-res-worker-socket.d.ts +15 -0
  46. package/src/lib/motion-master-req-res-worker-socket.js +49 -0
  47. package/src/lib/motion-master-req-res-worker-socket.js.map +1 -0
  48. package/src/lib/operators.d.ts +21 -0
  49. package/src/lib/operators.js +62 -0
  50. package/src/lib/operators.js.map +1 -0
  51. package/src/lib/options.d.ts +10 -0
  52. package/src/lib/options.js +11 -0
  53. package/src/lib/options.js.map +1 -0
  54. package/src/lib/parameter.d.ts +9 -0
  55. package/src/lib/parameter.js +2 -0
  56. package/src/lib/parameter.js.map +1 -0
  57. package/src/lib/request-status-resolver.d.ts +4 -0
  58. package/src/lib/request-status-resolver.js +320 -0
  59. package/src/lib/request-status-resolver.js.map +1 -0
  60. package/src/lib/system-log-line.d.ts +8 -0
  61. package/src/lib/system-log-line.js +2 -0
  62. package/src/lib/system-log-line.js.map +1 -0
  63. package/src/lib/types.d.ts +41 -0
  64. package/src/lib/types.js +9 -0
  65. package/src/lib/types.js.map +1 -0
  66. package/src/lib/urls.d.ts +3 -0
  67. package/src/lib/urls.js +6 -0
  68. package/src/lib/urls.js.map +1 -0
  69. package/src/lib/util.d.ts +33 -0
  70. package/src/lib/util.js +247 -0
  71. package/src/lib/util.js.map +1 -0
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # motion-master-client
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test motion-master-client` to execute the unit tests via [Jest](https://jestjs.io).
package/package.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "motion-master-client",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "main": "./src/index.js",
6
+ "types": "./src/index.d.ts",
7
+ "dependencies": {},
8
+ "peerDependencies": {}
9
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ export * from './lib/device-log-line';
2
+ export * from './lib/hardware-description';
3
+ export * from './lib/monitoring-config';
4
+ export * from './lib/monitoring-entry';
5
+ export * from './lib/motion-master-client';
6
+ export * from './lib/motion-master-pub-sub-client';
7
+ export * from './lib/motion-master-pub-sub-socket';
8
+ export * from './lib/motion-master-pub-sub-web-socket';
9
+ export * from './lib/motion-master-pub-sub-worker-socket';
10
+ export * from './lib/motion-master-req-res-client';
11
+ export * from './lib/motion-master-req-res-socket';
12
+ export * from './lib/motion-master-req-res-web-socket';
13
+ export * from './lib/motion-master-req-res-worker-socket';
14
+ export * from './lib/operators';
15
+ export * from './lib/options';
16
+ export * from './lib/parameter';
17
+ export * from './lib/request-status-resolver';
18
+ export * from './lib/system-log-line';
19
+ export * from './lib/types';
20
+ export * from './lib/urls';
21
+ export * from './lib/util';
package/src/index.js ADDED
@@ -0,0 +1,22 @@
1
+ export * from './lib/device-log-line';
2
+ export * from './lib/hardware-description';
3
+ export * from './lib/monitoring-config';
4
+ export * from './lib/monitoring-entry';
5
+ export * from './lib/motion-master-client';
6
+ export * from './lib/motion-master-pub-sub-client';
7
+ export * from './lib/motion-master-pub-sub-socket';
8
+ export * from './lib/motion-master-pub-sub-web-socket';
9
+ export * from './lib/motion-master-pub-sub-worker-socket';
10
+ export * from './lib/motion-master-req-res-client';
11
+ export * from './lib/motion-master-req-res-socket';
12
+ export * from './lib/motion-master-req-res-web-socket';
13
+ export * from './lib/motion-master-req-res-worker-socket';
14
+ export * from './lib/operators';
15
+ export * from './lib/options';
16
+ export * from './lib/parameter';
17
+ export * from './lib/request-status-resolver';
18
+ export * from './lib/system-log-line';
19
+ export * from './lib/types';
20
+ export * from './lib/urls';
21
+ export * from './lib/util';
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/motion-master-client/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface DeviceLogLine {
2
+ time: string;
3
+ level: string;
4
+ message: string;
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=device-log-line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-log-line.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/device-log-line.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ export interface HardwareComponent {
2
+ name: string;
3
+ version: string;
4
+ serialNumber: string;
5
+ }
6
+ export declare type AssemblyComponent = HardwareComponent;
7
+ export declare type DeviceComponent = HardwareComponent;
8
+ export interface Assembly {
9
+ name: string;
10
+ id: string;
11
+ version: string;
12
+ serialNumber: string;
13
+ components: AssemblyComponent[];
14
+ }
15
+ export interface HardwareDevice {
16
+ name: string;
17
+ id: string;
18
+ version: string;
19
+ serialNumber: string;
20
+ macAddress: string;
21
+ components: DeviceComponent[];
22
+ }
23
+ /**
24
+ * @link https://docs.google.com/document/d/1N00-ZjxHkjoWNIsnoTtza9CUHrxm8-e54298DXLuD94
25
+ */
26
+ export interface HardwareDescription {
27
+ fileVersion: string;
28
+ assembly?: Assembly;
29
+ device: HardwareDevice;
30
+ }
31
+ export declare function getIdFromHardwareDescription(hardwareDescription: HardwareDescription): string;
32
+ export declare function getApiIdentifierFromHardwareDescription(hardwareDescription: HardwareDescription): string;
33
+ export declare function getNameFromHardwareDescription(hardwareDescription: HardwareDescription): string;
34
+ export declare function getSerialNumberFromHardwareDescription(hardwareDescription: HardwareDescription): string;
35
+ export declare function getAllComponentsFromHardwareDescription(hardwareDescription: HardwareDescription): HardwareComponent[];
36
+ export declare function hardwareComponentsMatch(a: HardwareComponent[], b: HardwareComponent[]): boolean;
@@ -0,0 +1,38 @@
1
+ import { isEqual } from 'lodash';
2
+ export function getIdFromHardwareDescription(hardwareDescription) {
3
+ return hardwareDescription.assembly
4
+ ? hardwareDescription.assembly.id
5
+ : hardwareDescription.device.id;
6
+ }
7
+ export function getApiIdentifierFromHardwareDescription(hardwareDescription) {
8
+ return hardwareDescription.assembly
9
+ ? `${hardwareDescription.assembly.id}-${hardwareDescription.assembly.version}`
10
+ : `${hardwareDescription.device.id}-${hardwareDescription.device.version}`;
11
+ }
12
+ export function getNameFromHardwareDescription(hardwareDescription) {
13
+ return hardwareDescription.assembly
14
+ ? hardwareDescription.assembly.name
15
+ : hardwareDescription.device.name;
16
+ }
17
+ export function getSerialNumberFromHardwareDescription(hardwareDescription) {
18
+ return hardwareDescription.assembly
19
+ ? hardwareDescription.assembly.serialNumber
20
+ : hardwareDescription.device.serialNumber;
21
+ }
22
+ export function getAllComponentsFromHardwareDescription(hardwareDescription) {
23
+ if (hardwareDescription.assembly) {
24
+ return [...hardwareDescription.assembly.components, ...hardwareDescription.device.components];
25
+ }
26
+ else {
27
+ return hardwareDescription.device.components;
28
+ }
29
+ }
30
+ export function hardwareComponentsMatch(a, b) {
31
+ if (a.length === 0 && b.length === 0) {
32
+ return false; // edge case: when both components are empty they don't match since there are no components to compare
33
+ }
34
+ const ac = a.map((c) => `${c.name}-${c.version[0]}`.replace(/\s/g, '').toLocaleLowerCase()).sort();
35
+ const bc = b.map((c) => `${c.name}-${c.version[0]}`.replace(/\s/g, '').toLocaleLowerCase()).sort();
36
+ return isEqual(ac, bc);
37
+ }
38
+ //# sourceMappingURL=hardware-description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hardware-description.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/hardware-description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAqCjC,MAAM,UAAU,4BAA4B,CAAC,mBAAwC;IACnF,OAAO,mBAAmB,CAAC,QAAQ;QACjC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE;QACjC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,uCAAuC,CAAC,mBAAwC;IAC9F,OAAO,mBAAmB,CAAC,QAAQ;QACjC,CAAC,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,EAAE,IAAI,mBAAmB,CAAC,QAAQ,CAAC,OAAO,EAAE;QAC9E,CAAC,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,EAAE,IAAI,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,mBAAwC;IACrF,OAAO,mBAAmB,CAAC,QAAQ;QACjC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI;QACnC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,mBAAwC;IAC7F,OAAO,mBAAmB,CAAC,QAAQ;QACjC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,YAAY;QAC3C,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,uCAAuC,CAAC,mBAAwC;IAC9F,IAAI,mBAAmB,CAAC,QAAQ,EAAE;QAChC,OAAO,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;KAC/F;SAAM;QACL,OAAO,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC;KAC9C;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,CAAsB,EAAE,CAAsB;IACpF,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QACpC,OAAO,KAAK,CAAC,CAAC,sGAAsG;KACrH;IAED,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEnG,OAAO,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const logger: import("roarr").Logger<import("roarr/dist/src/types").JsonObject>;
@@ -0,0 +1,5 @@
1
+ import { Roarr } from 'roarr';
2
+ export const logger = Roarr.child({
3
+ package: '@synapticon/motion-master-client'
4
+ });
5
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;IAChC,OAAO,EAAE,kCAAkC;CAC5C,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface MonitoringConfig {
2
+ readonly bufferSize?: number;
3
+ readonly distinct?: boolean;
4
+ readonly messageId: string;
5
+ readonly topic: string;
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=monitoring-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitoring-config.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/monitoring-config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { Observable } from "rxjs";
2
+ import { MonitoringConfig } from "./monitoring-config";
3
+ import { MotionMasterMessage, ParameterValueType } from "./types";
4
+ export interface MonitoringEntry {
5
+ config: MonitoringConfig;
6
+ interval: number;
7
+ message$: Observable<MotionMasterMessage>;
8
+ values$: Observable<ParameterValueType[]>;
9
+ parameters: MotionMasterMessage.Request.GetDeviceParameterValues.IParameter[];
10
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=monitoring-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitoring-entry.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/monitoring-entry.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { Observable } from "rxjs";
2
+ import { MonitoringConfig } from "./monitoring-config";
3
+ import { MotionMasterPubSubClient } from "./motion-master-pub-sub-client";
4
+ import { MotionMasterPubSubSocket } from "./motion-master-pub-sub-socket";
5
+ import { MotionMasterReqResClient } from "./motion-master-req-res-client";
6
+ import { MotionMasterReqResSocket } from "./motion-master-req-res-socket";
7
+ import { MotionMasterMessage, ParameterAddress } from "./types";
8
+ export declare class MotionMasterClient {
9
+ private readonly reqResSocket;
10
+ private readonly pubSubSocket;
11
+ readonly request: MotionMasterReqResClient;
12
+ readonly monitor: MotionMasterPubSubClient;
13
+ constructor(reqResSocket: MotionMasterReqResSocket, pubSubSocket: MotionMasterPubSubSocket);
14
+ startMonitoringDeviceParameterValues(deviceAddress: number, parameters: MotionMasterMessage.Request.GetDeviceParameterValues.IParameter[], interval: number, config: MonitoringConfig, requestTimeout?: number): [string, Observable<MotionMasterMessage>];
15
+ startMonitoringValues<T = number[]>(deviceAddress: number, parameterAddresses: ParameterAddress[], interval: number, config?: MonitoringConfig, requestTimeout?: number): [string, Observable<T>];
16
+ startMonitoring<T = number[]>(deviceAddress: number, parameterAddresses: [number, number][], interval: number, config?: MonitoringConfig, requestTimeout?: number): Observable<T>;
17
+ stopMonitoring(messageId: string): void;
18
+ }
@@ -0,0 +1,48 @@
1
+ import { Observable } from "rxjs";
2
+ import { v4 } from "uuid";
3
+ import { MotionMasterPubSubClient } from "./motion-master-pub-sub-client";
4
+ import { MotionMasterReqResClient } from "./motion-master-req-res-client";
5
+ import { mapStatusMessageToParameterValues, selectMotionMasterMessageByTopic } from "./operators";
6
+ export class MotionMasterClient {
7
+ constructor(reqResSocket, pubSubSocket) {
8
+ this.reqResSocket = reqResSocket;
9
+ this.pubSubSocket = pubSubSocket;
10
+ this.request = new MotionMasterReqResClient(this.reqResSocket);
11
+ this.monitor = new MotionMasterPubSubClient(this.pubSubSocket);
12
+ }
13
+ startMonitoringDeviceParameterValues(deviceAddress, parameters, interval, config, requestTimeout = 5000) {
14
+ const props = {
15
+ interval,
16
+ topic: config.topic,
17
+ getDeviceParameterValues: { deviceAddress, parameters },
18
+ };
19
+ this.monitor.subscribe(config);
20
+ this.request.startMonitoringDeviceParameterValues(props, requestTimeout, config.messageId);
21
+ const message$ = this.monitor.socket.data$.pipe(selectMotionMasterMessageByTopic(config.topic));
22
+ return [config.messageId, message$];
23
+ }
24
+ startMonitoringValues(deviceAddress, parameterAddresses, interval, config, requestTimeout = 5000) {
25
+ const parameters = parameterAddresses.map((addr) => ({ index: addr[0], subindex: addr[1], loadFromCache: false }));
26
+ if (!config) {
27
+ config = { messageId: v4(), topic: v4(), bufferSize: 1, distinct: false };
28
+ }
29
+ const [messageId, message$] = this.startMonitoringDeviceParameterValues(deviceAddress, parameters, interval, config, requestTimeout);
30
+ const values$ = message$.pipe(mapStatusMessageToParameterValues());
31
+ return [messageId, values$];
32
+ }
33
+ startMonitoring(deviceAddress, parameterAddresses, interval, config, requestTimeout = 5000) {
34
+ return new Observable((subscriber) => {
35
+ const [messageId, values$] = this.startMonitoringValues(deviceAddress, parameterAddresses, interval, config, requestTimeout);
36
+ const subscription = values$.subscribe(subscriber);
37
+ return () => {
38
+ subscription.unsubscribe();
39
+ this.stopMonitoring(messageId);
40
+ };
41
+ });
42
+ }
43
+ stopMonitoring(messageId) {
44
+ this.request.stopMonitoringDeviceParameterValues({ startMonitoringRequestId: messageId });
45
+ this.monitor.unsubscribe(messageId);
46
+ }
47
+ }
48
+ //# sourceMappingURL=motion-master-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-master-client.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/motion-master-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Observable, Subject } from "rxjs";
2
+ import { MonitoringConfig } from "./monitoring-config";
3
+ import { MotionMasterPubSubSocket } from "./motion-master-pub-sub-socket";
4
+ import { MotionMasterMessage } from "./types";
5
+ export declare class MotionMasterPubSubClient {
6
+ readonly socket: MotionMasterPubSubSocket;
7
+ readonly data$: Subject<[string, MotionMasterMessage[]]>;
8
+ private subscriptions;
9
+ readonly notification$: Observable<MotionMasterMessage>;
10
+ readonly systemEvent$: Observable<MotionMasterMessage.Status.SystemEvent>;
11
+ readonly deviceEvent$: Observable<MotionMasterMessage.Status.DeviceEvent>;
12
+ constructor(socket: MotionMasterPubSubSocket);
13
+ subscribe(config: MonitoringConfig): string;
14
+ unsubscribe(messageId: string): void;
15
+ unsubscribeAll(): void;
16
+ }
@@ -0,0 +1,64 @@
1
+ import { bufferCount, distinctUntilChanged, filter, map, Subject } from "rxjs";
2
+ import { v4 } from "uuid";
3
+ import { selectMotionMasterMessageByTopic, selectMotionMasterMessageStatusByKey } from "./operators";
4
+ import { MotionMasterMessage } from "./types";
5
+ import * as equal from "fast-deep-equal";
6
+ import { MotionMasterPubSubWorkerSocket } from "./motion-master-pub-sub-worker-socket";
7
+ export class MotionMasterPubSubClient {
8
+ constructor(socket) {
9
+ this.socket = socket;
10
+ this.data$ = new Subject();
11
+ this.subscriptions = new Map();
12
+ this.notification$ = this.socket.data$.pipe(selectMotionMasterMessageByTopic('notification'));
13
+ this.systemEvent$ = this.notification$.pipe(selectMotionMasterMessageStatusByKey('systemEvent'));
14
+ this.deviceEvent$ = this.notification$.pipe(selectMotionMasterMessageStatusByKey('deviceEvent'));
15
+ }
16
+ subscribe(config) {
17
+ if (!config.messageId) {
18
+ config = Object.assign(Object.assign({}, config), { messageId: v4() });
19
+ }
20
+ if (this.socket instanceof MotionMasterPubSubWorkerSocket) {
21
+ this.socket.worker.postMessage({ subscribe: config });
22
+ }
23
+ else {
24
+ const { bufferSize = 1, distinct = false, messageId, topic } = config;
25
+ let observable = this.socket.data$.pipe(filter((data) => data[0] === topic), map((data) => data[1]));
26
+ if (distinct) {
27
+ observable = observable.pipe(distinctUntilChanged((prev, curr) => {
28
+ var _a, _b, _c, _d, _e, _f;
29
+ if (prev instanceof MotionMasterMessage && curr instanceof MotionMasterMessage) {
30
+ return equal((_c = (_b = (_a = prev === null || prev === void 0 ? void 0 : prev.status) === null || _a === void 0 ? void 0 : _a.monitoringParameterValues) === null || _b === void 0 ? void 0 : _b.deviceParameterValues) === null || _c === void 0 ? void 0 : _c.parameterValues, (_f = (_e = (_d = curr === null || curr === void 0 ? void 0 : curr.status) === null || _d === void 0 ? void 0 : _d.monitoringParameterValues) === null || _e === void 0 ? void 0 : _e.deviceParameterValues) === null || _f === void 0 ? void 0 : _f.parameterValues);
31
+ }
32
+ return false;
33
+ }));
34
+ }
35
+ const subscription = observable.pipe(bufferCount(bufferSize)).subscribe((data) => {
36
+ this.data$.next([topic, data]);
37
+ });
38
+ this.subscriptions.set(messageId, subscription);
39
+ }
40
+ return config.messageId;
41
+ }
42
+ unsubscribe(messageId) {
43
+ if (this.socket instanceof MotionMasterPubSubWorkerSocket) {
44
+ this.socket.worker.postMessage({ unsubcribe: { messageId } });
45
+ }
46
+ else {
47
+ const subscription = this.subscriptions.get(messageId);
48
+ if (subscription) {
49
+ subscription.unsubscribe();
50
+ this.subscriptions.delete(messageId);
51
+ }
52
+ }
53
+ }
54
+ unsubscribeAll() {
55
+ if (this.socket instanceof MotionMasterPubSubWorkerSocket) {
56
+ this.socket.worker.postMessage({ unsubscribeAll: true });
57
+ }
58
+ else {
59
+ this.subscriptions.forEach((subscription) => subscription.unsubscribe());
60
+ this.subscriptions.clear();
61
+ }
62
+ }
63
+ }
64
+ //# sourceMappingURL=motion-master-pub-sub-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-master-pub-sub-client.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/motion-master-pub-sub-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { BehaviorSubject, Observable } from "rxjs";
2
+ import { MotionMasterMessage } from "./types";
3
+ export interface MotionMasterPubSubSocket {
4
+ /**
5
+ * Emits a boolean value when socket gets opened or closed.
6
+ */
7
+ readonly opened$: BehaviorSubject<boolean>;
8
+ /**
9
+ * Incoming data is a tuple of topic and decoded message.
10
+ */
11
+ readonly data$: Observable<[string, MotionMasterMessage]>;
12
+ /**
13
+ * URL set in call to open.
14
+ */
15
+ get url(): string | undefined;
16
+ /**
17
+ * Open socket.
18
+ *
19
+ * The connected$ and eventually alive$ observables will emit true values.
20
+ */
21
+ open(url: string): void;
22
+ /**
23
+ * Close socket.
24
+ *
25
+ * The opened$ and alive$ observables will emit false values.
26
+ */
27
+ close(): void;
28
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=motion-master-pub-sub-socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-master-pub-sub-socket.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/motion-master-pub-sub-socket.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { BehaviorSubject, Subject } from "rxjs";
2
+ import { MotionMasterPubSubSocket } from "./motion-master-pub-sub-socket";
3
+ import { MotionMasterMessage } from "./types";
4
+ export declare class MotionMasterPubSubWebSocket implements MotionMasterPubSubSocket {
5
+ readonly opened$: BehaviorSubject<boolean>;
6
+ readonly data$: Subject<[string, MotionMasterMessage]>;
7
+ private webSocket$?;
8
+ private _url?;
9
+ get url(): string | undefined;
10
+ open(url: string): void;
11
+ close(): void;
12
+ private createWebSocket;
13
+ }
@@ -0,0 +1,57 @@
1
+ import { BehaviorSubject, Subject } from "rxjs";
2
+ import { webSocket } from "rxjs/webSocket";
3
+ import { logger } from "./logger";
4
+ import { MotionMasterMessage } from "./types";
5
+ export class MotionMasterPubSubWebSocket {
6
+ constructor() {
7
+ this.opened$ = new BehaviorSubject(false);
8
+ this.data$ = new Subject();
9
+ }
10
+ get url() {
11
+ return this._url;
12
+ }
13
+ open(url) {
14
+ if (this.opened$.getValue() === true) {
15
+ throw new Error('MotionMasterPubSubWebSocket is already opened!');
16
+ }
17
+ this._url = url;
18
+ this.webSocket$ = this.createWebSocket(url);
19
+ this.webSocket$.subscribe({
20
+ next: (value) => this.data$.next(value),
21
+ error: () => {
22
+ // ignore
23
+ },
24
+ });
25
+ }
26
+ close() {
27
+ var _a;
28
+ (_a = this.webSocket$) === null || _a === void 0 ? void 0 : _a.unsubscribe();
29
+ }
30
+ createWebSocket(url) {
31
+ const decoder = new TextDecoder('utf-8');
32
+ const webSocketConfig = {
33
+ binaryType: 'arraybuffer',
34
+ closeObserver: {
35
+ next: () => {
36
+ this.opened$.next(false);
37
+ logger.info(`Connection closed ${url}`);
38
+ },
39
+ },
40
+ deserializer: (e) => {
41
+ const end = new Uint8Array(e.data, 0, 1)[0] + 1;
42
+ const topic = decoder.decode(e.data.slice(1, end)); // topic starts from the 2nd byte
43
+ const message = MotionMasterMessage.decode(new Uint8Array(e.data.slice(end)));
44
+ return [topic, message];
45
+ },
46
+ openObserver: {
47
+ next: () => {
48
+ this.opened$.next(true);
49
+ logger.info(`Connection opened ${url}`);
50
+ },
51
+ },
52
+ url,
53
+ };
54
+ return webSocket(webSocketConfig);
55
+ }
56
+ }
57
+ //# sourceMappingURL=motion-master-pub-sub-web-socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-master-pub-sub-web-socket.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/motion-master-pub-sub-web-socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,SAAS,EAA4C,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,OAAO,2BAA2B;IAAxC;QAEW,YAAO,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QAE9C,UAAK,GAAG,IAAI,OAAO,EAAiC,CAAC;IA4DhE,CAAC;IAtDC,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,GAAW;QACd,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;SACnE;QAED,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAEhB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAE5C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YACxB,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACvC,KAAK,EAAE,GAAG,EAAE;gBACV,SAAS;YACX,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK;;QACH,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IAEO,eAAe,CAAC,GAAW;QACjC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,eAAe,GAA0D;YAC7E,UAAU,EAAE,aAAa;YACzB,aAAa,EAAE;gBACb,IAAI,EAAE,GAAG,EAAE;oBACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;gBAC1C,CAAC;aACF;YACD,YAAY,EAAE,CAAC,CAA4B,EAAiC,EAAE;gBAC5E,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,iCAAiC;gBACrF,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC9E,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC1B,CAAC;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,GAAG,EAAE;oBACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;gBAC1C,CAAC;aACF;YACD,GAAG;SACJ,CAAC;QAEF,OAAO,SAAS,CAAC,eAAe,CAAC,CAAC;IACpC,CAAC;CAEF"}
@@ -0,0 +1,16 @@
1
+ import { BehaviorSubject, Subject } from "rxjs";
2
+ import { MotionMasterPubSubSocket } from "./motion-master-pub-sub-socket";
3
+ import { MotionMasterMessage } from "./types";
4
+ export declare class MotionMasterPubSubWorkerSocket implements MotionMasterPubSubSocket {
5
+ readonly worker: Worker;
6
+ opened$: BehaviorSubject<boolean>;
7
+ data$: Subject<[string, MotionMasterMessage]>;
8
+ readonly notification$: import("rxjs").Observable<MotionMasterMessage>;
9
+ readonly systemEvent$: import("rxjs").Observable<MotionMasterMessage.Status.SystemEvent>;
10
+ readonly deviceEvent$: import("rxjs").Observable<MotionMasterMessage.Status.DeviceEvent>;
11
+ private _url?;
12
+ constructor(worker: Worker);
13
+ get url(): string | undefined;
14
+ open(url: string): void;
15
+ close(): void;
16
+ }
@@ -0,0 +1,37 @@
1
+ import { BehaviorSubject, Subject } from "rxjs";
2
+ import { logger } from "./logger";
3
+ import { selectMotionMasterMessageByTopic, selectMotionMasterMessageStatusByKey } from "./operators";
4
+ export class MotionMasterPubSubWorkerSocket {
5
+ constructor(worker) {
6
+ this.worker = worker;
7
+ this.opened$ = new BehaviorSubject(false);
8
+ this.data$ = new Subject();
9
+ this.notification$ = this.data$.pipe(selectMotionMasterMessageByTopic('notification'));
10
+ this.systemEvent$ = this.notification$.pipe(selectMotionMasterMessageStatusByKey('systemEvent'));
11
+ this.deviceEvent$ = this.notification$.pipe(selectMotionMasterMessageStatusByKey('deviceEvent'));
12
+ }
13
+ get url() {
14
+ return this._url;
15
+ }
16
+ open(url) {
17
+ this._url = url;
18
+ this.worker.onmessage = ({ data }) => {
19
+ if ('opened' in data) {
20
+ const { opened } = data;
21
+ this.opened$.next(opened);
22
+ logger.info(opened ? `Opened pub/sub 🔌 ${url}` : `Closed pub/sub 🔌 ${url}`);
23
+ }
24
+ else if ('topic' in data) {
25
+ const { topic, messages } = data;
26
+ messages.forEach((message) => this.data$.next([topic, message]));
27
+ }
28
+ };
29
+ this.worker.postMessage({
30
+ open: { url }
31
+ });
32
+ }
33
+ close() {
34
+ this.worker.postMessage({ close: true });
35
+ }
36
+ }
37
+ //# sourceMappingURL=motion-master-pub-sub-worker-socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion-master-pub-sub-worker-socket.js","sourceRoot":"","sources":["../../../../../libs/motion-master-client/src/lib/motion-master-pub-sub-worker-socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,gCAAgC,EAAE,oCAAoC,EAAE,MAAM,aAAa,CAAC;AAGrG,MAAM,OAAO,8BAA8B;IAoBzC,YACkB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAnBhC,YAAO,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QAErC,UAAK,GAAG,IAAI,OAAO,EAAiC,CAAC;QAE5C,kBAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CACtC,gCAAgC,CAAC,cAAc,CAAC,CACjD,CAAC;QAEO,iBAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAC7C,oCAAoC,CAAyC,aAAa,CAAC,CAC5F,CAAC;QAEO,iBAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAC7C,oCAAoC,CAAyC,aAAa,CAAC,CAC5F,CAAC;IAME,CAAC;IAEL,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,GAAW;QACd,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAEhB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YACnC,IAAI,QAAQ,IAAI,IAAI,EAAE;gBACpB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;aAC/E;iBAAM,IAAI,OAAO,IAAI,IAAI,EAAE;gBAC1B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAuD,IAAI,CAAC;gBACrF,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;aAClE;QACH,CAAC,CAAA;QAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACtB,IAAI,EAAE,EAAE,GAAG,EAAE;SACd,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;CAEF"}