@baasix/baasix 0.1.34 → 0.1.35

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 (110) hide show
  1. package/dist/app/404/index.html +1 -1
  2. package/dist/app/404.html +1 -1
  3. package/dist/app/_next/static/chunks/app/(authenticated)/settings/schema/page-9895483765b6dfd7.js +1 -0
  4. package/dist/app/_next/static/css/{d08072df3a043c8d.css → 8572ff91c3639efa.css} +1 -1
  5. package/dist/app/activity-log/all-activity/index.html +1 -1
  6. package/dist/app/activity-log/all-activity/index.txt +1 -1
  7. package/dist/app/activity-log/email-log/index.html +1 -1
  8. package/dist/app/activity-log/email-log/index.txt +1 -1
  9. package/dist/app/activity-log/index.html +1 -1
  10. package/dist/app/activity-log/index.txt +1 -1
  11. package/dist/app/activity-log/notifications/index.html +1 -1
  12. package/dist/app/activity-log/notifications/index.txt +1 -1
  13. package/dist/app/activity-log/sessions/index.html +1 -1
  14. package/dist/app/activity-log/sessions/index.txt +1 -1
  15. package/dist/app/activity-log/workflow-executions/index.html +1 -1
  16. package/dist/app/activity-log/workflow-executions/index.txt +1 -1
  17. package/dist/app/activity-log/workflow-logs/index.html +1 -1
  18. package/dist/app/activity-log/workflow-logs/index.txt +1 -1
  19. package/dist/app/change-password/index.html +1 -1
  20. package/dist/app/change-password/index.txt +1 -1
  21. package/dist/app/dashboard/index.html +1 -1
  22. package/dist/app/dashboard/index.txt +1 -1
  23. package/dist/app/data-browser/index.html +1 -1
  24. package/dist/app/data-browser/index.txt +1 -1
  25. package/dist/app/file-manager/index.html +1 -1
  26. package/dist/app/file-manager/index.txt +1 -1
  27. package/dist/app/forgot-password/index.html +1 -1
  28. package/dist/app/forgot-password/index.txt +1 -1
  29. package/dist/app/index.html +1 -1
  30. package/dist/app/index.txt +1 -1
  31. package/dist/app/login/index.html +1 -1
  32. package/dist/app/login/index.txt +1 -1
  33. package/dist/app/register/index.html +1 -1
  34. package/dist/app/register/index.txt +1 -1
  35. package/dist/app/settings/migrations/index.html +1 -1
  36. package/dist/app/settings/migrations/index.txt +1 -1
  37. package/dist/app/settings/permissions/index.html +1 -1
  38. package/dist/app/settings/permissions/index.txt +1 -1
  39. package/dist/app/settings/project/index.html +1 -1
  40. package/dist/app/settings/project/index.txt +1 -1
  41. package/dist/app/settings/roles/index.html +1 -1
  42. package/dist/app/settings/roles/index.txt +1 -1
  43. package/dist/app/settings/schema/index.html +1 -1
  44. package/dist/app/settings/schema/index.txt +2 -2
  45. package/dist/app/settings/tasks/index.html +1 -1
  46. package/dist/app/settings/tasks/index.txt +1 -1
  47. package/dist/app/settings/templates/edit/index.html +1 -1
  48. package/dist/app/settings/templates/edit/index.txt +1 -1
  49. package/dist/app/settings/templates/index.html +1 -1
  50. package/dist/app/settings/templates/index.txt +1 -1
  51. package/dist/app/settings/tenants/index.html +1 -1
  52. package/dist/app/settings/tenants/index.txt +1 -1
  53. package/dist/app/users/index.html +1 -1
  54. package/dist/app/users/index.txt +1 -1
  55. package/dist/app/users/invites/index.html +1 -1
  56. package/dist/app/users/invites/index.txt +1 -1
  57. package/dist/app/users/list/index.html +1 -1
  58. package/dist/app/users/list/index.txt +1 -1
  59. package/dist/app/users/preferences/index.html +1 -1
  60. package/dist/app/users/preferences/index.txt +1 -1
  61. package/dist/app/users/user-roles/index.html +1 -1
  62. package/dist/app/users/user-roles/index.txt +1 -1
  63. package/dist/app/workflows/detail/index.html +1 -1
  64. package/dist/app/workflows/detail/index.txt +1 -1
  65. package/dist/app/workflows/edit/index.html +1 -1
  66. package/dist/app/workflows/edit/index.txt +1 -1
  67. package/dist/app/workflows/execution/index.html +1 -1
  68. package/dist/app/workflows/execution/index.txt +1 -1
  69. package/dist/app/workflows/index.html +1 -1
  70. package/dist/app/workflows/index.txt +1 -1
  71. package/dist/app.d.ts.map +1 -1
  72. package/dist/app.js +10 -13
  73. package/dist/app.js.map +1 -1
  74. package/dist/auth/services/session.d.ts.map +1 -1
  75. package/dist/auth/services/session.js +7 -0
  76. package/dist/auth/services/session.js.map +1 -1
  77. package/dist/routes/permission.route.d.ts.map +1 -1
  78. package/dist/routes/permission.route.js +15 -22
  79. package/dist/routes/permission.route.js.map +1 -1
  80. package/dist/services/ItemsService.d.ts +4 -0
  81. package/dist/services/ItemsService.d.ts.map +1 -1
  82. package/dist/services/ItemsService.js +79 -126
  83. package/dist/services/ItemsService.js.map +1 -1
  84. package/dist/services/PermissionService.d.ts +9 -0
  85. package/dist/services/PermissionService.d.ts.map +1 -1
  86. package/dist/services/PermissionService.js +33 -0
  87. package/dist/services/PermissionService.js.map +1 -1
  88. package/dist/utils/auth.d.ts.map +1 -1
  89. package/dist/utils/auth.js +71 -53
  90. package/dist/utils/auth.js.map +1 -1
  91. package/dist/utils/cache.d.ts.map +1 -1
  92. package/dist/utils/cache.js +15 -1
  93. package/dist/utils/cache.js.map +1 -1
  94. package/dist/utils/common.d.ts.map +1 -1
  95. package/dist/utils/common.js +1 -0
  96. package/dist/utils/common.js.map +1 -1
  97. package/dist/utils/relationUtils.d.ts +17 -2
  98. package/dist/utils/relationUtils.d.ts.map +1 -1
  99. package/dist/utils/relationUtils.js +58 -103
  100. package/dist/utils/relationUtils.js.map +1 -1
  101. package/dist/utils/schemaManager.d.ts.map +1 -1
  102. package/dist/utils/schemaManager.js +11 -19
  103. package/dist/utils/schemaManager.js.map +1 -1
  104. package/dist/utils/tenantUtils.d.ts.map +1 -1
  105. package/dist/utils/tenantUtils.js +9 -9
  106. package/dist/utils/tenantUtils.js.map +1 -1
  107. package/package.json +1 -1
  108. package/dist/app/_next/static/chunks/app/(authenticated)/settings/schema/page-b1a7b169b91a3795.js +0 -1
  109. /package/dist/app/_next/static/{ZXCWkgHobz-KLrAXDB5-p → VKxfWxC1_CBTppJYBGEwt}/_buildManifest.js +0 -0
  110. /package/dist/app/_next/static/{ZXCWkgHobz-KLrAXDB5-p → VKxfWxC1_CBTppJYBGEwt}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../baasix/auth/services/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../baasix/auth/services/session.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"permission.route.d.ts","sourceRoot":"","sources":["../../baasix/routes/permission.route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;;;mBAOlB,OAAO;;AAmLtC,wBAGE"}
