buttplug 3.2.2 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/.eslintrc.js +25 -25
  2. package/.jscsrc +2 -2
  3. package/.jshintrc +5 -5
  4. package/.prettierrc.json +3 -3
  5. package/.yarnrc.yml +5 -5
  6. package/CHANGELOG.md +591 -577
  7. package/LICENSE +27 -27
  8. package/README.md +105 -97
  9. package/dist/main/src/client/ButtplugBrowserWebsocketClientConnector.js +6 -9
  10. package/dist/main/src/client/ButtplugBrowserWebsocketClientConnector.js.map +1 -1
  11. package/dist/main/src/client/{Client.d.ts → ButtplugClient.d.ts} +3 -4
  12. package/dist/main/src/client/ButtplugClient.js +232 -0
  13. package/dist/main/src/client/ButtplugClient.js.map +1 -0
  14. package/dist/main/src/client/ButtplugClientConnectorException.js +17 -7
  15. package/dist/main/src/client/ButtplugClientConnectorException.js.map +1 -1
  16. package/dist/main/src/client/ButtplugClientDevice.d.ts +13 -28
  17. package/dist/main/src/client/ButtplugClientDevice.js +105 -247
  18. package/dist/main/src/client/ButtplugClientDevice.js.map +1 -1
  19. package/dist/main/src/client/ButtplugClientDeviceCommand.d.ts +42 -0
  20. package/dist/main/src/client/ButtplugClientDeviceCommand.js +105 -0
  21. package/dist/main/src/client/ButtplugClientDeviceCommand.js.map +1 -0
  22. package/dist/main/src/client/ButtplugClientDeviceFeature.d.ts +18 -0
  23. package/dist/main/src/client/ButtplugClientDeviceFeature.js +166 -0
  24. package/dist/main/src/client/ButtplugClientDeviceFeature.js.map +1 -0
  25. package/dist/main/src/client/ButtplugNodeWebsocketClientConnector.d.ts +1 -8
  26. package/dist/main/src/client/ButtplugNodeWebsocketClientConnector.js +1 -4
  27. package/dist/main/src/client/ButtplugNodeWebsocketClientConnector.js.map +1 -1
  28. package/dist/main/src/core/Exceptions.js +27 -9
  29. package/dist/main/src/core/Exceptions.js.map +1 -1
  30. package/dist/main/src/core/Logging.js +12 -6
  31. package/dist/main/src/core/Logging.js.map +1 -1
  32. package/dist/main/src/core/Messages.d.ts +119 -230
  33. package/dist/main/src/core/Messages.js +50 -404
  34. package/dist/main/src/core/Messages.js.map +1 -1
  35. package/dist/main/src/index.d.ts +2 -2
  36. package/dist/main/src/index.js +4 -2
  37. package/dist/main/src/index.js.map +1 -1
  38. package/dist/main/src/utils/ButtplugBrowserWebsocketConnector.js +40 -52
  39. package/dist/main/src/utils/ButtplugBrowserWebsocketConnector.js.map +1 -1
  40. package/dist/main/src/utils/ButtplugMessageSorter.js +27 -15
  41. package/dist/main/src/utils/ButtplugMessageSorter.js.map +1 -1
  42. package/dist/main/src/utils/Utils.js +1 -2
  43. package/dist/main/src/utils/Utils.js.map +1 -1
  44. package/dist/web/buttplug.js +1 -38
  45. package/dist/web/buttplug.mjs +595 -1984
  46. package/dist/web/client/ButtplugBrowserWebsocketClientConnector.d.ts +0 -7
  47. package/dist/web/client/{Client.d.ts → ButtplugClient.d.ts} +3 -11
  48. package/dist/web/client/ButtplugClientConnectorException.d.ts +0 -7
  49. package/dist/web/client/ButtplugClientDevice.d.ts +14 -29
  50. package/dist/web/client/ButtplugClientDeviceCommand.d.ts +42 -0
  51. package/dist/web/client/ButtplugClientDeviceFeature.d.ts +18 -0
  52. package/dist/web/client/ButtplugNodeWebsocketClientConnector.d.ts +1 -15
  53. package/dist/web/client/IButtplugClientConnector.d.ts +0 -7
  54. package/dist/web/core/Exceptions.d.ts +1 -1
  55. package/dist/web/core/Logging.d.ts +0 -7
  56. package/dist/web/core/Messages.d.ts +119 -229
  57. package/dist/web/index.d.ts +2 -2
  58. package/dist/web/utils/ButtplugBrowserWebsocketConnector.d.ts +0 -7
  59. package/examples/node/SYNC_MANIFEST.md +105 -0
  60. package/examples/node/application-example.ts +213 -0
  61. package/examples/node/async-example.ts +124 -0
  62. package/examples/node/connection-example.ts +76 -0
  63. package/examples/node/device-control-example.ts +131 -0
  64. package/examples/node/device-enumeration-example.ts +86 -0
  65. package/examples/node/device-info-example.ts +131 -0
  66. package/examples/node/errors-example.ts +166 -0
  67. package/examples/node/package-lock.json +281 -0
  68. package/examples/node/package.json +25 -0
  69. package/examples/node/remote-connector-example.ts +84 -0
  70. package/examples/node/tsconfig.json +14 -0
  71. package/examples/web/application-example.js +197 -0
  72. package/examples/web/async-example.js +90 -0
  73. package/examples/web/device-control-example.js +87 -0
  74. package/examples/web/device-enumeration-example.js +49 -0
  75. package/examples/web/device-info-example.js +100 -0
  76. package/examples/web/errors-example.js +110 -0
  77. package/examples/web/index.html +55 -0
  78. package/examples/web/logging.js +42 -0
  79. package/examples/web/ping-timeout-example.js +59 -0
  80. package/examples/web/remote-connector-example.js +68 -0
  81. package/node-test.js +24 -0
  82. package/node-test.ts +23 -5
  83. package/package.json +85 -87
  84. package/src/client/ButtplugBrowserWebsocketClientConnector.ts +25 -25
  85. package/src/client/ButtplugClient.ts +242 -0
  86. package/src/client/ButtplugClientConnectorException.ts +16 -16
  87. package/src/client/ButtplugClientDevice.ts +178 -401
  88. package/src/client/ButtplugClientDeviceCommand.ts +112 -0
  89. package/src/client/ButtplugClientDeviceFeature.ts +138 -0
  90. package/src/client/ButtplugNodeWebsocketClientConnector.ts +17 -17
  91. package/src/client/IButtplugClientConnector.ts +18 -18
  92. package/src/core/Exceptions.ts +107 -101
  93. package/src/core/Logging.ts +197 -197
  94. package/src/core/Messages.ts +205 -480
  95. package/src/core/index.d.ts +4 -4
  96. package/src/index.ts +21 -19
  97. package/src/utils/ButtplugBrowserWebsocketConnector.ts +89 -89
  98. package/src/utils/ButtplugMessageSorter.ts +66 -65
  99. package/src/utils/Utils.ts +3 -3
  100. package/tsconfig.json +22 -22
  101. package/tsfmt.json +14 -14
  102. package/tslint.json +27 -27
  103. package/typedocconfig.js +6 -6
  104. package/vite.config.ts +26 -26
  105. package/dist/main/src/client/Client.js +0 -242
  106. package/dist/main/src/client/Client.js.map +0 -1
  107. package/dist/main/src/core/MessageUtils.d.ts +0 -10
  108. package/dist/main/src/core/MessageUtils.js +0 -65
  109. package/dist/main/src/core/MessageUtils.js.map +0 -1
  110. package/dist/web/core/MessageUtils.d.ts +0 -10
  111. package/doc/.nojekyll +0 -1
  112. package/doc/assets/highlight.css +0 -22
  113. package/doc/assets/main.js +0 -58
  114. package/doc/assets/search.js +0 -1
  115. package/doc/assets/style.css +0 -1280
  116. package/doc/classes/ButtplugBrowserWebsocketClientConnector.html +0 -234
  117. package/doc/classes/ButtplugClient.html +0 -331
  118. package/doc/classes/ButtplugClientConnectorException.html +0 -216
  119. package/doc/classes/ButtplugClientDevice.html +0 -489
  120. package/doc/classes/ButtplugDeviceError.html +0 -218
  121. package/doc/classes/ButtplugDeviceMessage.html +0 -165
  122. package/doc/classes/ButtplugError.html +0 -220
  123. package/doc/classes/ButtplugInitError.html +0 -218
  124. package/doc/classes/ButtplugLogger.html +0 -288
  125. package/doc/classes/ButtplugMessage.html +0 -147
  126. package/doc/classes/ButtplugMessageError.html +0 -218
  127. package/doc/classes/ButtplugMessageSorter.html +0 -128
  128. package/doc/classes/ButtplugNodeWebsocketClientConnector.html +0 -239
  129. package/doc/classes/ButtplugPingError.html +0 -218
  130. package/doc/classes/ButtplugSystemMessage.html +0 -150
  131. package/doc/classes/ButtplugUnknownError.html +0 -218
  132. package/doc/classes/DeviceAdded.html +0 -186
  133. package/doc/classes/DeviceInfo.html +0 -114
  134. package/doc/classes/DeviceList.html +0 -160
  135. package/doc/classes/DeviceRemoved.html +0 -158
  136. package/doc/classes/Error.html +0 -179
  137. package/doc/classes/GenericDeviceMessageAttributes.html +0 -107
  138. package/doc/classes/GenericMessageSubcommand.html +0 -90
  139. package/doc/classes/LinearCmd.html +0 -187
  140. package/doc/classes/LogMessage.html +0 -134
  141. package/doc/classes/MessageAttributes.html +0 -160
  142. package/doc/classes/Ok.html +0 -151
  143. package/doc/classes/Ping.html +0 -151
  144. package/doc/classes/RawDeviceMessageAttributes.html +0 -86
  145. package/doc/classes/RawReadCmd.html +0 -188
  146. package/doc/classes/RawReading.html +0 -179
  147. package/doc/classes/RawSubscribeCmd.html +0 -170
  148. package/doc/classes/RawUnsubscribeCmd.html +0 -170
  149. package/doc/classes/RawWriteCmd.html +0 -188
  150. package/doc/classes/RequestDeviceList.html +0 -151
  151. package/doc/classes/RequestServerInfo.html +0 -169
  152. package/doc/classes/RotateCmd.html +0 -187
  153. package/doc/classes/RotateSubcommand.html +0 -108
  154. package/doc/classes/ScalarCmd.html +0 -170
  155. package/doc/classes/ScalarSubcommand.html +0 -108
  156. package/doc/classes/ScanningFinished.html +0 -146
  157. package/doc/classes/SensorDeviceMessageAttributes.html +0 -107
  158. package/doc/classes/SensorReadCmd.html +0 -179
  159. package/doc/classes/SensorReading.html +0 -188
  160. package/doc/classes/ServerInfo.html +0 -178
  161. package/doc/classes/StartScanning.html +0 -151
  162. package/doc/classes/StopAllDevices.html +0 -151
  163. package/doc/classes/StopDeviceCmd.html +0 -161
  164. package/doc/classes/StopScanning.html +0 -151
  165. package/doc/classes/VectorSubcommand.html +0 -108
  166. package/doc/enums/ActuatorType.html +0 -104
  167. package/doc/enums/ButtplugLogLevel.html +0 -97
  168. package/doc/enums/ErrorClass.html +0 -90
  169. package/doc/enums/SensorType.html +0 -90
  170. package/doc/functions/FromJSON.html +0 -113
  171. package/doc/index.html +0 -184
  172. package/doc/interfaces/IButtplugClientConnector.html +0 -137
  173. package/doc/modules.html +0 -176
  174. package/doc/variables/DEFAULT_MESSAGE_ID.html +0 -104
  175. package/doc/variables/MAX_ID.html +0 -104
  176. package/doc/variables/MESSAGE_SPEC_VERSION.html +0 -104
  177. package/doc/variables/SYSTEM_MESSAGE_ID.html +0 -104
  178. package/src/client/Client.ts +0 -276
  179. package/src/core/MessageUtils.ts +0 -48
@@ -6,81 +6,69 @@
6
6
  * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.
7
7
  */
8
8
  'use strict';
9
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
10
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
11
- return new (P || (P = Promise))(function (resolve, reject) {
12
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
13
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
15
- step((generator = generator.apply(thisArg, _arguments || [])).next());
16
- });
17
- };
18
9
  Object.defineProperty(exports, "__esModule", { value: true });
19
10
  exports.ButtplugBrowserWebsocketConnector = void 0;
20
11
  const eventemitter3_1 = require("eventemitter3");
