@memberjunction/communication-twilio 5.49.0 → 5.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/TwilioProvider.d.ts +67 -1
- package/dist/TwilioProvider.d.ts.map +1 -1
- package/dist/TwilioProvider.js +216 -1
- package/dist/TwilioProvider.js.map +1 -1
- package/dist/__tests__/Subscriptions.test.d.ts +2 -0
- package/dist/__tests__/Subscriptions.test.d.ts.map +1 -0
- package/dist/__tests__/Subscriptions.test.js +258 -0
- package/dist/__tests__/Subscriptions.test.js.map +1 -0
- package/package.json +4 -4
package/dist/TwilioProvider.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BaseCommunicationProvider, CreateDraftParams, CreateDraftResult, ForwardMessageParams, ForwardMessageResult, GetMessagesParams, GetMessagesResult, MessageResult, ProcessedMessage, ProviderCredentialsBase, ReplyToMessageParams, ReplyToMessageResult, ProviderOperation } from "@memberjunction/communication-types";
|
|
1
|
+
import { BaseCommunicationProvider, BaseMessageResult, CreateDraftParams, CreateDraftResult, CreateSubscriptionParams, DeleteSubscriptionParams, ForwardMessageParams, ForwardMessageResult, GetMessagesParams, GetMessagesResult, MessageResult, ParseNotificationResult, ProcessedMessage, ProviderCredentialsBase, ReplyToMessageParams, ReplyToMessageResult, SubscriptionCapabilities, SubscriptionResult, WebhookNotificationInput, ProviderOperation } from "@memberjunction/communication-types";
|
|
2
2
|
/**
|
|
3
3
|
* Credentials for Twilio provider.
|
|
4
4
|
* Extend ProviderCredentialsBase to support per-request credential override.
|
|
@@ -98,5 +98,71 @@ export declare class TwilioProvider extends BaseCommunicationProvider {
|
|
|
98
98
|
* @param credentials - Optional credentials (not used for Twilio)
|
|
99
99
|
*/
|
|
100
100
|
CreateDraft(params: CreateDraftParams, credentials?: TwilioCredentials): Promise<CreateDraftResult>;
|
|
101
|
+
/**
|
|
102
|
+
* Detects whether a Twilio SDK error represents a not-found condition, treated as
|
|
103
|
+
* success by the idempotent {@link DeleteSubscription}. Twilio surfaces this as HTTP
|
|
104
|
+
* status 404 and/or Twilio error code 20404.
|
|
105
|
+
*/
|
|
106
|
+
private isNotFoundError;
|
|
107
|
+
/**
|
|
108
|
+
* Resolves {@link CreateSubscriptionParams.Identifier} to a phone-number SID. An
|
|
109
|
+
* identifier beginning with `PN` is already a SID and is returned verbatim (no network
|
|
110
|
+
* call). Otherwise it is treated as an E.164 number and looked up via
|
|
111
|
+
* `incomingPhoneNumbers.list`, returning the first matching number's SID or `null` when
|
|
112
|
+
* the account owns no such number.
|
|
113
|
+
*/
|
|
114
|
+
private resolvePhoneNumberSid;
|
|
115
|
+
/**
|
|
116
|
+
* Points a phone number's inbound-SMS webhook (`smsUrl`) at the consumer's endpoint,
|
|
117
|
+
* making Twilio deliver inbound SMS notifications there. The number must belong to the
|
|
118
|
+
* authenticated account.
|
|
119
|
+
*
|
|
120
|
+
* Fail-fast: {@link CreateSubscriptionParams.NotificationUrl} must be https and
|
|
121
|
+
* {@link CreateSubscriptionParams.Identifier} (an E.164 number like `+15551234567` or a
|
|
122
|
+
* phone-number SID like `PN...`) must be provided.
|
|
123
|
+
*
|
|
124
|
+
* @param params - Identifier (target number/SID) and NotificationUrl (webhook target)
|
|
125
|
+
* @param credentials - Optional account credentials override for this request
|
|
126
|
+
* @returns Promise<SubscriptionResult> - SubscriptionID = the phone-number SID;
|
|
127
|
+
* ExpiresAt is undefined because Twilio webhooks never expire
|
|
128
|
+
*/
|
|
129
|
+
CreateSubscription(params: CreateSubscriptionParams, credentials?: TwilioCredentials): Promise<SubscriptionResult>;
|
|
130
|
+
/**
|
|
131
|
+
* Clears a phone number's inbound-SMS webhook, so Twilio stops delivering inbound SMS
|
|
132
|
+
* notifications for it. Idempotent from the consumer's perspective: a not-found
|
|
133
|
+
* (HTTP 404 / Twilio code 20404) is treated as success.
|
|
134
|
+
*
|
|
135
|
+
* @param params - SubscriptionID = the phone-number SID returned by CreateSubscription
|
|
136
|
+
* @param credentials - Optional account credentials override for this request
|
|
137
|
+
* @returns Promise<BaseMessageResult> - Result of the delete operation
|
|
138
|
+
*/
|
|
139
|
+
DeleteSubscription(params: DeleteSubscriptionParams, credentials?: TwilioCredentials): Promise<BaseMessageResult>;
|
|
140
|
+
/**
|
|
141
|
+
* Parses and verifies an inbound Twilio SMS webhook. Pure: no Twilio client, no network.
|
|
142
|
+
* Safe on hostile/garbage input — never throws; returns `Success: false` with a 400
|
|
143
|
+
* suggested status when the body cannot be parsed at all.
|
|
144
|
+
*
|
|
145
|
+
* Twilio posts `application/x-www-form-urlencoded`. The `X-Twilio-Signature` header is
|
|
146
|
+
* verified via the SDK's `validateRequest(authToken, signature, url, params)` using the
|
|
147
|
+
* account Auth Token (the "Messaging webhook signature" secret). The parsed notification
|
|
148
|
+
* is ALWAYS returned even when the signature is invalid — the flag is set so the consumer
|
|
149
|
+
* can decide — but an unparseable body is the 400 case.
|
|
150
|
+
*
|
|
151
|
+
* INLINE mode: the webhook carries the full message, so {@link NormalizedNotification.Message}
|
|
152
|
+
* is populated and consumers need not re-fetch. `MessageSid` is also surfaced in
|
|
153
|
+
* {@link NormalizedNotification.MessageIDs} as a still-useful pointer.
|
|
154
|
+
*
|
|
155
|
+
* @param input - Transport-neutral capture of the inbound webhook request
|
|
156
|
+
* @param credentials - Optional account credentials override (for signature verification)
|
|
157
|
+
* @returns Promise<ParseNotificationResult> - The normalized inbound message + signature outcome
|
|
158
|
+
*/
|
|
159
|
+
ParseNotification(input: WebhookNotificationInput, credentials?: TwilioCredentials): Promise<ParseNotificationResult>;
|
|
160
|
+
/**
|
|
161
|
+
* Returns Twilio's subscription capabilities. Twilio is an INLINE-payload, inbound-parse
|
|
162
|
+
* provider: webhooks never expire (no renewal), only `created` notifications are
|
|
163
|
+
* delivered, no endpoint-validation handshake is performed, management is supported
|
|
164
|
+
* (pointing/clearing a number's `smsUrl`), and the full message is delivered inline.
|
|
165
|
+
*/
|
|
166
|
+
GetSubscriptionCapabilities(): SubscriptionCapabilities;
|
|
101
167
|
}
|
|
102
168
|
//# sourceMappingURL=TwilioProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwilioProvider.d.ts","sourceRoot":"","sources":["../src/TwilioProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"TwilioProvider.d.ts","sourceRoot":"","sources":["../src/TwilioProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EAEpB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EAEb,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EAEpB,wBAAwB,EACxB,kBAAkB,EAElB,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,qCAAqC,CAAC;AAM7C;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAkB,SAAQ,uBAAuB;IAChE,yBAAyB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAaD;;GAEG;AACH,qBACa,cAAe,SAAQ,yBAAyB;IAC3D,uDAAuD;IACvD,OAAO,CAAC,eAAe,CAAuB;IAE9C;;;;;OAKG;IACH,OAAO,CAAC,WAAW,CAGhB;IAEH;;;;OAIG;IACa,sBAAsB,IAAI,iBAAiB,EAAE;IAkB7D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyB1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAkBhB;;;;;;OAMG;IACU,iBAAiB,CAC5B,OAAO,EAAE,gBAAgB,EACzB,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,aAAa,CAAC;IA6EzB;;;;;;OAMG;IACU,WAAW,CACtB,MAAM,EAAE,iBAAiB,EACzB,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,iBAAiB,CAAC;IAuD7B;;;;;;OAMG;IACU,cAAc,CACzB,MAAM,EAAE,oBAAoB,EAC5B,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IAkEhC;;;;;;;;OAQG;IACU,cAAc,CACzB,MAAM,EAAE,oBAAoB,EAC5B,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IA2DhC;;;;OAIG;IACU,WAAW,CACtB,MAAM,EAAE,iBAAiB,EACzB,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,iBAAiB,CAAC;IAuB7B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAQvB;;;;;;OAMG;YACW,qBAAqB;IAQnC;;;;;;;;;;;;;OAaG;IACmB,kBAAkB,CACtC,MAAM,EAAE,wBAAwB,EAChC,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,kBAAkB,CAAC;IAyC9B;;;;;;;;OAQG;IACmB,kBAAkB,CACtC,MAAM,EAAE,wBAAwB,EAChC,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,iBAAiB,CAAC;IAmB7B;;;;;;;;;;;;;;;;;;OAkBG;IACmB,iBAAiB,CACrC,KAAK,EAAE,wBAAwB,EAC/B,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,uBAAuB,CAAC;IAyDnC;;;;;OAKG;IACa,2BAA2B,IAAI,wBAAwB;CASxE"}
|
package/dist/TwilioProvider.js
CHANGED
|
@@ -38,8 +38,15 @@ let TwilioProvider = class TwilioProvider extends BaseCommunicationProvider {
|
|
|
38
38
|
'SendSingleMessage',
|
|
39
39
|
'GetMessages',
|
|
40
40
|
'ForwardMessage',
|
|
41
|
-
'ReplyToMessage'
|
|
41
|
+
'ReplyToMessage',
|
|
42
|
+
// Push-notification subscriptions (inbound-parse mode). Twilio's "subscription" is
|
|
43
|
+
// pointing a phone number's inbound SMS webhook at the consumer's URL. Webhooks never
|
|
44
|
+
// expire, so RenewSubscription is intentionally NOT supported.
|
|
45
|
+
'CreateSubscription',
|
|
46
|
+
'DeleteSubscription',
|
|
47
|
+
'ParseNotification'
|
|
42
48
|
// Note: CreateDraft is NOT supported - Twilio is real-time messaging only
|
|
49
|
+
// Note: RenewSubscription is NOT supported - Twilio webhooks never expire
|
|
43
50
|
// Mailbox operations (folders, archive, attachments) are not applicable to SMS/messaging
|
|
44
51
|
];
|
|
45
52
|
}
|
|
@@ -396,6 +403,214 @@ let TwilioProvider = class TwilioProvider extends BaseCommunicationProvider {
|
|
|
396
403
|
ErrorMessage: 'Twilio does not support creating draft messages. Drafts are only supported by email providers with mailbox access (Gmail, MS Graph).'
|
|
397
404
|
};
|
|
398
405
|
}
|
|
406
|
+
// ========================================================================
|
|
407
|
+
// PUSH-NOTIFICATION SUBSCRIPTIONS (inbound-parse mode)
|
|
408
|
+
//
|
|
409
|
+
// Twilio has no "subscription" resource. Instead, each phone number owned by the
|
|
410
|
+
// account carries an inbound-SMS webhook (`smsUrl`); Twilio POSTs an
|
|
411
|
+
// application/x-www-form-urlencoded body carrying the FULL inbound message to that URL
|
|
412
|
+
// whenever an SMS arrives. So a "subscription" here is simply pointing a number's
|
|
413
|
+
// `smsUrl` at the consumer's endpoint, and "deleting" it is clearing that URL. These
|
|
414
|
+
// registrations never expire — hence no RenewSubscription.
|
|
415
|
+
//
|
|
416
|
+
// AUTH NOTE: CreateSubscription/DeleteSubscription ride the account credentials (Account
|
|
417
|
+
// SID + Auth Token) and require the target phone number to belong to that account.
|
|
418
|
+
// ParseNotification verifies the inbound webhook's `X-Twilio-Signature` using the same
|
|
419
|
+
// account Auth Token (the "Messaging webhook signature" secret).
|
|
420
|
+
// ========================================================================
|
|
421
|
+
/**
|
|
422
|
+
* Detects whether a Twilio SDK error represents a not-found condition, treated as
|
|
423
|
+
* success by the idempotent {@link DeleteSubscription}. Twilio surfaces this as HTTP
|
|
424
|
+
* status 404 and/or Twilio error code 20404.
|
|
425
|
+
*/
|
|
426
|
+
isNotFoundError(error) {
|
|
427
|
+
if (error && typeof error === 'object') {
|
|
428
|
+
const e = error;
|
|
429
|
+
return e.status === 404 || e.code === 20404;
|
|
430
|
+
}
|
|
431
|
+
return false;
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Resolves {@link CreateSubscriptionParams.Identifier} to a phone-number SID. An
|
|
435
|
+
* identifier beginning with `PN` is already a SID and is returned verbatim (no network
|
|
436
|
+
* call). Otherwise it is treated as an E.164 number and looked up via
|
|
437
|
+
* `incomingPhoneNumbers.list`, returning the first matching number's SID or `null` when
|
|
438
|
+
* the account owns no such number.
|
|
439
|
+
*/
|
|
440
|
+
async resolvePhoneNumberSid(client, identifier) {
|
|
441
|
+
if (identifier.startsWith('PN')) {
|
|
442
|
+
return identifier;
|
|
443
|
+
}
|
|
444
|
+
const matches = await client.incomingPhoneNumbers.list({ phoneNumber: identifier, limit: 1 });
|
|
445
|
+
return matches.length > 0 ? matches[0].sid : null;
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Points a phone number's inbound-SMS webhook (`smsUrl`) at the consumer's endpoint,
|
|
449
|
+
* making Twilio deliver inbound SMS notifications there. The number must belong to the
|
|
450
|
+
* authenticated account.
|
|
451
|
+
*
|
|
452
|
+
* Fail-fast: {@link CreateSubscriptionParams.NotificationUrl} must be https and
|
|
453
|
+
* {@link CreateSubscriptionParams.Identifier} (an E.164 number like `+15551234567` or a
|
|
454
|
+
* phone-number SID like `PN...`) must be provided.
|
|
455
|
+
*
|
|
456
|
+
* @param params - Identifier (target number/SID) and NotificationUrl (webhook target)
|
|
457
|
+
* @param credentials - Optional account credentials override for this request
|
|
458
|
+
* @returns Promise<SubscriptionResult> - SubscriptionID = the phone-number SID;
|
|
459
|
+
* ExpiresAt is undefined because Twilio webhooks never expire
|
|
460
|
+
*/
|
|
461
|
+
async CreateSubscription(params, credentials) {
|
|
462
|
+
// Fail-fast input validation (before any Twilio call).
|
|
463
|
+
if (!params.Identifier) {
|
|
464
|
+
return { Success: false, ErrorMessage: 'CreateSubscription requires an Identifier (an E.164 phone number or a phone-number SID)' };
|
|
465
|
+
}
|
|
466
|
+
if (!params.NotificationUrl || !params.NotificationUrl.toLowerCase().startsWith('https://')) {
|
|
467
|
+
return { Success: false, ErrorMessage: 'NotificationUrl must be an https:// URL' };
|
|
468
|
+
}
|
|
469
|
+
try {
|
|
470
|
+
const creds = this.resolveCredentials(credentials);
|
|
471
|
+
const client = this.getTwilioClient(creds);
|
|
472
|
+
const sid = await this.resolvePhoneNumberSid(client, params.Identifier);
|
|
473
|
+
if (!sid) {
|
|
474
|
+
return {
|
|
475
|
+
Success: false,
|
|
476
|
+
ErrorMessage: `No phone number matching '${params.Identifier}' found on this Twilio account`
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
const result = await client.incomingPhoneNumbers(sid).update({
|
|
480
|
+
smsUrl: params.NotificationUrl,
|
|
481
|
+
smsMethod: 'POST'
|
|
482
|
+
});
|
|
483
|
+
return {
|
|
484
|
+
Success: true,
|
|
485
|
+
SubscriptionID: sid,
|
|
486
|
+
ExpiresAt: undefined, // Twilio webhooks never expire
|
|
487
|
+
Result: result
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
catch (error) {
|
|
491
|
+
LogError('Error creating subscription via Twilio', undefined, error);
|
|
492
|
+
return {
|
|
493
|
+
Success: false,
|
|
494
|
+
ErrorMessage: `Error creating subscription: ${error instanceof Error ? error.message : String(error)}`
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Clears a phone number's inbound-SMS webhook, so Twilio stops delivering inbound SMS
|
|
500
|
+
* notifications for it. Idempotent from the consumer's perspective: a not-found
|
|
501
|
+
* (HTTP 404 / Twilio code 20404) is treated as success.
|
|
502
|
+
*
|
|
503
|
+
* @param params - SubscriptionID = the phone-number SID returned by CreateSubscription
|
|
504
|
+
* @param credentials - Optional account credentials override for this request
|
|
505
|
+
* @returns Promise<BaseMessageResult> - Result of the delete operation
|
|
506
|
+
*/
|
|
507
|
+
async DeleteSubscription(params, credentials) {
|
|
508
|
+
try {
|
|
509
|
+
const creds = this.resolveCredentials(credentials);
|
|
510
|
+
const client = this.getTwilioClient(creds);
|
|
511
|
+
await client.incomingPhoneNumbers(params.SubscriptionID).update({ smsUrl: '' });
|
|
512
|
+
return { Success: true };
|
|
513
|
+
}
|
|
514
|
+
catch (error) {
|
|
515
|
+
if (this.isNotFoundError(error)) {
|
|
516
|
+
// Already gone - deletion is idempotent from the consumer's perspective.
|
|
517
|
+
return { Success: true };
|
|
518
|
+
}
|
|
519
|
+
LogError('Error deleting subscription via Twilio', undefined, error);
|
|
520
|
+
return {
|
|
521
|
+
Success: false,
|
|
522
|
+
ErrorMessage: `Error deleting subscription: ${error instanceof Error ? error.message : String(error)}`
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Parses and verifies an inbound Twilio SMS webhook. Pure: no Twilio client, no network.
|
|
528
|
+
* Safe on hostile/garbage input — never throws; returns `Success: false` with a 400
|
|
529
|
+
* suggested status when the body cannot be parsed at all.
|
|
530
|
+
*
|
|
531
|
+
* Twilio posts `application/x-www-form-urlencoded`. The `X-Twilio-Signature` header is
|
|
532
|
+
* verified via the SDK's `validateRequest(authToken, signature, url, params)` using the
|
|
533
|
+
* account Auth Token (the "Messaging webhook signature" secret). The parsed notification
|
|
534
|
+
* is ALWAYS returned even when the signature is invalid — the flag is set so the consumer
|
|
535
|
+
* can decide — but an unparseable body is the 400 case.
|
|
536
|
+
*
|
|
537
|
+
* INLINE mode: the webhook carries the full message, so {@link NormalizedNotification.Message}
|
|
538
|
+
* is populated and consumers need not re-fetch. `MessageSid` is also surfaced in
|
|
539
|
+
* {@link NormalizedNotification.MessageIDs} as a still-useful pointer.
|
|
540
|
+
*
|
|
541
|
+
* @param input - Transport-neutral capture of the inbound webhook request
|
|
542
|
+
* @param credentials - Optional account credentials override (for signature verification)
|
|
543
|
+
* @returns Promise<ParseNotificationResult> - The normalized inbound message + signature outcome
|
|
544
|
+
*/
|
|
545
|
+
async ParseNotification(input, credentials) {
|
|
546
|
+
// Parse the urlencoded body. Never throw on bad input.
|
|
547
|
+
let params;
|
|
548
|
+
try {
|
|
549
|
+
if (!input?.RawBody) {
|
|
550
|
+
throw new Error('empty body');
|
|
551
|
+
}
|
|
552
|
+
params = Object.fromEntries(new URLSearchParams(input.RawBody));
|
|
553
|
+
if (Object.keys(params).length === 0) {
|
|
554
|
+
throw new Error('no parameters parsed from body');
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
catch (error) {
|
|
558
|
+
return {
|
|
559
|
+
Success: false,
|
|
560
|
+
ErrorMessage: `Malformed Twilio notification body: ${error instanceof Error ? error.message : String(error)}`,
|
|
561
|
+
Notifications: [],
|
|
562
|
+
SuggestedResponseStatus: 400
|
|
563
|
+
};
|
|
564
|
+
}
|
|
565
|
+
// Verify the Twilio signature (pure crypto, no network). Resolve the account Auth Token
|
|
566
|
+
// for the HMAC secret; on missing/invalid credentials treat the signature as invalid
|
|
567
|
+
// rather than throwing — the notification is still returned for the consumer to judge.
|
|
568
|
+
let signatureValid = false;
|
|
569
|
+
try {
|
|
570
|
+
const creds = this.resolveCredentials(credentials);
|
|
571
|
+
const signatureHeader = input.Headers?.['x-twilio-signature'] ?? '';
|
|
572
|
+
const url = input.RequestUrl ?? '';
|
|
573
|
+
signatureValid = twilio.validateRequest(creds.authToken, signatureHeader, url, params);
|
|
574
|
+
}
|
|
575
|
+
catch (error) {
|
|
576
|
+
LogError('Error verifying Twilio signature', undefined, error);
|
|
577
|
+
signatureValid = false;
|
|
578
|
+
}
|
|
579
|
+
const message = {
|
|
580
|
+
From: params.From ?? '',
|
|
581
|
+
To: params.To ?? '',
|
|
582
|
+
Body: params.Body ?? ''
|
|
583
|
+
};
|
|
584
|
+
const notification = {
|
|
585
|
+
Kind: 'message',
|
|
586
|
+
ChangeType: 'created',
|
|
587
|
+
MessageIDs: params.MessageSid ? [params.MessageSid] : [],
|
|
588
|
+
Identifier: params.To,
|
|
589
|
+
Message: message, // INLINE payload
|
|
590
|
+
RawData: params
|
|
591
|
+
};
|
|
592
|
+
return {
|
|
593
|
+
Success: true,
|
|
594
|
+
SignatureValid: signatureValid,
|
|
595
|
+
Notifications: [notification],
|
|
596
|
+
SuggestedResponseStatus: 200
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Returns Twilio's subscription capabilities. Twilio is an INLINE-payload, inbound-parse
|
|
601
|
+
* provider: webhooks never expire (no renewal), only `created` notifications are
|
|
602
|
+
* delivered, no endpoint-validation handshake is performed, management is supported
|
|
603
|
+
* (pointing/clearing a number's `smsUrl`), and the full message is delivered inline.
|
|
604
|
+
*/
|
|
605
|
+
GetSubscriptionCapabilities() {
|
|
606
|
+
return {
|
|
607
|
+
MaxLifetimeMinutes: undefined, // Twilio webhooks never expire
|
|
608
|
+
SupportedChangeTypes: ['created'],
|
|
609
|
+
RequiresEndpointValidation: false,
|
|
610
|
+
SupportsSubscriptionManagement: true,
|
|
611
|
+
DeliversPayloadInline: true
|
|
612
|
+
};
|
|
613
|
+
}
|
|
399
614
|
};
|
|
400
615
|
TwilioProvider = __decorate([
|
|
401
616
|
RegisterClass(BaseCommunicationProvider, 'Twilio')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwilioProvider.js","sourceRoot":"","sources":["../src/TwilioProvider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TwilioProvider.js","sourceRoot":"","sources":["../src/TwilioProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Subscriptions.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/Subscriptions.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the Twilio provider's push-notification subscription support
|
|
3
|
+
* (inbound-parse mode): getSupportedOperations, SupportsPush, subscription capabilities,
|
|
4
|
+
* CreateSubscription / DeleteSubscription, and ParseNotification.
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Mocks
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
const { mockPnList, mockPnUpdate, mockIncomingPhoneNumbers, mockValidateRequest } = vi.hoisted(() => {
|
|
11
|
+
const mockPnList = vi.fn();
|
|
12
|
+
const mockPnUpdate = vi.fn();
|
|
13
|
+
// incomingPhoneNumbers is callable (returns a context with update()) AND has a list() method,
|
|
14
|
+
// mirroring the Twilio SDK's IncomingPhoneNumberListInstance shape.
|
|
15
|
+
const mockIncomingPhoneNumbers = Object.assign(vi.fn(() => ({ update: mockPnUpdate })), { list: mockPnList });
|
|
16
|
+
const mockValidateRequest = vi.fn();
|
|
17
|
+
return { mockPnList, mockPnUpdate, mockIncomingPhoneNumbers, mockValidateRequest };
|
|
18
|
+
});
|
|
19
|
+
// Mock dotenv
|
|
20
|
+
vi.mock('dotenv', () => ({
|
|
21
|
+
default: { config: vi.fn() },
|
|
22
|
+
}));
|
|
23
|
+
// Mock config.ts directly to avoid dotenv import issues
|
|
24
|
+
vi.mock('../config', () => ({
|
|
25
|
+
TWILIO_ACCOUNT_SID: 'test-account-sid',
|
|
26
|
+
TWILIO_AUTH_TOKEN: 'test-auth-token',
|
|
27
|
+
TWILIO_PHONE_NUMBER: '+15551234567',
|
|
28
|
+
TWILIO_WHATSAPP_NUMBER: '+15559876543',
|
|
29
|
+
TWILIO_FACEBOOK_PAGE_ID: 'fb-page-123',
|
|
30
|
+
}));
|
|
31
|
+
vi.mock('twilio', () => {
|
|
32
|
+
const twilioFn = vi.fn().mockReturnValue({
|
|
33
|
+
incomingPhoneNumbers: mockIncomingPhoneNumbers,
|
|
34
|
+
});
|
|
35
|
+
// twilio.validateRequest is a static on the default export namespace.
|
|
36
|
+
return {
|
|
37
|
+
default: Object.assign(twilioFn, { validateRequest: mockValidateRequest }),
|
|
38
|
+
Twilio: class {
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
vi.mock('@memberjunction/communication-types', () => ({
|
|
43
|
+
BaseCommunicationProvider: class {
|
|
44
|
+
getSupportedOperations() { return []; }
|
|
45
|
+
GetSubscriptionCapabilities() { return undefined; }
|
|
46
|
+
// SupportsPush derives from GetSubscriptionCapabilities, as in the real base class.
|
|
47
|
+
get SupportsPush() { return this.GetSubscriptionCapabilities() !== undefined; }
|
|
48
|
+
},
|
|
49
|
+
resolveCredentialValue: (requestVal, envVal, disableFallback) => {
|
|
50
|
+
if (requestVal)
|
|
51
|
+
return requestVal;
|
|
52
|
+
if (!disableFallback && envVal)
|
|
53
|
+
return envVal;
|
|
54
|
+
return undefined;
|
|
55
|
+
},
|
|
56
|
+
validateRequiredCredentials: (creds, required, provider) => {
|
|
57
|
+
for (const key of required) {
|
|
58
|
+
if (!creds[key])
|
|
59
|
+
throw new Error(`${provider}: Missing required credential: ${key}`);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
}));
|
|
63
|
+
vi.mock('@memberjunction/global', async (importOriginal) => {
|
|
64
|
+
const actual = await importOriginal();
|
|
65
|
+
return {
|
|
66
|
+
...actual,
|
|
67
|
+
RegisterClass: () => (target) => target,
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
vi.mock('@memberjunction/core', () => ({
|
|
71
|
+
LogError: vi.fn(),
|
|
72
|
+
LogStatus: vi.fn(),
|
|
73
|
+
}));
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// Import after mocks
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
import { TwilioProvider } from '../TwilioProvider.js';
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
// Tests
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
describe('TwilioProvider — push subscriptions', () => {
|
|
82
|
+
let provider;
|
|
83
|
+
beforeEach(() => {
|
|
84
|
+
vi.clearAllMocks();
|
|
85
|
+
provider = new TwilioProvider();
|
|
86
|
+
});
|
|
87
|
+
describe('getSupportedOperations (subscriptions)', () => {
|
|
88
|
+
it('includes CreateSubscription, DeleteSubscription and ParseNotification, but NOT RenewSubscription', () => {
|
|
89
|
+
const ops = provider.getSupportedOperations();
|
|
90
|
+
expect(ops).toContain('CreateSubscription');
|
|
91
|
+
expect(ops).toContain('DeleteSubscription');
|
|
92
|
+
expect(ops).toContain('ParseNotification');
|
|
93
|
+
expect(ops).not.toContain('RenewSubscription');
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
describe('SupportsPush', () => {
|
|
97
|
+
it('is true (derived from GetSubscriptionCapabilities)', () => {
|
|
98
|
+
expect(provider.SupportsPush).toBe(true);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
describe('GetSubscriptionCapabilities', () => {
|
|
102
|
+
it('describes an inline-payload, non-expiring, managed provider', () => {
|
|
103
|
+
const caps = provider.GetSubscriptionCapabilities();
|
|
104
|
+
expect(caps).toEqual({
|
|
105
|
+
MaxLifetimeMinutes: undefined,
|
|
106
|
+
SupportedChangeTypes: ['created'],
|
|
107
|
+
RequiresEndpointValidation: false,
|
|
108
|
+
SupportsSubscriptionManagement: true,
|
|
109
|
+
DeliversPayloadInline: true,
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe('CreateSubscription', () => {
|
|
114
|
+
const baseParams = () => ({
|
|
115
|
+
ChangeTypes: ['created'],
|
|
116
|
+
NotificationUrl: 'https://api.example.com/twilio/sms',
|
|
117
|
+
ClientState: '',
|
|
118
|
+
Identifier: '+15551234567',
|
|
119
|
+
});
|
|
120
|
+
it('resolves an E.164 number to its SID then points smsUrl at the notification URL', async () => {
|
|
121
|
+
mockPnList.mockResolvedValue([{ sid: 'PN123' }]);
|
|
122
|
+
mockPnUpdate.mockResolvedValue({ sid: 'PN123', smsUrl: 'https://api.example.com/twilio/sms' });
|
|
123
|
+
const result = await provider.CreateSubscription(baseParams());
|
|
124
|
+
expect(result.Success).toBe(true);
|
|
125
|
+
expect(result.SubscriptionID).toBe('PN123');
|
|
126
|
+
expect(result.ExpiresAt).toBeUndefined(); // never expires
|
|
127
|
+
// E.164 → SID resolution happened.
|
|
128
|
+
expect(mockPnList).toHaveBeenCalledWith(expect.objectContaining({ phoneNumber: '+15551234567' }));
|
|
129
|
+
// The context was addressed by the resolved SID, and the webhook was set.
|
|
130
|
+
expect(mockIncomingPhoneNumbers).toHaveBeenCalledWith('PN123');
|
|
131
|
+
expect(mockPnUpdate).toHaveBeenCalledWith({
|
|
132
|
+
smsUrl: 'https://api.example.com/twilio/sms',
|
|
133
|
+
smsMethod: 'POST',
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
it('uses a phone-number SID (PN...) directly without a list lookup', async () => {
|
|
137
|
+
mockPnUpdate.mockResolvedValue({ sid: 'PNabc' });
|
|
138
|
+
const result = await provider.CreateSubscription({ ...baseParams(), Identifier: 'PNabc' });
|
|
139
|
+
expect(result.Success).toBe(true);
|
|
140
|
+
expect(result.SubscriptionID).toBe('PNabc');
|
|
141
|
+
expect(mockPnList).not.toHaveBeenCalled();
|
|
142
|
+
expect(mockIncomingPhoneNumbers).toHaveBeenCalledWith('PNabc');
|
|
143
|
+
});
|
|
144
|
+
it('fail-fast: rejects a non-https NotificationUrl without touching Twilio', async () => {
|
|
145
|
+
const result = await provider.CreateSubscription({
|
|
146
|
+
...baseParams(),
|
|
147
|
+
NotificationUrl: 'http://insecure.example.com/hook',
|
|
148
|
+
});
|
|
149
|
+
expect(result.Success).toBe(false);
|
|
150
|
+
expect(result.ErrorMessage).toContain('https');
|
|
151
|
+
expect(mockPnList).not.toHaveBeenCalled();
|
|
152
|
+
expect(mockPnUpdate).not.toHaveBeenCalled();
|
|
153
|
+
});
|
|
154
|
+
it('fail-fast: rejects a missing Identifier without touching Twilio', async () => {
|
|
155
|
+
const result = await provider.CreateSubscription({ ...baseParams(), Identifier: '' });
|
|
156
|
+
expect(result.Success).toBe(false);
|
|
157
|
+
expect(result.ErrorMessage).toContain('Identifier');
|
|
158
|
+
expect(mockPnList).not.toHaveBeenCalled();
|
|
159
|
+
});
|
|
160
|
+
it('fails clearly when the account owns no matching phone number', async () => {
|
|
161
|
+
mockPnList.mockResolvedValue([]);
|
|
162
|
+
const result = await provider.CreateSubscription(baseParams());
|
|
163
|
+
expect(result.Success).toBe(false);
|
|
164
|
+
expect(result.ErrorMessage).toContain('No phone number matching');
|
|
165
|
+
expect(mockPnUpdate).not.toHaveBeenCalled();
|
|
166
|
+
});
|
|
167
|
+
it('surfaces a Twilio error in ErrorMessage', async () => {
|
|
168
|
+
mockPnList.mockResolvedValue([{ sid: 'PN123' }]);
|
|
169
|
+
mockPnUpdate.mockRejectedValue(new Error('phone number not owned by account'));
|
|
170
|
+
const result = await provider.CreateSubscription(baseParams());
|
|
171
|
+
expect(result.Success).toBe(false);
|
|
172
|
+
expect(result.ErrorMessage).toContain('phone number not owned by account');
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
describe('DeleteSubscription', () => {
|
|
176
|
+
it('clears the smsUrl and returns success', async () => {
|
|
177
|
+
mockPnUpdate.mockResolvedValue({ sid: 'PN123', smsUrl: '' });
|
|
178
|
+
const result = await provider.DeleteSubscription({ SubscriptionID: 'PN123' });
|
|
179
|
+
expect(result.Success).toBe(true);
|
|
180
|
+
expect(mockIncomingPhoneNumbers).toHaveBeenCalledWith('PN123');
|
|
181
|
+
expect(mockPnUpdate).toHaveBeenCalledWith({ smsUrl: '' });
|
|
182
|
+
});
|
|
183
|
+
it('treats an HTTP 404 as success (idempotent delete)', async () => {
|
|
184
|
+
mockPnUpdate.mockRejectedValue({ status: 404 });
|
|
185
|
+
const result = await provider.DeleteSubscription({ SubscriptionID: 'already-gone' });
|
|
186
|
+
expect(result.Success).toBe(true);
|
|
187
|
+
});
|
|
188
|
+
it('treats Twilio error code 20404 as success (idempotent delete)', async () => {
|
|
189
|
+
mockPnUpdate.mockRejectedValue({ code: 20404 });
|
|
190
|
+
const result = await provider.DeleteSubscription({ SubscriptionID: 'already-gone' });
|
|
191
|
+
expect(result.Success).toBe(true);
|
|
192
|
+
});
|
|
193
|
+
it('surfaces non-not-found errors as failures', async () => {
|
|
194
|
+
mockPnUpdate.mockRejectedValue(new Error('permission denied'));
|
|
195
|
+
const result = await provider.DeleteSubscription({ SubscriptionID: 'PN123' });
|
|
196
|
+
expect(result.Success).toBe(false);
|
|
197
|
+
expect(result.ErrorMessage).toContain('permission denied');
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
describe('ParseNotification', () => {
|
|
201
|
+
const validBody = () => new URLSearchParams({
|
|
202
|
+
MessageSid: 'SM123',
|
|
203
|
+
From: '+15559998888',
|
|
204
|
+
To: '+15551234567',
|
|
205
|
+
Body: 'Hello inbound',
|
|
206
|
+
AccountSid: 'test-account-sid',
|
|
207
|
+
}).toString();
|
|
208
|
+
const buildInput = (overrides = {}) => ({
|
|
209
|
+
Headers: { 'x-twilio-signature': 'sig-abc' },
|
|
210
|
+
QueryParams: {},
|
|
211
|
+
RawBody: validBody(),
|
|
212
|
+
RequestUrl: 'https://api.example.com/twilio/sms',
|
|
213
|
+
...overrides,
|
|
214
|
+
});
|
|
215
|
+
it('parses a valid urlencoded body into a normalized notification with inline Message', async () => {
|
|
216
|
+
mockValidateRequest.mockReturnValue(true);
|
|
217
|
+
const result = await provider.ParseNotification(buildInput());
|
|
218
|
+
expect(result.Success).toBe(true);
|
|
219
|
+
expect(result.SignatureValid).toBe(true);
|
|
220
|
+
expect(result.SuggestedResponseStatus).toBe(200);
|
|
221
|
+
expect(result.Notifications).toHaveLength(1);
|
|
222
|
+
const n = result.Notifications[0];
|
|
223
|
+
expect(n.Kind).toBe('message');
|
|
224
|
+
expect(n.ChangeType).toBe('created');
|
|
225
|
+
expect(n.MessageIDs).toEqual(['SM123']); // pointer still surfaced
|
|
226
|
+
expect(n.Identifier).toBe('+15551234567');
|
|
227
|
+
// INLINE payload populated.
|
|
228
|
+
expect(n.Message).toEqual({ From: '+15559998888', To: '+15551234567', Body: 'Hello inbound' });
|
|
229
|
+
// validateRequest was called with the account auth token, header, url, and parsed params.
|
|
230
|
+
expect(mockValidateRequest).toHaveBeenCalledWith('test-auth-token', 'sig-abc', 'https://api.example.com/twilio/sms', expect.objectContaining({ MessageSid: 'SM123', Body: 'Hello inbound' }));
|
|
231
|
+
});
|
|
232
|
+
it('still returns the parsed notification when the signature is invalid', async () => {
|
|
233
|
+
mockValidateRequest.mockReturnValue(false);
|
|
234
|
+
const result = await provider.ParseNotification(buildInput({ Headers: { 'x-twilio-signature': 'bad' } }));
|
|
235
|
+
expect(result.Success).toBe(true);
|
|
236
|
+
expect(result.SignatureValid).toBe(false);
|
|
237
|
+
expect(result.Notifications).toHaveLength(1);
|
|
238
|
+
expect(result.Notifications[0].Message?.Body).toBe('Hello inbound');
|
|
239
|
+
});
|
|
240
|
+
it('returns Success:false + 400 on an empty body, without throwing', async () => {
|
|
241
|
+
const result = await provider.ParseNotification(buildInput({ RawBody: '' }));
|
|
242
|
+
expect(result.Success).toBe(false);
|
|
243
|
+
expect(result.SuggestedResponseStatus).toBe(400);
|
|
244
|
+
expect(result.Notifications).toEqual([]);
|
|
245
|
+
expect(mockValidateRequest).not.toHaveBeenCalled();
|
|
246
|
+
});
|
|
247
|
+
it('never throws on hostile/garbage input', async () => {
|
|
248
|
+
mockValidateRequest.mockReturnValue(false);
|
|
249
|
+
const garbage = ['', ' ', '&&&', '=', '%', 'not-a-query'];
|
|
250
|
+
for (const raw of garbage) {
|
|
251
|
+
const result = await provider.ParseNotification(buildInput({ RawBody: raw }));
|
|
252
|
+
expect(typeof result.Success).toBe('boolean');
|
|
253
|
+
expect(Array.isArray(result.Notifications)).toBe(true);
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
//# sourceMappingURL=Subscriptions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Subscriptions.test.js","sourceRoot":"","sources":["../../src/__tests__/Subscriptions.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/communication-twilio",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.51.0",
|
|
5
5
|
"description": "Twilio provider for MemberJunction Communication framework",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"test": "vitest run"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@memberjunction/communication-types": "5.
|
|
18
|
-
"@memberjunction/core": "5.
|
|
19
|
-
"@memberjunction/global": "5.
|
|
17
|
+
"@memberjunction/communication-types": "5.51.0",
|
|
18
|
+
"@memberjunction/core": "5.51.0",
|
|
19
|
+
"@memberjunction/global": "5.51.0",
|
|
20
20
|
"dotenv": "^17.2.4",
|
|
21
21
|
"env-var": "^7.4.1",
|
|
22
22
|
"twilio": "^5.12.1"
|