Relay SMS Platform
Template Features

TypeScript Support

Full TypeScript support with type-safe template IDs and data.

Type-Safe Template IDs

TypeScriptCode
import type { TemplateId } from '@relay-works/templates'; // TypeScript will auto-complete available template IDs const templateId: TemplateId = 'otp-verify'; // Valid: 'otp-verify', 'password-reset', 'order-confirmed', etc.

Type-Safe Template Data

TypeScriptCode
import type { TemplateData } from '@relay-works/templates'; // Data type is inferred from template ID const data: TemplateData<'otp-verify'> = { code: '482916', company: 'Acme' // TypeScript will error if you're missing required fields! }; // Different template, different data type const orderData: TemplateData<'order-confirmed'> = { company: 'Acme Store', orderNumber: 'A1B2C3', itemCount: 3, amount: '49.99', url: 'https://relay.link/order-123' };

Type-Safe Render Result

TypeScriptCode
import type { RenderResult } from '@relay-works/templates'; const result: RenderResult = renderTemplate(template, data); // All properties are strongly typed result.text; // string result.characterCount; // number result.segments; // number result.encoding; // 'GSM-7' | 'UCS-2'

Generic Helper Functions

TypeScriptCode
import { getTemplate, renderTemplate, type TemplateId, type TemplateData } from '@relay-works/templates'; async function sendTemplatedSMS<T extends TemplateId>( templateId: T, data: TemplateData<T>, recipient: string ) { const template = getTemplate(templateId); const result = renderTemplate(template, data); return await relay.messages.send({ to: recipient, message: result.text }); } // Type-safe usage await sendTemplatedSMS('otp-verify', { code: '482916', company: 'Acme' }, '+15551234567');

Template Type

TypeScriptCode
import type { Template } from '@relay-works/templates'; const template: Template<'otp-verify'> = getTemplate('otp-verify'); // Strongly typed template properties template.id; // 'otp-verify' template.name; // string template.category; // 'authentication' | 'transaction' | 'appointment' template.tags; // string[] template.variables; // { name: string; type: string; ... }[] template.compliance; // ComplianceMetadata

Validation Types

TypeScriptCode
import type { ValidationResult } from '@relay-works/templates'; const validation: ValidationResult = validateTemplateData(template, data); if (!validation.valid) { // TypeScript knows errors exists when valid is false validation.errors.forEach(error => { console.log(error.field); // string console.log(error.message); // string console.log(error.suggestion); // string }); }

Auto-Completion

TypeScript provides auto-completion for:

  • Template IDs
  • Variable names
  • Template categories
  • Tag names
  • Compliance fields
TypeScriptCode
// IDE will suggest all valid template IDs getTemplate('otp-'); // Auto-completes to 'otp-verify' // IDE will suggest required variables renderTemplate(template, { co // Auto-completes to 'code' and 'company' });

Type Safety Benefits

  1. Catch errors at compile time

    • Missing required fields
    • Invalid template IDs
    • Wrong variable types
  2. Better IDE support

    • Auto-completion
    • Inline documentation
    • Type hints
  3. Refactoring confidence

    • Rename with confidence
    • Find all usages
    • Safe template updates

Next Steps:

Last modified on