Skip to content

[pull] main from dfinity:main#548

Merged
pull[bot] merged 1 commit intomikeyhodl:mainfrom
dfinity:main
Apr 22, 2026
Merged

[pull] main from dfinity:main#548
pull[bot] merged 1 commit intomikeyhodl:mainfrom
dfinity:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Apr 22, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

…architecture (#3777)

The authorize flow previously had request handling intertwined with UI
components — handlers would trigger UI changes directly, and UI
components would drive handler logic. This made the flow hard to follow
and brittle to change.

This PR introduces a clean separation: **handlers ← stores → UI**.
Channel handlers write to stores and observe stores (via
`waitForStore`). The UI reads stores to decide what to render, and
writes to stores when the user takes action. Neither side knows about
the other.

# Changes

- **Extract channel handlers into dedicated files.**
`channelHandlers/icrc25.ts` (standards, permissions),
`channelHandlers/delegation.ts` (ICRC-34), and
`channelHandlers/attributes.ts` (legacy + ICRC-3 attributes) — each
self-contained with their own imports.
- **Split authorization store into context and outcome.**
`authorizationStore` holds the request context (`effectiveOrigin`),
`authorizedStore` holds the outcome (`accountNumber`). Handlers
`waitForStore(authorizedStore)` instead of polling a combined state.
- **Add `waitForStore` utility.** Generic helper that resolves when a
Svelte store value satisfies a condition — eliminates repeated
subscribe/unsubscribe boilerplate across handlers.
- **Gate attribute handlers on dapp opt-in.** Attributes are only served
to known dapps with `certifiedAttributes: true`, or in dev environments
(`fetch_root_key`). Unknown origins get an error response.
- **Channel error component.** Extracted `ChannelError.svelte` with
per-error-type messages, shared across channel, pending-channel, and
resuming-channel layouts.
- **Fix pending/resuming channel layout guards.** Pending-channel now
renders errors. Resuming-channel waits for channel establishment before
rendering children, shows errors when appropriate.
- **Remove `AuthorizationChannel.svelte`.** Layouts call
`channelStore.establish()` directly and gate rendering on store state.

---

<div align="left">← Previous: #3791</div>
<div align="right">Next: #3781 →</div>
@pull pull Bot locked and limited conversation to collaborators Apr 22, 2026
@pull pull Bot added the ⤵️ pull label Apr 22, 2026
@pull pull Bot merged commit 1d29c55 into mikeyhodl:main Apr 22, 2026
1 check was pending
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant