@learncard/email-templates 1.2.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/components/Layout.d.ts +1 -0
  2. package/dist/components/Layout.d.ts.map +1 -1
  3. package/dist/components/Layout.js +2 -2
  4. package/dist/components/Layout.js.map +1 -1
  5. package/dist/i18n.d.ts +15 -0
  6. package/dist/i18n.d.ts.map +1 -1
  7. package/dist/i18n.js +31 -0
  8. package/dist/i18n.js.map +1 -1
  9. package/dist/index.d.ts +2 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +0 -5
  12. package/dist/index.js.map +1 -1
  13. package/dist/previews/account-secured-scenarios.d.ts +6 -0
  14. package/dist/previews/account-secured-scenarios.d.ts.map +1 -0
  15. package/dist/previews/account-secured-scenarios.js +7 -0
  16. package/dist/previews/account-secured-scenarios.js.map +1 -0
  17. package/dist/previews/escrow-pin-sign-in-scenarios.d.ts +6 -0
  18. package/dist/previews/escrow-pin-sign-in-scenarios.d.ts.map +1 -0
  19. package/dist/previews/escrow-pin-sign-in-scenarios.js +7 -0
  20. package/dist/previews/escrow-pin-sign-in-scenarios.js.map +1 -0
  21. package/dist/render.d.ts +20 -9
  22. package/dist/render.d.ts.map +1 -1
  23. package/dist/render.js +39 -1
  24. package/dist/render.js.map +1 -1
  25. package/dist/templates/account-secured.d.ts +27 -0
  26. package/dist/templates/account-secured.d.ts.map +1 -0
  27. package/dist/templates/account-secured.js +118 -0
  28. package/dist/templates/account-secured.js.map +1 -0
  29. package/dist/templates/announcement.d.ts +13 -0
  30. package/dist/templates/announcement.d.ts.map +1 -0
  31. package/dist/templates/announcement.js +34 -0
  32. package/dist/templates/announcement.js.map +1 -0
  33. package/dist/templates/escrow-pin-sign-in.d.ts +24 -0
  34. package/dist/templates/escrow-pin-sign-in.d.ts.map +1 -0
  35. package/dist/templates/escrow-pin-sign-in.js +96 -0
  36. package/dist/templates/escrow-pin-sign-in.js.map +1 -0
  37. package/dist/templates/index.d.ts +22 -38
  38. package/dist/templates/index.d.ts.map +1 -1
  39. package/dist/templates/index.js +21 -14
  40. package/dist/templates/index.js.map +1 -1
  41. package/dist/tenant-registry.d.ts +2 -2
  42. package/dist/tenant-registry.d.ts.map +1 -1
  43. package/dist/tenant-registry.js +2 -3
  44. package/dist/tenant-registry.js.map +1 -1
  45. package/package.json +2 -2
  46. package/src/__tests__/i18n.test.ts +39 -1
  47. package/src/__tests__/render.test.ts +154 -0
  48. package/src/__tests__/tenant-registry.test.ts +2 -2
  49. package/src/components/Layout.tsx +4 -1
  50. package/src/i18n.ts +33 -0
  51. package/src/index.ts +4 -0
  52. package/src/previews/account-secured-scenarios.tsx +41 -0
  53. package/src/previews/escrow-pin-sign-in-scenarios.tsx +52 -0
  54. package/src/render.ts +73 -0
  55. package/src/templates/account-secured.tsx +236 -0
  56. package/src/templates/announcement.tsx +100 -0
  57. package/src/templates/escrow-pin-sign-in.tsx +197 -0
  58. package/src/templates/index.ts +97 -35
  59. package/src/tenant-registry.ts +3 -4
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SHARED, interpolate, resolveCatalogLocale } from '../i18n';
3
+ import { Img, Link, Section, Text } from '@react-email/components';
4
+ import { DEFAULT_BRANDING } from '../branding';
5
+ import { Layout } from '../components/Layout';
6
+ import { EmailButton } from '../components/EmailButton';
7
+ import { LinkFallback } from '../components/LinkFallback';
8
+ const announcementChrome = {
9
+ en: {
10
+ disclaimer: 'Manage product announcements in your privacy settings.',
11
+ unsubscribe: 'Unsubscribe from product announcements',
12
+ },
13
+ es: {
14
+ disclaimer: 'Gestiona los anuncios del producto en tus ajustes de privacidad.',
15
+ unsubscribe: 'Cancelar la suscripción a los anuncios del producto',
16
+ },
17
+ fr: {
18
+ disclaimer: 'Gérez les annonces du produit dans vos paramètres de confidentialité.',
19
+ unsubscribe: 'Se désinscrire des annonces du produit',
20
+ },
21
+ ar: {
22
+ disclaimer: 'يمكنك إدارة إعلانات المنتج في إعدادات الخصوصية.',
23
+ unsubscribe: 'إلغاء الاشتراك في إعلانات المنتج',
24
+ },
25
+ };
26
+ export const Announcement = ({ branding, locale, title, body, heroImageUrl, ctaLabel, ctaUrl, unsubscribeUrl, }) => (_jsxs(Layout, { branding: branding, ...(locale === undefined ? {} : { locale }), preview: title, disclaimer: announcementChrome[resolveCatalogLocale(locale)].disclaimer, children: [heroImageUrl && (_jsx(Img, { src: heroImageUrl, alt: "", width: "520", style: { width: '100%', height: 'auto', marginBottom: 24 } })), _jsx(Text, { style: { fontSize: 24, fontWeight: 600, color: '#111827' }, children: title }), _jsx(Text, { style: { fontSize: 16, lineHeight: '24px', whiteSpace: 'pre-line', color: '#374151' }, children: body }), ctaUrl && (_jsx(Section, { style: { margin: '24px 0' }, children: _jsx(EmailButton, { href: ctaUrl, branding: branding, children: ctaLabel }) })), _jsx(Text, { children: interpolate(SHARED[resolveCatalogLocale(locale)].teamSignature, {
27
+ brandName: branding.brandName,
28
+ }) }), ctaUrl && _jsx(LinkFallback, { href: ctaUrl, ...(locale === undefined ? {} : { locale }) }), _jsx(Text, { style: { fontSize: 14, color: '#6b7280' }, children: _jsx(Link, { href: unsubscribeUrl, children: announcementChrome[resolveCatalogLocale(locale)].unsubscribe }) })] }));
29
+ /** Default subject; services may supply the separately authored campaign subject. */
30
+ export const getAnnouncementSubject = (data) => data.title;
31
+ export default function Preview() {
32
+ return (_jsx(Announcement, { branding: DEFAULT_BRANDING, title: "Explore what\u2019s new", body: "Discover new ways to share your learning.", ctaLabel: "Explore", ctaUrl: "https://learncard.app/m/new-features", unsubscribeUrl: "https://learncard.app/unsubscribe?token=preview" }));
33
+ }
34
+ //# sourceMappingURL=announcement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"announcement.js","sourceRoot":"","sources":["../../src/templates/announcement.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * EscrowPinSignIn — tells the account owner that a new device just signed in
3
+ * with their recovery PIN, and links to the in-app "Secure my account" action
4
+ * (which stops other devices and logins from signing in again and turns off the old
5
+ * recovery methods).
6
+ *
7
+ * Used by: lca-api `/keys/escrow/complete` for PIN releases
8
+ * (templateId: 'escrow-pin-sign-in')
9
+ */
10
+ import * as React from 'react';
11
+ import type { TenantBranding } from '../branding';
12
+ export interface EscrowPinSignInProps {
13
+ branding: TenantBranding;
14
+ /** ISO timestamp of the PIN sign-in (formatted per locale), or display text. */
15
+ signedInAt: string;
16
+ /** In-app link to the "Secure my account" action. */
17
+ secureUrl: string;
18
+ /** Recipient locale (BCP-47). Defaults to English. */
19
+ locale?: string;
20
+ }
21
+ export declare const EscrowPinSignIn: React.FC<EscrowPinSignInProps>;
22
+ export declare const getEscrowPinSignInSubject: (_branding: TenantBranding, locale?: string) => string;
23
+ export default function Preview(): React.JSX.Element;
24
+ //# sourceMappingURL=escrow-pin-sign-in.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escrow-pin-sign-in.d.ts","sourceRoot":"","sources":["../../src/templates/escrow-pin-sign-in.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAclD,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,gFAAgF;IAChF,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AA0ED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAoC1D,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,WAAW,cAAc,EAAE,SAAS,MAAM,KAAG,MACtC,CAAC;AAwClD,MAAM,CAAC,OAAO,UAAU,OAAO,sBAQ9B"}
@@ -0,0 +1,96 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * EscrowPinSignIn — tells the account owner that a new device just signed in
4
+ * with their recovery PIN, and links to the in-app "Secure my account" action
5
+ * (which stops other devices and logins from signing in again and turns off the old
6
+ * recovery methods).
7
+ *
8
+ * Used by: lca-api `/keys/escrow/complete` for PIN releases
9
+ * (templateId: 'escrow-pin-sign-in')
10
+ */
11
+ import { Text, Section } from '@react-email/components';
12
+ import { DEFAULT_BRANDING } from '../branding';
13
+ import { Layout } from '../components/Layout';
14
+ import { EmailButton } from '../components/EmailButton';
15
+ import { LinkFallback } from '../components/LinkFallback';
16
+ import { resolveCatalogLocale, interpolate, SHARED, formatNoticeTimestamp, localeProp, } from '../i18n';
17
+ const EN = {
18
+ preview: 'New device signed in with your PIN',
19
+ heading: 'New Device Signed In With Your PIN',
20
+ body: signedInAt => (_jsxs(_Fragment, { children: ["A new device signed in to your account with your recovery PIN on", ' ', _jsx("strong", { children: signedInAt }), "."] })),
21
+ warning: 'Not you? Secure your account.',
22
+ button: 'Secure my account',
23
+ sincerely: 'Sincerely,',
24
+ subject: 'New device signed in with your PIN',
25
+ };
26
+ const ES = {
27
+ preview: 'Un dispositivo nuevo inició sesión con tu PIN',
28
+ heading: 'Un Dispositivo Nuevo Inició Sesión con tu PIN',
29
+ body: signedInAt => (_jsxs(_Fragment, { children: ["Un dispositivo nuevo inici\u00F3 sesi\u00F3n en tu cuenta con tu PIN de recuperaci\u00F3n el", ' ', _jsx("strong", { children: signedInAt }), "."] })),
30
+ warning: '¿No fuiste tú? Protege tu cuenta.',
31
+ button: 'Proteger mi cuenta',
32
+ sincerely: 'Atentamente,',
33
+ subject: 'Un dispositivo nuevo inició sesión con tu PIN',
34
+ };
35
+ const FR = {
36
+ preview: 'Un nouvel appareil s’est connecté avec votre code PIN',
37
+ heading: 'Un Nouvel Appareil S’est Connecté avec Votre Code PIN',
38
+ body: signedInAt => (_jsxs(_Fragment, { children: ["Un nouvel appareil s\u2019est connect\u00E9 \u00E0 votre compte avec votre code PIN de r\u00E9cup\u00E9ration le", ' ', _jsx("strong", { children: signedInAt }), "."] })),
39
+ warning: 'Ce n’était pas vous ? Sécurisez votre compte.',
40
+ button: 'Sécuriser mon compte',
41
+ sincerely: 'Cordialement,',
42
+ subject: 'Un nouvel appareil s’est connecté avec votre code PIN',
43
+ };
44
+ const AR = {
45
+ preview: 'تم تسجيل الدخول من جهاز جديد باستخدام رمز PIN الخاص بك',
46
+ heading: 'تم تسجيل الدخول من جهاز جديد باستخدام رمز PIN الخاص بك',
47
+ body: signedInAt => (_jsxs(_Fragment, { children: ["\u0633\u062C\u0651\u0644 \u062C\u0647\u0627\u0632 \u062C\u062F\u064A\u062F \u0627\u0644\u062F\u062E\u0648\u0644 \u0625\u0644\u0649 \u062D\u0633\u0627\u0628\u0643 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0631\u0645\u0632 PIN \u0627\u0644\u062E\u0627\u0635 \u0628\u0627\u0644\u0627\u0633\u062A\u0639\u0627\u062F\u0629 \u0641\u064A", ' ', _jsx("strong", { children: signedInAt }), "."] })),
48
+ warning: 'لم يكن أنت؟ أمّن حسابك.',
49
+ button: 'تأمين حسابي',
50
+ sincerely: 'مع التحيات،',
51
+ subject: 'تم تسجيل الدخول من جهاز جديد باستخدام رمز PIN الخاص بك',
52
+ };
53
+ const STRINGS = { en: EN, es: ES, fr: FR, ar: AR };
54
+ export const EscrowPinSignIn = ({ branding, signedInAt, secureUrl, locale, }) => {
55
+ const catalogLocale = resolveCatalogLocale(locale);
56
+ const s = STRINGS[catalogLocale];
57
+ return (_jsxs(Layout, { branding: branding, preview: s.preview, ...localeProp(locale), children: [_jsx(Text, { style: heading, children: s.heading }), _jsx(Text, { style: paragraph, children: s.body(formatNoticeTimestamp(signedInAt, catalogLocale)) }), _jsx(Text, { style: warning, children: s.warning }), _jsx(Section, { style: buttonWrapper, children: _jsx(EmailButton, { href: secureUrl, branding: branding, children: s.button }) }), _jsxs(Text, { style: signOff, children: [s.sincerely, _jsx("br", {}), interpolate(SHARED[catalogLocale].teamSignature, {
58
+ brandName: branding.brandName,
59
+ })] }), _jsx(LinkFallback, { href: secureUrl, ...localeProp(locale) })] }));
60
+ };
61
+ export const getEscrowPinSignInSubject = (_branding, locale) => STRINGS[resolveCatalogLocale(locale)].subject;
62
+ // ---------------------------------------------------------------------------
63
+ // Styles
64
+ // ---------------------------------------------------------------------------
65
+ const heading = {
66
+ fontSize: 24,
67
+ fontWeight: 600,
68
+ color: '#111827',
69
+ margin: '0 0 24px',
70
+ };
71
+ const paragraph = {
72
+ fontSize: 16,
73
+ color: '#374151',
74
+ lineHeight: '24px',
75
+ margin: '0 0 24px',
76
+ };
77
+ const warning = {
78
+ ...paragraph,
79
+ fontWeight: 600,
80
+ };
81
+ const buttonWrapper = {
82
+ margin: '0 0 24px',
83
+ };
84
+ const signOff = {
85
+ fontSize: 14,
86
+ color: '#374151',
87
+ lineHeight: '20px',
88
+ margin: '24px 0 0',
89
+ };
90
+ // ---------------------------------------------------------------------------
91
+ // Preview
92
+ // ---------------------------------------------------------------------------
93
+ export default function Preview() {
94
+ return (_jsx(EscrowPinSignIn, { branding: DEFAULT_BRANDING, signedInAt: "October 2, 2026, 3:00 PM", secureUrl: "https://learncard.app/account/secure" }));
95
+ }
96
+ //# sourceMappingURL=escrow-pin-sign-in.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escrow-pin-sign-in.js","sourceRoot":"","sources":["../../src/templates/escrow-pin-sign-in.tsx"],"names":[],"mappings":"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"}
@@ -1,39 +1,23 @@
1
- export { VerificationCode, getVerificationCodeSubject } from './verification-code';
2
- export type { VerificationCodeProps, VerificationCodeVariant } from './verification-code';
3
- export { InboxClaim, getInboxClaimSubject } from './inbox-claim';
4
- export type { InboxClaimProps } from './inbox-claim';
5
- export { GuardianApproval, getGuardianApprovalSubject } from './guardian-approval';
6
- export type { GuardianApprovalProps } from './guardian-approval';
7
- export { AccountApproved, getAccountApprovedSubject } from './account-approved';
8
- export type { AccountApprovedProps } from './account-approved';
9
- export { RecoveryKey, getRecoveryKeySubject } from './recovery-key';
10
- export type { RecoveryKeyProps } from './recovery-key';
11
- export { EndorsementRequest, getEndorsementRequestSubject } from './endorsement-request';
12
- export type { EndorsementRequestProps } from './endorsement-request';
13
- export { CredentialAwaitingGuardian, getCredentialAwaitingGuardianSubject, } from './credential-awaiting-guardian';
14
- export type { CredentialAwaitingGuardianProps } from './credential-awaiting-guardian';
15
- export { GuardianApprovedClaim, getGuardianApprovedClaimSubject } from './guardian-approved-claim';
16
- export type { GuardianApprovedClaimProps } from './guardian-approved-claim';
17
- export { GuardianCredentialApproval, getGuardianCredentialApprovalSubject, } from './guardian-credential-approval';
18
- export type { GuardianCredentialApprovalProps } from './guardian-credential-approval';
19
- export { GuardianEmailOtp, getGuardianEmailOtpSubject } from './guardian-email-otp';
20
- export type { GuardianEmailOtpProps } from './guardian-email-otp';
21
- export { GuardianRejectedCredential, getGuardianRejectedCredentialSubject, } from './guardian-rejected-credential';
22
- export type { GuardianRejectedCredentialProps } from './guardian-rejected-credential';
23
- export { EmailVerification, getEmailVerificationSubject } from './email-verification';
24
- export type { EmailVerificationProps } from './email-verification';
25
- export { CredentialUpdated, getCredentialUpdatedSubject } from './credential-updated';
26
- export type { CredentialUpdatedProps } from './credential-updated';
27
- export { AccountSignInChanged, getAccountSignInChangedSubject } from './account-sign-in-changed';
28
- export type { AccountSignInChangedProps } from './account-sign-in-changed';
29
- export { EscrowHoldStarted, getEscrowHoldStartedSubject } from './escrow-hold-started';
30
- export type { EscrowHoldStartedProps } from './escrow-hold-started';
31
- export { EscrowHoldReminder, getEscrowHoldReminderSubject } from './escrow-hold-reminder';
32
- export type { EscrowHoldReminderProps } from './escrow-hold-reminder';
33
- export { EscrowHoldReleased, getEscrowHoldReleasedSubject } from './escrow-hold-released';
34
- export type { EscrowHoldReleasedProps } from './escrow-hold-released';
35
- export { EscrowHoldCancelled, getEscrowHoldCancelledSubject } from './escrow-hold-cancelled';
36
- export type { EscrowHoldCancelledProps, EscrowHoldCancelledReason } from './escrow-hold-cancelled';
37
- export { EscrowPinLocked, getEscrowPinLockedSubject } from './escrow-pin-locked';
38
- export type { EscrowPinLockedProps } from './escrow-pin-locked';
1
+ export { VerificationCode, getVerificationCodeSubject, type VerificationCodeProps, type VerificationCodeVariant, } from './verification-code';
2
+ export { InboxClaim, getInboxClaimSubject, type InboxClaimProps } from './inbox-claim';
3
+ export { GuardianApproval, getGuardianApprovalSubject, type GuardianApprovalProps, } from './guardian-approval';
4
+ export { AccountApproved, getAccountApprovedSubject, type AccountApprovedProps, } from './account-approved';
5
+ export { RecoveryKey, getRecoveryKeySubject, type RecoveryKeyProps } from './recovery-key';
6
+ export { EndorsementRequest, getEndorsementRequestSubject, type EndorsementRequestProps, } from './endorsement-request';
7
+ export { CredentialAwaitingGuardian, getCredentialAwaitingGuardianSubject, type CredentialAwaitingGuardianProps, } from './credential-awaiting-guardian';
8
+ export { GuardianApprovedClaim, getGuardianApprovedClaimSubject, type GuardianApprovedClaimProps, } from './guardian-approved-claim';
9
+ export { GuardianCredentialApproval, getGuardianCredentialApprovalSubject, type GuardianCredentialApprovalProps, } from './guardian-credential-approval';
10
+ export { GuardianEmailOtp, getGuardianEmailOtpSubject, type GuardianEmailOtpProps, } from './guardian-email-otp';
11
+ export { GuardianRejectedCredential, getGuardianRejectedCredentialSubject, type GuardianRejectedCredentialProps, } from './guardian-rejected-credential';
12
+ export { EmailVerification, getEmailVerificationSubject, type EmailVerificationProps, } from './email-verification';
13
+ export { CredentialUpdated, getCredentialUpdatedSubject, type CredentialUpdatedProps, } from './credential-updated';
14
+ export { AccountSignInChanged, getAccountSignInChangedSubject, type AccountSignInChangedProps, } from './account-sign-in-changed';
15
+ export { EscrowHoldStarted, getEscrowHoldStartedSubject, type EscrowHoldStartedProps, } from './escrow-hold-started';
16
+ export { EscrowHoldReminder, getEscrowHoldReminderSubject, type EscrowHoldReminderProps, } from './escrow-hold-reminder';
17
+ export { EscrowHoldReleased, getEscrowHoldReleasedSubject, type EscrowHoldReleasedProps, } from './escrow-hold-released';
18
+ export { EscrowHoldCancelled, getEscrowHoldCancelledSubject, type EscrowHoldCancelledProps, type EscrowHoldCancelledReason, } from './escrow-hold-cancelled';
19
+ export { EscrowPinLocked, getEscrowPinLockedSubject, type EscrowPinLockedProps, } from './escrow-pin-locked';
20
+ export { EscrowPinSignIn, getEscrowPinSignInSubject, type EscrowPinSignInProps, } from './escrow-pin-sign-in';
21
+ export { AccountSecured, getAccountSecuredSubject, type AccountSecuredProps, } from './account-secured';
22
+ export { Announcement, getAnnouncementSubject, type AnnouncementProps } from './announcement';
39
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACnF,YAAY,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE1F,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACnF,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACpE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACzF,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EACH,0BAA0B,EAC1B,oCAAoC,GACvC,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AAEtF,OAAO,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AACnG,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,OAAO,EACH,0BAA0B,EAC1B,oCAAoC,GACvC,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AACpF,YAAY,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EACH,0BAA0B,EAC1B,oCAAoC,GACvC,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC;AAEtF,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACtF,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACtF,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AACjG,YAAY,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACvF,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC1F,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC1F,YAAY,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAC7F,YAAY,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEnG,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACjF,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,gBAAgB,EAChB,0BAA0B,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,GAC/B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAEvF,OAAO,EACH,gBAAgB,EAChB,0BAA0B,EAC1B,KAAK,qBAAqB,GAC7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,eAAe,EACf,yBAAyB,EACzB,KAAK,oBAAoB,GAC5B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE3F,OAAO,EACH,kBAAkB,EAClB,4BAA4B,EAC5B,KAAK,uBAAuB,GAC/B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACH,0BAA0B,EAC1B,oCAAoC,EACpC,KAAK,+BAA+B,GACvC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACH,qBAAqB,EACrB,+BAA+B,EAC/B,KAAK,0BAA0B,GAClC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACH,0BAA0B,EAC1B,oCAAoC,EACpC,KAAK,+BAA+B,GACvC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACH,gBAAgB,EAChB,0BAA0B,EAC1B,KAAK,qBAAqB,GAC7B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACH,0BAA0B,EAC1B,oCAAoC,EACpC,KAAK,+BAA+B,GACvC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACH,iBAAiB,EACjB,2BAA2B,EAC3B,KAAK,sBAAsB,GAC9B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACH,iBAAiB,EACjB,2BAA2B,EAC3B,KAAK,sBAAsB,GAC9B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACH,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,yBAAyB,GACjC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACH,iBAAiB,EACjB,2BAA2B,EAC3B,KAAK,sBAAsB,GAC9B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACH,kBAAkB,EAClB,4BAA4B,EAC5B,KAAK,uBAAuB,GAC/B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACH,kBAAkB,EAClB,4BAA4B,EAC5B,KAAK,uBAAuB,GAC/B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACH,mBAAmB,EACnB,6BAA6B,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,GACjC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACH,eAAe,EACf,yBAAyB,EACzB,KAAK,oBAAoB,GAC5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,eAAe,EACf,yBAAyB,EACzB,KAAK,oBAAoB,GAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACH,cAAc,EACd,wBAAwB,EACxB,KAAK,mBAAmB,GAC3B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,20 +1,27 @@
1
- export { VerificationCode, getVerificationCodeSubject } from './verification-code';
1
+ // One export declaration per template module. Projects that resolve this package
2
+ // through its `development` condition (source) typecheck without `jsx`, and TypeScript
3
+ // reports TS6142 once per declaration that imports a .tsx module from this .ts file;
4
+ // a separate `export type` line for the same module would add a second report.
5
+ export { VerificationCode, getVerificationCodeSubject, } from './verification-code';
2
6
  export { InboxClaim, getInboxClaimSubject } from './inbox-claim';