21
- const MessageUtils_1 = require("../core/MessageUtils");
12
+ //import { fromJSON } from '../core/MessageUtils';
22
13
  class ButtplugBrowserWebsocketConnector extends eventemitter3_1.EventEmitter {
14
+ _url;
15
+ _ws;
16
+ _websocketConstructor = null;
23
17
  constructor(_url) {
24
18
  super();
25
19
  this._url = _url;
26
- this._websocketConstructor = null;
27
- this.connect = () => __awaiter(this, void 0, void 0, function* () {
28
- var _a;
29
- const ws = new ((_a = this._websocketConstructor) !== null && _a !== void 0 ? _a : WebSocket)(this._url);
30
- let res;
31
- let rej;
32
- const p = new Promise((resolve, reject) => {
33
- res = resolve;
34
- rej = reject;
35
- });
36
- // In websockets, our error rarely tells us much, as for security reasons
37
- // browsers usually only throw Error Code 1006. It's up to those using this
38
- // library to state what the problem might be.
39
- const conErrorCallback = () => rej();
40
- ws.addEventListener('open', () => __awaiter(this, void 0, void 0, function* () {
20
+ }
21
+ get Connected() {
22
+ return this._ws !== undefined;
23
+ }
24
+ connect = async () => {
25
+ return new Promise((resolve, reject) => {
26
+ const ws = new (this._websocketConstructor ?? WebSocket)(this._url);
27
+ const onErrorCallback = (event) => { reject(event); };
28
+ const onCloseCallback = (event) => reject(event.reason);
29
+ ws.addEventListener('open', async () => {
41
30
  this._ws = ws;
42
31
  try {
43
- yield this.initialize();
32
+ await this.initialize();
44
33
  this._ws.addEventListener('message', (msg) => {
45
34
  this.parseIncomingMessage(msg);
46
35
  });
47
- this._ws.removeEventListener('close', conErrorCallback);
36
+ this._ws.removeEventListener('close', onCloseCallback);
37
+ this._ws.removeEventListener('error', onErrorCallback);
48
38
  this._ws.addEventListener('close', this.disconnect);
49
- // TODO This doesn't really communicate the chain why our initializer failed
50
- res();
39
+ resolve();
51
40
  }
52
41
  catch (e) {
53
- console.log(e);
54
- rej();
42
+ reject(e);
55
43
  }
56
- }));
57
- ws.addEventListener('close', conErrorCallback);
58
- return p;
59
- });
60
- this.disconnect = () => __awaiter(this, void 0, void 0, function* () {
61
- if (!this.Connected) {
62
- return;
63
- }
64
- this._ws.close();
65
- this._ws = undefined;
66
- this.emit('disconnect');
67
- });
68
- this.initialize = () => __awaiter(this, void 0, void 0, function* () {
69
- return Promise.resolve();
44
+ });
45
+ // In websockets, our error rarely tells us much, as for security reasons
46
+ // browsers usually only throw Error Code 1006. It's up to those using this
47
+ // library to state what the problem might be.
48
+ ws.addEventListener('error', onErrorCallback);
49
+ ws.addEventListener('close', onCloseCallback);
70
50
  });
71
- }
72
- get Connected() {
73
- return this._ws !== undefined;
74
- }
51
+ };
52
+ disconnect = async () => {
53
+ if (!this.Connected) {
54
+ return;
55
+ }
56
+ this._ws.close();
57
+ this._ws = undefined;
58
+ this.emit('disconnect');
59
+ };
75
60
  sendMessage(msg) {
76
61
  if (!this.Connected) {
77
62
  throw new Error('ButtplugBrowserWebsocketConnector not connected');
78
63
  }
79
- this._ws.send('[' + msg.toJSON() + ']');
64
+ this._ws.send('[' + JSON.stringify(msg) + ']');
80
65
  }
66
+ initialize = async () => {
67
+ return Promise.resolve();
68
+ };
81
69
  parseIncomingMessage(event) {
82
70
  if (typeof event.data === 'string') {
83
- const msgs = (0, MessageUtils_1.fromJSON)(event.data);
71
+ const msgs = JSON.parse(event.data);
84
72
  this.emit('message', msgs);
85
73
  }
86
74
  else if (event.data instanceof Blob) {
@@ -88,7 +76,7 @@ class ButtplugBrowserWebsocketConnector extends eventemitter3_1.EventEmitter {
88
76
  }
89
77
  }
90
78
  onReaderLoad(event) {
91
- const msgs = (0, MessageUtils_1.fromJSON)(event.target.result);
79
+ const msgs = JSON.parse(event.target.result);
92
80
  this.emit('message', msgs);
93
81
  }
94
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ButtplugBrowserWebsocketConnector.js","sourceRoot":"","sources":["../../../../src/utils/ButtplugBrowserWebsocketConnector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ButtplugBrowserWebsocketConnector.js","sourceRoot":"","sources":["../../../../src/utils/ButtplugBrowserWebsocketConnector.ts"],"names":[],"mappings":"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"}
@@ -22,29 +22,40 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
22
22
  }) : function(o, v) {
23
23
  o["default"] = v;
24
24
  });
25
- var __importStar = (this && this.__importStar) || function (mod) {
26
- if (mod && mod.__esModule) return mod;
27
- var result = {};
28
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29
- __setModuleDefault(result, mod);
30
- return result;
31
- };
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
32
42
  Object.defineProperty(exports, "__esModule", { value: true });
33
43
  exports.ButtplugMessageSorter = void 0;
34
44
  const Messages = __importStar(require("../core/Messages"));
35
45
  const Exceptions_1 = require("../core/Exceptions");
36
46
  class ButtplugMessageSorter {
47
+ _useCounter;
48
+ _counter = 1;
49
+ _waitingMsgs = new Map();
37
50
  constructor(_useCounter) {
38
51
  this._useCounter = _useCounter;
39
- this._counter = 1;
40
- this._waitingMsgs = new Map();
41
52
  }
42
53
  // One of the places we should actually return a promise, as we need to store
43
54
  // them while waiting for them to return across the line.
44
55
  // tslint:disable:promise-function-async
45
56
  PrepareOutgoingMessage(msg) {
46
57
  if (this._useCounter) {
47
- msg.Id = this._counter;
58
+ Messages.setMsgId(msg, this._counter);
48
59
  // Always increment last, otherwise we might lose sync
49
60
  this._counter += 1;
50
61
  }
@@ -54,18 +65,19 @@ class ButtplugMessageSorter {
54
65
  res = resolve;
55
66
  rej = reject;
56
67
  });
57
- this._waitingMsgs.set(msg.Id, [res, rej]);
68
+ this._waitingMsgs.set(Messages.msgId(msg), [res, rej]);
58
69
  return msgPromise;
59
70
  }