1
+ {"version":3,"file":"permission.route.d.ts","sourceRoot":"","sources":["../../baasix/routes/permission.route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;;;mBAOlB,OAAO;;AAyKtC,wBAGE"}
@@ -45,14 +45,11 @@ const registerEndpoint = (app) => {
45
45
  const newPermission = await itemsService.readOne(newId);
46
46
  // Reload permissions
47
47
  await permissionService.loadPermissions();
48
- // Invalidate auth cache for the affected role
49
- if (data.role_Id) {
50
- await invalidateAuthCache(data.role_Id);
51
- }
52
- // Invalidate cache for the affected collection
53
- if (data.collection) {
54
- await invalidateCollectionCache(data.collection);
55
- }
48
+ // Invalidate auth and collection caches in parallel
49
+ await Promise.all([
50
+ data.role_Id ? invalidateAuthCache(data.role_Id) : Promise.resolve(),
51
+ data.collection ? invalidateCollectionCache(data.collection) : Promise.resolve(),
52
+ ]);
56
53
  res.status(201).json(newPermission);
57
54
  }
58
55
  catch (error) {
@@ -82,9 +79,6 @@ const registerEndpoint = (app) => {
82
79
  if (data.role_Id) {
83
80
  rolesToInvalidate.add(data.role_Id);
84
81
  }
85
- for (const roleId of rolesToInvalidate) {
86
- await invalidateAuthCache(roleId);
87
- }
88
82
  // Invalidate cache for both old and new collections (if collection changed)
89
83
  const collectionsToInvalidate = new Set();
90
84
  if (oldPermission.collection) {
@@ -93,9 +87,11 @@ const registerEndpoint = (app) => {
93
87
  if (data.collection) {
94
88
  collectionsToInvalidate.add(data.collection);
95
89
  }
96
- for (const collection of collectionsToInvalidate) {
97
- await invalidateCollectionCache(collection);
98
- }
90
+ // Batch all invalidations in parallel
91
+ await Promise.all([
92
+ ...Array.from(rolesToInvalidate).map(roleId => invalidateAuthCache(roleId)),
93
+ ...Array.from(collectionsToInvalidate).map(collection => invalidateCollectionCache(collection)),
94
+ ]);
99
95
  res.json(updatedPermission);
100
96
  }
101
97
  catch (error) {
@@ -114,14 +110,11 @@ const registerEndpoint = (app) => {
114
110
  await itemsService.deleteOne(id);
115
111
  // Reload permissions
116
112
  await permissionService.loadPermissions();
117
- // Invalidate auth cache for the affected role
118
- if (permission.role_Id) {
119
- await invalidateAuthCache(permission.role_Id);
120
- }
121
- // Invalidate cache for the affected collection
122
- if (permission.collection) {
123
- await invalidateCollectionCache(permission.collection);
124
- }
113
+ // Invalidate auth and collection caches in parallel
114
+ await Promise.all([
115
+ permission.role_Id ? invalidateAuthCache(permission.role_Id) : Promise.resolve(),
116
+ permission.collection ? invalidateCollectionCache(permission.collection) : Promise.resolve(),
117
+ ]);
125
118
  res.status(204).end();
126
119
  }
127
120
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"permission.route.js","sourceRoot":"","sources":["../../baasix/routes/permission.route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permission.route.js","sourceRoot":"","sources":["../../baasix/routes/permission.route.ts"],"names":[],"mappings":"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"}
@@ -63,6 +63,10 @@ export declare class ItemsService {
63
63
  * Check if user is administrator
64
64
  */
65
65
  private isAdministrator;
66
+ /**
67
+ * Deduplicate joins by alias — removes duplicate join entries in-place.
68
+ */
69
+ private deduplicateJoins;
66
70
  /**
67
71
  * Apply tenant context to query filter
68
72
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ItemsService.d.ts","sourceRoot":"","sources":["../../baasix/services/ItemsService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ItemsService.d.ts","sourceRoot":"","sources":["../../baasix/services/ItemsService.ts"],"names":[],"mappings":"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"}
@@ -72,16 +72,17 @@ export class ItemsService {
72
72
  * Extract all table names involved in a query (including relations)
73
73
  * This is CRITICAL for proper cache invalidation
74
74
  */
75
- extractAllTables(includes) {
76
- const tables = [this.collection]; // Always include main table
75
+ extractAllTables(includes, collection) {
76
+ const coll = collection || this.collection;
77
+ const tables = [coll];
77
78
  if (!includes || includes.length === 0) {
78
79
  return tables;
79
80
  }
80
81
  for (const include of includes) {
81
82
  // Get the relation definition
82
- const relationDef = schemaManager.getRelation(this.collection, include.relation);
83
+ const relationDef = schemaManager.getRelation(coll, include.relation);
83
84
  if (!relationDef) {
84
- console.warn(`[ItemsService.extractAllTables] Relation not found: ${this.collection}.${include.relation}`);
85
+ console.warn(`[ItemsService.extractAllTables] Relation not found: ${coll}.${include.relation}`);
85
86
  continue;
86
87
  }
87
88
  // Add the related table
@@ -96,20 +97,10 @@ export class ItemsService {
96
97
  if (relationDef.type === 'M2A' && relationDef.relatedCollections) {
97
98
  tables.push(...relationDef.relatedCollections);
98
99
  }
99
- // Recursively handle nested includes
100
- if (include.include && include.include.length > 0) {
101
- // Create a temporary service for the related collection to extract its tables
102
- try {
103
- const relatedService = new ItemsService(relationDef.relatedCollection, {
104
- accountability: this.accountability,
105
- tenant: this.tenant
106
- });
107
- const nestedTables = relatedService.extractAllTables(include.include);
108
- tables.push(...nestedTables);
109
- }
110
- catch (error) {
111
- console.warn(`[ItemsService.extractAllTables] Error extracting nested tables:`, error);
112
- }
100
+ // Recursively handle nested includes using schema manager directly (no ItemsService instantiation)
101
+ if (include.include && include.include.length > 0 && relationDef.relatedCollection) {
102
+ const nestedTables = this.extractAllTables(include.include, relationDef.relatedCollection);
103
+ tables.push(...nestedTables);
113
104
  }
114
105
  }
115
106
  // Return unique table names only
@@ -292,6 +283,21 @@ export class ItemsService {
292
283
  }
293
284
  return false;
294
285
  }
286
+ /**
287
+ * Deduplicate joins by alias — removes duplicate join entries in-place.
288
+ */
289
+ deduplicateJoins(joins) {
290
+ const seen = new Set();
291
+ const unique = [];
292
+ for (const join of joins) {
293
+ if (!seen.has(join.alias)) {
294
+ seen.add(join.alias);
295
+ unique.push(join);
296
+ }
297
+ }
298
+ joins.length = 0;
299
+ joins.push(...unique);
300
+ }
295
301
  /**
296
302
  * Apply tenant context to query filter
297
303
  */
@@ -442,24 +448,22 @@ export class ItemsService {
442
448
  [this.primaryKey]: idFilter
443
449
  });
444
450
  }
445
- // Apply permission filters
451
+ // Apply permission filters (single combined lookup instead of 3 separate calls)
446
452
  let permissionRelConditions = {};
453
+ let permAllowedFields = null;
447
454
  if (!bypassPermissions && !isAdmin) {
448
455
  const roleId = this.getRoleId();
449
- // First, check if user has permission to perform this action
450
- const hasAccess = await permissionService.canAccess(roleId, this.collection, action);
451
- if (!hasAccess) {
456
+ const { canAccess, filter: permFilter, allowedFields } = await permissionService.getFullPermissionData(roleId, this.collection, action, this.accountability);
457
+ if (!canAccess) {
452
458
  throw new APIError(`You don't have permission to ${action} items in '${this.collection}'`, 403);
453
459
  }
454
- // Then apply permission filters
455
- const permissionFilter = await permissionService.getFilter(roleId, this.collection, action, this.accountability);
456
- if (permissionFilter.conditions) {
457
- filter = combineFilters(filter, permissionFilter.conditions);
460
+ if (permFilter.conditions) {
461
+ filter = combineFilters(filter, permFilter.conditions);
458
462
  }
459
- // Capture relConditions from permissions to apply later
460
- if (permissionFilter.relConditions && Object.keys(permissionFilter.relConditions).length > 0) {
461
- permissionRelConditions = permissionFilter.relConditions;
463
+ if (permFilter.relConditions && Object.keys(permFilter.relConditions).length > 0) {
464
+ permissionRelConditions = permFilter.relConditions;
462
465
  }
466
+ permAllowedFields = allowedFields;
463
467
  }
464
468
  // Apply tenant context
465
469
  filter = await this.enforceTenantContextFilter(filter);
@@ -490,19 +494,10 @@ export class ItemsService {
490
494
  // Note: query.include is not used - includes are derived from fields parameter
491
495
  const allIncludes = [...processedIncludes];
492
496
  // Apply field-level permission filtering for relational fields
493
- // This ensures that when a user requests "relation.*", only the fields they have
494
- // permission to access are included, not all fields from the related table
495
- if (!bypassPermissions && !isAdmin) {
496
- const roleId = this.getRoleId();
497
- if (roleId) {
498
- const allowedFields = await permissionService.getAllowedFields(roleId, this.collection, action);
499
- // Filter relational field attributes based on allowed fields
500
- if (allowedFields) {
501
- this.filterIncludesByAllowedFields(allIncludes, allowedFields);
502
- // Also filter the processedIncludes (which is the same reference used later)
503
- this.filterIncludesByAllowedFields(processedIncludes, allowedFields);
504
- }
505
- }
497
+ // Uses allowedFields from the combined permission lookup above
498
+ if (!bypassPermissions && !isAdmin && permAllowedFields) {
499
+ this.filterIncludesByAllowedFields(allIncludes, permAllowedFields);
500
+ this.filterIncludesByAllowedFields(processedIncludes, permAllowedFields);
506
501
  }
507
502
  // Merge permission relConditions with query relConditions
508
503
  // Permission relConditions take precedence (they are security constraints)
@@ -607,17 +602,7 @@ export class ItemsService {
607
602
  });
608
603
  console.log(`[ItemsService.buildQuery] WHERE clause generated:`, whereClause ? 'yes' : 'no (undefined)');
609
604
  // Deduplicate filter joins by alias (multiple conditions on same relation create duplicates)
610
- const uniqueFilterJoins = [];
611
- const seenAliases = new Set();
612
- for (const join of filterJoins) {
613
- if (!seenAliases.has(join.alias)) {
614
- seenAliases.add(join.alias);
615
- uniqueFilterJoins.push(join);
616
- }
617
- }
618
- // Replace filterJoins with deduplicated version
619
- filterJoins.length = 0;
620
- filterJoins.push(...uniqueFilterJoins);
605
+ this.deduplicateJoins(filterJoins);
621
606
  // Log filter joins if any were created
622
607
  if (filterJoins.length > 0) {
623
608
  console.log(`[ItemsService] Filter generated ${filterJoins.length} joins for relation paths`);
@@ -744,11 +729,12 @@ export class ItemsService {
744
729
  /**
745
730
  * Apply field-level permissions
746
731
  */
747
- async applyFieldPermissions(data, action, isAdmin) {
732
+ async applyFieldPermissions(data, action, isAdmin, prefetchedAllowedFields) {
748
733
  if (isAdmin)
749
734
  return;
750
- const roleId = this.getRoleId();
751
- const allowedFields = await permissionService.getAllowedFields(roleId, this.collection, action);
735
+ const allowedFields = prefetchedAllowedFields !== undefined
736
+ ? prefetchedAllowedFields
737
+ : await permissionService.getAllowedFields(this.getRoleId(), this.collection, action);
752
738
  if (!allowedFields || allowedFields.length === 0) {
753
739
  throw new APIError(`You don't have permission to ${action} this item`, 403);
754
740
  }
@@ -1299,15 +1285,12 @@ export class ItemsService {
1299
1285
  let combinedFilter = filter;
1300
1286
  if (!bypassPermissions && !isAdmin) {
1301
1287
  const roleId = this.getRoleId();
1302
- // First, check if user has permission to read this collection
1303
- const hasAccess = await permissionService.canAccess(roleId, this.collection, 'read');
1304
- if (!hasAccess) {
1288
+ const { canAccess, filter: permFilter } = await permissionService.getFullPermissionData(roleId, this.collection, 'read', this.accountability);
1289
+ if (!canAccess) {
1305
1290
  throw new APIError(`You don't have permission to read items in '${this.collection}'`, 403);
1306
1291
  }
1307
- // Then apply permission filters
1308
- const permissionFilter = await permissionService.getFilter(roleId, this.collection, 'read', this.accountability);
1309
- if (permissionFilter.conditions) {
1310
- combinedFilter = combineFilters(combinedFilter, permissionFilter.conditions);
1292
+ if (permFilter.conditions) {
1293
+ combinedFilter = combineFilters(combinedFilter, permFilter.conditions);
1311
1294
  }
1312
1295
  }
1313
1296
  combinedFilter = await this.enforceTenantContextFilter(combinedFilter);
@@ -1321,16 +1304,7 @@ export class ItemsService {
1321
1304
  joins: filterJoins
1322
1305
  });
1323
1306
  // Deduplicate filter joins by alias
1324
- const uniqueFilterJoins = [];
1325
- const seenAliases = new Set();
1326
- for (const join of filterJoins) {
1327
- if (!seenAliases.has(join.alias)) {
1328
- seenAliases.add(join.alias);
1329
- uniqueFilterJoins.push(join);
1330
- }
1331
- }
1332
- filterJoins.length = 0;
1333
- filterJoins.push(...uniqueFilterJoins);
1307
+ this.deduplicateJoins(filterJoins);
1334
1308
  // Resolve all relation paths to joins
1335
1309
  const allJoins = [...filterJoins];
1336
1310
  const pathToAliasMap = new Map(); // Maps relation path to final table alias
@@ -1602,16 +1576,19 @@ export class ItemsService {
1602
1576
  modifiedData.password = await argon2.hash(modifiedData.password);
1603
1577
  }
1604
1578
  const isAdmin = await this.isAdministrator();
1605
- // Check permission - explicit action-level check
1579
+ // Check permission and apply field permissions (single cache lookup)
1606
1580
  if (!options.bypassPermissions && !isAdmin) {
1607
1581
  const roleId = this.getRoleId();
1608
- const hasPermission = await permissionService.canAccess(roleId, this.collection, 'create');
1609
- if (!hasPermission) {
1582
+ const { canAccess, allowedFields } = await permissionService.getFullPermissionData(roleId, this.collection, 'create', this.accountability);
1583
+ if (!canAccess) {
1610
1584
  throw new APIError("You don't have permission to create items in '" + this.collection + "'", 403);
1611
1585
  }
1586
+ await this.applyFieldPermissions(modifiedData, 'create', isAdmin, allowedFields);
1587
+ const defaultValues = await this.getDefaultValues('create');
1588
+ modifiedData = { ...defaultValues, ...modifiedData };
1612
1589
  }
1613
- // Apply field permissions
1614
- if (!options.bypassPermissions) {
1590
+ else if (!options.bypassPermissions) {
1591
+ // Admin — skip canAccess check but still apply defaults
1615
1592
  await this.applyFieldPermissions(modifiedData, 'create', isAdmin);
1616
1593
  const defaultValues = await this.getDefaultValues('create');
1617
1594
  modifiedData = { ...defaultValues, ...modifiedData };
@@ -1772,11 +1749,11 @@ export class ItemsService {
1772
1749
  // These may have external side effects (emails, third-party calls)
1773
1750
  // that cannot be rolled back, so we only execute them after commit
1774
1751
  for (const result of results) {
1775
- // Create audit log
1776
- await this.createAuditLog('create', result.itemId, {
1752
+ // Create audit log (fire-and-forget — non-blocking)
1753
+ this.createAuditLog('create', result.itemId, {
1777
1754
  before: null,
1778
1755
  after: result.document
1779
- }, options.transaction);
1756
+ }, options.transaction).catch(() => { });
1780
1757
  // Execute after-create hooks
1781
1758
  await hooksManager.executeHooks(this.collection, 'items.create.after', this.accountability, { data: result.modifiedData, document: result.document, transaction: options.transaction });
1782
1759
  }
@@ -1822,16 +1799,19 @@ export class ItemsService {
1822
1799
  modifiedData.password = await argon2.hash(modifiedData.password);
1823
1800
  }
1824
1801
  const isAdmin = await this.isAdministrator();
1825
- // Check permission - explicit action-level check
1802
+ // Check permission and apply field permissions (single cache lookup)
1826
1803
  if (!options.bypassPermissions && !isAdmin) {
1827
1804
  const roleId = this.getRoleId();
1828
- const hasPermission = await permissionService.canAccess(roleId, this.collection, 'update');
1829
- if (!hasPermission) {
1805
+ const { canAccess, allowedFields } = await permissionService.getFullPermissionData(roleId, this.collection, 'update', this.accountability);
1806
+ if (!canAccess) {
1830
1807
  throw new APIError("You don't have permission to update items in '" + this.collection + "'", 403);
1831
1808
  }
1809
+ await this.applyFieldPermissions(modifiedData, 'update', isAdmin, allowedFields);
1810
+ const defaultValues = await this.getDefaultValues('update');
1811
+ modifiedData = { ...defaultValues, ...modifiedData };
1832
1812
  }
1833
- // Apply field permissions
1834
- if (!options.bypassPermissions) {
1813
+ else if (!options.bypassPermissions) {
1814
+ // Admin — skip canAccess check but still apply defaults
1835
1815
  await this.applyFieldPermissions(modifiedData, 'update', isAdmin);
1836
1816
  const defaultValues = await this.getDefaultValues('update');
1837
1817
  modifiedData = { ...defaultValues, ...modifiedData };
@@ -1874,16 +1854,7 @@ export class ItemsService {
1874
1854
  joins: filterJoins
1875
1855
  });
1876
1856
  // Deduplicate filter joins by alias
1877
- const uniqueJoins = [];
1878
- const seenAliases = new Set();
1879
- for (const join of filterJoins) {
1880
- if (!seenAliases.has(join.alias)) {
1881
- seenAliases.add(join.alias);
1882
- uniqueJoins.push(join);
1883
- }
1884
- }
1885
- filterJoins.length = 0;
1886
- filterJoins.push(...uniqueJoins);
1857
+ this.deduplicateJoins(filterJoins);
1887
1858
  let existingItems;
1888
1859
  if (filterJoins.length > 0) {
1889
1860
  // Use transaction for reads to prevent deadlocks and ensure consistency
@@ -1957,13 +1928,8 @@ export class ItemsService {
1957
1928
  updatedItem = updateResult[0];
1958
1929
  }
1959
1930
  else {
1960
- // Use transaction for reads to prevent deadlocks and ensure consistency
1961
- const updatedItems = await transaction
1962
- .select()
1963
- .from(this.table)
1964
- .where(eq(this.getPrimaryKeyColumn(), parsedId))
1965
- .limit(1);
1966
- updatedItem = updatedItems[0];
1931
+ // No main table fields changed reuse the already-fetched record
1932
+ updatedItem = existingItem;
1967
1933
  }
1968
1934
  // Process deferred HasMany relations
1969
1935
  for (const { association, associationInfo, value } of deferredHasMany) {
@@ -1977,13 +1943,9 @@ export class ItemsService {
1977
1943
  for (const { association, associationInfo, value } of deferredM2A) {
1978
1944
  await handleM2ARelationship(updatedItem, association, associationInfo, value, this, ItemsService, transaction);
1979
1945
  }
1980
- // Get final item for hooks - use transaction for consistency
1981
- const finalItems = await transaction
1982
- .select()
1983
- .from(this.table)
1984
- .where(eq(this.getPrimaryKeyColumn(), parsedId))
1985
- .limit(1);
1986
- const finalItem = finalItems[0];
1946
+ // Deferred relations (HasMany, M2M, M2A) only modify other tables, not the main record.
1947
+ // The updatedItem from .returning() (or existingItem fallback) is already the final state.
1948
+ const finalItem = updatedItem;
1987
1949
  // Collect related tables for cache invalidation
1988
1950
  const relatedTables = [];
1989
1951
  if (deferredM2M.length > 0) {
@@ -2054,11 +2016,11 @@ export class ItemsService {
2054
2016
  }
2055
2017
  // Phase 3: Execute after hooks AFTER successful commit
2056
2018
  for (const result of results) {
2057
- // Create audit log
2058
- await this.createAuditLog('update', result.parsedId, {
2019
+ // Create audit log (fire-and-forget — non-blocking)
2020
+ this.createAuditLog('update', result.parsedId, {
2059
2021
  before: result.previousDocument,
2060
2022
  after: result.finalDocument
2061
- }, options.transaction);
2023
+ }, options.transaction).catch(() => { });
2062
2024
  // Execute after-update hooks
2063
2025
  await hooksManager.executeHooks(this.collection, 'items.update.after', this.accountability, {
2064
2026
  id: result.parsedId,
@@ -2182,16 +2144,7 @@ export class ItemsService {
2182
2144
  joins: filterJoins
2183
2145
  });
2184
2146
  // Deduplicate filter joins by alias
2185
- const uniqueJoins = [];
2186
- const seenAliases = new Set();
2187
- for (const join of filterJoins) {
2188
- if (!seenAliases.has(join.alias)) {
2189
- seenAliases.add(join.alias);
2190
- uniqueJoins.push(join);
2191
- }
2192
- }
2193
- filterJoins.length = 0;
2194
- filterJoins.push(...uniqueJoins);
2147
+ this.deduplicateJoins(filterJoins);
2195
2148
  let existingItems;
2196
2149
  if (filterJoins.length > 0) {
2197
2150
  // Use transaction for reads to prevent deadlocks and ensure consistency
@@ -2282,11 +2235,11 @@ export class ItemsService {
2282
2235
  }
2283
2236
  // Phase 3: Execute after hooks AFTER successful commit
2284
2237
  for (const result of results) {
2285
- // Create audit log
2286
- await this.createAuditLog('delete', result.parsedId, {
2238
+ // Create audit log (fire-and-forget — non-blocking)
2239
+ this.createAuditLog('delete', result.parsedId, {
2287
2240
  before: result.document,
2288
2241
  after: null
2289
- }, options.transaction);
2242
+ }, options.transaction).catch(() => { });
2290
2243
  // Execute after-delete hooks
2291
2244
  await hooksManager.executeHooks(this.collection, 'items.delete.after', this.accountability, { id: result.parsedId, document: result.document, transaction: options.transaction });
2292
2245
  }