3
- export { GuardianApproval, getGuardianApprovalSubject } from './guardian-approval';
4
- export { AccountApproved, getAccountApprovedSubject } from './account-approved';
7
+ export { GuardianApproval, getGuardianApprovalSubject, } from './guardian-approval';
8
+ export { AccountApproved, getAccountApprovedSubject, } from './account-approved';
5
9
  export { RecoveryKey, getRecoveryKeySubject } from './recovery-key';
6
- export { EndorsementRequest, getEndorsementRequestSubject } from './endorsement-request';
10
+ export { EndorsementRequest, getEndorsementRequestSubject, } from './endorsement-request';
7
11
  export { CredentialAwaitingGuardian, getCredentialAwaitingGuardianSubject, } from './credential-awaiting-guardian';
8
- export { GuardianApprovedClaim, getGuardianApprovedClaimSubject } from './guardian-approved-claim';
12
+ export { GuardianApprovedClaim, getGuardianApprovedClaimSubject, } from './guardian-approved-claim';
9
13
  export { GuardianCredentialApproval, getGuardianCredentialApprovalSubject, } from './guardian-credential-approval';
10
- export { GuardianEmailOtp, getGuardianEmailOtpSubject } from './guardian-email-otp';
14
+ export { GuardianEmailOtp, getGuardianEmailOtpSubject, } from './guardian-email-otp';
11
15
  export { GuardianRejectedCredential, getGuardianRejectedCredentialSubject, } from './guardian-rejected-credential';
