A simple IRC web client
Find a file
2021-11-27 12:26:25 +01:00
components components/connect-form: replace auto-join text field with checkbox 2021-11-27 12:08:23 +01:00
lib Ignore RPL_AWAY 2021-11-23 17:58:49 +01:00
.build.yml ci: fix deploy branch check again, exclude config.json 2021-11-17 10:45:18 +01:00
.editorconfig Add .editorconfig 2020-07-22 14:51:37 +02:00
.gitignore gitignore: add Parcel files 2021-10-20 10:55:49 +02:00
commands.js commands: Add LIST command 2021-11-18 16:24:18 +01:00
index.html Avoid inline script in index.html 2021-11-17 10:58:02 +01:00
keybindings.js Update buffer store when marking all buffers as read 2021-08-25 08:47:35 +02:00
LICENSE Initial commit 2020-04-24 19:03:43 +02:00
main.js Avoid inline script in index.html 2021-11-17 10:58:02 +01:00
manifest.json Add web app manifest 2021-06-22 10:42:16 +02:00
package-lock.json Add Parcel to dev dependencies 2021-11-04 12:21:21 +01:00
package.json Add Parcel to dev dependencies 2021-11-04 12:21:21 +01:00
README.md readme: add nginx file server directive 2021-11-27 12:26:25 +01:00
state.js Add post-connect UI to login via SASL 2021-11-21 16:40:46 +01:00
store.js Add UI to enable protocol handler 2021-11-16 11:19:25 +01:00
style.css Hide buffer focus outline 2021-08-18 08:55:23 +02:00

gamja

A simple IRC web client.

screenshot

Usage

Requires an IRC WebSocket server.

First install dependencies:

npm install --production

Then configure an HTTP server to serve the gamja files. Below are some server-specific instructions.

soju

Add a WebSocket listener to soju, e.g. listen wss://127.0.0.1:8080.

Configure your reverse proxy to serve gamja files and proxy /socket to soju.

webircgateway

Setup webircgateway to serve gamja files:

[fileserving]
enabled = true
webroot = /path/to/gamja

Then connect to webircgateway and append ?server=/webirc/websocket/ to the URL.

nginx

If you use nginx as a reverse HTTP proxy, make sure to bump the default read timeout to a value higher than the IRC server PING interval. Example:

location / {
	root /path/to/gamja;
}

location /socket {
	proxy_pass http://127.0.0.1:8080;
	proxy_read_timeout 600s;
	proxy_http_version 1.1;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection "Upgrade";
	proxy_set_header X-Forwarded-For $remote_addr;
	proxy_set_header X-Forwarded-Proto $scheme;
}

If you are unable to configure the proxy timeout accordingly, or if your IRC server doesn't send PINGs, you can set the server.ping option in config.json (see below).

Development server

Any HTTP server capable of serving static files can be used. For instance:

python -m http.server

If your IRC WebSocket server is started on port 8080, you can head over to http://localhost:8000/?server=ws://localhost:8080 to connect to the server.

Alternatively, the gamja development dependencies also include an HTTP server:

npm install --include=dev
npm start

Production build

Optionally, Parcel can be used to build a minified version of gamja.

npm install --include=dev
npm run build

Query parameters

gamja settings can be overridden using URL query parameters:

  • server: path or URL to the WebSocket server
  • nick: nickname
  • channels: comma-separated list of channels to join (# needs to be escaped)
  • open: IRC URL to open

Alternatively, the channels can be set with the URL fragment (ie, by just appending the channel name to the gamja URL).

Configuration file

gamja default settings can be set using a config.json file at the root:

{
	// IRC server settings.
	"server": {
		// WebSocket URL or path to connect to (string).
		"url": "wss://irc.example.org",
		// Channel(s) to auto-join (string or array of strings).
		"autojoin": "#gamja",
		// Controls how the password UI is presented to the user. Set to
		// "mandatory" to require a password, "optional" to accept one but not
		// require it, "disabled" to never ask for a password, or "external" to
		// use SASL EXTERNAL. Defaults to "optional".
		"auth": "optional",
		// Default nickname (string).
		"nick": "asdf",
		// Don't display the login UI, immediately connect to the server
		// (boolean).
		"autoconnect": true,
		// Interval in seconds to send PING commands (number). Set to 0 to
		// disable. Enabling PINGs can have an impact on client power usage and
		// should only be enabled if necessary.
		"ping": 60
	}
}

Contributing

Send patches on the mailing list, report bugs on the issue tracker. Discuss in #soju on Libera Chat.

License

AGPLv3, see LICENSE.

Copyright (C) 2020 The gamja Contributors