@nextsparkjs/core 0.1.0-beta.141 → 0.1.0-beta.143
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/components/dashboard/layouts/DashboardAuthLayout.d.ts +7 -0
- package/dist/components/dashboard/layouts/DashboardAuthLayout.d.ts.map +1 -0
- package/dist/components/dashboard/layouts/DashboardAuthLayout.js +44 -0
- package/dist/components/dashboard/layouts/index.d.ts +1 -0
- package/dist/components/dashboard/layouts/index.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/index.js +2 -0
- package/dist/lib/api/entity/generic-handler.d.ts.map +1 -1
- package/dist/lib/api/entity/generic-handler.js +26 -0
- package/dist/lib/api/rate-limit.d.ts.map +1 -1
- package/dist/lib/api/rate-limit.js +3 -0
- package/dist/lib/entities/schema-generator.d.ts.map +1 -1
- package/dist/lib/entities/schema-generator.js +29 -2
- package/dist/lib/entities/types.d.ts +6 -0
- package/dist/lib/entities/types.d.ts.map +1 -1
- package/dist/providers/DashboardProviders.d.ts +12 -0
- package/dist/providers/DashboardProviders.d.ts.map +1 -0
- package/dist/providers/DashboardProviders.js +16 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/styles/classes.json +1 -1
- package/dist/templates/app/(auth)/accept-invite/[token]/page.tsx +1 -1
- package/dist/templates/app/(auth)/reset-password/page.tsx +1 -1
- package/dist/templates/app/(auth)/verify-email/page.tsx +1 -1
- package/dist/templates/app/403/page.tsx +1 -1
- package/dist/templates/app/api/csp-report/route.ts +2 -1
- package/dist/templates/app/api/v1/billing/webhooks/polar/route.ts +7 -7
- package/dist/templates/app/api/v1/billing/webhooks/stripe/route.ts +3 -3
- package/dist/templates/app/dashboard/(main)/[entity]/[id]/edit/page.tsx +1 -1
- package/dist/templates/app/dashboard/(main)/[entity]/create/page.tsx +1 -1
- package/dist/templates/app/dashboard/(main)/page.tsx +1 -1
- package/dist/templates/app/dashboard/(main)/patterns/[id]/edit/page.tsx +1 -1
- package/dist/templates/app/dashboard/(main)/patterns/[id]/reports/page.tsx +1 -1
- package/dist/templates/app/dashboard/layout.tsx +6 -1
- package/dist/templates/app/dashboard/settings/layout.tsx +1 -1
- package/dist/templates/app/devtools/layout.tsx +3 -0
- package/dist/templates/app/layout.tsx +2 -13
- package/dist/templates/app/superadmin/layout.tsx +3 -0
- package/dist/templates/app/superadmin/teams/[teamId]/page.tsx +1 -1
- package/dist/templates/app/superadmin/users/[userId]/page.tsx +1 -1
- package/package.json +2 -2
- package/scripts/build/registry/generators/block-registry.mjs +16 -1
- package/scripts/build/registry/generators/middleware-registry.mjs +1 -1
- package/scripts/build/registry/generators/translation-registry.mjs +19 -53
- package/templates/app/(auth)/accept-invite/[token]/page.tsx +1 -1
- package/templates/app/(auth)/reset-password/page.tsx +1 -1
- package/templates/app/(auth)/verify-email/page.tsx +1 -1
- package/templates/app/403/page.tsx +1 -1
- package/templates/app/api/csp-report/route.ts +2 -1
- package/templates/app/api/v1/billing/webhooks/polar/route.ts +7 -7
- package/templates/app/api/v1/billing/webhooks/stripe/route.ts +3 -3
- package/templates/app/dashboard/(main)/[entity]/[id]/edit/page.tsx +1 -1
- package/templates/app/dashboard/(main)/[entity]/create/page.tsx +1 -1
- package/templates/app/dashboard/(main)/page.tsx +1 -1
- package/templates/app/dashboard/(main)/patterns/[id]/edit/page.tsx +1 -1
- package/templates/app/dashboard/(main)/patterns/[id]/reports/page.tsx +1 -1
- package/templates/app/dashboard/layout.tsx +6 -1
- package/templates/app/dashboard/settings/layout.tsx +1 -1
- package/templates/app/devtools/layout.tsx +3 -0
- package/templates/app/layout.tsx +2 -13
- package/templates/app/superadmin/layout.tsx +3 -0
- package/templates/app/superadmin/teams/[teamId]/page.tsx +1 -1
- package/templates/app/superadmin/users/[userId]/page.tsx +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardAuthLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/DashboardAuthLayout.tsx"],"names":[],"mappings":"AA2EA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACT,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,2CAEA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useAuth } from "../../../hooks/useAuth.js";
|
|
4
|
+
import { useRouter } from "next/navigation";
|
|
5
|
+
import { useEffect, Suspense } from "react";
|
|
6
|
+
import { Loader2 } from "lucide-react";
|
|
7
|
+
import { DashboardTranslationPreloader } from "../../../lib/i18n/DashboardTranslationPreloader.js";
|
|
8
|
+
import { TranslationDebugger } from "../../../utils/dev/TranslationDebugger.js";
|
|
9
|
+
import { useEnsureUserMetadata } from "../../../hooks/useEnsureUserMetadata.js";
|
|
10
|
+
import { useAuthMethodDetector } from "../../../hooks/useAuthMethodDetector.js";
|
|
11
|
+
function AuthMethodDetectorWrapper() {
|
|
12
|
+
useAuthMethodDetector();
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
function DashboardLayoutContent({ children }) {
|
|
16
|
+
const { user, isLoading } = useAuth();
|
|
17
|
+
const router = useRouter();
|
|
18
|
+
useEnsureUserMetadata();
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (!isLoading && !user) {
|
|
21
|
+
router.push("/login");
|
|
22
|
+
}
|
|
23
|
+
}, [user, isLoading, router]);
|
|
24
|
+
if (isLoading) {
|
|
25
|
+
return /* @__PURE__ */ jsx("div", { className: "min-h-screen flex items-center justify-center", children: /* @__PURE__ */ jsx(Loader2, { className: "h-8 w-8 animate-spin text-muted-foreground" }) });
|
|
26
|
+
}
|
|
27
|
+
if (!user) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
31
|
+
/* @__PURE__ */ jsx(DashboardTranslationPreloader, {}, "dashboard-translation-preloader"),
|
|
32
|
+
/* @__PURE__ */ jsx(TranslationDebugger, {}, "translation-debugger"),
|
|
33
|
+
/* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(AuthMethodDetectorWrapper, {}) }, "auth-method-detector"),
|
|
34
|
+
/* @__PURE__ */ jsx("div", { "data-cy": "dashboard-container", children }, "dashboard-children")
|
|
35
|
+
] });
|
|
36
|
+
}
|
|
37
|
+
function DashboardAuthLayout({
|
|
38
|
+
children
|
|
39
|
+
}) {
|
|
40
|
+
return /* @__PURE__ */ jsx(DashboardLayoutContent, { children });
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
DashboardAuthLayout
|
|
44
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { AuthGuard } from "./AuthGuard.js";
|
|
2
|
+
import { DashboardAuthLayout } from "./DashboardAuthLayout.js";
|
|
2
3
|
import { DashboardShell } from "./DashboardShell.js";
|
|
3
4
|
import { Sidebar } from "./Sidebar.js";
|
|
4
5
|
import { TopNavbar } from "./TopNavbar.js";
|
|
5
6
|
export {
|
|
6
7
|
AuthGuard,
|
|
8
|
+
DashboardAuthLayout,
|
|
7
9
|
DashboardShell,
|
|
8
10
|
Sidebar,
|
|
9
11
|
TopNavbar
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generic-handler.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/entity/generic-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"generic-handler.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/entity/generic-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAyavD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAwdnF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAmWrF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CA+KpJ;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CA2TtJ;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAoJtJ;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAEtF"}
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
handleCorsPreflightRequest
|
|
19
19
|
} from "../helpers.js";
|
|
20
20
|
import { afterEntityCreate, afterEntityUpdate, afterEntityDelete } from "../../entities/entity-hooks.js";
|
|
21
|
+
import { checkPermission } from "../../permissions/check.js";
|
|
21
22
|
import { extractPatternIds } from "../../blocks/pattern-resolver.js";
|
|
22
23
|
import { isPatternReference } from "../../../types/pattern-reference.js";
|
|
23
24
|
import { PatternUsageService } from "../../services/pattern-usage.service.js";
|
|
@@ -179,6 +180,25 @@ function getTeamIdFromRequest(request) {
|
|
|
179
180
|
function isBuilderRequest(request) {
|
|
180
181
|
return request.headers.get("x-builder-source") === "true";
|
|
181
182
|
}
|
|
183
|
+
async function checkSessionPermission(authResult, entitySlug, action, teamId, request) {
|
|
184
|
+
var _a;
|
|
185
|
+
if (authResult.type !== "session" || !((_a = authResult.user) == null ? void 0 : _a.id)) return null;
|
|
186
|
+
const permission = `${entitySlug}.${action}`;
|
|
187
|
+
try {
|
|
188
|
+
const allowed = await checkPermission(authResult.user.id, teamId, permission);
|
|
189
|
+
if (!allowed) {
|
|
190
|
+
const response = createApiError(
|
|
191
|
+
`Permission denied: insufficient permissions for ${entitySlug}.${action}`,
|
|
192
|
+
403,
|
|
193
|
+
void 0,
|
|
194
|
+
"PERMISSION_DENIED"
|
|
195
|
+
);
|
|
196
|
+
return addCorsHeaders(response, request);
|
|
197
|
+
}
|
|
198
|
+
} catch {
|
|
199
|
+
}
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
182
202
|
async function validateTeamMembership(userId, teamId) {
|
|
183
203
|
try {
|
|
184
204
|
console.log("[GenericHandler] Validating team membership:", { userId, teamId, teamIdLength: teamId == null ? void 0 : teamId.length });
|
|
@@ -597,6 +617,8 @@ async function handleGenericCreate(request) {
|
|
|
597
617
|
const response2 = createApiError("Team context required for create operations. Include x-team-id header.", 400, void 0, "TEAM_CONTEXT_REQUIRED");
|
|
598
618
|
return addCorsHeaders(response2, request);
|
|
599
619
|
}
|
|
620
|
+
const permDenied = await checkSessionPermission(authResult, entityConfig.slug, "create", teamId, request);
|
|
621
|
+
if (permDenied) return permDenied;
|
|
600
622
|
if (idStrategy === "serial") {
|
|
601
623
|
insertFields = ['"userId"', '"teamId"'];
|
|
602
624
|
placeholders = ["$1", "$2"];
|
|
@@ -938,6 +960,8 @@ async function handleGenericUpdate(request, { params }) {
|
|
|
938
960
|
const response2 = createApiError("Team context required for update operations. Include x-team-id header.", 400, void 0, "TEAM_CONTEXT_REQUIRED");
|
|
939
961
|
return addCorsHeaders(response2, request);
|
|
940
962
|
}
|
|
963
|
+
const permDenied = await checkSessionPermission(authResult, resolution.entityConfig.slug, "update", teamId, request);
|
|
964
|
+
if (permDenied) return permDenied;
|
|
941
965
|
let body;
|
|
942
966
|
try {
|
|
943
967
|
body = await request.json();
|
|
@@ -1153,6 +1177,8 @@ async function handleGenericDelete(request, { params }) {
|
|
|
1153
1177
|
const response2 = createApiError("Team context required for delete operations. Include x-team-id header.", 400, void 0, "TEAM_CONTEXT_REQUIRED");
|
|
1154
1178
|
return addCorsHeaders(response2, request);
|
|
1155
1179
|
}
|
|
1180
|
+
const permDenied = await checkSessionPermission(authResult, resolution.entityConfig.slug, "delete", teamId, request);
|
|
1181
|
+
if (permDenied) return permDenied;
|
|
1156
1182
|
const entityConfig = resolution.entityConfig;
|
|
1157
1183
|
const tableName = getTableName(entityConfig);
|
|
1158
1184
|
const whereConditions = ["id = $1"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../src/lib/api/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,MAAa,EACpB,QAAQ,GAAE,MAAc,GACvB,eAAe,CAyCjB;AAED;;;GAGG;AACH,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,aAAqB,GAC1B,OAAO,CAAC,eAAe,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../src/lib/api/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,MAAa,EACpB,QAAQ,GAAE,MAAc,GACvB,eAAe,CAyCjB;AAED;;;GAGG;AACH,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,aAAqB,GAC1B,OAAO,CAAC,eAAe,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6CpD;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,eAAe,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAwB5G;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,IAAI,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,GACf,YAAY,GAAG,IAAI,CAkCrB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,GACf,YAAY,CASd;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,OAAO,EAAE,EAC/C,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,IAEtD,SAAS,WAAW,EAAE,GAAG,MAAM,CAAC,KAAG,OAAO,CAAC,YAAY,CAAC,CAsCvE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB,GAAG,IAAI,CAaP;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGlD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,KAAK,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CASD;AAED;;GAEG;AACH,wBAAgB,sBAAsB;;;;;EAErC;AAoGD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,EACnD,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,EACpE,IAAI,GAAE,aAAqB,IAEb,SAAS,WAAW,EAAE,GAAG,MAAM,CAAC,KAAG,OAAO,CAAC,YAAY,CAAC,CAkCvE"}
|
|
@@ -39,6 +39,9 @@ function checkRateLimit(identifier, limit = 1e3, windowMs = 6e4) {
|
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
41
|
async function checkDistributedRateLimit(identifier, type = "api") {
|
|
42
|
+
if (isRateLimitingDisabled()) {
|
|
43
|
+
return { allowed: true, remaining: 999, resetTime: Date.now() + 6e4, limit: 999 };
|
|
44
|
+
}
|
|
42
45
|
if (maybeRedisConfigured()) {
|
|
43
46
|
const result2 = await checkRedisRateLimit(identifier, type);
|
|
44
47
|
const defaultLimits = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-generator.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/schema-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,YAAY,EAAsC,MAAM,SAAS,CAAA;AAG/E,MAAM,WAAW,uBAAuB;IACtC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAA;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,CAAC,CAAC,SAAS,CAAA;IACnB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAA;IACnB,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAA;IACrB,IAAI,EAAE,CAAC,CAAC,SAAS,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAA;CAC3C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,uBAA4B,GACpC,gBAAgB,CA+FlB;
|
|
1
|
+
{"version":3,"file":"schema-generator.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/schema-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,YAAY,EAAsC,MAAM,SAAS,CAAA;AAG/E,MAAM,WAAW,uBAAuB;IACtC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAA;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,CAAC,CAAC,SAAS,CAAA;IACnB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAA;IACnB,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAA;IACrB,IAAI,EAAE,CAAC,CAAC,SAAS,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAA;CAC3C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,uBAA4B,GACpC,gBAAgB,CA+FlB;AAoyBD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAeR;AASD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,OAAO,EACb,UAAU,GAAE,QAAQ,GAAG,QAAQ,GAAG,UAAqB,EACvD,OAAO,GAAE,uBAA4B,GACpC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAA;CAAE,CAW3E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,YAAY,GACzB,MAAM,CAyCR;AAMD,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAOD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,YAAY,GAAG,uBAAuB,CAsE/F;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,YAAY,GAAG,uBAAuB,CA6C5F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACrC,YAAY,EAAE,CAIhB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACrC;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA4CpE"}
|
|
@@ -110,7 +110,15 @@ function generateFieldSchema(field, customValidation, strict = true) {
|
|
|
110
110
|
return field.defaultValue !== void 0 ? String(field.defaultValue) : null;
|
|
111
111
|
}
|
|
112
112
|
const strVal = typeof val === "number" ? String(val) : val;
|
|
113
|
-
|
|
113
|
+
const trimmed = strict ? strVal.trim() : strVal;
|
|
114
|
+
if (field.maxLength && trimmed.length > field.maxLength) {
|
|
115
|
+
ctx.addIssue({
|
|
116
|
+
code: z.ZodIssueCode.custom,
|
|
117
|
+
message: `${field.display.label} cannot exceed ${field.maxLength} characters`
|
|
118
|
+
});
|
|
119
|
+
return z.NEVER;
|
|
120
|
+
}
|
|
121
|
+
return trimmed;
|
|
114
122
|
});
|
|
115
123
|
break;
|
|
116
124
|
case "email":
|
|
@@ -232,7 +240,26 @@ function generateFieldSchema(field, customValidation, strict = true) {
|
|
|
232
240
|
}),
|
|
233
241
|
z.null(),
|
|
234
242
|
z.undefined()
|
|
235
|
-
]).transform((val) =>
|
|
243
|
+
]).transform((val, ctx) => {
|
|
244
|
+
if (val === void 0) return null;
|
|
245
|
+
if (typeof val === "number") {
|
|
246
|
+
if (field.min !== void 0 && val < field.min) {
|
|
247
|
+
ctx.addIssue({
|
|
248
|
+
code: z.ZodIssueCode.custom,
|
|
249
|
+
message: `${field.display.label} must be at least ${field.min}`
|
|
250
|
+
});
|
|
251
|
+
return z.NEVER;
|
|
252
|
+
}
|
|
253
|
+
if (field.max !== void 0 && val > field.max) {
|
|
254
|
+
ctx.addIssue({
|
|
255
|
+
code: z.ZodIssueCode.custom,
|
|
256
|
+
message: `${field.display.label} must be at most ${field.max}`
|
|
257
|
+
});
|
|
258
|
+
return z.NEVER;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return val;
|
|
262
|
+
});
|
|
236
263
|
break;
|
|
237
264
|
case "doublerange":
|
|
238
265
|
schema = z.array(z.number()).length(2, {
|
|
@@ -291,6 +291,12 @@ export interface EntityField {
|
|
|
291
291
|
defaultValue?: unknown;
|
|
292
292
|
/** Validation schema (optional) */
|
|
293
293
|
validation?: ZodSchema;
|
|
294
|
+
/** Minimum value for number fields */
|
|
295
|
+
min?: number;
|
|
296
|
+
/** Maximum value for number fields */
|
|
297
|
+
max?: number;
|
|
298
|
+
/** Maximum length for text/textarea fields */
|
|
299
|
+
maxLength?: number;
|
|
294
300
|
/** Display configuration */
|
|
295
301
|
display: FieldDisplay;
|
|
296
302
|
/** API configuration */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAEpC,8FAA8F;AAC9F,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAMpE;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;AAErD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB,aAAa,GACb,eAAe,GACf,gBAAgB,GAChB,KAAK,GACL,YAAY,GACZ,cAAc,CAAA;AAElB;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEnE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAElE;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAEnD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,CAAA;AAEzC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAEtE;;GAEG;AACH,MAAM,MAAM,eAAe,GAEvB,MAAM,GACN,UAAU,GACV,QAAQ,GACR,SAAS,GACT,MAAM,GACN,UAAU,GACV,OAAO,GACP,KAAK,GACL,MAAM,GAGN,QAAQ,GACR,aAAa,GACb,OAAO,GACP,aAAa,GACb,MAAM,GACN,UAAU,GAGV,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,eAAe,GAGf,OAAO,GACP,QAAQ,GACR,OAAO,GACP,aAAa,GAGb,UAAU,GACV,UAAU,GACV,MAAM,GAGN,UAAU,GACV,UAAU,GACV,SAAS,GACT,SAAS,GAGT,UAAU,GACV,gBAAgB,GAChB,eAAe,GACf,qBAAqB,GACrB,WAAW,GACX,MAAM,CAAA;AAMV;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAI3B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IAEZ,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAA;IAEhB,2BAA2B;IAC3B,KAAK,EAAE;QACL,mCAAmC;QACnC,QAAQ,EAAE,MAAM,CAAA;QAChB,kCAAkC;QAClC,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IAED,gFAAgF;IAChF,IAAI,EAAE,UAAU,CAAA;IAEhB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,mCAAmC;IACnC,KAAK,CAAC,EAAE;QACN,uEAAuE;QACvE,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,CAAA;IAKD,MAAM,EAAE;QACN,2EAA2E;QAC3E,MAAM,EAAE,OAAO,CAAA;QACf,sCAAsC;QACtC,GAAG,EAAE,OAAO,CAAA;QACZ,kCAAkC;QAClC,QAAQ,EAAE,OAAO,CAAA;QACjB,kHAAkH;QAClH,MAAM,EAAE,OAAO,CAAA;QACf;;;;WAIG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB;;;;;;WAMG;QACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B;;;;;;;WAOG;QACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KACxB,CAAA;IAKD,EAAE,EAAE;QACF,SAAS,EAAE;YACT,8BAA8B;YAC9B,UAAU,EAAE,OAAO,CAAA;YACnB,2CAA2C;YAC3C,YAAY,EAAE,OAAO,CAAA;YACrB,qDAAqD;YACrD,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAA;SAC/B,CAAA;QACD,MAAM,EAAE;YACN,mCAAmC;YACnC,cAAc,EAAE,OAAO,CAAA;YACvB,oCAAoC;YACpC,aAAa,EAAE,OAAO,CAAA;SACvB,CAAA;QACD,QAAQ,EAAE;YACR,+BAA+B;YAC/B,UAAU,EAAE,OAAO,CAAA;YACnB,mCAAmC;YACnC,QAAQ,EAAE,OAAO,CAAA;YACjB,qCAAqC;YACrC,UAAU,EAAE,OAAO,CAAA;YACnB,6BAA6B;YAC7B,cAAc,EAAE,OAAO,CAAA;YACvB,yCAAyC;YACzC,YAAY,EAAE,OAAO,CAAA;SACtB,CAAA;KACF,CAAA;IAKD,IAAI,CAAC,EAAE;QACL,8BAA8B;QAC9B,cAAc,EAAE,eAAe,CAAA;QAC/B,oDAAoD;QACpD,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAA;KACpD,CAAA;IAKD,+BAA+B;IAC/B,MAAM,EAAE,WAAW,EAAE,CAAA;IAKrB,wFAAwF;IACxF,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;IACpC,8CAA8C;IAC9C,aAAa,CAAC,EAAE,iBAAiB,CAAA;IAEjC,2CAA2C;IAC3C,UAAU,CAAC,EAAE;QACX,wEAAwE;QACxE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;QACvB,kDAAkD;QAClD,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,CAAA;IAKD,4CAA4C;IAC5C,OAAO,CAAC,EAAE,aAAa,CAAA;IAKvB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAW9B;AAMD;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAA;IAEhB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IAExB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,KAAK,CAAC;QAC1B,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAA;QAC1D,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE;YACT,MAAM,EAAE,MAAM,CAAA;YACd,UAAU,EAAE,MAAM,CAAA;YAClB,YAAY,CAAC,EAAE,OAAO,CAAA;YACtB,KAAK,CAAC,EAAE,MAAM,CAAA;YACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAChC,CAAA;QACD,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QACjD,2EAA2E;QAC3E,aAAa,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;SAAE,CAAA;KAC5D,CAAC,CAAA;IAEF;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;OAGG;IACH,MAAM,CAAC,EAAE;QACP;;;;WAIG;QACH,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IAED,wCAAwC;IACxC,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAMD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IAEZ,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAA;IAEb,gCAAgC;IAChC,QAAQ,EAAE,OAAO,CAAA;IAEjB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAA;IAEhB,iDAAiD;IACjD,KAAK,EAAE,kBAAkB,EAAE,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAA;IAEhB,8BAA8B;IAC9B,UAAU,EAAE,OAAO,CAAA;IAEnB,+BAA+B;IAC/B,UAAU,EAAE,OAAO,CAAA;IAEnB,8BAA8B;IAC9B,WAAW,EAAE,OAAO,CAAA;IAEpB,sCAAsC;IACtC,cAAc,EAAE,OAAO,CAAA;IAEvB,8BAA8B;IAC9B,aAAa,EAAE,OAAO,CAAA;IAEtB,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAA;IAEjB,qCAAqC;IACrC,UAAU,EAAE,OAAO,CAAA;IAEnB,6BAA6B;IAC7B,sBAAsB,EAAE,OAAO,CAAA;IAE/B,yCAAyC;IACzC,oBAAoB,EAAE,OAAO,CAAA;IAE7B,2CAA2C;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,iCAAiC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,qCAAqC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAA;IAEZ,sBAAsB;IACtB,IAAI,EAAE,eAAe,CAAA;IAErB,gCAAgC;IAChC,QAAQ,EAAE,OAAO,CAAA;IAEjB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,mCAAmC;IACnC,UAAU,CAAC,EAAE,SAAS,CAAA;IAEtB,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,4BAA4B;IAC5B,OAAO,EAAE,YAAY,CAAA;IAErB,wBAAwB;IACxB,GAAG,EAAE,QAAQ,CAAA;IAEb,4CAA4C;IAC5C,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;IAEvB,0FAA0F;IAC1F,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,sEAAsE;IACtE,QAAQ,CAAC,EAAE;QACT,mCAAmC;QACnC,MAAM,EAAE,MAAM,CAAA;QACd,iGAAiG;QACjG,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,sEAAsE;QACtE,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,4EAA4E;QAC5E,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,yEAAyE;QACzE,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;QACvB,uEAAuE;QACvE,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,8FAA8F;QAC9F,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,+EAA+E;QAC/E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAChC,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAA;IAEb,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,wBAAwB;IACxB,UAAU,EAAE,OAAO,CAAA;IAEnB,0BAA0B;IAC1B,YAAY,EAAE,OAAO,CAAA;IAErB,mBAAmB;IACnB,UAAU,EAAE,OAAO,CAAA;IAEnB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAA;IAEb,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,gCAAgC;IAChC,UAAU,EAAE,OAAO,CAAA;IAEnB,kCAAkC;IAClC,QAAQ,EAAE,OAAO,CAAA;IAEjB,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB,iCAAiC;IACjC,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mBAAmB;IACnB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IAEtB,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAA;IAEb,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,gBAAgB,EAAE,QAAQ,EAAE,CAAA;IAE5B,+BAA+B;IAC/B,MAAM,EAAE,UAAU,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,UAAU,EAAE,MAAM,GAAG,WAAW,CAAA;IAEhC,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;IAEjC,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;IAElC,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAA;IAE7B,8BAA8B;IAC9B,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAA;IAE1B,wCAAwC;IACxC,UAAU,CAAC,EAAE,eAAe,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAAA;CACjC;AAMD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,CAAA;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAA;IAEb,0BAA0B;IAC1B,MAAM,EAAE,gBAAgB,EAAE,CAAA;IAE1B,0BAA0B;IAC1B,gBAAgB,EAAE,OAAO,CAAA;IAEzB,6BAA6B;IAC7B,YAAY,EAAE,OAAO,CAAA;IAErB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,gBAAgB,CAAA;IAExB,4BAA4B;IAC5B,OAAO,EAAE,kBAAkB,CAAA;IAE3B,2CAA2C;IAC3C,UAAU,CAAC,EAAE;QACX,wEAAwE;QACxE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;QACvB,kDAAkD;QAClD,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAA;IAEZ,iBAAiB;IACjB,IAAI,EAAE,eAAe,CAAA;IAErB,qBAAqB;IACrB,QAAQ,EAAE,OAAO,CAAA;IAEjB,oBAAoB;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,wBAAwB;IACxB,UAAU,CAAC,EAAE,SAAS,CAAA;IAEtB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;IAEvB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAA;IAEb,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,wCAAwC;IACxC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAA;CACjC;AAMD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAA;IAEZ,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAA;IAEd,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,YAAY,CAAC,EAAE,YAAY,EAAE,CAAA;IAE7B,4BAA4B;IAC5B,WAAW,CAAC,EAAE,YAAY,EAAE,CAAA;IAE5B,6BAA6B;IAC7B,YAAY,CAAC,EAAE,YAAY,EAAE,CAAA;IAE7B,4BAA4B;IAC5B,WAAW,CAAC,EAAE,YAAY,EAAE,CAAA;IAE5B,6BAA6B;IAC7B,YAAY,CAAC,EAAE,YAAY,EAAE,CAAA;IAE7B,4BAA4B;IAC5B,WAAW,CAAC,EAAE,YAAY,EAAE,CAAA;IAE5B,+BAA+B;IAC/B,WAAW,CAAC,EAAE,YAAY,EAAE,CAAA;IAE5B,8BAA8B;IAC9B,UAAU,CAAC,EAAE,YAAY,EAAE,CAAA;IAE3B,iCAAiC;IACjC,kBAAkB,CAAC,EAAE,YAAY,EAAE,CAAA;IAEnC,oCAAoC;IACpC,qBAAqB,CAAC,EAAE,YAAY,EAAE,CAAA;IAEtC,uBAAuB;IACvB,cAAc,CAAC,EAAE,YAAY,EAAE,CAAA;IAE/B,8BAA8B;IAC9B,mBAAmB,CAAC,EAAE,YAAY,EAAE,CAAA;IAEpC,8BAA8B;IAC9B,kBAAkB,CAAC,EAAE,YAAY,EAAE,CAAA;IAEnC,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAA;IAElC,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAA;IAEjC,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAA;IAElC,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAA;IAEjC,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAA;IAElC,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAA;IAEjC,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAA;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAA;IAElC,2BAA2B;IAC3B,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAA;IAEjC,0BAA0B;IAC1B,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAA;IAElC,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAA;IAEjC,4BAA4B;IAC5B,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAA;IAElC,2BAA2B;IAC3B,gBAAgB,CAAC,EAAE,YAAY,EAAE,CAAA;IAEjC,8BAA8B;IAC9B,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAA;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,CAAA;AAE/E;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAA;IAElB,gCAAgC;IAChC,SAAS,EAAE,aAAa,GAAG,OAAO,CAAA;IAElC,2BAA2B;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd,kCAAkC;IAClC,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,oCAAoC;IACpC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,QAAQ,CAAA;QACd,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAA;QAClB,IAAI,CAAC,EAAE,QAAQ,CAAA;KAChB,CAAA;IAED,uBAAuB;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE9B,2CAA2C;IAC3C,YAAY,CAAC,EAAE;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,QAAQ,EAAE,OAAO,CAAA;IAEjB,uCAAuC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAMD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAA;IAEjB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAA;IAElB,iDAAiD;IACjD,UAAU,EAAE,OAAO,CAAA;IAEnB,0BAA0B;IAC1B,UAAU,EAAE,OAAO,CAAA;IAEnB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,gCAAgC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,kBAAkB;IAClB,OAAO,EAAE,OAAO,CAAA;IAEhB,kCAAkC;IAClC,SAAS,CAAC,EAAE;QACV,QAAQ,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;CACF;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4BAA4B;IAC5B,KAAK,EAAE,OAAO,CAAA;IAEd,wBAAwB;IACxB,MAAM,EAAE,MAAM,EAAE,CAAA;IAEhB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,qBAAqB;IACrB,OAAO,EAAE,OAAO,CAAA;IAEhB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,oCAAoC;IACpC,MAAM,CAAC,EAAE,YAAY,CAAA;IAErB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAA;IAEtB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,mBAAmB;IACnB,WAAW,EAAE,IAAI,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,OAAO;IAC9C,2BAA2B;IAC3B,OAAO,EAAE,OAAO,CAAA;IAEhB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAA;IAEjB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAA;IAEd,6BAA6B;IAC7B,IAAI,EAAE,CAAC,EAAE,CAAA;IAET,oBAAoB;IACpB,MAAM,EAAE,KAAK,CAAC;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,OAAO,CAAA;KACf,CAAC,CAAA;CACH;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAA;IAEnD,8BAA8B;IAC9B,cAAc,CAAC,EAAE,eAAe,CAAA;IAEhC,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IAEb,wBAAwB;IACxB,IAAI,EAAE,aAAa,GAAG,cAAc,GAAG,WAAW,GAAG,aAAa,CAAA;IAElE,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DashboardProviders — Client providers needed only for authenticated routes.
|
|
3
|
+
*
|
|
4
|
+
* These were moved out of the root layout to avoid loading ~500KB of unused JS
|
|
5
|
+
* (TanStack Query, team context, billing hooks) on public landing pages.
|
|
6
|
+
*
|
|
7
|
+
* Used by: dashboard/layout.tsx, superadmin/layout.tsx, devtools/layout.tsx
|
|
8
|
+
*/
|
|
9
|
+
export declare function DashboardProviders({ children }: {
|
|
10
|
+
children: React.ReactNode;
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=DashboardProviders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardProviders.d.ts","sourceRoot":"","sources":["../../src/providers/DashboardProviders.tsx"],"names":[],"mappings":"AAQA;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAW7E"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Suspense } from "react";
|
|
4
|
+
import { QueryProvider } from "./query-provider.js";
|
|
5
|
+
import { TeamProvider } from "../contexts/TeamContext.js";
|
|
6
|
+
import { SubscriptionProvider } from "../contexts/SubscriptionContext.js";
|
|
7
|
+
import { Toaster } from "../components/ui/sonner.js";
|
|
8
|
+
function DashboardProviders({ children }) {
|
|
9
|
+
return /* @__PURE__ */ jsx(QueryProvider, { children: /* @__PURE__ */ jsx(TeamProvider, { children: /* @__PURE__ */ jsxs(SubscriptionProvider, { children: [
|
|
10
|
+
children,
|
|
11
|
+
/* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(Toaster, { position: "bottom-left" }) })
|
|
12
|
+
] }) }) });
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
DashboardProviders
|
|
16
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAA;AAChC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAGA,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
|
package/dist/providers/index.js
CHANGED
package/dist/styles/classes.json
CHANGED
|
@@ -22,7 +22,7 @@ import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-reg
|
|
|
22
22
|
import { sel } from '@nextsparkjs/core/selectors'
|
|
23
23
|
|
|
24
24
|
function ResetPasswordContent() {
|
|
25
|
-
const searchParams = useSearchParams()
|
|
25
|
+
const searchParams = useSearchParams()!;
|
|
26
26
|
const token = searchParams.get("token") || "";
|
|
27
27
|
const { updatePassword } = useAuth();
|
|
28
28
|
|
|
@@ -9,7 +9,7 @@ import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-reg
|
|
|
9
9
|
import { sel } from '@nextsparkjs/core/selectors'
|
|
10
10
|
|
|
11
11
|
function VerifyEmailContent() {
|
|
12
|
-
const searchParams = useSearchParams()
|
|
12
|
+
const searchParams = useSearchParams()!;
|
|
13
13
|
const router = useRouter();
|
|
14
14
|
const token = searchParams.get("token") || "";
|
|
15
15
|
|
|
@@ -9,7 +9,7 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@next
|
|
|
9
9
|
import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-registry.client'
|
|
10
10
|
|
|
11
11
|
function ForbiddenContent() {
|
|
12
|
-
const searchParams = useSearchParams()
|
|
12
|
+
const searchParams = useSearchParams()!
|
|
13
13
|
const reason = searchParams.get('reason') || 'No tienes permisos para acceder a este recurso'
|
|
14
14
|
const upgrade = searchParams.get('upgrade') === 'true'
|
|
15
15
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { NextRequest, NextResponse } from 'next/server';
|
|
3
|
+
import type { RateLimitTier } from '@nextsparkjs/core/lib/api/rate-limit';
|
|
3
4
|
|
|
4
5
|
// Dynamic import for rate limiting - graceful fallback if not available
|
|
5
|
-
let checkDistributedRateLimit: ((id: string, tier:
|
|
6
|
+
let checkDistributedRateLimit: ((id: string, tier: RateLimitTier) => Promise<{ allowed: boolean; limit: number; remaining: number; resetTime: number; retryAfter?: number }>) | null = null;
|
|
6
7
|
let createRateLimitErrorResponse: ((result: { allowed: boolean; limit: number; remaining: number; resetTime: number; retryAfter?: number }) => NextResponse) | null = null;
|
|
7
8
|
|
|
8
9
|
// Lazy-load rate limiting functions on first request
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* 3. Webhook signature verification provides security at the API level
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { NextRequest } from 'next/server'
|
|
18
|
+
import { NextRequest, NextResponse } from 'next/server'
|
|
19
19
|
import { query, queryOne } from '@nextsparkjs/core/lib/db'
|
|
20
20
|
|
|
21
21
|
// Polar webhook verification - import from gateway
|
|
@@ -32,7 +32,7 @@ async function loadExtensions(): Promise<PolarWebhookExtensions> {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
async function handlePolarWebhook(request: NextRequest) {
|
|
35
|
+
async function handlePolarWebhook(request: NextRequest): Promise<NextResponse> {
|
|
36
36
|
// 1. Get raw body and ALL headers (Polar needs full headers for verification)
|
|
37
37
|
const payload = await request.text()
|
|
38
38
|
const headers: Record<string, string> = {}
|
|
@@ -43,7 +43,7 @@ async function handlePolarWebhook(request: NextRequest) {
|
|
|
43
43
|
|
|
44
44
|
// Verify required Polar webhook headers
|
|
45
45
|
if (!headers['webhook-id'] || !headers['webhook-signature'] || !headers['webhook-timestamp']) {
|
|
46
|
-
return
|
|
46
|
+
return NextResponse.json(
|
|
47
47
|
{ error: 'Missing required webhook headers (webhook-id, webhook-signature, webhook-timestamp)' },
|
|
48
48
|
{ status: 400 }
|
|
49
49
|
)
|
|
@@ -56,7 +56,7 @@ async function handlePolarWebhook(request: NextRequest) {
|
|
|
56
56
|
event = gateway.verifyWebhookSignature(payload, headers)
|
|
57
57
|
} catch (error) {
|
|
58
58
|
console.error('[polar-webhook] Signature verification failed:', error)
|
|
59
|
-
return
|
|
59
|
+
return NextResponse.json({ error: 'Invalid signature' }, { status: 400 })
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
// 3. Check for duplicate events (idempotency)
|
|
@@ -69,7 +69,7 @@ async function handlePolarWebhook(request: NextRequest) {
|
|
|
69
69
|
|
|
70
70
|
if (existing) {
|
|
71
71
|
console.log(`[polar-webhook] Event ${eventId} already processed, skipping`)
|
|
72
|
-
return
|
|
72
|
+
return NextResponse.json({ received: true, status: 'duplicate' })
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
// 4. Handle events
|
|
@@ -101,10 +101,10 @@ async function handlePolarWebhook(request: NextRequest) {
|
|
|
101
101
|
console.log(`[polar-webhook] Unhandled event type: ${event.type}`)
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
return
|
|
104
|
+
return NextResponse.json({ received: true })
|
|
105
105
|
} catch (error) {
|
|
106
106
|
console.error('[polar-webhook] Handler error:', error)
|
|
107
|
-
return
|
|
107
|
+
return NextResponse.json({ error: 'Handler failed' }, { status: 500 })
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* so Stripe's rawBody requirement is preserved.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import { NextRequest } from 'next/server'
|
|
15
|
+
import { NextRequest, NextResponse } from 'next/server'
|
|
16
16
|
import { handleStripeWebhook } from '@nextsparkjs/core/lib/billing/stripe-webhook'
|
|
17
17
|
import { withRateLimitTier } from '@nextsparkjs/core/lib/api/rate-limit'
|
|
18
18
|
|
|
@@ -26,9 +26,9 @@ async function loadExtensions() {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
export const POST = withRateLimitTier(
|
|
29
|
-
async (request: NextRequest) => {
|
|
29
|
+
async (request: NextRequest): Promise<NextResponse> => {
|
|
30
30
|
const extensions = await loadExtensions()
|
|
31
|
-
return handleStripeWebhook(request, extensions)
|
|
31
|
+
return handleStripeWebhook(request, extensions) as unknown as NextResponse
|
|
32
32
|
},
|
|
33
33
|
'webhook'
|
|
34
34
|
)
|
|
@@ -10,7 +10,7 @@ import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-reg
|
|
|
10
10
|
import { getEntityData } from '@nextsparkjs/core/lib/api/entities'
|
|
11
11
|
|
|
12
12
|
function EntityEditPage() {
|
|
13
|
-
const params = useParams()
|
|
13
|
+
const params = useParams()!
|
|
14
14
|
const router = useRouter()
|
|
15
15
|
const [entityConfig, setEntityConfig] = useState<ClientEntityConfig | null>(null)
|
|
16
16
|
const [initialData, setInitialData] = useState<Record<string, unknown> | null>(null)
|
|
@@ -9,7 +9,7 @@ import { BuilderEditorView } from '@nextsparkjs/core/components/dashboard/block-
|
|
|
9
9
|
import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-registry.client'
|
|
10
10
|
|
|
11
11
|
function EntityCreatePage() {
|
|
12
|
-
const params = useParams()
|
|
12
|
+
const params = useParams()!
|
|
13
13
|
const router = useRouter()
|
|
14
14
|
const [entityConfig, setEntityConfig] = useState<ClientEntityConfig | null>(null)
|
|
15
15
|
const [loading, setLoading] = useState(true)
|
|
@@ -78,7 +78,7 @@ function DefaultDashboardPage() {
|
|
|
78
78
|
<div className="mb-8" data-cy="dashboard-welcome">
|
|
79
79
|
<h1 className="text-3xl font-bold">{t('title')}</h1>
|
|
80
80
|
<p className="text-muted-foreground mt-1">
|
|
81
|
-
{t('welcome', { name: user.firstName || user.email })}
|
|
81
|
+
{t('welcome', { name: user.firstName || user.email || '' })}
|
|
82
82
|
</p>
|
|
83
83
|
</div>
|
|
84
84
|
|
|
@@ -17,7 +17,7 @@ import { getEntityData } from '@nextsparkjs/core/lib/api/entities'
|
|
|
17
17
|
import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-registry.client'
|
|
18
18
|
|
|
19
19
|
function PatternEditPage() {
|
|
20
|
-
const params = useParams()
|
|
20
|
+
const params = useParams()!
|
|
21
21
|
const router = useRouter()
|
|
22
22
|
const [entityConfig, setEntityConfig] = useState<ClientEntityConfig | null>(null)
|
|
23
23
|
const [initialData, setInitialData] = useState<Record<string, unknown> | null>(null)
|
|
@@ -4,6 +4,7 @@ import { useAuth } from '@nextsparkjs/core/hooks/useAuth'
|
|
|
4
4
|
import { useRouter } from 'next/navigation'
|
|
5
5
|
import { useEffect, Suspense } from 'react'
|
|
6
6
|
import { Loader2 } from 'lucide-react'
|
|
7
|
+
import { DashboardProviders } from '@nextsparkjs/core/providers/DashboardProviders'
|
|
7
8
|
import { DashboardTranslationPreloader } from '@nextsparkjs/core/lib/i18n/DashboardTranslationPreloader'
|
|
8
9
|
import { TranslationDebugger } from '@nextsparkjs/core/utils/dev/TranslationDebugger'
|
|
9
10
|
import { useEnsureUserMetadata } from '@nextsparkjs/core/hooks/useEnsureUserMetadata'
|
|
@@ -82,5 +83,9 @@ export default function CoreDashboardLayout({
|
|
|
82
83
|
}: {
|
|
83
84
|
children: React.ReactNode
|
|
84
85
|
}) {
|
|
85
|
-
return
|
|
86
|
+
return (
|
|
87
|
+
<DashboardProviders>
|
|
88
|
+
<DashboardLayoutContent>{children}</DashboardLayoutContent>
|
|
89
|
+
</DashboardProviders>
|
|
90
|
+
)
|
|
86
91
|
}
|
|
@@ -35,7 +35,7 @@ function SettingsLayout({
|
|
|
35
35
|
children: React.ReactNode
|
|
36
36
|
}) {
|
|
37
37
|
const [statusMessage, setStatusMessage] = useState('')
|
|
38
|
-
const pathname = usePathname()
|
|
38
|
+
const pathname = usePathname() ?? ''
|
|
39
39
|
const t = useTranslations('settings')
|
|
40
40
|
|
|
41
41
|
// Validate if the current settings page is enabled
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DeveloperGuard } from "@nextsparkjs/core/components/app/guards/DeveloperGuard";
|
|
2
|
+
import { DashboardProviders } from "@nextsparkjs/core/providers/DashboardProviders";
|
|
2
3
|
import { DevtoolsSidebar, DevtoolsMobileHeader } from "@nextsparkjs/core/components/devtools";
|
|
3
4
|
import { Metadata } from "next";
|
|
4
5
|
import { getTemplateOrDefault, getMetadataOrDefault } from '@nextsparkjs/core/lib/template-resolver'
|
|
@@ -30,6 +31,7 @@ interface DevLayoutProps {
|
|
|
30
31
|
function DevLayout({ children }: DevLayoutProps) {
|
|
31
32
|
const pluginNavItems = getPluginNavItems('devtools')
|
|
32
33
|
return (
|
|
34
|
+
<DashboardProviders>
|
|
33
35
|
<DeveloperGuard>
|
|
34
36
|
<div className="flex h-screen bg-background">
|
|
35
37
|
{/* Sidebar - Hidden on mobile, visible on desktop */}
|
|
@@ -54,6 +56,7 @@ function DevLayout({ children }: DevLayoutProps) {
|
|
|
54
56
|
{/* Could add a mobile drawer/overlay sidebar here if needed */}
|
|
55
57
|
</div>
|
|
56
58
|
</DeveloperGuard>
|
|
59
|
+
</DashboardProviders>
|
|
57
60
|
);
|
|
58
61
|
}
|
|
59
62
|
|
|
@@ -11,13 +11,9 @@ import { getMessages } from 'next-intl/server'
|
|
|
11
11
|
|
|
12
12
|
import "./globals.css"
|
|
13
13
|
import { getBillingResourceHints } from "@nextsparkjs/core/lib/billing/gateways/factory"
|
|
14
|
-
import { QueryProvider } from "@nextsparkjs/core/providers/query-provider"
|
|
15
14
|
import { ThemeProvider as NextThemeProvider } from "@nextsparkjs/core/providers/theme-provider"
|
|
16
15
|
import { ThemeProvider as CustomThemeProvider } from "@nextsparkjs/core/lib/theme/ThemeProvider"
|
|
17
|
-
import { TeamProvider } from "@nextsparkjs/core/contexts/TeamContext"
|
|
18
|
-
import { SubscriptionProvider } from "@nextsparkjs/core/contexts/SubscriptionContext"
|
|
19
16
|
import { getUserLocale } from '@nextsparkjs/core/lib/locale'
|
|
20
|
-
import { Toaster } from "@nextsparkjs/core/components/ui/sonner"
|
|
21
17
|
import { TranslationContextManager } from "@nextsparkjs/core/providers/TranslationContextManager"
|
|
22
18
|
import { PluginService } from '@nextsparkjs/core/lib/services'
|
|
23
19
|
import { getMetadataOrDefault } from '@nextsparkjs/core/lib/template-resolver'
|
|
@@ -87,15 +83,8 @@ export default async function RootLayout({
|
|
|
87
83
|
disableTransitionOnChange
|
|
88
84
|
>
|
|
89
85
|
<CustomThemeProvider>
|
|
90
|
-
<
|
|
91
|
-
|
|
92
|
-
<SubscriptionProvider>
|
|
93
|
-
<TranslationContextManager />
|
|
94
|
-
<main>{children}</main>
|
|
95
|
-
<Toaster position="bottom-left" />
|
|
96
|
-
</SubscriptionProvider>
|
|
97
|
-
</TeamProvider>
|
|
98
|
-
</QueryProvider>
|
|
86
|
+
<TranslationContextManager />
|
|
87
|
+
<main>{children}</main>
|
|
99
88
|
</CustomThemeProvider>
|
|
100
89
|
</NextThemeProvider>
|
|
101
90
|
</NextIntlClientProvider>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SuperAdminGuard } from "@nextsparkjs/core/components/app/guards/SuperAdminGuard";
|
|
2
|
+
import { DashboardProviders } from "@nextsparkjs/core/providers/DashboardProviders";
|
|
2
3
|
import { SuperadminSidebar } from "@nextsparkjs/core/components/superadmin/layouts/SuperadminSidebar";
|
|
3
4
|
import { Metadata } from "next";
|
|
4
5
|
import { getTemplateOrDefault, getMetadataOrDefault } from '@nextsparkjs/core/lib/template-resolver'
|
|
@@ -29,6 +30,7 @@ interface SuperadminLayoutProps {
|
|
|
29
30
|
function SuperadminLayout({ children }: SuperadminLayoutProps) {
|
|
30
31
|
const pluginNavItems = getPluginNavItems('superadmin')
|
|
31
32
|
return (
|
|
33
|
+
<DashboardProviders>
|
|
32
34
|
<SuperAdminGuard>
|
|
33
35
|
<div className="flex h-screen bg-background" data-cy="superadmin-container">
|
|
34
36
|
{/* Sidebar - Hidden on mobile, visible on desktop */}
|
|
@@ -63,6 +65,7 @@ function SuperadminLayout({ children }: SuperadminLayoutProps) {
|
|
|
63
65
|
{/* Could add a mobile drawer/overlay sidebar here if needed */}
|
|
64
66
|
</div>
|
|
65
67
|
</SuperAdminGuard>
|
|
68
|
+
</DashboardProviders>
|
|
66
69
|
);
|
|
67
70
|
}
|
|
68
71
|
|
|
@@ -146,7 +146,7 @@ const roleColors = {
|
|
|
146
146
|
* Displays detailed information about a specific team for superadmins (read-only).
|
|
147
147
|
*/
|
|
148
148
|
function TeamDetailPage() {
|
|
149
|
-
const params = useParams()
|
|
149
|
+
const params = useParams()!;
|
|
150
150
|
const teamId = params.teamId as string;
|
|
151
151
|
|
|
152
152
|
// Fetch team data from API
|
|
@@ -107,7 +107,7 @@ const roleColors = {
|
|
|
107
107
|
* Displays detailed information about a specific user for superadmins.
|
|
108
108
|
*/
|
|
109
109
|
function UserDetailPage() {
|
|
110
|
-
const params = useParams()
|
|
110
|
+
const params = useParams()!;
|
|
111
111
|
const userId = params.userId as string;
|
|
112
112
|
|
|
113
113
|
// Fetch user data from API
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nextsparkjs/core",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.143",
|
|
4
4
|
"description": "NextSpark - The complete SaaS framework for Next.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "NextSpark <hello@nextspark.dev>",
|
|
@@ -463,7 +463,7 @@
|
|
|
463
463
|
"tailwind-merge": "^3.3.1",
|
|
464
464
|
"uuid": "^13.0.0",
|
|
465
465
|
"zod": "^4.1.5",
|
|
466
|
-
"@nextsparkjs/testing": "0.1.0-beta.
|
|
466
|
+
"@nextsparkjs/testing": "0.1.0-beta.143"
|
|
467
467
|
},
|
|
468
468
|
"scripts": {
|
|
469
469
|
"postinstall": "node scripts/postinstall.mjs || true",
|
|
@@ -38,7 +38,22 @@ type BlockConfig = {
|
|
|
38
38
|
description?: string
|
|
39
39
|
category: string
|
|
40
40
|
icon?: string
|
|
41
|
-
|
|
41
|
+
componentPath?: string
|
|
42
|
+
schemaPath?: string
|
|
43
|
+
fieldsPath?: string
|
|
44
|
+
thumbnail?: string
|
|
45
|
+
fieldDefinitions: unknown[]
|
|
46
|
+
examples: unknown[]
|
|
47
|
+
scope?: string[]
|
|
48
|
+
allowInPatterns?: boolean
|
|
49
|
+
schemaType?: string
|
|
50
|
+
tags?: string[]
|
|
51
|
+
isCore?: boolean
|
|
52
|
+
source?: string
|
|
53
|
+
sourceId?: string
|
|
54
|
+
version?: string
|
|
55
|
+
deprecated?: boolean
|
|
56
|
+
replacedBy?: string
|
|
42
57
|
}
|
|
43
58
|
|
|
44
59
|
export const BLOCK_REGISTRY: Record<string, BlockConfig> = {}
|
|
@@ -55,7 +55,7 @@ ${imports}
|
|
|
55
55
|
|
|
56
56
|
export interface MiddlewareRegistryEntry {
|
|
57
57
|
themeName: string
|
|
58
|
-
middleware: (request: NextRequest, coreSession?: SessionUser | null) => Promise<NextResponse> | NextResponse
|
|
58
|
+
middleware: (request: NextRequest, coreSession?: SessionUser | null) => Promise<NextResponse | null> | NextResponse | null
|
|
59
59
|
middlewarePath: string
|
|
60
60
|
middlewareExportName: string
|
|
61
61
|
exists: boolean
|
|
@@ -495,71 +495,37 @@ ${(() => {
|
|
|
495
495
|
|
|
496
496
|
console.log(`[TranslationRegistry] PPR enabled — generating static exports for locale '${defaultLocale}'`)
|
|
497
497
|
|
|
498
|
-
//
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
)
|
|
502
|
-
|
|
503
|
-
//
|
|
504
|
-
//
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
t => t.locale === defaultLocale && !themeEntityNames.has(t.entityName)
|
|
508
|
-
)
|
|
509
|
-
|
|
510
|
-
const allEntityTranslations = [...defaultLocaleEntityTranslations, ...defaultLocalePluginEntityTranslations]
|
|
511
|
-
|
|
512
|
-
// Generate import statements for entity translations
|
|
513
|
-
const entityImports = allEntityTranslations.map((t, i) => {
|
|
514
|
-
const varName = `_entity${i}Messages`
|
|
515
|
-
return `import ${varName} from '${t.filePath}'`
|
|
516
|
-
}).join('\n')
|
|
517
|
-
|
|
518
|
-
// Generate the entity messages object entries
|
|
519
|
-
const entityEntries = allEntityTranslations.map((t, i) => {
|
|
520
|
-
const varName = `_entity${i}Messages`
|
|
521
|
-
return ` '${t.entityName}': ${varName}`
|
|
522
|
-
}).join(',\n')
|
|
523
|
-
|
|
524
|
-
const hasEntities = allEntityTranslations.length > 0
|
|
525
|
-
const entityImportsBlock = hasEntities ? `\n// Entity and plugin entity translations (default locale)\n${entityImports}\n` : ''
|
|
526
|
-
const entityMergeBlock = hasEntities
|
|
527
|
-
? `
|
|
528
|
-
const _entityMessages: Record<string, unknown> = {
|
|
529
|
-
${entityEntries}
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
export const STATIC_MESSAGES: Record<string, unknown> = _deepMerge(
|
|
533
|
-
_deepMerge(
|
|
534
|
-
_coreMessages as unknown as Record<string, unknown>,
|
|
535
|
-
(_themeMessages as { default?: Record<string, unknown> }).default ?? _themeMessages as unknown as Record<string, unknown>
|
|
536
|
-
),
|
|
537
|
-
_entityMessages
|
|
538
|
-
)`
|
|
539
|
-
: `
|
|
540
|
-
export const STATIC_MESSAGES: Record<string, unknown> = _deepMerge(
|
|
541
|
-
_coreMessages as unknown as Record<string, unknown>,
|
|
542
|
-
(_themeMessages as { default?: Record<string, unknown> }).default ?? _themeMessages as unknown as Record<string, unknown>
|
|
543
|
-
)`
|
|
544
|
-
|
|
545
|
-
if (hasEntities) {
|
|
546
|
-
console.log(`[TranslationRegistry] PPR static messages include ${allEntityTranslations.length} entity translations`)
|
|
547
|
-
}
|
|
498
|
+
// NOTE: Entity/plugin translations are NOT included in STATIC_MESSAGES.
|
|
499
|
+
// STATIC_MESSAGES is used by the root layout's StaticIntlProvider and gets
|
|
500
|
+
// serialized into the RSC payload of EVERY page (including public pages).
|
|
501
|
+
// Including entity translations (~500KB+) would bloat public page payloads
|
|
502
|
+
// and degrade PageSpeed scores significantly.
|
|
503
|
+
//
|
|
504
|
+
// Entity translations are loaded dynamically via loadMergedTranslations()
|
|
505
|
+
// for authenticated pages. Dashboard layouts should use NextIntlClientProvider
|
|
506
|
+
// with server-loaded messages to provide entity translations to client components.
|
|
548
507
|
|
|
549
508
|
return `/**
|
|
550
509
|
* PPR: Static messages for the default locale (pre-merged at build time)
|
|
551
510
|
*
|
|
552
511
|
* Used by the root layout's StaticIntlProvider to render content
|
|
553
512
|
* in the PPR static shell without accessing cookies/headers.
|
|
554
|
-
* Core messages are deep-merged with theme
|
|
513
|
+
* Core messages are deep-merged with theme messages only.
|
|
514
|
+
*
|
|
515
|
+
* NOTE: Entity/plugin translations are NOT included here to avoid bloating
|
|
516
|
+
* the RSC payload of public pages. Dashboard pages load entity translations
|
|
517
|
+
* via NextIntlClientProvider in the dashboard layout.
|
|
555
518
|
*/
|
|
556
519
|
import { deepMergeMessages as _deepMerge } from '@nextsparkjs/core/lib/translations/registry'
|
|
557
520
|
import _coreMessages from '@nextsparkjs/core/messages/${defaultLocale}/index.js'
|
|
558
521
|
import _themeMessages from '${defaultThemeTranslation.filePath}'
|
|
559
|
-
|
|
522
|
+
|
|
560
523
|
export const DEFAULT_LOCALE = '${defaultLocale}' as const
|
|
561
524
|
export const DEFAULT_THEME_MODE = '${defaultThemeMode}' as const
|
|
562
|
-
|
|
525
|
+
export const STATIC_MESSAGES: Record<string, unknown> = _deepMerge(
|
|
526
|
+
_coreMessages as unknown as Record<string, unknown>,
|
|
527
|
+
(_themeMessages as { default?: Record<string, unknown> }).default ?? _themeMessages as unknown as Record<string, unknown>
|
|
528
|
+
)`
|
|
563
529
|
})()}
|
|
564
530
|
`
|
|
565
531
|
}
|
|
@@ -22,7 +22,7 @@ import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-reg
|
|
|
22
22
|
import { sel } from '@nextsparkjs/core/selectors'
|
|
23
23
|
|
|
24
24
|
function ResetPasswordContent() {
|
|
25
|
-
const searchParams = useSearchParams()
|
|
25
|
+
const searchParams = useSearchParams()!;
|
|
26
26
|
const token = searchParams.get("token") || "";
|
|
27
27
|
const { updatePassword } = useAuth();
|
|
28
28
|
|
|
@@ -9,7 +9,7 @@ import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-reg
|
|
|
9
9
|
import { sel } from '@nextsparkjs/core/selectors'
|
|
10
10
|
|
|
11
11
|
function VerifyEmailContent() {
|
|
12
|
-
const searchParams = useSearchParams()
|
|
12
|
+
const searchParams = useSearchParams()!;
|
|
13
13
|
const router = useRouter();
|
|
14
14
|
const token = searchParams.get("token") || "";
|
|
15
15
|
|
|
@@ -9,7 +9,7 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@next
|
|
|
9
9
|
import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-registry.client'
|
|
10
10
|
|
|
11
11
|
function ForbiddenContent() {
|
|
12
|
-
const searchParams = useSearchParams()
|
|
12
|
+
const searchParams = useSearchParams()!
|
|
13
13
|
const reason = searchParams.get('reason') || 'No tienes permisos para acceder a este recurso'
|
|
14
14
|
const upgrade = searchParams.get('upgrade') === 'true'
|
|
15
15
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { NextRequest, NextResponse } from 'next/server';
|
|
3
|
+
import type { RateLimitTier } from '@nextsparkjs/core/lib/api/rate-limit';
|
|
3
4
|
|
|
4
5
|
// Dynamic import for rate limiting - graceful fallback if not available
|
|
5
|
-
let checkDistributedRateLimit: ((id: string, tier:
|
|
6
|
+
let checkDistributedRateLimit: ((id: string, tier: RateLimitTier) => Promise<{ allowed: boolean; limit: number; remaining: number; resetTime: number; retryAfter?: number }>) | null = null;
|
|
6
7
|
let createRateLimitErrorResponse: ((result: { allowed: boolean; limit: number; remaining: number; resetTime: number; retryAfter?: number }) => NextResponse) | null = null;
|
|
7
8
|
|
|
8
9
|
// Lazy-load rate limiting functions on first request
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* 3. Webhook signature verification provides security at the API level
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { NextRequest } from 'next/server'
|
|
18
|
+
import { NextRequest, NextResponse } from 'next/server'
|
|
19
19
|
import { query, queryOne } from '@nextsparkjs/core/lib/db'
|
|
20
20
|
|
|
21
21
|
// Polar webhook verification - import from gateway
|
|
@@ -32,7 +32,7 @@ async function loadExtensions(): Promise<PolarWebhookExtensions> {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
async function handlePolarWebhook(request: NextRequest) {
|
|
35
|
+
async function handlePolarWebhook(request: NextRequest): Promise<NextResponse> {
|
|
36
36
|
// 1. Get raw body and ALL headers (Polar needs full headers for verification)
|
|
37
37
|
const payload = await request.text()
|
|
38
38
|
const headers: Record<string, string> = {}
|
|
@@ -43,7 +43,7 @@ async function handlePolarWebhook(request: NextRequest) {
|
|
|
43
43
|
|
|
44
44
|
// Verify required Polar webhook headers
|
|
45
45
|
if (!headers['webhook-id'] || !headers['webhook-signature'] || !headers['webhook-timestamp']) {
|
|
46
|
-
return
|
|
46
|
+
return NextResponse.json(
|
|
47
47
|
{ error: 'Missing required webhook headers (webhook-id, webhook-signature, webhook-timestamp)' },
|
|
48
48
|
{ status: 400 }
|
|
49
49
|
)
|
|
@@ -56,7 +56,7 @@ async function handlePolarWebhook(request: NextRequest) {
|
|
|
56
56
|
event = gateway.verifyWebhookSignature(payload, headers)
|
|
57
57
|
} catch (error) {
|
|
58
58
|
console.error('[polar-webhook] Signature verification failed:', error)
|
|
59
|
-
return
|
|
59
|
+
return NextResponse.json({ error: 'Invalid signature' }, { status: 400 })
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
// 3. Check for duplicate events (idempotency)
|
|
@@ -69,7 +69,7 @@ async function handlePolarWebhook(request: NextRequest) {
|
|
|
69
69
|
|
|
70
70
|
if (existing) {
|
|
71
71
|
console.log(`[polar-webhook] Event ${eventId} already processed, skipping`)
|
|
72
|
-
return
|
|
72
|
+
return NextResponse.json({ received: true, status: 'duplicate' })
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
// 4. Handle events
|
|
@@ -101,10 +101,10 @@ async function handlePolarWebhook(request: NextRequest) {
|
|
|
101
101
|
console.log(`[polar-webhook] Unhandled event type: ${event.type}`)
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
return
|
|
104
|
+
return NextResponse.json({ received: true })
|
|
105
105
|
} catch (error) {
|
|
106
106
|
console.error('[polar-webhook] Handler error:', error)
|
|
107
|
-
return
|
|
107
|
+
return NextResponse.json({ error: 'Handler failed' }, { status: 500 })
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* so Stripe's rawBody requirement is preserved.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import { NextRequest } from 'next/server'
|
|
15
|
+
import { NextRequest, NextResponse } from 'next/server'
|
|
16
16
|
import { handleStripeWebhook } from '@nextsparkjs/core/lib/billing/stripe-webhook'
|
|
17
17
|
import { withRateLimitTier } from '@nextsparkjs/core/lib/api/rate-limit'
|
|
18
18
|
|
|
@@ -26,9 +26,9 @@ async function loadExtensions() {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
export const POST = withRateLimitTier(
|
|
29
|
-
async (request: NextRequest) => {
|
|
29
|
+
async (request: NextRequest): Promise<NextResponse> => {
|
|
30
30
|
const extensions = await loadExtensions()
|
|
31
|
-
return handleStripeWebhook(request, extensions)
|
|
31
|
+
return handleStripeWebhook(request, extensions) as unknown as NextResponse
|
|
32
32
|
},
|
|
33
33
|
'webhook'
|
|
34
34
|
)
|
|
@@ -10,7 +10,7 @@ import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-reg
|
|
|
10
10
|
import { getEntityData } from '@nextsparkjs/core/lib/api/entities'
|
|
11
11
|
|
|
12
12
|
function EntityEditPage() {
|
|
13
|
-
const params = useParams()
|
|
13
|
+
const params = useParams()!
|
|
14
14
|
const router = useRouter()
|
|
15
15
|
const [entityConfig, setEntityConfig] = useState<ClientEntityConfig | null>(null)
|
|
16
16
|
const [initialData, setInitialData] = useState<Record<string, unknown> | null>(null)
|
|
@@ -9,7 +9,7 @@ import { BuilderEditorView } from '@nextsparkjs/core/components/dashboard/block-
|
|
|
9
9
|
import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-registry.client'
|
|
10
10
|
|
|
11
11
|
function EntityCreatePage() {
|
|
12
|
-
const params = useParams()
|
|
12
|
+
const params = useParams()!
|
|
13
13
|
const router = useRouter()
|
|
14
14
|
const [entityConfig, setEntityConfig] = useState<ClientEntityConfig | null>(null)
|
|
15
15
|
const [loading, setLoading] = useState(true)
|
|
@@ -78,7 +78,7 @@ function DefaultDashboardPage() {
|
|
|
78
78
|
<div className="mb-8" data-cy="dashboard-welcome">
|
|
79
79
|
<h1 className="text-3xl font-bold">{t('title')}</h1>
|
|
80
80
|
<p className="text-muted-foreground mt-1">
|
|
81
|
-
{t('welcome', { name: user.firstName || user.email })}
|
|
81
|
+
{t('welcome', { name: user.firstName || user.email || '' })}
|
|
82
82
|
</p>
|
|
83
83
|
</div>
|
|
84
84
|
|
|
@@ -17,7 +17,7 @@ import { getEntityData } from '@nextsparkjs/core/lib/api/entities'
|
|
|
17
17
|
import { getTemplateOrDefaultClient } from '@nextsparkjs/registries/template-registry.client'
|
|
18
18
|
|
|
19
19
|
function PatternEditPage() {
|
|
20
|
-
const params = useParams()
|
|
20
|
+
const params = useParams()!
|
|
21
21
|
const router = useRouter()
|
|
22
22
|
const [entityConfig, setEntityConfig] = useState<ClientEntityConfig | null>(null)
|
|
23
23
|
const [initialData, setInitialData] = useState<Record<string, unknown> | null>(null)
|
|
@@ -4,6 +4,7 @@ import { useAuth } from '@nextsparkjs/core/hooks/useAuth'
|
|
|
4
4
|
import { useRouter } from 'next/navigation'
|
|
5
5
|
import { useEffect, Suspense } from 'react'
|
|
6
6
|
import { Loader2 } from 'lucide-react'
|
|
7
|
+
import { DashboardProviders } from '@nextsparkjs/core/providers/DashboardProviders'
|
|
7
8
|
import { DashboardTranslationPreloader } from '@nextsparkjs/core/lib/i18n/DashboardTranslationPreloader'
|
|
8
9
|
import { TranslationDebugger } from '@nextsparkjs/core/utils/dev/TranslationDebugger'
|
|
9
10
|
import { useEnsureUserMetadata } from '@nextsparkjs/core/hooks/useEnsureUserMetadata'
|
|
@@ -82,5 +83,9 @@ export default function CoreDashboardLayout({
|
|
|
82
83
|
}: {
|
|
83
84
|
children: React.ReactNode
|
|
84
85
|
}) {
|
|
85
|
-
return
|
|
86
|
+
return (
|
|
87
|
+
<DashboardProviders>
|
|
88
|
+
<DashboardLayoutContent>{children}</DashboardLayoutContent>
|
|
89
|
+
</DashboardProviders>
|
|
90
|
+
)
|
|
86
91
|
}
|
|
@@ -35,7 +35,7 @@ function SettingsLayout({
|
|
|
35
35
|
children: React.ReactNode
|
|
36
36
|
}) {
|
|
37
37
|
const [statusMessage, setStatusMessage] = useState('')
|
|
38
|
-
const pathname = usePathname()
|
|
38
|
+
const pathname = usePathname() ?? ''
|
|
39
39
|
const t = useTranslations('settings')
|
|
40
40
|
|
|
41
41
|
// Validate if the current settings page is enabled
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DeveloperGuard } from "@nextsparkjs/core/components/app/guards/DeveloperGuard";
|
|
2
|
+
import { DashboardProviders } from "@nextsparkjs/core/providers/DashboardProviders";
|
|
2
3
|
import { DevtoolsSidebar, DevtoolsMobileHeader } from "@nextsparkjs/core/components/devtools";
|
|
3
4
|
import { Metadata } from "next";
|
|
4
5
|
import { getTemplateOrDefault, getMetadataOrDefault } from '@nextsparkjs/core/lib/template-resolver'
|
|
@@ -30,6 +31,7 @@ interface DevLayoutProps {
|
|
|
30
31
|
function DevLayout({ children }: DevLayoutProps) {
|
|
31
32
|
const pluginNavItems = getPluginNavItems('devtools')
|
|
32
33
|
return (
|
|
34
|
+
<DashboardProviders>
|
|
33
35
|
<DeveloperGuard>
|
|
34
36
|
<div className="flex h-screen bg-background">
|
|
35
37
|
{/* Sidebar - Hidden on mobile, visible on desktop */}
|
|
@@ -54,6 +56,7 @@ function DevLayout({ children }: DevLayoutProps) {
|
|
|
54
56
|
{/* Could add a mobile drawer/overlay sidebar here if needed */}
|
|
55
57
|
</div>
|
|
56
58
|
</DeveloperGuard>
|
|
59
|
+
</DashboardProviders>
|
|
57
60
|
);
|
|
58
61
|
}
|
|
59
62
|
|
package/templates/app/layout.tsx
CHANGED
|
@@ -11,13 +11,9 @@ import { getMessages } from 'next-intl/server'
|
|
|
11
11
|
|
|
12
12
|
import "./globals.css"
|
|
13
13
|
import { getBillingResourceHints } from "@nextsparkjs/core/lib/billing/gateways/factory"
|
|
14
|
-
import { QueryProvider } from "@nextsparkjs/core/providers/query-provider"
|
|
15
14
|
import { ThemeProvider as NextThemeProvider } from "@nextsparkjs/core/providers/theme-provider"
|
|
16
15
|
import { ThemeProvider as CustomThemeProvider } from "@nextsparkjs/core/lib/theme/ThemeProvider"
|
|
17
|
-
import { TeamProvider } from "@nextsparkjs/core/contexts/TeamContext"
|
|
18
|
-
import { SubscriptionProvider } from "@nextsparkjs/core/contexts/SubscriptionContext"
|
|
19
16
|
import { getUserLocale } from '@nextsparkjs/core/lib/locale'
|
|
20
|
-
import { Toaster } from "@nextsparkjs/core/components/ui/sonner"
|
|
21
17
|
import { TranslationContextManager } from "@nextsparkjs/core/providers/TranslationContextManager"
|
|
22
18
|
import { PluginService } from '@nextsparkjs/core/lib/services'
|
|
23
19
|
import { getMetadataOrDefault } from '@nextsparkjs/core/lib/template-resolver'
|
|
@@ -87,15 +83,8 @@ export default async function RootLayout({
|
|
|
87
83
|
disableTransitionOnChange
|
|
88
84
|
>
|
|
89
85
|
<CustomThemeProvider>
|
|
90
|
-
<
|
|
91
|
-
|
|
92
|
-
<SubscriptionProvider>
|
|
93
|
-
<TranslationContextManager />
|
|
94
|
-
<main>{children}</main>
|
|
95
|
-
<Toaster position="bottom-left" />
|
|
96
|
-
</SubscriptionProvider>
|
|
97
|
-
</TeamProvider>
|
|
98
|
-
</QueryProvider>
|
|
86
|
+
<TranslationContextManager />
|
|
87
|
+
<main>{children}</main>
|
|
99
88
|
</CustomThemeProvider>
|
|
100
89
|
</NextThemeProvider>
|
|
101
90
|
</NextIntlClientProvider>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SuperAdminGuard } from "@nextsparkjs/core/components/app/guards/SuperAdminGuard";
|
|
2
|
+
import { DashboardProviders } from "@nextsparkjs/core/providers/DashboardProviders";
|
|
2
3
|
import { SuperadminSidebar } from "@nextsparkjs/core/components/superadmin/layouts/SuperadminSidebar";
|
|
3
4
|
import { Metadata } from "next";
|
|
4
5
|
import { getTemplateOrDefault, getMetadataOrDefault } from '@nextsparkjs/core/lib/template-resolver'
|
|
@@ -29,6 +30,7 @@ interface SuperadminLayoutProps {
|
|
|
29
30
|
function SuperadminLayout({ children }: SuperadminLayoutProps) {
|
|
30
31
|
const pluginNavItems = getPluginNavItems('superadmin')
|
|
31
32
|
return (
|
|
33
|
+
<DashboardProviders>
|
|
32
34
|
<SuperAdminGuard>
|
|
33
35
|
<div className="flex h-screen bg-background" data-cy="superadmin-container">
|
|
34
36
|
{/* Sidebar - Hidden on mobile, visible on desktop */}
|
|
@@ -63,6 +65,7 @@ function SuperadminLayout({ children }: SuperadminLayoutProps) {
|
|
|
63
65
|
{/* Could add a mobile drawer/overlay sidebar here if needed */}
|
|
64
66
|
</div>
|
|
65
67
|
</SuperAdminGuard>
|
|
68
|
+
</DashboardProviders>
|
|
66
69
|
);
|
|
67
70
|
}
|
|
68
71
|
|
|
@@ -146,7 +146,7 @@ const roleColors = {
|
|
|
146
146
|
* Displays detailed information about a specific team for superadmins (read-only).
|
|
147
147
|
*/
|
|
148
148
|
function TeamDetailPage() {
|
|
149
|
-
const params = useParams()
|
|
149
|
+
const params = useParams()!;
|
|
150
150
|
const teamId = params.teamId as string;
|
|
151
151
|
|
|
152
152
|
// Fetch team data from API
|
|
@@ -107,7 +107,7 @@ const roleColors = {
|
|
|
107
107
|
* Displays detailed information about a specific user for superadmins.
|
|
108
108
|
*/
|
|
109
109
|
function UserDetailPage() {
|
|
110
|
-
const params = useParams()
|
|
110
|
+
const params = useParams()!;
|
|
111
111
|
const userId = params.userId as string;
|
|
112
112
|
|
|
113
113
|
// Fetch user data from API
|