12
- export { EmailVerification, getEmailVerificationSubject } from './email-verification';
13
- export { CredentialUpdated, getCredentialUpdatedSubject } from './credential-updated';
14
- export { AccountSignInChanged, getAccountSignInChangedSubject } from './account-sign-in-changed';
15
- export { EscrowHoldStarted, getEscrowHoldStartedSubject } from './escrow-hold-started';
16
- export { EscrowHoldReminder, getEscrowHoldReminderSubject } from './escrow-hold-reminder';
17
- export { EscrowHoldReleased, getEscrowHoldReleasedSubject } from './escrow-hold-released';
18
- export { EscrowHoldCancelled, getEscrowHoldCancelledSubject } from './escrow-hold-cancelled';
19
- export { EscrowPinLocked, getEscrowPinLockedSubject } from './escrow-pin-locked';
16
+ export { EmailVerification, getEmailVerificationSubject, } from './email-verification';
17
+ export { CredentialUpdated, getCredentialUpdatedSubject, } from './credential-updated';
18
+ export { AccountSignInChanged, getAccountSignInChangedSubject, } from './account-sign-in-changed';
19
+ export { EscrowHoldStarted, getEscrowHoldStartedSubject, } from './escrow-hold-started';
20
+ export { EscrowHoldReminder, getEscrowHoldReminderSubject, } from './escrow-hold-reminder';
21
+ export { EscrowHoldReleased, getEscrowHoldReleasedSubject, } from './escrow-hold-released';
22
+ export { EscrowHoldCancelled, getEscrowHoldCancelledSubject, } from './escrow-hold-cancelled';
23
+ export { EscrowPinLocked, getEscrowPinLockedSubject, } from './escrow-pin-locked';
24
+ export { EscrowPinSignIn, getEscrowPinSignInSubject, } from './escrow-pin-sign-in';
25
+ export { AccountSecured, getAccountSecuredSubject, } from './account-secured';
26
+ export { Announcement, getAnnouncementSubject } from './announcement';
20
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAGnF,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGjE,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAGnF,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGhF,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAGzF,OAAO,EACH,0BAA0B,EAC1B,oCAAoC,GACvC,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAGnG,OAAO,EACH,0BAA0B,EAC1B,oCAAoC,GACvC,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAGpF,OAAO,EACH,0BAA0B,EAC1B,oCAAoC,GACvC,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEtF,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAGjG,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAGvF,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAG1F,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAG1F,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAG7F,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,uFAAuF;AACvF,qFAAqF;AACrF,+EAA+E;AAE/E,OAAO,EACH,gBAAgB,EAChB,0BAA0B,GAG7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAwB,MAAM,eAAe,CAAC;AAEvF,OAAO,EACH,gBAAgB,EAChB,0BAA0B,GAE7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,eAAe,EACf,yBAAyB,GAE5B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAyB,MAAM,gBAAgB,CAAC;AAE3F,OAAO,EACH,kBAAkB,EAClB,4BAA4B,GAE/B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACH,0BAA0B,EAC1B,oCAAoC,GAEvC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACH,qBAAqB,EACrB,+BAA+B,GAElC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACH,0BAA0B,EAC1B,oCAAoC,GAEvC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACH,gBAAgB,EAChB,0BAA0B,GAE7B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACH,0BAA0B,EAC1B,oCAAoC,GAEvC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACH,iBAAiB,EACjB,2BAA2B,GAE9B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACH,iBAAiB,EACjB,2BAA2B,GAE9B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACH,oBAAoB,EACpB,8BAA8B,GAEjC,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACH,iBAAiB,EACjB,2BAA2B,GAE9B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACH,kBAAkB,EAClB,4BAA4B,GAE/B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACH,kBAAkB,EAClB,4BAA4B,GAE/B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACH,mBAAmB,EACnB,6BAA6B,GAGhC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACH,eAAe,EACf,yBAAyB,GAE5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,eAAe,EACf,yBAAyB,GAE5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACH,cAAc,EACd,wBAAwB,GAE3B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAA0B,MAAM,gBAAgB,CAAC"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Resolution order (first match wins):
5
5
  * 1. Explicit `X-Tenant-Id` header — native apps, any client that knows its tenant
