This enables using [Cloudflare R2][0] as a storage provider.
Cloudflare R2 is an S3-compatible API with a generous free tier; it
looks like it may cost nothing for most Urbit ships’ usage patterns.
The only hitch is that R2’s endpoint is not able to be configured to
be publicly readable; in order to [make a bucket public][1], you must
either use an r2.dev URL, or set up your own custom URL. Caching and
such is only supported on your own URL, so it sounds like that’s the
case they’re encouraging people to target.
This change enables R2 support by adding a configuration option to
set a public URL base. If it is non-empty, it replaces the origin
for any S3 upload URLs. A ship may use either its r2.dev URL or a
custom URL at its discretion. As a nice side benefit, this also
allows wrapping S3 access over a custom domain that you control.
[0]: https://www.cloudflare.com/developer-platform/r2/
[1]: https://developers.cloudflare.com/r2/buckets/public-buckets/
* skip sponsor checks for galaxies (avoids a crash in /app/vitals/hoon)
* mark peers unknown to %ames as %dead (avoids a crash in /ax/peers/...)
* change thread input from @p to (unit @p) (allow calling from dojo)
And, crucially, re-establish subscriptions in the cases that got broken
by the poor %kick handling. These are cases where we think %chi
(subscription established), but there is no matching subscription to be
found in the bowl.
Fixes LAND-1407, or at least its common cause.
Avoids having to force all third party developers to push new globs
synchronously with this update. We simultaneously support unencoded and
encoded paths by only url encoded if the unencoded path does not exist
in the glob.
The upgrade from %0 to %1 was calling into +on-init, which issues a
scry. In some cases, that might not be able to complete successfully,
aborting the whole event that triggered the load.
Here, we move this "set flag based on settings" logic into a %default
poke command, and change the +on-load logic to set a timer that calls
that instead, defering the scry to the next event.
Previous logic for reading %settings-event facts was a little to eager
in declaring explicit non-consent. It would also set the flag to false
in cases where we received updates not matching what we were looking
for.
Now, it's not entirely certain that this was a problem, but we did
observe "disabled growl" on ships that had the setting toggle on the
frontend set to true, and this seemed like the only viable cause of
that.
We also update +on-load to re-set the flag from the current settings
value, to correct any lingering mismatching states.
We weren't accounting for the different wire used for this, causing us
to spill our spaghetti and redirect processing to +on-fail, which wasn't
very graceful.
Now, we can actually properly notify on failed thread runs.
Includes the bark/growl system for sharing activity summaries. The growl
agent respects the "activity logging" consent flag used by groups,
defaults to not sharing if that flag is not set, and only shares with
the "bark host" when prompted. (The bark host, in turn, currently only
stores responses for hosted ships.)
Also includes all the groups-side dependencies this has, which it needs
for the chats & groups types. Hard-including those files will save us
some run-around during deploy.
Co-authored-by: midsum-salrux <nathan@tlon.io>
- Adds a mutation to create a yarn from the frontend.
- Adds a new zustand state for tracking actions that could take a while (WatcherStore).
- Switches docket over to react-query (added a new scry endpoint as part of this).