resolveAuthSessionUpdateForStrategyWithCallbacks<TContext> function

Future<AuthSessionUpdateResolution> resolveAuthSessionUpdateForStrategyWithCallbacks<TContext>({
  1. required AuthSessionStrategy strategy,
  2. required AuthCallbacks<TContext> callbacks,
  3. required TContext context,
  4. required AuthPrincipal principal,
  5. required JwtSessionOptions jwtOptions,
  6. FutureOr<void> persistSessionPrincipal(
    1. AuthPrincipal principal
    )?,
  7. void applySessionMaxAge()?,
  8. void writeSessionIssuedAt(
    1. DateTime issuedAtUtc
    )?,
  9. DateTime? resolveSessionExpiry()?,
  10. Map<String, dynamic>? protectedJwtClaims,
  11. DateTime? now,
})

Resolves updateSession behavior for an auth session strategy.

The session branch invokes applySessionMaxAge, persists the principal, writes issued-at metadata, and resolves expiry. The JWT branch ignores session callbacks and delegates issuance to issueAuthJwtSessionWithCallbacks. Callback and strategy errors propagate.

Session strategy uses callback hooks for framework-specific session writes.

JWT strategy uses issueAuthJwtSessionWithCallbacks and returns the issued auth cookie in AuthSessionUpdateResolution.jwtCookie.

Implementation

Future<AuthSessionUpdateResolution>
resolveAuthSessionUpdateForStrategyWithCallbacks<TContext>({
  required AuthSessionStrategy strategy,
  required AuthCallbacks<TContext> callbacks,
  required TContext context,
  required AuthPrincipal principal,
  required JwtSessionOptions jwtOptions,
  FutureOr<void> Function(AuthPrincipal principal)? persistSessionPrincipal,
  void Function()? applySessionMaxAge,
  void Function(DateTime issuedAtUtc)? writeSessionIssuedAt,
  DateTime? Function()? resolveSessionExpiry,
  Map<String, dynamic>? protectedJwtClaims,
  DateTime? now,
}) async {
  final user = AuthUser.fromPrincipal(principal);
  switch (strategy) {
    case AuthSessionStrategy.session:
      applySessionMaxAge?.call();
      if (persistSessionPrincipal != null) {
        await Future<void>.value(persistSessionPrincipal(principal));
      }
      writeSessionIssuedAt?.call((now ?? DateTime.now()).toUtc());
      return AuthSessionUpdateResolution(
        session: AuthSession(
          user: user,
          expiresAt: resolveSessionExpiry?.call(),
          strategy: AuthSessionStrategy.session,
        ),
      );
    case AuthSessionStrategy.jwt:
      final issued = await issueAuthJwtSessionWithCallbacks<TContext>(
        callbacks: callbacks,
        context: context,
        options: jwtOptions,
        user: user,
        protectedClaims: protectedJwtClaims,
      );
      return AuthSessionUpdateResolution(
        session: issued.session,
        jwtCookie: issued.issued.cookie,
      );
  }
}