6
- * 2. `Origin` / `Referer` header hostname — web apps (e.g. alpha.vetpass.app → vetpass)
6
+ * 2. `Origin` / `Referer` header hostname — web apps (e.g. staging.vetpass.app → vetpass)
7
7
  * 3. `DEFAULT_TENANT_ID` env var — per-tenant deploys, cron jobs, server-to-server
8
8
  * 4. Fallback to 'learncard'
9
9
  *
@@ -22,7 +22,7 @@ export interface ResolvedTenant {
22
22
  export interface RequestHeaders {
23
23
  /** Value of the X-Tenant-Id header. */
24
24
  'x-tenant-id'?: string | undefined;
25
- /** Origin header (e.g. "https://alpha.vetpass.app"). */
25
+ /** Origin header (e.g. "https://staging.vetpass.app"). */
26
26
  origin?: string | undefined;
27
27
  /** Referer header (fallback for Origin). */
28
28
  referer?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-registry.d.ts","sourceRoot":"","sources":["../src/tenant-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,MAAM,WAAW,cAAc;IAC3B,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IAEX,8EAA8E;IAC9E,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAEvC,oEAAoE;IACpE,WAAW,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,WAAW,cAAc;IAC3B,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnC,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE7B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CAChD;AAqGD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACjC,SAAS,cAAc,EACvB,cAAc,MAAM,KACrB,cAgCF,CAAC;AAsBF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,UAAU,MAAM,EAAE,UAAU,MAAM,KAAG,IAE1E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAC/B,UAAU,MAAM,EAChB,UAAU,OAAO,CAAC,cAAc,CAAC,KAClC,IAKF,CAAC"}
1
+ {"version":3,"file":"tenant-registry.d.ts","sourceRoot":"","sources":["../src/tenant-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,MAAM,WAAW,cAAc;IAC3B,gEAAgE;IAChE,EAAE,EAAE,MAAM,CAAC;IAEX,8EAA8E;IAC9E,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAEvC,oEAAoE;IACpE,WAAW,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,WAAW,cAAc;IAC3B,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnC,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE7B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CAChD;AAoGD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACjC,SAAS,cAAc,EACvB,cAAc,MAAM,KACrB,cAgCF,CAAC;AAsBF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,UAAU,MAAM,EAAE,UAAU,MAAM,KAAG,IAE1E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAC/B,UAAU,MAAM,EAChB,UAAU,OAAO,CAAC,cAAc,CAAC,KAClC,IAKF,CAAC"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Resolution order (first match wins):
5
5
  * 1. Explicit `X-Tenant-Id` header — native apps, any client that knows its tenant
6
- * 2. `Origin` / `Referer` header hostname — web apps (e.g. alpha.vetpass.app → vetpass)
6
+ * 2. `Origin` / `Referer` header hostname — web apps (e.g. staging.vetpass.app → vetpass)
7
7
  * 3. `DEFAULT_TENANT_ID` env var — per-tenant deploys, cron jobs, server-to-server
8
8
  * 4. Fallback to 'learncard'
9
9
  *
@@ -19,7 +19,6 @@
19
19
  const ORIGIN_MAP = {
20
20
  // VetPass
21
21
  'vetpass.app': 'vetpass',
22
- 'alpha.vetpass.app': 'vetpass',
23
22
  'staging.vetpass.app': 'vetpass',
24
23
  // ScoutPass
25
24
  'scout.org': 'scoutpass',
@@ -87,7 +86,7 @@ const extractHostname = (urlString) => {
87
86
  const tenantIdFromHostname = (hostname) => {
88
87
  if (ORIGIN_MAP[hostname])
89
88
  return ORIGIN_MAP[hostname];
90
- // Strip subdomains: "alpha.vetpass.app" → "vetpass.app"
89
+ // Strip subdomains: "preview.vetpass.app" → "vetpass.app"
91
90
  const parts = hostname.split('.');
92
91
  for (let i = 1; i < parts.length - 1; i++) {
93
92
  const parent = parts.slice(i).join('.');
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-registry.js","sourceRoot":"","sources":["../src/tenant-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgCH,8EAA8E;AAC9E,6BAA6B;AAC7B,EAAE;AACF,uDAAuD;AACvD,yDAAyD;AACzD,8EAA8E;AAE9E,MAAM,UAAU,GAA2B;IACvC,UAAU;IACV,aAAa,EAAE,SAAS;IACxB,mBAAmB,EAAE,SAAS;IAC9B,qBAAqB,EAAE,SAAS;IAEhC,YAAY;IACZ,WAAW,EAAE,WAAW;IACxB,eAAe,EAAE,WAAW;IAC5B,gBAAgB,EAAE,WAAW;IAC7B,wBAAwB,EAAE,WAAW;IAErC,YAAY;IACZ,eAAe,EAAE,WAAW;IAC5B,uBAAuB,EAAE,WAAW;IACpC,mBAAmB,EAAE,WAAW;IAEhC,YAAY;IACZ,WAAW,EAAE,WAAW;CAC3B,CAAC;AAEF,8EAA8E;AAC9E,iCAAiC;AACjC,EAAE;AACF,4DAA4D;AAC5D,gEAAgE;AAChE,8EAA8E;AAE9E,MAAM,qBAAqB,GAA4C;IACnE,SAAS,EAAE,EAAE;IAEb,OAAO,EAAE;QACL,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,0CAA0C;QACnD,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE,SAAS;QACvB,gBAAgB,EAAE,SAAS;QAC3B,YAAY,EAAE,qBAAqB;QACnC,UAAU,EAAE,yBAAyB;QACrC,MAAM,EAAE,qBAAqB;QAC7B,UAAU,EAAE,aAAa;QACzB,eAAe,EAAE,SAAS;KAC7B;IAED,SAAS,EAAE;QACP,SAAS,EAAE,WAAW;QACtB,OAAO,EAAE,6CAA6C;QACtD,OAAO,EAAE,WAAW;QACpB,YAAY,EAAE,SAAS;QACvB,gBAAgB,EAAE,SAAS;QAC3B,YAAY,EAAE,mBAAmB;QACjC,UAAU,EAAE,6BAA6B;QACzC,MAAM,EAAE,wBAAwB;QAChC,UAAU,EAAE,kBAAkB;QAC9B,eAAe,EAAE,WAAW;KAC/B;CACJ,CAAC;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;GAEG;AACH,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAsB,EAAE;IAC9D,IAAI,CAAC;QACD,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,oBAAoB,GAAG,CAAC,QAAgB,EAAsB,EAAE;IAClE,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEtD,wDAAwD;IACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAExC,IAAI,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACpC,OAAuB,EACvB,WAAoB,EACN,EAAE;IAChB,oEAAoE;IACpE,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IAEzD,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,wCAAwC;IACxC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnF,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAEzC,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAE/C,IAAI,OAAO,EAAE,CAAC;gBACV,OAAO,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC1C,CAAC;QACL,CAAC;IACL,CAAC;IAED,0BAA0B;IAC1B,MAAM,UAAU,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAEhE,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,kBAAkB;IAClB,OAAO,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,eAAe,GAAG,CAAC,KAAoC,EAAsB,EAAE;IACjF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAE1C,OAAO,KAAK,IAAI,SAAS,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,EAAU,EAAE,WAA0C,EAAkB,EAAE,CAAC,CAAC;IAC7F,EAAE;IACF,aAAa,EAAE,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE;IAC9C,WAAW;CACd,CAAC,CAAC;AAEH,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAE,QAAgB,EAAQ,EAAE;IAC9E,UAAU,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AACpC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAClC,QAAgB,EAChB,QAAiC,EAC7B,EAAE;IACN,qBAAqB,CAAC,QAAQ,CAAC,GAAG;QAC9B,GAAG,qBAAqB,CAAC,QAAQ,CAAC;QAClC,GAAG,QAAQ;KACd,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"tenant-registry.js","sourceRoot":"","sources":["../src/tenant-registry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@learncard/email-templates",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "description": "Git-managed, tenant-branded email and SMS templates for LearnCard services",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "@react-email/components": "^0.0.36",
22
- "@react-email/render": "^1.0.5",
22
+ "@react-email/render": "^2.2.0",
23
23
  "react": "^18.3.1"
24
24
  },
25
25
  "devDependencies": {
@@ -13,7 +13,7 @@ import { describe, it, expect } from 'vitest';
13
13
  import { renderEmail } from '../render';
14
14
  import { renderSms } from '../sms';
15
15
  import { DEFAULT_BRANDING } from '../branding';
16
- import { resolveCatalogLocale, htmlDir } from '../i18n';
16
+ import { resolveCatalogLocale, htmlDir, localeProp } from '../i18n';
17
17
  import type { NotificationLocale } from '../i18n';
18
18
  import type { TemplateId, TemplateDataMap } from '../render';
19
19
 
@@ -21,6 +21,13 @@ const LOCALES: NotificationLocale[] = ['en', 'es', 'fr', 'ar'];
21
21
 
22
22
  // Minimal valid data for every template ID.
23
23
  const FIXTURES: { [K in TemplateId]: TemplateDataMap[K] } = {
24
+ announcement: {
25
+ title: 'News',
26
+ body: 'New programs',
27
+ ctaLabel: 'View',
28
+ ctaUrl: 'https://learncard.app/m/news',
29
+ unsubscribeUrl: 'https://learncard.app/unsubscribe?token=test',
30
+ },
24
31
  'embed-email-verification': {
25
32
  verificationCode: '123456',
26
33
  verificationEmail: 'test@example.com',
@@ -120,6 +127,11 @@ const FIXTURES: { [K in TemplateId]: TemplateDataMap[K] } = {
120
127
  releaseAfter: 'October 2, 2026, 3:00 PM',
121
128
  cancelUrl: 'https://learncard.app/recovery/cancel?token=abc123',
122
129
  },
130
+ 'escrow-pin-sign-in': {
131
+ signedInAt: 'October 2, 2026, 3:00 PM',
132
+ secureUrl: 'https://learncard.app/account/secure',
133
+ },
134
+ 'account-secured': { securedAt: 'October 2, 2026, 3:00 PM' },
123
135
  };
124
136
 
125
137
  const ALL_TEMPLATE_IDS = Object.keys(FIXTURES) as TemplateId[];
@@ -162,6 +174,7 @@ describe('i18n — non-EN locales localize content', () => {
162
174
  'credential-awaiting-guardian',
163
175
  'escrow-hold-started',
164
176
  'escrow-hold-cancelled',
177
+ 'account-secured',
165
178
  ];
166
179
 
167
180
  for (const templateId of SAMPLES) {
@@ -363,4 +376,29 @@ describe('i18n — renderSms localizes', () => {
363
376
  expect(es).toContain('Tu código de verificación de LearnCard es:');
364
377
  expect(en).toContain('999222');
365
378
  });
379
+
380
+ it('localeProp omits an absent locale instead of passing undefined', () => {
381
+ expect(localeProp(undefined)).toEqual({});
382
+ expect(localeProp(null)).toEqual({});
383
+ expect('locale' in localeProp(undefined)).toBe(false);
384
+ expect(localeProp('fr')).toEqual({ locale: 'fr' });
385
+ });
386
+
387
+ it('PIN sign-in and account-secured notices are unchanged for EN vs undefined', async () => {
388
+ for (const [id, data] of [
389
+ [
390
+ 'escrow-pin-sign-in',
391
+ {
392
+ signedInAt: 'October 2, 2026',
393
+ secureUrl: 'https://learncard.app/account/secure',
394
+ },
395
+ ],
396
+ ['account-secured', { securedAt: 'October 2, 2026' }],
397
+ ] as const) {
398
+ const en = await renderEmail(id, DEFAULT_BRANDING, data, 'en');
399
+ const none = await renderEmail(id, DEFAULT_BRANDING, data);
400
+ expect(none.html).toBe(en.html);
401
+ expect(none.subject).toBe(en.subject);
402
+ }
403
+ });
366
404
  });