prepareAuthEmailVerificationPayload function

AuthEmailVerificationPayload prepareAuthEmailVerificationPayload({
  1. required AuthMagicLinkProvider provider,
  2. required String email,
  3. required String callbackUrl,
  4. required AuthSessionStrategy sessionStrategy,
  5. String generateToken()?,
  6. DateTime? now,
})

Prepares token, request, and pending session payloads for email sign-in.

Implementation

AuthEmailVerificationPayload prepareAuthEmailVerificationPayload({
  required AuthMagicLinkProvider provider,
  required String email,
  required String callbackUrl,
  required AuthSessionStrategy sessionStrategy,
  String Function()? generateToken,
  DateTime? now,
}) {
  final normalizedEmail = normalizeAuthOneTimeEmail(email);
  final tokenGenerator = provider.tokenGenerator ?? generateToken;
  final token = tokenGenerator?.call() ?? secureRandomToken();
  if (token.trim().isEmpty) {
    throw ArgumentError.value(
      token,
      'token',
      'must be non-empty when generated for email verification',
    );
  }
  final current = now ?? DateTime.now();
  final expiresAt = current.add(provider.tokenExpiry);
  final request = AuthEmailRequest(
    email: normalizedEmail,
    token: token,
    callbackUrl: callbackUrl,
    expiresAt: expiresAt,
  );
  final session = AuthSession(
    user: AuthUser(id: '', email: normalizedEmail),
    expiresAt: expiresAt,
    strategy: sessionStrategy,
  );
  return AuthEmailVerificationPayload(
    token: token,
    expiresAt: expiresAt,
    record: AuthMagicLinkRecord(
      providerId: provider.id,
      email: normalizedEmail,
      tokenHash: hashOpaqueToken(token),
      issuedAt: current,
      expiresAt: expiresAt,
    ),
    request: request,
    pendingResult: AuthResult(user: session.user, session: session),
  );
}