@nextsparkjs/core 0.1.0-beta.142 → 0.1.0-beta.144
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/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 +62 -35
- 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/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 +62 -35
- package/templates/app/superadmin/teams/[teamId]/page.tsx +1 -1
- package/templates/app/superadmin/users/[userId]/page.tsx +1 -1
|
@@ -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":"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"}
|
|
@@ -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,5 +1,10 @@
|
|
|
1
|
+
import { Suspense } from 'react'
|
|
2
|
+
import { NextIntlClientProvider } from 'next-intl'
|
|
3
|
+
import { getMessages } from 'next-intl/server'
|
|
1
4
|
import { SuperAdminGuard } from "@nextsparkjs/core/components/app/guards/SuperAdminGuard";
|
|
5
|
+
import { DashboardProviders } from "@nextsparkjs/core/providers/DashboardProviders";
|
|
2
6
|
import { SuperadminSidebar } from "@nextsparkjs/core/components/superadmin/layouts/SuperadminSidebar";
|
|
7
|
+
import { Loader2 } from 'lucide-react'
|
|
3
8
|
import { Metadata } from "next";
|
|
4
9
|
import { getTemplateOrDefault, getMetadataOrDefault } from '@nextsparkjs/core/lib/template-resolver'
|
|
5
10
|
import { getPluginNavItems } from '@nextsparkjs/registries/plugin-registry'
|
|
@@ -20,50 +25,72 @@ interface SuperadminLayoutProps {
|
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
/**
|
|
23
|
-
*
|
|
28
|
+
* Inner async component that loads translations server-side.
|
|
29
|
+
* Wrapped in Suspense so PPR doesn't fail during prerender.
|
|
24
30
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* Includes responsive design for mobile and desktop.
|
|
31
|
+
* Loads ALL translations (core + theme + entity + plugin) via getMessages()
|
|
32
|
+
* so plugin settings pages can use useTranslations() for their namespaces.
|
|
28
33
|
*/
|
|
29
|
-
function
|
|
34
|
+
async function SuperadminWithTranslations({ children }: SuperadminLayoutProps) {
|
|
35
|
+
const messages = await getMessages()
|
|
30
36
|
const pluginNavItems = getPluginNavItems('superadmin')
|
|
37
|
+
|
|
31
38
|
return (
|
|
32
|
-
<
|
|
33
|
-
<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
<DashboardProviders>
|
|
40
|
+
<NextIntlClientProvider messages={messages}>
|
|
41
|
+
<SuperAdminGuard>
|
|
42
|
+
<div className="flex h-screen bg-background" data-cy="superadmin-container">
|
|
43
|
+
{/* Sidebar - Hidden on mobile, visible on desktop */}
|
|
44
|
+
<div className="hidden lg:block">
|
|
45
|
+
<SuperadminSidebar pluginItems={pluginNavItems} />
|
|
46
|
+
</div>
|
|
38
47
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
{/* Main content area */}
|
|
49
|
+
<div className="flex-1 flex flex-col overflow-hidden">
|
|
50
|
+
{/* Mobile header for Superadmin - Only visible on mobile */}
|
|
51
|
+
<div className="lg:hidden bg-card border-b border-border p-4">
|
|
52
|
+
<div className="flex items-center gap-2">
|
|
53
|
+
<div className="flex items-center justify-center w-8 h-8 bg-red-100 rounded-lg">
|
|
54
|
+
<div className="h-5 w-5 bg-red-600 rounded-sm"></div>
|
|
55
|
+
</div>
|
|
56
|
+
<div>
|
|
57
|
+
<h1 className="text-lg font-bold text-red-600">Super Admin</h1>
|
|
58
|
+
<p className="text-xs text-muted-foreground">Super Admin Area</p>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
46
61
|
</div>
|
|
47
|
-
<div>
|
|
48
|
-
<h1 className="text-lg font-bold text-red-600">Super Admin</h1>
|
|
49
|
-
<p className="text-xs text-muted-foreground">Super Admin Area</p>
|
|
50
|
-
</div>
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
62
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
63
|
+
{/* Content area with scrolling */}
|
|
64
|
+
<main className="flex-1 overflow-y-auto">
|
|
65
|
+
<div className="container mx-auto p-6 max-w-7xl">
|
|
66
|
+
{children}
|
|
67
|
+
</div>
|
|
68
|
+
</main>
|
|
58
69
|
</div>
|
|
59
|
-
</
|
|
60
|
-
</
|
|
70
|
+
</div>
|
|
71
|
+
</SuperAdminGuard>
|
|
72
|
+
</NextIntlClientProvider>
|
|
73
|
+
</DashboardProviders>
|
|
74
|
+
)
|
|
75
|
+
}
|
|
61
76
|
|
|
62
|
-
|
|
63
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Superadmin Layout
|
|
79
|
+
*
|
|
80
|
+
* Protected layout for superadmin-only sections with dedicated sidebar navigation.
|
|
81
|
+
* Loads ALL translations (core + theme + entity + plugin) server-side via
|
|
82
|
+
* NextIntlClientProvider so plugin settings pages can use useTranslations().
|
|
83
|
+
*/
|
|
84
|
+
function SuperadminLayout({ children }: SuperadminLayoutProps) {
|
|
85
|
+
return (
|
|
86
|
+
<Suspense fallback={
|
|
87
|
+
<div className="min-h-screen flex items-center justify-center">
|
|
88
|
+
<Loader2 className="h-8 w-8 animate-spin text-muted-foreground" />
|
|
64
89
|
</div>
|
|
65
|
-
|
|
66
|
-
|
|
90
|
+
}>
|
|
91
|
+
<SuperadminWithTranslations>{children}</SuperadminWithTranslations>
|
|
92
|
+
</Suspense>
|
|
93
|
+
)
|
|
67
94
|
}
|
|
68
95
|
|
|
69
|
-
export default getTemplateOrDefault('app/superadmin/layout.tsx', SuperadminLayout)
|
|
96
|
+
export default getTemplateOrDefault('app/superadmin/layout.tsx', SuperadminLayout)
|
|
@@ -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.144",
|
|
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.144"
|
|
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
|
|
@@ -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,5 +1,10 @@
|
|
|
1
|
+
import { Suspense } from 'react'
|
|
2
|
+
import { NextIntlClientProvider } from 'next-intl'
|
|
3
|
+
import { getMessages } from 'next-intl/server'
|
|
1
4
|
import { SuperAdminGuard } from "@nextsparkjs/core/components/app/guards/SuperAdminGuard";
|
|
5
|
+
import { DashboardProviders } from "@nextsparkjs/core/providers/DashboardProviders";
|
|
2
6
|
import { SuperadminSidebar } from "@nextsparkjs/core/components/superadmin/layouts/SuperadminSidebar";
|
|
7
|
+
import { Loader2 } from 'lucide-react'
|
|
3
8
|
import { Metadata } from "next";
|
|
4
9
|
import { getTemplateOrDefault, getMetadataOrDefault } from '@nextsparkjs/core/lib/template-resolver'
|
|
5
10
|
import { getPluginNavItems } from '@nextsparkjs/registries/plugin-registry'
|
|
@@ -20,50 +25,72 @@ interface SuperadminLayoutProps {
|
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
/**
|
|
23
|
-
*
|
|
28
|
+
* Inner async component that loads translations server-side.
|
|
29
|
+
* Wrapped in Suspense so PPR doesn't fail during prerender.
|
|
24
30
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* Includes responsive design for mobile and desktop.
|
|
31
|
+
* Loads ALL translations (core + theme + entity + plugin) via getMessages()
|
|
32
|
+
* so plugin settings pages can use useTranslations() for their namespaces.
|
|
28
33
|
*/
|
|
29
|
-
function
|
|
34
|
+
async function SuperadminWithTranslations({ children }: SuperadminLayoutProps) {
|
|
35
|
+
const messages = await getMessages()
|
|
30
36
|
const pluginNavItems = getPluginNavItems('superadmin')
|
|
37
|
+
|
|
31
38
|
return (
|
|
32
|
-
<
|
|
33
|
-
<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
<DashboardProviders>
|
|
40
|
+
<NextIntlClientProvider messages={messages}>
|
|
41
|
+
<SuperAdminGuard>
|
|
42
|
+
<div className="flex h-screen bg-background" data-cy="superadmin-container">
|
|
43
|
+
{/* Sidebar - Hidden on mobile, visible on desktop */}
|
|
44
|
+
<div className="hidden lg:block">
|
|
45
|
+
<SuperadminSidebar pluginItems={pluginNavItems} />
|
|
46
|
+
</div>
|
|
38
47
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
{/* Main content area */}
|
|
49
|
+
<div className="flex-1 flex flex-col overflow-hidden">
|
|
50
|
+
{/* Mobile header for Superadmin - Only visible on mobile */}
|
|
51
|
+
<div className="lg:hidden bg-card border-b border-border p-4">
|
|
52
|
+
<div className="flex items-center gap-2">
|
|
53
|
+
<div className="flex items-center justify-center w-8 h-8 bg-red-100 rounded-lg">
|
|
54
|
+
<div className="h-5 w-5 bg-red-600 rounded-sm"></div>
|
|
55
|
+
</div>
|
|
56
|
+
<div>
|
|
57
|
+
<h1 className="text-lg font-bold text-red-600">Super Admin</h1>
|
|
58
|
+
<p className="text-xs text-muted-foreground">Super Admin Area</p>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
46
61
|
</div>
|
|
47
|
-
<div>
|
|
48
|
-
<h1 className="text-lg font-bold text-red-600">Super Admin</h1>
|
|
49
|
-
<p className="text-xs text-muted-foreground">Super Admin Area</p>
|
|
50
|
-
</div>
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
62
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
63
|
+
{/* Content area with scrolling */}
|
|
64
|
+
<main className="flex-1 overflow-y-auto">
|
|
65
|
+
<div className="container mx-auto p-6 max-w-7xl">
|
|
66
|
+
{children}
|
|
67
|
+
</div>
|
|
68
|
+
</main>
|
|
58
69
|
</div>
|
|
59
|
-
</
|
|
60
|
-
</
|
|
70
|
+
</div>
|
|
71
|
+
</SuperAdminGuard>
|
|
72
|
+
</NextIntlClientProvider>
|
|
73
|
+
</DashboardProviders>
|
|
74
|
+
)
|
|
75
|
+
}
|
|
61
76
|
|
|
62
|
-
|
|
63
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Superadmin Layout
|
|
79
|
+
*
|
|
80
|
+
* Protected layout for superadmin-only sections with dedicated sidebar navigation.
|
|
81
|
+
* Loads ALL translations (core + theme + entity + plugin) server-side via
|
|
82
|
+
* NextIntlClientProvider so plugin settings pages can use useTranslations().
|
|
83
|
+
*/
|
|
84
|
+
function SuperadminLayout({ children }: SuperadminLayoutProps) {
|
|
85
|
+
return (
|
|
86
|
+
<Suspense fallback={
|
|
87
|
+
<div className="min-h-screen flex items-center justify-center">
|
|
88
|
+
<Loader2 className="h-8 w-8 animate-spin text-muted-foreground" />
|
|
64
89
|
</div>
|
|
65
|
-
|
|
66
|
-
|
|
90
|
+
}>
|
|
91
|
+
<SuperadminWithTranslations>{children}</SuperadminWithTranslations>
|
|
92
|
+
</Suspense>
|
|
93
|
+
)
|
|
67
94
|
}
|
|
68
95
|
|
|
69
|
-
export default getTemplateOrDefault('app/superadmin/layout.tsx', SuperadminLayout)
|
|
96
|
+
export default getTemplateOrDefault('app/superadmin/layout.tsx', SuperadminLayout)
|
|
@@ -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
|