Simon Ser
f81c564d23
Implement exponential backoff for reconnections
...
Closes: https://todo.sr.ht/~emersion/gamja/118
2021-12-07 13:05:42 +01:00
Simon Ser
ab3d4dd661
Refactor ISUPPORT handling
...
Add a helper class to parse ISUPPORT tokens. Instead of having
manual ISUPPORT handling all over the place, use pre-processed
values.
2021-12-07 12:09:10 +01:00
Simon Ser
31b293fa03
lib/client: use Error objects for error events
2021-12-06 23:09:30 +01:00
Simon Ser
f9ec578fce
Handle FAIL ACCOUNT_REQUIRED
2021-12-06 22:54:15 +01:00
Simon Ser
305f510501
Read nickname from RPL_WELCOME
...
References: https://github.com/ircdocs/modern-irc/pull/146
2021-12-06 17:55:47 +01:00
Simon Ser
05f7c6e9fe
Add Client.join, show join errors in popup
2021-12-04 17:44:23 +01:00
Simon Ser
fc8aa30756
lib/client: add generic error handling to roundtrip()
2021-12-04 17:22:36 +01:00
Simon Ser
8c8bd43638
lib/client: introduce IRCError
2021-12-04 17:05:34 +01:00
Simon Ser
30e3ec392f
Update channel join status when kicked
2021-12-04 16:52:38 +01:00
Simon Ser
ada9ff3b71
components/buffer-header: fix missing "join" button for parted channel
2021-12-03 19:09:52 +01:00
Simon Ser
93ba0e6443
Disable debug logs in production
...
console.debug logs cause some performance issues because the browser
is forced to save the logged objects just in case the user opens the
debugging tools.
They can be force-enabled back by adding ?debug=1 to the URL.
Only console.debug is disabled, console.log and other levels are a lot
less verbose and still enabled by default.
2021-12-01 11:40:59 +01:00
Simon Ser
07c9cdebb6
Add usage message to development server
2021-12-01 10:44:03 +01:00
Simon Ser
aef2812348
Add custom developement server
...
This implements a tiny WebSocket proxy useful for development
purposes.
2021-12-01 10:34:41 +01:00
Simon Ser
a1ff1be342
Mark auth dialog as loading
2021-11-30 16:05:08 +01:00
Simon Ser
47f56f06b9
Mark register/verify dialogs as loading
2021-11-30 15:49:52 +01:00
Simon Ser
1e84412172
Show "Manage network" even if upstream is disconnected
...
Fixes: 86853eb2e5 ("components/buffer-header: hide action buttons when disconnected")
2021-11-30 15:29:24 +01:00
Simon Ser
451bb4c73f
Add link to verify account next to VERIFICATION_REQUIRED message
2021-11-30 15:13:34 +01:00
Simon Ser
be08302c1f
Add support for draft/account-registration
...
A new UI to register and verify accounts is added.
2021-11-30 14:59:44 +01:00
Simon Ser
c4a78283af
Linkify error messages
...
Sometimes servers will put links and channels in their error
messages. Make it easy for users to click them.
2021-11-29 13:38:07 +01:00
Simon Ser
25e69a551e
Clear channel joined field when disconnected
2021-11-29 11:44:45 +01:00
Simon Ser
86853eb2e5
components/buffer-header: hide action buttons when disconnected
2021-11-29 11:44:28 +01:00
Simon Ser
1800b6bea1
components/member-list: re-render on State.users update
2021-11-28 20:13:08 +01:00
Simon Ser
fcce340846
Dim away users in member list
...
References: https://todo.sr.ht/~emersion/gamja/13
2021-11-28 20:09:48 +01:00
Simon Ser
e29ccf7220
Add embedded Content-Security-Policy
...
Add a baseline CSP applicable to all gamja deployments. Resources
can only be loaded from the current host, frames and objects are
disallowed, and scripts are allowed to connect to any host (to allow
cross-site WebSocket connections).
If the server returns a different CSP via an HTTP header, the
effective CSP will be the intersection.
2021-11-27 12:35:02 +01:00
Simon Ser
d8d2cbe0f7
readme: add nginx file server directive
2021-11-27 12:26:25 +01:00
Simon Ser
0d2067e33e
components/connect-form: replace auto-join text field with checkbox
...
The intent of the auto-join field is to ask the user whether they
really want to join the pre-filled channel. Users rarely want to
customize this field, they can just manually click "Join" after
connecting if they want to join another channel.
2021-11-27 12:08:23 +01:00
Simon Ser
3e309e9dfe
Ignore RPL_AWAY
2021-11-23 17:58:49 +01:00
Simon Ser
3e2ac307f6
Add post-connect UI to login via SASL
...
If the server supports SASL and if we aren't logged in with any
account, add a UI to authenticate via SASL. This allows users to
login anonymously then login via SASL.
This will also ease the draft/account-registration implementation.
2021-11-21 16:40:46 +01:00
Simon Ser
24b50a332c
lib/client: make authenticate() return a promise
...
This lets the caller handle the success/failure.
2021-11-21 16:06:13 +01:00
Simon Ser
adefc620de
lib/client: send BOUNCER BIND and CAP END immediately
...
Don't wait for auth to finish. This reduces the number of roundtrips.
2021-11-21 13:48:41 +01:00
Simon Ser
bc3abbec32
lib/client: catch handleMessage errors
2021-11-21 13:48:07 +01:00
Simon Ser
4f927b5536
lib/client: always request sasl cap when available
...
This will allow us to issue post-registration SASL commands.
2021-11-21 13:35:32 +01:00
Simon Ser
86b08296a0
lib/client: don't disconnect on SASL error if registered
...
This will let users try multiple auth attempts when we'll implement
post-registration auth.
2021-11-21 13:23:14 +01:00
Simon Ser
25dd6aabf6
lib/client: remove one roundtrip during SASL auth
...
Instead of waiting for the server's empty challenge, send two
AUTHENTICATE commands in a row.
2021-11-21 13:21:42 +01:00
Simon Ser
0af40a1a8e
state: add account to server
2021-11-21 12:13:44 +01:00
Simon Ser
51bf8da3d6
lib/client: don't error out if SASL isn't available on RPL_WELCOME
...
Some servers (soju) might remove the sasl cap on connection
registration.
2021-11-19 19:32:13 +01:00
Simon Ser
c4c0a77162
Avoid inline script in index.html
...
This helps Parcel generate a proper standalone JS bundle.
2021-11-17 10:58:02 +01:00
Simon Ser
3f2553291f
ci: fix deploy branch check again, exclude config.json
2021-11-17 10:45:18 +01:00
Simon Ser
debd50f482
ci: fix deploy branch check
2021-11-17 10:33:16 +01:00
Simon Ser
a57428002f
ci: add deploy task
2021-11-17 10:31:09 +01:00
Simon Ser
bbfeb5bcbc
ci: add .build.yml
2021-11-17 10:20:49 +01:00
Simon Ser
0980983bdc
readme: add link to IRC channel
2021-11-17 10:17:41 +01:00
Simon Ser
e37c2a2cec
Auto-dismiss client error on reconnect
...
References: https://todo.sr.ht/~emersion/gamja/74
2021-11-17 10:12:36 +01:00
Simon Ser
82e5a2795d
Properly handle port in irc:// URLs
2021-11-16 11:52:38 +01:00
Simon Ser
a0b250df3f
Reword ProtocolHandlerNagger message
2021-11-16 11:30:33 +01:00
Simon Ser
321140327e
Add UI to enable protocol handler
2021-11-16 11:19:25 +01:00
Simon Ser
be475026c8
lib/irc: fix handling for prefixes without host
...
name!user is a valid prefix.
2021-11-15 16:05:51 +01:00
Simon Ser
55361c5a2b
Store WHO list in RPL_ENDOFWHO
...
This allows the state-tracker to figure out whether a WHO query
returned no result.
2021-11-10 10:32:23 +01:00
Simon Ser
c11bf6508a
Only allow one WHO command at a time
...
Closes: https://todo.sr.ht/~emersion/gamja/120
2021-11-10 10:08:47 +01:00
Simon Ser
195e4ca371
Don't stop fetching backlog on error
...
Some servers allow fetching history from some targets but not
others. Don't completely stop fetching chat history on error.
The root cause was a variable shadowing in Client.fetchBatch.
2021-11-10 09:53:17 +01:00
Simon Ser
1206cfae37
Add support for draft/extended-monitor
...
References: https://github.com/ircv3/ircv3-specifications/pull/466
2021-11-09 12:50:11 +01:00
Simon Ser
df29650b98
Always insert non-chathistory messages at the end
2021-11-09 10:49:18 +01:00
Simon Ser
94901f1662
Request WHO info w/ empty message list in switchBuffer
2021-11-08 15:03:05 +01:00
Simon Ser
9475ffb8c6
Don't auto-join without prompting user
2021-11-08 13:01:54 +01:00
Simon Ser
f3c48a3748
Add "open" URL param
...
This can be set to an irc:// URL to open. This is useful for
bouncers.
2021-11-08 12:33:02 +01:00
Simon Ser
14031c594b
Ask confirmation before JOIN on irc:// link click
2021-11-08 10:44:10 +01:00
Simon Ser
74fe6ee944
Auto-join when adding new network on irc:// link click
...
Closes: https://todo.sr.ht/~emersion/gamja/111
2021-11-07 19:47:49 +01:00
Simon Ser
a58befd6d7
s/var/let/
2021-11-07 13:51:39 +01:00
Simon Ser
38a3075a2c
Disconnect previous server on connect re-submit
2021-11-07 13:50:26 +01:00
Simon Ser
96dd8476ad
De-duplicate nicks in folded JOIN/PART/QUIT lines
2021-11-05 15:00:08 +01:00
Simon Ser
800f5ceb6a
Keep track of channel join status
...
This makes us behave better when we receive a self-PART message
from the server.
2021-11-05 11:49:56 +01:00
Simon Ser
7b19cf48a4
Add Parcel to dev dependencies
...
Closes: https://todo.sr.ht/~emersion/gamja/119
2021-11-04 12:21:21 +01:00
Simon Ser
50f10a43dd
components/buffer: show MODE target if different from buffer name
...
This happens for user modes, for instance.
2021-11-03 21:58:26 +01:00
Simon Ser
eb66045371
lib/client: use Client.isMyNick to handle self-NICK messages
...
This handles case-mapping.
2021-11-03 21:50:33 +01:00
Simon Ser
a1ab87c71c
Route self-NICK messages to server buffer
2021-11-03 21:49:53 +01:00
Simon Ser
8ebb61cb0e
Route user MODE messages to server buffer
2021-11-03 21:44:24 +01:00
Simon Ser
8f90613951
components/buffer-header: add help text for user details
...
This makes it easier for users new to IRC to figure out what these
things mean. Additionally, it's not possible for a malicious user
to spoof the <abbr> style.
2021-11-03 17:23:32 +01:00
Simon Ser
0888af4a6f
Request more messages for event-playback infinite scrolling
...
When the server supports draft/event-playback, some messages (like
join/part/etc) may be collapsed together. Request more messages to
avoid ending up with a half-filled page.
2021-11-03 16:31:12 +01:00
Simon Ser
08cd94d775
lib/irc: add "fullname" to isMeaningfulRealname
2021-11-02 18:12:18 +01:00
Simon Ser
eec4126562
components/buffer-header: mark unauthenticated users as such
2021-11-02 18:04:53 +01:00
Simon Ser
6acf6d544a
components/buffer-header: skip account name if it matches nick
2021-11-02 18:01:07 +01:00
Simon Ser
ac7785aa7f
lib/client: fix missing account in WHOX
2021-11-02 17:58:00 +01:00
Simon Ser
85e73d0ee8
Add RPL_WELCOME to server buffer
2021-11-02 15:27:24 +01:00
Simon Ser
483f0c65b1
Add hint in server operators buffer header
2021-11-01 18:45:16 +01:00
Simon Ser
33c3cf3278
Remove unnecessary irc.formatDate call
2021-10-29 16:34:50 +02:00
Simon Ser
40210f8b00
Upgrade http-server
2021-10-29 16:25:58 +02:00
Simon Ser
a1057092e0
state: move in QUIT and NICK update logic
2021-10-23 23:24:11 +02:00
Simon Ser
bf471abb1b
Add App.routeMessage
...
This splits handleMessage into two functions: one decides in which
buffers the message should be appended to, the other performs
message side-effects like auto-join.
2021-10-23 23:01:32 +02:00
Simon Ser
c4a1f38b33
state: process RPL_NAMREPLY atomically
...
This allows updating the buf.members map only once when receiving
RPL_ENDOFNAMES, instead of repeatedly re-creating it each time a
RPL_NAMREPLY message is received.
2021-10-23 20:05:07 +02:00
Simon Ser
92043ded2c
lib/client: generalize pendingWHOIS, store list in ENDOF* messages
...
This allows processing a list of replies atomically and receiving
the ENDOF* marker.
2021-10-23 20:03:57 +02:00
Simon Ser
b059e034e2
lib/client: rename whoisDB to pendingWHOIS, garbage collect
2021-10-23 19:48:04 +02:00
Simon Ser
49a59077b7
lib/irc: extend parseURL to support flags and skip auth + options
2021-10-20 14:33:16 +02:00
Simon Ser
a313363ed7
gitignore: add Parcel files
2021-10-20 10:55:49 +02:00
Simon Ser
ab2f8092a8
Add minimal Parcel integration
...
Closes: https://todo.sr.ht/~emersion/gamja/107
2021-10-19 00:50:02 +02:00
Simon Ser
4309cf44d3
Avoid using export * as namespace
...
This isn't supported by Safari.
2021-10-18 23:59:18 +02:00
Simon Ser
2d032259db
Pretty-print RPL_LOGGEDIN and RPL_LOGGEDOUT
2021-10-18 22:11:14 +02:00
Simon Ser
3d09c43a91
Don't add RPL_YOURHOST to server buffer
2021-10-18 22:08:21 +02:00
Simon Ser
e7054eab13
Don't add RPL_SASLSUCCESS to server buffer
2021-10-18 22:05:25 +02:00
Simon Ser
d9f36c82ba
Allow bouncers to set NETWORK in ISUPPORT
...
This allows bouncers to customize the name they appear with.
2021-10-18 19:51:30 +02:00
Simon Ser
12440691c9
Unescape ISUPPORT values
...
This allows ISUPPORT values to contain spaces.
References: https://github.com/ircdocs/modern-irc/pull/137
2021-10-18 13:29:11 +02:00
Simon Ser
34aea84dde
Close buffer tabs on middle click
2021-10-17 19:33:02 +02:00
Simon Ser
a31976586c
Fallback to bouncer network host if name is unset
2021-10-15 18:23:56 +02:00
Simon Ser
8bdde589bb
lib/irc: "unknown" is not a meaningful realname
2021-10-15 17:44:33 +02:00
Simon Ser
bfef13824e
Use ISUPPORT NETWORK if user hasn't specified custom name
2021-10-15 14:05:39 +02:00
Simon Ser
1a8d539c9e
Use linkifyjs module
2021-10-14 20:55:55 +02:00
Simon Ser
a120d79585
Handle IRC URLs without channel name
2021-10-13 16:47:01 +02:00
Simon Ser
3562478946
Open dialog to create new network on IRC URL click
...
If we're running under a bouncer and the user clicks a link with
a server we aren't connected to yet, open the dialog to add a new
network.
References: https://todo.sr.ht/~emersion/gamja/71
2021-10-13 16:40:34 +02:00
Simon Ser
405bc51c26
Handle click on irc:// channel URLs inside buffers
...
References: https://todo.sr.ht/~emersion/gamja/71
2021-10-13 16:18:59 +02:00
Simon Ser
631f119061
Switch from anchorme to linkifyjs
2021-10-13 15:33:41 +02:00
Simon Ser
a7d3a3940a
readme: mention server.ping when server doesn't send PINGs
...
For instance, soju doesn't send PINGs.
2021-10-12 20:18:29 +02:00