From 5dcb01f8e1a67a5cd2a4b1f81740dddbad230b03 Mon Sep 17 00:00:00 2001 From: rissrice2105-agent Date: Sun, 21 Jun 2026 19:00:49 -0600 Subject: [PATCH] fix(sms): handle missing Twilio credentials --- src/lib/utils/twilio-validator.js | 9 ++++++++- tests/twilio-validator.test.js | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/lib/utils/twilio-validator.js b/src/lib/utils/twilio-validator.js index 429f04f..8bd0a4d 100644 --- a/src/lib/utils/twilio-validator.js +++ b/src/lib/utils/twilio-validator.js @@ -14,6 +14,13 @@ export function validateTwilioCredentials(credentials) { const errors = []; + if (!credentials || typeof credentials !== 'object' || Array.isArray(credentials)) { + return { + valid: false, + errors: ['Credentials object is required'] + }; + } + // Validate Account SID if (!credentials.accountSid) { errors.push('Account SID is required'); @@ -120,4 +127,4 @@ export function getSMSErrorDetails(error) { twilioErrorCode, originalError: errorMessage }; -} \ No newline at end of file +} diff --git a/tests/twilio-validator.test.js b/tests/twilio-validator.test.js index 27dbf92..2ba1bec 100644 --- a/tests/twilio-validator.test.js +++ b/tests/twilio-validator.test.js @@ -13,6 +13,13 @@ import { describe('Twilio Validator', () => { describe('validateTwilioCredentials', () => { + it('should return validation errors for missing credential objects', () => { + const result = validateTwilioCredentials(null); + + assert.strictEqual(result.valid, false); + assert.ok(result.errors.some(e => e.includes('Credentials object'))); + }); + it('should validate correct credentials', () => { const result = validateTwilioCredentials({ accountSid: 'AC' + '1'.repeat(32), @@ -142,4 +149,4 @@ describe('Twilio Validator', () => { assert.ok(details.userMessage.includes('Failed to send SMS')); }); }); -}); \ No newline at end of file +});