60
71
  ParseIncomingMessages(msgs) {
61
72
  const noMatch = [];
62
73
  for (const x of msgs) {
63
- if (x.Id !== Messages.SYSTEM_MESSAGE_ID && this._waitingMsgs.has(x.Id)) {
64
- const [res, rej] = this._waitingMsgs.get(x.Id);
74
+ let id = Messages.msgId(x);
75
+ if (id !== Messages.SYSTEM_MESSAGE_ID && this._waitingMsgs.has(id)) {
76
+ const [res, rej] = this._waitingMsgs.get(id);
65
77
  // If we've gotten back an error, reject the related promise using a
66
78
  // ButtplugException derived type.
67
- if (x.Type === Messages.Error) {
68
- rej(Exceptions_1.ButtplugError.FromError(x));
79
+ if (x.Error !== undefined) {
80
+ rej(Exceptions_1.ButtplugError.FromError(x.Error));
69
81
  continue;
70
82
  }
71
83
  res(x);
@@ -1 +1 @@
1
- {"version":3,"file":"ButtplugMessageSorter.js","sourceRoot":"","sources":["../../../../src/utils/ButtplugMessageSorter.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2DAA6C;AAC7C,mDAAmD;AAEnD,MAAa,qBAAqB;IAOhC,YAA2B,WAAoB;QAApB,gBAAW,GAAX,WAAW,CAAS;QANrC,aAAQ,GAAG,CAAC,CAAC;QACb,iBAAY,GAGlB,IAAI,GAAG,EAAE,CAAC;IAEoC,CAAC;IAEnD,6EAA6E;IAC7E,yDAAyD;IACzD,wCAAwC;IACjC,sBAAsB,CAC3B,GAA6B;QAE7B,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YACvB,sDAAsD;YACtD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;SACpB;QACD,IAAI,GAAG,CAAC;QACR,IAAI,GAAG,CAAC;QACR,MAAM,UAAU,GAAG,IAAI,OAAO,CAC5B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClB,GAAG,GAAG,OAAO,CAAC;YACd,GAAG,GAAG,MAAM,CAAC;QACf,CAAC,CACF,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,UAAU,CAAC;IACpB,CAAC;IAEM,qBAAqB,CAC1B,IAAgC;QAEhC,MAAM,OAAO,GAA+B,EAAE,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,IAAI,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBACtE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;gBAChD,oEAAoE;gBACpE,kCAAkC;gBAClC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,EAAE;oBAC7B,GAAG,CAAC,0BAAa,CAAC,SAAS,CAAC,CAAmB,CAAC,CAAC,CAAC;oBAClD,SAAS;iBACV;gBACD,GAAG,CAAC,CAAC,CAAC,CAAC;gBACP,SAAS;aACV;iBAAM;gBACL,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjB;SACF;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AArDD,sDAqDC"}
1
+ {"version":3,"file":"ButtplugMessageSorter.js","sourceRoot":"","sources":["../../../../src/utils/ButtplugMessageSorter.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2DAA6C;AAC7C,mDAAmD;AAEnD,MAAa,qBAAqB;IAOL;IANjB,QAAQ,GAAG,CAAC,CAAC;IACb,YAAY,GAGlB,IAAI,GAAG,EAAE,CAAC;IAEd,YAA2B,WAAoB;QAApB,gBAAW,GAAX,WAAW,CAAS;IAAG,CAAC;IAEnD,6EAA6E;IAC7E,yDAAyD;IACzD,wCAAwC;IACjC,sBAAsB,CAC3B,GAA6B;QAE7B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,sDAAsD;YACtD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,GAAG,CAAC;QACR,IAAI,GAAG,CAAC;QACR,MAAM,UAAU,GAAG,IAAI,OAAO,CAC5B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClB,GAAG,GAAG,OAAO,CAAC;YACd,GAAG,GAAG,MAAM,CAAC;QACf,CAAC,CACF,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACvD,OAAO,UAAU,CAAC;IACpB,CAAC;IAEM,qBAAqB,CAC1B,IAAgC;QAEhC,MAAM,OAAO,GAA+B,EAAE,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,EAAE,KAAK,QAAQ,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;gBAC9C,oEAAoE;gBACpE,kCAAkC;gBAClC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC1B,GAAG,CAAC,0BAAa,CAAC,SAAS,CAAC,CAAC,CAAC,KAAM,CAAC,CAAC,CAAC;oBACvC,SAAS;gBACX,CAAC;gBACD,GAAG,CAAC,CAAC,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAtDD,sDAsDC"}
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getRandomInt = void 0;
3
+ exports.getRandomInt = getRandomInt;
4
4
  function getRandomInt(max) {
5
5
  return Math.floor(Math.random() * Math.floor(max));
6
6
  }
7
- exports.getRandomInt = getRandomInt;
8
7
  //# sourceMappingURL=Utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../src/utils/Utils.ts"],"names":[],"mappings":";;;AAAA,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,CAAC;AAFD,oCAEC"}
1
+ {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../src/utils/Utils.ts"],"names":[],"mappings":";;AAAA,oCAEC;AAFD,SAAgB,YAAY,CAAC,GAAW;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,CAAC"}
@@ -1,38 +1 @@
1
- (function(l,oe){typeof exports=="object"&&typeof module<"u"?oe(exports):typeof define=="function"&&define.amd?define(["exports"],oe):(l=typeof globalThis<"u"?globalThis:l||self,oe(l.buttplug={}))})(this,function(l){"use strict";var oe=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function It(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var rt={exports:{}};(function(r){var e=Object.prototype.hasOwnProperty,t="~";function n(){}Object.create&&(n.prototype=Object.create(null),new n().__proto__||(t=!1));function i(g,w,p){this.fn=g,this.context=w,this.once=p||!1}function u(g,w,p,v,h){if(typeof p!="function")throw new TypeError("The listener must be a function");var T=new i(p,v||g,h),x=t?t+w:w;return g._events[x]?g._events[x].fn?g._events[x]=[g._events[x],T]:g._events[x].push(T):(g._events[x]=T,g._eventsCount++),g}function a(g,w){--g._eventsCount===0?g._events=new n:delete g._events[w]}function f(){this._events=new n,this._eventsCount=0}f.prototype.eventNames=function(){var w=[],p,v;if(this._eventsCount===0)return w;for(v in p=this._events)e.call(p,v)&&w.push(t?v.slice(1):v);return Object.getOwnPropertySymbols?w.concat(Object.getOwnPropertySymbols(p)):w},f.prototype.listeners=function(w){var p=t?t+w:w,v=this._events[p];if(!v)return[];if(v.fn)return[v.fn];for(var h=0,T=v.length,x=new Array(T);h<T;h++)x[h]=v[h].fn;return x},f.prototype.listenerCount=function(w){var p=t?t+w:w,v=this._events[p];return v?v.fn?1:v.length:0},f.prototype.emit=function(w,p,v,h,T,x){var G=t?t+w:w;if(!this._events[G])return!1;var m=this._events[G],D=arguments.length,L,M;if(m.fn){switch(m.once&&this.removeListener(w,m.fn,void 0,!0),D){case 1:return m.fn.call(m.context),!0;case 2:return m.fn.call(m.context,p),!0;case 3:return m.fn.call(m.context,p,v),!0;case 4:return m.fn.call(m.context,p,v,h),!0;case 5:return m.fn.call(m.context,p,v,h,T),!0;case 6:return m.fn.call(m.context,p,v,h,T,x),!0}for(M=1,L=new Array(D-1);M<D;M++)L[M-1]=arguments[M];m.fn.apply(m.context,L)}else{var J=m.length,E;for(M=0;M<J;M++)switch(m[M].once&&this.removeListener(w,m[M].fn,void 0,!0),D){case 1:m[M].fn.call(m[M].context);break;case 2:m[M].fn.call(m[M].context,p);break;case 3:m[M].fn.call(m[M].context,p,v);break;case 4:m[M].fn.call(m[M].context,p,v,h);break;default:if(!L)for(E=1,L=new Array(D-1);E<D;E++)L[E-1]=arguments[E];m[M].fn.apply(m[M].context,L)}}return!0},f.prototype.on=function(w,p,v){return u(this,w,p,v,!1)},f.prototype.once=function(w,p,v){return u(this,w,p,v,!0)},f.prototype.removeListener=function(w,p,v,h){var T=t?t+w:w;if(!this._events[T])return this;if(!p)return a(this,T),this;var x=this._events[T];if(x.fn)x.fn===p&&(!h||x.once)&&(!v||x.context===v)&&a(this,T);else{for(var G=0,m=[],D=x.length;G<D;G++)(x[G].fn!==p||h&&!x[G].once||v&&x[G].context!==v)&&m.push(x[G]);m.length?this._events[T]=m.length===1?m[0]:m:a(this,T)}return this},f.prototype.removeAllListeners=function(w){var p;return w?(p=t?t+w:w,this._events[p]&&a(this,p)):(this._events=new n,this._eventsCount=0),this},f.prototype.off=f.prototype.removeListener,f.prototype.addListener=f.prototype.on,f.prefixed=t,f.EventEmitter=f,r.exports=f})(rt);var Dt=rt.exports;const _e=It(Dt);/*!
2
- * Buttplug JS Source Code File - Visit https://buttplug.io for more info about
3
- * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the
4
- * project root for full license information.
5
- *
6
- * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.
7
- */var He=(r=>(r[r.Off=0]="Off",r[r.Error=1]="Error",r[r.Warn=2]="Warn",r[r.Info=3]="Info",r[r.Debug=4]="Debug",r[r.Trace=5]="Trace",r))(He||{});class st{constructor(e,t){const n=new Date,i=n.getHours(),u=n.getMinutes(),a=n.getSeconds();this.timestamp=`${i}:${u}:${a}`,this.logMessage=e,this.logLevel=t}get Message(){return this.logMessage}get LogLevel(){return this.logLevel}get Timestamp(){return this.timestamp}get FormattedMessage(){return`${He[this.logLevel]} : ${this.timestamp} : ${this.logMessage}`}}const it=class ze extends _e{constructor(){super(),this.maximumConsoleLogLevel=0,this.maximumEventLogLevel=0}static get Logger(){return ze.sLogger===void 0&&(ze.sLogger=new ze),this.sLogger}get MaximumConsoleLogLevel(){return this.maximumConsoleLogLevel}set MaximumConsoleLogLevel(e){this.maximumConsoleLogLevel=e}get MaximumEventLogLevel(){return this.maximumEventLogLevel}set MaximumEventLogLevel(e){this.maximumEventLogLevel=e}Error(e){this.AddLogMessage(e,1)}Warn(e){this.AddLogMessage(e,2)}Info(e){this.AddLogMessage(e,3)}Debug(e){this.AddLogMessage(e,4)}Trace(e){this.AddLogMessage(e,5)}AddLogMessage(e,t){if(t>this.maximumEventLogLevel&&t>this.maximumConsoleLogLevel)return;const n=new st(e,t);t<=this.maximumConsoleLogLevel&&console.log(n.FormattedMessage),t<=this.maximumEventLogLevel&&this.emit("log",n)}};it.sLogger=void 0;let ot=it;var C;(function(r){r[r.PLAIN_TO_CLASS=0]="PLAIN_TO_CLASS",r[r.CLASS_TO_PLAIN=1]="CLASS_TO_PLAIN",r[r.CLASS_TO_CLASS=2]="CLASS_TO_CLASS"})(C||(C={}));var Tt=function(){function r(){this._typeMetadatas=new Map,this._transformMetadatas=new Map,this._exposeMetadatas=new Map,this._excludeMetadatas=new Map,this._ancestorsMap=new Map}return r.prototype.addTypeMetadata=function(e){this._typeMetadatas.has(e.target)||this._typeMetadatas.set(e.target,new Map),this._typeMetadatas.get(e.target).set(e.propertyName,e)},r.prototype.addTransformMetadata=function(e){this._transformMetadatas.has(e.target)||this._transformMetadatas.set(e.target,new Map),this._transformMetadatas.get(e.target).has(e.propertyName)||this._transformMetadatas.get(e.target).set(e.propertyName,[]),this._transformMetadatas.get(e.target).get(e.propertyName).push(e)},r.prototype.addExposeMetadata=function(e){this._exposeMetadatas.has(e.target)||this._exposeMetadatas.set(e.target,new Map),this._exposeMetadatas.get(e.target).set(e.propertyName,e)},r.prototype.addExcludeMetadata=function(e){this._excludeMetadatas.has(e.target)||this._excludeMetadatas.set(e.target,new Map),this._excludeMetadatas.get(e.target).set(e.propertyName,e)},r.prototype.findTransformMetadatas=function(e,t,n){return this.findMetadatas(this._transformMetadatas,e,t).filter(function(i){return!i.options||i.options.toClassOnly===!0&&i.options.toPlainOnly===!0?!0:i.options.toClassOnly===!0?n===C.CLASS_TO_CLASS||n===C.PLAIN_TO_CLASS:i.options.toPlainOnly===!0?n===C.CLASS_TO_PLAIN:!0})},r.prototype.findExcludeMetadata=function(e,t){return this.findMetadata(this._excludeMetadatas,e,t)},r.prototype.findExposeMetadata=function(e,t){return this.findMetadata(this._exposeMetadatas,e,t)},r.prototype.findExposeMetadataByCustomName=function(e,t){return this.getExposedMetadatas(e).find(function(n){return n.options&&n.options.name===t})},r.prototype.findTypeMetadata=function(e,t){return this.findMetadata(this._typeMetadatas,e,t)},r.prototype.getStrategy=function(e){var t=this._excludeMetadatas.get(e),n=t&&t.get(void 0),i=this._exposeMetadatas.get(e),u=i&&i.get(void 0);return n&&u||!n&&!u?"none":n?"excludeAll":"exposeAll"},r.prototype.getExposedMetadatas=function(e){return this.getMetadata(this._exposeMetadatas,e)},r.prototype.getExcludedMetadatas=function(e){return this.getMetadata(this._excludeMetadatas,e)},r.prototype.getExposedProperties=function(e,t){return this.getExposedMetadatas(e).filter(function(n){return!n.options||n.options.toClassOnly===!0&&n.options.toPlainOnly===!0?!0:n.options.toClassOnly===!0?t===C.CLASS_TO_CLASS||t===C.PLAIN_TO_CLASS:n.options.toPlainOnly===!0?t===C.CLASS_TO_PLAIN:!0}).map(function(n){return n.propertyName})},r.prototype.getExcludedProperties=function(e,t){return this.getExcludedMetadatas(e).filter(function(n){return!n.options||n.options.toClassOnly===!0&&n.options.toPlainOnly===!0?!0:n.options.toClassOnly===!0?t===C.CLASS_TO_CLASS||t===C.PLAIN_TO_CLASS:n.options.toPlainOnly===!0?t===C.CLASS_TO_PLAIN:!0}).map(function(n){return n.propertyName})},r.prototype.clear=function(){this._typeMetadatas.clear(),this._exposeMetadatas.clear(),this._excludeMetadatas.clear(),this._ancestorsMap.clear()},r.prototype.getMetadata=function(e,t){var n=e.get(t),i;n&&(i=Array.from(n.values()).filter(function(v){return v.propertyName!==void 0}));for(var u=[],a=0,f=this.getAncestors(t);a<f.length;a++){var g=f[a],w=e.get(g);if(w){var p=Array.from(w.values()).filter(function(v){return v.propertyName!==void 0});u.push.apply(u,p)}}return u.concat(i||[])},r.prototype.findMetadata=function(e,t,n){var i=e.get(t);if(i){var u=i.get(n);if(u)return u}for(var a=0,f=this.getAncestors(t);a<f.length;a++){var g=f[a],w=e.get(g);if(w){var p=w.get(n);if(p)return p}}},r.prototype.findMetadatas=function(e,t,n){var i=e.get(t),u;i&&(u=i.get(n));for(var a=[],f=0,g=this.getAncestors(t);f<g.length;f++){var w=g[f],p=e.get(w);p&&p.has(n)&&a.push.apply(a,p.get(n))}return a.slice().reverse().concat((u||[]).slice().reverse())},r.prototype.getAncestors=function(e){if(!e)return[];if(!this._ancestorsMap.has(e)){for(var t=[],n=Object.getPrototypeOf(e.prototype.constructor);typeof n.prototype<"u";n=Object.getPrototypeOf(n.prototype.constructor))t.push(n);this._ancestorsMap.set(e,t)}return this._ancestorsMap.get(e)},r}(),U=new Tt;function Nt(){if(typeof globalThis<"u")return globalThis;if(typeof global<"u")return global;if(typeof window<"u")return window;if(typeof self<"u")return self}function Pt(r){return r!==null&&typeof r=="object"&&typeof r.then=="function"}var at=globalThis&&globalThis.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var n=0,i=e.length,u;n<i;n++)(u||!(n in e))&&(u||(u=Array.prototype.slice.call(e,0,n)),u[n]=e[n]);return r.concat(u||Array.prototype.slice.call(e))};function kt(r){var e=new r;return!(e instanceof Set)&&!("push"in e)?[]:e}var ae=function(){function r(e,t){this.transformationType=e,this.options=t,this.recursionStack=new Set}return r.prototype.transform=function(e,t,n,i,u,a){var f=this;if(a===void 0&&(a=0),Array.isArray(t)||t instanceof Set){var g=i&&this.transformationType===C.PLAIN_TO_CLASS?kt(i):[];return t.forEach(function(m,D){var L=e?e[D]:void 0;if(!f.options.enableCircularCheck||!f.isCircular(m)){var M=void 0;if(typeof n!="function"&&n&&n.options&&n.options.discriminator&&n.options.discriminator.property&&n.options.discriminator.subTypes){if(f.transformationType===C.PLAIN_TO_CLASS){M=n.options.discriminator.subTypes.find(function(Q){return Q.name===m[n.options.discriminator.property]});var J={newObject:g,object:m,property:void 0},E=n.typeFunction(J);M===void 0?M=E:M=M.value,n.options.keepDiscriminatorProperty||delete m[n.options.discriminator.property]}f.transformationType===C.CLASS_TO_CLASS&&(M=m.constructor),f.transformationType===C.CLASS_TO_PLAIN&&(m[n.options.discriminator.property]=n.options.discriminator.subTypes.find(function(Q){return Q.value===m.constructor}).name)}else M=n;var B=f.transform(L,m,M,void 0,m instanceof Map,a+1);g instanceof Set?g.add(B):g.push(B)}else f.transformationType===C.CLASS_TO_CLASS&&(g instanceof Set?g.add(m):g.push(m))}),g}else{if(n===String&&!u)return t==null?t:String(t);if(n===Number&&!u)return t==null?t:Number(t);if(n===Boolean&&!u)return t==null?t:!!t;if((n===Date||t instanceof Date)&&!u)return t instanceof Date?new Date(t.valueOf()):t==null?t:new Date(t);if(Nt().Buffer&&(n===Buffer||t instanceof Buffer)&&!u)return t==null?t:Buffer.from(t);if(Pt(t)&&!u)return new Promise(function(m,D){t.then(function(L){return m(f.transform(void 0,L,n,void 0,void 0,a+1))},D)});if(!u&&t!==null&&typeof t=="object"&&typeof t.then=="function")return t;if(typeof t=="object"&&t!==null){!n&&t.constructor!==Object&&(!Array.isArray(t)&&t.constructor===Array||(n=t.constructor)),!n&&e&&(n=e.constructor),this.options.enableCircularCheck&&this.recursionStack.add(t);var w=this.getKeys(n,t,u),p=e||{};!e&&(this.transformationType===C.PLAIN_TO_CLASS||this.transformationType===C.CLASS_TO_CLASS)&&(u?p=new Map:n?p=new n:p={});for(var v=function(m){if(m==="__proto__"||m==="constructor")return"continue";var D=m,L=m,M=m;if(!h.options.ignoreDecorators&&n){if(h.transformationType===C.PLAIN_TO_CLASS){var J=U.findExposeMetadataByCustomName(n,m);J&&(M=J.propertyName,L=J.propertyName)}else if(h.transformationType===C.CLASS_TO_PLAIN||h.transformationType===C.CLASS_TO_CLASS){var J=U.findExposeMetadata(n,m);J&&J.options&&J.options.name&&(L=J.options.name)}}var E=void 0;h.transformationType===C.PLAIN_TO_CLASS?E=t[D]:t instanceof Map?E=t.get(D):t[D]instanceof Function?E=t[D]():E=t[D];var B=void 0,Q=E instanceof Map;if(n&&u)B=n;else if(n){var P=U.findTypeMetadata(n,M);if(P){var et={newObject:p,object:t,property:M},qe=P.typeFunction?P.typeFunction(et):P.reflectedType;P.options&&P.options.discriminator&&P.options.discriminator.property&&P.options.discriminator.subTypes?t[D]instanceof Array?B=P:(h.transformationType===C.PLAIN_TO_CLASS&&(B=P.options.discriminator.subTypes.find(function(X){if(E&&E instanceof Object&&P.options.discriminator.property in E)return X.name===E[P.options.discriminator.property]}),B===void 0?B=qe:B=B.value,P.options.keepDiscriminatorProperty||E&&E instanceof Object&&P.options.discriminator.property in E&&delete E[P.options.discriminator.property]),h.transformationType===C.CLASS_TO_CLASS&&(B=E.constructor),h.transformationType===C.CLASS_TO_PLAIN&&E&&(E[P.options.discriminator.property]=P.options.discriminator.subTypes.find(function(X){return X.value===E.constructor}).name)):B=qe,Q=Q||P.reflectedType===Map}else if(h.options.targetMaps)h.options.targetMaps.filter(function(X){return X.target===n&&!!X.properties[M]}).forEach(function(X){return B=X.properties[M]});else if(h.options.enableImplicitConversion&&h.transformationType===C.PLAIN_TO_CLASS){var Je=Reflect.getMetadata("design:type",n.prototype,M);Je&&(B=Je)}}var te=Array.isArray(t[D])?h.getReflectedType(n,M):void 0,we=e?e[D]:void 0;if(p.constructor.prototype){var fe=Object.getOwnPropertyDescriptor(p.constructor.prototype,L);if((h.transformationType===C.PLAIN_TO_CLASS||h.transformationType===C.CLASS_TO_CLASS)&&(fe&&!fe.set||p[L]instanceof Function))return"continue"}if(!h.options.enableCircularCheck||!h.isCircular(E)){var ie=h.transformationType===C.PLAIN_TO_CLASS?L:m,R=void 0;h.transformationType===C.CLASS_TO_PLAIN?(R=t[ie],R=h.applyCustomTransformations(R,n,ie,t,h.transformationType),R=t[ie]===R?E:R,R=h.transform(we,R,B,te,Q,a+1)):E===void 0&&h.options.exposeDefaultValues?R=p[L]:(R=h.transform(we,E,B,te,Q,a+1),R=h.applyCustomTransformations(R,n,ie,t,h.transformationType)),(R!==void 0||h.options.exposeUnsetFields)&&(p instanceof Map?p.set(L,R):p[L]=R)}else if(h.transformationType===C.CLASS_TO_CLASS){var R=E;R=h.applyCustomTransformations(R,n,m,t,h.transformationType),(R!==void 0||h.options.exposeUnsetFields)&&(p instanceof Map?p.set(L,R):p[L]=R)}},h=this,T=0,x=w;T<x.length;T++){var G=x[T];v(G)}return this.options.enableCircularCheck&&this.recursionStack.delete(t),p}else return t}},r.prototype.applyCustomTransformations=function(e,t,n,i,u){var a=this,f=U.findTransformMetadatas(t,n,this.transformationType);return this.options.version!==void 0&&(f=f.filter(function(g){return g.options?a.checkVersion(g.options.since,g.options.until):!0})),this.options.groups&&this.options.groups.length?f=f.filter(function(g){return g.options?a.checkGroups(g.options.groups):!0}):f=f.filter(function(g){return!g.options||!g.options.groups||!g.options.groups.length}),f.forEach(function(g){e=g.transformFn({value:e,key:n,obj:i,type:u,options:a.options})}),e},r.prototype.isCircular=function(e){return this.recursionStack.has(e)},r.prototype.getReflectedType=function(e,t){if(e){var n=U.findTypeMetadata(e,t);return n?n.reflectedType:void 0}},r.prototype.getKeys=function(e,t,n){var i=this,u=U.getStrategy(e);u==="none"&&(u=this.options.strategy||"exposeAll");var a=[];if((u==="exposeAll"||n)&&(t instanceof Map?a=Array.from(t.keys()):a=Object.keys(t)),n)return a;if(this.options.ignoreDecorators&&this.options.excludeExtraneousValues&&e){var f=U.getExposedProperties(e,this.transformationType),g=U.getExcludedProperties(e,this.transformationType);a=at(at([],f,!0),g,!0)}if(!this.options.ignoreDecorators&&e){var f=U.getExposedProperties(e,this.transformationType);this.transformationType===C.PLAIN_TO_CLASS&&(f=f.map(function(v){var h=U.findExposeMetadata(e,v);return h&&h.options&&h.options.name?h.options.name:v})),this.options.excludeExtraneousValues?a=f:a=a.concat(f);var w=U.getExcludedProperties(e,this.transformationType);w.length>0&&(a=a.filter(function(v){return!w.includes(v)})),this.options.version!==void 0&&(a=a.filter(function(v){var h=U.findExposeMetadata(e,v);return!h||!h.options?!0:i.checkVersion(h.options.since,h.options.until)})),this.options.groups&&this.options.groups.length?a=a.filter(function(v){var h=U.findExposeMetadata(e,v);return!h||!h.options?!0:i.checkGroups(h.options.groups)}):a=a.filter(function(v){var h=U.findExposeMetadata(e,v);return!h||!h.options||!h.options.groups||!h.options.groups.length})}return this.options.excludePrefixes&&this.options.excludePrefixes.length&&(a=a.filter(function(p){return i.options.excludePrefixes.every(function(v){return p.substr(0,v.length)!==v})})),a=a.filter(function(p,v,h){return h.indexOf(p)===v}),a},r.prototype.checkVersion=function(e,t){var n=!0;return n&&e&&(n=this.options.version>=e),n&&t&&(n=this.options.version<t),n},r.prototype.checkGroups=function(e){return e?this.options.groups.some(function(t){return e.includes(t)}):!0},r}(),ce={enableCircularCheck:!1,enableImplicitConversion:!1,excludeExtraneousValues:!1,excludePrefixes:void 0,exposeDefaultValues:!1,exposeUnsetFields:!0,groups:void 0,ignoreDecorators:!1,strategy:void 0,targetMaps:void 0,version:void 0},q=globalThis&&globalThis.__assign||function(){return q=Object.assign||function(r){for(var e,t=1,n=arguments.length;t<n;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(r[i]=e[i])}return r},q.apply(this,arguments)},Bt=function(){function r(){}return r.prototype.instanceToPlain=function(e,t){var n=new ae(C.CLASS_TO_PLAIN,q(q({},ce),t));return n.transform(void 0,e,void 0,void 0,void 0,void 0)},r.prototype.classToPlainFromExist=function(e,t,n){var i=new ae(C.CLASS_TO_PLAIN,q(q({},ce),n));return i.transform(t,e,void 0,void 0,void 0,void 0)},r.prototype.plainToInstance=function(e,t,n){var i=new ae(C.PLAIN_TO_CLASS,q(q({},ce),n));return i.transform(void 0,t,e,void 0,void 0,void 0)},r.prototype.plainToClassFromExist=function(e,t,n){var i=new ae(C.PLAIN_TO_CLASS,q(q({},ce),n));return i.transform(e,t,void 0,void 0,void 0,void 0)},r.prototype.instanceToInstance=function(e,t){var n=new ae(C.CLASS_TO_CLASS,q(q({},ce),t));return n.transform(void 0,e,void 0,void 0,void 0,void 0)},r.prototype.classToClassFromExist=function(e,t,n){var i=new ae(C.CLASS_TO_CLASS,q(q({},ce),n));return i.transform(t,e,void 0,void 0,void 0,void 0)},r.prototype.serialize=function(e,t){return JSON.stringify(this.instanceToPlain(e,t))},r.prototype.deserialize=function(e,t,n){var i=JSON.parse(t);return this.plainToInstance(e,i,n)},r.prototype.deserializeArray=function(e,t,n){var i=JSON.parse(t);return this.plainToInstance(e,i,n)},r}();function Ye(r,e){return e===void 0&&(e={}),function(t,n){var i=Reflect.getMetadata("design:type",t,n);U.addTypeMetadata({target:t.constructor,propertyName:n,reflectedType:i,typeFunction:r,options:e})}}var ct=new Bt;function jt(r,e){return ct.instanceToPlain(r,e)}function $t(r,e,t){return ct.plainToInstance(r,e,t)}/*! *****************************************************************************
8
- Copyright (C) Microsoft. All rights reserved.
9
- Licensed under the Apache License, Version 2.0 (the "License"); you may not use
10
- this file except in compliance with the License. You may obtain a copy of the
11
- License at http://www.apache.org/licenses/LICENSE-2.0
12
-
13
- THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
15
- WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
16
- MERCHANTABLITY OR NON-INFRINGEMENT.
17
-
18
- See the Apache Version 2.0 License for specific language governing permissions
19
- and limitations under the License.
20
- ***************************************************************************** */var ut;(function(r){(function(e){var t=typeof oe=="object"?oe:typeof self=="object"?self:typeof this=="object"?this:Function("return this;")(),n=i(r);typeof t.Reflect>"u"?t.Reflect=r:n=i(t.Reflect,n),e(n);function i(u,a){return function(f,g){typeof u[f]!="function"&&Object.defineProperty(u,f,{configurable:!0,writable:!0,value:g}),a&&a(f,g)}}})(function(e){var t=Object.prototype.hasOwnProperty,n=typeof Symbol=="function",i=n&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",u=n&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",a=typeof Object.create=="function",f={__proto__:[]}instanceof Array,g=!a&&!f,w={create:a?function(){return nt(Object.create(null))}:f?function(){return nt({__proto__:null})}:function(){return nt({})},has:g?function(s,o){return t.call(s,o)}:function(s,o){return o in s},get:g?function(s,o){return t.call(s,o)?s[o]:void 0}:function(s,o){return s[o]}},p=Object.getPrototypeOf(Function),v=typeof process=="object"&&process.env&&process.env.REFLECT_METADATA_USE_MAP_POLYFILL==="true",h=!v&&typeof Map=="function"&&typeof Map.prototype.entries=="function"?Map:rn(),T=!v&&typeof Set=="function"&&typeof Set.prototype.entries=="function"?Set:sn(),x=!v&&typeof WeakMap=="function"?WeakMap:on(),G=new x;function m(s,o,c,d){if(k(c)){if(!Et(s))throw new TypeError;if(!At(o))throw new TypeError;return qe(s,o)}else{if(!Et(s))throw new TypeError;if(!j(o))throw new TypeError;if(!j(d)&&!k(d)&&!de(d))throw new TypeError;return de(d)&&(d=void 0),c=V(c),Je(s,o,c,d)}}e("decorate",m);function D(s,o){function c(d,y){if(!j(d))throw new TypeError;if(!k(y)&&!Kt(y))throw new TypeError;X(s,o,d,y)}return c}e("metadata",D);function L(s,o,c,d){if(!j(c))throw new TypeError;return k(d)||(d=V(d)),X(s,o,c,d)}e("defineMetadata",L);function M(s,o,c){if(!j(o))throw new TypeError;return k(c)||(c=V(c)),we(s,o,c)}e("hasMetadata",M);function J(s,o,c){if(!j(o))throw new TypeError;return k(c)||(c=V(c)),fe(s,o,c)}e("hasOwnMetadata",J);function E(s,o,c){if(!j(o))throw new TypeError;return k(c)||(c=V(c)),ie(s,o,c)}e("getMetadata",E);function B(s,o,c){if(!j(o))throw new TypeError;return k(c)||(c=V(c)),R(s,o,c)}e("getOwnMetadata",B);function Q(s,o){if(!j(s))throw new TypeError;return k(o)||(o=V(o)),Mt(s,o)}e("getMetadataKeys",Q);function P(s,o){if(!j(s))throw new TypeError;return k(o)||(o=V(o)),Ct(s,o)}e("getOwnMetadataKeys",P);function et(s,o,c){if(!j(o))throw new TypeError;k(c)||(c=V(c));var d=te(o,c,!1);if(k(d)||!d.delete(s))return!1;if(d.size>0)return!0;var y=G.get(o);return y.delete(c),y.size>0||G.delete(o),!0}e("deleteMetadata",et);function qe(s,o){for(var c=s.length-1;c>=0;--c){var d=s[c],y=d(o);if(!k(y)&&!de(y)){if(!At(y))throw new TypeError;o=y}}return o}function Je(s,o,c,d){for(var y=s.length-1;y>=0;--y){var $=s[y],S=$(o,c,d);if(!k(S)&&!de(S)){if(!j(S))throw new TypeError;d=S}}return d}function te(s,o,c){var d=G.get(s);if(k(d)){if(!c)return;d=new h,G.set(s,d)}var y=d.get(o);if(k(y)){if(!c)return;y=new h,d.set(o,y)}return y}function we(s,o,c){var d=fe(s,o,c);if(d)return!0;var y=tt(o);return de(y)?!1:we(s,y,c)}function fe(s,o,c){var d=te(o,c,!1);return k(d)?!1:Zt(d.has(s))}function ie(s,o,c){var d=fe(s,o,c);if(d)return R(s,o,c);var y=tt(o);if(!de(y))return ie(s,y,c)}function R(s,o,c){var d=te(o,c,!1);if(!k(d))return d.get(s)}function X(s,o,c,d){var y=te(c,d,!0);y.set(s,o)}function Mt(s,o){var c=Ct(s,o),d=tt(s);if(d===null)return c;var y=Mt(d,o);if(y.length<=0)return c;if(c.length<=0)return y;for(var $=new T,S=[],b=0,_=c;b<_.length;b++){var A=_[b],O=$.has(A);O||($.add(A),S.push(A))}for(var ne=0,xt=y;ne<xt.length;ne++){var A=xt[ne],O=$.has(A);O||($.add(A),S.push(A))}return S}function Ct(s,o){var c=[],d=te(s,o,!1);if(k(d))return c;for(var y=d.keys(),$=Vt(y),S=0;;){var b=tn($);if(!b)return c.length=S,c;var _=en(b);try{c[S]=_}catch(A){try{nn($)}finally{throw A}}S++}}function bt(s){if(s===null)return 1;switch(typeof s){case"undefined":return 0;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"object":return s===null?1:6;default:return 6}}function k(s){return s===void 0}function de(s){return s===null}function Ht(s){return typeof s=="symbol"}function j(s){return typeof s=="object"?s!==null:typeof s=="function"}function Yt(s,o){switch(bt(s)){case 0:return s;case 1:return s;case 2:return s;case 3:return s;case 4:return s;case 5:return s}var c=o===3?"string":o===5?"number":"default",d=Ot(s,i);if(d!==void 0){var y=d.call(s,c);if(j(y))throw new TypeError;return y}return Xt(s,c==="default"?"number":c)}function Xt(s,o){if(o==="string"){var c=s.toString;if(he(c)){var d=c.call(s);if(!j(d))return d}var y=s.valueOf;if(he(y)){var d=y.call(s);if(!j(d))return d}}else{var y=s.valueOf;if(he(y)){var d=y.call(s);if(!j(d))return d}var $=s.toString;if(he($)){var d=$.call(s);if(!j(d))return d}}throw new TypeError}function Zt(s){return!!s}function Qt(s){return""+s}function V(s){var o=Yt(s,3);return Ht(o)?o:Qt(o)}function Et(s){return Array.isArray?Array.isArray(s):s instanceof Object?s instanceof Array:Object.prototype.toString.call(s)==="[object Array]"}function he(s){return typeof s=="function"}function At(s){return typeof s=="function"}function Kt(s){switch(bt(s)){case 3:return!0;case 4:return!0;default:return!1}}function Ot(s,o){var c=s[o];if(c!=null){if(!he(c))throw new TypeError;return c}}function Vt(s){var o=Ot(s,u);if(!he(o))throw new TypeError;var c=o.call(s);if(!j(c))throw new TypeError;return c}function en(s){return s.value}function tn(s){var o=s.next();return o.done?!1:o}function nn(s){var o=s.return;o&&o.call(s)}function tt(s){var o=Object.getPrototypeOf(s);if(typeof s!="function"||s===p||o!==p)return o;var c=s.prototype,d=c&&Object.getPrototypeOf(c);if(d==null||d===Object.prototype)return o;var y=d.constructor;return typeof y!="function"||y===s?o:y}function rn(){var s={},o=[],c=function(){function S(b,_,A){this._index=0,this._keys=b,this._values=_,this._selector=A}return S.prototype["@@iterator"]=function(){return this},S.prototype[u]=function(){return this},S.prototype.next=function(){var b=this._index;if(b>=0&&b<this._keys.length){var _=this._selector(this._keys[b],this._values[b]);return b+1>=this._keys.length?(this._index=-1,this._keys=o,this._values=o):this._index++,{value:_,done:!1}}return{value:void 0,done:!0}},S.prototype.throw=function(b){throw this._index>=0&&(this._index=-1,this._keys=o,this._values=o),b},S.prototype.return=function(b){return this._index>=0&&(this._index=-1,this._keys=o,this._values=o),{value:b,done:!0}},S}();return function(){function S(){this._keys=[],this._values=[],this._cacheKey=s,this._cacheIndex=-2}return Object.defineProperty(S.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),S.prototype.has=function(b){return this._find(b,!1)>=0},S.prototype.get=function(b){var _=this._find(b,!1);return _>=0?this._values[_]:void 0},S.prototype.set=function(b,_){var A=this._find(b,!0);return this._values[A]=_,this},S.prototype.delete=function(b){var _=this._find(b,!1);if(_>=0){for(var A=this._keys.length,O=_+1;O<A;O++)this._keys[O-1]=this._keys[O],this._values[O-1]=this._values[O];return this._keys.length--,this._values.length--,b===this._cacheKey&&(this._cacheKey=s,this._cacheIndex=-2),!0}return!1},S.prototype.clear=function(){this._keys.length=0,this._values.length=0,this._cacheKey=s,this._cacheIndex=-2},S.prototype.keys=function(){return new c(this._keys,this._values,d)},S.prototype.values=function(){return new c(this._keys,this._values,y)},S.prototype.entries=function(){return new c(this._keys,this._values,$)},S.prototype["@@iterator"]=function(){return this.entries()},S.prototype[u]=function(){return this.entries()},S.prototype._find=function(b,_){return this._cacheKey!==b&&(this._cacheIndex=this._keys.indexOf(this._cacheKey=b)),this._cacheIndex<0&&_&&(this._cacheIndex=this._keys.length,this._keys.push(b),this._values.push(void 0)),this._cacheIndex},S}();function d(S,b){return S}function y(S,b){return b}function $(S,b){return[S,b]}}function sn(){return function(){function s(){this._map=new h}return Object.defineProperty(s.prototype,"size",{get:function(){return this._map.size},enumerable:!0,configurable:!0}),s.prototype.has=function(o){return this._map.has(o)},s.prototype.add=function(o){return this._map.set(o,o),this},s.prototype.delete=function(o){return this._map.delete(o)},s.prototype.clear=function(){this._map.clear()},s.prototype.keys=function(){return this._map.keys()},s.prototype.values=function(){return this._map.values()},s.prototype.entries=function(){return this._map.entries()},s.prototype["@@iterator"]=function(){return this.keys()},s.prototype[u]=function(){return this.keys()},s}()}function on(){var s=16,o=w.create(),c=d();return function(){function _(){this._key=d()}return _.prototype.has=function(A){var O=y(A,!1);return O!==void 0?w.has(O,this._key):!1},_.prototype.get=function(A){var O=y(A,!1);return O!==void 0?w.get(O,this._key):void 0},_.prototype.set=function(A,O){var ne=y(A,!0);return ne[this._key]=O,this},_.prototype.delete=function(A){var O=y(A,!1);return O!==void 0?delete O[this._key]:!1},_.prototype.clear=function(){this._key=d()},_}();function d(){var _;do _="@@WeakMap@@"+b();while(w.has(o,_));return o[_]=!0,_}function y(_,A){if(!t.call(_,c)){if(!A)return;Object.defineProperty(_,c,{value:w.create()})}return _[c]}function $(_,A){for(var O=0;O<A;++O)_[O]=Math.random()*255|0;return _}function S(_){return typeof Uint8Array=="function"?typeof crypto<"u"?crypto.getRandomValues(new Uint8Array(_)):typeof msCrypto<"u"?msCrypto.getRandomValues(new Uint8Array(_)):$(new Uint8Array(_),_):$(new Array(_),_)}function b(){var _=S(s);_[6]=_[6]&79|64,_[8]=_[8]&191|128;for(var A="",O=0;O<s;++O){var ne=_[O];(O===4||O===6||O===8)&&(A+="-"),ne<16&&(A+="0"),A+=ne.toString(16).toLowerCase()}return A}}function nt(s){return s.__=void 0,delete s.__,s}})})(ut||(ut={}));var Ft=Object.defineProperty,Gt=Object.getOwnPropertyDescriptor,Xe=(r,e,t,n)=>{for(var i=n>1?void 0:n?Gt(e,t):e,u=r.length-1,a;u>=0;u--)(a=r[u])&&(i=(n?a(e,t,i):a(i))||i);return n&&i&&Ft(e,t,i),i};const Y=0,I=1,ft=4294967295,le=3;class Se{constructor(e){Object.assign(this,e)}update(){var e,t,n,i,u;(e=this.ScalarCmd)==null||e.forEach((a,f)=>a.Index=f),(t=this.RotateCmd)==null||t.forEach((a,f)=>a.Index=f),(n=this.LinearCmd)==null||n.forEach((a,f)=>a.Index=f),(i=this.SensorReadCmd)==null||i.forEach((a,f)=>a.Index=f),(u=this.SensorSubscribeCmd)==null||u.forEach((a,f)=>a.Index=f)}}var re=(r=>(r.Unknown="Unknown",r.Vibrate="Vibrate",r.Rotate="Rotate",r.Oscillate="Oscillate",r.Constrict="Constrict",r.Inflate="Inflate",r.Position="Position",r))(re||{}),K=(r=>(r.Unknown="Unknown",r.Battery="Battery",r.RSSI="RSSI",r.Button="Button",r.Pressure="Pressure",r))(K||{});class dt{constructor(e){this.Index=0,Object.assign(this,e)}}class ht{constructor(e){this.Endpoints=e}}class lt{constructor(e){this.Index=0,Object.assign(this,e)}}class H{constructor(e){this.Id=e}get Type(){return this.constructor}toJSON(){return JSON.stringify(this.toProtocolFormat())}toProtocolFormat(){const e={};return e[this.constructor.Name]=jt(this),e}update(){}}class z extends H{constructor(e,t){super(t),this.DeviceIndex=e,this.Id=t}}class se extends H{constructor(e=Y){super(e),this.Id=e}}class pe extends se{constructor(e=I){super(e),this.Id=e}}pe.Name="Ok";class Ze extends H{constructor(e=I){super(e),this.Id=e}}Ze.Name="Ping";var W=(r=>(r[r.ERROR_UNKNOWN=0]="ERROR_UNKNOWN",r[r.ERROR_INIT=1]="ERROR_INIT",r[r.ERROR_PING=2]="ERROR_PING",r[r.ERROR_MSG=3]="ERROR_MSG",r[r.ERROR_DEVICE=4]="ERROR_DEVICE",r))(W||{});let Z=class extends H{constructor(e,t=0,n=I){super(n),this.ErrorMessage=e,this.ErrorCode=t,this.Id=n}get Schemversion(){return 0}};Z.Name="Error";class Me{constructor(e){Object.assign(this,e)}}Xe([Ye(()=>Se)],Me.prototype,"DeviceMessages",2);class Ce extends H{constructor(e,t=I){super(t),this.Devices=e,this.Id=t}update(){for(const e of this.Devices)e.DeviceMessages.update()}}Ce.Name="DeviceList",Xe([Ye(()=>Me)],Ce.prototype,"Devices",2);class ge extends se{constructor(e){super(),Object.assign(this,e)}update(){this.DeviceMessages.update()}}ge.Name="DeviceAdded",Xe([Ye(()=>Se)],ge.prototype,"DeviceMessages",2);class be extends se{constructor(e){super(),this.DeviceIndex=e}}be.Name="DeviceRemoved";class Ee extends H{constructor(e=I){super(e),this.Id=e}}Ee.Name="RequestDeviceList";class Ae extends H{constructor(e=I){super(e),this.Id=e}}Ae.Name="StartScanning";class Oe extends H{constructor(e=I){super(e),this.Id=e}}Oe.Name="StopScanning";class xe extends se{constructor(){super()}}xe.Name="ScanningFinished";class Le extends H{constructor(e,t=0,n=I){super(n),this.ClientName=e,this.MessageVersion=t,this.Id=n}}Le.Name="RequestServerInfo";class Re extends se{constructor(e,t,n,i=I){super(),this.MessageVersion=e,this.MaxPingTime=t,this.ServerName=n,this.Id=i}}Re.Name="ServerInfo";class Ie extends z{constructor(e=-1,t=I){super(e,t),this.DeviceIndex=e,this.Id=t}}Ie.Name="StopDeviceCmd";class De extends H{constructor(e=I){super(e),this.Id=e}}De.Name="StopAllDevices";class me{constructor(e){this.Index=e}}class Te extends me{constructor(e,t,n){super(e),this.Scalar=t,this.ActuatorType=n}}class ve extends z{constructor(e,t=-1,n=I){super(t,n),this.Scalars=e,this.DeviceIndex=t,this.Id=n}}ve.Name="ScalarCmd";class Qe extends me{constructor(e,t,n){super(e),this.Speed=t,this.Clockwise=n}}const pt=class Lt extends z{constructor(e,t=-1,n=I){super(t,n),this.Rotations=e,this.DeviceIndex=t,this.Id=n}static Create(e,t){const n=new Array;let i=0;for(const[u,a]of t)n.push(new Qe(i,u,a)),++i;return new Lt(n,e)}};pt.Name="RotateCmd";let Ne=pt;class Ke extends me{constructor(e,t,n){super(e),this.Position=t,this.Duration=n}}const gt=class Rt extends z{constructor(e,t=-1,n=I){super(t,n),this.Vectors=e,this.DeviceIndex=t,this.Id=n}static Create(e,t){const n=new Array;let i=0;for(const u of t)n.push(new Ke(i,u[0],u[1])),++i;return new Rt(n,e)}};gt.Name="LinearCmd";let Pe=gt;class ke extends z{constructor(e,t,n,i=I){super(e,i),this.DeviceIndex=e,this.SensorIndex=t,this.SensorType=n,this.Id=i}}ke.Name="SensorReadCmd";class Be extends z{constructor(e,t,n,i,u=I){super(e,u),this.DeviceIndex=e,this.SensorIndex=t,this.SensorType=n,this.Data=i,this.Id=u}}Be.Name="SensorReading";class je extends z{constructor(e,t,n,i,u=I){super(e,u),this.DeviceIndex=e,this.Endpoint=t,this.ExpectedLength=n,this.Timeout=i,this.Id=u}}je.Name="RawReadCmd";class $e extends z{constructor(e,t,n,i,u=I){super(e,u),this.DeviceIndex=e,this.Endpoint=t,this.Data=n,this.WriteWithResponse=i,this.Id=u}}$e.Name="RawWriteCmd";class Fe extends z{constructor(e,t,n=I){super(e,n),this.DeviceIndex=e,this.Endpoint=t,this.Id=n}}Fe.Name="RawSubscribeCmd";class Ge extends z{constructor(e,t,n=I){super(e,n),this.DeviceIndex=e,this.Endpoint=t,this.Id=n}}Ge.Name="RawUnsubscribeCmd";class Ue extends z{constructor(e,t,n,i=I){super(e,i),this.DeviceIndex=e,this.Endpoint=t,this.Data=n,this.Id=i}}Ue.Name="RawReading";const Ut=Object.freeze(Object.defineProperty({__proto__:null,ActuatorType:re,ButtplugDeviceMessage:z,ButtplugMessage:H,ButtplugSystemMessage:se,DEFAULT_MESSAGE_ID:I,DeviceAdded:ge,DeviceInfo:Me,DeviceList:Ce,DeviceRemoved:be,Error:Z,ErrorClass:W,GenericDeviceMessageAttributes:dt,GenericMessageSubcommand:me,LinearCmd:Pe,MAX_ID:ft,MESSAGE_SPEC_VERSION:le,MessageAttributes:Se,Ok:pe,Ping:Ze,RawDeviceMessageAttributes:ht,RawReadCmd:je,RawReading:Ue,RawSubscribeCmd:Fe,RawUnsubscribeCmd:Ge,RawWriteCmd:$e,RequestDeviceList:Ee,RequestServerInfo:Le,RotateCmd:Ne,RotateSubcommand:Qe,SYSTEM_MESSAGE_ID:Y,ScalarCmd:ve,ScalarSubcommand:Te,ScanningFinished:xe,SensorDeviceMessageAttributes:lt,SensorReadCmd:ke,SensorReading:Be,SensorType:K,ServerInfo:Re,StartScanning:Ae,StopAllDevices:De,StopDeviceCmd:Ie,StopScanning:Oe,VectorSubcommand:Ke},Symbol.toStringTag,{value:"Module"}));/*!
21
- * Buttplug JS Source Code File - Visit https://buttplug.io for more info about
22
- * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the
23
- * project root for full license information.
24
- *
25
- * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.
26
- */class F extends Error{constructor(e,t,n=Y,i){super(e),this.errorClass=W.ERROR_UNKNOWN,this.errorClass=t,this.innerError=i,this.messageId=n}get ErrorClass(){return this.errorClass}get InnerError(){return this.innerError}get Id(){return this.messageId}get ErrorMessage(){return new Z(this.message,this.ErrorClass,this.Id)}static LogAndError(e,t,n,i=Y){return t.Error(n),new e(n,i)}static FromError(e){switch(e.ErrorCode){case W.ERROR_DEVICE:return new N(e.ErrorMessage,e.Id);case W.ERROR_INIT:return new We(e.ErrorMessage,e.Id);case W.ERROR_UNKNOWN:return new vt(e.ErrorMessage,e.Id);case W.ERROR_PING:return new mt(e.ErrorMessage,e.Id);case W.ERROR_MSG:return new ue(e.ErrorMessage,e.Id);default:throw new Error(`Message type ${e.ErrorCode} not handled`)}}}class We extends F{constructor(e,t=Y){super(e,W.ERROR_INIT,t)}}class N extends F{constructor(e,t=Y){super(e,W.ERROR_DEVICE,t)}}class ue extends F{constructor(e,t=Y){super(e,W.ERROR_MSG,t)}}class mt extends F{constructor(e,t=Y){super(e,W.ERROR_PING,t)}}class vt extends F{constructor(e,t=Y){super(e,W.ERROR_UNKNOWN,t)}}function yt(r){for(const e of Object.values(Ut))if(typeof e=="function"&&"Name"in e&&e.Name===r)return e;return null}function ee(r){return yt(Object.getPrototypeOf(r).constructor.Name)}function Ve(r){const e=JSON.parse(r),t=[];for(const n of Array.from(e)){const i=Object.getOwnPropertyNames(n)[0],u=yt(i);if(u){const a=$t(u,n[i]);a.update(),t.push(a)}}return t}class ye extends _e{constructor(e,t){super(),this._deviceInfo=e,this._sendClosure=t,this.allowedMsgs=new Map,e.DeviceMessages.update()}get name(){return this._deviceInfo.DeviceName}get displayName(){return this._deviceInfo.DeviceDisplayName}get index(){return this._deviceInfo.DeviceIndex}get messageTimingGap(){return this._deviceInfo.DeviceMessageTimingGap}get messageAttributes(){return this._deviceInfo.DeviceMessages}static fromMsg(e,t){return new ye(e,t)}async send(e){return await this._sendClosure(this,e)}async sendExpectOk(e){const t=await this.send(e);switch(ee(t)){case pe:return;case Z:throw F.FromError(t);default:throw new ue(`Message type ${t.constructor} not handled by SendMsgExpectOk`)}}async scalar(e){Array.isArray(e)?await this.sendExpectOk(new ve(e,this.index)):await this.sendExpectOk(new ve([e],this.index))}async scalarCommandBuilder(e,t){var u;const n=(u=this.messageAttributes.ScalarCmd)==null?void 0:u.filter(a=>a.ActuatorType===t);if(!n||n.length===0)throw new N(`Device ${this.name} has no ${t} capabilities`);const i=[];if(typeof e=="number")n.forEach(a=>i.push(new Te(a.Index,e,t)));else if(Array.isArray(e)){if(e.length>n.length)throw new N(`${e.length} commands send to a device with ${n.length} vibrators`);n.forEach((a,f)=>{i.push(new Te(a.Index,e[f],t))})}else throw new N(`${t} can only take numbers or arrays of numbers.`);await this.scalar(i)}get vibrateAttributes(){var e;return((e=this.messageAttributes.ScalarCmd)==null?void 0:e.filter(t=>t.ActuatorType===re.Vibrate))??[]}async vibrate(e){await this.scalarCommandBuilder(e,re.Vibrate)}get oscillateAttributes(){var e;return((e=this.messageAttributes.ScalarCmd)==null?void 0:e.filter(t=>t.ActuatorType===re.Oscillate))??[]}async oscillate(e){await this.scalarCommandBuilder(e,re.Oscillate)}get rotateAttributes(){return this.messageAttributes.RotateCmd??[]}async rotate(e,t){const n=this.messageAttributes.RotateCmd;if(!n||n.length===0)throw new N(`Device ${this.name} has no Rotate capabilities`);let i;if(typeof e=="number")i=Ne.Create(this.index,new Array(n.length).fill([e,t]));else if(Array.isArray(e))i=Ne.Create(this.index,e);else throw new N("SendRotateCmd can only take a number and boolean, or an array of number/boolean tuples");await this.sendExpectOk(i)}get linearAttributes(){return this.messageAttributes.LinearCmd??[]}async linear(e,t){const n=this.messageAttributes.LinearCmd;if(!n||n.length===0)throw new N(`Device ${this.name} has no Linear capabilities`);let i;if(typeof e=="number")i=Pe.Create(this.index,new Array(n.length).fill([e,t]));else if(Array.isArray(e))i=Pe.Create(this.index,e);else throw new N("SendLinearCmd can only take a number and number, or an array of number/number tuples");await this.sendExpectOk(i)}async sensorRead(e,t){const n=await this.send(new ke(this.index,e,t));switch(ee(n)){case Be:return n.Data;case Z:throw F.FromError(n);default:throw new ue(`Message type ${n.constructor} not handled by sensorRead`)}}get hasBattery(){var t;const e=(t=this.messageAttributes.SensorReadCmd)==null?void 0:t.filter(n=>n.SensorType===K.Battery);return e!==void 0&&e.length>0}async battery(){var n;if(!this.hasBattery)throw new N(`Device ${this.name} has no Battery capabilities`);const e=(n=this.messageAttributes.SensorReadCmd)==null?void 0:n.filter(i=>i.SensorType===K.Battery);return(await this.sensorRead(e[0].Index,K.Battery))[0]/100}get hasRssi(){var t;const e=(t=this.messageAttributes.SensorReadCmd)==null?void 0:t.filter(n=>n.SensorType===K.RSSI);return e!==void 0&&e.length===0}async rssi(){var n;if(!this.hasRssi)throw new N(`Device ${this.name} has no RSSI capabilities`);const e=(n=this.messageAttributes.SensorReadCmd)==null?void 0:n.filter(i=>i.SensorType===K.RSSI);return(await this.sensorRead(e[0].Index,K.RSSI))[0]}async rawRead(e,t,n){if(!this.messageAttributes.RawReadCmd)throw new N(`Device ${this.name} has no raw read capabilities`);if(this.messageAttributes.RawReadCmd.Endpoints.indexOf(e)===-1)throw new N(`Device ${this.name} has no raw readable endpoint ${e}`);const i=await this.send(new je(this.index,e,t,n));switch(ee(i)){case Ue:return new Uint8Array(i.Data);case Z:throw F.FromError(i);default:throw new ue(`Message type ${i.constructor} not handled by rawRead`)}}async rawWrite(e,t,n){if(!this.messageAttributes.RawWriteCmd)throw new N(`Device ${this.name} has no raw write capabilities`);if(this.messageAttributes.RawWriteCmd.Endpoints.indexOf(e)===-1)throw new N(`Device ${this.name} has no raw writable endpoint ${e}`);await this.sendExpectOk(new $e(this.index,e,t,n))}async rawSubscribe(e){if(!this.messageAttributes.RawSubscribeCmd)throw new N(`Device ${this.name} has no raw subscribe capabilities`);if(this.messageAttributes.RawSubscribeCmd.Endpoints.indexOf(e)===-1)throw new N(`Device ${this.name} has no raw subscribable endpoint ${e}`);await this.sendExpectOk(new Fe(this.index,e))}async rawUnsubscribe(e){if(!this.messageAttributes.RawSubscribeCmd)throw new N(`Device ${this.name} has no raw unsubscribe capabilities`);if(this.messageAttributes.RawSubscribeCmd.Endpoints.indexOf(e)===-1)throw new N(`Device ${this.name} has no raw unsubscribable endpoint ${e}`);await this.sendExpectOk(new Ge(this.index,e))}async stop(){await this.sendExpectOk(new Ie(this.index))}emitDisconnected(){this.emit("deviceremoved")}}/*!
27
- * Buttplug JS Source Code File - Visit https://buttplug.io for more info about
28
- * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the
29
- * project root for full license information.
30
- *
31
- * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.
32
- */class wt{constructor(e){this._useCounter=e,this._counter=1,this._waitingMsgs=new Map}PrepareOutgoingMessage(e){this._useCounter&&(e.Id=this._counter,this._counter+=1);let t,n;const i=new Promise((u,a)=>{t=u,n=a});return this._waitingMsgs.set(e.Id,[t,n]),i}ParseIncomingMessages(e){const t=[];for(const n of e)if(n.Id!==Y&&this._waitingMsgs.has(n.Id)){const[i,u]=this._waitingMsgs.get(n.Id);if(n.Type===Z){u(F.FromError(n));continue}i(n);continue}else t.push(n);return t}}/*!
33
- * Buttplug JS Source Code File - Visit https://buttplug.io for more info about
34
- * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the
35
- * project root for full license information.
36
- *
37
- * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.
38
- */class _t extends F{constructor(e){super(e,W.ERROR_UNKNOWN)}}class Wt extends _e{constructor(e="Generic Buttplug Client"){super(),this._pingTimer=null,this._connector=null,this._devices=new Map,this._logger=ot.Logger,this._isScanning=!1,this._sorter=new wt(!0),this.connect=async t=>{this._logger.Info(`ButtplugClient: Connecting using ${t.constructor.name}`),await t.connect(),this._connector=t,this._connector.addListener("message",this.parseMessages),this._connector.addListener("disconnect",this.disconnectHandler),await this.initializeConnection()},this.disconnect=async()=>{this._logger.Debug("ButtplugClient: Disconnect called"),this.checkConnector(),await this.shutdownConnection(),await this._connector.disconnect()},this.startScanning=async()=>{this._logger.Debug("ButtplugClient: StartScanning called"),this._isScanning=!0,await this.sendMsgExpectOk(new Ae)},this.stopScanning=async()=>{this._logger.Debug("ButtplugClient: StopScanning called"),this._isScanning=!1,await this.sendMsgExpectOk(new Oe)},this.stopAllDevices=async()=>{this._logger.Debug("ButtplugClient: StopAllDevices"),await this.sendMsgExpectOk(new De)},this.disconnectHandler=()=>{this._logger.Info("ButtplugClient: Disconnect event receieved."),this.emit("disconnect")},this.parseMessages=t=>{const n=this._sorter.ParseIncomingMessages(t);for(const i of n)switch(ee(i)){case ge:{const u=i,a=ye.fromMsg(u,this.sendDeviceMessageClosure);this._devices.set(u.DeviceIndex,a),this.emit("deviceadded",a);break}case be:{const u=i;if(this._devices.has(u.DeviceIndex)){const a=this._devices.get(u.DeviceIndex);a==null||a.emitDisconnected(),this._devices.delete(u.DeviceIndex),this.emit("deviceremoved",a)}break}case xe:this._isScanning=!1,this.emit("scanningfinished",i);break}},this.initializeConnection=async()=>{this.checkConnector();const t=await this.sendMessage(new Le(this._clientName,le));switch(ee(t)){case Re:{const n=t;if(this._logger.Info(`ButtplugClient: Connected to Server ${n.ServerName}`),n.MaxPingTime,n.MessageVersion<le)throw await this._connector.disconnect(),F.LogAndError(We,this._logger,`Server protocol version ${n.MessageVersion} is older than client protocol version ${le}. Please update server.`);return await this.requestDeviceList(),!0}case Z:{await this._connector.disconnect();const n=t;throw F.LogAndError(We,this._logger,`Cannot connect to server. ${n.ErrorMessage}`)}}return!1},this.requestDeviceList=async()=>{this.checkConnector(),this._logger.Debug("ButtplugClient: ReceiveDeviceList called"),(await this.sendMessage(new Ee)).Devices.forEach(n=>{if(this._devices.has(n.DeviceIndex))this._logger.Debug(`ButtplugClient: Device already added: ${n}`);else{const i=ye.fromMsg(n,this.sendDeviceMessageClosure);this._logger.Debug(`ButtplugClient: Adding Device: ${i}`),this._devices.set(n.DeviceIndex,i),this.emit("deviceadded",i)}})},this.shutdownConnection=async()=>{await this.stopAllDevices(),this._pingTimer!==null&&(clearInterval(this._pingTimer),this._pingTimer=null)},this.sendMsgExpectOk=async t=>{const n=await this.sendMessage(t);switch(ee(n)){case pe:return;case Z:throw F.FromError(n);default:throw F.LogAndError(ue,this._logger,`Message type ${ee(n).constructor} not handled by SendMsgExpectOk`)}},this.sendDeviceMessageClosure=async(t,n)=>await this.sendDeviceMessage(t,n),this._clientName=e,this._logger.Debug(`ButtplugClient: Client ${e} created.`)}get connected(){return this._connector!==null&&this._connector.Connected}get devices(){this.checkConnector();const e=[];return this._devices.forEach(t=>{e.push(t)}),e}get isScanning(){return this._isScanning}async sendDeviceMessage(e,t){if(this.checkConnector(),this._devices.get(e.index)===void 0)throw F.LogAndError(N,this._logger,`Device ${e.index} not available.`);return t.DeviceIndex=e.index,await this.sendMessage(t)}async sendMessage(e){this.checkConnector();const t=this._sorter.PrepareOutgoingMessage(e);return await this._connector.send(e),await t}checkConnector(){if(!this.connected)throw new _t("ButtplugClient not connected")}}class qt extends _e{constructor(e){super(),this._url=e,this._websocketConstructor=null,this.connect=async()=>{const t=new(this._websocketConstructor??WebSocket)(this._url);let n,i;const u=new Promise((f,g)=>{n=f,i=g}),a=()=>i();return t.addEventListener("open",async()=>{this._ws=t;try{await this.initialize(),this._ws.addEventListener("message",f=>{this.parseIncomingMessage(f)}),this._ws.removeEventListener("close",a),this._ws.addEventListener("close",this.disconnect),n()}catch(f){console.log(f),i()}}),t.addEventListener("close",a),u},this.disconnect=async()=>{this.Connected&&(this._ws.close(),this._ws=void 0,this.emit("disconnect"))},this.initialize=async()=>Promise.resolve()}get Connected(){return this._ws!==void 0}sendMessage(e){if(!this.Connected)throw new Error("ButtplugBrowserWebsocketConnector not connected");this._ws.send("["+e.toJSON()+"]")}parseIncomingMessage(e){if(typeof e.data=="string"){const t=Ve(e.data);this.emit("message",t)}else e.data instanceof Blob}onReaderLoad(e){const t=Ve(e.target.result);this.emit("message",t)}}class St extends qt{constructor(){super(...arguments),this.send=e=>{if(!this.Connected)throw new Error("ButtplugClient not connected");this.sendMessage(e)}}}var Jt=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")};class zt extends St{constructor(){super(...arguments),this._websocketConstructor=Jt.WebSocket}}l.ActuatorType=re,l.ButtplugBrowserWebsocketClientConnector=St,l.ButtplugClient=Wt,l.ButtplugClientConnectorException=_t,l.ButtplugClientDevice=ye,l.ButtplugDeviceError=N,l.ButtplugDeviceMessage=z,l.ButtplugError=F,l.ButtplugInitError=We,l.ButtplugLogLevel=He,l.ButtplugLogger=ot,l.ButtplugMessage=H,l.ButtplugMessageError=ue,l.ButtplugMessageSorter=wt,l.ButtplugNodeWebsocketClientConnector=zt,l.ButtplugPingError=mt,l.ButtplugSystemMessage=se,l.ButtplugUnknownError=vt,l.DEFAULT_MESSAGE_ID=I,l.DeviceAdded=ge,l.DeviceInfo=Me,l.DeviceList=Ce,l.DeviceRemoved=be,l.Error=Z,l.ErrorClass=W,l.GenericDeviceMessageAttributes=dt,l.GenericMessageSubcommand=me,l.LinearCmd=Pe,l.LogMessage=st,l.MAX_ID=ft,l.MESSAGE_SPEC_VERSION=le,l.MessageAttributes=Se,l.Ok=pe,l.Ping=Ze,l.RawDeviceMessageAttributes=ht,l.RawReadCmd=je,l.RawReading=Ue,l.RawSubscribeCmd=Fe,l.RawUnsubscribeCmd=Ge,l.RawWriteCmd=$e,l.RequestDeviceList=Ee,l.RequestServerInfo=Le,l.RotateCmd=Ne,l.RotateSubcommand=Qe,l.SYSTEM_MESSAGE_ID=Y,l.ScalarCmd=ve,l.ScalarSubcommand=Te,l.ScanningFinished=xe,l.SensorDeviceMessageAttributes=lt,l.SensorReadCmd=ke,l.SensorReading=Be,l.SensorType=K,l.ServerInfo=Re,l.StartScanning=Ae,l.StopAllDevices=De,l.StopDeviceCmd=Ie,l.StopScanning=Oe,l.VectorSubcommand=Ke,l.fromJSON=Ve,l.getMessageClassFromMessage=ee,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
1
+ (function(i,P){typeof exports=="object"&&typeof module<"u"?P(exports):typeof define=="function"&&define.amd?define(["exports"],P):(i=typeof globalThis<"u"?globalThis:i||self,P(i.buttplug={}))})(this,(function(i){"use strict";function P(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var A={exports:{}},G;function ee(){return G||(G=1,(function(n){var e=Object.prototype.hasOwnProperty,t="~";function s(){}Object.create&&(s.prototype=Object.create(null),new s().__proto__||(t=!1));function u(l,o,a){this.fn=l,this.context=o,this.once=a||!1}function f(l,o,a,c,m){if(typeof a!="function")throw new TypeError("The listener must be a function");var v=new u(a,c||l,m),d=t?t+o:o;return l._events[d]?l._events[d].fn?l._events[d]=[l._events[d],v]:l._events[d].push(v):(l._events[d]=v,l._eventsCount++),l}function h(l,o){--l._eventsCount===0?l._events=new s:delete l._events[o]}function p(){this._events=new s,this._eventsCount=0}p.prototype.eventNames=function(){var o=[],a,c;if(this._eventsCount===0)return o;for(c in a=this._events)e.call(a,c)&&o.push(t?c.slice(1):c);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(a)):o},p.prototype.listeners=function(o){var a=t?t+o:o,c=this._events[a];if(!c)return[];if(c.fn)return[c.fn];for(var m=0,v=c.length,d=new Array(v);m<v;m++)d[m]=c[m].fn;return d},p.prototype.listenerCount=function(o){var a=t?t+o:o,c=this._events[a];return c?c.fn?1:c.length:0},p.prototype.emit=function(o,a,c,m,v,d){var R=t?t+o:o;if(!this._events[R])return!1;var r=this._events[R],y=arguments.length,D,g;if(r.fn){switch(r.once&&this.removeListener(o,r.fn,void 0,!0),y){case 1:return r.fn.call(r.context),!0;case 2:return r.fn.call(r.context,a),!0;case 3:return r.fn.call(r.context,a,c),!0;case 4:return r.fn.call(r.context,a,c,m),!0;case 5:return r.fn.call(r.context,a,c,m,v),!0;case 6:return r.fn.call(r.context,a,c,m,v,d),!0}for(g=1,D=new Array(y-1);g<y;g++)D[g-1]=arguments[g];r.fn.apply(r.context,D)}else{var de=r.length,k;for(g=0;g<de;g++)switch(r[g].once&&this.removeListener(o,r[g].fn,void 0,!0),y){case 1:r[g].fn.call(r[g].context);break;case 2:r[g].fn.call(r[g].context,a);break;case 3:r[g].fn.call(r[g].context,a,c);break;case 4:r[g].fn.call(r[g].context,a,c,m);break;default:if(!D)for(k=1,D=new Array(y-1);k<y;k++)D[k-1]=arguments[k];r[g].fn.apply(r[g].context,D)}}return!0},p.prototype.on=function(o,a,c){return f(this,o,a,c,!1)},p.prototype.once=function(o,a,c){return f(this,o,a,c,!0)},p.prototype.removeListener=function(o,a,c,m){var v=t?t+o:o;if(!this._events[v])return this;if(!a)return h(this,v),this;var d=this._events[v];if(d.fn)d.fn===a&&(!m||d.once)&&(!c||d.context===c)&&h(this,v);else{for(var R=0,r=[],y=d.length;R<y;R++)(d[R].fn!==a||m&&!d[R].once||c&&d[R].context!==c)&&r.push(d[R]);r.length?this._events[v]=r.length===1?r[0]:r:h(this,v)}return this},p.prototype.removeAllListeners=function(o){var a;return o?(a=t?t+o:o,this._events[a]&&h(this,a)):(this._events=new s,this._eventsCount=0),this},p.prototype.off=p.prototype.removeListener,p.prototype.addListener=p.prototype.on,p.prefixed=t,p.EventEmitter=p,n.exports=p})(A)),A.exports}var te=ee();const B=P(te);var F=(n=>(n[n.Off=0]="Off",n[n.Error=1]="Error",n[n.Warn=2]="Warn",n[n.Info=3]="Info",n[n.Debug=4]="Debug",n[n.Trace=5]="Trace",n))(F||{});class U{timestamp;logMessage;logLevel;constructor(e,t){const s=new Date,u=s.getHours(),f=s.getMinutes(),h=s.getSeconds();this.timestamp=`${u}:${f}:${h}`,this.logMessage=e,this.logLevel=t}get Message(){return this.logMessage}get LogLevel(){return this.logLevel}get Timestamp(){return this.timestamp}get FormattedMessage(){return`${F[this.logLevel]} : ${this.timestamp} : ${this.logMessage}`}}class b extends B{static sLogger=void 0;maximumConsoleLogLevel=0;maximumEventLogLevel=0;static get Logger(){return b.sLogger===void 0&&(b.sLogger=new b),this.sLogger}constructor(){super()}get MaximumConsoleLogLevel(){return this.maximumConsoleLogLevel}set MaximumConsoleLogLevel(e){this.maximumConsoleLogLevel=e}get MaximumEventLogLevel(){return this.maximumEventLogLevel}set MaximumEventLogLevel(e){this.maximumEventLogLevel=e}Error(e){this.AddLogMessage(e,1)}Warn(e){this.AddLogMessage(e,2)}Info(e){this.AddLogMessage(e,3)}Debug(e){this.AddLogMessage(e,4)}Trace(e){this.AddLogMessage(e,5)}AddLogMessage(e,t){if(t>this.maximumEventLogLevel&&t>this.maximumConsoleLogLevel)return;const s=new U(e,t);t<=this.maximumConsoleLogLevel&&console.log(s.FormattedMessage),t<=this.maximumEventLogLevel&&this.emit("log",s)}}class _ extends Error{get ErrorClass(){return this.errorClass}get InnerError(){return this.innerError}get Id(){return this.messageId}get ErrorMessage(){return{Error:{Id:this.Id,ErrorCode:this.ErrorClass,ErrorMessage:this.message}}}static LogAndError(e,t,s,u=M){return t.Error(s),new e(s,u)}static FromError(e){switch(e.ErrorCode){case w.ERROR_DEVICE:return new I(e.ErrorMessage,e.Id);case w.ERROR_INIT:return new T(e.ErrorMessage,e.Id);case w.ERROR_UNKNOWN:return new q(e.ErrorMessage,e.Id);case w.ERROR_PING:return new j(e.ErrorMessage,e.Id);case w.ERROR_MSG:return new C(e.ErrorMessage,e.Id);default:throw new Error(`Message type ${e.ErrorCode} not handled`)}}errorClass=w.ERROR_UNKNOWN;innerError;messageId;constructor(e,t,s=M,u){super(e),this.errorClass=t,this.innerError=u,this.messageId=s}}class T extends _{constructor(e,t=M){super(e,w.ERROR_INIT,t)}}class I extends _{constructor(e,t=M){super(e,w.ERROR_DEVICE,t)}}class C extends _{constructor(e,t=M){super(e,w.ERROR_MSG,t)}}class j extends _{constructor(e,t=M){super(e,w.ERROR_PING,t)}}class q extends _{constructor(e,t=M){super(e,w.ERROR_UNKNOWN,t)}}const M=0,ne=1,se=4294967295,H=4,J=0;function W(n){for(let[e,t]of Object.entries(n))if(t!=null)return t.Id;throw new C(`Message ${n} does not have an ID.`)}function K(n,e){for(let[t,s]of Object.entries(n))if(s!=null){s.Id=e;return}throw new C(`Message ${n} does not have an ID.`)}var w=(n=>(n[n.ERROR_UNKNOWN=0]="ERROR_UNKNOWN",n[n.ERROR_INIT=1]="ERROR_INIT",n[n.ERROR_PING=2]="ERROR_PING",n[n.ERROR_MSG=3]="ERROR_MSG",n[n.ERROR_DEVICE=4]="ERROR_DEVICE",n))(w||{}),E=(n=>(n.Unknown="Unknown",n.Vibrate="Vibrate",n.Rotate="Rotate",n.Oscillate="Oscillate",n.Constrict="Constrict",n.Inflate="Inflate",n.Position="Position",n.HwPositionWithDuration="HwPositionWithDuration",n.Temperature="Temperature",n.Spray="Spray",n.Led="Led",n))(E||{}),L=(n=>(n.Unknown="Unknown",n.Battery="Battery",n.RSSI="RSSI",n.Button="Button",n.Pressure="Pressure",n))(L||{}),x=(n=>(n.Read="Read",n.Subscribe="Subscribe",n.Unsubscribe="Unsubscribe",n))(x||{});class re{constructor(e,t,s,u){this._deviceIndex=e,this._deviceName=t,this._feature=s,this._sendClosure=u}send=async e=>await this._sendClosure(e);sendMsgExpectOk=async e=>{const t=await this.send(e);if(t.Ok===void 0)throw t.Error!==void 0?_.FromError(t):new C("Expected Ok or Error, and didn't get either!")};isOutputValid(e){if(this._feature.Output!==void 0&&!this._feature.Output.hasOwnProperty(e))throw new I(`Feature index ${this._feature.FeatureIndex} does not support type ${e} for device ${this._deviceName}`)}isInputValid(e){if(this._feature.Input!==void 0&&!this._feature.Input.hasOwnProperty(e))throw new I(`Feature index ${this._feature.FeatureIndex} does not support type ${e} for device ${this._deviceName}`)}async sendOutputCmd(e){if(this.isOutputValid(e.outputType),e.value===void 0)throw new I(`${e.outputType} requires value defined`);let t=e.outputType,s;if(t==E.HwPositionWithDuration){if(e.duration===void 0)throw new I("PositionWithDuration requires duration defined");s=e.duration}let u,f=e.value;f.percent===void 0?u=e.value.steps:u=Math.ceil(this._feature.Output[t].Value[1]*f.percent);let h={Value:u,Duration:s},p={};p[t.toString()]=h;let l={OutputCmd:{Id:1,DeviceIndex:this._deviceIndex,FeatureIndex:this._feature.FeatureIndex,Command:p}};await this.sendMsgExpectOk(l)}hasOutput(e){return this._feature.Output!==void 0?this._feature.Output.hasOwnProperty(e.toString()):!1}hasInput(e){return this._feature.Input!==void 0?this._feature.Input.hasOwnProperty(e.toString()):!1}async runOutput(e){if(this._feature.Output!==void 0&&this._feature.Output.hasOwnProperty(e.outputType.toString()))return this.sendOutputCmd(e);throw new I(`Output type ${e.outputType} not supported by feature.`)}async runInput(e,t){this.isInputValid(e);let s=this._feature.Input[e];if(console.log(this._feature.Input),t===x.Unsubscribe&&!s.Command.includes(x.Subscribe)&&!s.Command.includes(t))throw new I(`${e} does not support command ${t}`);let u={InputCmd:{Id:1,DeviceIndex:this._deviceIndex,FeatureIndex:this._feature.FeatureIndex,Type:e,Command:t}};if(t==x.Read){const f=await this.send(u);if(f.InputReading!==void 0)return f.InputReading;throw f.Error!==void 0?_.FromError(f):new C("Expected InputReading or Error, and didn't get either!")}else console.log(`Sending subscribe message: ${JSON.stringify(u)}`),await this.sendMsgExpectOk(u),console.log("Got back ok?")}}class $ extends B{constructor(e,t){super(),this._deviceInfo=e,this._sendClosure=t,this._features=new Map(Object.entries(e.DeviceFeatures).map(([s,u])=>[parseInt(s),new re(e.DeviceIndex,e.DeviceName,u,t)]))}_features;get name(){return this._deviceInfo.DeviceName}get displayName(){return this._deviceInfo.DeviceDisplayName}get index(){return this._deviceInfo.DeviceIndex}get messageTimingGap(){return this._deviceInfo.DeviceMessageTimingGap}get features(){return this._features}static fromMsg(e,t){return new $(e,t)}async send(e){return await this._sendClosure(e)}sendMsgExpectOk=async e=>{const t=await this.send(e);if(t.Ok===void 0&&t.Error!==void 0)throw _.FromError(t)};isOutputValid(e,t){if(!this._deviceInfo.DeviceFeatures.hasOwnProperty(e.toString()))throw new I(`Feature index ${e} does not exist for device ${this.name}`);if(this._deviceInfo.DeviceFeatures[e.toString()].Outputs!==void 0&&!this._deviceInfo.DeviceFeatures[e.toString()].Outputs.hasOwnProperty(t))throw new I(`Feature index ${e} does not support type ${t} for device ${this.name}`)}hasOutput(e){return this._features.values().filter(t=>t.hasOutput(e)).toArray().length>0}hasInput(e){return this._features.values().filter(t=>t.hasInput(e)).toArray().length>0}async runOutput(e){let t=[];for(let s of this._features.values())s.hasOutput(e.outputType)&&t.push(s.runOutput(e));if(t.length==0)return Promise.reject(`No features with output type ${e.outputType}`);await Promise.all(t)}async stop(){await this.sendMsgExpectOk({StopCmd:{Id:1,DeviceIndex:this.index,FeatureIndex:void 0,Inputs:!0,Outputs:!0}})}async battery(){for(let e of this._features.values())if(e.hasInput(L.Battery)){let t=await e.runInput(L.Battery,x.Read);if(t===void 0)throw new C("Got incorrect message back.");if(t.Reading[L.Battery]===void 0)throw new C("Got reading with no Battery info.");return t.Reading[L.Battery].Value}throw new I("No battery present on this device.")}emitDisconnected(){this.emit("deviceremoved")}}class z{constructor(e){this._useCounter=e}_counter=1;_waitingMsgs=new Map;PrepareOutgoingMessage(e){this._useCounter&&(K(e,this._counter),this._counter+=1);let t,s;const u=new Promise((f,h)=>{t=f,s=h});return this._waitingMsgs.set(W(e),[t,s]),u}ParseIncomingMessages(e){const t=[];for(const s of e){let u=W(s);if(u!==M&&this._waitingMsgs.has(u)){const[f,h]=this._waitingMsgs.get(u);if(s.Error!==void 0){h(_.FromError(s.Error));continue}f(s);continue}else t.push(s)}return t}}class X extends _{constructor(e){super(e,w.ERROR_UNKNOWN)}}class ie extends B{_pingTimer=null;_connector=null;_devices=new Map;_clientName;_logger=b.Logger;_isScanning=!1;_sorter=new z(!0);constructor(e="Generic Buttplug Client"){super(),this._clientName=e,this._logger.Debug(`ButtplugClient: Client ${e} created.`)}get connected(){return this._connector!==null&&this._connector.Connected}get devices(){return this.checkConnector(),this._devices}get isScanning(){return this._isScanning}connect=async e=>{this._logger.Info(`ButtplugClient: Connecting using ${e.constructor.name}`),await e.connect(),this._connector=e,this._connector.addListener("message",this.parseMessages),this._connector.addListener("disconnect",this.disconnectHandler),await this.initializeConnection()};disconnect=async()=>{this._logger.Debug("ButtplugClient: Disconnect called"),this._devices.clear(),this.checkConnector(),await this.shutdownConnection(),await this._connector.disconnect()};startScanning=async()=>{this._logger.Debug("ButtplugClient: StartScanning called"),this._isScanning=!0,await this.sendMsgExpectOk({StartScanning:{Id:1}})};stopScanning=async()=>{this._logger.Debug("ButtplugClient: StopScanning called"),this._isScanning=!1,await this.sendMsgExpectOk({StopScanning:{Id:1}})};stopAllDevices=async()=>{this._logger.Debug("ButtplugClient: StopCmd (all devices)"),await this.sendMsgExpectOk({StopCmd:{Id:1,DeviceIndex:void 0,FeatureIndex:void 0,Inputs:!0,Outputs:!0}})};disconnectHandler=()=>{this._logger.Info("ButtplugClient: Disconnect event receieved."),this.emit("disconnect")};parseMessages=e=>{const t=this._sorter.ParseIncomingMessages(e);for(const s of t)if(s.DeviceList!==void 0){this.parseDeviceList(s.DeviceList);break}else s.ScanningFinished!==void 0?(this._isScanning=!1,this.emit("scanningfinished",s)):s.InputReading!==void 0?this.emit("inputreading",s):console.log(`Unhandled message: ${s}`)};initializeConnection=async()=>{this.checkConnector();const e=await this.sendMessage({RequestServerInfo:{ClientName:this._clientName,Id:1,ProtocolVersionMajor:H,ProtocolVersionMinor:J}});if(e.ServerInfo!==void 0){const t=e;return this._logger.Info(`ButtplugClient: Connected to Server ${t.ServerName}`),t.MaxPingTime,await this.requestDeviceList(),!0}else if(e.Error!==void 0){await this._connector.disconnect();const t=e.Error;throw _.LogAndError(T,this._logger,`Cannot connect to server. ${t.ErrorMessage}`)}return!1};parseDeviceList=e=>{for(let[t,s]of Object.entries(e.Devices))if(this._devices.has(s.DeviceIndex))this._logger.Debug(`ButtplugClient: Device already added: ${s}`);else{const u=$.fromMsg(s,this.sendMessageClosure);this._logger.Debug(`ButtplugClient: Adding Device: ${u}`),this._devices.set(s.DeviceIndex,u),this.emit("deviceadded",u)}for(let[t,s]of this._devices.entries())e.Devices.hasOwnProperty(t.toString())||(this._devices.delete(t),this.emit("deviceremoved",s))};requestDeviceList=async()=>{this.checkConnector(),this._logger.Debug("ButtplugClient: ReceiveDeviceList called");const e=await this.sendMessage({RequestDeviceList:{Id:1}});this.parseDeviceList(e.DeviceList)};shutdownConnection=async()=>{await this.stopAllDevices(),this._pingTimer!==null&&(clearInterval(this._pingTimer),this._pingTimer=null)};async sendMessage(e){this.checkConnector();const t=this._sorter.PrepareOutgoingMessage(e);return await this._connector.send(e),await t}checkConnector(){if(!this.connected)throw new X("ButtplugClient not connected")}sendMsgExpectOk=async e=>{const t=await this.sendMessage(e);if(t.Ok===void 0)throw t.Error!==void 0?_.FromError(t):_.LogAndError(C,this._logger,`Message ${t} not handled by SendMsgExpectOk`)};sendMessageClosure=async e=>await this.sendMessage(e)}class oe extends B{constructor(e){super(),this._url=e}_ws;_websocketConstructor=null;get Connected(){return this._ws!==void 0}connect=async()=>new Promise((e,t)=>{const s=new(this._websocketConstructor??WebSocket)(this._url),u=h=>{t(h)},f=h=>t(h.reason);s.addEventListener("open",async()=>{this._ws=s;try{await this.initialize(),this._ws.addEventListener("message",h=>{this.parseIncomingMessage(h)}),this._ws.removeEventListener("close",f),this._ws.removeEventListener("error",u),this._ws.addEventListener("close",this.disconnect),e()}catch(h){t(h)}}),s.addEventListener("error",u),s.addEventListener("close",f)});disconnect=async()=>{this.Connected&&(this._ws.close(),this._ws=void 0,this.emit("disconnect"))};sendMessage(e){if(!this.Connected)throw new Error("ButtplugBrowserWebsocketConnector not connected");this._ws.send("["+JSON.stringify(e)+"]")}initialize=async()=>Promise.resolve();parseIncomingMessage(e){if(typeof e.data=="string"){const t=JSON.parse(e.data);this.emit("message",t)}else e.data instanceof Blob}onReaderLoad(e){const t=JSON.parse(e.target.result);this.emit("message",t)}}class Y extends oe{send=e=>{if(!this.Connected)throw new Error("ButtplugClient not connected");this.sendMessage(e)}}var V,Q;function ae(){return Q||(Q=1,V=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}),V}var ue=ae();class ce extends Y{_websocketConstructor=ue.WebSocket}class S{_percent;_steps;get percent(){return this._percent}get steps(){return this._steps}static createSteps(e){let t=new S;return t._steps=e,t}static createPercent(e){if(e<0||e>1)throw new I(`Percent value ${e} is not in the range 0.0 <= x <= 1.0`);let t=new S;return t._percent=e,t}}class N{constructor(e,t,s){this._outputType=e,this._value=t,this._duration=s}get outputType(){return this._outputType}get value(){return this._value}get duration(){return this._duration}}class O{constructor(e){this._outputType=e}steps(e){return new N(this._outputType,S.createSteps(e),void 0)}percent(e){return new N(this._outputType,S.createPercent(e),void 0)}}class Z{steps(e,t){return new N(E.Position,S.createSteps(e),t)}percent(e,t){return new N(E.HwPositionWithDuration,S.createPercent(e),t)}}class le{constructor(){}static get Vibrate(){return new O(E.Vibrate)}static get Rotate(){return new O(E.Rotate)}static get Oscillate(){return new O(E.Oscillate)}static get Constrict(){return new O(E.Constrict)}static get Inflate(){return new O(E.Inflate)}static get Temperature(){return new O(E.Temperature)}static get Led(){return new O(E.Led)}static get Spray(){return new O(E.Spray)}static get Position(){return new O(E.Position)}static get PositionWithDuration(){return new Z}}i.ButtplugBrowserWebsocketClientConnector=Y,i.ButtplugClient=ie,i.ButtplugClientConnectorException=X,i.ButtplugClientDevice=$,i.ButtplugDeviceError=I,i.ButtplugError=_,i.ButtplugInitError=T,i.ButtplugLogLevel=F,i.ButtplugLogger=b,i.ButtplugMessageError=C,i.ButtplugMessageSorter=z,i.ButtplugNodeWebsocketClientConnector=ce,i.ButtplugPingError=j,i.ButtplugUnknownError=q,i.DEFAULT_MESSAGE_ID=ne,i.DeviceOutput=le,i.DeviceOutputCommand=N,i.DeviceOutputPositionWithDurationConstructor=Z,i.DeviceOutputValueConstructor=O,i.ErrorClass=w,i.InputCommandType=x,i.InputType=L,i.LogMessage=U,i.MAX_ID=se,i.MESSAGE_SPEC_VERSION_MAJOR=H,i.MESSAGE_SPEC_VERSION_MINOR=J,i.OutputType=E,i.SYSTEM_MESSAGE_ID=M,i.msgId=W,i.setMsgId=K,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})}));