aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: ccd9b12e5d04971ed97f275a6bdf509403a09b5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# 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. It's included in `macos`
- `xcode` to build the safari extension. Can be downloaded from the
  [apple developer portal][xcode-download].
- `node` and `pnpm` to build the extension, and if you want to run the server
  directly. Node can be installed via brew with `brew install node`, or with
  a version manager like [asdf][asdf]. For `pnpm` check the [website][pnpm].
- `podman` and `podman-compose` if you want to run the server as a container.
  Both can be installed with homebrew `brew install podman podman-compose`
- `prettier` to format Javascript, JSON, Yaml, and Markdown. Will automatically
  install when running `make format`.
- `xcbeautify` to format swift. Can be installed with homebrew
  `brew install xcbeautify`

If you're running macos and using homebrew, you can install them all with
`make prepare-environment`.

### 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

[xcode-download]: https://developer.apple.com/xcode/resources/
[asdf]: https://asdf-vm.com/
[pnpm]: https://pnpm.io/installation