You are adding Buncha Games sandbox SDK test mode to my browser game. This is fake, non-payable integration QA for an approved sandbox build. Do not add real ads, real payments, checkout links, provider SDKs, real rewards tied to payable revenue, payout logic, crypto, secrets, or production monetization copy. Use the existing runtime SDK only: - prefer window.buncha, - fall back to window.galaxy only for legacy runtimes, - fail soft if neither exists, - keep the game playable outside Buncha Games. Approved Buncha Games sandbox previews expose this SDK from the platform runtime. If you are adding the base SDK setup before sandbox methods, follow /developers/docs/sdk first. Standalone local builds should not assume the SDK is present; hide test UI and keep the game playable when window.buncha is unavailable, slow, or unresponsive. Add or update a small in-game test UI that is hidden unless sandbox methods exist. The UI may show: - Buncha Credits balance from wallet.getSandboxSummary(), - wallet updates from wallet.onSandboxSummaryChanged(handler), - a test purchase button, - a clear status line for unavailable, signed out, insufficient credits, purchase committed, entitlement valid, canceled, not found, and generic unavailable states, - a test ad button if the game needs ad callback QA. Use this SDK flow: 1. Resolve const buncha = window.buncha ?? window.galaxy. 2. Check that buncha?.wallet?.getSandboxSummary, buncha?.wallet?.onSandboxSummaryChanged, buncha?.iap?.getSandboxCatalog, buncha?.iap?.requestSandboxPurchase, and buncha?.iap?.validateSandboxEntitlement are functions before showing IAP test UI. 3. Call buncha.wallet.getSandboxSummary() and render only wallet.summary.totalCredits with the label Buncha Credits. 4. Subscribe to buncha.wallet.onSandboxSummaryChanged(handler) and update the same balance/status line when Buncha Credits change. 5. Call buncha.iap.getSandboxCatalog() and find the configured sandbox SKU for this game. 6. On button click, call buncha.iap.requestSandboxPurchase({ sku, idempotencyKey }). 7. If status is insufficient_credits, show an in-game message telling the player to add Buncha Credits through the Buncha Games overlay. Do not auto-run the purchase after top-up. 8. If status is committed and a receipt id is present, call buncha.iap.validateSandboxEntitlement({ receiptId }). 9. Unlock the test-only item only when entitlement status is valid. Do not persist sandbox entitlements as production ownership. 10. If testing ads, call buncha.ads.requestSandboxPlacement({ placementId, status }) and handle rewarded, completed, skipped, unavailable, and error statuses without calling real ad providers. Treat status as a fake QA scenario/result, not proof of real ad delivery. The game cannot mark purchases, ads, or entitlements successful by itself. Buncha Games owns the wallet, purchase, ad, receipt, and entitlement result.