Skip to content

Commit 3625f27

Browse files
committed
fix(triggers): attach Twilio auth fields to both triggers so status callbacks are verified
The Account SID / Auth Token fields were only on the primary trigger, so deploying twilio_sms_status alone never captured authToken into providerConfig and signature verification was silently skipped. Following the incident.io / Rootly / RevenueCat pattern, the auth fields are now added to each trigger conditioned on its own selectedTriggerId; the shared inner subBlock IDs keep the values persisted across trigger types.
1 parent 26eafda commit 3625f27

3 files changed

Lines changed: 9 additions & 9 deletions

File tree

‎apps/sim/triggers/twilio/sms-received.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export const twilioSmsReceivedTrigger: TriggerConfig = {
2121
triggerOptions: twilioSmsTriggerOptions,
2222
includeDropdown: true,
2323
setupInstructions: twilioSmsReceivedInstructions(),
24-
extraFields: buildTwilioSmsAuthFields(),
24+
extraFields: buildTwilioSmsAuthFields('twilio_sms_received'),
2525
}),
2626

2727
outputs: buildTwilioSmsOutputs(),

‎apps/sim/triggers/twilio/sms-status.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { TwilioIcon } from '@/components/icons'
22
import { buildTriggerSubBlocks } from '@/triggers'
33
import {
4+
buildTwilioSmsAuthFields,
45
buildTwilioSmsOutputs,
56
twilioSmsStatusInstructions,
67
twilioSmsTriggerOptions,
@@ -19,6 +20,7 @@ export const twilioSmsStatusTrigger: TriggerConfig = {
1920
triggerId: 'twilio_sms_status',
2021
triggerOptions: twilioSmsTriggerOptions,
2122
setupInstructions: twilioSmsStatusInstructions(),
23+
extraFields: buildTwilioSmsAuthFields('twilio_sms_status'),
2224
}),
2325

2426
outputs: buildTwilioSmsOutputs(),

‎apps/sim/triggers/twilio/utils.ts‎

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
11
import type { SubBlockConfig } from '@/blocks/types'
22
import type { TriggerOutput } from '@/triggers/types'
33

4-
/** All Twilio SMS trigger IDs, used to share auth fields across both triggers. */
5-
export const TWILIO_SMS_TRIGGER_IDS = ['twilio_sms_received', 'twilio_sms_status'] as const
6-
74
export const twilioSmsTriggerOptions = [
85
{ label: 'SMS Received', id: 'twilio_sms_received' },
96
{ label: 'Message Status', id: 'twilio_sms_status' },
107
]
118

129
/**
13-
* Shared Account SID + Auth Token fields. Rendered only by the primary trigger
14-
* (with a condition covering both trigger IDs) so the fields are not duplicated
15-
* when both triggers' subBlocks are spread into the block.
10+
* Account SID + Auth Token fields, used to verify the `X-Twilio-Signature`
11+
* header. Added to each trigger (conditioned on its own `selectedTriggerId`) so
12+
* the values are captured into `providerConfig` whichever trigger is deployed —
13+
* the inner subBlock IDs stay shared so the values persist across trigger types.
1614
*/
17-
export function buildTwilioSmsAuthFields(): SubBlockConfig[] {
15+
export function buildTwilioSmsAuthFields(triggerId: string): SubBlockConfig[] {
1816
const condition = {
1917
field: 'selectedTriggerId',
20-
value: [...TWILIO_SMS_TRIGGER_IDS],
18+
value: triggerId,
2119
}
2220
return [
2321
{

0 commit comments

Comments
 (0)