@learncard/email-templates 1.0.3 → 1.0.4

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.
@@ -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;AAkFD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,YACxB,cAAc,gBACT,MAAM,KACrB,cAgCF,CAAC;AAsBF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,aAAc,MAAM,YAAY,MAAM,KAAG,IAE1E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,aAAc,MAAM,YAAY,OAAO,CAAC,cAAc,CAAC,KAAG,IAK5F,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,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,YACxB,cAAc,gBACT,MAAM,KACrB,cAgCF,CAAC;AAsBF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,aAAc,MAAM,YAAY,MAAM,KAAG,IAE1E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,aACrB,MAAM,YACN,OAAO,CAAC,cAAc,CAAC,KAClC,IAKF,CAAC"}
@@ -21,6 +21,11 @@ const ORIGIN_MAP = {
21
21
  'vetpass.app': 'vetpass',
22
22
  'alpha.vetpass.app': 'vetpass',
23
23
  'staging.vetpass.app': 'vetpass',
24
+ // ScoutPass
25
+ 'scout.org': 'scoutpass',
26
+ 'www.scout.org': 'scoutpass',
27
+ 'pass.scout.org': 'scoutpass',
28
+ 'staging.pass.scout.org': 'scoutpass',
24
29
  // LearnCard
25
30
  'learncard.app': 'learncard',
26
31
  'staging.learncard.app': 'learncard',
@@ -48,6 +53,18 @@ const TENANT_EMAIL_BRANDING = {
48
53
  fromDomain: 'vetpass.app',
49
54
  copyrightHolder: 'VetPass',
50
55
  },
56
+ scoutpass: {
57
+ brandName: 'ScoutPass',
58
+ logoUrl: 'https://pass.scout.org/assets/icon/icon.png',
59
+ logoAlt: 'ScoutPass',
60
+ primaryColor: '#00BA88',
61
+ primaryTextColor: '#ffffff',
62
+ supportEmail: 'support@scout.org',
63
+ websiteUrl: 'https://scout.org/scoutpass',
64
+ appUrl: 'https://pass.scout.org',
65
+ fromDomain: 'scoutnetwork.org',
66
+ copyrightHolder: 'ScoutPass',
67
+ },
51
68
  };
52
69
  // ---------------------------------------------------------------------------
53
70
  // Resolution
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-registry.js","sourceRoot":"","sources":["../src/tenant-registry.ts"],"names":[],"mappings":"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"}
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.0.3",
3
+ "version": "1.0.4",
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",
@@ -86,6 +86,22 @@ describe('resolveTenantFromRequest', () => {
86
86
  expect(result.resolvedVia).toBe('origin');
87
87
  });
88
88
 
89
+ it('resolves scoutpass from pass.scout.org', () => {
90
+ const headers: RequestHeaders = { origin: 'https://pass.scout.org' };
91
+ const result = resolveTenantFromRequest(headers);
92
+
93
+ expect(result.id).toBe('scoutpass');
94
+ expect(result.resolvedVia).toBe('origin');
95
+ });
96
+
97
+ it('resolves scoutpass from scout.org', () => {
98
+ const headers: RequestHeaders = { origin: 'https://scout.org' };
99
+ const result = resolveTenantFromRequest(headers);
100
+
101
+ expect(result.id).toBe('scoutpass');
102
+ expect(result.resolvedVia).toBe('origin');
103
+ });
104
+
89
105
  it('resolves learncard from staging.learncard.app', () => {
90
106
  const headers: RequestHeaders = { origin: 'https://staging.learncard.app' };
91
107
  const result = resolveTenantFromRequest(headers);
@@ -186,6 +202,14 @@ describe('resolveTenantFromRequest', () => {
186
202
  expect(result.emailBranding.supportEmail).toBe('support@vetpass.app');
187
203
  });
188
204
 
205
+ it('returns ScoutPass overrides for scoutpass tenant', () => {
206
+ const result = resolveTenantFromRequest({ 'x-tenant-id': 'scoutpass' });
207
+
208
+ expect(result.emailBranding.brandName).toBe('ScoutPass');
209
+ expect(result.emailBranding.primaryColor).toBe('#00BA88');
210
+ expect(result.emailBranding.supportEmail).toBe('support@scout.org');
211
+ });
212
+
189
213
  it('returns empty branding for unknown tenant', () => {
190
214
  const result = resolveTenantFromRequest({ 'x-tenant-id': 'unknown-tenant' });
191
215
 
@@ -54,6 +54,12 @@ const ORIGIN_MAP: Record<string, string> = {
54
54
  'alpha.vetpass.app': 'vetpass',
55
55
  'staging.vetpass.app': 'vetpass',
56
56
 
57
+ // ScoutPass
58
+ 'scout.org': 'scoutpass',
59
+ 'www.scout.org': 'scoutpass',
60
+ 'pass.scout.org': 'scoutpass',
61
+ 'staging.pass.scout.org': 'scoutpass',
62
+
57
63
  // LearnCard
58
64
  'learncard.app': 'learncard',
59
65
  'staging.learncard.app': 'learncard',
@@ -85,6 +91,19 @@ const TENANT_EMAIL_BRANDING: Record<string, Partial<TenantBranding>> = {
85
91
  fromDomain: 'vetpass.app',
86
92
  copyrightHolder: 'VetPass',
87
93
  },
94
+
95
+ scoutpass: {
96
+ brandName: 'ScoutPass',
97
+ logoUrl: 'https://pass.scout.org/assets/icon/icon.png',
98
+ logoAlt: 'ScoutPass',
99
+ primaryColor: '#00BA88',
100
+ primaryTextColor: '#ffffff',
101
+ supportEmail: 'support@scout.org',
102
+ websiteUrl: 'https://scout.org/scoutpass',
103
+ appUrl: 'https://pass.scout.org',
104
+ fromDomain: 'scoutnetwork.org',
105
+ copyrightHolder: 'ScoutPass',
106
+ },
88
107
  };
89
108
 
90
109
  // ---------------------------------------------------------------------------
@@ -129,7 +148,7 @@ const tenantIdFromHostname = (hostname: string): string | undefined => {
129
148
  */
130
149
  export const resolveTenantFromRequest = (
131
150
  headers: RequestHeaders,
132
- envTenantId?: string,
151
+ envTenantId?: string
133
152
  ): ResolvedTenant => {
134
153
  // 1. Explicit X-Tenant-Id header (native apps, any informed client)
135
154
  const explicit = normalizeHeader(headers['x-tenant-id']);
@@ -196,7 +215,10 @@ export const registerOriginMapping = (hostname: string, tenantId: string): void
196
215
  * Register or update email branding for a tenant at startup.
197
216
  * Merges with any existing branding (does not replace).
198
217
  */
199
- export const registerTenantBranding = (tenantId: string, branding: Partial<TenantBranding>): void => {
218
+ export const registerTenantBranding = (
219
+ tenantId: string,
220
+ branding: Partial<TenantBranding>
221
+ ): void => {
200
222
  TENANT_EMAIL_BRANDING[tenantId] = {
201
223
  ...TENANT_EMAIL_BRANDING[tenantId],
202
224
  ...branding,