From d5f5350aa26afcb08a537141f5a2c2e7603cfbf6 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Wed, 18 Mar 2026 21:11:18 +0200 Subject: [PATCH 1/5] chore(wallet): remove pay proxy, use API directly The Pay API now supports direct requests without a proxy. Made-with: Cursor --- .../src/pages/api/pay/[...path].ts | 79 ------------------- .../src/utils/WalletConnectUtil.ts | 22 +++--- 2 files changed, 11 insertions(+), 90 deletions(-) delete mode 100644 advanced/wallets/react-wallet-v2/src/pages/api/pay/[...path].ts diff --git a/advanced/wallets/react-wallet-v2/src/pages/api/pay/[...path].ts b/advanced/wallets/react-wallet-v2/src/pages/api/pay/[...path].ts deleted file mode 100644 index bfeb537e8..000000000 --- a/advanced/wallets/react-wallet-v2/src/pages/api/pay/[...path].ts +++ /dev/null @@ -1,79 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next' - -const PAY_API_BASE_URL = 'https://api.pay.walletconnect.com' -const PATH_SEGMENT_PATTERN = /^[a-zA-Z0-9._~:@!$&'()*+,;=-]+$/ - -function buildTargetUrl(pathSegments: string[], query: Record): URL | null { - for (const segment of pathSegments) { - if (!segment || segment === '.' || segment === '..' || !PATH_SEGMENT_PATTERN.test(segment)) { - return null - } - } - - const url = new URL(PAY_API_BASE_URL) - url.pathname = '/' + pathSegments.map(encodeURIComponent).join('/') - - for (const [key, value] of Object.entries(query)) { - if (key !== 'path' && typeof value === 'string') { - url.searchParams.append(key, value) - } - } - - return url -} - -export default async function handler(req: NextApiRequest, res: NextApiResponse): Promise { - if (req.method === 'OPTIONS') { - res.setHeader('Access-Control-Allow-Origin', '*') - res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS') - res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization') - res.status(200).end() - return - } - - try { - const pathSegments = req.query.path as string[] - const targetUrl = buildTargetUrl(pathSegments, req.query) - if (!targetUrl) { - res.status(400).json({ error: 'Invalid path' }) - return - } - - const apiKey = process.env.NEXT_PUBLIC_PAY_API_KEY - console.log(`[Pay Proxy] ${req.method} ${targetUrl.href} (API key: ${apiKey ? 'present' : 'MISSING'})`) - - const headers: Record = { - 'Content-Type': 'application/json', - } - - if (req.headers.authorization) { - headers['Authorization'] = req.headers.authorization as string - } - - if (apiKey) { - headers['Api-Key'] = apiKey - } - - const fetchOptions: RequestInit = { - method: req.method, - headers, - } - - if (req.method === 'POST' && req.body) { - fetchOptions.body = JSON.stringify(req.body) - } - - const response = await fetch(targetUrl, fetchOptions) - const data = await response.json() - - res.setHeader('Access-Control-Allow-Origin', '*') - res.status(response.status).json(data) - } catch (error: unknown) { - const message = error instanceof Error ? error.message : 'Unknown error' - console.error('[Pay Proxy] Error:', message) - res.status(500).json({ - error: 'Proxy error', - message - }) - } -} diff --git a/advanced/wallets/react-wallet-v2/src/utils/WalletConnectUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/WalletConnectUtil.ts index 682e163ed..13576fad2 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/WalletConnectUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/WalletConnectUtil.ts @@ -19,9 +19,7 @@ export async function createWalletKit(relayerRegionURL: string) { }) const apiKey = process.env.NEXT_PUBLIC_PAY_API_KEY - const baseUrl = typeof window !== 'undefined' - ? `${window.location.origin}/api/pay` - : 'https://api.pay.walletconnect.com' + const baseUrl = process.env.NEXT_PUBLIC_PAY_API_BASE_URL walletkit = await WalletKit.init({ core, @@ -34,15 +32,17 @@ export async function createWalletKit(relayerRegionURL: string) { signConfig: { disableRequestQueue: true }, - ...(apiKey ? { - payConfig: { - appId: process.env.NEXT_PUBLIC_PROJECT_ID, - apiKey, - baseUrl, - } - } : {}) + payConfig: { + appId: process.env.NEXT_PUBLIC_PROJECT_ID + } + }) + console.log('pay', { + payConfig: { + appId: process.env.NEXT_PUBLIC_PROJECT_ID, + apiKey, + ...(baseUrl ? { baseUrl } : {}) + } }) - try { const clientId = await walletkit.engine.signClient.core.crypto.getClientId() console.log('WalletConnect ClientID: ', clientId) From 03ab96247229608dd8dd536b45de6c9517c63d09 Mon Sep 17 00:00:00 2001 From: Gancho Radkov Date: Wed, 18 Mar 2026 21:19:10 +0200 Subject: [PATCH 2/5] chore(wallet): bump walletkit to 1.5.4 and @walletconnect/pay to 1.0.7 Update payConfig to always include appId and apiKey, add NEXT_PUBLIC_PAY_API_BASE_URL to env example, and apply formatting fixes. Made-with: Cursor --- .../react-wallet-v2/.env.local.example | 3 + .../wallets/react-wallet-v2/next-env.d.ts | 2 +- advanced/wallets/react-wallet-v2/package.json | 4 +- .../wallets/react-wallet-v2/pnpm-lock.yaml | 157 ++++++++++++++++-- .../PaymentModal/CollectDataIframe.tsx | 69 ++++---- .../src/utils/WalletConnectUtil.ts | 3 +- 6 files changed, 182 insertions(+), 56 deletions(-) diff --git a/advanced/wallets/react-wallet-v2/.env.local.example b/advanced/wallets/react-wallet-v2/.env.local.example index d4893eeaa..18047c278 100644 --- a/advanced/wallets/react-wallet-v2/.env.local.example +++ b/advanced/wallets/react-wallet-v2/.env.local.example @@ -2,6 +2,9 @@ NEXT_PUBLIC_PROJECT_ID= NEXT_PUBLIC_RELAY_URL=wss://relay.walletconnect.com # WalletConnect Pay SDK API Key (get from cloud.walletconnect.com) NEXT_PUBLIC_PAY_API_KEY= +# Pay API base URL (defaults to https://api.pay.walletconnect.com) +# Use https://staging.api.pay.walletconnect.com for staging +NEXT_PUBLIC_PAY_API_BASE_URL= NEXT_PUBLIC_PIMLICO_KEY= NEXT_PUBLIC_ZERODEV_PROJECT_ID= #if using local AA infra then set these values diff --git a/advanced/wallets/react-wallet-v2/next-env.d.ts b/advanced/wallets/react-wallet-v2/next-env.d.ts index 2d5420eba..0c7fad710 100644 --- a/advanced/wallets/react-wallet-v2/next-env.d.ts +++ b/advanced/wallets/react-wallet-v2/next-env.d.ts @@ -1,7 +1,7 @@ /// /// /// -import "./.next/types/routes.d.ts"; +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/advanced/wallets/react-wallet-v2/package.json b/advanced/wallets/react-wallet-v2/package.json index a99993913..2ba66a9c3 100644 --- a/advanced/wallets/react-wallet-v2/package.json +++ b/advanced/wallets/react-wallet-v2/package.json @@ -36,7 +36,7 @@ "@polkadot/util": "^10.4.2", "@polkadot/util-crypto": "^10.4.2", "@reown/appkit-experimental": "1.8.17", - "@reown/walletkit": "1.5.2", + "@reown/walletkit": "1.5.4", "@rhinestone/module-sdk": "0.1.25", "@solana/web3.js": "1.98.2", "@stacks/network": "^7.3.1", @@ -50,7 +50,7 @@ "@ton/ton": "^15.4.0", "@types/semver": "^7.7.1", "@walletconnect/core": "2.23.5", - "@walletconnect/pay": "1.0.4-canary.0", + "@walletconnect/pay": "1.0.7", "@walletconnect/types": "2.23.5", "@walletconnect/utils": "2.23.5", "@zerodev/ecdsa-validator": "5.3.0", diff --git a/advanced/wallets/react-wallet-v2/pnpm-lock.yaml b/advanced/wallets/react-wallet-v2/pnpm-lock.yaml index ca9f41f48..9cb4ff308 100644 --- a/advanced/wallets/react-wallet-v2/pnpm-lock.yaml +++ b/advanced/wallets/react-wallet-v2/pnpm-lock.yaml @@ -95,8 +95,8 @@ importers: specifier: 1.8.17 version: 1.8.17(@types/react@19.1.6)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.4.5)(use-sync-external-store@1.2.0(react@19.1.0))(utf-8-validate@5.0.10) '@reown/walletkit': - specifier: 1.5.2 - version: 1.5.2(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76) + specifier: 1.5.4 + version: 1.5.4(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76) '@rhinestone/module-sdk': specifier: 0.1.25 version: 0.1.25(viem@2.17.8(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76)) @@ -1605,8 +1605,8 @@ packages: '@reown/appkit@1.8.17': resolution: {integrity: sha512-svov4ShvEi4YboVe+kXT8xGQvDrYsgQBrBmccOel9nT7/lOEDUimFu5Irna8g/8Zji9/XbRrYi49cLPJrzd45Q==} - '@reown/walletkit@1.5.2': - resolution: {integrity: sha512-3C4V0lfGDO584be51PoIGQVuaDooz+m1IZNGAg7frwWFgUzUak7DGB+YEFVSLByBTV0kdq9zRuRpqedRCXYAnQ==} + '@reown/walletkit@1.5.4': + resolution: {integrity: sha512-XIqCjRioKhp01qS8nMqhE+qhHfvcue+fVw7xa1LCdMfFWh+sWevQr15bc2kP2SHGKJqM9aR8lPhNLTCxRH7Ivg==} '@rhinestone/module-sdk@0.1.25': resolution: {integrity: sha512-BJnEtKDpAx0VgWGl/iWE4WAB2MKJVmy+5euCtfUdQrRawA5CI54bQNi966UuDrf/yY9GT/yEOvYX+5VwLxGjsw==} @@ -2445,6 +2445,10 @@ packages: resolution: {integrity: sha512-XcN2dbJbepB6FH+Gwo8niGgFYJkQr3gyjm9MSZBUVjtyko1PJ1SqJGd6tF3h2qZXs3BRhWUNwl4peUv5+v4SyQ==} engines: {node: '>=18.20.8'} + '@walletconnect/core@2.23.8': + resolution: {integrity: sha512-559+fA6Hh9CkEIOtrWKdDWoa3HL47glDF7D75LbqQzv4v325KXq24KEsjzDPBYr7pI49gQo7P2HpPnY1ax+8Aw==} + engines: {node: '>=18.20.8'} + '@walletconnect/environment@1.0.1': resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} @@ -2500,8 +2504,8 @@ packages: '@walletconnect/sign-client@2.23.2': resolution: {integrity: sha512-LL5KgmJHvY5NqQn+ZHQJLia1p6fpUWXHtiG97S5rNfyuPx6gT/Jkkwqc2LwdmAjFkr61t8zTagHC9ETq203mNA==} - '@walletconnect/sign-client@2.23.5': - resolution: {integrity: sha512-/74RjPm1Ue2NbeNCqAyu0L7g4X3UdPDHuhslhJWkA4kdsX8vzhQ521IpTaL4SuqtdqyMlv6jMBvbLy2RYmdhoQ==} + '@walletconnect/sign-client@2.23.8': + resolution: {integrity: sha512-7DtFDQZwOK4E9q+TKWL819d01dpNHA3jMcntSsQqSLNU34orbkDB/BJzW4nyWZ6H9DuGHRvibJA9wvfXjOCWBw==} '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} @@ -2512,6 +2516,9 @@ packages: '@walletconnect/types@2.23.5': resolution: {integrity: sha512-hz6C1ylk0EwmwEcB6/DunfEfnJxXpohsghAoHyW85JjuThqwmErLfLJintgYLa2f+N5YZB6G4mddssZzan89LQ==} + '@walletconnect/types@2.23.8': + resolution: {integrity: sha512-OI/0Z7/8r11EDU9bBPy5nixYgsk6SrTcOvWe9r7Nf2WvkMcPLgV7aS8rb6+nInRmDPfXuyTgzdAox0rtmfJMzg==} + '@walletconnect/universal-provider@2.23.2': resolution: {integrity: sha512-vs9iorPUAiVesFJ95O6XvLjmRgF+B2TspxJNL90ZULbrkRw4JFsmaRdb965PZKc+s182k1MkS/MQ0o964xRcEw==} @@ -2521,6 +2528,9 @@ packages: '@walletconnect/utils@2.23.5': resolution: {integrity: sha512-wjDGmOyg0fiJlj1gl41pQj6X/Ax4HbUAaelSKwqzUyHU7R/EN9Wp9x+PvMHNtGaoSOKN3QIChsGxGREut/C/tg==} + '@walletconnect/utils@2.23.8': + resolution: {integrity: sha512-vJrRrZFZANWmnEEnWnfVSnpQ+jdjqBb5fqSgp0VGeRX3pNr2KAHJ0TwNnEN+fbhR76JxuFrpcY7HJUT7DHDJ7w==} + '@walletconnect/window-getters@1.0.1': resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} @@ -7393,16 +7403,16 @@ snapshots: - utf-8-validate - zod - '@reown/walletkit@1.5.2(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/walletkit@1.5.4(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@walletconnect/core': 2.23.5(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/core': 2.23.8(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 3.0.2 '@walletconnect/pay': 1.0.4-canary.0(typescript@5.4.5)(zod@3.25.76) - '@walletconnect/sign-client': 2.23.5(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76) - '@walletconnect/types': 2.23.5 - '@walletconnect/utils': 2.23.5(typescript@5.4.5)(zod@3.25.76) + '@walletconnect/sign-client': 2.23.8(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/types': 2.23.8 + '@walletconnect/utils': 2.23.8(typescript@5.4.5)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8644,6 +8654,50 @@ snapshots: - utf-8-validate - zod + '@walletconnect/core@2.23.8(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76)': + dependencies: + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-provider': 1.0.14 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.23.8 + '@walletconnect/utils': 2.23.8(typescript@5.4.5)(zod@3.25.76) + '@walletconnect/window-getters': 1.0.1 + es-toolkit: 1.44.0 + events: 3.3.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - ioredis + - typescript + - uploadthing + - utf-8-validate + - zod + '@walletconnect/environment@1.0.1': dependencies: tslib: 1.14.1 @@ -8806,16 +8860,16 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.23.5(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/sign-client@2.23.8(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@walletconnect/core': 2.23.5(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/core': 2.23.8(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 3.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.23.5 - '@walletconnect/utils': 2.23.5(typescript@5.4.5)(zod@3.25.76) + '@walletconnect/types': 2.23.8 + '@walletconnect/utils': 2.23.8(typescript@5.4.5)(zod@3.25.76) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -8904,6 +8958,35 @@ snapshots: - ioredis - uploadthing + '@walletconnect/types@2.23.8': + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.2 + '@walletconnect/jsonrpc-types': 1.0.4 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.2 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - uploadthing + '@walletconnect/universal-provider@2.23.2(bufferutil@4.1.0)(typescript@5.4.5)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: '@walletconnect/events': 1.0.1 @@ -9033,6 +9116,50 @@ snapshots: - uploadthing - zod + '@walletconnect/utils@2.23.8(typescript@5.4.5)(zod@3.25.76)': + dependencies: + '@msgpack/msgpack': 3.1.3 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + '@walletconnect/jsonrpc-utils': 1.0.8 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 3.0.2 + '@walletconnect/relay-api': 1.0.11 + '@walletconnect/relay-auth': 1.1.0 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.23.8 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + blakejs: 1.2.1 + detect-browser: 5.3.0 + ox: 0.9.3(typescript@5.4.5)(zod@3.25.76) + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - db0 + - ioredis + - typescript + - uploadthing + - zod + '@walletconnect/window-getters@1.0.1': dependencies: tslib: 1.14.1 diff --git a/advanced/wallets/react-wallet-v2/src/components/PaymentModal/CollectDataIframe.tsx b/advanced/wallets/react-wallet-v2/src/components/PaymentModal/CollectDataIframe.tsx index aa1cfd0ea..d5c0653de 100644 --- a/advanced/wallets/react-wallet-v2/src/components/PaymentModal/CollectDataIframe.tsx +++ b/advanced/wallets/react-wallet-v2/src/components/PaymentModal/CollectDataIframe.tsx @@ -4,8 +4,8 @@ import OpenInNewIcon from '@mui/icons-material/OpenInNew' const WHITELISTED_ORIGINS = [ 'https://dev.pay.walletconnect.com', - 'https://staging.pay.walletconnect.com', 'https://pay.walletconnect.com', + 'https://staging.pay.walletconnect.com' ] function buildUrlWithTheme(baseUrl: string): string { @@ -19,11 +19,7 @@ interface CollectDataIframeProps { onError: (error: string) => void } -export default function CollectDataIframe({ - url, - onComplete, - onError, -}: CollectDataIframeProps) { +export default function CollectDataIframe({ url, onComplete, onError }: CollectDataIframeProps) { const popupRef = useRef(null) const [opened, setOpened] = useState(false) @@ -31,15 +27,11 @@ export default function CollectDataIframe({ const handleMessage = useCallback( (event: MessageEvent) => { - const isAllowedOrigin = WHITELISTED_ORIGINS.some( - origin => event.origin === origin - ) + const isAllowedOrigin = WHITELISTED_ORIGINS.some(origin => event.origin === origin) if (!isAllowedOrigin) return try { - const message = typeof event.data === 'string' - ? JSON.parse(event.data) - : event.data + const message = typeof event.data === 'string' ? JSON.parse(event.data) : event.data if (message.type === 'IC_COMPLETE' && message.success) { popupRef.current?.close() @@ -54,7 +46,7 @@ export default function CollectDataIframe({ // Non-JSON message, ignore } }, - [onComplete, onError], + [onComplete, onError] ) useEffect(() => { @@ -103,14 +95,16 @@ export default function CollectDataIframe({ if (opened) { return ( -
+
Complete verification @@ -119,7 +113,7 @@ export default function CollectDataIframe({ Complete the form in the opened window. This page will update automatically.