@nextsparkjs/core 0.1.0-beta.113 → 0.1.0-beta.115
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 +49 -19
- package/dist/lib/auth-client.d.ts +769 -7
- package/dist/lib/auth-client.d.ts.map +1 -1
- package/dist/lib/auth-client.js +6 -2
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +18 -0
- package/dist/lib/email/templates.d.ts +5 -1
- package/dist/lib/email/templates.d.ts.map +1 -1
- package/dist/lib/email/templates.js +61 -0
- package/dist/lib/email/types.d.ts +6 -0
- package/dist/lib/email/types.d.ts.map +1 -1
- package/dist/lib/entities/types.d.ts +5 -0
- package/dist/lib/entities/types.d.ts.map +1 -1
- package/dist/styles/classes.json +1 -1
- package/package.json +2 -2
- package/scripts/build/registry/config.mjs +3 -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;AAkYvD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,
|
|
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;AAkYvD;;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,CA2SrF;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,CAyStJ;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,CAmHtJ;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAEtF"}
|
|
@@ -220,7 +220,7 @@ async function validateTeamContextWithBypass(request, authResult, userId) {
|
|
|
220
220
|
return { valid: true, teamId, isBypass: false };
|
|
221
221
|
}
|
|
222
222
|
async function handleGenericList(request) {
|
|
223
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
223
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
|
|
224
224
|
try {
|
|
225
225
|
const resolution = await resolveEntityFromUrl(request.nextUrl.pathname);
|
|
226
226
|
if (!resolution.isValidEntity || !resolution.entityConfig) {
|
|
@@ -300,6 +300,9 @@ async function handleGenericList(request) {
|
|
|
300
300
|
if ((_b = entityConfig.builder) == null ? void 0 : _b.enabled) {
|
|
301
301
|
systemFields.push("blocks");
|
|
302
302
|
}
|
|
303
|
+
if ((_c = entityConfig.table) == null ? void 0 : _c.softDelete) {
|
|
304
|
+
systemFields.push("deletedAt", "deletedBy");
|
|
305
|
+
}
|
|
303
306
|
const configFields = entityConfig.fields.map((field) => {
|
|
304
307
|
const columnName = /[A-Z]/.test(field.name) ? `"${field.name}"` : field.name;
|
|
305
308
|
return `t.${columnName}`;
|
|
@@ -320,8 +323,8 @@ async function handleGenericList(request) {
|
|
|
320
323
|
const fromDate = url.searchParams.get("from");
|
|
321
324
|
const toDate = url.searchParams.get("to");
|
|
322
325
|
const dateFieldName = url.searchParams.get("dateField");
|
|
323
|
-
const isPublicEntity = ((
|
|
324
|
-
const requestingPublishedOnly = (
|
|
326
|
+
const isPublicEntity = ((_d = entityConfig.access) == null ? void 0 : _d.public) === true;
|
|
327
|
+
const requestingPublishedOnly = (_e = customFilters["status"]) == null ? void 0 : _e.includes("published");
|
|
325
328
|
const skipUserFilter = isPublicEntity && requestingPublishedOnly;
|
|
326
329
|
if (skipUserFilter && process.env.NODE_ENV === "development") {
|
|
327
330
|
console.log(`[GenericHandler] Public access mode: skipping userId filter for ${entityConfig.slug} (status=published)`);
|
|
@@ -336,10 +339,13 @@ async function handleGenericList(request) {
|
|
|
336
339
|
query += ` AND t."teamId" = $${paramIndex++}`;
|
|
337
340
|
queryParams.push(teamId);
|
|
338
341
|
}
|
|
339
|
-
if (userId && !((
|
|
342
|
+
if (userId && !((_f = entityConfig.access) == null ? void 0 : _f.shared) && !skipUserFilter && !isBypass) {
|
|
340
343
|
query += ` AND t."userId" = $${paramIndex++}`;
|
|
341
344
|
queryParams.push(userId);
|
|
342
345
|
}
|
|
346
|
+
if (((_g = entityConfig.table) == null ? void 0 : _g.softDelete) && !isBypass) {
|
|
347
|
+
query += ` AND t."deletedAt" IS NULL`;
|
|
348
|
+
}
|
|
343
349
|
} else if (fieldsParam && distinctParam) {
|
|
344
350
|
const fieldName = fieldsParam;
|
|
345
351
|
const parentId = url.searchParams.get("parentId");
|
|
@@ -353,10 +359,13 @@ async function handleGenericList(request) {
|
|
|
353
359
|
query += ` AND t."parentId" = $${paramIndex++}`;
|
|
354
360
|
queryParams.push(parentId);
|
|
355
361
|
}
|
|
356
|
-
if (userId && !((
|
|
362
|
+
if (userId && !((_h = entityConfig.access) == null ? void 0 : _h.shared) && !skipUserFilter && !isBypass) {
|
|
357
363
|
query += ` AND t."userId" = $${paramIndex++}`;
|
|
358
364
|
queryParams.push(userId);
|
|
359
365
|
}
|
|
366
|
+
if (((_i = entityConfig.table) == null ? void 0 : _i.softDelete) && !isBypass) {
|
|
367
|
+
query += ` AND t."deletedAt" IS NULL`;
|
|
368
|
+
}
|
|
360
369
|
query += ` ORDER BY "${fieldName}" ASC LIMIT $${paramIndex++}`;
|
|
361
370
|
queryParams.push(pagination.limit);
|
|
362
371
|
} else {
|
|
@@ -367,10 +376,13 @@ async function handleGenericList(request) {
|
|
|
367
376
|
whereConditions.push(`t."teamId" = $${paramIndex++}`);
|
|
368
377
|
queryParams.push(teamId);
|
|
369
378
|
}
|
|
370
|
-
if (userId && !((
|
|
379
|
+
if (userId && !((_j = entityConfig.access) == null ? void 0 : _j.shared) && !skipUserFilter && !isBypass) {
|
|
371
380
|
whereConditions.push(`t."userId" = $${paramIndex++}`);
|
|
372
381
|
queryParams.push(userId);
|
|
373
382
|
}
|
|
383
|
+
if (((_k = entityConfig.table) == null ? void 0 : _k.softDelete) && !isBypass) {
|
|
384
|
+
whereConditions.push(`t."deletedAt" IS NULL`);
|
|
385
|
+
}
|
|
374
386
|
if (searchParam && searchParam.trim() !== "") {
|
|
375
387
|
const searchTerm = searchParam.trim();
|
|
376
388
|
const hasName = entityConfig.fields.some((f) => f.name === "name");
|
|
@@ -455,7 +467,7 @@ async function handleGenericList(request) {
|
|
|
455
467
|
`;
|
|
456
468
|
}
|
|
457
469
|
const sortByParam = url.searchParams.get("sortBy");
|
|
458
|
-
const sortOrderParam = ((
|
|
470
|
+
const sortOrderParam = ((_l = url.searchParams.get("sortOrder")) == null ? void 0 : _l.toUpperCase()) === "ASC" ? "ASC" : "DESC";
|
|
459
471
|
let orderByClause = 't."createdAt" DESC';
|
|
460
472
|
if (sortByParam) {
|
|
461
473
|
const baseFields = ["id", "createdAt", "updatedAt", "teamId"];
|
|
@@ -502,7 +514,7 @@ async function handleGenericList(request) {
|
|
|
502
514
|
);
|
|
503
515
|
}
|
|
504
516
|
let dataWithTaxonomies = dataWithChild;
|
|
505
|
-
if ((
|
|
517
|
+
if ((_m = entityConfig.taxonomies) == null ? void 0 : _m.enabled) {
|
|
506
518
|
dataWithTaxonomies = await includeTaxonomiesInData(
|
|
507
519
|
entityConfig,
|
|
508
520
|
dataWithChild,
|
|
@@ -608,7 +620,7 @@ async function handleGenericCreate(request) {
|
|
|
608
620
|
var _a2, _b2;
|
|
609
621
|
if (key === "userId" || key === "teamId") return;
|
|
610
622
|
const field = entityConfig.fields.find((f) => f.name === key);
|
|
611
|
-
if (field && !((_a2 = field.api) == null ? void 0 : _a2.readOnly)
|
|
623
|
+
if (field && !((_a2 = field.api) == null ? void 0 : _a2.readOnly)) {
|
|
612
624
|
const columnName = `"${key}"`;
|
|
613
625
|
insertFields.push(columnName);
|
|
614
626
|
if (field.type === "relation") {
|
|
@@ -721,7 +733,7 @@ async function handleGenericCreate(request) {
|
|
|
721
733
|
}
|
|
722
734
|
}
|
|
723
735
|
async function handleGenericRead(request, { params }) {
|
|
724
|
-
var _a, _b, _c, _d;
|
|
736
|
+
var _a, _b, _c, _d, _e, _f;
|
|
725
737
|
try {
|
|
726
738
|
const { id } = await params;
|
|
727
739
|
const resolution = await resolveEntityFromUrl(request.nextUrl.pathname);
|
|
@@ -766,6 +778,9 @@ async function handleGenericRead(request, { params }) {
|
|
|
766
778
|
if ((_b = entityConfig.builder) == null ? void 0 : _b.enabled) {
|
|
767
779
|
systemFields.push("blocks");
|
|
768
780
|
}
|
|
781
|
+
if ((_c = entityConfig.table) == null ? void 0 : _c.softDelete) {
|
|
782
|
+
systemFields.push("deletedAt", "deletedBy");
|
|
783
|
+
}
|
|
769
784
|
const configFields = entityConfig.fields.map((field) => {
|
|
770
785
|
const columnName = /[A-Z]/.test(field.name) ? `"${field.name}"` : field.name;
|
|
771
786
|
return `t.${columnName}`;
|
|
@@ -788,10 +803,13 @@ async function handleGenericRead(request, { params }) {
|
|
|
788
803
|
query += ` AND t."teamId" = $${paramIndex++}`;
|
|
789
804
|
queryParams.push(teamId);
|
|
790
805
|
}
|
|
791
|
-
if (userId && !((
|
|
806
|
+
if (userId && !((_d = entityConfig.access) == null ? void 0 : _d.shared) && !isBypass) {
|
|
792
807
|
query += ` AND t."userId" = $${paramIndex++}`;
|
|
793
808
|
queryParams.push(userId);
|
|
794
809
|
}
|
|
810
|
+
if (((_e = entityConfig.table) == null ? void 0 : _e.softDelete) && !isBypass) {
|
|
811
|
+
query += ` AND t."deletedAt" IS NULL`;
|
|
812
|
+
}
|
|
795
813
|
const items = await queryWithRLS(query, queryParams, userId);
|
|
796
814
|
if (!items[0]) {
|
|
797
815
|
const response2 = createApiError("Item not found", 404);
|
|
@@ -822,7 +840,7 @@ async function handleGenericRead(request, { params }) {
|
|
|
822
840
|
itemWithChild = itemsWithChild[0] || itemWithMeta;
|
|
823
841
|
}
|
|
824
842
|
let itemWithTaxonomies = itemWithChild;
|
|
825
|
-
if ((
|
|
843
|
+
if ((_f = entityConfig.taxonomies) == null ? void 0 : _f.enabled) {
|
|
826
844
|
const itemsWithTaxonomies = await includeTaxonomiesInData(
|
|
827
845
|
entityConfig,
|
|
828
846
|
[itemWithChild],
|
|
@@ -913,7 +931,7 @@ async function handleGenericUpdate(request, { params }) {
|
|
|
913
931
|
var _a2, _b2;
|
|
914
932
|
if (key === "blocks") return;
|
|
915
933
|
const field = entityConfig.fields.find((f) => f.name === key);
|
|
916
|
-
if (field && !((_a2 = field.api) == null ? void 0 : _a2.readOnly)
|
|
934
|
+
if (field && !((_a2 = field.api) == null ? void 0 : _a2.readOnly)) {
|
|
917
935
|
const columnName = `"${key}"`;
|
|
918
936
|
if (field.type === "relation") {
|
|
919
937
|
let relationId = null;
|
|
@@ -1044,7 +1062,7 @@ async function handleGenericUpdate(request, { params }) {
|
|
|
1044
1062
|
}
|
|
1045
1063
|
}
|
|
1046
1064
|
async function handleGenericDelete(request, { params }) {
|
|
1047
|
-
var _a;
|
|
1065
|
+
var _a, _b;
|
|
1048
1066
|
try {
|
|
1049
1067
|
const { id } = await params;
|
|
1050
1068
|
const resolution = await resolveEntityFromUrl(request.nextUrl.pathname);
|
|
@@ -1092,11 +1110,23 @@ async function handleGenericDelete(request, { params }) {
|
|
|
1092
1110
|
whereConditions.push(`"userId" = $${paramIndex++}`);
|
|
1093
1111
|
deleteParams.push(authResult.user.id);
|
|
1094
1112
|
}
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1113
|
+
let deleteQuery;
|
|
1114
|
+
if ((_b = entityConfig.table) == null ? void 0 : _b.softDelete) {
|
|
1115
|
+
whereConditions.push(`"deletedAt" IS NULL`);
|
|
1116
|
+
deleteQuery = `
|
|
1117
|
+
UPDATE "${tableName}"
|
|
1118
|
+
SET "deletedAt" = NOW(), "deletedBy" = $${paramIndex++}
|
|
1119
|
+
WHERE ${whereConditions.join(" AND ")}
|
|
1120
|
+
RETURNING id
|
|
1121
|
+
`;
|
|
1122
|
+
deleteParams.push(authResult.user.id);
|
|
1123
|
+
} else {
|
|
1124
|
+
deleteQuery = `
|
|
1125
|
+
DELETE FROM "${tableName}"
|
|
1126
|
+
WHERE ${whereConditions.join(" AND ")}
|
|
1127
|
+
RETURNING id
|
|
1128
|
+
`;
|
|
1129
|
+
}
|
|
1100
1130
|
const result = await mutateWithRLS(deleteQuery, deleteParams, authResult.user.id);
|
|
1101
1131
|
if (!result.rows || result.rows.length === 0) {
|
|
1102
1132
|
const response2 = createApiError("Item not found", 404);
|