Skip to content
This repository has been archived by the owner on Feb 7, 2024. It is now read-only.

feat: pubsub http rpc with multibase #255

Merged
merged 5 commits into from
Nov 29, 2021
Merged

Conversation

lidel
Copy link
Member

@lidel lidel commented Oct 12, 2021

This updates HTTP RPC wire format to one from ipfs/kubo#8183

BREAKING CHANGES

  • peerid uses default text representation from go-libp2p
  • byte fields sent over HTTP RPC are now encoded in multibase

TODO

lidel added a commit to coryschwartz/go-ipfs that referenced this pull request Oct 12, 2021
Testing against compatible version from
ipfs/go-ipfs-api#255
@lidel lidel force-pushed the feat/pubsub-require-multibase branch from 7ddcab4 to d69d417 Compare October 15, 2021 12:42
This updates HTTP RPC wire format to one from
ipfs/kubo#8183
@lidel lidel force-pushed the feat/pubsub-require-multibase branch from d69d417 to 1fe33a5 Compare October 15, 2021 12:52
lidel added a commit to coryschwartz/go-ipfs that referenced this pull request Oct 25, 2021
Testing against compatible version from
ipfs/go-ipfs-api#255
@lidel lidel marked this pull request as ready for review October 25, 2021 21:21
@lidel lidel added this to In Review in Go IPFS Roadmap via automation Oct 25, 2021
@lidel lidel force-pushed the feat/pubsub-require-multibase branch from 65993f9 to b0d57ff Compare November 16, 2021 21:14
@lidel lidel force-pushed the feat/pubsub-require-multibase branch from b0d57ff to a876a85 Compare November 16, 2021 21:20
Copy link
Member Author

@lidel lidel left a comment

Choose a reason for hiding this comment

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

👍

@lidel lidel merged commit 55db949 into master Nov 29, 2021
Go IPFS Roadmap automation moved this from In Review to Done Nov 29, 2021
lidel added a commit to ipfs/kubo that referenced this pull request Nov 29, 2021
* multibase encoding on pubsub
* emit multibase for json clients
* refactor(pubsub): base64url for all URL args

This makes it easier to reason about.
Also added better helptext to each command explaining how the binary
data is encoded on the wire, and how to process it in userland.

* refactor: remove ndpayload and lenpayload

Those output formats are undocumented and seem to be only used in tests.
This change removes their implementation and replaces it with error
message to use JSON instead.

I also refactored tests to test the --enc=json response format instead
of imaginary one, making tests more useful as they also act as
regression tests for HTTP RPC.

* test(pubsub): go-ipfs-api

Testing against compatible version from
ipfs/go-ipfs-api#255

* refactor: safeTextListEncoder

Making it clear what it does and why

* refactor(pubsub): unify peerids

This ensures `ipfs pubsub sub` returns the same peerids in the `From`
field as `ipfs pubsub peers`.

libp2p already uses base encoding, no need to double wrap or use custom
multibase.

* test(pubsub): go-ipfs-http-client

* refactor(pubsub): make pub command read from a file

We want to send payload in the body as multipart so users can use
existing tools like curl for publishing arbitrary bytes to a topic.

StringArg was created for "one message per line" use case, and if data
has `\n` or `\r\n` byte sequences, it will cause payload to be split. It
is not possible to undo this, because mentioned sequences are lost, so
we are not able to tell if it was `\n` or `\r\n`

We already avoid this problem in `block put` and `dht put` by reading
payload via FileArg which does not mangle binary data and send it as-is.
It feel like `pubsub pub` should be using it in the first place anyway,
so this commit replaces StringArg with FileArg.

This also closes #8454
and makes rpc in go-ipfs easier to code against.

* test(pubsub): publishing with line breaks

Making sure we don't see regressions in the future.
Ref. #7939

* chore: disable pubsub interop for now

See
ipfs/interop@344f692

* test: t0322-pubsub-http-rpc.sh

- Adds HTTP RPC regression test that ensures topic is encoded as URL-safe
  multibase.
- Moves pubsub tests to live in unique range ./t032x

* fix(ci):  js-ipfs with  fixed pubsub wire format

uses js-ipfs from ipfs/js-ipfs#3922 
until js-ipfs release can ship with dependency on go-ipfs 0.11.0-rc1

Co-authored-by: Marcin Rataj <lidel@lidel.org>
Co-authored-by: Adin Schmahmann <adin.schmahmann@gmail.com>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
No open projects
Archived in project
Development

Successfully merging this pull request may close these issues.

None yet

2 participants