# Junction Connect people through any URL. Junction is a web extension for Firefox, Chrome and Safari that lets you start an audio call at any URL. ## Building Running `make` or `make package` will regenerate the content script, and package the extension for all browsers in the `./build/` directory with the following outputs: - `junction.xpi`: The firefox extension - `junction.zip`: The chrome extension - `Junction.app`: The safari extension app ## Developing The project is divided into three main parts: - `server`: A server that handles message passing to establish the WebRTC connections. - `extension`: The main code of the extension itself. - `safari`: The safari app, it wraps the extension using symlinks. ### Dependencies - `make` to run the build commands. - `xcode` to build the safari extension. - `node` and `pnpm` to build the extension, and if you want to run the server directly. - `podman` and `podman-compose` if you want to run the server as a container. - `prettier` to format Javascript, JSON, Yaml, and Markdown. - `xcbeautify` to format swift ### Server The server is a socket.io server that relays messages between peers to help establish a WebRTC connection. #### Configuration You can use environment variables to control the server. - `JUNCTION_SERVER_PORT` which port to listen on. Defaults to `8000`. ### Extension The extension uses WebExtension manifest v2 and is compatible with Firefox, Chrome and Safari. You can build all extensions using `make` in the root of the directory. If you want to run manually then you can run `pnpm install` from the `extension` folder to install dependencies, and `pnpm build` to generate the content script. ``` $ pnpm install && pnpm build ``` #### Testing on Firefox In order to test on firefox, first go to `about:debugging`, then click on the `This Firefox` option. Then click on `Load Temporary Add-On` and point the browser to the `build/junction.xpi` file if you're using `make`, or `extension/manifest.json` file if you're testing without packaging. This will enable the extension and will allow you to use the inspector to debug. #### Testing on Chrome In order to test on chrome, first go to `chrome://extensions/`. Make sure `Developer mode` is enabled. You can drag the `build/junction.zip` file or click `Load Unpacked` and point the browser to the `extension` directory. #### Testing on Safari Open `Junction.app` and then enable the extension in Safari. ### Formatting Running `make format` will format the code with prettify and xcbeautify