@hangtime/grip-connect 0.8.7 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -135,8 +135,8 @@ document.querySelector("#motherboard").addEventListener("click", async () => {
135
135
  - ✅ [Kilter Board](https://stevie-ray.github.io/hangtime-grip-connect/devices/kilterboard.html)
136
136
  - ✅ [Entralpi](https://stevie-ray.github.io/hangtime-grip-connect/devices/entralpi.html) / Lefu / Unique CW275 Scale
137
137
  - ✅ [PitchSix - Force Board](https://stevie-ray.github.io/hangtime-grip-connect/devices/forceboard.html)
138
+ - ✅ [Climbro](https://stevie-ray.github.io/hangtime-grip-connect/devices/climbro.html)
138
139
  - ➡️ [Forma - DUE](https://stevie-ray.github.io/hangtime-grip-connect/devices/due.html)
139
- - ➡️ [Climbro](https://stevie-ray.github.io/hangtime-grip-connect/devices/climbro.html)
140
140
  - ➡️ [Smartboard Climbing - mySmartBoard](https://stevie-ray.github.io/hangtime-grip-connect/devices/mysmartboard.html)
141
141
  - ➡️
142
142
  [Smartboard Climbing - SmartBoard Pro](https://stevie-ray.github.io/hangtime-grip-connect/devices/smartboard-pro.html)
@@ -165,21 +165,23 @@ npm install
165
165
  A special thank you to:
166
166
 
167
167
  - [@CassimLadha](https://github.com/CassimLadha) for sharing insights on reading the Motherboards data.
168
- - [@donaldharvey](https://github.com/donaldharvey) for a valuable example on connecting to the Motherboard.
168
+ - [@donaldharvey](https://github.com/donaldharvey) for a valuable example of connecting to the Motherboard.
169
169
  - [@ecstrema](https://github.com/ecstrema) for providing [examples](https://github.com/ecstrema/entralpi-games) on how
170
170
  to play games with the Entralpi.
171
171
  - [Tindeq](https://tindeq.com/) for providing an open [Progressor API](https://tindeq.com/progressor_api/).
172
172
  - [PitchSix](https://pitchsix.com/) for the [Force Board Portable Public API](https://pitchsix.com/pages/downloads).
173
173
  - [@StuartLittlefair](https://github.com/StuartLittlefair) for his
174
174
  [PyTindeq](https://github.com/StuartLittlefair/PyTindeq) implementation.
175
- - [@Phil9l](https://github.com/phil9l) for his research and providing a [blog](https://bazun.me/blog/kiterboard/) on how
176
- to connect with the Kilter Board.
175
+ - [@Phil9l](https://github.com/phil9l) for his research and providing a [blog post](https://bazun.me/blog/kiterboard/)
176
+ on how to connect with the Kilter Board.
177
177
  - [@1-max-1](https://github.com/1-max-1) for the docs on his Kilter Board
178
- [simulator](https://github.com/1-max-1/fake_kilter_board) that I coverted to
178
+ [simulator](https://github.com/1-max-1/fake_kilter_board) that I converted to
179
179
  [hangtime-arduino-kilterboard](https://github.com/Stevie-Ray/hangtime-arduino-kilterboard).
180
180
  - [@sebws](https://github.com/sebws) for a [code sample](https://github.com/sebws/Crane) of the Weiheng WH-C06 App.
181
181
  - [@olrut](https://github.com/olrut) for the React Native / Expo [CraneGrip](https://github.com/olrut/CraneGrip) example
182
182
  App.
183
+ - [@ninopelov](https://github.com/ninopelov) and the Climbro Team for testing and providing insights into their
184
+ protocol.
183
185
 
184
186
  ## Disclaimer
185
187
 
@@ -3,5 +3,10 @@ import type { IDevice } from "../device.interface.js";
3
3
  * Interface representing the Climbro device, extending the base Device interface.
4
4
  */
5
5
  export interface IClimbro extends IDevice {
6
+ /**
7
+ * Retrieves battery level from the device.
8
+ * @returns {Promise<string | undefined>} A Promise that resolves with the battery level.
9
+ */
10
+ battery(): Promise<string | undefined>;
6
11
  }
7
12
  //# sourceMappingURL=climbro.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"climbro.interface.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/device/climbro.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD;;GAEG;AAEH,MAAM,WAAW,QAAS,SAAQ,OAAO;CAAG"}
1
+ {"version":3,"file":"climbro.interface.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/device/climbro.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,OAAO;IACvC;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CACvC"}
@@ -2,10 +2,41 @@ import { Device } from "../device.model.js";
2
2
  import type { IClimbro } from "../../interfaces/device/climbro.interface.js";
3
3
  /**
4
4
  * Represents a Climbro device.
5
- * TODO: Add services, do you own a Climbro? Help us!
6
5
  * {@link https://climbro.com/}
7
6
  */
8
7
  export declare class Climbro extends Device implements IClimbro {
8
+ /**
9
+ * Battery constants
10
+ */
11
+ private static readonly minBatteryDisc;
12
+ private static readonly maxBatteryDisc;
13
+ private static readonly batRangeDisc;
14
+ private static readonly batLevelCoef;
15
+ /**
16
+ * Synchronization flag used to track the current data type being processed.
17
+ * Set to BAT_DAT when processing battery data, SENS_DAT when processing sensor data.
18
+ * @type {number}
19
+ * @private
20
+ */
21
+ private flagSynchro;
22
+ /**
23
+ * Current battery level percentage calculated from the device's battery voltage.
24
+ * @type {number}
25
+ * @private
26
+ */
27
+ private batteryLevel;
9
28
  constructor();
29
+ /**
30
+ * Retrieves battery level from the device.
31
+ * @returns {Promise<string | undefined>} A Promise that resolves with the battery level.
32
+ */
33
+ battery: () => Promise<string | undefined>;
34
+ /**
35
+ * Handles data received from the device, processes force measurements and battery data
36
+ * according to the Climbro protocol.
37
+ *
38
+ * @param {DataView} value - The notification event.
39
+ */
40
+ handleNotifications: (value: DataView) => void;
10
41
  }
11
42
  //# sourceMappingURL=climbro.model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"climbro.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/climbro.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAA;AAE5E;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,MAAO,YAAW,QAAQ;;CAOtD"}
1
+ {"version":3,"file":"climbro.model.d.ts","sourceRoot":"","sources":["../../../../src/models/device/climbro.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAA;AAoB5E;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,MAAO,YAAW,QAAQ;IACrD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAc;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAc;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAoD;IACxF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAEtE;;;;;OAKG;IACH,OAAO,CAAC,WAAW,CAAI;IAEvB;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAAI;;IAsBxB;;;OAGG;IACH,OAAO,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG9C;IAED;;;;;OAKG;IACM,mBAAmB,GAAI,OAAO,QAAQ,KAAG,IAAI,CA6ErD;CACF"}
@@ -1,19 +1,149 @@
1
1
  "use strict";
2
+ var _a;
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.Climbro = void 0;
4
5
  const device_model_js_1 = require("../device.model.js");
6
+ /**
7
+ * Climbro protocol constants
8
+ */
9
+ var ClimbroResponses;
10
+ (function (ClimbroResponses) {
11
+ /**
12
+ * 240 - Battery data marker
13
+ */
14
+ ClimbroResponses[ClimbroResponses["BAT_DAT"] = 240] = "BAT_DAT";
15
+ /**
16
+ * 245 - Sensor data marker
17
+ */
18
+ ClimbroResponses[ClimbroResponses["SENS_DAT"] = 245] = "SENS_DAT";
19
+ /**
20
+ * 246 - 36kg value
21
+ */
22
+ ClimbroResponses[ClimbroResponses["DAT_36KG"] = 246] = "DAT_36KG";
23
+ })(ClimbroResponses || (ClimbroResponses = {}));
5
24
  /**
6
25
  * Represents a Climbro device.
7
- * TODO: Add services, do you own a Climbro? Help us!
8
26
  * {@link https://climbro.com/}
9
27
  */
10
28
  class Climbro extends device_model_js_1.Device {
11
29
  constructor() {
12
30
  super({
13
- filters: [{ name: "Climbro" }],
14
- services: [],
31
+ filters: [{ namePrefix: "Climbro" }],
32
+ services: [
33
+ {
34
+ name: "UART Transparent Service",
35
+ id: "uart",
36
+ uuid: "49535343-fe7d-4ae5-8fa9-9fafd205e455",
37
+ characteristics: [
38
+ {
39
+ name: "Read/Notify",
40
+ id: "rx",
41
+ uuid: "49535343-1e4d-4bd9-ba61-23c647249616",
42
+ },
43
+ ],
44
+ },
45
+ ],
15
46
  });
47
+ /**
48
+ * Synchronization flag used to track the current data type being processed.
49
+ * Set to BAT_DAT when processing battery data, SENS_DAT when processing sensor data.
50
+ * @type {number}
51
+ * @private
52
+ */
53
+ this.flagSynchro = 0;
54
+ /**
55
+ * Current battery level percentage calculated from the device's battery voltage.
56
+ * @type {number}
57
+ * @private
58
+ */
59
+ this.batteryLevel = 0;
60
+ /**
61
+ * Retrieves battery level from the device.
62
+ * @returns {Promise<string | undefined>} A Promise that resolves with the battery level.
63
+ */
64
+ this.battery = async () => {
65
+ // Battery level is continuously updated via notifications
66
+ return this.batteryLevel.toString();
67
+ };
68
+ /**
69
+ * Handles data received from the device, processes force measurements and battery data
70
+ * according to the Climbro protocol.
71
+ *
72
+ * @param {DataView} value - The notification event.
73
+ */
74
+ this.handleNotifications = (value) => {
75
+ if (value) {
76
+ // Update timestamp
77
+ this.updateTimestamp();
78
+ if (value.buffer) {
79
+ const receivedTime = Date.now();
80
+ // Convert DataView to Uint8Array for easier processing
81
+ const buffer = new Uint8Array(value.buffer);
82
+ const byteCount = buffer.length;
83
+ for (let i = 0; i < byteCount; i++) {
84
+ let signalValue = buffer[i];
85
+ // Check for battery data marker
86
+ if (signalValue === ClimbroResponses.BAT_DAT) {
87
+ this.flagSynchro = ClimbroResponses.BAT_DAT;
88
+ continue;
89
+ }
90
+ // Check for sensor data marker
91
+ if (signalValue === ClimbroResponses.SENS_DAT) {
92
+ this.flagSynchro = ClimbroResponses.SENS_DAT;
93
+ continue;
94
+ }
95
+ // Check if signal is the reserved word for 36kg and convert it
96
+ if (signalValue === ClimbroResponses.DAT_36KG) {
97
+ signalValue = 36;
98
+ }
99
+ // Process battery level signal
100
+ if (this.flagSynchro === ClimbroResponses.BAT_DAT) {
101
+ this.batteryLevel = _a.batLevelCoef * (signalValue - _a.minBatteryDisc);
102
+ continue;
103
+ }
104
+ // Process force signal
105
+ if (this.flagSynchro === ClimbroResponses.SENS_DAT) {
106
+ // Process force data inline
107
+ const forceValue = signalValue;
108
+ const numericData = forceValue - this.applyTare(forceValue);
109
+ // Add data to downloadable array
110
+ this.downloadPackets.push({
111
+ received: receivedTime,
112
+ sampleNum: this.dataPointCount,
113
+ battRaw: this.batteryLevel,
114
+ samples: [forceValue],
115
+ masses: [numericData],
116
+ });
117
+ // Check for max weight
118
+ this.massMax = Math.max(Number(this.massMax), Number(numericData)).toFixed(1);
119
+ // Update running sum and count
120
+ const currentMassTotal = Math.max(-1000, Number(numericData));
121
+ this.massTotalSum += currentMassTotal;
122
+ this.dataPointCount++;
123
+ // Calculate the average dynamically
124
+ this.massAverage = (this.massTotalSum / this.dataPointCount).toFixed(1);
125
+ // Check if device is being used
126
+ this.activityCheck(numericData);
127
+ this.notifyCallback({
128
+ massMax: this.massMax,
129
+ massAverage: this.massAverage,
130
+ massTotal: Math.max(-1000, numericData).toFixed(1),
131
+ });
132
+ continue;
133
+ }
134
+ }
135
+ }
136
+ }
137
+ };
16
138
  }
17
139
  }
18
140
  exports.Climbro = Climbro;
141
+ _a = Climbro;
142
+ /**
143
+ * Battery constants
144
+ */
145
+ Climbro.minBatteryDisc = 112;
146
+ Climbro.maxBatteryDisc = 230;
147
+ Climbro.batRangeDisc = _a.maxBatteryDisc - _a.minBatteryDisc;
148
+ Climbro.batLevelCoef = 100 / _a.batRangeDisc;
19
149
  //# sourceMappingURL=climbro.model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"climbro.model.js","sourceRoot":"","sources":["../../../../src/models/device/climbro.model.ts"],"names":[],"mappings":";;;AAAA,wDAA2C;AAG3C;;;;GAIG;AACH,MAAa,OAAQ,SAAQ,wBAAM;IACjC;QACE,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC9B,QAAQ,EAAE,EAAE;SACb,CAAC,CAAA;IACJ,CAAC;CACF;AAPD,0BAOC"}
1
+ {"version":3,"file":"climbro.model.js","sourceRoot":"","sources":["../../../../src/models/device/climbro.model.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,10 @@ import type { IDevice } from "../device.interface.js";
3
3
  * Interface representing the Climbro device, extending the base Device interface.
4
4
  */
5
5
  export interface IClimbro extends IDevice {
6
+ /**
7
+ * Retrieves battery level from the device.
8
+ * @returns {Promise<string | undefined>} A Promise that resolves with the battery level.
9
+ */
10
+ battery(): Promise<string | undefined>;
6
11
  }
7
12
  //# sourceMappingURL=climbro.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"climbro.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device/climbro.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD;;GAEG;AAEH,MAAM,WAAW,QAAS,SAAQ,OAAO;CAAG"}
1
+ {"version":3,"file":"climbro.interface.d.ts","sourceRoot":"","sources":["../../../src/interfaces/device/climbro.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,OAAO;IACvC;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CACvC"}
@@ -2,10 +2,41 @@ import { Device } from "../device.model.js";
2
2
  import type { IClimbro } from "../../interfaces/device/climbro.interface.js";
3
3
  /**
4
4
  * Represents a Climbro device.
5
- * TODO: Add services, do you own a Climbro? Help us!
6
5
  * {@link https://climbro.com/}
7
6
  */
8
7
  export declare class Climbro extends Device implements IClimbro {
8
+ /**
9
+ * Battery constants
10
+ */
11
+ private static readonly minBatteryDisc;
12
+ private static readonly maxBatteryDisc;
13
+ private static readonly batRangeDisc;
14
+ private static readonly batLevelCoef;
15
+ /**
16
+ * Synchronization flag used to track the current data type being processed.
17
+ * Set to BAT_DAT when processing battery data, SENS_DAT when processing sensor data.
18
+ * @type {number}
19
+ * @private
20
+ */
21
+ private flagSynchro;
22
+ /**
23
+ * Current battery level percentage calculated from the device's battery voltage.
24
+ * @type {number}
25
+ * @private
26
+ */
27
+ private batteryLevel;
9
28
  constructor();
29
+ /**
30
+ * Retrieves battery level from the device.
31
+ * @returns {Promise<string | undefined>} A Promise that resolves with the battery level.
32
+ */
33
+ battery: () => Promise<string | undefined>;
34
+ /**
35
+ * Handles data received from the device, processes force measurements and battery data
36
+ * according to the Climbro protocol.
37
+ *
38
+ * @param {DataView} value - The notification event.
39
+ */
40
+ handleNotifications: (value: DataView) => void;
10
41
  }
11
42
  //# sourceMappingURL=climbro.model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"climbro.model.d.ts","sourceRoot":"","sources":["../../../src/models/device/climbro.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAA;AAE5E;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,MAAO,YAAW,QAAQ;;CAOtD"}
1
+ {"version":3,"file":"climbro.model.d.ts","sourceRoot":"","sources":["../../../src/models/device/climbro.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAA;AAoB5E;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,MAAO,YAAW,QAAQ;IACrD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAc;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAc;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAoD;IACxF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAkC;IAEtE;;;;;OAKG;IACH,OAAO,CAAC,WAAW,CAAI;IAEvB;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAAI;;IAsBxB;;;OAGG;IACH,OAAO,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG9C;IAED;;;;;OAKG;IACM,mBAAmB,GAAI,OAAO,QAAQ,KAAG,IAAI,CA6ErD;CACF"}
@@ -1,15 +1,143 @@
1
1
  import { Device } from "../device.model.js";
2
+ /**
3
+ * Climbro protocol constants
4
+ */
5
+ var ClimbroResponses;
6
+ (function (ClimbroResponses) {
7
+ /**
8
+ * 240 - Battery data marker
9
+ */
10
+ ClimbroResponses[ClimbroResponses["BAT_DAT"] = 240] = "BAT_DAT";
11
+ /**
12
+ * 245 - Sensor data marker
13
+ */
14
+ ClimbroResponses[ClimbroResponses["SENS_DAT"] = 245] = "SENS_DAT";
15
+ /**
16
+ * 246 - 36kg value
17
+ */
18
+ ClimbroResponses[ClimbroResponses["DAT_36KG"] = 246] = "DAT_36KG";
19
+ })(ClimbroResponses || (ClimbroResponses = {}));
2
20
  /**
3
21
  * Represents a Climbro device.
4
- * TODO: Add services, do you own a Climbro? Help us!
5
22
  * {@link https://climbro.com/}
6
23
  */
7
24
  export class Climbro extends Device {
25
+ /**
26
+ * Battery constants
27
+ */
28
+ static minBatteryDisc = 112;
29
+ static maxBatteryDisc = 230;
30
+ static batRangeDisc = this.maxBatteryDisc - this.minBatteryDisc;
31
+ static batLevelCoef = 100 / this.batRangeDisc;
32
+ /**
33
+ * Synchronization flag used to track the current data type being processed.
34
+ * Set to BAT_DAT when processing battery data, SENS_DAT when processing sensor data.
35
+ * @type {number}
36
+ * @private
37
+ */
38
+ flagSynchro = 0;
39
+ /**
40
+ * Current battery level percentage calculated from the device's battery voltage.
41
+ * @type {number}
42
+ * @private
43
+ */
44
+ batteryLevel = 0;
8
45
  constructor() {
9
46
  super({
10
- filters: [{ name: "Climbro" }],
11
- services: [],
47
+ filters: [{ namePrefix: "Climbro" }],
48
+ services: [
49
+ {
50
+ name: "UART Transparent Service",
51
+ id: "uart",
52
+ uuid: "49535343-fe7d-4ae5-8fa9-9fafd205e455",
53
+ characteristics: [
54
+ {
55
+ name: "Read/Notify",
56
+ id: "rx",
57
+ uuid: "49535343-1e4d-4bd9-ba61-23c647249616",
58
+ },
59
+ ],
60
+ },
61
+ ],
12
62
  });
13
63
  }
64
+ /**
65
+ * Retrieves battery level from the device.
66
+ * @returns {Promise<string | undefined>} A Promise that resolves with the battery level.
67
+ */
68
+ battery = async () => {
69
+ // Battery level is continuously updated via notifications
70
+ return this.batteryLevel.toString();
71
+ };
72
+ /**
73
+ * Handles data received from the device, processes force measurements and battery data
74
+ * according to the Climbro protocol.
75
+ *
76
+ * @param {DataView} value - The notification event.
77
+ */
78
+ handleNotifications = (value) => {
79
+ if (value) {
80
+ // Update timestamp
81
+ this.updateTimestamp();
82
+ if (value.buffer) {
83
+ const receivedTime = Date.now();
84
+ // Convert DataView to Uint8Array for easier processing
85
+ const buffer = new Uint8Array(value.buffer);
86
+ const byteCount = buffer.length;
87
+ for (let i = 0; i < byteCount; i++) {
88
+ let signalValue = buffer[i];
89
+ // Check for battery data marker
90
+ if (signalValue === ClimbroResponses.BAT_DAT) {
91
+ this.flagSynchro = ClimbroResponses.BAT_DAT;
92
+ continue;
93
+ }
94
+ // Check for sensor data marker
95
+ if (signalValue === ClimbroResponses.SENS_DAT) {
96
+ this.flagSynchro = ClimbroResponses.SENS_DAT;
97
+ continue;
98
+ }
99
+ // Check if signal is the reserved word for 36kg and convert it
100
+ if (signalValue === ClimbroResponses.DAT_36KG) {
101
+ signalValue = 36;
102
+ }
103
+ // Process battery level signal
104
+ if (this.flagSynchro === ClimbroResponses.BAT_DAT) {
105
+ this.batteryLevel = Climbro.batLevelCoef * (signalValue - Climbro.minBatteryDisc);
106
+ continue;
107
+ }
108
+ // Process force signal
109
+ if (this.flagSynchro === ClimbroResponses.SENS_DAT) {
110
+ // Process force data inline
111
+ const forceValue = signalValue;
112
+ const numericData = forceValue - this.applyTare(forceValue);
113
+ // Add data to downloadable array
114
+ this.downloadPackets.push({
115
+ received: receivedTime,
116
+ sampleNum: this.dataPointCount,
117
+ battRaw: this.batteryLevel,
118
+ samples: [forceValue],
119
+ masses: [numericData],
120
+ });
121
+ // Check for max weight
122
+ this.massMax = Math.max(Number(this.massMax), Number(numericData)).toFixed(1);
123
+ // Update running sum and count
124
+ const currentMassTotal = Math.max(-1000, Number(numericData));
125
+ this.massTotalSum += currentMassTotal;
126
+ this.dataPointCount++;
127
+ // Calculate the average dynamically
128
+ this.massAverage = (this.massTotalSum / this.dataPointCount).toFixed(1);
129
+ // Check if device is being used
130
+ this.activityCheck(numericData);
131
+ this.notifyCallback({
132
+ massMax: this.massMax,
133
+ massAverage: this.massAverage,
134
+ massTotal: Math.max(-1000, numericData).toFixed(1),
135
+ });
136
+ continue;
137
+ }
138
+ }
139
+ }
140
+ }
141
+ };
14
142
  }
15
143
  //# sourceMappingURL=climbro.model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"climbro.model.js","sourceRoot":"","sources":["../../../src/models/device/climbro.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAG3C;;;;GAIG;AACH,MAAM,OAAO,OAAQ,SAAQ,MAAM;IACjC;QACE,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC9B,QAAQ,EAAE,EAAE;SACb,CAAC,CAAA;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"climbro.model.js","sourceRoot":"","sources":["../../../src/models/device/climbro.model.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/interfaces/base.interface.ts","../src/interfaces/callback.interface.ts","../src/interfaces/command.interface.ts","../src/interfaces/device.interface.ts","../src/interfaces/device/climbro.interface.ts","../src/interfaces/device/entralpi.interface.ts","../src/interfaces/device/forceboard.interface.ts","../src/interfaces/device/kilterboard.interface.ts","../src/interfaces/device/motherboard.interface.ts","../src/interfaces/device/mysmartboard.interface.ts","../src/interfaces/device/progressor.interface.ts","../src/interfaces/device/smartboard-pro.interface.ts","../src/interfaces/device/wh-c06.interface.ts","../src/interfaces/index.ts","../src/models/base.model.ts","../src/interfaces/download.interface.ts","../src/models/device.model.ts","../src/models/device/climbro.model.ts","../src/models/device/entralpi.model.ts","../src/models/device/forceboard.model.ts","../src/models/device/kilterboard.model.ts","../src/models/device/motherboard.model.ts","../src/models/device/mysmartboard.model.ts","../src/models/device/progressor.model.ts","../src/models/device/smartboard-pro.model.ts","../src/models/device/wh-c06.model.ts","../src/models/index.ts","../src/index.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/web-bluetooth/index.d.ts"],"fileIdsList":[[80,120,123],[80,122,123],[123],[80,123,128,157],[80,123,124,129,135,136,143,154,165],[80,123,124,125,135,143],[80,123],[75,76,77,80,123],[80,123,126,166],[80,123,127,128,136,144],[80,123,128,154,162],[80,123,129,131,135,143],[80,122,123,130],[80,123,131,132],[80,123,133,135],[80,122,123,135],[80,123,135,136,137,154,165],[80,123,135,136,137,150,154,157],[80,118,123],[80,123,131,135,138,143,154,165],[80,123,135,136,138,139,143,154,162,165],[80,123,138,140,154,162,165],[78,79,80,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[80,123,135,141],[80,123,142,165,170],[80,123,131,135,143,154],[80,123,144],[80,123,145],[80,122,123,146],[80,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[80,123,148],[80,123,149],[80,123,135,150,151],[80,123,150,152,166,168],[80,123,135,154,155,157],[80,123,156,157],[80,123,154,155],[80,123,157],[80,123,158],[80,120,123,154,159],[80,123,135,160,161],[80,123,160,161],[80,123,128,143,154,162],[80,123,163],[80,123,143,164],[80,123,138,149,165],[80,123,128,166],[80,123,154,167],[80,123,142,168],[80,123,169],[80,123,135,137,146,154,157,165,168,170],[80,123,154,171],[80,90,94,123,165],[80,90,123,154,165],[80,85,123],[80,87,90,123,162,165],[80,123,143,162],[80,123,172],[80,85,123,172],[80,87,90,123,143,165],[80,82,83,86,89,123,135,154,165],[80,90,97,123],[80,82,88,123],[80,90,111,112,123],[80,86,90,123,157,165,172],[80,111,123,172],[80,84,85,123,172],[80,90,123],[80,84,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,117,123],[80,90,105,123],[80,90,97,98,123],[80,88,90,98,99,123],[80,89,123],[80,82,85,90,123],[80,90,94,98,99,123],[80,94,123],[80,88,90,93,123,165],[80,82,87,90,97,123],[80,123,154],[80,85,90,111,123,170,172],[60,73,80,123],[47,48,49,80,123],[50,80,123],[51,52,53,54,55,56,57,58,59,80,123],[47,80,123],[48,49,50,61,62,80,123],[51,63,80,123],[52,63,80,123],[53,63,80,123],[54,63,80,123],[55,62,63,80,123],[56,63,80,123],[57,63,80,123],[58,63,80,123],[59,63,80,123],[64,65,66,67,68,69,70,71,72,80,123]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b2c7019176603bbc25a7b7382abfdd9ec4d542d317c84a9c3e5c456fa2eb1dc","signature":"f5e5f57d6b83a4c622202fbe18fe5aab96418c8d9f428f0e58bbf345b4d2ebd6"},{"version":"f7652421c74a329aa62451d0bda1ec60a20c2ec9b0479c600f863d9a0b0c2bb4","signature":"4588b05f254dbeab5e52ba52abc28fc02fea0b76a898d360f75da7d2c70a3fd6"},{"version":"4653a15aa3a6f670681c5f4cf328c9a54a4796026022331f0a89ce3ea221416b","signature":"d1bfd3aae1f5df4a887a6b15b9108b21491ef2e128eaeaaed8402097b47db248"},{"version":"736741d262b70fbfb8823fc55d24af3fcb472340f64e26487ba5b24a1518181e","signature":"44f35a6a7e2191ff33a85197124aaa6ac43366cabdad7cbd7e85f9252d6b734d"},{"version":"6ed9dd1aa267cb1dd3aaab910bcbccff64ee4331c037a64febfbbe12aea2d985","signature":"636e482238a024d8be1ebb6bf9a62346882251bc22b2bba004269cc2bc81eaa3"},{"version":"c44a87a42f6bcb156a6f05f6d052981814dec93a767ab788fc2127ccb8e34288","signature":"17ac11cd52ca09fe17977856c73c88de3a534fd10fa1536feb703c4f7d58fd62"},{"version":"0b325d4e15e3962552fd67dce8caf45c58c15ae5b5a4925caee7eac4301f41e1","signature":"e5d59f3ca9cc856e16f3a06dc287676114d316e189a442d29af7700ced922122"},{"version":"ca268ad9d02512c8ef9c7f452dfd0e3c990145fec5d972715159cd49484ae4f5","signature":"69f11e951b3aad214d46c952e8c1c36ae596f0846a8eb144387d5e2d176e4925"},{"version":"b265f05241204f0f510daa4b06513ffc655229b5a66980c5c2e5edf8ee370856","signature":"0bf44250b57d40057f8bc590dd6dad12bba581b6f5b3a7a41ab01e224802441d"},{"version":"db7cb1ed194324cf9b03d5bb89221cea97958700b791076e972161d99039dabe","signature":"09f2d4de400cd1c148736c181c188a912af5cbe0f20cb64e7f4e1e3eb4829b56"},{"version":"3f9ca2181cf55e9d6bf3b93015dbde4e4b5685dbad91ec9c5198fcbaf9b3ad4a","signature":"7e00536ca64087a35d309f242852c2c3853b9c10a7bf91dc6a34e997385ab699"},{"version":"3fd2fcd6b0be11ddbda2a0b11757cd70b5dc2b9f5d10c491666d5de7aa07bb0d","signature":"361d220f7d23737de56907280d1278b54ae6791d33ac4ae5686b148ce1096804"},{"version":"7b1d80b0e6833e6e3c4b54c22ab0d44d17631ffb314e5822080ef1079a7518e4","signature":"624db6054557c96907cf99c5e523cefa64d4f07baa9c4759fa8554fa1ac36536"},{"version":"54b10c877ca3871d011b7748bd73b5a86e87238e58dc13160b7a8679087d0855","signature":"44cd9502cc68127257bcc6be3e0b5fa303c286622aec5c1a34608f7c5e5ebc0e"},{"version":"10f9c9cf3b09f10d852bd55d83a77618ab621534d95275b3fae72900457c2c1e","signature":"66e0c458186030248a56a53930888f53e4447afc0790ead6a5865eedfb5c62cd"},{"version":"169e6b63acbd8e5a94c0188f60edf746764967b8420f9b6853352b051eafe223","signature":"2f7f7400ceabd929eb7aeeb25d47f7c7cf656dd0aef7e61b1481fb1920d60a84"},{"version":"fd0ba153405ef691c93e466c4d4b70275a7f041608b6f37879fa587e262974b4","signature":"ea0830a3bde7226b76f2e8a7aada9de6ac57bf8f64fc77cb2143b4864a65ad28"},{"version":"7f231ee7574afeaa951499b7878d316591c4e48dc977195099ae0338ca81ffbf","signature":"0e36518fa0ed6485eb1f6eb84e4af194e5f03bc34db8dc0f7ad76387360cc43b"},{"version":"c4de3f56023ae5fab7ddbb081b1c6bc10145b987ca0647900b2ad80cc14dbccd","signature":"4c1050186620bd123c10519af08a67954a1a1b5cff40e52011a72309ee353b88"},{"version":"e00c72413a802850290dafd123df95985a27bdda695c6db24db7f9a4e7edb2d7","signature":"569667e623961115467f3116b9159141e3a85361d1090418d1be6a84db527240"},{"version":"9e12832a45f178e6425a9b6c7bdda700f4107f71c914f88d088ec6fe49a72f77","signature":"b4d881e1e51b4ec6b369d19b72fb0b4cec2897ef4f121aee8d1d8305edac9a63"},{"version":"96c939a7dfe6c2b4f8a497ea09f3dc95def18f2646d585fd947c4334b375264c","signature":"5015d1773db674e3de470492cb56659900f8d991fe3542c422aef85b43902bb6"},{"version":"ee58b5a479ad7ec308cab5f15c71dfcc21333d9c48920761d4e7640fc143ead7","signature":"34a1ba5ef59b48bb4a6ed187d3d4f56feba13d56e461e8ec1851464a3103c294"},{"version":"479b6be0ed9448d20ad2055cabfc48386463e579c1e1489a582f257314cf458d","signature":"1515b02fa74de0740fa8d603e07ceffdc63c2919c9895bc4d84576e08cdd518a"},{"version":"fad7047931cf5eeadcf9fa3996d41cd8c3942dd5e254eb0a859537296b3a6689","signature":"f9c1322b7ee782a27c342cac529e275a34023fb1a48e4d58acb8a1ae83c7d3d4"},{"version":"851537b6054430305d16114e25c0e714fc10ae7e1eb4363f320438657bed2f1e","signature":"2d793f62dc54a74a4310c12484617a944009a1868f65e6f9cf88828f1c7a8a9a"},{"version":"c77e9392299d0899b26b27bd9b4cc91f9f7130284a15b4ccffe681199aa9360c","signature":"bab3f0f63c7100a95e8d05e95c894d0483022f173d9d76a967ca5fcb1a4c0037"},{"version":"ce7810df65d37a398657d3380294514303ab6f403c18e1c82c91a8bbaf3a8c78","signature":"4581287cfea12ea309aa8920971ed8f8901114e9d3730af2138efdec17dc0812"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"49a5a44f2e68241a1d2bd9ec894535797998841c09729e506a7cbfcaa40f2180","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"1ca84b44ad1d8e4576f24904d8b95dd23b94ea67e1575f89614ac90062fc67f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d586db0a09a9495ebb5dece28f54df9684bfbd6e1f568426ca153126dac4a40","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"567b7f607f400873151d7bc63a049514b53c3c00f5f56e9e95695d93b66a138e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"84c1930e33d1bb12ad01bcbe11d656f9646bd21b2fb2afd96e8e10615a021aef","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"2bf469abae4cc9c0f340d4e05d9d26e37f936f9c8ca8f007a6534f109dcc77e4","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c21aaa8257d7950a5b75a251d9075b6a371208fc948c9c8402f6690ef3b5b55","impliedFormat":1},{"version":"b5895e6353a5d708f55d8685c38a235c3a6d8138e374dee8ceb8ffde5aa8002a","impliedFormat":1},{"version":"54c4f21f578864961efc94e8f42bc893a53509e886370ec7dd602e0151b9266c","impliedFormat":1},{"version":"de735eca2c51dd8b860254e9fdb6d9ec19fe402dfe597c23090841ce3937cfc5","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5155da3047ef977944d791a2188ff6e6c225f6975cc1910ab7bb6838ab84cede","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"e16d218a30f6a6810b57f7e968124eaa08c7bb366133ea34bbf01e7cd6b8c0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb8692dea24c27821f77e397272d9ed2eda0b95e4a75beb0fdda31081d15a8ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"5b6844ad931dcc1d3aca53268f4bd671428421464b1286746027aede398094f2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"461e54289e6287e8494a0178ba18182acce51a02bca8dea219149bf2cf96f105","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"e31e51c55800014d926e3f74208af49cb7352803619855c89296074d1ecbb524","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"dfb96ba5177b68003deec9e773c47257da5c4c8a74053d8956389d832df72002","affectsGlobalScope":true,"impliedFormat":1},{"version":"92d3070580cf72b4bb80959b7f16ede9a3f39e6f4ef2ac87cfa4561844fdc69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"613deebaec53731ff6b74fe1a89f094b708033db6396b601df3e6d5ab0ec0a47","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"e56eb632f0281c9f8210eb8c86cc4839a427a4ffffcfd2a5e40b956050b3e042","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"28ca156f93e9f2f073d825452a114d106291d123564ca49af5b108ba20311011","affectsGlobalScope":true,"impliedFormat":1}],"root":[[47,74]],"options":{"alwaysStrict":true,"composite":true,"declaration":true,"declarationMap":true,"exactOptionalPropertyTypes":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitOverride":true,"noImplicitReturns":true,"noImplicitThis":true,"noPropertyAccessFromIndexSignature":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./cjs","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictBindCallApply":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":true,"target":6,"verbatimModuleSyntax":false},"referencedMap":[[120,1],[121,1],[122,2],[80,3],[123,4],[124,5],[125,6],[75,7],[78,8],[76,7],[77,7],[126,9],[127,10],[128,11],[129,12],[130,13],[131,14],[132,14],[134,7],[133,15],[135,16],[136,17],[137,18],[119,19],[79,7],[138,20],[139,21],[140,22],[172,23],[141,24],[142,25],[143,26],[144,27],[145,28],[146,29],[147,30],[148,31],[149,32],[150,33],[151,33],[152,34],[153,7],[154,35],[156,36],[155,37],[157,38],[158,39],[159,40],[160,41],[161,42],[162,43],[163,44],[164,45],[165,46],[166,47],[167,48],[168,49],[169,50],[170,51],[171,52],[173,7],[81,7],[45,7],[46,7],[8,7],[10,7],[9,7],[2,7],[11,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[3,7],[19,7],[20,7],[4,7],[21,7],[25,7],[22,7],[23,7],[24,7],[26,7],[27,7],[28,7],[5,7],[29,7],[30,7],[31,7],[32,7],[6,7],[36,7],[33,7],[34,7],[35,7],[37,7],[7,7],[38,7],[43,7],[44,7],[39,7],[40,7],[41,7],[42,7],[1,7],[97,53],[107,54],[96,53],[117,55],[88,56],[87,57],[116,58],[110,59],[115,60],[90,61],[104,62],[89,63],[113,64],[85,65],[84,58],[114,66],[86,67],[91,68],[92,7],[95,68],[82,7],[118,69],[108,70],[99,71],[100,72],[102,73],[98,74],[101,75],[111,58],[93,76],[94,77],[103,78],[83,79],[106,70],[105,68],[109,7],[112,80],[74,81],[47,7],[48,7],[49,7],[50,82],[51,83],[52,83],[53,83],[54,83],[55,83],[56,83],[57,83],[58,83],[59,83],[62,7],[60,84],[61,85],[63,86],[64,87],[65,88],[66,89],[67,90],[68,91],[69,92],[70,93],[71,94],[72,95],[73,96]],"latestChangedDtsFile":"./cjs/index.d.ts","version":"5.9.2"}
1
+ {"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/interfaces/base.interface.ts","../src/interfaces/callback.interface.ts","../src/interfaces/command.interface.ts","../src/interfaces/device.interface.ts","../src/interfaces/device/climbro.interface.ts","../src/interfaces/device/entralpi.interface.ts","../src/interfaces/device/forceboard.interface.ts","../src/interfaces/device/kilterboard.interface.ts","../src/interfaces/device/motherboard.interface.ts","../src/interfaces/device/mysmartboard.interface.ts","../src/interfaces/device/progressor.interface.ts","../src/interfaces/device/smartboard-pro.interface.ts","../src/interfaces/device/wh-c06.interface.ts","../src/interfaces/index.ts","../src/models/base.model.ts","../src/interfaces/download.interface.ts","../src/models/device.model.ts","../src/models/device/climbro.model.ts","../src/models/device/entralpi.model.ts","../src/models/device/forceboard.model.ts","../src/models/device/kilterboard.model.ts","../src/models/device/motherboard.model.ts","../src/models/device/mysmartboard.model.ts","../src/models/device/progressor.model.ts","../src/models/device/smartboard-pro.model.ts","../src/models/device/wh-c06.model.ts","../src/models/index.ts","../src/index.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/web-bluetooth/index.d.ts"],"fileIdsList":[[80,120,123],[80,122,123],[123],[80,123,128,157],[80,123,124,129,135,143,154,165],[80,123,124,125,135,143],[80,123],[75,76,77,80,123],[80,123,126,166],[80,123,127,128,136,144],[80,123,128,154,162],[80,123,129,131,135,143],[80,122,123,130],[80,123,131,132],[80,123,133,135],[80,122,123,135],[80,123,135,136,137,154,165],[80,123,135,136,137,150,154,157],[80,118,123],[80,123,131,135,138,143,154,165],[80,123,135,136,138,139,143,154,162,165],[80,123,138,140,154,162,165],[78,79,80,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[80,123,135,141],[80,123,142,165,170],[80,123,131,135,143,154],[80,123,144],[80,123,145],[80,122,123,146],[80,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[80,123,148],[80,123,149],[80,123,135,150,151],[80,123,150,152,166,168],[80,123,135,154,155,157],[80,123,156,157],[80,123,154,155],[80,123,157],[80,123,158],[80,120,123,154,159],[80,123,135,160,161],[80,123,160,161],[80,123,128,143,154,162],[80,123,163],[80,123,143,164],[80,123,138,149,165],[80,123,128,166],[80,123,154,167],[80,123,142,168],[80,123,169],[80,123,135,137,146,154,157,165,168,170],[80,123,154,171],[80,90,94,123,165],[80,90,123,154,165],[80,85,123],[80,87,90,123,162,165],[80,123,143,162],[80,123,172],[80,85,123,172],[80,87,90,123,143,165],[80,82,83,86,89,123,135,154,165],[80,90,97,123],[80,82,88,123],[80,90,111,112,123],[80,86,90,123,157,165,172],[80,111,123,172],[80,84,85,123,172],[80,90,123],[80,84,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,112,113,114,115,116,117,123],[80,90,105,123],[80,90,97,98,123],[80,88,90,98,99,123],[80,89,123],[80,82,85,90,123],[80,90,94,98,99,123],[80,94,123],[80,88,90,93,123,165],[80,82,87,90,97,123],[80,123,154],[80,85,90,111,123,170,172],[60,73,80,123],[47,48,49,80,123],[50,80,123],[51,52,53,54,55,56,57,58,59,80,123],[47,80,123],[48,49,50,61,62,80,123],[51,63,80,123],[52,63,80,123],[53,63,80,123],[54,63,80,123],[55,62,63,80,123],[56,63,80,123],[57,63,80,123],[58,63,80,123],[59,63,80,123],[64,65,66,67,68,69,70,71,72,80,123]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b2c7019176603bbc25a7b7382abfdd9ec4d542d317c84a9c3e5c456fa2eb1dc","signature":"f5e5f57d6b83a4c622202fbe18fe5aab96418c8d9f428f0e58bbf345b4d2ebd6"},{"version":"f7652421c74a329aa62451d0bda1ec60a20c2ec9b0479c600f863d9a0b0c2bb4","signature":"4588b05f254dbeab5e52ba52abc28fc02fea0b76a898d360f75da7d2c70a3fd6"},{"version":"4653a15aa3a6f670681c5f4cf328c9a54a4796026022331f0a89ce3ea221416b","signature":"d1bfd3aae1f5df4a887a6b15b9108b21491ef2e128eaeaaed8402097b47db248"},{"version":"736741d262b70fbfb8823fc55d24af3fcb472340f64e26487ba5b24a1518181e","signature":"44f35a6a7e2191ff33a85197124aaa6ac43366cabdad7cbd7e85f9252d6b734d"},{"version":"fd4ea31eaf31ff6a6946072d194da9327c0fe1bc4a8ea74e5f7298113de2d7da","signature":"9eb7caf07e2747176aa6d2300d54cd6c8b797eeec7bef2ab3ca9521431c39cf5"},{"version":"c44a87a42f6bcb156a6f05f6d052981814dec93a767ab788fc2127ccb8e34288","signature":"17ac11cd52ca09fe17977856c73c88de3a534fd10fa1536feb703c4f7d58fd62"},{"version":"0b325d4e15e3962552fd67dce8caf45c58c15ae5b5a4925caee7eac4301f41e1","signature":"e5d59f3ca9cc856e16f3a06dc287676114d316e189a442d29af7700ced922122"},{"version":"ca268ad9d02512c8ef9c7f452dfd0e3c990145fec5d972715159cd49484ae4f5","signature":"69f11e951b3aad214d46c952e8c1c36ae596f0846a8eb144387d5e2d176e4925"},{"version":"b265f05241204f0f510daa4b06513ffc655229b5a66980c5c2e5edf8ee370856","signature":"0bf44250b57d40057f8bc590dd6dad12bba581b6f5b3a7a41ab01e224802441d"},{"version":"db7cb1ed194324cf9b03d5bb89221cea97958700b791076e972161d99039dabe","signature":"09f2d4de400cd1c148736c181c188a912af5cbe0f20cb64e7f4e1e3eb4829b56"},{"version":"3f9ca2181cf55e9d6bf3b93015dbde4e4b5685dbad91ec9c5198fcbaf9b3ad4a","signature":"7e00536ca64087a35d309f242852c2c3853b9c10a7bf91dc6a34e997385ab699"},{"version":"3fd2fcd6b0be11ddbda2a0b11757cd70b5dc2b9f5d10c491666d5de7aa07bb0d","signature":"361d220f7d23737de56907280d1278b54ae6791d33ac4ae5686b148ce1096804"},{"version":"7b1d80b0e6833e6e3c4b54c22ab0d44d17631ffb314e5822080ef1079a7518e4","signature":"624db6054557c96907cf99c5e523cefa64d4f07baa9c4759fa8554fa1ac36536"},{"version":"54b10c877ca3871d011b7748bd73b5a86e87238e58dc13160b7a8679087d0855","signature":"44cd9502cc68127257bcc6be3e0b5fa303c286622aec5c1a34608f7c5e5ebc0e"},{"version":"10f9c9cf3b09f10d852bd55d83a77618ab621534d95275b3fae72900457c2c1e","signature":"66e0c458186030248a56a53930888f53e4447afc0790ead6a5865eedfb5c62cd"},{"version":"169e6b63acbd8e5a94c0188f60edf746764967b8420f9b6853352b051eafe223","signature":"2f7f7400ceabd929eb7aeeb25d47f7c7cf656dd0aef7e61b1481fb1920d60a84"},{"version":"fd0ba153405ef691c93e466c4d4b70275a7f041608b6f37879fa587e262974b4","signature":"ea0830a3bde7226b76f2e8a7aada9de6ac57bf8f64fc77cb2143b4864a65ad28"},{"version":"83ac334318849fdaa8fba4e2709eab12d17eb30b3293c49b5e16cb29067e94fa","signature":"1e65c0a72d189f7327c177f855018da62b0cbeab73d409072e33f40d708e6f95"},{"version":"c4de3f56023ae5fab7ddbb081b1c6bc10145b987ca0647900b2ad80cc14dbccd","signature":"4c1050186620bd123c10519af08a67954a1a1b5cff40e52011a72309ee353b88"},{"version":"e00c72413a802850290dafd123df95985a27bdda695c6db24db7f9a4e7edb2d7","signature":"569667e623961115467f3116b9159141e3a85361d1090418d1be6a84db527240"},{"version":"9e12832a45f178e6425a9b6c7bdda700f4107f71c914f88d088ec6fe49a72f77","signature":"b4d881e1e51b4ec6b369d19b72fb0b4cec2897ef4f121aee8d1d8305edac9a63"},{"version":"96c939a7dfe6c2b4f8a497ea09f3dc95def18f2646d585fd947c4334b375264c","signature":"5015d1773db674e3de470492cb56659900f8d991fe3542c422aef85b43902bb6"},{"version":"ee58b5a479ad7ec308cab5f15c71dfcc21333d9c48920761d4e7640fc143ead7","signature":"34a1ba5ef59b48bb4a6ed187d3d4f56feba13d56e461e8ec1851464a3103c294"},{"version":"479b6be0ed9448d20ad2055cabfc48386463e579c1e1489a582f257314cf458d","signature":"1515b02fa74de0740fa8d603e07ceffdc63c2919c9895bc4d84576e08cdd518a"},{"version":"fad7047931cf5eeadcf9fa3996d41cd8c3942dd5e254eb0a859537296b3a6689","signature":"f9c1322b7ee782a27c342cac529e275a34023fb1a48e4d58acb8a1ae83c7d3d4"},{"version":"851537b6054430305d16114e25c0e714fc10ae7e1eb4363f320438657bed2f1e","signature":"2d793f62dc54a74a4310c12484617a944009a1868f65e6f9cf88828f1c7a8a9a"},{"version":"c77e9392299d0899b26b27bd9b4cc91f9f7130284a15b4ccffe681199aa9360c","signature":"bab3f0f63c7100a95e8d05e95c894d0483022f173d9d76a967ca5fcb1a4c0037"},{"version":"ce7810df65d37a398657d3380294514303ab6f403c18e1c82c91a8bbaf3a8c78","signature":"4581287cfea12ea309aa8920971ed8f8901114e9d3730af2138efdec17dc0812"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"49a5a44f2e68241a1d2bd9ec894535797998841c09729e506a7cbfcaa40f2180","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"1ca84b44ad1d8e4576f24904d8b95dd23b94ea67e1575f89614ac90062fc67f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d586db0a09a9495ebb5dece28f54df9684bfbd6e1f568426ca153126dac4a40","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"567b7f607f400873151d7bc63a049514b53c3c00f5f56e9e95695d93b66a138e","affectsGlobalScope":true,"impliedFormat":1},{"version":"823f9c08700a30e2920a063891df4e357c64333fdba6889522acc5b7ae13fc08","impliedFormat":1},{"version":"84c1930e33d1bb12ad01bcbe11d656f9646bd21b2fb2afd96e8e10615a021aef","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"2bf469abae4cc9c0f340d4e05d9d26e37f936f9c8ca8f007a6534f109dcc77e4","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c21aaa8257d7950a5b75a251d9075b6a371208fc948c9c8402f6690ef3b5b55","impliedFormat":1},{"version":"b5895e6353a5d708f55d8685c38a235c3a6d8138e374dee8ceb8ffde5aa8002a","impliedFormat":1},{"version":"54c4f21f578864961efc94e8f42bc893a53509e886370ec7dd602e0151b9266c","impliedFormat":1},{"version":"de735eca2c51dd8b860254e9fdb6d9ec19fe402dfe597c23090841ce3937cfc5","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"5155da3047ef977944d791a2188ff6e6c225f6975cc1910ab7bb6838ab84cede","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"e16d218a30f6a6810b57f7e968124eaa08c7bb366133ea34bbf01e7cd6b8c0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb8692dea24c27821f77e397272d9ed2eda0b95e4a75beb0fdda31081d15a8ae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"5b6844ad931dcc1d3aca53268f4bd671428421464b1286746027aede398094f2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"0225ecb9ed86bdb7a2c7fd01f1556906902929377b44483dc4b83e03b3ef227d","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"461e54289e6287e8494a0178ba18182acce51a02bca8dea219149bf2cf96f105","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"e31e51c55800014d926e3f74208af49cb7352803619855c89296074d1ecbb524","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"dfb96ba5177b68003deec9e773c47257da5c4c8a74053d8956389d832df72002","affectsGlobalScope":true,"impliedFormat":1},{"version":"92d3070580cf72b4bb80959b7f16ede9a3f39e6f4ef2ac87cfa4561844fdc69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"613deebaec53731ff6b74fe1a89f094b708033db6396b601df3e6d5ab0ec0a47","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"e56eb632f0281c9f8210eb8c86cc4839a427a4ffffcfd2a5e40b956050b3e042","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"28ca156f93e9f2f073d825452a114d106291d123564ca49af5b108ba20311011","affectsGlobalScope":true,"impliedFormat":1}],"root":[[47,74]],"options":{"alwaysStrict":true,"composite":true,"declaration":true,"declarationMap":true,"exactOptionalPropertyTypes":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitOverride":true,"noImplicitReturns":true,"noImplicitThis":true,"noPropertyAccessFromIndexSignature":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./cjs","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictBindCallApply":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":true,"target":6,"verbatimModuleSyntax":false},"referencedMap":[[120,1],[121,1],[122,2],[80,3],[123,4],[124,5],[125,6],[75,7],[78,8],[76,7],[77,7],[126,9],[127,10],[128,11],[129,12],[130,13],[131,14],[132,14],[134,7],[133,15],[135,16],[136,17],[137,18],[119,19],[79,7],[138,20],[139,21],[140,22],[172,23],[141,24],[142,25],[143,26],[144,27],[145,28],[146,29],[147,30],[148,31],[149,32],[150,33],[151,33],[152,34],[153,7],[154,35],[156,36],[155,37],[157,38],[158,39],[159,40],[160,41],[161,42],[162,43],[163,44],[164,45],[165,46],[166,47],[167,48],[168,49],[169,50],[170,51],[171,52],[173,7],[81,7],[45,7],[46,7],[8,7],[10,7],[9,7],[2,7],[11,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[3,7],[19,7],[20,7],[4,7],[21,7],[25,7],[22,7],[23,7],[24,7],[26,7],[27,7],[28,7],[5,7],[29,7],[30,7],[31,7],[32,7],[6,7],[36,7],[33,7],[34,7],[35,7],[37,7],[7,7],[38,7],[43,7],[44,7],[39,7],[40,7],[41,7],[42,7],[1,7],[97,53],[107,54],[96,53],[117,55],[88,56],[87,57],[116,58],[110,59],[115,60],[90,61],[104,62],[89,63],[113,64],[85,65],[84,58],[114,66],[86,67],[91,68],[92,7],[95,68],[82,7],[118,69],[108,70],[99,71],[100,72],[102,73],[98,74],[101,75],[111,58],[93,76],[94,77],[103,78],[83,79],[106,70],[105,68],[109,7],[112,80],[74,81],[47,7],[48,7],[49,7],[50,82],[51,83],[52,83],[53,83],[54,83],[55,83],[56,83],[57,83],[58,83],[59,83],[62,7],[60,84],[61,85],[63,86],[64,87],[65,88],[66,89],[67,90],[68,91],[69,92],[70,93],[71,94],[72,95],[73,96]],"latestChangedDtsFile":"./cjs/index.d.ts","version":"5.9.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hangtime/grip-connect",
3
- "version": "0.8.7",
3
+ "version": "0.9.0",
4
4
  "description": "Griptonite Motherboard, Tindeq Progressor, PitchSix Force Board, WHC-06, Entralpi, Climbro, mySmartBoard: Bluetooth API Force-Sensing strength analysis for climbers",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",
@@ -1,6 +1,12 @@
1
1
  import type { IDevice } from "../device.interface.js"
2
+
2
3
  /**
3
4
  * Interface representing the Climbro device, extending the base Device interface.
4
5
  */
5
- // eslint-disable-next-line @typescript-eslint/no-empty-object-type
6
- export interface IClimbro extends IDevice {}
6
+ export interface IClimbro extends IDevice {
7
+ /**
8
+ * Retrieves battery level from the device.
9
+ * @returns {Promise<string | undefined>} A Promise that resolves with the battery level.
10
+ */
11
+ battery(): Promise<string | undefined>
12
+ }
@@ -1,16 +1,163 @@
1
1
  import { Device } from "../device.model.js"
2
2
  import type { IClimbro } from "../../interfaces/device/climbro.interface.js"
3
3
 
4
+ /**
5
+ * Climbro protocol constants
6
+ */
7
+ enum ClimbroResponses {
8
+ /**
9
+ * 240 - Battery data marker
10
+ */
11
+ BAT_DAT = 0xf0,
12
+ /**
13
+ * 245 - Sensor data marker
14
+ */
15
+ SENS_DAT = 0xf5,
16
+ /**
17
+ * 246 - 36kg value
18
+ */
19
+ DAT_36KG = 0xf6,
20
+ }
21
+
4
22
  /**
5
23
  * Represents a Climbro device.
6
- * TODO: Add services, do you own a Climbro? Help us!
7
24
  * {@link https://climbro.com/}
8
25
  */
9
26
  export class Climbro extends Device implements IClimbro {
27
+ /**
28
+ * Battery constants
29
+ */
30
+ private static readonly minBatteryDisc: number = 112
31
+ private static readonly maxBatteryDisc: number = 230
32
+ private static readonly batRangeDisc: number = this.maxBatteryDisc - this.minBatteryDisc
33
+ private static readonly batLevelCoef: number = 100 / this.batRangeDisc
34
+
35
+ /**
36
+ * Synchronization flag used to track the current data type being processed.
37
+ * Set to BAT_DAT when processing battery data, SENS_DAT when processing sensor data.
38
+ * @type {number}
39
+ * @private
40
+ */
41
+ private flagSynchro = 0
42
+
43
+ /**
44
+ * Current battery level percentage calculated from the device's battery voltage.
45
+ * @type {number}
46
+ * @private
47
+ */
48
+ private batteryLevel = 0
49
+
10
50
  constructor() {
11
51
  super({
12
- filters: [{ name: "Climbro" }],
13
- services: [],
52
+ filters: [{ namePrefix: "Climbro" }],
53
+ services: [
54
+ {
55
+ name: "UART Transparent Service",
56
+ id: "uart",
57
+ uuid: "49535343-fe7d-4ae5-8fa9-9fafd205e455",
58
+ characteristics: [
59
+ {
60
+ name: "Read/Notify",
61
+ id: "rx",
62
+ uuid: "49535343-1e4d-4bd9-ba61-23c647249616",
63
+ },
64
+ ],
65
+ },
66
+ ],
14
67
  })
15
68
  }
69
+
70
+ /**
71
+ * Retrieves battery level from the device.
72
+ * @returns {Promise<string | undefined>} A Promise that resolves with the battery level.
73
+ */
74
+ battery = async (): Promise<string | undefined> => {
75
+ // Battery level is continuously updated via notifications
76
+ return this.batteryLevel.toString()
77
+ }
78
+
79
+ /**
80
+ * Handles data received from the device, processes force measurements and battery data
81
+ * according to the Climbro protocol.
82
+ *
83
+ * @param {DataView} value - The notification event.
84
+ */
85
+ override handleNotifications = (value: DataView): void => {
86
+ if (value) {
87
+ // Update timestamp
88
+ this.updateTimestamp()
89
+ if (value.buffer) {
90
+ const receivedTime: number = Date.now()
91
+
92
+ // Convert DataView to Uint8Array for easier processing
93
+ const buffer = new Uint8Array(value.buffer)
94
+ const byteCount = buffer.length
95
+
96
+ for (let i = 0; i < byteCount; i++) {
97
+ let signalValue = buffer[i]
98
+
99
+ // Check for battery data marker
100
+ if (signalValue === ClimbroResponses.BAT_DAT) {
101
+ this.flagSynchro = ClimbroResponses.BAT_DAT
102
+ continue
103
+ }
104
+
105
+ // Check for sensor data marker
106
+ if (signalValue === ClimbroResponses.SENS_DAT) {
107
+ this.flagSynchro = ClimbroResponses.SENS_DAT
108
+ continue
109
+ }
110
+
111
+ // Check if signal is the reserved word for 36kg and convert it
112
+ if (signalValue === ClimbroResponses.DAT_36KG) {
113
+ signalValue = 36
114
+ }
115
+
116
+ // Process battery level signal
117
+ if (this.flagSynchro === ClimbroResponses.BAT_DAT) {
118
+ this.batteryLevel = Climbro.batLevelCoef * (signalValue - Climbro.minBatteryDisc)
119
+ continue
120
+ }
121
+
122
+ // Process force signal
123
+ if (this.flagSynchro === ClimbroResponses.SENS_DAT) {
124
+ // Process force data inline
125
+ const forceValue = signalValue
126
+ const numericData = forceValue - this.applyTare(forceValue)
127
+
128
+ // Add data to downloadable array
129
+ this.downloadPackets.push({
130
+ received: receivedTime,
131
+ sampleNum: this.dataPointCount,
132
+ battRaw: this.batteryLevel,
133
+ samples: [forceValue],
134
+ masses: [numericData],
135
+ })
136
+
137
+ // Check for max weight
138
+ this.massMax = Math.max(Number(this.massMax), Number(numericData)).toFixed(1)
139
+
140
+ // Update running sum and count
141
+ const currentMassTotal = Math.max(-1000, Number(numericData))
142
+ this.massTotalSum += currentMassTotal
143
+ this.dataPointCount++
144
+
145
+ // Calculate the average dynamically
146
+ this.massAverage = (this.massTotalSum / this.dataPointCount).toFixed(1)
147
+
148
+ // Check if device is being used
149
+ this.activityCheck(numericData)
150
+
151
+ this.notifyCallback({
152
+ massMax: this.massMax,
153
+ massAverage: this.massAverage,
154
+ massTotal: Math.max(-1000, numericData).toFixed(1),
155
+ })
156
+
157
+ continue
158
+ }
159
+ }
160
+ }
161
+ }
162
+ }
16
163
  }