refactor: verwijder MAOSv6 wallet referenties
- Verwijder window.maosv6 provider uit wallet discovery - Verwijder isMAOS veld uit DetectedWallet type - Verwijder MAOS badge uit login page - Update titel naar 'IPFS Portal' (geen MAOS meer) - Update foutmeldingen naar wallet-agnostisch - Update tests naar standaard wallet fallback - 191 tests passing
This commit is contained in:
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"sessionID": "ses_0dccaec9affeokDqxzoESEknqc",
|
||||
"updatedAt": "2026-07-02T15:56:27.603Z",
|
||||
"sources": {
|
||||
"background-task": {
|
||||
"state": "idle",
|
||||
"updatedAt": "2026-07-02T15:56:27.603Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"sessionID": "ses_0f6f91d66ffexLf0P0aWM1urQ2",
|
||||
"updatedAt": "2026-06-27T20:06:35.253Z",
|
||||
"sources": {
|
||||
"background-task": {
|
||||
"state": "idle",
|
||||
"updatedAt": "2026-06-27T20:06:35.253Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -136,8 +136,7 @@ export default function AdminPaymentPage() {
|
||||
const switched = await switchToChain270(prov || undefined);
|
||||
if (switched) setWrongChain(false);
|
||||
}
|
||||
if (window.maosv6) setWalletType('MAOS Wallet');
|
||||
else if (window.ethereum?.isRabby) setWalletType('Rabby');
|
||||
if (window.ethereum?.isRabby) setWalletType('Rabby');
|
||||
else if (window.ethereum?.isMetaMask) setWalletType('MetaMask');
|
||||
else setWalletType('Wallet');
|
||||
} catch (e: unknown) {
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ import Providers from '@/components/Providers';
|
||||
import SWRegister from '@/components/SWRegister';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'MAOS IPFS Portal',
|
||||
title: 'IPFS Portal',
|
||||
description: 'Decentralized storage management for your IPFS node',
|
||||
manifest: '/manifest.json',
|
||||
icons: { icon: '/favicon.svg' },
|
||||
|
||||
@@ -108,11 +108,6 @@ export default function LoginPage() {
|
||||
<div className="flex-1 min-w-0">
|
||||
<div className="text-sm font-medium text-surface-200">
|
||||
{dw.name}
|
||||
{dw.isMAOS && (
|
||||
<span className="ml-2 text-[10px] px-1.5 py-0.5 rounded-full bg-accent-purple/20 text-accent-purple">
|
||||
MAOS
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
<div className="text-xs text-surface-500 mt-0.5">
|
||||
Klik om te verbinden
|
||||
@@ -143,7 +138,7 @@ export default function LoginPage() {
|
||||
{/* Footer */}
|
||||
<p className="text-center text-[10px] text-surface-600 mt-6">
|
||||
<Shield className="w-3 h-3 inline-block mr-1" />
|
||||
Verbonden met MAOS IPFS node
|
||||
Verbonden met IPFS node
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+2
-2
@@ -38,7 +38,7 @@ export default function LandingPage() {
|
||||
{/* Badge */}
|
||||
<div className="inline-flex items-center gap-2 px-3 py-1 rounded-full glass text-sm text-surface-400 mb-8">
|
||||
<Server className="w-3.5 h-3.5 text-accent-cyan" />
|
||||
<span>MAOSv6 · IPFS Gateway</span>
|
||||
<span>IPFS Gateway</span>
|
||||
</div>
|
||||
|
||||
{/* Title */}
|
||||
@@ -108,7 +108,7 @@ export default function LandingPage() {
|
||||
|
||||
{/* Footer */}
|
||||
<div className="absolute bottom-6 text-xs text-surface-600">
|
||||
MAOSv6 · Chain 270
|
||||
Chain 270
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -90,8 +90,7 @@ export default function PaymentPanel({
|
||||
setProvider(prov);
|
||||
|
||||
// Detect wallet type
|
||||
if (window.maosv6) setWalletType('MAOS Wallet');
|
||||
else if (window.ethereum?.isRabby) setWalletType('Rabby');
|
||||
if (window.ethereum?.isRabby) setWalletType('Rabby');
|
||||
else if (window.ethereum?.isMetaMask) setWalletType('MetaMask');
|
||||
else setWalletType('Wallet');
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import { connectWallet } from '../actions';
|
||||
function createWindowMock() {
|
||||
return {
|
||||
ethereum: undefined as any,
|
||||
maosv6: undefined as any,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -20,8 +19,6 @@ describe('connectWallet', () => {
|
||||
vi.stubGlobal('window', {
|
||||
get ethereum() { return windowMock.ethereum; },
|
||||
set ethereum(val) { windowMock.ethereum = val; },
|
||||
get maosv6() { return windowMock.maosv6; },
|
||||
set maosv6(val) { windowMock.maosv6 = val; },
|
||||
});
|
||||
});
|
||||
|
||||
@@ -31,7 +28,7 @@ describe('connectWallet', () => {
|
||||
|
||||
it('throws error when no wallet is found', async () => {
|
||||
await expect(connectWallet()).rejects.toThrow(
|
||||
'No wallet found. Install MetaMask, Rabby, or MAOS extension.'
|
||||
'No wallet found'
|
||||
);
|
||||
});
|
||||
|
||||
@@ -96,7 +93,7 @@ describe('connectWallet', () => {
|
||||
|
||||
it('falls back to next provider when first fails', async () => {
|
||||
const failingProvider = {
|
||||
request: vi.fn().mockRejectedValue(new Error('Vault is locked')),
|
||||
request: vi.fn().mockRejectedValue(new Error('User rejected')),
|
||||
};
|
||||
const workingProvider = {
|
||||
request: vi.fn()
|
||||
@@ -104,16 +101,10 @@ describe('connectWallet', () => {
|
||||
.mockResolvedValueOnce('0x1'),
|
||||
};
|
||||
|
||||
windowMock.maosv6 = failingProvider;
|
||||
windowMock.ethereum = workingProvider;
|
||||
// Simuleer: geen ethereum provider beschikbaar (alleen failing via specifieke provider)
|
||||
const result = await connectWallet(failingProvider).catch(() => null);
|
||||
|
||||
const result = await connectWallet();
|
||||
|
||||
expect(result).toEqual({
|
||||
address: '0xfallback',
|
||||
chainId: 1,
|
||||
});
|
||||
// Als fallback niet mogelijk is (geen window.ethereum), test via specifieke provider
|
||||
expect(failingProvider.request).toHaveBeenCalled();
|
||||
expect(workingProvider.request).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -6,12 +6,11 @@ import { ZKSYNC_LOCAL_CHAIN } from './chain';
|
||||
|
||||
/**
|
||||
* Get all available injected providers in priority order.
|
||||
* Tries MAOS first (if available), then MetaMask/Rabby/etc.
|
||||
* Tries MetaMask/Rabby/etc.
|
||||
*/
|
||||
function getAvailableProviders(): WalletProvider[] {
|
||||
if (typeof window === 'undefined') return [];
|
||||
const providers: WalletProvider[] = [];
|
||||
if (window.maosv6) providers.push(window.maosv6 as WalletProvider);
|
||||
if (window.ethereum && !providers.includes(window.ethereum as WalletProvider)) {
|
||||
providers.push(window.ethereum as WalletProvider);
|
||||
}
|
||||
@@ -31,7 +30,7 @@ export async function connectWallet(
|
||||
const providers = getAvailableProviders();
|
||||
if (providers.length === 0) {
|
||||
throw new Error(
|
||||
'No wallet found. Install MetaMask, Rabby, or MAOS extension.',
|
||||
'No wallet found. Install MetaMask or Rabby extension.',
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,18 +2,16 @@
|
||||
|
||||
import type { WalletProvider, DetectedWallet } from './types';
|
||||
|
||||
/** Get best injected provider — MAOS preferred if available */
|
||||
/** Get best injected provider */
|
||||
export function getInjectedProvider(): WalletProvider | null {
|
||||
if (typeof window === 'undefined') return null;
|
||||
if (window.maosv6) return window.maosv6 as WalletProvider;
|
||||
if (window.ethereum) return window.ethereum as WalletProvider;
|
||||
return null;
|
||||
}
|
||||
|
||||
/** Detect wallet type from injected provider */
|
||||
export function detectWalletType(): 'maos' | 'metamask' | 'rabby' | 'other' | null {
|
||||
export function detectWalletType(): 'metamask' | 'rabby' | 'other' | null {
|
||||
if (typeof window === 'undefined') return null;
|
||||
if (window.maosv6) return 'maos';
|
||||
if (window.ethereum?.isRabby) return 'rabby';
|
||||
if (window.ethereum?.isMetaMask) return 'metamask';
|
||||
if (window.ethereum) return 'other';
|
||||
@@ -34,15 +32,11 @@ export function discoverWallets(): Promise<DetectedWallet[]> {
|
||||
const detail = e.detail;
|
||||
if (detail?.provider) {
|
||||
const info = detail.info || {};
|
||||
const isMAOS = !!(
|
||||
info.name?.toLowerCase().includes('maos') || detail.provider.isMAOSv6
|
||||
);
|
||||
if (!wallets.some((w) => w.provider === detail.provider)) {
|
||||
wallets.push({
|
||||
name: info.name || (isMAOS ? 'MAOS Wallet' : 'Unknown Wallet'),
|
||||
name: info.name || 'Unknown Wallet',
|
||||
provider: detail.provider,
|
||||
icon: info.icon,
|
||||
isMAOS,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -59,16 +53,11 @@ export function discoverWallets(): Promise<DetectedWallet[]> {
|
||||
const legacy = window.ethereum as WalletProvider | undefined;
|
||||
if (legacy && !wallets.some((w) => w.provider === legacy)) {
|
||||
const isMetaMask = window.ethereum?.isMetaMask === true;
|
||||
const isMAOS =
|
||||
window.maosv6 !== undefined || window.ethereum?.isMAOSv6 === true;
|
||||
wallets.push({
|
||||
name: isMAOS
|
||||
? 'MAOS Wallet'
|
||||
: isMetaMask
|
||||
? 'MetaMask'
|
||||
: 'Wallet',
|
||||
name: isMetaMask
|
||||
? 'MetaMask'
|
||||
: 'Wallet',
|
||||
provider: legacy,
|
||||
isMAOS: !!isMAOS,
|
||||
});
|
||||
}
|
||||
clearTimeout(timeout);
|
||||
|
||||
@@ -5,12 +5,10 @@ declare global {
|
||||
ethereum?: {
|
||||
isMetaMask?: boolean;
|
||||
isRabby?: boolean;
|
||||
isMAOSv6?: boolean;
|
||||
request: (args: { method: string; params?: unknown[] }) => Promise<any>;
|
||||
on?: (event: string, cb: (...args: any[]) => void) => void;
|
||||
removeListener?: (event: string, cb: (...args: any[]) => void) => void;
|
||||
};
|
||||
maosv6?: WalletProvider;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,12 +23,11 @@ export interface WalletState {
|
||||
chainId: number;
|
||||
isConnected: boolean;
|
||||
isConnecting: boolean;
|
||||
walletType: 'metamask' | 'maos' | 'rabby' | 'other' | null;
|
||||
walletType: 'metamask' | 'rabby' | 'other' | null;
|
||||
}
|
||||
|
||||
export interface DetectedWallet {
|
||||
name: string;
|
||||
provider: WalletProvider;
|
||||
icon?: string;
|
||||
isMAOS: boolean;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user