@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.
Files changed (63) hide show
  1. package/dist/components/dashboard/layouts/DashboardAuthLayout.d.ts +7 -0
  2. package/dist/components/dashboard/layouts/DashboardAuthLayout.d.ts.map +1 -0
  3. package/dist/components/dashboard/layouts/DashboardAuthLayout.js +44 -0
  4. package/dist/components/dashboard/layouts/index.d.ts +1 -0
  5. package/dist/components/dashboard/layouts/index.d.ts.map +1 -1
  6. package/dist/components/dashboard/layouts/index.js +2 -0
  7. package/dist/lib/api/entity/generic-handler.d.ts.map +1 -1
  8. package/dist/lib/api/entity/generic-handler.js +26 -0
  9. package/dist/lib/api/rate-limit.d.ts.map +1 -1
  10. package/dist/lib/api/rate-limit.js +3 -0
  11. package/dist/lib/entities/schema-generator.d.ts.map +1 -1
  12. package/dist/lib/entities/schema-generator.js +29 -2
  13. package/dist/lib/entities/types.d.ts +6 -0
  14. package/dist/lib/entities/types.d.ts.map +1 -1
  15. package/dist/providers/DashboardProviders.d.ts +12 -0
  16. package/dist/providers/DashboardProviders.d.ts.map +1 -0
  17. package/dist/providers/DashboardProviders.js +16 -0
  18. package/dist/providers/index.d.ts +1 -0
  19. package/dist/providers/index.d.ts.map +1 -1
  20. package/dist/providers/index.js +1 -0
  21. package/dist/styles/classes.json +1 -1
  22. package/dist/templates/app/(auth)/accept-invite/[token]/page.tsx +1 -1
  23. package/dist/templates/app/(auth)/reset-password/page.tsx +1 -1
  24. package/dist/templates/app/(auth)/verify-email/page.tsx +1 -1
  25. package/dist/templates/app/403/page.tsx +1 -1
  26. package/dist/templates/app/api/csp-report/route.ts +2 -1
  27. package/dist/templates/app/api/v1/billing/webhooks/polar/route.ts +7 -7
  28. package/dist/templates/app/api/v1/billing/webhooks/stripe/route.ts +3 -3
  29. package/dist/templates/app/dashboard/(main)/[entity]/[id]/edit/page.tsx +1 -1
  30. package/dist/templates/app/dashboard/(main)/[entity]/create/page.tsx +1 -1
  31. package/dist/templates/app/dashboard/(main)/page.tsx +1 -1
  32. package/dist/templates/app/dashboard/(main)/patterns/[id]/edit/page.tsx +1 -1
  33. package/dist/templates/app/dashboard/(main)/patterns/[id]/reports/page.tsx +1 -1
  34. package/dist/templates/app/dashboard/layout.tsx +6 -1
  35. package/dist/templates/app/dashboard/settings/layout.tsx +1 -1
  36. package/dist/templates/app/devtools/layout.tsx +3 -0
  37. package/dist/templates/app/layout.tsx +2 -13
  38. package/dist/templates/app/superadmin/layout.tsx +3 -0
  39. package/dist/templates/app/superadmin/teams/[teamId]/page.tsx +1 -1
  40. package/dist/templates/app/superadmin/users/[userId]/page.tsx +1 -1
  41. package/package.json +2 -2
  42. package/scripts/build/registry/generators/block-registry.mjs +16 -1
  43. package/scripts/build/registry/generators/middleware-registry.mjs +1 -1
  44. package/scripts/build/registry/generators/translation-registry.mjs +19 -53
  45. package/templates/app/(auth)/accept-invite/[token]/page.tsx +1 -1
  46. package/templates/app/(auth)/reset-password/page.tsx +1 -1
  47. package/templates/app/(auth)/verify-email/page.tsx +1 -1
  48. package/templates/app/403/page.tsx +1 -1
  49. package/templates/app/api/csp-report/route.ts +2 -1
  50. package/templates/app/api/v1/billing/webhooks/polar/route.ts +7 -7
  51. package/templates/app/api/v1/billing/webhooks/stripe/route.ts +3 -3
  52. package/templates/app/dashboard/(main)/[entity]/[id]/edit/page.tsx +1 -1
  53. package/templates/app/dashboard/(main)/[entity]/create/page.tsx +1 -1
  54. package/templates/app/dashboard/(main)/page.tsx +1 -1
  55. package/templates/app/dashboard/(main)/patterns/[id]/edit/page.tsx +1 -1
  56. package/templates/app/dashboard/(main)/patterns/[id]/reports/page.tsx +1 -1
  57. package/templates/app/dashboard/layout.tsx +6 -1
  58. package/templates/app/dashboard/settings/layout.tsx +1 -1
  59. package/templates/app/devtools/layout.tsx +3 -0
  60. package/templates/app/layout.tsx +2 -13
  61. package/templates/app/superadmin/layout.tsx +3 -0
  62. package/templates/app/superadmin/teams/[teamId]/page.tsx +1 -1
  63. package/templates/app/superadmin/users/[userId]/page.tsx +1 -1
