Skip to content

Experience Workspace#924

Open
hannessolo wants to merge 23 commits into
mainfrom
ew
Open

Experience Workspace#924
hannessolo wants to merge 23 commits into
mainfrom
ew

Conversation

@hannessolo
Copy link
Copy Markdown
Contributor

@hannessolo hannessolo commented May 7, 2026

@aem-code-sync
Copy link
Copy Markdown

aem-code-sync Bot commented May 7, 2026

Hello, I'm the AEM Code Sync Bot and I will run some actions to deploy your branch.
In case there are problems, just click the checkbox below to rerun the respective action.

  • Re-sync branch
Commits

@hannessolo hannessolo mentioned this pull request May 7, 2026
@hannessolo hannessolo marked this pull request as ready for review May 11, 2026 11:27
Port of da-nx ew fefb5f6e. Simplify scroll containment: host height
uses calc(100dvh - nav), list element scrolls directly (no wrapper div),
body overflow:hidden replaces absolute-positioned main grid.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@mhaack
Copy link
Copy Markdown
Contributor

mhaack commented May 19, 2026

Code review

Found 2 issues:

  1. No WebSocket auth-failure handler for 4401/4403 in canvas prose.js — the new WebsocketProvider is created with no connection-close listener. PRs Refresh stale IMS access token on collab WebSocket auth failures #937 and fix: block y-websocket auto-reconnect during async IMS refresh #943 landed exactly this fix in blocks/edit/prose/index.js: stop auto-reconnect (shouldConnect = false) and refresh the IMS token on a 4401 close code, bail entirely on 4403. Without it, an expired token during a canvas editing session will silently enter an infinite reconnect loop with no user feedback or recovery.

if (typeof getToken === 'function') {
const t = getToken();
if (t) wsOpts.params = { Authorization: `Bearer ${t}` };
}
const canWrite = permissions.some((permission) => permission === 'write');
const wsProvider = new WebsocketProvider(server, roomName, ydoc, wsOpts);
wsProvider.maxBackoffTime = 30000;
addSyncedListener(wsProvider, canWrite, setEditable);
registerErrorHandler(ydoc);

  1. IMS access token sent to extension iframes with targetOrigin = '*'iframe-protocol.js posts { ready: true, project, context: project, token } using '*' as the target origin. Any page that ends up loaded in that iframe position (including one navigated to a different origin) will receive the bearer token. The WYSIWYG iframe path in the same PR correctly derives the origin via new URL(iframe.src).origin and uses that instead.

if (!iframe.contentWindow) return;
iframe.contentWindow.postMessage(
{ ready: true, project, context: project, token },
'*',
[channel.port2],
);
}, 750);

🤖 Generated with Claude Code

- If this code review was useful, please react with 👍. Otherwise, react with 👎.

mhaack
mhaack previously approved these changes May 19, 2026
Copy link
Copy Markdown
Contributor

@mhaack mhaack left a comment

Choose a reason for hiding this comment

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

Next to the Claude review comment this LGTM, lets get the V1 in.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Isn't this something we can reuse from the todays editor?

@hannessolo
Copy link
Copy Markdown
Contributor Author

Re: claude review:

Issue 1 is fixed.

Issue 2 we won't fix here, as it's also an issue with the "old" editor's extension loading implementation.

@hannessolo hannessolo requested a review from mhaack May 19, 2026 13:12
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