Copy
Ask AI
<script lang="ts">
import { SunbreakProvider } from '@tdfc/sunbreak-svelte';
import type { Proof } from '@tdfc/sunbreak-svelte';
import { PUBLIC_SUNBREAK_CLIENT_ID, PUBLIC_SUNBREAK_BASE } from '$env/static/public';
let pubkey = $state('');
let proof = $state<Proof | null>(null);
const b64 = (buf: Uint8Array) => btoa(String.fromCharCode(...Array.from(buf)));
async function connect() {
const sol = (window as any).solana;
if (!sol?.isPhantom) { alert('Phantom wallet not found'); return; }
const res = await sol.connect();
pubkey = res.publicKey?.toString() ?? '';
}
async function disconnect() {
try { await (window as any).solana?.disconnect(); } catch {}
pubkey = '';
proof = null;
}
async function sign() {
if (!pubkey) return;
const msg = new TextEncoder().encode(`Sign in to Sunbreak @ ${window.location.host}`);
const { signature } = await (window as any).solana.signMessage(msg, 'utf8');
proof = {
method: 'ed25519',
messageBase64: b64(msg),
signatureBase64: b64(new Uint8Array(signature)),
};
}
</script>
<SunbreakProvider
baseUrl={PUBLIC_SUNBREAK_BASE}
clientId={PUBLIC_SUNBREAK_CLIENT_ID}
wallet={pubkey || undefined}
{proof}
>
<button onclick={connect}>Connect Phantom</button>
<button onclick={sign} disabled={!pubkey}>Sign</button>
<button onclick={disconnect}>Disconnect</button>
</SunbreakProvider>