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
4309cf44d3
Avoid using export * as namespace
...
This isn't supported by Safari.
2021-10-18 23:59:18 +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
8bdde589bb
lib/irc: "unknown" is not a meaningful realname
2021-10-15 17:44:33 +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
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
21a4a71542
Add support for SASL EXTERNAL
...
Can be useful when the server is using e.g. a cookie for
authentication purposes.
2021-10-12 17:29:56 +02:00
Simon Ser
8cc61bf577
lib/client: handle MONITOR without value in ISUPPORT
2021-10-07 21:49:54 +02:00
Simon Ser
4577f0a27f
components/buffer: pretty-print RPL_CHANNELMODEIS and RPL_CREATIONTIME
2021-10-06 12:12:49 +02:00
Simon Ser
19ee5553f6
components/buffer: add RPL_UMODEIS pretty-printing
2021-10-05 11:22:20 +02:00
Simon Ser
184b29b6e3
Hide meaningless real names
2021-09-21 17:24:39 +02:00
Simon Ser
329f9063d0
Add support for WHOX
...
This allows querying the account of the user.
2021-09-21 16:58:00 +02:00
Simon Ser
d12e1109b3
Add support for account-notify
2021-09-21 14:49:32 +02:00
Simon Ser
11878aaaa9
Add support for extended-join
2021-09-21 14:29:31 +02:00
Simon Ser
0b0467f019
lib/irc: drop CRLF for outgoing messages
...
Trailing CRLF must not be included in WebSocket messages.
Closes: https://todo.sr.ht/~emersion/gamja/104
2021-09-18 12:16:54 +02:00
Hubert Hirtz
f78cb8c23b
Fix double space introduced before last param
2021-09-17 14:07:58 +02:00
Simon Ser
f17d61ed86
lib/irc: fix formatMessage when last arg starts with colon
...
Fixes: a51be5037d
("lib/irc: only add colon to trailing arg when necessary")
2021-09-08 10:42:36 +02:00
Simon Ser
76f097e8a8
lib/client: error out on unsupported WebSocket data type
2021-09-06 17:15:52 +02:00
Simon Ser
beef13d273
lib/client: remove WebSocket error event handler
...
The error event handler is useless, because the error event is never
emitted without a close event, and doesn't give any details about
the error.
2021-09-06 17:11:28 +02:00
Simon Ser
0137a95268
Add support for chghost
...
See https://ircv3.net/specs/extensions/chghost
2021-09-06 11:20:33 +02:00
Simon Ser
a51be5037d
lib/irc: only add colon to trailing arg when necessary
...
This mirrors go-irc's behavior:
7ba1a1858f/parser.go (L374)
Closes: https://todo.sr.ht/~emersion/gamja/103
2021-09-06 10:52:06 +02:00
Simon Ser
c65ecd66eb
Avoid sending empty MONITOR command on startup
...
Closes: https://todo.sr.ht/~emersion/gamja/102
2021-08-30 10:14:05 +02:00
Simon Ser
e283d9c7ab
Add support for MONITOR
2021-08-24 12:53:46 +02:00
Simon Ser
51883292f9
lib/client: fix caps with equal sign in value
...
CAP=a=b wouldn't parse correctly.
2021-07-04 22:26:31 +02:00
Simon Ser
429450e060
Handle RPL_INVITING
2021-06-24 18:01:24 +02:00
Simon Ser
bc05fd5c11
Treat server broadcasts as highlights
2021-06-23 19:52:45 +02:00
Simon Ser
c187eac3c8
lib/client: reject Client.roundtrip promise on disconnect
2021-06-21 00:18:17 +02:00
delthas
42e0c939f3
lib/linkify: stop using RegExp indices
...
Co-authored-by: Simon Ser <contact@emersion.fr>
Closes: https://todo.sr.ht/~emersion/gamja/90
2021-06-20 12:54:20 +02:00
Simon Ser
0b3f5ef88b
Add irc.forEachChannelModeUpdate helper
2021-06-11 12:54:42 +02:00
Simon Ser
02ba4be438
Don't try to reconnect if the network is down
2021-06-11 09:36:11 +02:00
Simon Ser
4249da4ba8
Add /quiet and /unquiet
2021-06-11 00:27:19 +02:00
Simon Ser
8972130252
s/var/let/
2021-06-10 18:11:11 +02:00
Simon Ser
a952742d86
Make Client.roundtripChatHistory return an array of messages
2021-06-10 12:47:28 +02:00
Simon Ser
5b0bb43a24
Make Client.fetchBatch more reliable
2021-06-10 12:43:09 +02:00
Simon Ser
ba92b3f677
lib/client: fix batch cleanup
2021-06-10 12:10:08 +02:00
Simon Ser
dd8eca1cfe
Switch to server buffer on server name click
...
Closes: https://todo.sr.ht/~emersion/gamja/68
2021-06-10 12:03:50 +02:00
Simon Ser
d2e41666ad
lib/client: set a default server prefix
...
Set the default server prefix to "*". This allows the rest of the
code to assume all messages always have a prefix.
2021-06-10 11:53:53 +02:00
Simon Ser
41354d3035
lib/client: gracefully handle null in isMyNick/isChannel
2021-06-10 08:51:59 +02:00
Simon Ser
0705f4b182
lib/client: always populate prefix for incoming messages
2021-06-10 08:49:17 +02:00
Simon Ser
52ca3bb91c
lib/linkify: add comma to punctuation in channel regex
2021-06-09 16:28:07 +02:00
Simon Ser
a9c1abb064
Route channel mode and invite/except list to channel buffer
2021-06-07 14:13:00 +02:00
Simon Ser
a419e660c0
Don't match punctuation suffix when linkifying channels
2021-06-06 16:00:37 +02:00
Simon Ser
403d7ec7f7
Add case-mapping support to irc.isHighlight
...
Closes: https://todo.sr.ht/~emersion/gamja/77
2021-06-06 15:52:58 +02:00
Simon Ser
0dfb7623db
Add support for labeled-response
...
It's just used to avoid mixing up messages coming from the server
so far.
2021-06-04 20:38:01 +02:00
Simon Ser
34078d5da7
Add support for draft/event-playback
2021-06-04 19:45:51 +02:00
Simon Ser
651e255ddb
Use ISUPPORT CHANTYPES in Client.isChannel
2021-06-04 19:17:39 +02:00
Simon Ser
2c1bb4ce6a
Introduce State.handleMessage
...
Takes an IRC message, updates the state.
Doesn't yet handle all messages, this will be a step-by-step process.
2021-06-04 18:27:21 +02:00
Simon Ser
6e20ad872e
Add support for STATUSMSG
...
Closes: https://todo.sr.ht/~emersion/gamja/65
2021-06-03 13:31:43 +02:00
Simon Ser
283f8af4b1
lib/irc: rename IRC prefix utilities
2021-06-03 13:18:28 +02:00
Simon Ser
63a71e5f5d
Add support for incoming INVITE messages
2021-06-03 11:04:32 +02:00
Simon Ser
a4294975a2
Add support for /ban without argument
2021-06-03 10:19:09 +02:00
Simon Ser
91208a6d47
Add support for CHATHISTORY TARGETS
...
The main motivation is to avoid missing direct messages coming from
other users.
A nice side-effect is that we no longer need to issue CHATHISTORY
queries for each channel we JOIN: instead, we can only fetch
history for targets known to have new messages available (as indicated
by CHATHISTORY TARGETS).
We use read receipts instead of delivery receipts, so that reloading
the webapp restores the exact same state (ie, unread messages are
re-fetched).
References: https://github.com/ircv3/ircv3-specifications/pull/450
2021-06-02 20:37:20 +02:00
Simon Ser
74d9dea5bb
Use RegExp match indices in linkifyChannel
2021-06-01 09:53:11 +02:00
Tom Lebreux
0bcd044f10
Linkify channel names
2021-06-01 09:37:35 +02:00
Simon Ser
06ca812d06
Simplify Client.roundtrip callback arg
2021-05-31 17:14:46 +02:00
Simon Ser
619f1db08f
Introduce Client.who
2021-05-31 17:11:42 +02:00
Simon Ser
02145b45ad
Remove unused arg from Client.whois
2021-05-31 17:04:52 +02:00
Drew DeVault
be1ecf607d
Display prefixes in member list
...
Closes: https://todo.sr.ht/~emersion/gamja/43
2021-05-31 15:56:08 +02:00
Simon Ser
e080e87cb7
Pretty-print MOTD
2021-05-28 10:50:42 +02:00
Simon Ser
5a3edf4769
Fix WHOIS DB not using case-mapping fallback
...
In case the server advertises an unsupported case-mapping, we have
a fallback.
2021-05-28 09:59:51 +02:00
Simon Ser
7b762b3e8a
Unregister PING timer when destroying client
2021-05-28 09:58:06 +02:00
Simon Ser
24fe62f1de
Ensure msg.prefix is always populated
2021-05-28 09:49:21 +02:00
Simon Ser
e9d90d4927
Fix TypeError in isHighlight
...
TypeError: msg.prefix is null
2021-05-28 09:49:21 +02:00
Simon Ser
fc9dfa2dca
Implement case-mapping for buffers and message handler
2021-05-27 23:40:08 +02:00
Drew DeVault
121d7ec075
Add /whois command
...
This also rigs up some helpers in Client for handling the whois
response, which I will use for /ban and /quiet and such shortly.
2021-05-27 23:15:53 +02:00
Simon Ser
615e746ec5
lib/client: add Client.cm
...
This contains the current connection case-mapping, parsed from the
CASEMAPPING ISUPPORT token.
2021-05-27 15:14:03 +02:00
Simon Ser
3110a9e2df
lib/irc: add case-mapping primitives
...
irc.CaseMapping contains the basic canonicalization functions for
the three supported case-mappings. irc.CaseMapMap is a Map-like
class that supports case-mapped keys.
2021-05-27 15:13:32 +02:00
Simon Ser
1d983bd142
Downgrade IRC network logging to debug level
2021-05-27 10:39:24 +02:00
Simon Ser
12a38ace90
Add support for IRCv3 setname
2021-05-25 20:22:21 +02:00
Simon Ser
9dba1b3736
Add vendor prefix to bouncer-networks BATCH type
2021-05-25 17:03:29 +02:00
Simon Ser
6524dc5dd2
Add support for the soju.im/bouncer-networks-notify cap
2021-05-25 17:01:20 +02:00
Simon Ser
5165df718f
Disconnect on BOUNCER BIND error
2021-05-25 16:59:59 +02:00
Simon Ser
b429243573
Add support for the soju.im/bouncer-networks extension
2021-05-25 16:58:50 +02:00
Simon Ser
f122e44e9b
Use ISUPPORT CHATHISTORY to discover max page size
2021-05-11 16:10:50 +02:00
Simon Ser
305ffb569c
Parse ISUPPORT tokens in client
2021-05-11 16:03:16 +02:00
Simon Ser
8ab10cf2a5
lib/irc: escape/unescape everything in tags
...
Without the greedy flag on the regexp, String.replace will just
replace the first match.
While at it, also make sure to convert to a string when formatting
tag values. This allows tag values to be e.g. numbers.
2021-03-09 17:40:57 +01:00
Simon Ser
2d4409e7aa
lib/irc: accept tags without value
2021-03-09 17:31:12 +01:00
Simon Ser
5fea13df0a
Trigger client error if server doesn't support SASL
2021-03-09 09:44:48 +01:00
Simon Ser
194168c062
Display server messages in server buffer
...
References: https://todo.sr.ht/~emersion/gamja/21
2021-03-08 14:27:05 +01:00
Simon Ser
6430fa252a
lib/client: log close code
2021-03-03 18:30:15 +01:00
Simon Ser
aa79067179
lib/client: extract fetchBatch function from roundtripChatHistory
2021-03-03 14:13:05 +01:00
Simon Ser
3536331f94
lib/client: throw error in send if disconnected
2021-03-03 09:37:26 +01:00
Simon Ser
8a5fa4d5c2
lib/client: reset state when websocket is closed
2021-03-03 09:36:48 +01:00
Simon Ser
80e0175d36
Make all resource paths relative
...
Closes: https://todo.sr.ht/~emersion/gamja/17
2021-03-02 22:46:48 +01:00
Simon Ser
b0a3cd23e4
Fix inverted condition in fetchHistoryBefore
2021-01-23 12:23:30 +01:00
Simon Ser
4d540d55ac
Fix undefined CHATHISTORY_PAGE_SIZE
2021-01-23 12:19:40 +01:00
Simon Ser
1f640a4010
Log WebSocket constructor error in the console
2021-01-22 20:59:17 +01:00
Simon Ser
987f0b3389
Spread it like butter
2021-01-22 20:58:57 +01:00
Simon Ser
430373dd13
Move chat history operations into Client
2021-01-22 18:51:38 +01:00
Simon Ser
4e1f06b960
Move auto-reconnect logic into Client
2021-01-22 18:44:06 +01:00
Simon Ser
41cd2153cf
Keep track of client status in Client
2021-01-22 18:29:22 +01:00
Simon Ser
0261bc11e7
Delay Client error event
...
Right now the caller won't receive the event, because it's triggered
before the function returns.
2021-01-22 17:50:52 +01:00
Simon Ser
06eb639ee9
Convert caps to lower case
2021-01-22 12:27:32 +01:00
Simon Ser
51523f4014
Extract network name from ISUPPORT
2021-01-22 11:43:47 +01:00
Simon Ser
b3f8b0c97d
Add support for RPL_ISUPPORT
2021-01-22 11:34:04 +01:00
Simon Ser
0b03f9d767
Ignore RPL_TOPICWHOTIME
...
We don't need this piece of information yet, and we don't want to
clutter the server buffer with channel messages.
2020-09-03 11:36:08 +02:00
Simon Ser
516de5b3ea
Better handle registration errors
2020-08-25 11:42:40 +02:00