From c85fccb894b0a42888df1f69bbabfbe8791c49b8 Mon Sep 17 00:00:00 2001 From: ibruno Date: Sat, 21 Feb 2026 10:21:46 -0300 Subject: [PATCH 1/2] fix(scaffold-ui): auto-trigger SIWX sign on auth view open --- .../views/w3m-siwx-sign-message-view/index.ts | 17 +++++ .../views/w3m-siwx-sign-message-view.test.ts | 74 +++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 packages/scaffold-ui/test/views/w3m-siwx-sign-message-view.test.ts diff --git a/packages/scaffold-ui/src/views/w3m-siwx-sign-message-view/index.ts b/packages/scaffold-ui/src/views/w3m-siwx-sign-message-view/index.ts index 6914a4b4bb..d15a640f1c 100644 --- a/packages/scaffold-ui/src/views/w3m-siwx-sign-message-view/index.ts +++ b/packages/scaffold-ui/src/views/w3m-siwx-sign-message-view/index.ts @@ -23,6 +23,19 @@ export class W3mSIWXSignMessageView extends LitElement { @state() private isSigning = false + private hasAutoSignTriggered = false + + public override connectedCallback() { + super.connectedCallback() + + if (this.hasAutoSignTriggered) { + return + } + + this.hasAutoSignTriggered = true + queueMicrotask(() => void this.onSign()) + } + // -- Render -------------------------------------------- // public override render() { return html` @@ -69,6 +82,10 @@ export class W3mSIWXSignMessageView extends LitElement { // -- Private ------------------------------------------- // private async onSign() { + if (this.isSigning) { + return + } + this.isSigning = true try { await SIWXUtil.requestSignMessage() diff --git a/packages/scaffold-ui/test/views/w3m-siwx-sign-message-view.test.ts b/packages/scaffold-ui/test/views/w3m-siwx-sign-message-view.test.ts new file mode 100644 index 0000000000..8e0b93d800 --- /dev/null +++ b/packages/scaffold-ui/test/views/w3m-siwx-sign-message-view.test.ts @@ -0,0 +1,74 @@ +import { fixture } from '@open-wc/testing' +import { beforeEach, describe, expect, it, vi } from 'vitest' + +import { html } from 'lit' + +import { RouterController, SIWXUtil, SnackController } from '@reown/appkit-controllers' + +import { W3mSIWXSignMessageView } from '../../src/views/w3m-siwx-sign-message-view/index' + +async function flushMicrotasks() { + await new Promise(resolve => setTimeout(resolve, 0)) +} + +describe('W3mSIWXSignMessageView', () => { + beforeEach(() => { + vi.restoreAllMocks() + Object.defineProperty(HTMLElement.prototype, 'animate', { + configurable: true, + writable: true, + value: vi.fn(() => ({}) as Animation) + }) + }) + + it('should request signature automatically when mounted', async () => { + const requestSignMessageSpy = vi + .spyOn(SIWXUtil, 'requestSignMessage') + .mockResolvedValue(undefined) + + await fixture( + html`` + ) + await flushMicrotasks() + + expect(requestSignMessageSpy).toHaveBeenCalledTimes(1) + }) + + it('should not request signature twice while signing is already in progress', async () => { + let resolveRequest!: () => void + const pendingRequest = new Promise(resolve => { + resolveRequest = resolve + }) + const requestSignMessageSpy = vi + .spyOn(SIWXUtil, 'requestSignMessage') + .mockReturnValue(pendingRequest) + + const element = await fixture( + html`` + ) + await flushMicrotasks() + + await (element as any).onSign() + + resolveRequest() + await flushMicrotasks() + + expect(requestSignMessageSpy).toHaveBeenCalledTimes(1) + }) + + it('should route to DataCapture when OTP is required', async () => { + vi.spyOn(SIWXUtil, 'requestSignMessage').mockRejectedValue(new Error('OTP is required')) + const showErrorSpy = vi.spyOn(SnackController, 'showError').mockImplementation(() => {}) + const routerReplaceSpy = vi.spyOn(RouterController, 'replace').mockImplementation(() => {}) + + await fixture( + html`` + ) + await flushMicrotasks() + + expect(showErrorSpy).toHaveBeenCalledWith({ + message: 'Something went wrong. We need to verify your account again.' + }) + expect(routerReplaceSpy).toHaveBeenCalledWith('DataCapture') + }) +}) From bdf154a311caf940ad782048f9ad4e5e1a404366 Mon Sep 17 00:00:00 2001 From: ibruno Date: Sat, 21 Feb 2026 10:22:10 -0300 Subject: [PATCH 2/2] chore: add changeset for SIWX auto-sign view behavior --- .changeset/slow-lamps-heal.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/slow-lamps-heal.md diff --git a/.changeset/slow-lamps-heal.md b/.changeset/slow-lamps-heal.md new file mode 100644 index 0000000000..bc0709d5ae --- /dev/null +++ b/.changeset/slow-lamps-heal.md @@ -0,0 +1,5 @@ +--- +'@reown/appkit-scaffold-ui': patch +--- + +Auto-trigger the SIWX sign message request when the SIWX sign view opens, so users do not need to click the extra Sign button.