sendOtp method
Send/Resend OTP via API
Implementation
Future<CkAuthResult<void>> sendOtp({
CkOtpTrigger? trigger,
String? recipient,
}) async {
final activeTrigger = trigger ?? lastTrigger;
if (activeTrigger == null) {
return const CkAuthResult<void>.failure(
message:
'No active OTP trigger found, try like sendOtp(CkOtpTrigger.login)',
);
}
if (recipient != null && recipient.isNotEmpty) {
lastRecipient = recipient;
}
if (trigger != null) {
lastTrigger = trigger;
await CkStorage.write('core_kit_last_otp_trigger', trigger.name);
}
if (_sendUrl == null) {
return const CkAuthResult<void>.failure(
message: 'OTP send URL is not configured',
);
}
if (!canResend) {
return const CkAuthResult<void>.failure(
message: 'Resend is locked. Please wait for the cooldown timer.',
);
}
final vToken = getVerificationToken(activeTrigger);
final body = await _config.resendBodyBuilder(
ResendOtpCallBack(
recipient: lastRecipient,
token: vToken ?? '',
trigger: activeTrigger,
),
);
final response = await CkTransport.request(
input: RequestInput(
endpoint: _sendUrl,
method: _sendMethod,
jsonBody: body,
requiresToken: false,
),
responseBuilder: (data) => data,
showMessage: true,
);
if (response.isSuccess) {
_resendAttempts++;
startResendTimer();
final newToken = _extractors.verificationTokens?[activeTrigger]?.call(
response.data,
);
if (newToken != null) {
await storeVerificationToken(activeTrigger, newToken);
}
return CkAuthResult<void>.success(
statusCode: response.statusCode,
rawResponse: response.data,
);
}
return CkAuthResult<void>.failure(
message: response.message,
statusCode: response.statusCode,
rawResponse: response.data,
);
}