- Release completed feature metadata support for nested input ranges such as battery ranges.
- Fix message sorter request retention after responses resolve or reject.
- Preserve correct percent mapping and regression coverage for outputs with negative ranges.
- Refresh Yarn dependency resolutions, including security and compatibility updates.
- Update examples and CDN snippets to reference the v5 package.
- Fix node examples to depend on the repository root package instead of the removed
examples/jspath. - Standardize browser examples on the documented
buttplugUMD global.
ButtplugClient.devicesandButtplugClientDevice.featuresnow return copiedReadonlyMapinstances instead of live mutable internal maps.ButtplugClientDeviceFeature.runInput()now returns a readonlyButtplugClientInputReadinginstead of a rawMessages.InputReading.- The
inputreadingevent now emits readonlyButtplugClientInputReadingobjects from the feature, device, and client levels. DeviceOutputCommandconstruction is now internal to the command builder API, and theDeviceOutputCommand.valuegetter now exposes the numeric output value.- Raw protocol helpers are no longer part of the root public API.
ButtplugMessageSorteris no longer root-exported, and rawsend()/sendMessage()methods are protected. ButtplugErrormetadata backing fields are no longer public mutable fields. Use the existingErrorClass,InnerError, andIdgetters.- Device feature output metadata and output command payloads now use separate TypeScript
interfaces so metadata
Durationis represented as a range.
- Expose readonly device feature metadata, including descriptors, feature indexes, input/output value ranges, input commands, and output duration ranges.
- Add
DeviceOutput.*.value()command builders for direct v4 output values. Existingsteps()builders remain as deprecated aliases. - Expose readonly server information through
ButtplugClient.serverInfo. - Expose readonly input readings through
ButtplugClientInputReading.
- Correct output percent conversion to map across the full v4
[min, max]feature range, including ranges with negative minimum values. - Send v4
OutputCmdvalues as scalar numbers instead of single-element arrays. (#301) - Validate direct output values and duration values against advertised feature ranges before sending commands.
- Update examples to use the public feature metadata and input reading APIs instead of private implementation fields or raw protocol messages.
- Update to typescript 5
- Added new quickstart tutorial
- Fix exposure of HwPositionWithDuration
- Add more pointers to examples in README
- Optimizing array filtering
- Fix issue with websocket errors not throwing
- Fix issue with StopDeviceCmd still being sent when using npm package
- Fix issue with different decodes of DeviceList depending on server sent or requested
- Update to Buttplug Spec v4
- Basically a rewrite
- Actually throw exceptions when there are websocket connection issues. (#257)
- Fix issue with name minifying causing problems with class name reflection (again, see v3.1.0 notes for the first round of this)
- Web package building now uses vite instead of webpack
- Long live vite. May I never have to fucking deal with webpack ever again.
- Cleaned up naming conventions
- Changed connector interface (this is technically a breaking change but afaik no one else implements their own connector)
- Fix linear attribute enumeration
- Replace events with eventemitter3
- API Compatible and easier for building across web/node
- Remove blob reading from websocket connectors
- We never use binary messages on websockets, and the extra filereader dep for node was causing issues with web builds.
- Added support for Node Websockets via new connector class (#244)
- Fixed issues with using buttplug-js in minified projects (#246)
- Changed from type-based class resolution to static naming, class name mangling should no longer be an issue.
- Back to pure Typescript. Back to the good shit.
- Removed server
- Brought implementation in line with the FFI Client API, so minimal changes should be needed for porting from v1.
- There is no buttplug-js v2
- There is no Miss Zarves
- (Version skipped to align JS and C# implementation versions, which will probably fall out of alignment again very quickly)
- Revert WASM loading specification to fix webpack/MIME issues
- Update to buttplug v5
- Allow specification of WASM loading source for buttplug_init()
- ButtplugClientDevice equality testing now works as expected
- Actually fix #60 and #51
- Update to buttplug-rs v2.1.7, adds Lovehoney Desire Egg support
- #60: Expose Buttplug.Endpoint type publicly so Raw commands are usable
- #59: Client device vibrate() call should take an array of numbers
- #51: Fix ScanningFinished emission for WebBluetooth
- Actually build the project before publishing this time. This is why I have CI. Why am I hand publish the project? (Because I am lazy. So lazy.)
- Remove publicpath setting in CDN bundler.
- Implement characteristic read in WebBluetooth WASM
- Allows us to use the Handy on the web
- Update to buttplug-rs v2.1.5. The Handy support, client connect race bugfixes, device disconnection panic bugfixes.
- Update to buttplug-rs v2.1.3, lots more tests/fixes, Lovense Diamo support
- Update to buttplug-rs-ffi core v1.0.12, fixes disconnect issues in WebBluetooth, updates connector API for buttplug-rs v2.1.x API
- Update to buttplug-rs v2.0.5, fixes issue with DeviceMessageInfo deserialization
- Print message and bail early if buttplugInit is called again after successful load.
- This most likely exited quietly without breaking anything before, but now it's at least spewing some status too.
- Update to buttplug-rs v2.0.4, fixing issues with native timers being compiled instead of WASM timers.
- #49: Fix issue with incorrect type check on linear commands.
- Update to Buttplug-rs v2.0.3
- Fixes issues with Strokers/rotators not showing up due to invalid message attributes.
- Update to Buttplug-rs v2.0.0
- Lovense Ferri support
- Init/Event API cleanup
- Panic messages/stacks now emitted on WASM panic
- Update to Buttplug-rs v1.0.5, with Libo and Prettylove support
- Add protobufjs to dependencies, otherwise typescript compilation files during type resolution.
- Update to Buttplug v1, with new device config file format.
- Change package name back to "buttplug"
- Fix browser websockets not throwing errors on invalid URLs or connection errors.
- Fix webpack build/load strategies for static (CDN loadable) web package.
- Completely rewrite surface API in Typescript, now uses core protobuf library, same as the other FFI layers.
- Added log output capabilities (console only at the moment).
- Actually throw error types instead of just casting to strings. Error types are reduces from Rust's verbose enums, but this is good enough.
- Add stop() method to devices.
- Make a single connect method on ButtplugClient
- Brings API closer to other/old implementations
- Make Android use WebBluetooth's acceptAllDevices so Lovense shows up again
- namePrefix, which we use to wildcard Lovense devices, broke in Chrome 81. Fix is tracked for Chrome 87.
- Fix type mismatch in inherited methods in ForwardedDeviceProtocol.
- Added support for Connector Initializer
- Allows using the Buttplug connector for auth or other communication before spinning up the protocol itself.
- Added Device Forwarder Support
- Allows developers to create a device manager that can accept "forwarded" devices from another client. Basically turns Buttplug into a full teledildonics system, using its own protocol.
- ButtplugClientDevice now emits "deviceremoved" when it is disconnected.
- This is alongside the client emitting it.
- Fixed WeVibe Melt support
- Fixed references to buttplug-server-cli in README
- This is now at https://github.com/intiface/intiface-node-cli
- Added Hardware Support
- WebGamepad Haptics on Chrome
- Added Hardware Support
- WeVibe Vector
- Magic Motion Vini, Fugu, Awaken, Equinox, Solstice
- Add Motorbunny Support
- Allow loading of device configuration file from CDN (https://buttplug-device-config.buttplug.io)
- Remove yaml requirement for device config file, just use JSON (Saves 30% library size)
- Updated built in device config file, including Cyclone SA fixes.
- Dependency security updates
- Added hardware support
- Kiiroo Onyx 2
- Kiiroo Pearl 2
- Kiiroo/OhMiBod Fuse
- Kiiroo Virtual Blowbot
- Kiiroo Titan
- Libo PiPiJing Elle/Whale
- Libo Xiao Lu (Lottie)
- Libo Lu Xiao Han (Lulu)
- Libo Suo Yin Qiu (Karen)
- Libo Bai Hu (LaLa)
- Libo/Sistalk MonsterPub
- Youcups Warrior 2
- Vorze Bach
- A whole bunch of Magic Motion toys I'm not gonna list here.
- Change WebBluetooth calls to work with iOS WebBLE app
- Updates dependencies, but otherwise this is a dependent library release.
- Roll back to using webpack for web libraries until Rollup is fixed.
- Update CLI to work with Intiface
- That's it. No other changes. Maybe this Monorepo and lockstepped versioning thing wasn't such a good idea. :/
- ButtplugBrowserWebsocketConnector now exported from library
- Add ability to use Device Configuration files, eliminating need to change code to add devices to protocols we already support.
- Add Youou Wand support
- Fixed lots of unhandled promises, turning them into exception throws. Also now have a linter rule to make sure this doesn't happen again.
- Moved CI to Azure Pipelines
- Moved project to being a monorepo for all buttplug-js core library, device subtype manager, connector, and server CLI projects
- Removed Devtools package for time being, needs to be turned into its own module.
- Not currently building CLIs for windows, because noble-uwp was having some problems compiling.
- Removed ConnectLocal/ConnectWebsocket functions from Client, now requires a connector object.
- Add way to pass loggers into DeviceSubtypeManagers (to bridge module scope issues)
- Fix type error for Device Manager message callbacks
- Move core/Device to client/ButtplugClientDevice, since only client uses it.
- Create convenience Device command functions on ButtplugClientDevice.
- Add specific Buttplug exception types.
- Fix up error handling to always throw exceptions.
- Add connection semantics to server.
- Update dependencies.
- Added Lovense Osci support
- Updated schema with bugfixes to generic commands
- Add Vorze UFO SA support
- Make DevTools/Simulator loadable as a module
- Fix bug in characteristic map calculation (caused Fleshlight Launch to stop working on 0.8.0)
- Fix output of speed/position values in Simulator
- Fix bug in DeviceList message construction in Server
- Various other Simulator fixes.
- Add BLE GATT Characteristic reading functions
- Add ability to derive Lovense hardware info from device queries (no more name/UUID chasing)
- Namespace devtools CSS rules to fix issue with CSS conflicts in devtools
- Change Signature of CreateSimple*Message functions (breaking change)
- Add IsScanning boolean getter to Client
- Extra build config changes to fix webpack issues
- Rolling version number due to device API change (added "Disconnect" method)
- Update to Webpack 4
- Fix server cleanup on shutdown (remove listeners, disconnect devices)
- Add more Lovense device names/info
- Expose feature counts of device command messages
- Add CreateSimple*Cmd functions
- Add new Lovense and WeVibe device names
- Device counts now start at 0 instead of 1
- Rolling version number due to devtools API change
- TestDeviceManager no longer a singleton. That was a bad idea in the first place.
- TestDeviceManagerPanel now requires a ButtplugServer as a parameter
- Added Connector getter in ButtplugClient, as sometimes it's handy to pull an embedded connector and get the Server from it (For things like the TestDeviceManagerPanel).
- Devices now have internal IDs, so deviceadded isn't fired multiple times for the same device
- Added basic MaxPro Smart Vibrator support
- Fix bug in devtools web exports
- Add more styles to log panel so outside styles don't affect it.
- Fix webpack settings so mangling doesn't destroy parser
- Add new IDs for Lovense Domi and Lush
- Remove node websocket connector and server, since it doesn't build/include nicely as a submodule. (#87)
- Added Buttplug Spec v1 implementation
- More generic message types (VibrateCmd, RotateCmd, LinearCmd)
- Message attributes (device feature counts)
- Message downgrading capabilities
- Added tests. So many tests.
- Divided devtools into core and web directories
- Updated devtools to depend on buttplug as an external library (makes file sizes smaller)
- Library now uses es6 by default
- Lots of bug fixes due to aforementioned tests (Wevibe control issues, missing error message, etc...)
- Fix many logging bugs
- Add more log messages to library
- Add devtools module, with log viewer, test device manager, and device visualizer
- Add Node websocket connector and server, for native server capabilities
- Added support for new Lovense devices (Domi with new firmware)
- Message types can now be accessed via getter ([Message].Type)
- Client now emits "disconnect" event on disconnection (either user or server triggered)
- Fixed bug where ping timer wouldn't stop on disconnect
- Moved test system to jest
- Removed dependency on text-encoding package
- Added support for new Lovense devices (Hush with new firmware)
- Add webpack config to build library for web on release
- Expose IButtplugConnector for building external connector interfaces
- Actually write usage information in the README
- Remove dist from .gitignore in release branch. Again. Ugh.
- Create generic connect function to allow users to define their own connectors
- Documentation updates
- Added more WeVibe names
- Remove all default exports, require verbose include
- Prepare library for use with node servers as well as web browser servers
- Fix emission of "scanningfinished" event and message in client/server
- Added WebBluetooth support for the Vorze A10 Cyclone
- Fixed types in VorzeA10CycloneCmd message
- Simplified Client types. Now one client type with Websocket and Local connection functions.
- Fixed bug where outbound messages were not checked against the message schema.
- Add Lovense Domi, WeVibe toy support to server
- Add ability to query for browser Bluetooth Support in server
- Added Server functionality, with WebBluetooth device manager
- Added logging system
- Fixed KiirooCmd format
- Start cleaning up library to prepare for Server implementation
- Add VorzeA10CycloneCmd message
- Add JSON schema validation
- Add StopAllDevices function to client
- Update of v0.0.5 with built files included
- Add client disconnect functionality
- Test updates
- Add ErrorCode support to error messages
- tslint addition and cleanup
- Repo cleanup, typescript library additions
- First released version of library
- Core device/message implementation
- Simple webclient with ability to connect over websockets, get device lists, send device messages
- Project Repo Started