buttplug 4.0.0 → 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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # v4.0.1 (2026/04/05)
2
+
3
+ ## Bugfixes
4
+
5
+ - Fix issue with StopDeviceCmd still being sent when using npm package
6
+ - Fix issue with different decodes of DeviceList depending on server sent or requested
7
+
8
+ # v4.0.0 (2026/02/02)
9
+
10
+ ## Features
11
+
12
+ - Update to Buttplug Spec v4
13
+ - Basically a rewrite
14
+
1
15
  # v3.2.2 (2024/03/02)
2
16
 
3
17
  ## Bugfixes
package/README.md CHANGED
@@ -2,16 +2,24 @@
2
2
 
3
3
  [![Patreon donate button](https://img.shields.io/badge/patreon-donate-yellow.svg)](https://www.patreon.com/qdot)
4
4
  [![Github donate button](https://img.shields.io/badge/github-donate-ff69b4.svg)](https://www.github.com/sponsors/qdot)
5
-
6
- [![Discourse Forum](https://img.shields.io/badge/discourse-forum-blue.svg)](https://discuss.buttplug.io)
5
+ [![Discourse Forums](https://img.shields.io/discourse/status?label=buttplug.io%20forums&server=https%3A%2F%2Fdiscuss.buttplug.io)](https://discuss.buttplug.io)
7
6
  [![Discord](https://img.shields.io/discord/353303527587708932.svg?logo=discord)](https://discord.buttplug.io)
8
- [![Twitter](https://img.shields.io/twitter/follow/buttplugio.svg?style=social&logo=twitter)](https://twitter.com/buttplugio)
7
+ [![bluesky](https://img.shields.io/bluesky/followers/buttplug.io)](https://bsky.app/profile/buttplug.io)
8
+
9
9
 
10
10
  A implementation of the Buttplug Client in Typescript/Javascript, implementing the Version 3
11
11
  Buttplug Spec. It is expected to run from a browser against either [Intiface Central
12
12
  (GUI)](https://intiface.com/central), [Initface Engine
13
13
  (CLI)](https://github.com/intiface/intiface-engine), or [the Buttplug WASM Server](https://github.com/buttplugio/buttplug-js).
14
14
 
15
+ ## This isn't the only JS Library!
16
+
17
+ While this library *can* work for implementing JS/TS apps with Buttplug, it's really just a reference version we keep for documentation. We highly recommend checking out the following community versions of the client that may be better kept up for have more features:
18
+
19
+ - [zendrex/buttplug.js](https://www.npmjs.com/package/@zendrex/buttplug.js)
20
+
21
+ If you have built a client and would like to see it listed here, let us know!
22
+
15
23
  ## Compilation information
16
24
 
17
25
  buttplug-js builds to 3 different types of library:
@@ -83,6 +83,7 @@ class ButtplugClient extends eventemitter3_1.EventEmitter {
83
83
  };
84
84
  disconnect = async () => {
85
85
  this._logger.Debug('ButtplugClient: Disconnect called');
86
+ this._devices.clear();
86
87
  this.checkConnector();
87
88
  await this.shutdownConnection();
88
89
  await this._connector.disconnect();
@@ -98,8 +99,8 @@ class ButtplugClient extends eventemitter3_1.EventEmitter {
98
99
  await this.sendMsgExpectOk({ StopScanning: { Id: 1 } });
99
100
  };
100
101
  stopAllDevices = async () => {
101
- this._logger.Debug('ButtplugClient: StopAllDevices');
102
- await this.sendMsgExpectOk({ StopAllDevices: { Id: 1 } });
102
+ this._logger.Debug('ButtplugClient: StopCmd (all devices)');
103
+ await this.sendMsgExpectOk({ StopCmd: { Id: 1, DeviceIndex: undefined, FeatureIndex: undefined, Inputs: true, Outputs: true } });
103
104
  };
104
105
  disconnectHandler = () => {
105
106
  this._logger.Info('ButtplugClient: Disconnect event receieved.');
@@ -109,15 +110,19 @@ class ButtplugClient extends eventemitter3_1.EventEmitter {
109
110
  const leftoverMsgs = this._sorter.ParseIncomingMessages(msgs);
110
111
  for (const x of leftoverMsgs) {
111
112
  if (x.DeviceList !== undefined) {
112
- this.parseDeviceList(x);
113
+ this.parseDeviceList(x.DeviceList);
113
114
  break;
114
115
  }
115
116
  else if (x.ScanningFinished !== undefined) {
116
117
  this._isScanning = false;
117
118
  this.emit('scanningfinished', x);
118
119
  }
120
+ else if (x.InputReading !== undefined) {
121
+ // TODO this should be emitted from the device or feature, not the client
122
+ this.emit('inputreading', x);
123
+ }
119
124
  else {
120
- console.log(JSON.stringify(msgs));
125
+ console.log(`Unhandled message: ${x}`);
121
126
  }
122
127
  }
123
128
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ButtplugClient.js","sourceRoot":"","sources":["../../../../src/client/ButtplugClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ButtplugClient.js","sourceRoot":"","sources":["../../../../src/client/ButtplugClient.ts"],"names":[],"mappings":"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"}
@@ -157,7 +157,7 @@ class ButtplugClientDevice extends eventemitter3_1.EventEmitter {
157
157
  await Promise.all(p);
158
158
  }
159
159
  async stop() {
160
- await this.sendMsgExpectOk({ StopDeviceCmd: { Id: 1, DeviceIndex: this.index } });
160
+ await this.sendMsgExpectOk({ StopCmd: { Id: 1, DeviceIndex: this.index, FeatureIndex: undefined, Inputs: true, Outputs: true } });
161
161
  }
162
162
  async battery() {
163
163
  let p = [];
@@ -1 +1 @@
1
- {"version":3,"file":"ButtplugClientDevice.js","sourceRoot":"","sources":["../../../../src/client/ButtplugClientDevice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ButtplugClientDevice.js","sourceRoot":"","sources":["../../../../src/client/ButtplugClientDevice.ts"],"names":[],"mappings":"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"}
@@ -64,7 +64,7 @@ class DeviceOutputPositionWithDurationConstructor {
64
64
  return new DeviceOutputCommand(Messages_1.OutputType.Position, PercentOrSteps.createSteps(steps), duration);
65
65
  }
66
66
  percent(percent, duration) {
67
- return new DeviceOutputCommand(Messages_1.OutputType.PositionWithDuration, PercentOrSteps.createPercent(percent), duration);
67
+ return new DeviceOutputCommand(Messages_1.OutputType.HwPositionWithDuration, PercentOrSteps.createPercent(percent), duration);
68
68
  }
69
69
  }
70
70
  exports.DeviceOutputPositionWithDurationConstructor = DeviceOutputPositionWithDurationConstructor;
@@ -1 +1 @@
1
- {"version":3,"file":"ButtplugClientDeviceCommand.js","sourceRoot":"","sources":["../../../../src/client/ButtplugClientDeviceCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ButtplugClientDeviceCommand.js","sourceRoot":"","sources":["../../../../src/client/ButtplugClientDeviceCommand.ts"],"names":[],"mappings":"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"}
@@ -80,7 +80,7 @@ class ButtplugClientDeviceFeature {
80
80
  }
81
81
  let type = command.outputType;
82
82
  let duration = undefined;
83
- if (type == Messages.OutputType.PositionWithDuration) {
83
+ if (type == Messages.OutputType.HwPositionWithDuration) {
84
84
  if (command.duration === undefined) {
85
85
  throw new Exceptions_1.ButtplugDeviceError("PositionWithDuration requires duration defined");
86
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ButtplugClientDeviceFeature.js","sourceRoot":"","sources":["../../../../src/client/ButtplugClientDeviceFeature.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mDAA8F;AAC9F,2DAA6C;AAG7C,MAAa,2BAA2B;IAG5B;IACA;IACA;IACA;IAJV,YACU,YAAoB,EACpB,WAAmB,EACnB,QAAgC,EAChC,YAE8B;QAL9B,iBAAY,GAAZ,YAAY,CAAQ;QACpB,gBAAW,GAAX,WAAW,CAAQ;QACnB,aAAQ,GAAR,QAAQ,CAAwB;QAChC,iBAAY,GAAZ,YAAY,CAEkB;IACxC,CAAC;IAES,IAAI,GAAG,KAAK,EAAE,GAA6B,EAAqC,EAAE;QAC1F,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,CAAA;IAES,eAAe,GAAG,KAAK,EAC/B,GAA6B,EACd,EAAE;QACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;aAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,0BAAa,CAAC,SAAS,CAAC,QAA0B,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,iCAAoB,CAAC,8CAA8C,CAAC,CAAC;QACjF,CAAC;IACH,CAAC,CAAC;IAEQ,aAAa,CAAC,IAAyB;QAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACrF,MAAM,IAAI,gCAAmB,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,YAAY,0BAA0B,IAAI,eAAe,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5I,CAAC;IACH,CAAC;IAES,YAAY,CAAC,IAAwB;QAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACnF,MAAM,IAAI,gCAAmB,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,YAAY,0BAA0B,IAAI,eAAe,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5I,CAAC;IACH,CAAC;IAES,KAAK,CAAC,aAAa,CAAC,OAA4B;QACxD,2CAA2C;QAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,gCAAmB,CAAC,GAAG,OAAO,CAAC,UAAU,yBAAyB,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC;QAC9B,IAAI,QAAQ,GAAuB,SAAS,CAAC;QAC7C,IAAI,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC;YACrD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACnC,MAAM,IAAI,gCAAmB,CAAC,gDAAgD,CAAC,CAAC;YAClF,CAAC;YACD,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC9B,CAAC;QACD,IAAI,KAAa,CAAC;QAClB,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC5B,8BAA8B;YAC9B,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAM,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC,KAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,UAAU,GAAiC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QACpF,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC;QAEzC,IAAI,GAAG,GAA6B;YAClC,SAAS,EAAE;gBACT,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;gBACxC,OAAO,EAAE,UAAU;aACpB;SACF,CAAC;QACF,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAEM,SAAS,CAAC,IAAyB;QACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,QAAQ,CAAC,IAAwB;QACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAGM,KAAK,CAAC,SAAS,CAAC,GAAwB;QAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;YACzG,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,IAAI,gCAAmB,CAAC,eAAe,GAAG,CAAC,UAAU,4BAA4B,CAAC,CAAC;IAC3F,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,SAA6B,EAAE,YAAuC;QAC1F,2CAA2C;QAC3C,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,gBAAgB,CAAC,WAAW,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC1L,MAAM,IAAI,gCAAmB,CAAC,GAAG,SAAS,6BAA6B,YAAY,EAAE,CAAC,CAAC;QACzF,CAAC;QAED,IAAI,GAAG,GAA6B;YAClC,QAAQ,EAAE;gBACR,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;gBACxC,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,YAAY;aACtB;SACF,CAAC;QACF,IAAI,YAAY,IAAI,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACxC,OAAO,QAAQ,CAAC,YAAY,CAAC;YAC/B,CAAC;iBAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxC,MAAM,0BAAa,CAAC,SAAS,CAAC,QAA0B,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,iCAAoB,CAAC,wDAAwD,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AArID,kEAqIC"}
1
+ {"version":3,"file":"ButtplugClientDeviceFeature.js","sourceRoot":"","sources":["../../../../src/client/ButtplugClientDeviceFeature.ts"],"names":[],"mappings":"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"}
@@ -19,9 +19,8 @@ export interface ButtplugMessage {
19
19
  RequestDeviceList?: RequestDeviceList;
20
20
  StartScanning?: StartScanning;
21
21
  StopScanning?: StopScanning;
22
- StopAllDevices?: StopAllDevices;
23
22
  ScanningFinished?: ScanningFinished;
24
- StopDeviceCmd?: StopDeviceCmd;
23
+ StopCmd?: StopCmd;
25
24
  InputCmd?: InputCmd;
26
25
  InputReading?: InputReading;
27
26
  OutputCmd?: OutputCmd;
@@ -56,9 +55,6 @@ export interface StartScanning {
56
55
  export interface StopScanning {
57
56
  Id: number | undefined;
58
57
  }
59
- export interface StopAllDevices {
60
- Id: number | undefined;
61
- }
62
58
  export interface ScanningFinished {
63
59
  Id: number | undefined;
64
60
  }
@@ -108,7 +104,7 @@ export declare enum OutputType {
108
104
  Constrict = "Constrict",
109
105
  Inflate = "Inflate",
110
106
  Position = "Position",
111
- PositionWithDuration = "PositionWithDuration",
107
+ HwPositionWithDuration = "HwPositionWithDuration",
112
108
  Temperature = "Temperature",
113
109
  Spray = "Spray",
114
110
  Led = "Led"
@@ -159,7 +155,10 @@ export interface InputReading {
159
155
  };
160
156
  Id: number | undefined;
161
157
  }
162
- export interface StopDeviceCmd {
158
+ export interface StopCmd {
163
159
  Id: number | undefined;
164
- DeviceIndex: number;
160
+ DeviceIndex: number | undefined;
161
+ FeatureIndex: number | undefined;
162
+ Inputs: boolean | undefined;
163
+ Outputs: boolean | undefined;
165
164
  }
@@ -17,7 +17,6 @@ exports.DEFAULT_MESSAGE_ID = 1;
17
17
  exports.MAX_ID = 4294967295;
18
18
  exports.MESSAGE_SPEC_VERSION_MAJOR = 4;
19
19
  exports.MESSAGE_SPEC_VERSION_MINOR = 0;
20
- ;
21
20
  function msgId(msg) {
22
21
  for (let [_, entry] of Object.entries(msg)) {
23
22
  if (entry != undefined) {
@@ -52,7 +51,7 @@ var OutputType;
52
51
  OutputType["Constrict"] = "Constrict";
53
52
  OutputType["Inflate"] = "Inflate";
54
53
  OutputType["Position"] = "Position";
55
- OutputType["PositionWithDuration"] = "PositionWithDuration";
54
+ OutputType["HwPositionWithDuration"] = "HwPositionWithDuration";
56
55
  OutputType["Temperature"] = "Temperature";
57
56
  OutputType["Spray"] = "Spray";
58
57
  OutputType["Led"] = "Led";
@@ -1 +1 @@
1
- {"version":3,"file":"Messages.js","sourceRoot":"","sources":["../../../../src/core/Messages.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,sCAAsC;AACtC,YAAY,CAAC;;;AA6Bb,sBAOC;AAED,4BAQC;AA5CD,6CAAoD;AAEvC,QAAA,iBAAiB,GAAG,CAAC,CAAC;AACtB,QAAA,kBAAkB,GAAG,CAAC,CAAC;AACvB,QAAA,MAAM,GAAG,UAAU,CAAC;AACpB,QAAA,0BAA0B,GAAG,CAAC,CAAC;AAC/B,QAAA,0BAA0B,GAAG,CAAC,CAAC;AAmB3C,CAAC;AAEF,SAAgB,KAAK,CAAC,GAAoB;IACxC,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,iCAAoB,CAAC,WAAW,GAAG,uBAAuB,CAAC,CAAC;AACxE,CAAC;AAED,SAAgB,QAAQ,CAAC,GAAoB,EAAE,EAAU;IACvD,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACvB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;YACd,OAAO;QACT,CAAC;IACH,CAAC;IACD,MAAM,IAAI,iCAAoB,CAAC,WAAW,GAAG,uBAAuB,CAAC,CAAC;AACxE,CAAC;AAUD,IAAY,UAMX;AAND,WAAY,UAAU;IACpB,6DAAa,CAAA;IACb,uDAAU,CAAA;IACV,uDAAU,CAAA;IACV,qDAAS,CAAA;IACT,2DAAY,CAAA;AACd,CAAC,EANW,UAAU,0BAAV,UAAU,QAMrB;AA+DD,IAAY,UAYX;AAZD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,+BAAiB,CAAA;IACjB,qCAAuB,CAAA;IACvB,qCAAuB,CAAA;IACvB,iCAAmB,CAAA;IACnB,mCAAqB,CAAA;IACrB,2DAA6C,CAAA;IAC7C,yCAA2B,CAAA;IAC3B,6BAAe,CAAA;IACf,yBAAW,CAAA;AACb,CAAC,EAZW,UAAU,0BAAV,UAAU,QAYrB;AAED,IAAY,SASX;AATD,WAAY,SAAS;IACnB,gCAAmB,CAAA;IACnB,gCAAmB,CAAA;IACnB,0BAAa,CAAA;IACb,8BAAiB,CAAA;IACjB,kCAAqB,CAAA;IACrB,eAAe;IACf,iBAAiB;IACjB,QAAQ;AACV,CAAC,EATW,SAAS,yBAAT,SAAS,QASpB;AAED,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,iCAAa,CAAA;IACb,2CAAuB,CAAA;IACvB,+CAA2B,CAAA;AAC7B,CAAC,EAJW,gBAAgB,gCAAhB,gBAAgB,QAI3B"}
1
+ {"version":3,"file":"Messages.js","sourceRoot":"","sources":["../../../../src/core/Messages.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,sCAAsC;AACtC,YAAY,CAAC;;;AA4Bb,sBAOC;AAED,4BAQC;AA3CD,6CAAoD;AAEvC,QAAA,iBAAiB,GAAG,CAAC,CAAC;AACtB,QAAA,kBAAkB,GAAG,CAAC,CAAC;AACvB,QAAA,MAAM,GAAG,UAAU,CAAC;AACpB,QAAA,0BAA0B,GAAG,CAAC,CAAC;AAC/B,QAAA,0BAA0B,GAAG,CAAC,CAAC;AAoB5C,SAAgB,KAAK,CAAC,GAAoB;IACxC,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IACD,MAAM,IAAI,iCAAoB,CAAC,WAAW,GAAG,uBAAuB,CAAC,CAAC;AACxE,CAAC;AAED,SAAgB,QAAQ,CAAC,GAAoB,EAAE,EAAU;IACvD,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACvB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;YACd,OAAO;QACT,CAAC;IACH,CAAC;IACD,MAAM,IAAI,iCAAoB,CAAC,WAAW,GAAG,uBAAuB,CAAC,CAAC;AACxE,CAAC;AAUD,IAAY,UAMX;AAND,WAAY,UAAU;IACpB,6DAAa,CAAA;IACb,uDAAU,CAAA;IACV,uDAAU,CAAA;IACV,qDAAS,CAAA;IACT,2DAAY,CAAA;AACd,CAAC,EANW,UAAU,0BAAV,UAAU,QAMrB;AA2DD,IAAY,UAYX;AAZD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,+BAAiB,CAAA;IACjB,qCAAuB,CAAA;IACvB,qCAAuB,CAAA;IACvB,iCAAmB,CAAA;IACnB,mCAAqB,CAAA;IACrB,+DAAiD,CAAA;IACjD,yCAA2B,CAAA;IAC3B,6BAAe,CAAA;IACf,yBAAW,CAAA;AACb,CAAC,EAZW,UAAU,0BAAV,UAAU,QAYrB;AAED,IAAY,SASX;AATD,WAAY,SAAS;IACnB,gCAAmB,CAAA;IACnB,gCAAmB,CAAA;IACnB,0BAAa,CAAA;IACb,8BAAiB,CAAA;IACjB,kCAAqB,CAAA;IACrB,eAAe;IACf,iBAAiB;IACjB,QAAQ;AACV,CAAC,EATW,SAAS,yBAAT,SAAS,QASpB;AAED,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,iCAAa,CAAA;IACb,2CAAuB,CAAA;IACvB,+CAA2B,CAAA;AAC7B,CAAC,EAJW,gBAAgB,gCAAhB,gBAAgB,QAI3B"}
@@ -1 +1 @@
1
- (function(i,N){typeof exports=="object"&&typeof module<"u"?N(exports):typeof define=="function"&&define.amd?define(["exports"],N):(i=typeof globalThis<"u"?globalThis:i||self,N(i.buttplug={}))})(this,(function(i){"use strict";function N(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var $={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),h=t?t+o:o;return l._events[h]?l._events[h].fn?l._events[h]=[l._events[h],v]:l._events[h].push(v):(l._events[h]=v,l._eventsCount++),l}function d(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,h=new Array(v);m<v;m++)h[m]=c[m].fn;return h},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,h){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,h),!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 he=r.length,k;for(g=0;g<he;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 d(this,v),this;var h=this._events[v];if(h.fn)h.fn===a&&(!m||h.once)&&(!c||h.context===c)&&d(this,v);else{for(var R=0,r=[],y=h.length;R<y;R++)(h[R].fn!==a||m&&!h[R].once||c&&h[R].context!==c)&&r.push(h[R]);r.length?this._events[v]=r.length===1?r[0]:r:d(this,v)}return this},p.prototype.removeAllListeners=function(o){var a;return o?(a=t?t+o:o,this._events[a]&&d(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})($)),$.exports}var te=ee();const B=N(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(),d=s.getSeconds();this.timestamp=`${u}:${f}:${d}`,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,J=4,K=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 z(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.PositionWithDuration="PositionWithDuration",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.PositionWithDuration){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 d={Value:u,Duration:s},p={};p[t.toString()]=d;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 A 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 A(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({StopDeviceCmd:{Id:1,DeviceIndex:this.index}})}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 H{constructor(e){this._useCounter=e}_counter=1;_waitingMsgs=new Map;PrepareOutgoingMessage(e){this._useCounter&&(z(e,this._counter),this._counter+=1);let t,s;const u=new Promise((f,d)=>{t=f,s=d});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,d]=this._waitingMsgs.get(u);if(s.Error!==void 0){d(_.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 H(!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.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: StopAllDevices"),await this.sendMsgExpectOk({StopAllDevices:{Id:1}})};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);break}else s.ScanningFinished!==void 0?(this._isScanning=!1,this.emit("scanningfinished",s)):console.log(JSON.stringify(e))};initializeConnection=async()=>{this.checkConnector();const e=await this.sendMessage({RequestServerInfo:{ClientName:this._clientName,Id:1,ProtocolVersionMajor:J,ProtocolVersionMinor:K}});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=A.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=d=>{t(d)},f=d=>t(d.reason);s.addEventListener("open",async()=>{this._ws=s;try{await this.initialize(),this._ws.addEventListener("message",d=>{this.parseIncomingMessage(d)}),this._ws.removeEventListener("close",f),this._ws.removeEventListener("error",u),this._ws.addEventListener("close",this.disconnect),e()}catch(d){t(d)}}),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 P{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 P(this._outputType,S.createSteps(e),void 0)}percent(e){return new P(this._outputType,S.createPercent(e),void 0)}}class Z{steps(e,t){return new P(E.Position,S.createSteps(e),t)}percent(e,t){return new P(E.PositionWithDuration,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=A,i.ButtplugDeviceError=I,i.ButtplugError=_,i.ButtplugInitError=T,i.ButtplugLogLevel=F,i.ButtplugLogger=b,i.ButtplugMessageError=C,i.ButtplugMessageSorter=H,i.ButtplugNodeWebsocketClientConnector=ce,i.ButtplugPingError=j,i.ButtplugUnknownError=q,i.DEFAULT_MESSAGE_ID=ne,i.DeviceOutput=le,i.DeviceOutputCommand=P,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=J,i.MESSAGE_SPEC_VERSION_MINOR=K,i.OutputType=E,i.SYSTEM_MESSAGE_ID=M,i.msgId=W,i.setMsgId=z,Object.defineProperty(i,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"})}));
@@ -1,9 +1,9 @@
1
1
  function U(s) {
2
2
  return s && s.__esModule && Object.prototype.hasOwnProperty.call(s, "default") ? s.default : s;
3
3
  }
4
- var k = { exports: {} }, A;
4
+ var k = { exports: {} }, F;
5
5
  function j() {
6
- return A || (A = 1, (function(s) {
6
+ return F || (F = 1, (function(s) {
7
7
  var e = Object.prototype.hasOwnProperty, t = "~";
8
8
  function n() {
9
9
  }
@@ -17,7 +17,7 @@ function j() {
17
17
  var p = new a(o, c || u, v), h = t ? t + i : i;
18
18
  return u._events[h] ? u._events[h].fn ? u._events[h] = [u._events[h], p] : u._events[h].push(p) : (u._events[h] = p, u._eventsCount++), u;
19
19
  }
20
- function l(u, i) {
20
+ function d(u, i) {
21
21
  --u._eventsCount === 0 ? u._events = new n() : delete u._events[i];
22
22
  }
23
23
  function f() {
@@ -42,9 +42,9 @@ function j() {
42
42
  }, f.prototype.emit = function(i, o, c, v, p, h) {
43
43
  var I = t ? t + i : i;
44
44
  if (!this._events[I]) return !1;
45
- var r = this._events[I], M = arguments.length, y, d;
45
+ var r = this._events[I], R = arguments.length, y, l;
46
46
  if (r.fn) {
47
- switch (r.once && this.removeListener(i, r.fn, void 0, !0), M) {
47
+ switch (r.once && this.removeListener(i, r.fn, void 0, !0), R) {
48
48
  case 1:
49
49
  return r.fn.call(r.context), !0;
50
50
  case 2:
@@ -58,29 +58,29 @@ function j() {
58
58
  case 6:
59
59
  return r.fn.call(r.context, o, c, v, p, h), !0;
60
60
  }
61
- for (d = 1, y = new Array(M - 1); d < M; d++)
62
- y[d - 1] = arguments[d];
61
+ for (l = 1, y = new Array(R - 1); l < R; l++)
62
+ y[l - 1] = arguments[l];
63
63
  r.fn.apply(r.context, y);
64
64
  } else {
65
65
  var T = r.length, S;
66
- for (d = 0; d < T; d++)
67
- switch (r[d].once && this.removeListener(i, r[d].fn, void 0, !0), M) {
66
+ for (l = 0; l < T; l++)
67
+ switch (r[l].once && this.removeListener(i, r[l].fn, void 0, !0), R) {
68
68
  case 1:
69
- r[d].fn.call(r[d].context);
69
+ r[l].fn.call(r[l].context);
70
70
  break;
71
71
  case 2:
72
- r[d].fn.call(r[d].context, o);
72
+ r[l].fn.call(r[l].context, o);
73
73
  break;
74
74
  case 3:
75
- r[d].fn.call(r[d].context, o, c);
75
+ r[l].fn.call(r[l].context, o, c);
76
76
  break;
77
77
  case 4:
78
- r[d].fn.call(r[d].context, o, c, v);
78
+ r[l].fn.call(r[l].context, o, c, v);
79
79
  break;
80
80
  default:
81
- if (!y) for (S = 1, y = new Array(M - 1); S < M; S++)
81
+ if (!y) for (S = 1, y = new Array(R - 1); S < R; S++)
82
82
  y[S - 1] = arguments[S];
83
- r[d].fn.apply(r[d].context, y);
83
+ r[l].fn.apply(r[l].context, y);
84
84
  }
85
85
  }
86
86
  return !0;
@@ -92,26 +92,26 @@ function j() {
92
92
  var p = t ? t + i : i;
93
93
  if (!this._events[p]) return this;
94
94
  if (!o)
95
- return l(this, p), this;
95
+ return d(this, p), this;
96
96
  var h = this._events[p];
97
97
  if (h.fn)
98
- h.fn === o && (!v || h.once) && (!c || h.context === c) && l(this, p);
98
+ h.fn === o && (!v || h.once) && (!c || h.context === c) && d(this, p);
99
99
  else {
100
- for (var I = 0, r = [], M = h.length; I < M; I++)
100
+ for (var I = 0, r = [], R = h.length; I < R; I++)
101
101
  (h[I].fn !== o || v && !h[I].once || c && h[I].context !== c) && r.push(h[I]);
102
- r.length ? this._events[p] = r.length === 1 ? r[0] : r : l(this, p);
102
+ r.length ? this._events[p] = r.length === 1 ? r[0] : r : d(this, p);
103
103
  }
104
104
  return this;
105
105
  }, f.prototype.removeAllListeners = function(i) {
106
106
  var o;
107
- return i ? (o = t ? t + i : i, this._events[o] && l(this, o)) : (this._events = new n(), this._eventsCount = 0), this;
107
+ return i ? (o = t ? t + i : i, this._events[o] && d(this, o)) : (this._events = new n(), this._eventsCount = 0), this;
108
108
  }, f.prototype.off = f.prototype.removeListener, f.prototype.addListener = f.prototype.on, f.prefixed = t, f.EventEmitter = f, s.exports = f;
109
109
  })(k)), k.exports;
110
110
  }
111
111
  var q = j();
112
112
  const P = /* @__PURE__ */ U(q);
113
113
  var V = /* @__PURE__ */ ((s) => (s[s.Off = 0] = "Off", s[s.Error = 1] = "Error", s[s.Warn = 2] = "Warn", s[s.Info = 3] = "Info", s[s.Debug = 4] = "Debug", s[s.Trace = 5] = "Trace", s))(V || {});
114
- class J {
114
+ class H {
115
115
  /** Timestamp for the log message */
116
116
  timestamp;
117
117
  /** Log Message */
@@ -123,8 +123,8 @@ class J {
123
123
  * @param logLevel: Log severity level.
124
124
  */
125
125
  constructor(e, t) {
126
- const n = /* @__PURE__ */ new Date(), a = n.getHours(), g = n.getMinutes(), l = n.getSeconds();
127
- this.timestamp = `${a}:${g}:${l}`, this.logMessage = e, this.logLevel = t;
126
+ const n = /* @__PURE__ */ new Date(), a = n.getHours(), g = n.getMinutes(), d = n.getSeconds();
127
+ this.timestamp = `${a}:${g}:${d}`, this.logMessage = e, this.logLevel = t;
128
128
  }
129
129
  /**
130
130
  * Returns the log message.
@@ -253,7 +253,7 @@ class b extends P {
253
253
  AddLogMessage(e, t) {
254
254
  if (t > this.maximumEventLogLevel && t > this.maximumConsoleLogLevel)
255
255
  return;
256
- const n = new J(e, t);
256
+ const n = new H(e, t);
257
257
  t <= this.maximumConsoleLogLevel && console.log(n.FormattedMessage), t <= this.maximumEventLogLevel && this.emit("log", n);
258
258
  }
259
259
  }
@@ -276,7 +276,7 @@ class m extends Error {
276
276
  }
277
277
  };
278
278
  }
279
- static LogAndError(e, t, n, a = C) {
279
+ static LogAndError(e, t, n, a = M) {
280
280
  return t.Error(n), new e(n, a);
281
281
  }
282
282
  static FromError(e) {
@@ -286,11 +286,11 @@ class m extends Error {
286
286
  case w.ERROR_INIT:
287
287
  return new G(e.ErrorMessage, e.Id);
288
288
  case w.ERROR_UNKNOWN:
289
- return new z(e.ErrorMessage, e.Id);
289
+ return new J(e.ErrorMessage, e.Id);
290
290
  case w.ERROR_PING:
291
291
  return new K(e.ErrorMessage, e.Id);
292
292
  case w.ERROR_MSG:
293
- return new R(e.ErrorMessage, e.Id);
293
+ return new C(e.ErrorMessage, e.Id);
294
294
  default:
295
295
  throw new Error(`Message type ${e.ErrorCode} not handled`);
296
296
  }
@@ -298,41 +298,41 @@ class m extends Error {
298
298
  errorClass = w.ERROR_UNKNOWN;
299
299
  innerError;
300
300
  messageId;
301
- constructor(e, t, n = C, a) {
301
+ constructor(e, t, n = M, a) {
302
302
  super(e), this.errorClass = t, this.innerError = a, this.messageId = n;
303
303
  }
304
304
  }
305
305
  class G extends m {
306
- constructor(e, t = C) {
306
+ constructor(e, t = M) {
307
307
  super(e, w.ERROR_INIT, t);
308
308
  }
309
309
  }
310
310
  class E extends m {
311
- constructor(e, t = C) {
311
+ constructor(e, t = M) {
312
312
  super(e, w.ERROR_DEVICE, t);
313
313
  }
314
314
  }
315
- class R extends m {
316
- constructor(e, t = C) {
315
+ class C extends m {
316
+ constructor(e, t = M) {
317
317
  super(e, w.ERROR_MSG, t);
318
318
  }
319
319
  }
320
320
  class K extends m {
321
- constructor(e, t = C) {
321
+ constructor(e, t = M) {
322
322
  super(e, w.ERROR_PING, t);
323
323
  }
324
324
  }
325
- class z extends m {
326
- constructor(e, t = C) {
325
+ class J extends m {
326
+ constructor(e, t = M) {
327
327
  super(e, w.ERROR_UNKNOWN, t);
328
328
  }
329
329
  }
330
- const C = 0, oe = 1, ae = 4294967295, H = 4, X = 0;
331
- function F(s) {
330
+ const M = 0, oe = 1, ae = 4294967295, z = 4, X = 0;
331
+ function A(s) {
332
332
  for (let [e, t] of Object.entries(s))
333
333
  if (t != null)
334
334
  return t.Id;
335
- throw new R(`Message ${s} does not have an ID.`);
335
+ throw new C(`Message ${s} does not have an ID.`);
336
336
  }
337
337
  function Y(s, e) {
338
338
  for (let [t, n] of Object.entries(s))
@@ -340,9 +340,9 @@ function Y(s, e) {
340
340
  n.Id = e;
341
341
  return;
342
342
  }
343
- throw new R(`Message ${s} does not have an ID.`);
343
+ throw new C(`Message ${s} does not have an ID.`);
344
344
  }
345
- var w = /* @__PURE__ */ ((s) => (s[s.ERROR_UNKNOWN = 0] = "ERROR_UNKNOWN", s[s.ERROR_INIT = 1] = "ERROR_INIT", s[s.ERROR_PING = 2] = "ERROR_PING", s[s.ERROR_MSG = 3] = "ERROR_MSG", s[s.ERROR_DEVICE = 4] = "ERROR_DEVICE", s))(w || {}), _ = /* @__PURE__ */ ((s) => (s.Unknown = "Unknown", s.Vibrate = "Vibrate", s.Rotate = "Rotate", s.Oscillate = "Oscillate", s.Constrict = "Constrict", s.Inflate = "Inflate", s.Position = "Position", s.PositionWithDuration = "PositionWithDuration", s.Temperature = "Temperature", s.Spray = "Spray", s.Led = "Led", s))(_ || {}), D = /* @__PURE__ */ ((s) => (s.Unknown = "Unknown", s.Battery = "Battery", s.RSSI = "RSSI", s.Button = "Button", s.Pressure = "Pressure", s))(D || {}), L = /* @__PURE__ */ ((s) => (s.Read = "Read", s.Subscribe = "Subscribe", s.Unsubscribe = "Unsubscribe", s))(L || {});
345
+ var w = /* @__PURE__ */ ((s) => (s[s.ERROR_UNKNOWN = 0] = "ERROR_UNKNOWN", s[s.ERROR_INIT = 1] = "ERROR_INIT", s[s.ERROR_PING = 2] = "ERROR_PING", s[s.ERROR_MSG = 3] = "ERROR_MSG", s[s.ERROR_DEVICE = 4] = "ERROR_DEVICE", s))(w || {}), _ = /* @__PURE__ */ ((s) => (s.Unknown = "Unknown", s.Vibrate = "Vibrate", s.Rotate = "Rotate", s.Oscillate = "Oscillate", s.Constrict = "Constrict", s.Inflate = "Inflate", s.Position = "Position", s.HwPositionWithDuration = "HwPositionWithDuration", s.Temperature = "Temperature", s.Spray = "Spray", s.Led = "Led", s))(_ || {}), D = /* @__PURE__ */ ((s) => (s.Unknown = "Unknown", s.Battery = "Battery", s.RSSI = "RSSI", s.Button = "Button", s.Pressure = "Pressure", s))(D || {}), L = /* @__PURE__ */ ((s) => (s.Read = "Read", s.Subscribe = "Subscribe", s.Unsubscribe = "Unsubscribe", s))(L || {});
346
346
  class Q {
347
347
  constructor(e, t, n, a) {
348
348
  this._deviceIndex = e, this._deviceName = t, this._feature = n, this._sendClosure = a;
@@ -351,7 +351,7 @@ class Q {
351
351
  sendMsgExpectOk = async (e) => {
352
352
  const t = await this.send(e);
353
353
  if (t.Ok === void 0)
354
- throw t.Error !== void 0 ? m.FromError(t) : new R("Expected Ok or Error, and didn't get either!");
354
+ throw t.Error !== void 0 ? m.FromError(t) : new C("Expected Ok or Error, and didn't get either!");
355
355
  };
356
356
  isOutputValid(e) {
357
357
  if (this._feature.Output !== void 0 && !this._feature.Output.hasOwnProperty(e))
@@ -365,15 +365,15 @@ class Q {
365
365
  if (this.isOutputValid(e.outputType), e.value === void 0)
366
366
  throw new E(`${e.outputType} requires value defined`);
367
367
  let t = e.outputType, n;
368
- if (t == _.PositionWithDuration) {
368
+ if (t == _.HwPositionWithDuration) {
369
369
  if (e.duration === void 0)
370
370
  throw new E("PositionWithDuration requires duration defined");
371
371
  n = e.duration;
372
372
  }
373
373
  let a, g = e.value;
374
374
  g.percent === void 0 ? a = e.value.steps : a = Math.ceil(this._feature.Output[t].Value[1] * g.percent);
375
- let l = { Value: a, Duration: n }, f = {};
376
- f[t.toString()] = l;
375
+ let d = { Value: a, Duration: n }, f = {};
376
+ f[t.toString()] = d;
377
377
  let u = {
378
378
  OutputCmd: {
379
379
  Id: 1,
@@ -413,7 +413,7 @@ class Q {
413
413
  const g = await this.send(a);
414
414
  if (g.InputReading !== void 0)
415
415
  return g.InputReading;
416
- throw g.Error !== void 0 ? m.FromError(g) : new R("Expected InputReading or Error, and didn't get either!");
416
+ throw g.Error !== void 0 ? m.FromError(g) : new C("Expected InputReading or Error, and didn't get either!");
417
417
  } else
418
418
  console.log(`Sending subscribe message: ${JSON.stringify(a)}`), await this.sendMsgExpectOk(a), console.log("Got back ok?");
419
419
  }
@@ -501,16 +501,16 @@ class B extends P {
501
501
  await Promise.all(t);
502
502
  }
503
503
  async stop() {
504
- await this.sendMsgExpectOk({ StopDeviceCmd: { Id: 1, DeviceIndex: this.index } });
504
+ await this.sendMsgExpectOk({ StopCmd: { Id: 1, DeviceIndex: this.index, FeatureIndex: void 0, Inputs: !0, Outputs: !0 } });
505
505
  }
506
506
  async battery() {
507
507
  for (let e of this._features.values())
508
508
  if (e.hasInput(D.Battery)) {
509
509
  let t = await e.runInput(D.Battery, L.Read);
510
510
  if (t === void 0)
511
- throw new R("Got incorrect message back.");
511
+ throw new C("Got incorrect message back.");
512
512
  if (t.Reading[D.Battery] === void 0)
513
- throw new R("Got reading with no Battery info.");
513
+ throw new C("Got reading with no Battery info.");
514
514
  return t.Reading[D.Battery].Value;
515
515
  }
516
516
  throw new E("No battery present on this device.");
@@ -532,20 +532,20 @@ class Z {
532
532
  this._useCounter && (Y(e, this._counter), this._counter += 1);
533
533
  let t, n;
534
534
  const a = new Promise(
535
- (g, l) => {
536
- t = g, n = l;
535
+ (g, d) => {
536
+ t = g, n = d;
537
537
  }
538
538
  );
539
- return this._waitingMsgs.set(F(e), [t, n]), a;
539
+ return this._waitingMsgs.set(A(e), [t, n]), a;
540
540
  }
541
541
  ParseIncomingMessages(e) {
542
542
  const t = [];
543
543
  for (const n of e) {
544
- let a = F(n);
545
- if (a !== C && this._waitingMsgs.has(a)) {
546
- const [g, l] = this._waitingMsgs.get(a);
544
+ let a = A(n);
545
+ if (a !== M && this._waitingMsgs.has(a)) {
546
+ const [g, d] = this._waitingMsgs.get(a);
547
547
  if (n.Error !== void 0) {
548
- l(m.FromError(n.Error));
548
+ d(m.FromError(n.Error));
549
549
  continue;
550
550
  }
551
551
  g(n);
@@ -587,7 +587,7 @@ class ce extends P {
587
587
  ), await e.connect(), this._connector = e, this._connector.addListener("message", this.parseMessages), this._connector.addListener("disconnect", this.disconnectHandler), await this.initializeConnection();
588
588
  };
589
589
  disconnect = async () => {
590
- this._logger.Debug("ButtplugClient: Disconnect called"), this.checkConnector(), await this.shutdownConnection(), await this._connector.disconnect();
590
+ this._logger.Debug("ButtplugClient: Disconnect called"), this._devices.clear(), this.checkConnector(), await this.shutdownConnection(), await this._connector.disconnect();
591
591
  };
592
592
  startScanning = async () => {
593
593
  this._logger.Debug("ButtplugClient: StartScanning called"), this._isScanning = !0, await this.sendMsgExpectOk({ StartScanning: { Id: 1 } });
@@ -596,7 +596,7 @@ class ce extends P {
596
596
  this._logger.Debug("ButtplugClient: StopScanning called"), this._isScanning = !1, await this.sendMsgExpectOk({ StopScanning: { Id: 1 } });
597
597
  };
598
598
  stopAllDevices = async () => {
599
- this._logger.Debug("ButtplugClient: StopAllDevices"), await this.sendMsgExpectOk({ StopAllDevices: { Id: 1 } });
599
+ this._logger.Debug("ButtplugClient: StopCmd (all devices)"), await this.sendMsgExpectOk({ StopCmd: { Id: 1, DeviceIndex: void 0, FeatureIndex: void 0, Inputs: !0, Outputs: !0 } });
600
600
  };
601
601
  disconnectHandler = () => {
602
602
  this._logger.Info("ButtplugClient: Disconnect event receieved."), this.emit("disconnect");
@@ -605,9 +605,9 @@ class ce extends P {
605
605
  const t = this._sorter.ParseIncomingMessages(e);
606
606
  for (const n of t)
607
607
  if (n.DeviceList !== void 0) {
608
- this.parseDeviceList(n);
608
+ this.parseDeviceList(n.DeviceList);
609
609
  break;
610
- } else n.ScanningFinished !== void 0 ? (this._isScanning = !1, this.emit("scanningfinished", n)) : console.log(JSON.stringify(e));
610
+ } else n.ScanningFinished !== void 0 ? (this._isScanning = !1, this.emit("scanningfinished", n)) : n.InputReading !== void 0 ? this.emit("inputreading", n) : console.log(`Unhandled message: ${n}`);
611
611
  };
612
612
  initializeConnection = async () => {
613
613
  this.checkConnector();
@@ -616,7 +616,7 @@ class ce extends P {
616
616
  RequestServerInfo: {
617
617
  ClientName: this._clientName,
618
618
  Id: 1,
619
- ProtocolVersionMajor: H,
619
+ ProtocolVersionMajor: z,
620
620
  ProtocolVersionMinor: X
621
621
  }
622
622
  }
@@ -678,7 +678,7 @@ class ce extends P {
678
678
  const t = await this.sendMessage(e);
679
679
  if (t.Ok === void 0)
680
680
  throw t.Error !== void 0 ? m.FromError(t) : m.LogAndError(
681
- R,
681
+ C,
682
682
  this._logger,
683
683
  `Message ${t} not handled by SendMsgExpectOk`
684
684
  );
@@ -695,17 +695,17 @@ class te extends P {
695
695
  return this._ws !== void 0;
696
696
  }
697
697
  connect = async () => new Promise((e, t) => {
698
- const n = new (this._websocketConstructor ?? WebSocket)(this._url), a = (l) => {
699
- t(l);
700
- }, g = (l) => t(l.reason);
698
+ const n = new (this._websocketConstructor ?? WebSocket)(this._url), a = (d) => {
699
+ t(d);
700
+ }, g = (d) => t(d.reason);
701
701
  n.addEventListener("open", async () => {
702
702
  this._ws = n;
703
703
  try {
704
- await this.initialize(), this._ws.addEventListener("message", (l) => {
705
- this.parseIncomingMessage(l);
704
+ await this.initialize(), this._ws.addEventListener("message", (d) => {
705
+ this.parseIncomingMessage(d);
706
706
  }), this._ws.removeEventListener("close", g), this._ws.removeEventListener("error", a), this._ws.addEventListener("close", this.disconnect), e();
707
- } catch (l) {
708
- t(l);
707
+ } catch (d) {
708
+ t(d);
709
709
  }
710
710
  }), n.addEventListener("error", a), n.addEventListener("close", g);
711
711
  });
@@ -798,7 +798,7 @@ class ie {
798
798
  return new N(_.Position, x.createSteps(e), t);
799
799
  }
800
800
  percent(e, t) {
801
- return new N(_.PositionWithDuration, x.createPercent(e), t);
801
+ return new N(_.HwPositionWithDuration, x.createPercent(e), t);
802
802
  }
803
803
  }
804
804
  class he {
@@ -845,11 +845,11 @@ export {
845
845
  G as ButtplugInitError,
846
846
  V as ButtplugLogLevel,
847
847
  b as ButtplugLogger,
848
- R as ButtplugMessageError,
848
+ C as ButtplugMessageError,
849
849
  Z as ButtplugMessageSorter,
850
850
  ue as ButtplugNodeWebsocketClientConnector,
851
851
  K as ButtplugPingError,
852
- z as ButtplugUnknownError,
852
+ J as ButtplugUnknownError,
853
853
  oe as DEFAULT_MESSAGE_ID,
854
854
  he as DeviceOutput,
855
855
  N as DeviceOutputCommand,
@@ -858,12 +858,12 @@ export {
858
858
  w as ErrorClass,
859
859
  L as InputCommandType,
860
860
  D as InputType,
861
- J as LogMessage,
861
+ H as LogMessage,
862
862
  ae as MAX_ID,
863
- H as MESSAGE_SPEC_VERSION_MAJOR,
863
+ z as MESSAGE_SPEC_VERSION_MAJOR,
864
864
  X as MESSAGE_SPEC_VERSION_MINOR,
865
865
  _ as OutputType,
866
- C as SYSTEM_MESSAGE_ID,
867
- F as msgId,
866
+ M as SYSTEM_MESSAGE_ID,
867
+ A as msgId,
868
868
  Y as setMsgId
869
869
  };
@@ -19,9 +19,8 @@ export interface ButtplugMessage {
19
19
  RequestDeviceList?: RequestDeviceList;
20
20
  StartScanning?: StartScanning;
21
21
  StopScanning?: StopScanning;
22
- StopAllDevices?: StopAllDevices;
23
22
  ScanningFinished?: ScanningFinished;
24
- StopDeviceCmd?: StopDeviceCmd;
23
+ StopCmd?: StopCmd;
25
24
  InputCmd?: InputCmd;
26
25
  InputReading?: InputReading;
27
26
  OutputCmd?: OutputCmd;
@@ -56,9 +55,6 @@ export interface StartScanning {
56
55
  export interface StopScanning {
57
56
  Id: number | undefined;
58
57
  }
59
- export interface StopAllDevices {
60
- Id: number | undefined;
61
- }
62
58
  export interface ScanningFinished {
63
59
  Id: number | undefined;
64
60
  }
@@ -108,7 +104,7 @@ export declare enum OutputType {
108
104
  Constrict = "Constrict",
109
105
  Inflate = "Inflate",
110
106
  Position = "Position",
111
- PositionWithDuration = "PositionWithDuration",
107
+ HwPositionWithDuration = "HwPositionWithDuration",
112
108
  Temperature = "Temperature",
113
109
  Spray = "Spray",
114
110
  Led = "Led"
@@ -159,7 +155,10 @@ export interface InputReading {
159
155
  };
160
156
  Id: number | undefined;
161
157
  }
162
- export interface StopDeviceCmd {
158
+ export interface StopCmd {
163
159
  Id: number | undefined;
164
- DeviceIndex: number;
160
+ DeviceIndex: number | undefined;
161
+ FeatureIndex: number | undefined;
162
+ Inputs: boolean | undefined;
163
+ Outputs: boolean | undefined;
165
164
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "buttplug",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "description": "Buttplug Client Implementation for Typescript/Javascript",
5
5
  "homepage": "https://github.com/buttplugio/buttplug-js/",
6
6
  "repository": {
@@ -83,7 +83,7 @@ export class ButtplugClient extends EventEmitter {
83
83
  };
84
84
 
85
85
  public stopAllDevices = async () => {
86
- this._logger.Debug('ButtplugClient: StopAllDevices');
86
+ this._logger.Debug('ButtplugClient: StopCmd (all devices)');
87
87
  await this.sendMsgExpectOk({ StopCmd: { Id: 1, DeviceIndex: undefined, FeatureIndex: undefined, Inputs: true, Outputs: true } });
88
88
  };
89
89
 
@@ -96,7 +96,7 @@ export class ButtplugClient extends EventEmitter {
96
96
  const leftoverMsgs = this._sorter.ParseIncomingMessages(msgs);
97
97
  for (const x of leftoverMsgs) {
98
98
  if (x.DeviceList !== undefined) {
99
- this.parseDeviceList(x as Messages.DeviceList);
99
+ this.parseDeviceList(x.DeviceList!);
100
100
  break;
101
101
  } else if (x.ScanningFinished !== undefined) {
102
102
  this._isScanning = false;
@@ -88,10 +88,6 @@ export interface StopScanning {
88
88
  Id: number | undefined;
89
89
  }
90
90
 
91
- export interface StopAllDevices {
92
- Id: number | undefined;
93
- }
94
-
95
91
  export interface ScanningFinished {
96
92
  Id: number | undefined;
97
93
  }