handlePaymentReturn method

Polls authoritative checkout state after a browser payment return.

Implementation

@override
Future<InappifySdkResult<InappifyCheckoutResult>> handlePaymentReturn(
  InappifyPaymentReturnRequest request,
) async {
  final cancelled = _preCancelled<InappifyCheckoutResult>(
    'handlePaymentReturn',
    request.cancellation,
  );
  if (cancelled != null) return cancelled;
  if (request.checkoutId.isEmpty) {
    return _invalid<InappifyCheckoutResult>(
      'handlePaymentReturn',
      'A checkoutId is required.',
    );
  }
  return _run<InappifyCheckoutResult>(
    'handlePaymentReturn',
    action: () async {
      final raw = await _bridge.call(
        'handlePaymentReturn',
        positionalArguments: <Object?>[
          request.checkoutId,
          <String, Object?>{
            'timeoutMs': request.timeoutMs,
            'intervalMs': request.intervalMs,
          },
        ],
        cancellation: request.cancellation,
        injectAbortSignal: request.cancellation != null,
      );
      final result = InappifyWebPayloadCodec.checkout(raw);
      _recordCheckoutState(result);
      return result;
    },
    cancellation: request.cancellation,
  );
}