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 +14 -0
- package/README.md +11 -3
- package/dist/main/src/client/ButtplugClient.js +9 -4
- package/dist/main/src/client/ButtplugClient.js.map +1 -1
- package/dist/main/src/client/ButtplugClientDevice.js +1 -1
- package/dist/main/src/client/ButtplugClientDevice.js.map +1 -1
- package/dist/main/src/client/ButtplugClientDeviceCommand.js +1 -1
- package/dist/main/src/client/ButtplugClientDeviceCommand.js.map +1 -1
- package/dist/main/src/client/ButtplugClientDeviceFeature.js +1 -1
- package/dist/main/src/client/ButtplugClientDeviceFeature.js.map +1 -1
- package/dist/main/src/core/Messages.d.ts +7 -8
- package/dist/main/src/core/Messages.js +1 -2
- package/dist/main/src/core/Messages.js.map +1 -1
- package/dist/web/buttplug.js +1 -1
- package/dist/web/buttplug.mjs +75 -75
- package/dist/web/core/Messages.d.ts +7 -8
- package/package.json +1 -1
- package/src/client/ButtplugClient.ts +2 -2
- package/src/core/Messages.ts +0 -4
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
|
[](https://www.patreon.com/qdot)
|
|
4
4
|
[](https://www.github.com/sponsors/qdot)
|
|
5
|
-
|
|
6
|
-
[](https://discuss.buttplug.io)
|
|
5
|
+
[](https://discuss.buttplug.io)
|
|
7
6
|
[](https://discord.buttplug.io)
|
|
8
|
-
[](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:
|
|
102
|
-
await this.sendMsgExpectOk({
|
|
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(
|
|
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":"AAAA;;;;;;GAMG;AAEH,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb,6CAAiD;AACjD,iDAA6C;AAC7C,iEAA8D;AAE9D,0EAAuE;AACvE,2DAA6C;AAC7C,mDAI4B;AAC5B,yFAAsF;AAEtF,MAAa,cAAe,SAAQ,4BAAY;IACpC,UAAU,GAA0B,IAAI,CAAC;IACzC,UAAU,GAAoC,IAAI,CAAC;IACnD,QAAQ,GAAsC,IAAI,GAAG,EAAE,CAAC;IACxD,WAAW,CAAS;IACpB,OAAO,GAAG,wBAAc,CAAC,MAAM,CAAC;IAChC,WAAW,GAAG,KAAK,CAAC;IACtB,OAAO,GAA0B,IAAI,6CAAqB,CAAC,IAAI,CAAC,CAAC;IAEzE,YAAY,UAAU,GAAG,yBAAyB;QAChD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,UAAU,WAAW,CAAC,CAAC;IACtE,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;IAC/D,CAAC;IAED,IAAW,OAAO;QAChB,0EAA0E;QAC1E,wCAAwC;QACxC,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAEM,OAAO,GAAG,KAAK,EAAE,SAAmC,EAAE,EAAE;QAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,oCAAoC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CACjE,CAAC;QACF,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClE,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACpC,CAAC,CAAC;IAEK,UAAU,GAAG,KAAK,IAAI,EAAE;QAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,MAAM,IAAI,CAAC,UAAW,CAAC,UAAU,EAAE,CAAC;IACtC,CAAC,CAAC;IAEK,aAAa,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC;IAEK,YAAY,GAAG,KAAK,IAAI,EAAE;QAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC;IAEK,cAAc,GAAG,KAAK,IAAI,EAAE;QACjC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,
|
|
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({
|
|
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.
|
|
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":";;;AAAA,mDAAyD;AACzD,+CAA8C;AAE9C,MAAM,cAAc;IACV,QAAQ,CAAqB;IAC7B,MAAM,CAAqB;IAEnC,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,CAAS;QACjC,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC;QAC3B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,CAAS;QACnC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,gCAAmB,CAAC,iBAAiB,CAAC,sCAAsC,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC;QAC3B,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAED,MAAa,mBAAmB;IAEpB;IACA;IACA;IAHV,YACU,WAAuB,EACvB,MAAsB,EACtB,SAAkB;QAFlB,gBAAW,GAAX,WAAW,CAAY;QACvB,WAAM,GAAN,MAAM,CAAgB;QACtB,cAAS,GAAT,SAAS,CAAS;IAE3B,CAAC;IAEF,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF;AAnBD,kDAmBC;AAED,MAAa,4BAA4B;IAE7B;IADV,YACU,WAAuB;QAAvB,gBAAW,GAAX,WAAW,CAAY;IAChC,CAAC;IAEK,KAAK,CAAC,KAAa;QACxB,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;IACjG,CAAC;IAEM,OAAO,CAAC,OAAe;QAC5B,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;IACrG,CAAC;CACF;AAZD,oEAYC;AAED,MAAa,2CAA2C;IAC/C,KAAK,CAAC,KAAa,EAAE,QAAgB;QAC1C,OAAO,IAAI,mBAAmB,CAAC,qBAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnG,CAAC;IAEM,OAAO,CAAC,OAAe,EAAE,QAAgB;QAC9C,OAAO,IAAI,mBAAmB,CAAC,qBAAU,CAAC,
|
|
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.
|
|
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,
|
|
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,sBAAsB,EAAE,CAAC;YACvD,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"}
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
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["
|
|
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;;;
|
|
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"}
|
package/dist/web/buttplug.js
CHANGED
|
@@ -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"})}));
|
package/dist/web/buttplug.mjs
CHANGED
|
@@ -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: {} },
|
|
4
|
+
var k = { exports: {} }, F;
|
|
5
5
|
function j() {
|
|
6
|
-
return
|
|
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
|
|
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],
|
|
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),
|
|
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 (
|
|
62
|
-
y[
|
|
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 (
|
|
67
|
-
switch (r[
|
|
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[
|
|
69
|
+
r[l].fn.call(r[l].context);
|
|
70
70
|
break;
|
|
71
71
|
case 2:
|
|
72
|
-
r[
|
|
72
|
+
r[l].fn.call(r[l].context, o);
|
|
73
73
|
break;
|
|
74
74
|
case 3:
|
|
75
|
-
r[
|
|
75
|
+
r[l].fn.call(r[l].context, o, c);
|
|
76
76
|
break;
|
|
77
77
|
case 4:
|
|
78
|
-
r[
|
|
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(
|
|
81
|
+
if (!y) for (S = 1, y = new Array(R - 1); S < R; S++)
|
|
82
82
|
y[S - 1] = arguments[S];
|
|
83
|
-
r[
|
|
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
|
|
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) &&
|
|
98
|
+
h.fn === o && (!v || h.once) && (!c || h.context === c) && d(this, p);
|
|
99
99
|
else {
|
|
100
|
-
for (var I = 0, r = [],
|
|
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 :
|
|
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] &&
|
|
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
|
|
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(),
|
|
127
|
-
this.timestamp = `${a}:${g}:${
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
311
|
+
constructor(e, t = M) {
|
|
312
312
|
super(e, w.ERROR_DEVICE, t);
|
|
313
313
|
}
|
|
314
314
|
}
|
|
315
|
-
class
|
|
316
|
-
constructor(e, t =
|
|
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 =
|
|
321
|
+
constructor(e, t = M) {
|
|
322
322
|
super(e, w.ERROR_PING, t);
|
|
323
323
|
}
|
|
324
324
|
}
|
|
325
|
-
class
|
|
326
|
-
constructor(e, t =
|
|
325
|
+
class J extends m {
|
|
326
|
+
constructor(e, t = M) {
|
|
327
327
|
super(e, w.ERROR_UNKNOWN, t);
|
|
328
328
|
}
|
|
329
329
|
}
|
|
330
|
-
const
|
|
331
|
-
function
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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 == _.
|
|
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
|
|
376
|
-
f[t.toString()] =
|
|
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
|
|
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({
|
|
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
|
|
511
|
+
throw new C("Got incorrect message back.");
|
|
512
512
|
if (t.Reading[D.Battery] === void 0)
|
|
513
|
-
throw new
|
|
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,
|
|
536
|
-
t = g, n =
|
|
535
|
+
(g, d) => {
|
|
536
|
+
t = g, n = d;
|
|
537
537
|
}
|
|
538
538
|
);
|
|
539
|
-
return this._waitingMsgs.set(
|
|
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 =
|
|
545
|
-
if (a !==
|
|
546
|
-
const [g,
|
|
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
|
-
|
|
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:
|
|
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(
|
|
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:
|
|
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
|
-
|
|
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 = (
|
|
699
|
-
t(
|
|
700
|
-
}, g = (
|
|
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", (
|
|
705
|
-
this.parseIncomingMessage(
|
|
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 (
|
|
708
|
-
t(
|
|
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(_.
|
|
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
|
-
|
|
848
|
+
C as ButtplugMessageError,
|
|
849
849
|
Z as ButtplugMessageSorter,
|
|
850
850
|
ue as ButtplugNodeWebsocketClientConnector,
|
|
851
851
|
K as ButtplugPingError,
|
|
852
|
-
|
|
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
|
-
|
|
861
|
+
H as LogMessage,
|
|
862
862
|
ae as MAX_ID,
|
|
863
|
-
|
|
863
|
+
z as MESSAGE_SPEC_VERSION_MAJOR,
|
|
864
864
|
X as MESSAGE_SPEC_VERSION_MINOR,
|
|
865
865
|
_ as OutputType,
|
|
866
|
-
|
|
867
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
@@ -83,7 +83,7 @@ export class ButtplugClient extends EventEmitter {
|
|
|
83
83
|
};
|
|
84
84
|
|
|
85
85
|
public stopAllDevices = async () => {
|
|
86
|
-
this._logger.Debug('ButtplugClient:
|
|
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
|
|
99
|
+
this.parseDeviceList(x.DeviceList!);
|
|
100
100
|
break;
|
|
101
101
|
} else if (x.ScanningFinished !== undefined) {
|
|
102
102
|
this._isScanning = false;
|