payload-plugin-newsletter 0.4.4 → 0.6.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.
- package/CHANGELOG.md +28 -1
- package/ESM_FIX_SUMMARY.md +74 -0
- package/dist/client.cjs +899 -0
- package/dist/client.cjs.map +1 -0
- package/dist/client.d.cts +52 -0
- package/dist/client.d.ts +52 -0
- package/dist/client.js +867 -0
- package/dist/client.js.map +1 -0
- package/dist/components.cjs +899 -0
- package/dist/components.cjs.map +1 -0
- package/dist/components.d.cts +4 -0
- package/dist/components.d.ts +4 -0
- package/dist/components.js +867 -0
- package/dist/components.js.map +1 -0
- package/dist/index.cjs +1928 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +11 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.js +1891 -0
- package/dist/index.js.map +1 -0
- package/dist/types.cjs +19 -0
- package/dist/types.cjs.map +1 -0
- package/dist/{types/index.d.ts → types.d.cts} +20 -18
- package/dist/types.d.ts +350 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/package.json +40 -17
- package/dist/.tsbuildinfo +0 -1
- package/dist/collections/NewsletterSettings.d.ts +0 -4
- package/dist/collections/NewsletterSettings.d.ts.map +0 -1
- package/dist/collections/Subscribers.d.ts +0 -4
- package/dist/collections/Subscribers.d.ts.map +0 -1
- package/dist/components/MagicLinkVerify.d.ts +0 -27
- package/dist/components/MagicLinkVerify.d.ts.map +0 -1
- package/dist/components/NewsletterForm.d.ts +0 -5
- package/dist/components/NewsletterForm.d.ts.map +0 -1
- package/dist/components/PreferencesForm.d.ts +0 -5
- package/dist/components/PreferencesForm.d.ts.map +0 -1
- package/dist/components/index.d.ts +0 -5
- package/dist/components/index.d.ts.map +0 -1
- package/dist/endpoints/index.d.ts +0 -4
- package/dist/endpoints/index.d.ts.map +0 -1
- package/dist/endpoints/preferences.d.ts +0 -5
- package/dist/endpoints/preferences.d.ts.map +0 -1
- package/dist/endpoints/subscribe.d.ts +0 -4
- package/dist/endpoints/subscribe.d.ts.map +0 -1
- package/dist/endpoints/unsubscribe.d.ts +0 -4
- package/dist/endpoints/unsubscribe.d.ts.map +0 -1
- package/dist/endpoints/verify-magic-link.d.ts +0 -4
- package/dist/endpoints/verify-magic-link.d.ts.map +0 -1
- package/dist/exports/client.d.ts +0 -6
- package/dist/exports/client.d.ts.map +0 -1
- package/dist/exports/components.d.ts +0 -2
- package/dist/exports/components.d.ts.map +0 -1
- package/dist/exports/types.d.ts +0 -2
- package/dist/exports/types.d.ts.map +0 -1
- package/dist/fields/newsletterScheduling.d.ts +0 -4
- package/dist/fields/newsletterScheduling.d.ts.map +0 -1
- package/dist/hooks/useNewsletterAuth.d.ts +0 -16
- package/dist/hooks/useNewsletterAuth.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/providers/broadcast.d.ts +0 -19
- package/dist/providers/broadcast.d.ts.map +0 -1
- package/dist/providers/index.d.ts +0 -23
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/resend.d.ts +0 -20
- package/dist/providers/resend.d.ts.map +0 -1
- package/dist/providers/types.d.ts +0 -46
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/src/collections/NewsletterSettings.js +0 -390
- package/dist/src/collections/NewsletterSettings.js.map +0 -1
- package/dist/src/collections/Subscribers.js +0 -309
- package/dist/src/collections/Subscribers.js.map +0 -1
- package/dist/src/components/MagicLinkVerify.js +0 -180
- package/dist/src/components/MagicLinkVerify.js.map +0 -1
- package/dist/src/components/NewsletterForm.js +0 -326
- package/dist/src/components/NewsletterForm.js.map +0 -1
- package/dist/src/components/PreferencesForm.js +0 -524
- package/dist/src/components/PreferencesForm.js.map +0 -1
- package/dist/src/components/index.js +0 -5
- package/dist/src/components/index.js.map +0 -1
- package/dist/src/endpoints/index.js +0 -17
- package/dist/src/endpoints/index.js.map +0 -1
- package/dist/src/endpoints/preferences.js +0 -136
- package/dist/src/endpoints/preferences.js.map +0 -1
- package/dist/src/endpoints/subscribe.js +0 -162
- package/dist/src/endpoints/subscribe.js.map +0 -1
- package/dist/src/endpoints/unsubscribe.js +0 -105
- package/dist/src/endpoints/unsubscribe.js.map +0 -1
- package/dist/src/endpoints/verify-magic-link.js +0 -103
- package/dist/src/endpoints/verify-magic-link.js.map +0 -1
- package/dist/src/exports/client.js +0 -7
- package/dist/src/exports/client.js.map +0 -1
- package/dist/src/exports/components.js +0 -6
- package/dist/src/exports/components.js.map +0 -1
- package/dist/src/exports/types.js +0 -3
- package/dist/src/exports/types.js.map +0 -1
- package/dist/src/fields/newsletterScheduling.js +0 -194
- package/dist/src/fields/newsletterScheduling.js.map +0 -1
- package/dist/src/hooks/useNewsletterAuth.js +0 -112
- package/dist/src/hooks/useNewsletterAuth.js.map +0 -1
- package/dist/src/index.js +0 -130
- package/dist/src/index.js.map +0 -1
- package/dist/src/providers/broadcast.js +0 -158
- package/dist/src/providers/broadcast.js.map +0 -1
- package/dist/src/providers/index.js +0 -63
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/providers/resend.js +0 -122
- package/dist/src/providers/resend.js.map +0 -1
- package/dist/src/providers/types.js +0 -12
- package/dist/src/providers/types.js.map +0 -1
- package/dist/src/templates/BaseTemplate.js +0 -105
- package/dist/src/templates/BaseTemplate.js.map +0 -1
- package/dist/src/templates/MagicLinkTemplate.js +0 -178
- package/dist/src/templates/MagicLinkTemplate.js.map +0 -1
- package/dist/src/templates/NewsletterTemplate.js +0 -150
- package/dist/src/templates/NewsletterTemplate.js.map +0 -1
- package/dist/src/templates/WelcomeTemplate.js +0 -192
- package/dist/src/templates/WelcomeTemplate.js.map +0 -1
- package/dist/src/templates/index.js +0 -6
- package/dist/src/templates/index.js.map +0 -1
- package/dist/src/types/index.js +0 -3
- package/dist/src/types/index.js.map +0 -1
- package/dist/src/utils/access.js +0 -80
- package/dist/src/utils/access.js.map +0 -1
- package/dist/src/utils/jwt.js +0 -91
- package/dist/src/utils/jwt.js.map +0 -1
- package/dist/src/utils/rate-limiter.js +0 -43
- package/dist/src/utils/rate-limiter.js.map +0 -1
- package/dist/src/utils/validation.js +0 -148
- package/dist/src/utils/validation.js.map +0 -1
- package/dist/templates/BaseTemplate.d.ts +0 -45
- package/dist/templates/BaseTemplate.d.ts.map +0 -1
- package/dist/templates/MagicLinkTemplate.d.ts +0 -67
- package/dist/templates/MagicLinkTemplate.d.ts.map +0 -1
- package/dist/templates/NewsletterTemplate.d.ts +0 -112
- package/dist/templates/NewsletterTemplate.d.ts.map +0 -1
- package/dist/templates/WelcomeTemplate.d.ts +0 -55
- package/dist/templates/WelcomeTemplate.d.ts.map +0 -1
- package/dist/templates/index.d.ts +0 -7
- package/dist/templates/index.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/utils/access.d.ts +0 -15
- package/dist/utils/access.d.ts.map +0 -1
- package/dist/utils/jwt.d.ts +0 -32
- package/dist/utils/jwt.d.ts.map +0 -1
- package/dist/utils/rate-limiter.d.ts +0 -15
- package/dist/utils/rate-limiter.d.ts.map +0 -1
- package/dist/utils/validation.d.ts +0 -33
- package/dist/utils/validation.d.ts.map +0 -1
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
export class RateLimiter {
|
|
2
|
-
attempts = new Map();
|
|
3
|
-
options;
|
|
4
|
-
constructor(options){
|
|
5
|
-
this.options = options;
|
|
6
|
-
}
|
|
7
|
-
async checkLimit(key) {
|
|
8
|
-
const now = Date.now();
|
|
9
|
-
const record = this.attempts.get(key);
|
|
10
|
-
if (!record || record.resetTime < now) {
|
|
11
|
-
this.attempts.set(key, {
|
|
12
|
-
count: 1,
|
|
13
|
-
resetTime: now + this.options.windowMs
|
|
14
|
-
});
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
if (record.count >= this.options.maxAttempts) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
record.count++;
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
async incrementAttempt(key) {
|
|
24
|
-
const now = Date.now();
|
|
25
|
-
const record = this.attempts.get(key);
|
|
26
|
-
if (!record || record.resetTime < now) {
|
|
27
|
-
this.attempts.set(key, {
|
|
28
|
-
count: 1,
|
|
29
|
-
resetTime: now + this.options.windowMs
|
|
30
|
-
});
|
|
31
|
-
} else {
|
|
32
|
-
record.count++;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
async reset(key) {
|
|
36
|
-
this.attempts.delete(key);
|
|
37
|
-
}
|
|
38
|
-
async resetAll() {
|
|
39
|
-
this.attempts.clear();
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/rate-limiter.ts"],"sourcesContent":["export interface RateLimiterOptions {\n maxAttempts: number\n windowMs: number\n prefix?: string\n}\n\nexport class RateLimiter {\n private attempts: Map<string, { count: number; resetTime: number }> = new Map()\n private options: RateLimiterOptions\n\n constructor(options: RateLimiterOptions) {\n this.options = options\n }\n\n async checkLimit(key: string): Promise<boolean> {\n const now = Date.now()\n const record = this.attempts.get(key)\n\n if (!record || record.resetTime < now) {\n this.attempts.set(key, {\n count: 1,\n resetTime: now + this.options.windowMs\n })\n return true\n }\n\n if (record.count >= this.options.maxAttempts) {\n return false\n }\n\n record.count++\n return true\n }\n\n async incrementAttempt(key: string): Promise<void> {\n const now = Date.now()\n const record = this.attempts.get(key)\n\n if (!record || record.resetTime < now) {\n this.attempts.set(key, {\n count: 1,\n resetTime: now + this.options.windowMs\n })\n } else {\n record.count++\n }\n }\n\n async reset(key: string): Promise<void> {\n this.attempts.delete(key)\n }\n\n async resetAll(): Promise<void> {\n this.attempts.clear()\n }\n}"],"names":["RateLimiter","attempts","Map","options","checkLimit","key","now","Date","record","get","resetTime","set","count","windowMs","maxAttempts","incrementAttempt","reset","delete","resetAll","clear"],"mappings":"AAMA,OAAO,MAAMA;IACHC,WAA8D,IAAIC,MAAK;IACvEC,QAA2B;IAEnC,YAAYA,OAA2B,CAAE;QACvC,IAAI,CAACA,OAAO,GAAGA;IACjB;IAEA,MAAMC,WAAWC,GAAW,EAAoB;QAC9C,MAAMC,MAAMC,KAAKD,GAAG;QACpB,MAAME,SAAS,IAAI,CAACP,QAAQ,CAACQ,GAAG,CAACJ;QAEjC,IAAI,CAACG,UAAUA,OAAOE,SAAS,GAAGJ,KAAK;YACrC,IAAI,CAACL,QAAQ,CAACU,GAAG,CAACN,KAAK;gBACrBO,OAAO;gBACPF,WAAWJ,MAAM,IAAI,CAACH,OAAO,CAACU,QAAQ;YACxC;YACA,OAAO;QACT;QAEA,IAAIL,OAAOI,KAAK,IAAI,IAAI,CAACT,OAAO,CAACW,WAAW,EAAE;YAC5C,OAAO;QACT;QAEAN,OAAOI,KAAK;QACZ,OAAO;IACT;IAEA,MAAMG,iBAAiBV,GAAW,EAAiB;QACjD,MAAMC,MAAMC,KAAKD,GAAG;QACpB,MAAME,SAAS,IAAI,CAACP,QAAQ,CAACQ,GAAG,CAACJ;QAEjC,IAAI,CAACG,UAAUA,OAAOE,SAAS,GAAGJ,KAAK;YACrC,IAAI,CAACL,QAAQ,CAACU,GAAG,CAACN,KAAK;gBACrBO,OAAO;gBACPF,WAAWJ,MAAM,IAAI,CAACH,OAAO,CAACU,QAAQ;YACxC;QACF,OAAO;YACLL,OAAOI,KAAK;QACd;IACF;IAEA,MAAMI,MAAMX,GAAW,EAAiB;QACtC,IAAI,CAACJ,QAAQ,CAACgB,MAAM,CAACZ;IACvB;IAEA,MAAMa,WAA0B;QAC9B,IAAI,CAACjB,QAAQ,CAACkB,KAAK;IACrB;AACF"}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import DOMPurify from 'isomorphic-dompurify';
|
|
2
|
-
/**
|
|
3
|
-
* Validate email address format
|
|
4
|
-
*/ export function isValidEmail(email) {
|
|
5
|
-
if (!email || typeof email !== 'string') return false;
|
|
6
|
-
// Trim whitespace
|
|
7
|
-
const trimmed = email.trim();
|
|
8
|
-
// Length limits
|
|
9
|
-
if (trimmed.length > 255) return false;
|
|
10
|
-
// Check for dangerous patterns
|
|
11
|
-
if (trimmed.includes('<') || trimmed.includes('>')) return false;
|
|
12
|
-
if (trimmed.includes('javascript:')) return false;
|
|
13
|
-
if (trimmed.includes('data:')) return false;
|
|
14
|
-
// Basic format validation with stricter regex
|
|
15
|
-
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
|
16
|
-
if (!emailRegex.test(trimmed)) return false;
|
|
17
|
-
// Additional validation rules
|
|
18
|
-
const parts = trimmed.split('@');
|
|
19
|
-
if (parts.length !== 2) return false;
|
|
20
|
-
const [localPart, domain] = parts;
|
|
21
|
-
// Check local part length
|
|
22
|
-
if (localPart.length > 64 || localPart.length === 0) return false;
|
|
23
|
-
// Check for invalid patterns
|
|
24
|
-
if (localPart.startsWith('.') || localPart.endsWith('.')) return false;
|
|
25
|
-
if (domain.startsWith('.') || domain.endsWith('.')) return false;
|
|
26
|
-
if (domain.includes('..')) return false;
|
|
27
|
-
if (localPart.includes('..')) return false;
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Normalize email for rate limiting and deduplication
|
|
32
|
-
*/ export function normalizeEmail(email) {
|
|
33
|
-
if (!email || typeof email !== 'string') return '';
|
|
34
|
-
const parts = email.toLowerCase().trim().split('@');
|
|
35
|
-
if (parts.length !== 2) return email.toLowerCase().trim();
|
|
36
|
-
let [localPart] = parts;
|
|
37
|
-
const [, domain] = parts;
|
|
38
|
-
// Remove dots from local part (Gmail-style)
|
|
39
|
-
localPart = localPart.replace(/\./g, '');
|
|
40
|
-
// Remove everything after + (Gmail-style aliases)
|
|
41
|
-
const plusIndex = localPart.indexOf('+');
|
|
42
|
-
if (plusIndex > -1) {
|
|
43
|
-
localPart = localPart.substring(0, plusIndex);
|
|
44
|
-
}
|
|
45
|
-
return `${localPart}@${domain}`;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Check if email domain is allowed
|
|
49
|
-
*/ export function isDomainAllowed(email, allowedDomains) {
|
|
50
|
-
// Validate email format first
|
|
51
|
-
if (!isValidEmail(email)) {
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
// If no domains specified, allow all valid emails
|
|
55
|
-
if (!allowedDomains || allowedDomains.length === 0) {
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
const domain = email.split('@')[1]?.toLowerCase();
|
|
59
|
-
if (!domain) return false;
|
|
60
|
-
return allowedDomains.some((allowedDomain)=>domain === allowedDomain.toLowerCase());
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Sanitize user input to prevent XSS
|
|
64
|
-
*/ export function sanitizeInput(input) {
|
|
65
|
-
if (!input) return '';
|
|
66
|
-
// First, remove all HTML tags and scripts
|
|
67
|
-
let cleaned = DOMPurify.sanitize(input, {
|
|
68
|
-
ALLOWED_TAGS: [],
|
|
69
|
-
ALLOWED_ATTR: [],
|
|
70
|
-
KEEP_CONTENT: true
|
|
71
|
-
});
|
|
72
|
-
// Additional security: remove dangerous patterns
|
|
73
|
-
cleaned = cleaned.replace(/javascript:/gi, '').replace(/data:/gi, '').replace(/vbscript:/gi, '').replace(/file:\/\//gi, '').replace(/onload/gi, '').replace(/onerror/gi, '').replace(/onclick/gi, '').replace(/onmouseover/gi, '').replace(/alert\(/gi, '').replace(/prompt\(/gi, '').replace(/confirm\(/gi, '').replace(/\|/g, '') // Remove pipe character (command injection)
|
|
74
|
-
.replace(/;/g, '') // Remove semicolon (command chaining)
|
|
75
|
-
.replace(/`/g, '') // Remove backticks (command substitution)
|
|
76
|
-
.replace(/&&/g, '') // Remove command chaining
|
|
77
|
-
.replace(/\$\(/g, '') // Remove command substitution pattern $()
|
|
78
|
-
.replace(/\.\./g, '') // Remove directory traversal
|
|
79
|
-
.replace(/\/..\//g, '') // Remove path traversal
|
|
80
|
-
.replace(/\0/g, ''); // Remove null bytes
|
|
81
|
-
return cleaned.trim();
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Extract UTM parameters from URL search params
|
|
85
|
-
*/ export function extractUTMParams(searchParams) {
|
|
86
|
-
const utmParams = {};
|
|
87
|
-
const utmKeys = [
|
|
88
|
-
'utm_source',
|
|
89
|
-
'utm_medium',
|
|
90
|
-
'utm_campaign',
|
|
91
|
-
'utm_content',
|
|
92
|
-
'utm_term'
|
|
93
|
-
];
|
|
94
|
-
utmKeys.forEach((key)=>{
|
|
95
|
-
const value = searchParams.get(key);
|
|
96
|
-
if (value) {
|
|
97
|
-
// Remove 'utm_' prefix for storage
|
|
98
|
-
const shortKey = key.replace('utm_', '');
|
|
99
|
-
utmParams[shortKey] = value;
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
return utmParams;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Validate source field - only allow predefined values
|
|
106
|
-
*/ export function isValidSource(source) {
|
|
107
|
-
if (!source || typeof source !== 'string') return false;
|
|
108
|
-
const allowedSources = [
|
|
109
|
-
'website',
|
|
110
|
-
'api',
|
|
111
|
-
'import',
|
|
112
|
-
'admin',
|
|
113
|
-
'signup-form',
|
|
114
|
-
'magic-link',
|
|
115
|
-
'preferences',
|
|
116
|
-
'external'
|
|
117
|
-
];
|
|
118
|
-
return allowedSources.includes(source);
|
|
119
|
-
}
|
|
120
|
-
export function validateSubscriberData(data) {
|
|
121
|
-
const errors = [];
|
|
122
|
-
// Email validation
|
|
123
|
-
if (!data.email) {
|
|
124
|
-
errors.push('Email is required');
|
|
125
|
-
} else if (!isValidEmail(data.email)) {
|
|
126
|
-
errors.push('Invalid email format');
|
|
127
|
-
}
|
|
128
|
-
// Name validation (optional but if provided, should be reasonable)
|
|
129
|
-
if (data.name && data.name.length > 100) {
|
|
130
|
-
errors.push('Name is too long (max 100 characters)');
|
|
131
|
-
}
|
|
132
|
-
// Source validation
|
|
133
|
-
if (data.source !== undefined) {
|
|
134
|
-
if (!data.source || data.source.length === 0) {
|
|
135
|
-
errors.push('Source cannot be empty');
|
|
136
|
-
} else if (data.source.length > 50) {
|
|
137
|
-
errors.push('Source is too long (max 50 characters)');
|
|
138
|
-
} else if (!isValidSource(data.source)) {
|
|
139
|
-
errors.push('Invalid source value');
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
return {
|
|
143
|
-
valid: errors.length === 0,
|
|
144
|
-
errors
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/validation.ts"],"sourcesContent":["import DOMPurify from 'isomorphic-dompurify'\n\n/**\n * Validate email address format\n */\nexport function isValidEmail(email: string): boolean {\n if (!email || typeof email !== 'string') return false\n \n // Trim whitespace\n const trimmed = email.trim()\n \n // Length limits\n if (trimmed.length > 255) return false\n \n // Check for dangerous patterns\n if (trimmed.includes('<') || trimmed.includes('>')) return false\n if (trimmed.includes('javascript:')) return false\n if (trimmed.includes('data:')) return false\n \n // Basic format validation with stricter regex\n const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\n if (!emailRegex.test(trimmed)) return false\n \n // Additional validation rules\n const parts = trimmed.split('@')\n if (parts.length !== 2) return false\n \n const [localPart, domain] = parts\n \n // Check local part length\n if (localPart.length > 64 || localPart.length === 0) return false\n \n // Check for invalid patterns\n if (localPart.startsWith('.') || localPart.endsWith('.')) return false\n if (domain.startsWith('.') || domain.endsWith('.')) return false\n if (domain.includes('..')) return false\n if (localPart.includes('..')) return false\n \n return true\n}\n\n/**\n * Normalize email for rate limiting and deduplication\n */\nexport function normalizeEmail(email: string): string {\n if (!email || typeof email !== 'string') return ''\n \n const parts = email.toLowerCase().trim().split('@')\n if (parts.length !== 2) return email.toLowerCase().trim()\n \n let [localPart] = parts\n const [, domain] = parts\n \n // Remove dots from local part (Gmail-style)\n localPart = localPart.replace(/\\./g, '')\n \n // Remove everything after + (Gmail-style aliases)\n const plusIndex = localPart.indexOf('+')\n if (plusIndex > -1) {\n localPart = localPart.substring(0, plusIndex)\n }\n \n return `${localPart}@${domain}`\n}\n\n/**\n * Check if email domain is allowed\n */\nexport function isDomainAllowed(\n email: string,\n allowedDomains?: string[]\n): boolean {\n // Validate email format first\n if (!isValidEmail(email)) {\n return false\n }\n \n // If no domains specified, allow all valid emails\n if (!allowedDomains || allowedDomains.length === 0) {\n return true\n }\n\n const domain = email.split('@')[1]?.toLowerCase()\n if (!domain) return false\n\n return allowedDomains.some(\n allowedDomain => domain === allowedDomain.toLowerCase()\n )\n}\n\n/**\n * Sanitize user input to prevent XSS\n */\nexport function sanitizeInput(input: string): string {\n if (!input) return ''\n \n // First, remove all HTML tags and scripts\n let cleaned = DOMPurify.sanitize(input, { \n ALLOWED_TAGS: [],\n ALLOWED_ATTR: [],\n KEEP_CONTENT: true\n })\n \n // Additional security: remove dangerous patterns\n cleaned = cleaned\n .replace(/javascript:/gi, '')\n .replace(/data:/gi, '')\n .replace(/vbscript:/gi, '')\n .replace(/file:\\/\\//gi, '')\n .replace(/onload/gi, '')\n .replace(/onerror/gi, '')\n .replace(/onclick/gi, '')\n .replace(/onmouseover/gi, '')\n .replace(/alert\\(/gi, '')\n .replace(/prompt\\(/gi, '')\n .replace(/confirm\\(/gi, '')\n .replace(/\\|/g, '') // Remove pipe character (command injection)\n .replace(/;/g, '') // Remove semicolon (command chaining)\n .replace(/`/g, '') // Remove backticks (command substitution)\n .replace(/&&/g, '') // Remove command chaining\n .replace(/\\$\\(/g, '') // Remove command substitution pattern $()\n .replace(/\\.\\./g, '') // Remove directory traversal\n .replace(/\\/..\\//g, '') // Remove path traversal\n .replace(/\\0/g, '') // Remove null bytes\n \n return cleaned.trim()\n}\n\n/**\n * Extract UTM parameters from URL search params\n */\nexport function extractUTMParams(searchParams: URLSearchParams): Record<string, string> {\n const utmParams: Record<string, string> = {}\n const utmKeys = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term']\n\n utmKeys.forEach(key => {\n const value = searchParams.get(key)\n if (value) {\n // Remove 'utm_' prefix for storage\n const shortKey = key.replace('utm_', '')\n utmParams[shortKey] = value\n }\n })\n\n return utmParams\n}\n\n/**\n * Validate source field - only allow predefined values\n */\nexport function isValidSource(source: string): boolean {\n if (!source || typeof source !== 'string') return false\n \n const allowedSources = [\n 'website',\n 'api',\n 'import',\n 'admin',\n 'signup-form',\n 'magic-link',\n 'preferences',\n 'external'\n ]\n \n return allowedSources.includes(source)\n}\n\n/**\n * Validate subscriber data before creation\n */\nexport interface ValidateSubscriberResult {\n valid: boolean\n errors: string[]\n}\n\nexport function validateSubscriberData(data: any): ValidateSubscriberResult {\n const errors: string[] = []\n\n // Email validation\n if (!data.email) {\n errors.push('Email is required')\n } else if (!isValidEmail(data.email)) {\n errors.push('Invalid email format')\n }\n\n // Name validation (optional but if provided, should be reasonable)\n if (data.name && data.name.length > 100) {\n errors.push('Name is too long (max 100 characters)')\n }\n\n // Source validation\n if (data.source !== undefined) {\n if (!data.source || data.source.length === 0) {\n errors.push('Source cannot be empty')\n } else if (data.source.length > 50) {\n errors.push('Source is too long (max 50 characters)')\n } else if (!isValidSource(data.source)) {\n errors.push('Invalid source value')\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n }\n}"],"names":["DOMPurify","isValidEmail","email","trimmed","trim","length","includes","emailRegex","test","parts","split","localPart","domain","startsWith","endsWith","normalizeEmail","toLowerCase","replace","plusIndex","indexOf","substring","isDomainAllowed","allowedDomains","some","allowedDomain","sanitizeInput","input","cleaned","sanitize","ALLOWED_TAGS","ALLOWED_ATTR","KEEP_CONTENT","extractUTMParams","searchParams","utmParams","utmKeys","forEach","key","value","get","shortKey","isValidSource","source","allowedSources","validateSubscriberData","data","errors","push","name","undefined","valid"],"mappings":"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"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
export interface BaseTemplateProps {
|
|
3
|
-
preview?: string;
|
|
4
|
-
children: React.ReactNode;
|
|
5
|
-
footer?: {
|
|
6
|
-
unsubscribeUrl?: string;
|
|
7
|
-
preferencesUrl?: string;
|
|
8
|
-
address?: string;
|
|
9
|
-
copyright?: string;
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
export declare const baseStyles: {
|
|
13
|
-
main: {
|
|
14
|
-
backgroundColor: string;
|
|
15
|
-
fontFamily: string;
|
|
16
|
-
};
|
|
17
|
-
container: {
|
|
18
|
-
margin: string;
|
|
19
|
-
padding: string;
|
|
20
|
-
maxWidth: string;
|
|
21
|
-
};
|
|
22
|
-
content: {
|
|
23
|
-
padding: string;
|
|
24
|
-
};
|
|
25
|
-
footer: {
|
|
26
|
-
padding: string;
|
|
27
|
-
textAlign: "center";
|
|
28
|
-
};
|
|
29
|
-
footerText: {
|
|
30
|
-
color: string;
|
|
31
|
-
fontSize: string;
|
|
32
|
-
lineHeight: string;
|
|
33
|
-
margin: string;
|
|
34
|
-
};
|
|
35
|
-
footerLink: {
|
|
36
|
-
color: string;
|
|
37
|
-
textDecoration: string;
|
|
38
|
-
};
|
|
39
|
-
hr: {
|
|
40
|
-
borderColor: string;
|
|
41
|
-
margin: string;
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
export declare const BaseTemplate: React.FC<BaseTemplateProps>;
|
|
45
|
-
//# sourceMappingURL=BaseTemplate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseTemplate.d.ts","sourceRoot":"","sources":["../../src/templates/BaseTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAazB,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,MAAM,CAAC,EAAE;QACP,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCtB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA6DpD,CAAA"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { MagicLinkEmailProps } from '../types';
|
|
3
|
-
declare const magicLinkStyles: {
|
|
4
|
-
heading: {
|
|
5
|
-
fontSize: string;
|
|
6
|
-
fontWeight: string;
|
|
7
|
-
color: string;
|
|
8
|
-
margin: string;
|
|
9
|
-
};
|
|
10
|
-
text: {
|
|
11
|
-
fontSize: string;
|
|
12
|
-
lineHeight: string;
|
|
13
|
-
color: string;
|
|
14
|
-
margin: string;
|
|
15
|
-
};
|
|
16
|
-
button: {
|
|
17
|
-
backgroundColor: string;
|
|
18
|
-
borderRadius: string;
|
|
19
|
-
color: string;
|
|
20
|
-
fontSize: string;
|
|
21
|
-
fontWeight: string;
|
|
22
|
-
textDecoration: string;
|
|
23
|
-
textAlign: "center";
|
|
24
|
-
display: string;
|
|
25
|
-
width: string;
|
|
26
|
-
padding: string;
|
|
27
|
-
margin: string;
|
|
28
|
-
};
|
|
29
|
-
codeSection: {
|
|
30
|
-
backgroundColor: string;
|
|
31
|
-
borderRadius: string;
|
|
32
|
-
padding: string;
|
|
33
|
-
margin: string;
|
|
34
|
-
textAlign: "center";
|
|
35
|
-
};
|
|
36
|
-
code: {
|
|
37
|
-
fontSize: string;
|
|
38
|
-
fontWeight: string;
|
|
39
|
-
color: string;
|
|
40
|
-
letterSpacing: string;
|
|
41
|
-
fontFamily: string;
|
|
42
|
-
};
|
|
43
|
-
warning: {
|
|
44
|
-
fontSize: string;
|
|
45
|
-
color: string;
|
|
46
|
-
margin: string;
|
|
47
|
-
padding: string;
|
|
48
|
-
backgroundColor: string;
|
|
49
|
-
borderRadius: string;
|
|
50
|
-
};
|
|
51
|
-
expire: {
|
|
52
|
-
fontSize: string;
|
|
53
|
-
color: string;
|
|
54
|
-
fontStyle: string;
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
export declare const MagicLinkTemplate: React.FC<MagicLinkEmailProps>;
|
|
58
|
-
export declare function createMagicLinkTemplate(customContent?: {
|
|
59
|
-
heading?: string;
|
|
60
|
-
intro?: string;
|
|
61
|
-
buttonText?: string;
|
|
62
|
-
warning?: string;
|
|
63
|
-
expireText?: string;
|
|
64
|
-
includeCode?: boolean;
|
|
65
|
-
}, customStyles?: Partial<typeof magicLinkStyles>): React.FC<MagicLinkEmailProps>;
|
|
66
|
-
export {};
|
|
67
|
-
//# sourceMappingURL=MagicLinkTemplate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MagicLinkTemplate.d.ts","sourceRoot":"","sources":["../../src/templates/MagicLinkTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDpB,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAkD3D,CAAA;AAGD,wBAAgB,uBAAuB,CACrC,aAAa,CAAC,EAAE;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,EACD,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO,eAAe,CAAC,GAC7C,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAuD/B"}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
export interface NewsletterTemplateProps {
|
|
3
|
-
subject: string;
|
|
4
|
-
preheader?: string;
|
|
5
|
-
title?: string;
|
|
6
|
-
content: string;
|
|
7
|
-
ctaButton?: {
|
|
8
|
-
text: string;
|
|
9
|
-
href: string;
|
|
10
|
-
};
|
|
11
|
-
footer?: {
|
|
12
|
-
unsubscribeUrl?: string;
|
|
13
|
-
preferencesUrl?: string;
|
|
14
|
-
address?: string;
|
|
15
|
-
copyright?: string;
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
declare const newsletterStyles: {
|
|
19
|
-
heading: {
|
|
20
|
-
fontSize: string;
|
|
21
|
-
fontWeight: string;
|
|
22
|
-
color: string;
|
|
23
|
-
margin: string;
|
|
24
|
-
};
|
|
25
|
-
markdown: {
|
|
26
|
-
h1: {
|
|
27
|
-
fontSize: string;
|
|
28
|
-
fontWeight: string;
|
|
29
|
-
color: string;
|
|
30
|
-
margin: string;
|
|
31
|
-
};
|
|
32
|
-
h2: {
|
|
33
|
-
fontSize: string;
|
|
34
|
-
fontWeight: string;
|
|
35
|
-
color: string;
|
|
36
|
-
margin: string;
|
|
37
|
-
};
|
|
38
|
-
h3: {
|
|
39
|
-
fontSize: string;
|
|
40
|
-
fontWeight: string;
|
|
41
|
-
color: string;
|
|
42
|
-
margin: string;
|
|
43
|
-
};
|
|
44
|
-
p: {
|
|
45
|
-
fontSize: string;
|
|
46
|
-
lineHeight: string;
|
|
47
|
-
color: string;
|
|
48
|
-
margin: string;
|
|
49
|
-
};
|
|
50
|
-
a: {
|
|
51
|
-
color: string;
|
|
52
|
-
textDecoration: string;
|
|
53
|
-
};
|
|
54
|
-
ul: {
|
|
55
|
-
paddingLeft: string;
|
|
56
|
-
margin: string;
|
|
57
|
-
};
|
|
58
|
-
ol: {
|
|
59
|
-
paddingLeft: string;
|
|
60
|
-
margin: string;
|
|
61
|
-
};
|
|
62
|
-
li: {
|
|
63
|
-
fontSize: string;
|
|
64
|
-
lineHeight: string;
|
|
65
|
-
color: string;
|
|
66
|
-
marginBottom: string;
|
|
67
|
-
};
|
|
68
|
-
img: {
|
|
69
|
-
maxWidth: string;
|
|
70
|
-
height: string;
|
|
71
|
-
margin: string;
|
|
72
|
-
};
|
|
73
|
-
blockquote: {
|
|
74
|
-
borderLeft: string;
|
|
75
|
-
paddingLeft: string;
|
|
76
|
-
margin: string;
|
|
77
|
-
fontStyle: string;
|
|
78
|
-
color: string;
|
|
79
|
-
};
|
|
80
|
-
code: {
|
|
81
|
-
backgroundColor: string;
|
|
82
|
-
padding: string;
|
|
83
|
-
borderRadius: string;
|
|
84
|
-
fontFamily: string;
|
|
85
|
-
fontSize: string;
|
|
86
|
-
};
|
|
87
|
-
pre: {
|
|
88
|
-
backgroundColor: string;
|
|
89
|
-
padding: string;
|
|
90
|
-
borderRadius: string;
|
|
91
|
-
overflow: string;
|
|
92
|
-
margin: string;
|
|
93
|
-
};
|
|
94
|
-
};
|
|
95
|
-
button: {
|
|
96
|
-
backgroundColor: string;
|
|
97
|
-
borderRadius: string;
|
|
98
|
-
color: string;
|
|
99
|
-
fontSize: string;
|
|
100
|
-
fontWeight: string;
|
|
101
|
-
textDecoration: string;
|
|
102
|
-
textAlign: "center";
|
|
103
|
-
display: string;
|
|
104
|
-
width: string;
|
|
105
|
-
padding: string;
|
|
106
|
-
margin: string;
|
|
107
|
-
};
|
|
108
|
-
};
|
|
109
|
-
export declare const NewsletterTemplate: React.FC<NewsletterTemplateProps>;
|
|
110
|
-
export declare function createNewsletterTemplate(customStyles?: Partial<typeof newsletterStyles>): React.FC<NewsletterTemplateProps>;
|
|
111
|
-
export {};
|
|
112
|
-
//# sourceMappingURL=NewsletterTemplate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NewsletterTemplate.d.ts","sourceRoot":"","sources":["../../src/templates/NewsletterTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACD,MAAM,CAAC,EAAE;QACP,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0FrB,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAsChE,CAAA;AAGD,wBAAgB,wBAAwB,CACtC,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO,gBAAgB,CAAC,GAC9C,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAoCnC"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { WelcomeEmailProps } from '../types';
|
|
3
|
-
declare const welcomeStyles: {
|
|
4
|
-
heading: {
|
|
5
|
-
fontSize: string;
|
|
6
|
-
fontWeight: string;
|
|
7
|
-
color: string;
|
|
8
|
-
margin: string;
|
|
9
|
-
};
|
|
10
|
-
subheading: {
|
|
11
|
-
fontSize: string;
|
|
12
|
-
fontWeight: string;
|
|
13
|
-
color: string;
|
|
14
|
-
margin: string;
|
|
15
|
-
};
|
|
16
|
-
text: {
|
|
17
|
-
fontSize: string;
|
|
18
|
-
lineHeight: string;
|
|
19
|
-
color: string;
|
|
20
|
-
margin: string;
|
|
21
|
-
};
|
|
22
|
-
button: {
|
|
23
|
-
backgroundColor: string;
|
|
24
|
-
borderRadius: string;
|
|
25
|
-
color: string;
|
|
26
|
-
fontSize: string;
|
|
27
|
-
fontWeight: string;
|
|
28
|
-
textDecoration: string;
|
|
29
|
-
textAlign: "center";
|
|
30
|
-
display: string;
|
|
31
|
-
width: string;
|
|
32
|
-
padding: string;
|
|
33
|
-
margin: string;
|
|
34
|
-
};
|
|
35
|
-
list: {
|
|
36
|
-
paddingLeft: string;
|
|
37
|
-
margin: string;
|
|
38
|
-
};
|
|
39
|
-
listItem: {
|
|
40
|
-
fontSize: string;
|
|
41
|
-
lineHeight: string;
|
|
42
|
-
color: string;
|
|
43
|
-
marginBottom: string;
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
export declare const WelcomeTemplate: React.FC<WelcomeEmailProps>;
|
|
47
|
-
export declare function createWelcomeTemplate(customContent?: {
|
|
48
|
-
heading?: string;
|
|
49
|
-
intro?: string;
|
|
50
|
-
features?: string[];
|
|
51
|
-
ctaText?: string;
|
|
52
|
-
closing?: string;
|
|
53
|
-
}, customStyles?: Partial<typeof welcomeStyles>): React.FC<WelcomeEmailProps>;
|
|
54
|
-
export {};
|
|
55
|
-
//# sourceMappingURL=WelcomeTemplate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WelcomeTemplate.d.ts","sourceRoot":"","sources":["../../src/templates/WelcomeTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAEjD,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0ClB,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAkEvD,CAAA;AAGD,wBAAgB,qBAAqB,CACnC,aAAa,CAAC,EAAE;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,EACD,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO,aAAa,CAAC,GAC3C,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAmE7B"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { BaseTemplate, baseStyles } from './BaseTemplate';
|
|
2
|
-
export type { BaseTemplateProps } from './BaseTemplate';
|
|
3
|
-
export { NewsletterTemplate, createNewsletterTemplate } from './NewsletterTemplate';
|
|
4
|
-
export type { NewsletterTemplateProps } from './NewsletterTemplate';
|
|
5
|
-
export { WelcomeTemplate, createWelcomeTemplate } from './WelcomeTemplate';
|
|
6
|
-
export { MagicLinkTemplate, createMagicLinkTemplate } from './MagicLinkTemplate';
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEvD,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AACnF,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAEnE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE1E,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/access.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { Access } from 'payload';
|
|
2
|
-
import type { NewsletterPluginConfig } from '../types';
|
|
3
|
-
/**
|
|
4
|
-
* Check if a user is an admin based on the plugin configuration
|
|
5
|
-
*/
|
|
6
|
-
export declare const isAdmin: (user: any, config?: NewsletterPluginConfig) => boolean;
|
|
7
|
-
/**
|
|
8
|
-
* Create admin-only access control
|
|
9
|
-
*/
|
|
10
|
-
export declare const adminOnly: (config?: NewsletterPluginConfig) => Access;
|
|
11
|
-
/**
|
|
12
|
-
* Create admin or owner access control
|
|
13
|
-
*/
|
|
14
|
-
export declare const adminOrSelf: (config?: NewsletterPluginConfig) => Access;
|
|
15
|
-
//# sourceMappingURL=access.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/utils/access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,SAAS,CAAA;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAEtD;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,GAAG,EAAE,SAAS,sBAAsB,KAAG,OAgCpE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,SAAS,sBAAsB,KAAG,MAIzD,CAAA;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,sBAAsB,KAAG,MA6C3D,CAAA"}
|
package/dist/utils/jwt.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { NewsletterPluginConfig } from '../types';
|
|
2
|
-
export interface MagicLinkTokenPayload {
|
|
3
|
-
subscriberId: string;
|
|
4
|
-
email: string;
|
|
5
|
-
type: 'magic-link';
|
|
6
|
-
}
|
|
7
|
-
export interface SessionTokenPayload {
|
|
8
|
-
subscriberId: string;
|
|
9
|
-
email: string;
|
|
10
|
-
type: 'session';
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Generate a magic link token for email authentication
|
|
14
|
-
*/
|
|
15
|
-
export declare function generateMagicLinkToken(subscriberId: string, email: string, config: NewsletterPluginConfig): string;
|
|
16
|
-
/**
|
|
17
|
-
* Verify a magic link token
|
|
18
|
-
*/
|
|
19
|
-
export declare function verifyMagicLinkToken(token: string): MagicLinkTokenPayload;
|
|
20
|
-
/**
|
|
21
|
-
* Generate a session token after successful magic link verification
|
|
22
|
-
*/
|
|
23
|
-
export declare function generateSessionToken(subscriberId: string, email: string): string;
|
|
24
|
-
/**
|
|
25
|
-
* Verify a session token
|
|
26
|
-
*/
|
|
27
|
-
export declare function verifySessionToken(token: string): SessionTokenPayload;
|
|
28
|
-
/**
|
|
29
|
-
* Generate a magic link URL
|
|
30
|
-
*/
|
|
31
|
-
export declare function generateMagicLinkURL(token: string, baseURL: string, config: NewsletterPluginConfig): string;
|
|
32
|
-
//# sourceMappingURL=jwt.d.ts.map
|
package/dist/utils/jwt.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/utils/jwt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAEtD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,YAAY,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,SAAS,CAAA;CAChB;AAqBD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,sBAAsB,GAC7B,MAAM,CAaR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAoBzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAoBrE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,sBAAsB,GAC7B,MAAM,CAKR"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export interface RateLimiterOptions {
|
|
2
|
-
maxAttempts: number;
|
|
3
|
-
windowMs: number;
|
|
4
|
-
prefix?: string;
|
|
5
|
-
}
|
|
6
|
-
export declare class RateLimiter {
|
|
7
|
-
private attempts;
|
|
8
|
-
private options;
|
|
9
|
-
constructor(options: RateLimiterOptions);
|
|
10
|
-
checkLimit(key: string): Promise<boolean>;
|
|
11
|
-
incrementAttempt(key: string): Promise<void>;
|
|
12
|
-
reset(key: string): Promise<void>;
|
|
13
|
-
resetAll(): Promise<void>;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/utils/rate-limiter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAA+D;IAC/E,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,EAAE,kBAAkB;IAIjC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBzC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5C,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC"}
|