-
-
+
-
{status}
-
+ {/if}
+
Recipients always review details before approving.
+
-
- 02 · Share & Review
- Step 2: share your QR or link. Every person reviews details before redeeming. No auto-send.
-
- {#if qrData}
-

- {:else}
-
Generate a QR to preview it here.
- {/if}
-
- {#if link}
-
-
-
-
Open drop
-
- {/if}
-
+
+ 3) Batch generator
+
-
- 03 · Batch Generation
-
-
-
-
-
-
-
-
-
-
- {#if csv}{/if}
-
- Rows generated: {batchRows.length}
- Best for giveaways: generate many tickets at once, then print or distribute digitally.
-
+
+
+
+
+
+
-
- 04 · Upgrade & Trust
-
-
FreeUp to {TIERS.FREE.maxBatch}
-
Event Pack{TIERS.EVENT.maxBatch} • {TIERS.EVENT.priceXlm} XLM
-
Power Pack{TIERS.POWER.maxBatch} • {TIERS.POWER.priceXlm} XLM
-
Custom / EnterpriseContact for event ops scale
-
- Step 4: if needed, upgrade your batch limit. Checkout opens in wallet and you can continue right away.
-
-
-
-
- Anyone can open a ticket safely, review details, and redeem from the same EZWallet flow with signer approval.
-
+
+
+
+
+ {#if csv}{/if}
+
+
+ Generated rows: {batchRows.length}
-
+
+ 4) Upgrade options
+
+
FreeUp to {TIERS.FREE.maxBatch}
+
Event Pack{TIERS.EVENT.maxBatch} • {TIERS.EVENT.priceXlm} XLM
+
Power Pack{TIERS.POWER.maxBatch} • {TIERS.POWER.priceXlm} XLM
+
+
+
+
+
+
diff --git a/src/experiments/ezwallet/EZWalletDropApp.svelte b/src/experiments/ezwallet/EZWalletDropApp.svelte
index 0730ff9f..b33fbaa3 100644
--- a/src/experiments/ezwallet/EZWalletDropApp.svelte
+++ b/src/experiments/ezwallet/EZWalletDropApp.svelte
@@ -3,26 +3,120 @@
import { PENDING_INTENT_KEY } from './config';
import { userState } from '../../stores/user.svelte';
import { useAuthentication } from '../../hooks/useAuthentication';
- let intent:any = null; let errors:string[] = []; let raw = '';
+
+ let intent: any = null;
+ let errors: string[] = [];
+ let raw = '';
+ let copyStatus = '';
const auth = useAuthentication();
+
if (typeof window !== 'undefined') {
const p = new URL(location.href).searchParams.get('p') || '';
raw = p;
- if (p) { try { intent = decodeIntent(p); errors = validateIntent(intent as any); } catch { errors=['Invalid payload']; } }
- if (!userState.contractId && intent && errors.length===0) sessionStorage.setItem(PENDING_INTENT_KEY, JSON.stringify(intent));
+ if (p) {
+ try {
+ intent = decodeIntent(p);
+ errors = validateIntent(intent as any);
+ } catch {
+ errors = ['This claim link is invalid.'];
+ }
+ }
+ if (!userState.contractId && intent && errors.length === 0) {
+ sessionStorage.setItem(PENDING_INTENT_KEY, JSON.stringify(intent));
+ }
+ }
+
+ async function login() {
+ await auth.login();
+ const s = sessionStorage.getItem(PENDING_INTENT_KEY);
+ if (s) intent = JSON.parse(s);
+ }
+
+ async function copyIntent() {
+ await navigator.clipboard.writeText(raw);
+ copyStatus = 'Link details copied.';
+ }
+
+ function prettyMode(value: string) {
+ return value === 'event_drop' ? 'Event claim' : 'Direct claim';
}
- async function login(){ await auth.login(); const s = sessionStorage.getItem(PENDING_INTENT_KEY); if (s) intent = JSON.parse(s); }
-
-
Stellar Claim Ticket
-
This page is safe to open. Review details first, then connect and sign only if everything looks right.
-{#if errors.length}
{errors.join(', ')}
{:else if intent}
-
- Mode: {intent.mode}
- Asset: {intent.asset.code}
- Amount: {intent.amount || '—'}
- Destination: {intent.destination || 'choose later'}
- Event: {intent.event || '—'}
- Message: {intent.message || '—'}
- Network: public
-
No transaction has been sent. This QR stores claim intent metadata; signer approval is still required.
-
-{/if}
+
+
+
+ EZ Wallet
+ Claim details
+ You can safely open this page. Review every detail below before connecting your wallet and approving anything.
+
+ {#if errors.length}
+
+ {errors.join(', ')}
+
+ {:else if intent}
+
+
+
- Claim type
+ - {prettyMode(intent.mode)}
+
+
+
- Asset
+ - {intent.asset.code}
+
+
+
- Amount
+ - {intent.amount || 'Set later'}
+
+
+
- Destination
+ - {intent.destination || 'Choose during claim'}
+
+
+
- Event
+ - {intent.event || 'Not specified'}
+
+
+
- Message
+ - {intent.message || 'No message'}
+
+
+
- Network
+ - Public
+
+
+
+
+ No payment is sent automatically. You will always review and approve in your wallet first.
+
+
+
+ {#if copyStatus}{copyStatus}
{/if}
+ {:else}
+ No claim data was found in this link.
+ Go to EZ Wallet
+ {/if}
+
+
+