@rovela-ai/sdk 0.13.1 → 0.14.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/dist/admin/api/emails.d.ts +17 -0
- package/dist/admin/api/emails.d.ts.map +1 -0
- package/dist/admin/api/emails.js +214 -0
- package/dist/admin/api/emails.js.map +1 -0
- package/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +1 -0
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/EmailsManager.d.ts +5 -0
- package/dist/admin/components/EmailsManager.d.ts.map +1 -0
- package/dist/admin/components/EmailsManager.js +306 -0
- package/dist/admin/components/EmailsManager.js.map +1 -0
- package/dist/admin/components/index.d.ts +2 -0
- package/dist/admin/components/index.d.ts.map +1 -1
- package/dist/admin/components/index.js +1 -0
- package/dist/admin/components/index.js.map +1 -1
- package/dist/admin/index.d.ts +1 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/core/db/queries.d.ts +26 -3
- package/dist/core/db/queries.d.ts.map +1 -1
- package/dist/core/db/queries.js +124 -0
- package/dist/core/db/queries.js.map +1 -1
- package/dist/core/db/schema.d.ts +173 -1
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.js +22 -0
- package/dist/core/db/schema.js.map +1 -1
- package/dist/emails/config.d.ts.map +1 -1
- package/dist/emails/config.js +5 -0
- package/dist/emails/config.js.map +1 -1
- package/dist/emails/index.d.ts +6 -0
- package/dist/emails/index.d.ts.map +1 -1
- package/dist/emails/index.js +4 -0
- package/dist/emails/index.js.map +1 -1
- package/dist/emails/overrides.d.ts +40 -0
- package/dist/emails/overrides.d.ts.map +1 -0
- package/dist/emails/overrides.js +70 -0
- package/dist/emails/overrides.js.map +1 -0
- package/dist/emails/registry.d.ts +40 -0
- package/dist/emails/registry.d.ts.map +1 -0
- package/dist/emails/registry.js +270 -0
- package/dist/emails/registry.js.map +1 -0
- package/dist/emails/send/auth.d.ts.map +1 -1
- package/dist/emails/send/auth.js +38 -3
- package/dist/emails/send/auth.js.map +1 -1
- package/dist/emails/send/orders.d.ts.map +1 -1
- package/dist/emails/send/orders.js +86 -6
- package/dist/emails/send/orders.js.map +1 -1
- package/dist/emails/templates/base.d.ts +30 -12
- package/dist/emails/templates/base.d.ts.map +1 -1
- package/dist/emails/templates/base.js +51 -8
- package/dist/emails/templates/base.js.map +1 -1
- package/dist/emails/theme.d.ts +65 -0
- package/dist/emails/theme.d.ts.map +1 -0
- package/dist/emails/theme.js +173 -0
- package/dist/emails/theme.js.map +1 -0
- package/dist/emails/types.d.ts +2 -0
- package/dist/emails/types.d.ts.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/emails/theme
|
|
3
|
+
*
|
|
4
|
+
* The shared email theme (Phase D). One theme styles ALL transactional
|
|
5
|
+
* emails — they render through the single base layout, so one change here
|
|
6
|
+
* restyles every email at once.
|
|
7
|
+
*
|
|
8
|
+
* Resolution order (highest wins), cached briefly per process:
|
|
9
|
+
* 1. store_settings.email_theme (admin "Emails → Theme" panel)
|
|
10
|
+
* 2. brand-derived defaults (blueprint primary color + body font)
|
|
11
|
+
* 3. the shipped defaults (DEFAULT_EMAIL_STYLES)
|
|
12
|
+
*
|
|
13
|
+
* Branch-per-store means one store per process, so applying the theme via
|
|
14
|
+
* Object.assign on the shared STYLES object (setEmailStyles) is correct by
|
|
15
|
+
* construction — no per-request threading through templates.
|
|
16
|
+
*
|
|
17
|
+
* Fail-open everywhere: any resolution failure keeps the previous styles;
|
|
18
|
+
* an email is never blocked or broken by theming.
|
|
19
|
+
*/
|
|
20
|
+
import { findSettings } from '../core/db';
|
|
21
|
+
import { getBlueprint } from '../core/config';
|
|
22
|
+
import { setEmailStyles } from './templates/base';
|
|
23
|
+
/**
|
|
24
|
+
* Curated email-safe fonts. Each loads as a Google Font (honored by Apple
|
|
25
|
+
* Mail and some clients) with a resilient system fallback stack everywhere
|
|
26
|
+
* else — the same progressive strategy the templates always used.
|
|
27
|
+
*/
|
|
28
|
+
export const EMAIL_FONTS = [
|
|
29
|
+
{ name: 'Plus Jakarta Sans', stack: "'Plus Jakarta Sans', system-ui, sans-serif" },
|
|
30
|
+
{ name: 'Inter', stack: "'Inter', system-ui, sans-serif" },
|
|
31
|
+
{ name: 'Work Sans', stack: "'Work Sans', system-ui, sans-serif" },
|
|
32
|
+
{ name: 'DM Sans', stack: "'DM Sans', system-ui, sans-serif" },
|
|
33
|
+
{ name: 'Nunito', stack: "'Nunito', system-ui, sans-serif" },
|
|
34
|
+
{ name: 'Lora', stack: "'Lora', Georgia, serif" },
|
|
35
|
+
{ name: 'Playfair Display', stack: "'Playfair Display', Georgia, serif" },
|
|
36
|
+
{ name: 'Georgia', stack: 'Georgia, serif' },
|
|
37
|
+
];
|
|
38
|
+
const BUTTON_RADIUS_PX = {
|
|
39
|
+
sm: '6px',
|
|
40
|
+
md: '12px',
|
|
41
|
+
full: '9999px',
|
|
42
|
+
};
|
|
43
|
+
const HEX_RE = /^#[0-9a-fA-F]{6}$/;
|
|
44
|
+
export function isValidEmailTheme(raw) {
|
|
45
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
|
|
46
|
+
return false;
|
|
47
|
+
const t = raw;
|
|
48
|
+
if (t.primaryColor !== undefined && !(typeof t.primaryColor === 'string' && HEX_RE.test(t.primaryColor)))
|
|
49
|
+
return false;
|
|
50
|
+
if (t.backgroundColor !== undefined && !(typeof t.backgroundColor === 'string' && HEX_RE.test(t.backgroundColor)))
|
|
51
|
+
return false;
|
|
52
|
+
if (t.fontName !== undefined && !EMAIL_FONTS.some((f) => f.name === t.fontName))
|
|
53
|
+
return false;
|
|
54
|
+
if (t.buttonRadius !== undefined && !['sm', 'md', 'full'].includes(t.buttonRadius))
|
|
55
|
+
return false;
|
|
56
|
+
if (t.footerNote !== undefined && typeof t.footerNote !== 'string')
|
|
57
|
+
return false;
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
/** Sanitize an incoming theme (admin writes) — keeps only valid fields. */
|
|
61
|
+
export function sanitizeEmailTheme(raw) {
|
|
62
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
|
|
63
|
+
return {};
|
|
64
|
+
const t = raw;
|
|
65
|
+
const out = {};
|
|
66
|
+
if (typeof t.primaryColor === 'string' && HEX_RE.test(t.primaryColor))
|
|
67
|
+
out.primaryColor = t.primaryColor;
|
|
68
|
+
if (typeof t.backgroundColor === 'string' && HEX_RE.test(t.backgroundColor))
|
|
69
|
+
out.backgroundColor = t.backgroundColor;
|
|
70
|
+
if (typeof t.fontName === 'string' && EMAIL_FONTS.some((f) => f.name === t.fontName))
|
|
71
|
+
out.fontName = t.fontName;
|
|
72
|
+
if (typeof t.buttonRadius === 'string' && ['sm', 'md', 'full'].includes(t.buttonRadius)) {
|
|
73
|
+
out.buttonRadius = t.buttonRadius;
|
|
74
|
+
}
|
|
75
|
+
if (typeof t.footerNote === 'string')
|
|
76
|
+
out.footerNote = t.footerNote.slice(0, 300);
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
// =============================================================================
|
|
80
|
+
// Brand derivation (the zero-config default)
|
|
81
|
+
// =============================================================================
|
|
82
|
+
/**
|
|
83
|
+
* Derive the theme from the store's brand: blueprint primary color + body
|
|
84
|
+
* font (when that font is in the email-safe list). This is what makes every
|
|
85
|
+
* store's emails brand-matched with no merchant action.
|
|
86
|
+
*/
|
|
87
|
+
export function deriveBrandEmailTheme() {
|
|
88
|
+
const derived = {};
|
|
89
|
+
try {
|
|
90
|
+
const blueprint = getBlueprint();
|
|
91
|
+
const primary = blueprint?.theme?.colors?.primary?.['500'];
|
|
92
|
+
if (typeof primary === 'string' && HEX_RE.test(primary)) {
|
|
93
|
+
derived.primaryColor = primary;
|
|
94
|
+
}
|
|
95
|
+
// Blueprint fonts use next/font underscore form ('Work_Sans').
|
|
96
|
+
const bodyFontRaw = blueprint?.theme
|
|
97
|
+
?.typography?.body?.name;
|
|
98
|
+
if (typeof bodyFontRaw === 'string') {
|
|
99
|
+
const bodyFont = bodyFontRaw.replace(/_/g, ' ');
|
|
100
|
+
if (EMAIL_FONTS.some((f) => f.name === bodyFont))
|
|
101
|
+
derived.fontName = bodyFont;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// No blueprint (imported stores, early boot) — shipped defaults apply.
|
|
106
|
+
}
|
|
107
|
+
return derived;
|
|
108
|
+
}
|
|
109
|
+
// =============================================================================
|
|
110
|
+
// Resolution + application (the send/preview chokepoint)
|
|
111
|
+
// =============================================================================
|
|
112
|
+
function themeToStyles(theme) {
|
|
113
|
+
const styles = {};
|
|
114
|
+
if (theme.primaryColor)
|
|
115
|
+
styles.primaryColor = theme.primaryColor;
|
|
116
|
+
if (theme.backgroundColor)
|
|
117
|
+
styles.backgroundColor = theme.backgroundColor;
|
|
118
|
+
if (theme.fontName) {
|
|
119
|
+
const font = EMAIL_FONTS.find((f) => f.name === theme.fontName);
|
|
120
|
+
if (font) {
|
|
121
|
+
styles.fontName = font.name;
|
|
122
|
+
styles.fontFamily = font.stack;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (theme.buttonRadius)
|
|
126
|
+
styles.buttonRadius = BUTTON_RADIUS_PX[theme.buttonRadius];
|
|
127
|
+
if (theme.footerNote !== undefined)
|
|
128
|
+
styles.footerNote = theme.footerNote;
|
|
129
|
+
return styles;
|
|
130
|
+
}
|
|
131
|
+
let themeCache = null;
|
|
132
|
+
const THEME_TTL_MS = 60 * 1000;
|
|
133
|
+
/**
|
|
134
|
+
* The effective theme: brand-derived defaults with the merchant's saved
|
|
135
|
+
* theme layered on top. Cached briefly; call invalidateEmailTheme() after
|
|
136
|
+
* an admin save.
|
|
137
|
+
*/
|
|
138
|
+
export async function resolveEmailTheme() {
|
|
139
|
+
const now = Date.now();
|
|
140
|
+
if (themeCache && themeCache.expiresAt > now)
|
|
141
|
+
return themeCache.resolved;
|
|
142
|
+
const derived = deriveBrandEmailTheme();
|
|
143
|
+
let stored = {};
|
|
144
|
+
try {
|
|
145
|
+
const settings = await findSettings();
|
|
146
|
+
stored = sanitizeEmailTheme(settings?.emailTheme);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Settings unavailable — brand-derived defaults still apply.
|
|
150
|
+
}
|
|
151
|
+
const resolved = { ...derived, ...stored };
|
|
152
|
+
themeCache = { resolved, expiresAt: now + THEME_TTL_MS };
|
|
153
|
+
return resolved;
|
|
154
|
+
}
|
|
155
|
+
/** Invalidate after an admin theme save so the next send picks it up. */
|
|
156
|
+
export function invalidateEmailTheme() {
|
|
157
|
+
themeCache = null;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Resolve the store's theme and apply it to the shared STYLES object every
|
|
161
|
+
* template reads. Called from getEmailConfig() — the one call every sender
|
|
162
|
+
* already makes before rendering. Never throws.
|
|
163
|
+
*/
|
|
164
|
+
export async function applyEmailTheme(overrideTheme) {
|
|
165
|
+
try {
|
|
166
|
+
const theme = overrideTheme ?? (await resolveEmailTheme());
|
|
167
|
+
setEmailStyles(themeToStyles(theme));
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
setEmailStyles({});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/emails/theme.ts"],"names":[],"mappings":"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"}
|
package/dist/emails/types.d.ts
CHANGED
|
@@ -40,6 +40,8 @@ export interface SendEmailOptions {
|
|
|
40
40
|
export interface SendEmailResult {
|
|
41
41
|
/** Whether the email was sent successfully */
|
|
42
42
|
success: boolean;
|
|
43
|
+
/** True when the merchant disabled this email in /admin/emails (no send attempted). */
|
|
44
|
+
skipped?: boolean;
|
|
43
45
|
/** Resend message ID if successful */
|
|
44
46
|
messageId?: string;
|
|
45
47
|
/** Error message if failed */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/emails/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAA;IACf,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,CAAA;IACpB,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAA;IAChB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAMD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAChB;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAMD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,WAAW,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,WAAW,CAAA;IACnB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAA;IACjB,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAA;IACjB,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAA;IAClB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAA;CACpB;AAMD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,kFAAkF;IAClF,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,WAAW,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,YAAY,CAAA;IAC7B,yBAAyB;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uHAAuH;IACvH,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,WAAW,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,iDAAiD;IACjD,aAAa,EAAE,YAAY,CAAA;IAC3B,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,mEAAmE;IACnE,qBAAqB,EAAE,MAAM,CAAA;IAC7B,eAAe,EAAE,YAAY,CAAA;IAC7B,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAA;IACpB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sCAAsC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,yCAAyC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,kCAAkC;IAClC,gBAAgB,EAAE,MAAM,CAAA;IACxB,kCAAkC;IAClC,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAA;IACpB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAA;IACrB,oDAAoD;IACpD,gBAAgB,EAAE,MAAM,CAAA;IACxB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAA;CACrB;AAMD;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,oBAAoB,GACpB,SAAS,GACT,gBAAgB,GAChB,oBAAoB,GACpB,eAAe,GACf,wBAAwB,GACxB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,CAAA;AAEtB;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,qBAAqB,GACrB,gBAAgB,GAChB,sBAAsB,GACtB,oBAAoB,GACpB,qBAAqB,GACrB,gBAAgB,GAChB,kBAAkB,GAClB,kBAAkB,GAClB,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/emails/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rovela-ai/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "Rovela SDK - Pre-built e-commerce components for AI-powered store generation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -278,6 +278,10 @@
|
|
|
278
278
|
"./locales": {
|
|
279
279
|
"types": "./dist/core/i18n/types.d.ts",
|
|
280
280
|
"import": "./dist/core/i18n/types.js"
|
|
281
|
+
},
|
|
282
|
+
"./admin/api/emails": {
|
|
283
|
+
"types": "./dist/admin/api/emails.d.ts",
|
|
284
|
+
"import": "./dist/admin/api/emails.js"
|
|
281
285
|
}
|
|
282
286
|
},
|
|
283
287
|
"scripts": {
|