Mode Server-Verify

Le mode server-verify permet de ne débloquer l'UI qu'après confirmation backend partenaire.

Quand l'utiliser

Utilisez ce mode si votre application doit:

  • créer une session serveur avant de marquer l'utilisateur comme vérifié
  • exécuter des contrôles métier après grant_code (fraude, droits, etc.)
  • éviter un déverrouillage frontend basé uniquement sur le retour navigateur

Activation

<script src="https://widget-app.zykay.com/v4/loader.min.js"
        data-partner-id="pk_live_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4"
        data-success-path="/verified"
        data-server-verify="true"
        data-server-verify-endpoint="/api/zykay/server-verify"
        data-server-verify-timeout="30"></script>

Contrat exact du loader v4

Quand grant_code est détecté dans l'URL:

  1. Le loader émet zykay:grant-received avec { grantCode }
  2. Le loader n'émet pas zykay:verified en mode server-verify
  3. Le loader poll data-server-verify-endpoint en GET toutes les 1s (credentials: 'include')
  4. Le loader attend une réponse JSON avec {"verified": true}
  5. Si reçu, le loader émet zykay:verified-server et passe en succès
  6. Si timeout atteint (défaut 30s), erreur SERVER_VERIFY_TIMEOUT

Contrat de votre endpoint partenaire

Endpoint: GET /api/zykay/server-verify

  • 200 {"verified": false}: traitement backend encore en cours
  • 200 {"verified": true}: vérification confirmée, le loader débloque

Exemple minimal:

import { NextResponse } from 'next/server'
 
export async function GET() {
  const verified = false // Lire votre état de session applicative
 
  return NextResponse.json(
    { verified },
    {
      headers: {
        'Cache-Control': 'no-store',
      },
    }
  )
}

Flux recommandé (frontend + backend)

window.addEventListener('zykay:grant-received', async (event) => {
  const grantCode = event.detail?.grantCode
  if (!grantCode) return
 
  // 1) Échange grant_code côté backend
  await fetch('/api/zykay/exchange', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ grant_code: grantCode }),
    credentials: 'include',
  })
 
  // 2) Le backend marque la session comme "verified"
  // 3) /api/zykay/server-verify retournera {"verified": true}
})

Mode manuel (sans endpoint)

Si vous n'utilisez pas data-server-verify-endpoint, vous pouvez confirmer manuellement:

window.__ZYKAY_WIDGET_V4__?.confirmServerVerified()

Ce mode est utile si votre app pilote elle-même le cycle de confirmation.