Files
notification-wakeup-service/scripts/smokeTarget.ts
T

48 lines
1.9 KiB
TypeScript

/**
* Choosing the destination number for the manual scripts.
*
* 555-01xx numbers are reserved as fictional and do not exist, so they are a
* fine placeholder for the console adapter and a guaranteed failure against the
* real API: Twilio validates the destination even under test credentials and
* answers "The 'To' number ... is not a valid phone number."
*/
import { missingTwilioConfig } from "../src/services/smsService.js";
import { normalizePhoneNumber } from "../src/util/smsPhoneNumber.js";
export const FICTIONAL_PLACEHOLDER = "+15555550123";
export function twilioIsConfigured(): boolean {
return missingTwilioConfig().length === 0;
}
/**
* Resolves the destination, or explains why the placeholder cannot be used.
* Exits rather than spending a round trip discovering it at the provider.
*/
export function resolveTarget(explicit: string | undefined, envVar: string): string {
const raw = explicit ?? process.env[envVar];
const normalized = normalizePhoneNumber(raw ?? FICTIONAL_PLACEHOLDER);
if (normalized === undefined) {
console.error(`Not a phone number: ${raw}`);
process.exit(1);
}
if (twilioIsConfigured() && normalized === FICTIONAL_PLACEHOLDER) {
console.error(
`Twilio is configured, so the destination has to be a number Twilio can\n` +
`validate. ${FICTIONAL_PLACEHOLDER} is a reserved fictional number and is\n` +
`rejected with error 21211, even under test credentials.\n\n` +
`Pass a real number instead — your own is the obvious choice:\n\n` +
` ${envVar}=+15551234567 pnpm run <script>\n\n` +
`Under test credentials nothing is delivered and nothing is charged, so\n` +
`using your own number here is safe. Under live credentials it is a real\n` +
`text. Test credentials have their own Account SID: Twilio Console ->\n` +
`API keys & tokens -> Test credentials.`
);
process.exit(1);
}
return normalized;
}