@rovela-ai/sdk 0.1.25 → 0.1.26
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/components/ProductTable.d.ts.map +1 -1
- package/dist/admin/components/ProductTable.js +6 -1
- package/dist/admin/components/ProductTable.js.map +1 -1
- package/dist/admin/server/admin-service.d.ts +3 -3
- package/dist/admin/server/admin-service.d.ts.map +1 -1
- package/dist/admin/server/admin-service.js +12 -22
- package/dist/admin/server/admin-service.js.map +1 -1
- package/dist/auth/server/customer-service.d.ts +2 -2
- package/dist/auth/server/customer-service.d.ts.map +1 -1
- package/dist/auth/server/customer-service.js +11 -20
- package/dist/auth/server/customer-service.js.map +1 -1
- package/dist/auth/server/password-reset-service.d.ts +1 -0
- package/dist/auth/server/password-reset-service.d.ts.map +1 -1
- package/dist/auth/server/password-reset-service.js +5 -7
- package/dist/auth/server/password-reset-service.js.map +1 -1
- package/dist/auth/server/verification-service.d.ts +1 -0
- package/dist/auth/server/verification-service.d.ts.map +1 -1
- package/dist/auth/server/verification-service.js +6 -9
- package/dist/auth/server/verification-service.js.map +1 -1
- package/dist/core/db/client.d.ts +2 -44
- package/dist/core/db/client.d.ts.map +1 -1
- package/dist/core/db/client.js +2 -106
- package/dist/core/db/client.js.map +1 -1
- package/dist/core/db/index.d.ts +1 -1
- package/dist/core/db/index.d.ts.map +1 -1
- package/dist/core/db/index.js +2 -2
- package/dist/core/db/index.js.map +1 -1
- package/dist/core/db/queries.d.ts +20 -37
- package/dist/core/db/queries.d.ts.map +1 -1
- package/dist/core/db/queries.js +69 -110
- package/dist/core/db/queries.js.map +1 -1
- package/dist/core/db/schema.d.ts +1 -137
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.js +6 -23
- package/dist/core/db/schema.js.map +1 -1
- package/dist/core/server/index.d.ts +1 -1
- package/dist/core/server/index.d.ts.map +1 -1
- package/dist/core/server/index.js +1 -3
- package/dist/core/server/index.js.map +1 -1
- package/dist/core/types.d.ts +0 -5
- package/dist/core/types.d.ts.map +1 -1
- package/dist/emails/config.d.ts.map +1 -1
- package/dist/emails/config.js +11 -17
- package/dist/emails/config.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductTable.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAmCjD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,aAAa,EACb,eAAe,EACf,aAAa,EACb,QAAa,EACb,cAAc,EACd,SAAc,GACf,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ProductTable.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAmCjD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,aAAa,EACb,eAAe,EACf,aAAa,EACb,QAAa,EACb,cAAc,EACd,SAAc,GACf,EAAE,iBAAiB,2CAiRnB"}
|
|
@@ -99,7 +99,12 @@ export function ProductTable({ initialSearch, initialCategory, initialStatus, pa
|
|
|
99
99
|
const totalPages = Math.ceil(total / pageSize);
|
|
100
100
|
return (_jsxs("div", { className: `space-y-4 ${className}`, children: [_jsxs("div", { className: "flex flex-wrap gap-4", children: [_jsx("div", { className: "flex-1", children: _jsx("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search products...", className: "w-full max-w-xs rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" }) }), _jsxs("select", { value: status, onChange: (e) => setStatus(e.target.value), className: "rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary", children: [_jsx("option", { value: "", children: "All Status" }), _jsx("option", { value: "active", children: "Active" }), _jsx("option", { value: "draft", children: "Draft" }), _jsx("option", { value: "archived", children: "Archived" })] }), _jsxs("select", { value: sort, onChange: (e) => setSort(e.target.value), className: "rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary", children: [_jsx("option", { value: "newest", children: "Newest" }), _jsx("option", { value: "name", children: "Name" }), _jsx("option", { value: "price-asc", children: "Price: Low to High" }), _jsx("option", { value: "price-desc", children: "Price: High to Low" })] })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card overflow-hidden", children: [_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-border bg-muted/50 text-left text-xs font-medium uppercase text-muted-foreground", children: [_jsx("th", { className: "px-6 py-3", children: "Product" }), _jsx("th", { className: "px-6 py-3", children: "Status" }), _jsx("th", { className: "px-6 py-3", children: "Price" }), _jsx("th", { className: "px-6 py-3", children: "Inventory" }), _jsx("th", { className: "px-6 py-3", children: "Actions" })] }) }), _jsx("tbody", { className: "divide-y divide-border", children: isLoading ? ([...Array(5)].map((_, i) => (_jsxs("tr", { children: [_jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "h-10 w-10 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" })] }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-6 w-16 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-16 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-12 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" }) })] }, i)))) : products.length === 0 ? (_jsx("tr", { children: _jsx("td", { colSpan: 5, className: "px-6 py-12 text-center text-muted-foreground", children: "No products found" }) })) : (products.map((product) => {
|
|
101
101
|
const p = product;
|
|
102
|
-
return (_jsxs("tr", { className: "hover:bg-muted/50", children: [_jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-3", children: [p.images?.[0] ? (_jsx("img", { src: p.images[0], alt: p.name, className: "h-10 w-10 rounded object-cover" })) : (_jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded bg-muted text-muted-foreground", children: _jsx("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" }) }) })), _jsx("
|
|
102
|
+
return (_jsxs("tr", { className: "hover:bg-muted/50", children: [_jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-3", children: [p.images?.[0] ? (_jsx("img", { src: p.images[0], alt: p.name, className: "h-10 w-10 rounded object-cover" })) : (_jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded bg-muted text-muted-foreground", children: _jsx("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" }) }) })), _jsx("a", { href: `/admin/products/${p.id}`, onClick: (e) => {
|
|
103
|
+
if (onProductClick) {
|
|
104
|
+
e.preventDefault();
|
|
105
|
+
onProductClick(p.id);
|
|
106
|
+
}
|
|
107
|
+
}, className: "font-medium text-foreground hover:text-primary", children: p.name })] }) }), _jsx("td", { className: "px-6 py-4", children: _jsx(StatusBadge, { status: p.status }) }), _jsx("td", { className: "px-6 py-4 text-sm text-foreground", children: formatCurrency(p.price) }), _jsx("td", { className: "px-6 py-4 text-sm text-muted-foreground", children: "\u2014" }), _jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("a", { href: `/admin/products/${p.id}`, className: "text-sm text-primary hover:underline", children: "Edit" }), _jsx("button", { onClick: () => handleDeleteClick(p.id, p.name), className: "text-sm text-destructive hover:underline", children: "Delete" })] }) })] }, p.id));
|
|
103
108
|
})) })] }) }), totalPages > 1 && (_jsxs("div", { className: "flex items-center justify-between border-t border-border px-6 py-3", children: [_jsxs("p", { className: "text-sm text-muted-foreground", children: ["Showing ", (page - 1) * pageSize + 1, " to ", Math.min(page * pageSize, total), " of ", total] }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { onClick: () => handlePageChange(page - 1), disabled: page === 1, className: "rounded-md border border-border px-3 py-1 text-sm disabled:opacity-50", children: "Previous" }), _jsx("button", { onClick: () => handlePageChange(page + 1), disabled: page >= totalPages, className: "rounded-md border border-border px-3 py-1 text-sm disabled:opacity-50", children: "Next" })] })] }))] }), _jsx(DeleteConfirmDialog, { isOpen: !!deleteTarget, title: "Delete Product", itemName: deleteTarget?.name || '', itemType: "product", isDeleting: isDeleting, error: deleteError, onConfirm: handleDeleteConfirm, onCancel: handleDeleteCancel })] }));
|
|
104
109
|
}
|
|
105
110
|
//# sourceMappingURL=ProductTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductTable.js","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ProductTable.js","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @rovela/sdk/admin/server/admin-service
|
|
3
3
|
*
|
|
4
|
-
* Admin CRUD operations
|
|
5
|
-
*
|
|
4
|
+
* Admin CRUD operations.
|
|
5
|
+
* Each store has its own database (via Neon branches) - no tenant isolation needed.
|
|
6
6
|
*/
|
|
7
7
|
import * as schema from '../../core/db/schema';
|
|
8
8
|
import type { AdminSession } from '../types';
|
|
@@ -123,7 +123,7 @@ export declare function updateAdminPassword(adminId: string, newPassword: string
|
|
|
123
123
|
*/
|
|
124
124
|
export declare function adminEmailExists(email: string): Promise<boolean>;
|
|
125
125
|
/**
|
|
126
|
-
* Get the count of admins
|
|
126
|
+
* Get the count of admins.
|
|
127
127
|
* Used to check if this is the first admin (should be owner).
|
|
128
128
|
*/
|
|
129
129
|
export declare function countAdmins(): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-service.d.ts","sourceRoot":"","sources":["../../../src/admin/server/admin-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAM5C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAA;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,IAAI,CAAA;IACb,KAAK,EAAE,MAAM,CAAC,UAAU,CAAA;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,KAAK,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,qBAAqB,GAAG,iBAAiB,CAAA;CAChD;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,GAAG,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"admin-service.d.ts","sourceRoot":"","sources":["../../../src/admin/server/admin-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAM5C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAA;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,IAAI,CAAA;IACb,KAAK,EAAE,MAAM,CAAC,UAAU,CAAA;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,KAAK,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,qBAAqB,GAAG,iBAAiB,CAAA;CAChD;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,GAAG,sBAAsB,CAAC,CA6B3D;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,OAAO,GAAG,OAAiB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CA0B5B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAwB9B;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAUnC;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAUnC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACtC,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAyBnC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtE;AAED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAQnD"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @rovela/sdk/admin/server/admin-service
|
|
3
3
|
*
|
|
4
|
-
* Admin CRUD operations
|
|
5
|
-
*
|
|
4
|
+
* Admin CRUD operations.
|
|
5
|
+
* Each store has its own database (via Neon branches) - no tenant isolation needed.
|
|
6
6
|
*/
|
|
7
|
-
import { eq
|
|
8
|
-
import { getDb
|
|
7
|
+
import { eq } from 'drizzle-orm';
|
|
8
|
+
import { getDb } from '../../core/db/client';
|
|
9
9
|
import * as schema from '../../core/db/schema';
|
|
10
10
|
import { hashPassword, verifyPassword } from '../../auth/server/password';
|
|
11
11
|
// =============================================================================
|
|
@@ -30,12 +30,11 @@ import { hashPassword, verifyPassword } from '../../auth/server/password';
|
|
|
30
30
|
*/
|
|
31
31
|
export async function authenticateAdmin(email, password) {
|
|
32
32
|
const db = getDb();
|
|
33
|
-
const tenantId = getTenantId();
|
|
34
33
|
// Find admin by email
|
|
35
34
|
const [admin] = await db
|
|
36
35
|
.select()
|
|
37
36
|
.from(schema.storeAdmins)
|
|
38
|
-
.where(
|
|
37
|
+
.where(eq(schema.storeAdmins.email, email.toLowerCase().trim()))
|
|
39
38
|
.limit(1);
|
|
40
39
|
if (!admin) {
|
|
41
40
|
return {
|
|
@@ -81,14 +80,12 @@ export async function authenticateAdmin(email, password) {
|
|
|
81
80
|
*/
|
|
82
81
|
export async function createAdmin(email, password, name, role = 'admin') {
|
|
83
82
|
const db = getDb();
|
|
84
|
-
const tenantId = getTenantId();
|
|
85
83
|
// Hash password
|
|
86
84
|
const passwordHash = await hashPassword(password);
|
|
87
85
|
try {
|
|
88
86
|
const [admin] = await db
|
|
89
87
|
.insert(schema.storeAdmins)
|
|
90
88
|
.values({
|
|
91
|
-
tenantId,
|
|
92
89
|
email: email.toLowerCase().trim(),
|
|
93
90
|
name: name.trim(),
|
|
94
91
|
passwordHash,
|
|
@@ -122,7 +119,6 @@ export async function createAdmin(email, password, name, role = 'admin') {
|
|
|
122
119
|
*/
|
|
123
120
|
export async function findAdminForSession(adminId) {
|
|
124
121
|
const db = getDb();
|
|
125
|
-
const tenantId = getTenantId();
|
|
126
122
|
const [admin] = await db
|
|
127
123
|
.select({
|
|
128
124
|
id: schema.storeAdmins.id,
|
|
@@ -131,7 +127,7 @@ export async function findAdminForSession(adminId) {
|
|
|
131
127
|
role: schema.storeAdmins.role,
|
|
132
128
|
})
|
|
133
129
|
.from(schema.storeAdmins)
|
|
134
|
-
.where(
|
|
130
|
+
.where(eq(schema.storeAdmins.id, adminId))
|
|
135
131
|
.limit(1);
|
|
136
132
|
if (!admin) {
|
|
137
133
|
return null;
|
|
@@ -151,11 +147,10 @@ export async function findAdminForSession(adminId) {
|
|
|
151
147
|
*/
|
|
152
148
|
export async function findAdminByEmail(email) {
|
|
153
149
|
const db = getDb();
|
|
154
|
-
const tenantId = getTenantId();
|
|
155
150
|
const [admin] = await db
|
|
156
151
|
.select()
|
|
157
152
|
.from(schema.storeAdmins)
|
|
158
|
-
.where(
|
|
153
|
+
.where(eq(schema.storeAdmins.email, email.toLowerCase().trim()))
|
|
159
154
|
.limit(1);
|
|
160
155
|
return admin || null;
|
|
161
156
|
}
|
|
@@ -167,11 +162,10 @@ export async function findAdminByEmail(email) {
|
|
|
167
162
|
*/
|
|
168
163
|
export async function findAdminById(adminId) {
|
|
169
164
|
const db = getDb();
|
|
170
|
-
const tenantId = getTenantId();
|
|
171
165
|
const [admin] = await db
|
|
172
166
|
.select()
|
|
173
167
|
.from(schema.storeAdmins)
|
|
174
|
-
.where(
|
|
168
|
+
.where(eq(schema.storeAdmins.id, adminId))
|
|
175
169
|
.limit(1);
|
|
176
170
|
return admin || null;
|
|
177
171
|
}
|
|
@@ -189,7 +183,6 @@ export async function findAdminById(adminId) {
|
|
|
189
183
|
*/
|
|
190
184
|
export async function updateAdmin(adminId, data) {
|
|
191
185
|
const db = getDb();
|
|
192
|
-
const tenantId = getTenantId();
|
|
193
186
|
const updateData = {};
|
|
194
187
|
if (data.name !== undefined) {
|
|
195
188
|
updateData.name = data.name.trim();
|
|
@@ -204,7 +197,7 @@ export async function updateAdmin(adminId, data) {
|
|
|
204
197
|
const [admin] = await db
|
|
205
198
|
.update(schema.storeAdmins)
|
|
206
199
|
.set(updateData)
|
|
207
|
-
.where(
|
|
200
|
+
.where(eq(schema.storeAdmins.id, adminId))
|
|
208
201
|
.returning();
|
|
209
202
|
return admin || null;
|
|
210
203
|
}
|
|
@@ -221,12 +214,11 @@ export async function updateAdmin(adminId, data) {
|
|
|
221
214
|
*/
|
|
222
215
|
export async function updateAdminPassword(adminId, newPassword) {
|
|
223
216
|
const db = getDb();
|
|
224
|
-
const tenantId = getTenantId();
|
|
225
217
|
const passwordHash = await hashPassword(newPassword);
|
|
226
218
|
await db
|
|
227
219
|
.update(schema.storeAdmins)
|
|
228
220
|
.set({ passwordHash })
|
|
229
|
-
.where(
|
|
221
|
+
.where(eq(schema.storeAdmins.id, adminId));
|
|
230
222
|
}
|
|
231
223
|
/**
|
|
232
224
|
* Check if email is already registered as an admin.
|
|
@@ -239,16 +231,14 @@ export async function adminEmailExists(email) {
|
|
|
239
231
|
return !!admin;
|
|
240
232
|
}
|
|
241
233
|
/**
|
|
242
|
-
* Get the count of admins
|
|
234
|
+
* Get the count of admins.
|
|
243
235
|
* Used to check if this is the first admin (should be owner).
|
|
244
236
|
*/
|
|
245
237
|
export async function countAdmins() {
|
|
246
238
|
const db = getDb();
|
|
247
|
-
const tenantId = getTenantId();
|
|
248
239
|
const result = await db
|
|
249
240
|
.select({ id: schema.storeAdmins.id })
|
|
250
|
-
.from(schema.storeAdmins)
|
|
251
|
-
.where(eq(schema.storeAdmins.tenantId, tenantId));
|
|
241
|
+
.from(schema.storeAdmins);
|
|
252
242
|
return result.length;
|
|
253
243
|
}
|
|
254
244
|
//# sourceMappingURL=admin-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-service.js","sourceRoot":"","sources":["../../../src/admin/server/admin-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"admin-service.js","sourceRoot":"","sources":["../../../src/admin/server/admin-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @rovela/sdk/auth/server/customer-service
|
|
3
3
|
*
|
|
4
|
-
* Customer CRUD operations
|
|
5
|
-
*
|
|
4
|
+
* Customer CRUD operations.
|
|
5
|
+
* Each store has its own database (via Neon branches) - no tenant isolation needed.
|
|
6
6
|
*/
|
|
7
7
|
import * as schema from '../../core/db/schema';
|
|
8
8
|
import type { CustomerSession } from '../types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customer-service.d.ts","sourceRoot":"","sources":["../../../src/auth/server/customer-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAM/C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,IAAI,CAAA;IACb,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,qBAAqB,GAAG,oBAAoB,GAAG,gBAAgB,CAAA;CACtE;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"customer-service.d.ts","sourceRoot":"","sources":["../../../src/auth/server/customer-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAM/C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,IAAI,CAAA;IACb,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,qBAAqB,GAAG,oBAAoB,GAAG,gBAAgB,CAAA;CACtE;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,oBAAoB,CAAC,CA0B/B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,mBAAmB,UAAO,GACzB,OAAO,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,CAsCjD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAwBjC;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAUjC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAUjC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAyBjC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOzE;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGjE"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @rovela/sdk/auth/server/customer-service
|
|
3
3
|
*
|
|
4
|
-
* Customer CRUD operations
|
|
5
|
-
*
|
|
4
|
+
* Customer CRUD operations.
|
|
5
|
+
* Each store has its own database (via Neon branches) - no tenant isolation needed.
|
|
6
6
|
*/
|
|
7
|
-
import { eq
|
|
8
|
-
import { getDb
|
|
7
|
+
import { eq } from 'drizzle-orm';
|
|
8
|
+
import { getDb } from '../../core/db/client';
|
|
9
9
|
import * as schema from '../../core/db/schema';
|
|
10
10
|
import { hashPassword, verifyPassword } from './password';
|
|
11
11
|
// =============================================================================
|
|
@@ -33,14 +33,12 @@ import { hashPassword, verifyPassword } from './password';
|
|
|
33
33
|
*/
|
|
34
34
|
export async function createCustomer(email, password, name) {
|
|
35
35
|
const db = getDb();
|
|
36
|
-
const tenantId = getTenantId();
|
|
37
36
|
// Hash password
|
|
38
37
|
const passwordHash = await hashPassword(password);
|
|
39
38
|
try {
|
|
40
39
|
const [customer] = await db
|
|
41
40
|
.insert(schema.customers)
|
|
42
41
|
.values({
|
|
43
|
-
tenantId,
|
|
44
42
|
email: email.toLowerCase().trim(),
|
|
45
43
|
name: name?.trim() || null,
|
|
46
44
|
passwordHash,
|
|
@@ -79,12 +77,11 @@ export async function createCustomer(email, password, name) {
|
|
|
79
77
|
*/
|
|
80
78
|
export async function authenticateCustomer(email, password, requireVerification = true) {
|
|
81
79
|
const db = getDb();
|
|
82
|
-
const tenantId = getTenantId();
|
|
83
80
|
// Find customer by email
|
|
84
81
|
const [customer] = await db
|
|
85
82
|
.select()
|
|
86
83
|
.from(schema.customers)
|
|
87
|
-
.where(
|
|
84
|
+
.where(eq(schema.customers.email, email.toLowerCase().trim()))
|
|
88
85
|
.limit(1);
|
|
89
86
|
if (!customer) {
|
|
90
87
|
return {
|
|
@@ -128,7 +125,6 @@ export async function authenticateCustomer(email, password, requireVerification
|
|
|
128
125
|
*/
|
|
129
126
|
export async function findCustomerForSession(customerId) {
|
|
130
127
|
const db = getDb();
|
|
131
|
-
const tenantId = getTenantId();
|
|
132
128
|
const [customer] = await db
|
|
133
129
|
.select({
|
|
134
130
|
id: schema.customers.id,
|
|
@@ -137,7 +133,7 @@ export async function findCustomerForSession(customerId) {
|
|
|
137
133
|
emailVerified: schema.customers.emailVerified,
|
|
138
134
|
})
|
|
139
135
|
.from(schema.customers)
|
|
140
|
-
.where(
|
|
136
|
+
.where(eq(schema.customers.id, customerId))
|
|
141
137
|
.limit(1);
|
|
142
138
|
if (!customer) {
|
|
143
139
|
return null;
|
|
@@ -157,11 +153,10 @@ export async function findCustomerForSession(customerId) {
|
|
|
157
153
|
*/
|
|
158
154
|
export async function findCustomerByEmail(email) {
|
|
159
155
|
const db = getDb();
|
|
160
|
-
const tenantId = getTenantId();
|
|
161
156
|
const [customer] = await db
|
|
162
157
|
.select()
|
|
163
158
|
.from(schema.customers)
|
|
164
|
-
.where(
|
|
159
|
+
.where(eq(schema.customers.email, email.toLowerCase().trim()))
|
|
165
160
|
.limit(1);
|
|
166
161
|
return customer || null;
|
|
167
162
|
}
|
|
@@ -173,11 +168,10 @@ export async function findCustomerByEmail(email) {
|
|
|
173
168
|
*/
|
|
174
169
|
export async function findCustomerById(customerId) {
|
|
175
170
|
const db = getDb();
|
|
176
|
-
const tenantId = getTenantId();
|
|
177
171
|
const [customer] = await db
|
|
178
172
|
.select()
|
|
179
173
|
.from(schema.customers)
|
|
180
|
-
.where(
|
|
174
|
+
.where(eq(schema.customers.id, customerId))
|
|
181
175
|
.limit(1);
|
|
182
176
|
return customer || null;
|
|
183
177
|
}
|
|
@@ -195,7 +189,6 @@ export async function findCustomerById(customerId) {
|
|
|
195
189
|
*/
|
|
196
190
|
export async function updateCustomer(customerId, data) {
|
|
197
191
|
const db = getDb();
|
|
198
|
-
const tenantId = getTenantId();
|
|
199
192
|
const updateData = {};
|
|
200
193
|
if (data.name !== undefined) {
|
|
201
194
|
updateData.name = data.name?.trim() || null;
|
|
@@ -210,7 +203,7 @@ export async function updateCustomer(customerId, data) {
|
|
|
210
203
|
const [customer] = await db
|
|
211
204
|
.update(schema.customers)
|
|
212
205
|
.set(updateData)
|
|
213
|
-
.where(
|
|
206
|
+
.where(eq(schema.customers.id, customerId))
|
|
214
207
|
.returning();
|
|
215
208
|
return customer || null;
|
|
216
209
|
}
|
|
@@ -227,12 +220,11 @@ export async function updateCustomer(customerId, data) {
|
|
|
227
220
|
*/
|
|
228
221
|
export async function updateCustomerPassword(customerId, newPassword) {
|
|
229
222
|
const db = getDb();
|
|
230
|
-
const tenantId = getTenantId();
|
|
231
223
|
const passwordHash = await hashPassword(newPassword);
|
|
232
224
|
await db
|
|
233
225
|
.update(schema.customers)
|
|
234
226
|
.set({ passwordHash })
|
|
235
|
-
.where(
|
|
227
|
+
.where(eq(schema.customers.id, customerId));
|
|
236
228
|
}
|
|
237
229
|
/**
|
|
238
230
|
* Mark customer email as verified.
|
|
@@ -246,11 +238,10 @@ export async function updateCustomerPassword(customerId, newPassword) {
|
|
|
246
238
|
*/
|
|
247
239
|
export async function markEmailVerified(customerId) {
|
|
248
240
|
const db = getDb();
|
|
249
|
-
const tenantId = getTenantId();
|
|
250
241
|
await db
|
|
251
242
|
.update(schema.customers)
|
|
252
243
|
.set({ emailVerified: new Date() })
|
|
253
|
-
.where(
|
|
244
|
+
.where(eq(schema.customers.id, customerId));
|
|
254
245
|
}
|
|
255
246
|
/**
|
|
256
247
|
* Check if email is already registered.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customer-service.js","sourceRoot":"","sources":["../../../src/auth/server/customer-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"customer-service.js","sourceRoot":"","sources":["../../../src/auth/server/customer-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-reset-service.d.ts","sourceRoot":"","sources":["../../../src/auth/server/password-reset-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"password-reset-service.d.ts","sourceRoot":"","sources":["../../../src/auth/server/password-reset-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4BH;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACjE,OAAO,EAAE,OAAO,CAAA;CACjB,CAAC,CA8BD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/D,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CA+BD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAyCD;AAED;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,MAAM,CAAC,CASjE"}
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Password reset token management.
|
|
5
5
|
* Handles creating, validating, and using reset tokens.
|
|
6
|
+
* Each store has its own database (via Neon branches) - no tenant isolation needed.
|
|
6
7
|
*/
|
|
7
|
-
import { eq,
|
|
8
|
+
import { eq, lt } from 'drizzle-orm';
|
|
8
9
|
import { nanoid } from 'nanoid';
|
|
9
|
-
import { getDb
|
|
10
|
+
import { getDb } from '../../core/db/client';
|
|
10
11
|
import * as schema from '../../core/db/schema';
|
|
11
12
|
import { findCustomerByEmail, updateCustomerPassword } from './customer-service';
|
|
12
13
|
import { sendPasswordResetEmail, getStoreName } from './email-sender';
|
|
@@ -51,11 +52,9 @@ export async function requestPasswordReset(email) {
|
|
|
51
52
|
await deletePasswordResetTokens(customer.id);
|
|
52
53
|
// Generate new token
|
|
53
54
|
const db = getDb();
|
|
54
|
-
const tenantId = getTenantId();
|
|
55
55
|
const token = nanoid(TOKEN_LENGTH);
|
|
56
56
|
const expires = new Date(Date.now() + TOKEN_EXPIRY_MS);
|
|
57
57
|
await db.insert(schema.customerPasswordResetTokens).values({
|
|
58
|
-
tenantId,
|
|
59
58
|
customerId: customer.id,
|
|
60
59
|
token,
|
|
61
60
|
expires,
|
|
@@ -86,7 +85,7 @@ export async function requestPasswordReset(email) {
|
|
|
86
85
|
*/
|
|
87
86
|
export async function validateResetToken(token) {
|
|
88
87
|
const db = getDb();
|
|
89
|
-
// Find the token
|
|
88
|
+
// Find the token
|
|
90
89
|
const [tokenRecord] = await db
|
|
91
90
|
.select()
|
|
92
91
|
.from(schema.customerPasswordResetTokens)
|
|
@@ -174,10 +173,9 @@ export async function resetPassword(token, newPassword) {
|
|
|
174
173
|
*/
|
|
175
174
|
export async function deletePasswordResetTokens(customerId) {
|
|
176
175
|
const db = getDb();
|
|
177
|
-
const tenantId = getTenantId();
|
|
178
176
|
await db
|
|
179
177
|
.delete(schema.customerPasswordResetTokens)
|
|
180
|
-
.where(
|
|
178
|
+
.where(eq(schema.customerPasswordResetTokens.customerId, customerId));
|
|
181
179
|
}
|
|
182
180
|
/**
|
|
183
181
|
* Clean up expired password reset tokens.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-reset-service.js","sourceRoot":"","sources":["../../../src/auth/server/password-reset-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"password-reset-service.js","sourceRoot":"","sources":["../../../src/auth/server/password-reset-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-service.d.ts","sourceRoot":"","sources":["../../../src/auth/server/verification-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"verification-service.d.ts","sourceRoot":"","sources":["../../../src/auth/server/verification-service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2BH;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CA6CD;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACpE,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CA+BD;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU1E;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAS5D"}
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Email verification token management.
|
|
5
5
|
* Handles creating, validating, and cleaning up verification tokens.
|
|
6
|
+
* Each store has its own database (via Neon branches) - no tenant isolation needed.
|
|
6
7
|
*/
|
|
7
|
-
import { eq,
|
|
8
|
+
import { eq, lt } from 'drizzle-orm';
|
|
8
9
|
import { nanoid } from 'nanoid';
|
|
9
|
-
import { getDb
|
|
10
|
+
import { getDb } from '../../core/db/client';
|
|
10
11
|
import * as schema from '../../core/db/schema';
|
|
11
12
|
import { findCustomerByEmail, markEmailVerified } from './customer-service';
|
|
12
13
|
import { sendVerificationEmail, sendWelcomeEmail, getStoreName } from './email-sender';
|
|
@@ -39,14 +40,12 @@ const TOKEN_LENGTH = 32;
|
|
|
39
40
|
*/
|
|
40
41
|
export async function createVerificationToken(customerId) {
|
|
41
42
|
const db = getDb();
|
|
42
|
-
const tenantId = getTenantId();
|
|
43
43
|
// Delete any existing tokens for this customer
|
|
44
44
|
await deleteVerificationTokens(customerId);
|
|
45
45
|
// Generate new token
|
|
46
46
|
const token = nanoid(TOKEN_LENGTH);
|
|
47
47
|
const expires = new Date(Date.now() + TOKEN_EXPIRY_MS);
|
|
48
48
|
await db.insert(schema.customerVerificationTokens).values({
|
|
49
|
-
tenantId,
|
|
50
49
|
customerId,
|
|
51
50
|
token,
|
|
52
51
|
expires,
|
|
@@ -72,7 +71,7 @@ export async function createVerificationToken(customerId) {
|
|
|
72
71
|
*/
|
|
73
72
|
export async function verifyEmail(token) {
|
|
74
73
|
const db = getDb();
|
|
75
|
-
// Find the token
|
|
74
|
+
// Find the token
|
|
76
75
|
const [tokenRecord] = await db
|
|
77
76
|
.select()
|
|
78
77
|
.from(schema.customerVerificationTokens)
|
|
@@ -120,10 +119,9 @@ export async function verifyEmail(token) {
|
|
|
120
119
|
*/
|
|
121
120
|
export async function deleteVerificationTokens(customerId) {
|
|
122
121
|
const db = getDb();
|
|
123
|
-
const tenantId = getTenantId();
|
|
124
122
|
await db
|
|
125
123
|
.delete(schema.customerVerificationTokens)
|
|
126
|
-
.where(
|
|
124
|
+
.where(eq(schema.customerVerificationTokens.customerId, customerId));
|
|
127
125
|
}
|
|
128
126
|
/**
|
|
129
127
|
* Resend verification email to a customer.
|
|
@@ -177,11 +175,10 @@ export async function resendVerificationEmail(email) {
|
|
|
177
175
|
*/
|
|
178
176
|
export async function isEmailVerified(customerId) {
|
|
179
177
|
const db = getDb();
|
|
180
|
-
const tenantId = getTenantId();
|
|
181
178
|
const [customer] = await db
|
|
182
179
|
.select({ emailVerified: schema.customers.emailVerified })
|
|
183
180
|
.from(schema.customers)
|
|
184
|
-
.where(
|
|
181
|
+
.where(eq(schema.customers.id, customerId))
|
|
185
182
|
.limit(1);
|
|
186
183
|
return !!customer?.emailVerified;
|
|
187
184
|
}
|