Skip to main content
<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>