Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial bouncer implementation draft spec #449

Closed
wants to merge 1 commit into from

Conversation

prawnsalad
Copy link
Contributor

A progression from ircv3/ircv3-ideas#39 to have this in spec form and clearer WIP history.

Added since the gist:

  • Clearer on what a "buffer" is. An implementation defined channel/query/active buffer/etc.
  • A note on how this spec optionally keeps multiple connected clients in sync
  • Clearer explanation on what the CAP can be used for.

Next thoughts:

  • As per Standardise client-bouncer interactions ircv3-ideas#39 (comment), some sort of idle/active/inactive client state to aid the server in its notification logic. This spec does mention an optional notification level setting for buffers so including this makes sense.
  • Could the name "BOUNCER" for this spec be loading too much towards a traditional IRC bouncer? As with Oragano the lines get muddled between ircd/bouncer so perhaps a better term could be used.

@slingamn
Copy link
Contributor

slingamn commented Mar 8, 2021

Could the name "BOUNCER" for this spec be loading too much towards a traditional IRC bouncer? As with Oragano the lines get muddled between ircd/bouncer so perhaps a better term could be used.

As I understand this spec, it is in fact for conventional bouncers, and therefore Oragono won't implement it. Specifically, in Oragono there's no concept of active buffers that can be added or removed, or of multiple networks. (See #444 for a case where the "buffer" concept has to be adjusted to fit the Oragono setting.)

So, if my understanding is accurate, I have no objection to this spec using the term "BOUNCER". My concern is more that we carefully factor out whatever is shared between the two models. (It sounds like this spec defers all history retrieval to draft/chathistory, which seems good. There may be some overlap between BOUNCER listbuffers and #444?)

@emersion
Copy link
Contributor

emersion commented Mar 8, 2021

pounce said they won't be implementing this spec, because pounce doesn't expose multiple networks this way and manages buffers differently.

This PR is missing a lot of improvements from https://git.sr.ht/~emersion/soju/tree/master/item/doc/ext/bouncer-networks.md (standard replies, batches, more idiomatic names/style, etc).



### Connecting a network
Syntax: `[c] BOUNCER connect <netid>`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should just be a enabled network attribute.


This feature is intended to provide an API for clients to build a UI around bouncer IRC servers, to manage the users IRC networks and buffers in a user friendly way and to keep multiple clients and devices synced together.

It is based around network and buffer entities which both have key/value tags, such as `joined=true` for a buffer, with commands to manage these. A list of common tags can be found under the tags section of this document.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/tags/attributes/

As discussed previously, "tags" is confusing.


## Capabilities

This adds a capability called `BOUNCER`. Once negotiated the server may change it's behaviour to better suit bouncer clients, such as not automatically sending `JOIN` commands for already joined channels.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caps are lowercase. Additionally, this is missing the "work in progress" section about using the draft/-prefixed cap.


#### Network tags
Implementations MUST recognise the following:
- `network` - The human readable name for the network. It may be changed.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reads as "the network attribute of the network". Something like "name" would be better.

As a network state changes on the server such as connecting or disconnection, it MUST send the changes as they happen to any users connected clients.

* Connection state changes:
- `[s] BOUNCER state netid netname connecting`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't great IMHO, as it's only useful for network state. Would be better to allow the bouncer to notify updates of arbitrary network/buffer attribute changes.

Implementations MUST recognise the following:
- `network` - The name of the network this buffer belongs to.
- `buffer` - The name of this buffer.
- `seen` - The ISO 8601 timestamp of when the user last saw this buffer. Used to determine the point at which the user as read up to.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be out-of-scope for the bouncer extension. Servers not implementing this spec (soju, pounce, oragono) may be interested in this functionality.

~~~
[s] BOUNCER listnetworks netid network=freenode;host=irc.freenode.net;port=6667;state=disconnected;nick=bob;
[s] BOUNCER listnetworks netid network=IRC.com;host=irc.irc.com;port=6697;state=connected;tls=1;nick=bob;
[s] BOUNCER listnetworks RPL_OK
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems alien for a modern IRCv3 spec. A batch would be better.

### Listing networks
Syntax: `[c] BOUNCER listnetworks [*]`

This command MUST return all networks under the users bouncer account. The optional second parameter of `*` is a wildcard search string that filters the returned networks. It is matched against the `network` tag of each network.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the wildcard search string adds a lot of value here. What's the use-case? Do you expect the user to have a huge number of networks so that filtering can't be done client-side?

#### Buffer tags

Implementations MUST recognise the following:
- `network` - The name of the network this buffer belongs to.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be a stable netid, not a network name.

@awfulcooking
Copy link

Hi pals. I am excited about the potential this opens up. I see inter-network bouncers as a potential future for federation on IRC, where you might dial out from say Libera, and appear on other networks as *![email protected].

(Or *![email protected] if the network is feeling creative enough.)

I've been working on a proof-of-concept network, combining soju and InspIRCd in a way that obviates traditional services, and is designed for ad-hoc federation.

I don't have strong opinions about the specs, but I respect your efforts and thank you for them.

I hope that the differences can be resolved and agreed, so we all can benefit from a single target.

Ideally, I would be able to offer Kiwi and Gamja both as a frontend to my network.

And to that end I wish you both the best of luck and encouragement in finding something to both your satisfaction :-)

@jwheare
Copy link
Member

jwheare commented Nov 2, 2021

I don't think this will be progressed, given the OP has quit IRC dev and other interested parties want to take this in a different direction. So I'll close it, @emersion if you want to open a PR for your version, please do.

@jwheare jwheare closed this Nov 2, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants