@xk2800/nextjs-template 0.7.1-beta.6 → 0.7.1-beta.8
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/README.md +31 -29
- package/components/dashboard/admin/broadcastActions.tsx +148 -0
- package/components/dashboard/admin/confirmSendDialog.tsx +44 -0
- package/components/dashboard/admin/marketingEmailForm.tsx +115 -0
- package/components/dashboard/admin/marketingSection.tsx +67 -0
- package/components/dashboard/admin/subscribersCard.tsx +62 -0
- package/components/dashboard/marketingUpdatesCard.tsx +62 -0
- package/components/dashboard/marketingUpdatesSection.tsx +10 -0
- package/components/ui/select.tsx +189 -0
- package/dist/activity/logger.js +6 -0
- package/dist/activity/logger.js.map +1 -1
- package/dist/activity/logger.mjs +3 -3
- package/dist/activity/queries.js +6 -0
- package/dist/activity/queries.js.map +1 -1
- package/dist/activity/queries.mjs +2 -2
- package/dist/admin/queries.js +6 -0
- package/dist/admin/queries.js.map +1 -1
- package/dist/admin/queries.mjs +2 -2
- package/dist/api/feedback.js +7 -0
- package/dist/api/feedback.js.map +1 -1
- package/dist/api/feedback.mjs +7 -6
- package/dist/api/feedback.mjs.map +1 -1
- package/dist/api/marketing.d.mts +36 -0
- package/dist/api/marketing.d.ts +36 -0
- package/dist/api/marketing.js +1357 -0
- package/dist/api/marketing.js.map +1 -0
- package/dist/api/marketing.mjs +170 -0
- package/dist/api/marketing.mjs.map +1 -0
- package/dist/auth/helpers.d.mts +3 -3
- package/dist/auth/helpers.d.ts +3 -3
- package/dist/auth/helpers.js +7 -0
- package/dist/auth/helpers.js.map +1 -1
- package/dist/auth/helpers.mjs +8 -63
- package/dist/auth/helpers.mjs.map +1 -1
- package/dist/auth/index.js +7 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/index.mjs +6 -5
- package/dist/auth-client/index.d.mts +16 -16
- package/dist/auth-client/index.d.ts +16 -16
- package/dist/{chunk-6KTSULA5.mjs → chunk-6MDQRT6U.mjs} +3 -3
- package/dist/{chunk-6KTSULA5.mjs.map → chunk-6MDQRT6U.mjs.map} +1 -1
- package/dist/chunk-6Z3WUSDJ.mjs +62 -0
- package/dist/chunk-6Z3WUSDJ.mjs.map +1 -0
- package/dist/{chunk-FVLMSLTX.mjs → chunk-7F2POZM6.mjs} +3 -3
- package/dist/{chunk-FVLMSLTX.mjs.map → chunk-7F2POZM6.mjs.map} +1 -1
- package/dist/{chunk-4GGLYS5R.mjs → chunk-7QVIOQ47.mjs} +8 -16
- package/dist/chunk-7QVIOQ47.mjs.map +1 -0
- package/dist/chunk-C6RGN6QA.mjs +60 -0
- package/dist/chunk-C6RGN6QA.mjs.map +1 -0
- package/dist/chunk-OVKVD2HH.mjs +25 -0
- package/dist/chunk-OVKVD2HH.mjs.map +1 -0
- package/dist/{chunk-F776DQAM.mjs → chunk-P2G23JMY.mjs} +4 -4
- package/dist/{chunk-F776DQAM.mjs.map → chunk-P2G23JMY.mjs.map} +1 -1
- package/dist/{chunk-TMJYAOC2.mjs → chunk-TKWNEKK6.mjs} +8 -2
- package/dist/chunk-TKWNEKK6.mjs.map +1 -0
- package/dist/{chunk-F7CG5CA3.mjs → chunk-ZJMFE5B2.mjs} +3 -3
- package/dist/{chunk-F7CG5CA3.mjs.map → chunk-ZJMFE5B2.mjs.map} +1 -1
- package/dist/config/env.d.mts +2 -0
- package/dist/config/env.d.ts +2 -0
- package/dist/config/env.js +6 -0
- package/dist/config/env.js.map +1 -1
- package/dist/config/env.mjs +1 -1
- package/dist/db/index.js +6 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/index.mjs +2 -2
- package/dist/errors.js +6 -0
- package/dist/errors.js.map +1 -1
- package/dist/errors.mjs +3 -3
- package/dist/marketing/index.d.mts +35 -0
- package/dist/marketing/index.d.ts +35 -0
- package/dist/marketing/index.js +125 -0
- package/dist/marketing/index.js.map +1 -0
- package/dist/marketing/index.mjs +6 -0
- package/dist/marketing/index.mjs.map +1 -0
- package/dist/sessions/queries.js +6 -0
- package/dist/sessions/queries.js.map +1 -1
- package/dist/sessions/queries.mjs +2 -2
- package/dist/settings/queries.js +6 -0
- package/dist/settings/queries.js.map +1 -1
- package/dist/settings/queries.mjs +3 -3
- package/dist/users/queries.js +6 -0
- package/dist/users/queries.js.map +1 -1
- package/dist/users/queries.mjs +2 -2
- package/package.json +23 -3
- package/dist/chunk-4GGLYS5R.mjs.map +0 -1
- package/dist/chunk-TMJYAOC2.mjs.map +0 -1
package/dist/auth/helpers.mjs
CHANGED
|
@@ -1,67 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { getCurrentSession, hasRole, normalizeCallbackUrl, requireAuth, requireRole } from '../chunk-6Z3WUSDJ.mjs';
|
|
2
|
+
import '../chunk-7QVIOQ47.mjs';
|
|
3
|
+
import '../chunk-7F2POZM6.mjs';
|
|
3
4
|
import '../chunk-6OAHCEDJ.mjs';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-P2G23JMY.mjs';
|
|
6
|
+
import '../chunk-OVKVD2HH.mjs';
|
|
7
|
+
import '../chunk-ZJMFE5B2.mjs';
|
|
8
|
+
import '../chunk-TR5XFBTD.mjs';
|
|
9
|
+
import '../chunk-TKWNEKK6.mjs';
|
|
8
10
|
import '../chunk-3465SI5N.mjs';
|
|
9
|
-
import 'server-only';
|
|
10
|
-
import { cache } from 'react';
|
|
11
|
-
import { headers } from 'next/headers';
|
|
12
|
-
import { redirect } from 'next/navigation';
|
|
13
|
-
import { eq } from 'drizzle-orm';
|
|
14
|
-
|
|
15
|
-
var getCurrentSession = cache(async () => {
|
|
16
|
-
const session = await auth.api.getSession({
|
|
17
|
-
headers: await headers()
|
|
18
|
-
});
|
|
19
|
-
return session;
|
|
20
|
-
});
|
|
21
|
-
var requireAuth = cache(async () => {
|
|
22
|
-
var _a;
|
|
23
|
-
const session = await getCurrentSession();
|
|
24
|
-
if (!(session == null ? void 0 : session.user)) {
|
|
25
|
-
redirect("/login");
|
|
26
|
-
}
|
|
27
|
-
const user = await db.select().from(users).where(eq(users.id, session.user.id)).limit(1);
|
|
28
|
-
if ((_a = user[0]) == null ? void 0 : _a.banned) {
|
|
29
|
-
await auth.api.signOut({
|
|
30
|
-
headers: await headers()
|
|
31
|
-
});
|
|
32
|
-
redirect("/login?error=account_banned");
|
|
33
|
-
}
|
|
34
|
-
return session;
|
|
35
|
-
});
|
|
36
|
-
function hasRole(userRole, requiredRole) {
|
|
37
|
-
if (!userRole) return false;
|
|
38
|
-
if (requiredRole === "admin") {
|
|
39
|
-
return userRole === "admin";
|
|
40
|
-
}
|
|
41
|
-
return userRole === "user" || userRole === "admin" || userRole === "tester";
|
|
42
|
-
}
|
|
43
|
-
async function requireRole(requiredRole) {
|
|
44
|
-
const session = await requireAuth();
|
|
45
|
-
if (!hasRole(session.user.role, requiredRole)) {
|
|
46
|
-
redirect("/dashboard");
|
|
47
|
-
}
|
|
48
|
-
return session;
|
|
49
|
-
}
|
|
50
|
-
function normalizeCallbackUrl(value) {
|
|
51
|
-
if (typeof value !== "string" || !value.trim()) return "/dashboard";
|
|
52
|
-
const candidate = value.trim();
|
|
53
|
-
try {
|
|
54
|
-
const appOrigin = new URL(process.env.NEXT_PUBLIC_APP_URL || process.env.BETTER_AUTH_URL || "http://localhost:3000").origin;
|
|
55
|
-
const callbackUrl = new URL(candidate, appOrigin);
|
|
56
|
-
if (callbackUrl.origin !== appOrigin) {
|
|
57
|
-
return "/dashboard";
|
|
58
|
-
}
|
|
59
|
-
return `${callbackUrl.pathname}${callbackUrl.search}${callbackUrl.hash}` || "/dashboard";
|
|
60
|
-
} catch (e) {
|
|
61
|
-
return "/dashboard";
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export { getCurrentSession, hasRole, normalizeCallbackUrl, requireAuth, requireRole };
|
|
66
11
|
//# sourceMappingURL=helpers.mjs.map
|
|
67
12
|
//# sourceMappingURL=helpers.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"helpers.mjs"}
|
package/dist/auth/index.js
CHANGED
|
@@ -445,6 +445,12 @@ var envSchema = zod.z.object({
|
|
|
445
445
|
PORT: zod.z.string().default("3000").transform(Number),
|
|
446
446
|
DATABASE_URL: zod.z.string().default(""),
|
|
447
447
|
RESEND_API_KEY: zod.z.string().default(""),
|
|
448
|
+
// Full access key for marketing broadcasts (admin Marketing email page).
|
|
449
|
+
// Blank = use RESEND_API_KEY.
|
|
450
|
+
RESEND_BROADCAST_API_KEY: zod.z.string().default(""),
|
|
451
|
+
// Resend segment users join from the dashboard "Email updates" toggle.
|
|
452
|
+
// Blank = toggle hidden.
|
|
453
|
+
RESEND_MARKETING_SEGMENT_ID: zod.z.string().default(""),
|
|
448
454
|
// Sender for every transactional email. Must be on a domain verified in
|
|
449
455
|
// your Resend account.
|
|
450
456
|
EMAIL_FROM: zod.z.string().default("Acme <onboarding@xavierkhew.xyz>"),
|
|
@@ -706,6 +712,7 @@ async function getResend() {
|
|
|
706
712
|
}
|
|
707
713
|
return resend;
|
|
708
714
|
}
|
|
715
|
+
config.RESEND_BROADCAST_API_KEY || config.RESEND_API_KEY;
|
|
709
716
|
|
|
710
717
|
// server/auth.ts
|
|
711
718
|
async function logFailedLogin(ctx) {
|