@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;
|
|
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"}
|
package/dist/tenant-registry.js
CHANGED
|
@@ -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
|
@@ -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
|
|
package/src/tenant-registry.ts
CHANGED
|
@@ -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 = (
|
|
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,
|