Skip to content

feat: add access capabilities for logging in#4

Merged
alanshaw merged 6 commits into
mainfrom
ash/feat/login-access-caps
May 11, 2026
Merged

feat: add access capabilities for logging in#4
alanshaw merged 6 commits into
mainfrom
ash/feat/login-access-caps

Conversation

@alanshaw
Copy link
Copy Markdown
Member

@alanshaw alanshaw commented May 6, 2026

This PR adds capabilities to enable login to the Forge network via email. Also stashing/claiming delegations to spaces.

Differences from UCAN 0.9:

  • Renamed access/authorize to /access/request. This was the desired name originally but a previous iteration of the service already took access/request so we had to choose something different.
  • /access/request return value now includes a promise value - the confirmation task CID. In UCAN 0.9 effects are communicated outside of the arguments so this is only seen in the implementation for access/authorize not the capability definition.
  • /access/claim and /access/confirm return a list of CIDs of delegations instead of a map of bytes. These capabilities were originally created before we had the ability to return other blocks in the response in addition to the receipt block, so it necessitated encoding the delegation directly in the receipt. Now the delegations can be sent in the response container.

@alanshaw alanshaw requested a review from Peeja May 6, 2026 11:02
Adds a function that gets attestations for a given set of proofs for an
invocation.

i.e. you call `ProofChain(..)` and then pass the proofs you recieve to
`ProofAttestations(...)` to get any needed attestations.

I have also refactored the interfaces for dependencies to proof chain -
they are now function types and not interfaces (which should actually be
a bit easier to pass in) and have also been renamed. What was a "finder"
is now a "lister", but "matcher" stays the same. The reason is that
"finder" and "matcher" are a bit too similar (and actually have the same
signature for their functions), "finder" (now "lister") gets delegations
with the EXACT parameters, whereas "matcher" gets delegations that
_match_ the parameters. e.g. subject could be an exact match or it could
be `nil` (for a powerline delegation) and command could be an exact
match on `/msg/send` or it could be `/msg` or `/`.

Cherry picks from #2 and adds
the remaining missing capabilities.

Also, (sorry!) removes the `CborTime` type. This is unnecessarily
accurate (to nanoseconds) and was being used to specify expiry time of a
UCAN, which has a resolution of seconds, so was unnecessary.

Moves error definitions from Sprue to the library so that they can be
used in clients to disambiguate invocation errors.

Upgrades `dag-json-gen` dependency and re-generates `dag-json`
serializers/deserializers. Error messages are a lot more informative,
and avoid linter complains about capitalization.

Ports `jobqueue` and `bytemap` from `storacha/go-libstoracha`.

---------

Co-authored-by: Petra Jaros <peeja@peeja.com>
@alanshaw alanshaw merged commit 705fd41 into main May 11, 2026
@alanshaw alanshaw deleted the ash/feat/login-access-caps branch May 11, 2026 20:32
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.

2 participants