// Package sms_mock - dev server-backed mock SMS sender. package sms_mock import ( "bytes" "context" "encoding/json" "fmt" "net/http" ) // Sender implements sms.Sender by posting to a dev server endpoint. The dev // server records messages in an inbox visible in the dev UI, so codes texted // during development can be read back. Mirrors mail_mock.Sender. type Sender struct { URL string // e.g. "http://localhost:8099/sms/send" } type sendReq struct { To string Text string } func (s *Sender) Send(ctx context.Context, phone, message string) error { body, err := json.Marshal(sendReq{To: phone, Text: message}) if err != nil { return err } req, err := http.NewRequestWithContext(ctx, http.MethodPost, s.URL, bytes.NewReader(body)) if err != nil { return err } req.Header.Set("Content-Type", "application/json") resp, err := http.DefaultClient.Do(req) if err != nil { return fmt.Errorf("mock sms: %w", err) } defer resp.Body.Close() if resp.StatusCode >= 400 { return fmt.Errorf("mock sms: server returned %d", resp.StatusCode) } return nil }