Skip to content

fix: Correct our return types when sending SMS #743

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 30, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ describe('SMS Partial Failure Error', () => {
test('can get messages', async () => {
const resp = {
'message-count': '2',
messageCount: 2,
messages: [
{
to: '447700900000',
Expand Down
39 changes: 39 additions & 0 deletions packages/sms/__tests__/sms.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,5 +60,44 @@ describe('SMS', () => {
text: 'Sample SMS Text',
})
expect(results['message-count']).toEqual('1')
expect(results.messageCount).toEqual(1)
for (let i = 0; i < results.messages.length; i++) {
expect(resp.messages[i].to).toEqual(results.messages[i].to)
expect(resp.messages[i]['message-id']).toEqual(
results.messages[i].messageId
)
expect(resp.messages[i]['message-id']).toEqual(
results.messages[i]['message-id']
)
expect(resp.messages[i].status).toEqual(results.messages[i].status)
expect(resp.messages[i]['remaining-balance']).toEqual(
results.messages[i].remainingBalance
)
expect(resp.messages[i]['remaining-balance']).toEqual(
results.messages[i]['remaining-balance']
)
expect(resp.messages[i]['message-price']).toEqual(
results.messages[i].messagePrice
)
expect(resp.messages[i]['message-price']).toEqual(
results.messages[i]['message-price']
)
expect(resp.messages[i].network).toEqual(
results.messages[i].network
)
expect(resp.messages[i]['client-ref']).toEqual(
results.messages[i]['client-ref']
)
expect(resp.messages[i]['client-ref']).toEqual(
results.messages[i].clientRef
)
expect(resp.messages[i]['account-ref']).toEqual(
results.messages[i].accountRef
)
expect(resp.messages[i]['account-ref']).toEqual(
results.messages[i]['account-ref']
)
}
expect(results.messageCount).toEqual(1)
})
})
35 changes: 30 additions & 5 deletions packages/sms/lib/sms.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Client } from '@vonage/server-client'
import { MessageSendAllFailure } from './classes/Error/MessageSendAllFailure'
import { MessageSendPartialFailure } from './classes/Error/MessageSendPartialFailure'
import { SMSParams, SendSMSResponse } from './types'
import { SMSParams, SendSMSResponse, Message } from './types'

export class SMS extends Client {
public async send(params?: SMSParams): Promise<SendSMSResponse> {
Expand All @@ -12,26 +12,51 @@ export class SMS extends Client {

let failures: number = 0
const messageCount: number = parseInt(resp.data['message-count'], 10)
const messageData: SendSMSResponse = {
messageCount,
'message-count': resp.data['message-count'],
messages: [],
}
for (const element of resp.data.messages) {
const message: Message = element
if (element['message-id']) {
message.messageId = element['message-id']
}
if (element['remaining-balance']) {
message.remainingBalance = element['remaining-balance']
}
if (element['message-price']) {
message.messagePrice = element['message-price']
}
if (element['client-ref']) {
message.clientRef = element['client-ref']
}
if (element['account-ref']) {
message.accountRef = element['account-ref']
}
messageData.messages.push(message)
}

for (let i = 0; i < messageCount; i++) {
if (resp.data.messages[i].status !== '0') {
if (messageData.messages[i].status !== '0') {
failures++
}
}

if (failures === messageCount) {
throw new MessageSendAllFailure(
'All SMS messages failed to send',
resp.data
messageData
)
}

if (failures > 0) {
throw new MessageSendPartialFailure(
'Some SMS messages failed to send',
resp.data
messageData
)
}

return resp.data
return messageData
}
}
24 changes: 24 additions & 0 deletions packages/sms/lib/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ export interface SMSGeneralResponse {
}

export interface SendSMSResponse {
/**
* @deprecated Use messageCount instead
*/
'message-count': string
messageCount: number
messages: Message[]
}

Expand Down Expand Up @@ -78,12 +82,32 @@ export interface InboundMessage {
export interface Message {
to?: string
messageId?: string
/**
* @deprecated Use messageId instead
*/
'message-id'?: string
status?: string
remainingBalance?: string
/**
* @deprecated Use remainingBalance instead
*/
'remaining-balance'?: string
messagePrice?: string
/**
* @deprecated Use messagePrice
*/
'message-price'?: string
network?: string
clientRef?: string
/**
* @deprecated Use clientRef instead
*/
'client-ref'?: string
accountRef?: string
/**
* @deprecated Use accountRef instead
*/
'account-ref'?: string
}

export interface ModelError {
Expand Down