Skip to content

@k-msg/template

Single source of truth for K-Message template runtime lifecycle, payload validation, and personalization.

Terminal window
npm install @k-msg/template @k-msg/core
# or
bun add @k-msg/template @k-msg/core

Main exports focus on runtime-safe template workflows:

  • TemplateLifecycleService
  • TemplatePersonalizer, defaultTemplatePersonalizer, TemplateVariableUtils
  • interpolate
  • validateTemplatePayload, parseTemplateButtons
  • low-level parsers (ButtonParser, VariableParser, TemplateValidator)
import { TemplateLifecycleService } from "@k-msg/template";
import type { TemplateProvider } from "@k-msg/core";
const provider: TemplateProvider = /* your provider */;
const templates = new TemplateLifecycleService(provider);
await templates.create({
name: "OTP Verification",
content: "[MyApp] Code: #{code}",
});
import { parseTemplateButtons, validateTemplatePayload } from "@k-msg/template";
const buttons = parseTemplateButtons('[{"type":"WL","name":"Open","url_mobile":"https://example.com"}]');
if (buttons.isFailure) throw buttons.error;
const payload = validateTemplatePayload(
{
name: "Notice",
content: "Hello #{name}",
buttons: buttons.value,
},
{ requireName: true, requireContent: true },
);
if (payload.isFailure) throw payload.error;
import { TemplateVariableUtils } from "@k-msg/template";
const rendered = TemplateVariableUtils.replace("Hello #{name}", {
name: "Jane",
});
// "Hello Jane"

Builder/registry/testing helpers are exposed separately:

  • TemplateBuilder, TemplateBuilders
  • TemplateRegistry
  • InMemoryTemplateStore
import { TemplateRegistry, TemplateBuilders } from "@k-msg/template/toolkit";
const registry = new TemplateRegistry();
const template = TemplateBuilders.authentication("OTP", "mock")
.code("OTP_001")
.content("Code: #{code}")
.build();
await registry.register(template);

MIT