Skip to content

Commit 7f6a139

Browse files
committed
fix(chat): default access request list to pending
The settings tool parses list input before calling the reader, so an omitted status reached it as undefined and listed every status. The list schema now defaults status to pending, matching get; explicit statuses still apply.
1 parent 4147323 commit 7f6a139

3 files changed

Lines changed: 13 additions & 12 deletions

File tree

‎apps/sim/ee/access-requests/lib/application/copilot-review.integration.ts‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,9 @@ describe('organization Chat review of access requests', () => {
254254
expect(await readGroupConfig()).toMatchObject({ hideTablesTab: false, hideFilesTab: true })
255255
expect(await decidedEvents(requestIds.tables)).toHaveLength(1)
256256
await waitForAudit(requestIds.tables, 'permission_access_request.fulfilled')
257+
258+
const { result: pending } = await asAdmin('list', {})
259+
expect((pending.requests as { id: string }[]).map(({ id }) => id)).toEqual([requestIds.files])
257260
})
258261

259262
it("lets an admin's Chat deny a request with a reason, changing no policy", async () => {

‎apps/sim/lib/api/contracts/access-requests.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export const ACCESS_REQUEST_STATUSES = [
3030
'closed',
3131
] as const
3232

33-
export const ACCESS_REQUEST_PAGE_SIZE = 50
33+
const ACCESS_REQUEST_PAGE_SIZE = 50
3434
export const ACCESS_REQUEST_MAX_PAGE_SIZE = 100
3535

3636
const requestIdSchema = z

‎apps/sim/lib/mothership/tools/server/settings-access-requests.ts‎

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { z } from 'zod'
22
import {
3-
ACCESS_REQUEST_PAGE_SIZE,
3+
ACCESS_REQUEST_STATUSES,
44
accessRequestParamsSchema,
55
listOrganizationAccessRequestsQuerySchema,
66
} from '@/lib/api/contracts/access-requests'
@@ -19,15 +19,17 @@ import type { ResolveAccessRequestDecision } from '@/ee/access-requests/lib/type
1919

2020
const requestTarget = { requestId: accessRequestParamsSchema.shape.requestId }
2121
const [applyDecisionSchema, declineDecisionSchema] = v2ResolveAccessRequestBodySchema.options
22+
const listQuerySchema = listOrganizationAccessRequestsQuerySchema.extend({
23+
status: z
24+
.enum(ACCESS_REQUEST_STATUSES)
25+
.default('pending')
26+
.describe('Request status to list; defaults to pending.'),
27+
})
2228

2329
/** The first page of pending requests, or the page `query` selects. */
2430
export function readSettingsAccessRequests(
2531
context: SettingsContext,
26-
query: z.output<typeof listOrganizationAccessRequestsQuerySchema> = {
27-
status: 'pending',
28-
limit: ACCESS_REQUEST_PAGE_SIZE,
29-
offset: 0,
30-
}
32+
query: z.output<typeof listQuerySchema> = listQuerySchema.parse({})
3133
) {
3234
return listOrganizationAccessRequests.execute({
3335
principal: context.principal,
@@ -49,11 +51,7 @@ async function resolve(
4951

5052
/** Admin role, fingerprint freshness, grants, audit and the requester's notice stay in the use cases. */
5153
export const accessRequestSettingsActions = {
52-
list: settingsOperation(
53-
'read',
54-
listOrganizationAccessRequestsQuerySchema,
55-
readSettingsAccessRequests
56-
),
54+
list: settingsOperation('read', listQuerySchema, readSettingsAccessRequests),
5755
preview: settingsOperation('read', z.strictObject(requestTarget), (context, input) =>
5856
previewAccessRequest.execute({
5957
principal: context.principal,

0 commit comments

Comments
 (0)