All files / lib/communication/adapters sms.adapter.ts

100% Statements 7/7
100% Branches 2/2
100% Functions 1/1
100% Lines 7/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32                    7x 7x 7x   7x 7x 5x           2x                  
import { getSmsProvider } from "../../sms";
import { resolveEnvironment } from "../../domain-utils";
import { getSmsProviderName } from "../../env-config";
import type { AdapterResult, CommunicationQueueMessage, SmsContent } from "../types";
 
export class SmsAdapter {
	async send(
		message: CommunicationQueueMessage,
		env: CloudflareBindings,
	): Promise<AdapterResult> {
		const content = message.content as SmsContent;
		const provider = getSmsProvider(env);
		const providerName = getSmsProviderName(resolveEnvironment(env.ENVIRONMENT));
 
		try {
			await provider.sendOtp(message.recipient, content.code);
			return {
				status: "sent",
				actualRecipient: message.recipient,
				provider: providerName,
			};
		} catch (err) {
			return {
				status: "failed",
				actualRecipient: message.recipient,
				provider: providerName,
				errorMessage: err instanceof Error ? err.message : "SMS delivery failed",
			};
		}
	}
}