Full TypeScript support with type-safe template IDs and data.
Type-Safe Template IDs
Code
import type { TemplateId } from '@relay-works/templates';// TypeScript will auto-complete available template IDsconst templateId: TemplateId = 'otp-verify';// Valid: 'otp-verify', 'password-reset', 'order-confirmed', etc.
Type-Safe Template Data
Code
import type { TemplateData } from '@relay-works/templates';// Data type is inferred from template IDconst data: TemplateData<'otp-verify'> = { code: '482916', company: 'Acme' // TypeScript will error if you're missing required fields!};// Different template, different data typeconst orderData: TemplateData<'order-confirmed'> = { company: 'Acme Store', orderNumber: 'A1B2C3', itemCount: 3, amount: '49.99', url: 'https://relay.link/order-123'};
Type-Safe Render Result
Code
import type { RenderResult } from '@relay-works/templates';const result: RenderResult = renderTemplate(template, data);// All properties are strongly typedresult.text; // stringresult.characterCount; // numberresult.segments; // numberresult.encoding; // 'GSM-7' | 'UCS-2'
Generic Helper Functions
Code
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 usageawait sendTemplatedSMS('otp-verify', { code: '482916', company: 'Acme'}, '+15551234567');
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
Code
// IDE will suggest all valid template IDsgetTemplate('otp-'); // Auto-completes to 'otp-verify'// IDE will suggest required variablesrenderTemplate(template, { co // Auto-completes to 'code' and 'company'});