Skip to content

Commit 14554d0

Browse files
committed
Merge bounded authority barrier and replay review fixes
2 parents d1443c8 + 9856595 commit 14554d0

4 files changed

Lines changed: 14 additions & 15 deletions

File tree

‎apps/sim/lib/projects/account-deletion.ts‎

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,8 @@ import { member, permissions, project, workspace } from '@sim/db/schema'
33
import { ORG_ADMIN_ROLES } from '@sim/platform-authz/workspace'
44
import { and, asc, eq, inArray, ne, or, sql } from 'drizzle-orm'
55
import type { DbOrTx, DbTransaction } from '@/lib/db/types'
6-
import {
7-
lockProjectBackfillWrites,
8-
lockProjects,
9-
ProjectConflictError,
10-
} from '@/lib/projects/membership'
6+
import { ProjectConflictError } from '@/lib/projects/errors'
7+
import { lockProjectBackfillWrites, lockProjects } from '@/lib/projects/membership'
118

129
/** Two indexed lookups; an `OR` around a membership subquery would scan every Project. */
1310
async function loadRelatedProjects(executor: DbOrTx, userId: string, doomedWorkspaceIds: string[]) {

‎apps/sim/lib/projects/errors.ts‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { OrchestrationError } from '@/lib/core/orchestration/types'
2+
3+
/** A Project lifecycle rule or lock refused the change; callers may map it to their own error. */
4+
export class ProjectConflictError extends OrchestrationError {
5+
constructor(message: string) {
6+
super('conflict', message)
7+
this.name = 'ProjectConflictError'
8+
}
9+
}

‎apps/sim/lib/projects/membership.ts‎

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { getPostgresErrorCode } from '@sim/utils/errors'
33
import { generateId } from '@sim/utils/id'
44
import { compareStrings, truncateAtCodePoint } from '@sim/utils/string'
55
import { and, asc, eq, inArray, isNull, notInArray, type SQL, sql } from 'drizzle-orm'
6-
import { OrchestrationError } from '@/lib/core/orchestration/types'
76
import {
87
acquireAdvisoryXactLock,
98
acquireAdvisoryXactLocks,
@@ -12,17 +11,10 @@ import {
1211
import { textArrayLiteral } from '@/lib/db/arrays'
1312
import type { DbTransaction } from '@/lib/db/types'
1413
import { acquirePermissionGroupOrgLock } from '@/lib/permission-groups/locks'
14+
import { ProjectConflictError } from '@/lib/projects/errors'
1515

1616
const PROJECT_LOCK_TIMEOUT_MS = 5_000
1717

18-
/** A Project lifecycle rule or lock refused the change; callers may map it to their own error. */
19-
export class ProjectConflictError extends OrchestrationError {
20-
constructor(message: string) {
21-
super('conflict', message)
22-
this.name = 'ProjectConflictError'
23-
}
24-
}
25-
2618
/**
2719
* Waits in `acquire` are bounded by {@link PROJECT_LOCK_TIMEOUT_MS} and a timeout or
2820
* deadlock becomes a retryable Project conflict. The caller's own `lock_timeout` is

‎apps/sim/lib/workspaces/admin-move.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ import type { DbOrTx } from '@/lib/db/types'
4141
import { getInvitationById, isInvitationExpired } from '@/lib/invitations/core'
4242
import { acquireInvitationMutationLocks } from '@/lib/invitations/locks'
4343
import { PENDING_INVITATION_UNIQUE_INDEX, sendInvitationEmail } from '@/lib/invitations/send'
44-
import { ProjectConflictError, transferWorkspaceProjects } from '@/lib/projects/membership'
44+
import { ProjectConflictError } from '@/lib/projects/errors'
45+
import { transferWorkspaceProjects } from '@/lib/projects/membership'
4546
import { invalidateWorkspaceTableLimitsCache } from '@/lib/table/billing'
4647
import { deleteCustomBlock } from '@/lib/workflows/custom-blocks/operations'
4748
import { MIGRATED_INVITATION_EMAIL_EVENT_TYPE } from '@/lib/workspaces/admin-move-event'

0 commit comments

Comments
 (0)