verifyOtp method

Future<CkAuthResult<void>> verifyOtp({
  1. required String otp,
  2. Map<String, dynamic>? additionalBody,
})

Verify OTP via API

Implementation

Future<CkAuthResult<void>> verifyOtp({
  required String otp,
  Map<String, dynamic>? additionalBody,
}) async {
  final activeTrigger = lastTrigger;
  if (activeTrigger == null) {
    return const CkAuthResult<void>.failure(
      message: 'No active OTP verification trigger found',
    );
  }

  final url =
      (activeTrigger == CkOtpTrigger.forgetPassword &&
          _verifyForgetUrl != null)
      ? _verifyForgetUrl
      : _verifyUrl;

  if (url == null) {
    return const CkAuthResult<void>.failure(
      message: 'OTP verify URL is not configured',
    );
  }

  final vToken = getVerificationToken(activeTrigger);

  final body = await _config.verifyBodyBuilder(
    VerifyOtpCallBack(otp: otp, token: vToken ?? '', trigger: activeTrigger),
  );

  if (additionalBody != null) {
    body.addAll(additionalBody);
  }

  final headers = <String, String>{};
  if (_config.verificationStrategy == CkOtpVerificationStrategy.tokenBased &&
      _config.sendVerificationTokenInHeader &&
      vToken != null) {
    headers[_config.verificationTokenHeaderKey] = vToken;
  }

  final method =
      (activeTrigger == CkOtpTrigger.forgetPassword &&
          _verifyForgetUrl != null)
      ? _verifyForgotMethod
      : _verifyMethod;

  final response = await CkTransport.request(
    input: RequestInput(
      endpoint: url,
      method: method,
      jsonBody: body,
      headers: headers,
      requiresToken: false,
    ),
    responseBuilder: (data) => data,
    showMessage: true,
  );

  if (response.isSuccess) {
    if (_extractors.resetPasswordToken != null) {
      _resetPasswordToken = _extractors.resetPasswordToken!(response.data);
    }
    await storeVerificationToken(activeTrigger, null);
    if (lastTrigger == activeTrigger) {
      lastTrigger = null;
      await CkStorage.delete('core_kit_last_otp_trigger');
    }
    return CkAuthResult<void>.success(
      statusCode: response.statusCode,
      rawResponse: response.data,
    );
  }

  return CkAuthResult<void>.failure(
    message: response.message,
    statusCode: response.statusCode,
    rawResponse: response.data,
  );
}