@@ -0,0 +1,7 @@
1
+ /**
2
+ * CORE SECURITY LAYOUT - NOT OVERRIDEABLE BY THEMES
3
+ */
4
+ export declare function DashboardAuthLayout({ children }: {
5
+ children: React.ReactNode;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=DashboardAuthLayout.d.ts.map
@@ -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,4 +1,5 @@
1
1
  export { AuthGuard } from './AuthGuard';
2
+ export { DashboardAuthLayout } from './DashboardAuthLayout';
2
3
  export { DashboardShell } from './DashboardShell';
3
4
  export { Sidebar } from './Sidebar';
4
5
  export { TopNavbar } from './TopNavbar';
@@ -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;AAqYvD;;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,CA+VrF;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,CAuTtJ;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,CAgJtJ;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAEtF"}
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,CAwCpD;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"}
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;AAuwBD;;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"}
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
- return strict ? strVal.trim() : strVal;
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) => val === void 0 ? null : 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,3 +1,4 @@
1
+ export * from './DashboardProviders';
1
2
  export * from './PluginProvider';
2
3
  export * from './TranslationContextManager';
3
4
  export * from './query-provider';
@@ -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"}
@@ -1,3 +1,4 @@
1
+ export * from "./DashboardProviders.js";
1
2
  export * from "./PluginProvider.js";
2
3
  export * from "./TranslationContextManager.js";
3
4
  export * from "./query-provider.js";
@@ -1,5 +1,5 @@
1
1
  {
2
- "generated": "2026-04-13T21:11:51.036Z",
2
+ "generated": "2026-04-15T14:10:16.186Z",
3
3
  "totalClasses": 1078,
4
4
  "classes": [
5
5
  "!text-2xl",
@@ -21,7 +21,7 @@ interface InvitationInfo {
21
21
  }
22
22
 
23
23
  function AcceptInvitePage() {
24
- const params = useParams()
24
+ const params = useParams()!
25
25
  const router = useRouter()
26
26
  const { user, isLoading: authLoading } = useAuth()
27
27
  const token = params.token as string
@@ -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: string) => Promise<{ allowed: boolean; limit: number; remaining: number; resetTime: number; retryAfter?: number }>) | null = null;
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 Response.json(
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 Response.json({ error: 'Invalid signature' }, { status: 400 })
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 Response.json({ received: true, status: 'duplicate' })
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 Response.json({ received: true })
104
+ return NextResponse.json({ received: true })
105
105
  } catch (error) {
106
106
  console.error('[polar-webhook] Handler error:', error)
107
- return Response.json({ error: 'Handler failed' }, { status: 500 })
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)
@@ -26,7 +26,7 @@ interface PatternData {
26
26
  }
27
27
 
28
28
  function PatternReportsPage() {
29
- const params = useParams()
29
+ const params = useParams()!
30
30
  const router = useRouter()
31
31
  const patternId = params.id as string
32
32
 
@@ -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 <DashboardLayoutContent>{children}</DashboardLayoutContent>
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
- <QueryProvider>
91
- <TeamProvider>
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.141",
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.141"
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
- fields?: unknown[]
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
- // Collect entity translations for the default locale (theme entities)
499
- const defaultLocaleEntityTranslations = entityTranslations.filter(
500
- t => t.themeName === config.activeTheme && t.locale === defaultLocale
501
- )
502
-
503
- // Collect plugin entity translations for the default locale
504
- // Only include plugin entities that are NOT already in the theme (plugin = fallback)
505
- const themeEntityNames = new Set(defaultLocaleEntityTranslations.map(t => t.entityName))
506
- const defaultLocalePluginEntityTranslations = pluginEntityTranslations.filter(
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 + entity + plugin messages.
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
- ${entityImportsBlock}
522
+
560
523
  export const DEFAULT_LOCALE = '${defaultLocale}' as const
561
524
  export const DEFAULT_THEME_MODE = '${defaultThemeMode}' as const
562
- ${entityMergeBlock}`
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
  }
@@ -21,7 +21,7 @@ interface InvitationInfo {
21
21
  }
22
22
 
23
23
  function AcceptInvitePage() {
24
- const params = useParams()
24
+ const params = useParams()!
25
25
  const router = useRouter()
26
26
  const { user, isLoading: authLoading } = useAuth()
27
27
  const token = params.token as string
@@ -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: string) => Promise<{ allowed: boolean; limit: number; remaining: number; resetTime: number; retryAfter?: number }>) | null = null;
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 Response.json(
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 Response.json({ error: 'Invalid signature' }, { status: 400 })
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 Response.json({ received: true, status: 'duplicate' })
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 Response.json({ received: true })
104
+ return NextResponse.json({ received: true })
105
105
  } catch (error) {
106
106
  console.error('[polar-webhook] Handler error:', error)
107
- return Response.json({ error: 'Handler failed' }, { status: 500 })
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)
@@ -26,7 +26,7 @@ interface PatternData {
26
26
  }
27
27
 
28
28
  function PatternReportsPage() {
29
- const params = useParams()
29
+ const params = useParams()!
30
30
  const router = useRouter()
31
31
  const patternId = params.id as string
32
32
 
@@ -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 <DashboardLayoutContent>{children}</DashboardLayoutContent>
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
- <QueryProvider>
91
- <TeamProvider>
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