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 33 34 35 36 37 38 39                            7x 7x 7x       7x 7x 5x           2x                    
import { resolveEnvironment } from "../../domain-utils";
import { getSmsProviderName } from "../../env-config";
import { getSmsProvider } from "../../sms";
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",
			};
		}
	}
}