clarion-shared-types
v1.0.101
Published
Shared pure TypeScript types for the Clarion **admin** web frontend (`clarion-admin`, Angular). Frontend-safe: no NestJS / class-validator / runtime framework dependencies.
Readme
clarion-shared-types
Shared pure TypeScript types for the Clarion admin web frontend
(clarion-admin, Angular). Frontend-safe: no NestJS / class-validator / runtime
framework dependencies.
Country & Currency (multi-country foundation)
Platform-level, Angular-safe primitives for country-aware admin forms, pickers,
billing and maps. Mirrors the backend grm-shared-library country module so the
same codes and configuration are used end to end.
Supported countries (ISO 3166-1 alpha-2):
| Code | Country | Calling code | Currency | Symbol | Decimals | Timezone | Locale |
|------|----------|--------------|----------|--------|----------|------------------------|---------|
| KE | Kenya | +254 | KES | KSh | 2 | Africa/Nairobi | en-KE |
| UG | Uganda | +256 | UGX | USh | 0 | Africa/Kampala | en-UG |
| TZ | Tanzania | +255 | TZS | TSh | 0 | Africa/Dar_es_Salaam | en-TZ |
Supported currencies (ISO 4217): KES, UGX, TZS.
Importing
Everything is re-exported from the package root:
import {
CountryCode,
CurrencyCode,
CallingCode,
SupportedCountryConfig,
SupportedCurrencyConfig,
SUPPORTED_COUNTRIES, // readonly SupportedCountryConfig[] — ideal for *ngFor pickers
SUPPORTED_COUNTRIES_BY_CODE, // Record<CountryCode, SupportedCountryConfig>
SUPPORTED_CURRENCIES,
SUPPORTED_CURRENCIES_BY_CODE,
DEFAULT_COUNTRY_CODE, // CountryCode.KE
DEFAULT_CURRENCY_CODE, // CurrencyCode.KES
getSupportedCountryConfig,
getSupportedCurrencyConfig,
getCurrencyForCountry,
getCallingCodeForCountry,
getCountryByCallingCode,
isSupportedCountryCode,
isSupportedCurrencyCode,
} from 'clarion-shared-types';
// Country picker options
SUPPORTED_COUNTRIES.map((c) => ({ label: c.name, value: c.code }));Note:
SUPPORTED_COUNTRIESis an array (picker-friendly). Prefer the array or the helper functions over indexingSUPPORTED_COUNTRIES_BY_CODEdirectly, to stay compatible with the admin'snoPropertyAccessFromIndexSignaturesetting.
Backward compatibility
Kenya (KE / KES) is the default market. Use DEFAULT_COUNTRY_CODE /
DEFAULT_CURRENCY_CODE wherever a country/currency is not explicit. Existing
admin flows are unaffected.
Scope
Primitives only. The country picker UI, country-scoped admin forms and country detection are delivered in later phases and should build on these types.
Tests
npm test # compiles src/modules/country and runs the country/currency suiteOrganization notification settings
src/modules/notification mirrors the backend contract for an organization's
notification settings (branding, email senders, SMS senders) that clarion-admin's
Notification Settings page renders. The backend source of truth is
grm-shared-library/src/modules/notification; clarion-notification owns the data.
- Enums:
SmsSenderType,NotificationSenderStatus,EmailSenderVerificationStatus/Method,NotificationSenderSource,NotificationBrandingSource. - Shapes:
OrganizationNotificationSettings,ResolvedNotificationBranding(with the per-fieldsourcesthe page uses to say "inherited from…"),OrganizationEmailSender,OrganizationSmsSender,SmsProviderDescriptor, and plain request interfaces in place of the backend's class-validator DTOs. - Rules:
validateSmsSenderId,SMS_SENDER_ID_PATTERNS/_HINTS,BRAND_COLOUR_PATTERN,contrastRatioWithWhitewithMIN_PRIMARY_COLOUR_CONTRASTandMIN_ACCENT_COLOUR_CONTRAST.
The rules must stay byte-identical to the backend's. The form validates with
these so the user is told before they submit; the API validates with its own copy and
is the one that counts. notification-settings.spec.ts pins the regex sources and
thresholds so a drift fails here rather than as a form that accepts what the API
rejects.
Alert intake (SMS / WhatsApp / email channels)
src/modules/alert-intake mirrors the backend contract for how the public reaches an
organization without the app, which clarion-admin's Alert Channels page renders.
The backend source of truth is grm-shared-library/src/modules/alert-intake;
clarion-alerts owns the data.
- Enums:
AlertIntakeChannel,AlertIntakeProvider,AlertIntakeSecretSource,AlertIntakeEmergencyPolicy,AlertIntakeRouteMatch,AlertIntakeWebhookVerification,AlertIntakeRejectionReason. - Shapes:
OrganizationAlertIntakeSettings,AlertIntakeConnection(never carries a credential -secretsConfiguredsays which secrets exist),AlertIntakeRoute,AlertIntakePlatformFallback,AlertIntakeProviderDescriptor(the server-driven form),AlertIntakePlatformConnection, and plain request interfaces (CreateAlertIntakeConnection,UpdateAlertIntakeConnection,CreateAlertIntakeRoute,UpdateAlertIntakeRoute) in place of the backend's class-validator DTOs. - Rules:
ALERT_INTAKE_KEYWORD_PATTERN,normaliseAlertIntakeKeyword,extractAlertIntakeKeyword,stripAlertIntakeKeywordand theMAX_ALERT_INTAKE_*limits.
The enum file and the util file are byte-identical copies of the backend's;
alert-intake.spec.ts pins the values so a drift fails here rather than as a form the
API refuses. Permission actions read:alert-intake, manage:alert-intake and
manage:alert-intake-platform (Super-Admin only) are mirrored in PermissionActions.
