replayPendingNonDurableSessionStarts static method

Future<void> replayPendingNonDurableSessionStarts(
  1. Future<void> persistEvent(
    1. Event event
    )
)

Rebuild non-delivered session_start events after local storage loss.

Implementation

static Future<void> replayPendingNonDurableSessionStarts(
  Future<void> Function(Event event) persistEvent,
) async {
  final replayedTimestamps = <int>{};

  for (final pending in _getPendingSessionStarts()) {
    if (pending.durable || !replayedTimestamps.add(pending.ts)) {
      continue;
    }

    try {
      final sessionStartEvent = await Event.createWithContext(
        'session_start',
        pending.ts,
        sessionStartOverride: pending.ts,
        sessionNumberOverride: pending.number,
      );
      await persistEvent(sessionStartEvent);
      await _confirmPendingSessionStartStored(pending.ts);
    } catch (e, st) {
      dbLogger.severe(
        'SessionHelper: replayPendingNonDurableSessionStarts failed',
        e,
        st,
      );
    }
  }
}