69 lines
2.5 KiB
Markdown
69 lines
2.5 KiB
Markdown
# WebMuxD
|
|
|
|
`webmuxd` is a WebUSB implementation of Apple's `usbmuxd` protocol, compatible with [libimobiledevice/usbmuxd](https://github.com/libimobiledevice/usbmuxd).
|
|
|
|
## Usage
|
|
|
|
Yarn:
|
|
`yarn add webmuxd`
|
|
|
|
NPM:
|
|
`npm add webmuxd`
|
|
|
|
## iMobileDevice Interaction Module
|
|
|
|
This package now includes a browser-side high-level module for direct iOS interaction:
|
|
|
|
- `DirectUsbMuxClient`: usbmux + lockdownd + AFC + installation_proxy lifecycle
|
|
- `installIpaViaInstProxy`: staging IPA via AFC and installing with InstProxy
|
|
- Pairing helpers: `createHostId`, `createSystemBuid`, pair record encode/decode helpers
|
|
|
|
Import from root package:
|
|
|
|
`import { DirectUsbMuxClient, installIpaViaInstProxy } from "webmuxd"`
|
|
|
|
When device session requires TLS/pairing, inject your own `tlsFactory` and `pairRecordFactory` in `DirectUsbMuxClient` options.
|
|
|
|
## How it Works
|
|
|
|
In this repo you will find `webmuxd.ts`. This is a node module that provides the client side implementation of
|
|
connecting to the WebUSB API surface and configuring the message pump. You can see a more complete example and
|
|
implementation of this by looking at [webmuxd-example](https://github.com/webmuxd/webmuxd-example) and it's
|
|
corresponding server component [go-webmuxd](https://github.com/webmuxd/go-webmuxd). The example connects up this
|
|
component to a WebSocket and pipes the USB content back and forth to the `go-webmuxd` server, which finally passes
|
|
it to `libimobiledevice` via a UNIX socket on disk.
|
|
|
|
## Building
|
|
|
|
If you wish to create your own build it's rather simple:
|
|
`yarn run build`
|
|
|
|
## Developing
|
|
|
|
The simplest way to build, develop and diagnose is using the `XHC20` USB capture on macOS, and optionally `demuxusb`
|
|
|
|
https://www.umpah.net/how-to-sniff-usb-traffic-reverse-engineer-usb-device-interactions/
|
|
|
|
Using a Chromebook as an endpoint:
|
|
|
|
https://blog.rickmark.me/puppeteer-with-chromeos/
|
|
|
|
## Contributing and License
|
|
|
|
This project is happy to accept PRs and other contributions. It is free for commercial use under the MIT license,
|
|
I would love to see it credited if so!
|
|
|
|
## Roadmap
|
|
|
|
To make this component "production ready" and less of a proof of concept the following should be completed:
|
|
|
|
* Handle all `usbmuxd` framing, and ACKs in script to reduce RTT (round trip time)
|
|
* Create a standardized WebSocket protocol and move it from `webmuxd-example` to `webmuxd` keeping only the UI
|
|
* Move `MobileDevice.ts`
|
|
* Move `RemoteChannel.ts`
|
|
* Move `transport.proto` / `transport.ts`
|
|
* Factor out "common UI elements" to `webmuxd-ui`
|
|
* Device Picker
|
|
* Device Info
|
|
* Improve `go-webmuxd` as a multi-session "meet me" service
|