Merge pull request #3787 from specklesystems/alessandro/web-2359-dismiss-joinable-workspace

feat(workspaces): dismiss workspace mutation
This commit is contained in:
Alessandro Magionami
2025-01-14 11:18:20 +01:00
committed by GitHub
11 changed files with 231 additions and 2 deletions
@@ -151,6 +151,14 @@ type WorkspaceMutations {
invites: WorkspaceInviteMutations!
projects: WorkspaceProjectMutations! @hasServerRole(role: SERVER_USER)
updateCreationState(input: WorkspaceCreationStateInput!): Boolean!
"""
Dismiss a workspace from the discoverable list, behind the scene a join request is created with the status "dismissed"
"""
dismiss(input: WorkspaceDismissInput!): Boolean! @hasServerRole(role: SERVER_USER)
}
input WorkspaceDismissInput {
workspaceId: ID!
}
input WorkspaceCreationStateInput {
@@ -4307,6 +4307,10 @@ export type WorkspaceCreationStateInput = {
workspaceId: Scalars['ID']['input'];
};
export type WorkspaceDismissInput = {
workspaceId: Scalars['ID']['input'];
};
export type WorkspaceDomain = {
__typename?: 'WorkspaceDomain';
domain: Scalars['String']['output'];
@@ -4400,6 +4404,7 @@ export type WorkspaceMutations = {
delete: Scalars['Boolean']['output'];
deleteDomain: Workspace;
deleteSsoProvider: Scalars['Boolean']['output'];
dismiss: Scalars['Boolean']['output'];
invites: WorkspaceInviteMutations;
join: Workspace;
leave: Scalars['Boolean']['output'];
@@ -4437,6 +4442,11 @@ export type WorkspaceMutationsDeleteSsoProviderArgs = {
};
export type WorkspaceMutationsDismissArgs = {
input: WorkspaceDismissInput;
};
export type WorkspaceMutationsJoinArgs = {
input: JoinWorkspaceInput;
};
@@ -4972,6 +4982,7 @@ export type ResolversTypes = {
WorkspaceCreateInput: WorkspaceCreateInput;
WorkspaceCreationState: ResolverTypeWrapper<WorkspaceCreationState>;
WorkspaceCreationStateInput: WorkspaceCreationStateInput;
WorkspaceDismissInput: WorkspaceDismissInput;
WorkspaceDomain: ResolverTypeWrapper<WorkspaceDomain>;
WorkspaceDomainDeleteInput: WorkspaceDomainDeleteInput;
WorkspaceFeatureName: WorkspaceFeatureName;
@@ -5244,6 +5255,7 @@ export type ResolversParentTypes = {
WorkspaceCreateInput: WorkspaceCreateInput;
WorkspaceCreationState: WorkspaceCreationState;
WorkspaceCreationStateInput: WorkspaceCreationStateInput;
WorkspaceDismissInput: WorkspaceDismissInput;
WorkspaceDomain: WorkspaceDomain;
WorkspaceDomainDeleteInput: WorkspaceDomainDeleteInput;
WorkspaceInviteCreateInput: WorkspaceInviteCreateInput;
@@ -6779,6 +6791,7 @@ export type WorkspaceMutationsResolvers<ContextType = GraphQLContext, ParentType
delete?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType, RequireFields<WorkspaceMutationsDeleteArgs, 'workspaceId'>>;
deleteDomain?: Resolver<ResolversTypes['Workspace'], ParentType, ContextType, RequireFields<WorkspaceMutationsDeleteDomainArgs, 'input'>>;
deleteSsoProvider?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType, RequireFields<WorkspaceMutationsDeleteSsoProviderArgs, 'workspaceId'>>;
dismiss?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType, RequireFields<WorkspaceMutationsDismissArgs, 'input'>>;
invites?: Resolver<ResolversTypes['WorkspaceInviteMutations'], ParentType, ContextType>;
join?: Resolver<ResolversTypes['Workspace'], ParentType, ContextType, RequireFields<WorkspaceMutationsJoinArgs, 'input'>>;
leave?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType, RequireFields<WorkspaceMutationsLeaveArgs, 'id'>>;
@@ -4288,6 +4288,10 @@ export type WorkspaceCreationStateInput = {
workspaceId: Scalars['ID']['input'];
};
export type WorkspaceDismissInput = {
workspaceId: Scalars['ID']['input'];
};
export type WorkspaceDomain = {
__typename?: 'WorkspaceDomain';
domain: Scalars['String']['output'];
@@ -4381,6 +4385,7 @@ export type WorkspaceMutations = {
delete: Scalars['Boolean']['output'];
deleteDomain: Workspace;
deleteSsoProvider: Scalars['Boolean']['output'];
dismiss: Scalars['Boolean']['output'];
invites: WorkspaceInviteMutations;
join: Workspace;
leave: Scalars['Boolean']['output'];
@@ -4418,6 +4423,11 @@ export type WorkspaceMutationsDeleteSsoProviderArgs = {
};
export type WorkspaceMutationsDismissArgs = {
input: WorkspaceDismissInput;
};
export type WorkspaceMutationsJoinArgs = {
input: JoinWorkspaceInput;
};
@@ -4,6 +4,8 @@ import {
Workspace,
WorkspaceAcl,
WorkspaceDomain,
WorkspaceJoinRequest,
WorkspaceJoinRequestStatus,
WorkspaceRegionAssignment,
WorkspaceWithDomains,
WorkspaceWithOptionalRole
@@ -308,3 +310,9 @@ export type GetWorkspaceCreationState = (params: {
export type UpsertWorkspaceCreationState = (params: {
workspaceCreationState: WorkspaceCreationState
}) => Promise<void>
export type UpdateWorkspaceJoinRequestStatus = (params: {
workspaceId: string
userId: string
status: WorkspaceJoinRequestStatus
}) => Promise<Pick<WorkspaceJoinRequest, 'workspaceId' | 'userId'> | undefined>
@@ -203,6 +203,8 @@ import { Knex } from 'knex'
import { getPaginatedItemsFactory } from '@/modules/shared/services/paginatedItems'
import { InvalidWorkspacePlanStatus } from '@/modules/gatekeeper/errors/billing'
import { BadRequestError } from '@/modules/shared/errors'
import { dismissWorkspaceJoinRequestFactory } from '@/modules/workspaces/services/workspaceJoinRequests'
import { updateWorkspaceJoinRequestStatusFactory } from '@/modules/workspaces/repositories/workspaceJoinRequests'
const eventBus = getEventBus()
const getServerInfo = getServerInfoFactory({ db })
@@ -774,7 +776,15 @@ export = FF_WORKSPACES_MODULE_ENABLED
return true
},
invites: () => ({}),
projects: () => ({})
projects: () => ({}),
dismiss: async (_parent, args, ctx) => {
return await dismissWorkspaceJoinRequestFactory({
getWorkspace: getWorkspaceFactory({ db }),
updateWorkspaceJoinRequestStatus: updateWorkspaceJoinRequestStatusFactory({
db
})
})({ userId: ctx.userId!, workspaceId: args.input.workspaceId })
}
},
WorkspaceInviteMutations: {
resend: async (_parent, args, ctx) => {
@@ -0,0 +1,21 @@
import { UpdateWorkspaceJoinRequestStatus } from '@/modules/workspaces/domain/operations'
import { WorkspaceJoinRequest } from '@/modules/workspacesCore/domain/types'
import { WorkspaceJoinRequests } from '@/modules/workspacesCore/helpers/db'
import { Knex } from 'knex'
const tables = {
workspaceJoinRequests: (db: Knex) =>
db<WorkspaceJoinRequest>(WorkspaceJoinRequests.name)
}
export const updateWorkspaceJoinRequestStatusFactory =
({ db }: { db: Knex }): UpdateWorkspaceJoinRequestStatus =>
async ({ workspaceId, userId, status }) => {
const [request] = await tables
.workspaceJoinRequests(db)
.insert({ workspaceId, userId, status })
.onConflict(['workspaceId', 'userId'])
.merge(['status'])
.returning('*')
return request
}
@@ -0,0 +1,26 @@
import {
GetWorkspace,
UpdateWorkspaceJoinRequestStatus
} from '@/modules/workspaces/domain/operations'
import { WorkspaceNotFoundError } from '@/modules/workspaces/errors/workspace'
export const dismissWorkspaceJoinRequestFactory =
({
getWorkspace,
updateWorkspaceJoinRequestStatus
}: {
getWorkspace: GetWorkspace
updateWorkspaceJoinRequestStatus: UpdateWorkspaceJoinRequestStatus
}) =>
async ({ userId, workspaceId }: { userId: string; workspaceId: string }) => {
const workspace = await getWorkspace({ workspaceId })
if (!workspace) {
throw new WorkspaceNotFoundError()
}
await updateWorkspaceJoinRequestStatus({
userId,
workspaceId,
status: 'dismissed'
})
return true
}
@@ -315,3 +315,11 @@ export const onWorkspaceUpdatedSubscription = gql`
${basicWorkspaceFragment}
`
export const dismissWorkspaceMutation = gql`
mutation dismissWorkspace($input: WorkspaceDismissInput!) {
workspaceMutations {
dismiss(input: $input)
}
}
`
@@ -0,0 +1,74 @@
import { db } from '@/db/knex'
import { createRandomString } from '@/modules/core/helpers/testHelpers'
import { getFeatureFlags } from '@/modules/shared/helpers/envHelper'
import { WorkspaceNotFoundError } from '@/modules/workspaces/errors/workspace'
import { updateWorkspaceJoinRequestStatusFactory } from '@/modules/workspaces/repositories/workspaceJoinRequests'
import { getWorkspaceFactory } from '@/modules/workspaces/repositories/workspaces'
import { dismissWorkspaceJoinRequestFactory } from '@/modules/workspaces/services/workspaceJoinRequests'
import {
BasicTestWorkspace,
createTestWorkspace
} from '@/modules/workspaces/tests/helpers/creation'
import { WorkspaceJoinRequests } from '@/modules/workspacesCore/helpers/db'
import { expectToThrow } from '@/test/assertionHelper'
import { BasicTestUser, createTestUser } from '@/test/authHelper'
import { Roles } from '@speckle/shared'
import { expect } from 'chai'
import cryptoRandomString from 'crypto-random-string'
const { FF_WORKSPACES_MODULE_ENABLED } = getFeatureFlags()
;(FF_WORKSPACES_MODULE_ENABLED ? describe : describe.skip)(
'workspaceJoinRequests services',
() => {
describe('dismissWorkspaceJoinRequestFactory, returns a function that ', () => {
it('throws an error if the workspace does not exists', async () => {
const err = await expectToThrow(() =>
dismissWorkspaceJoinRequestFactory({
getWorkspace: getWorkspaceFactory({ db }),
updateWorkspaceJoinRequestStatus: updateWorkspaceJoinRequestStatusFactory({
db
})
})({ workspaceId: createRandomString(), userId: createRandomString() })
)
expect(err.message).to.equal(WorkspaceNotFoundError.defaultMessage)
})
it('creates the request with the dismissed status', async () => {
const user: BasicTestUser = {
id: '',
name: 'John Speckle',
email: 'john-speckle@example.org',
role: Roles.Server.Admin,
verified: true
}
await createTestUser(user)
const workspace: BasicTestWorkspace = {
id: '',
slug: '',
ownerId: '',
name: cryptoRandomString({ length: 6 }),
description: cryptoRandomString({ length: 12 })
}
await createTestWorkspace(workspace, user)
expect(
await dismissWorkspaceJoinRequestFactory({
getWorkspace: getWorkspaceFactory({ db }),
updateWorkspaceJoinRequestStatus: updateWorkspaceJoinRequestStatusFactory({
db
})
})({ workspaceId: workspace.id, userId: user.id })
).to.equal(true)
expect(
await db(WorkspaceJoinRequests.name)
.where({ workspaceId: workspace.id, userId: user.id })
.select('status')
.first()
).to.deep.equal({ status: 'dismissed' })
})
})
}
)
@@ -26,7 +26,8 @@ import {
GetWorkspaceWithProjectsDocument,
AddWorkspaceDomainDocument,
DeleteWorkspaceDomainDocument,
CreateWorkspaceProjectDocument
CreateWorkspaceProjectDocument,
DismissWorkspaceDocument
} from '@/test/graphql/generated/graphql'
import { beforeEachContext } from '@/test/hooks'
import { AllScopes } from '@/modules/core/helpers/mainConstants'
@@ -47,6 +48,7 @@ import {
} from '@/modules/core/helpers/testHelpers'
import { getWorkspaceFactory } from '@/modules/workspaces/repositories/workspaces'
import { grantStreamPermissionsFactory } from '@/modules/core/repositories/streams'
import { WorkspaceNotFoundError } from '@/modules/workspaces/errors/workspace'
const grantStreamPermissions = grantStreamPermissionsFactory({ db })
@@ -834,6 +836,37 @@ describe('Workspaces GQL CRUD', () => {
expect(resC).to.haveGraphQLErrors('Provided default project role is invalid')
})
})
describe('mutation workspaceMutations.dismiss', () => {
it('should return an error if workspace does not exists', async () => {
const res = await apollo.execute(DismissWorkspaceDocument, {
input: {
workspaceId: cryptoRandomString({ length: 6 })
}
})
expect(res).to.haveGraphQLErrors(WorkspaceNotFoundError.defaultMessage)
})
it('should dismiss a workspace', async () => {
const workspace: BasicTestWorkspace = {
id: '',
slug: '',
ownerId: '',
name: cryptoRandomString({ length: 6 }),
description: cryptoRandomString({ length: 12 })
}
await createTestWorkspace(workspace, testAdminUser)
const dismissRes = await apollo.execute(DismissWorkspaceDocument, {
input: {
workspaceId: workspace.id
}
})
expect(dismissRes).to.not.haveGraphQLErrors()
expect(dismissRes?.data?.workspaceMutations.dismiss).to.equal(true)
})
})
describe('mutation activeUserMutations.userWorkspaceMutations', () => {
describe('leave', () => {
it('allows the active user to leave a workspace', async () => {
@@ -4289,6 +4289,10 @@ export type WorkspaceCreationStateInput = {
workspaceId: Scalars['ID']['input'];
};
export type WorkspaceDismissInput = {
workspaceId: Scalars['ID']['input'];
};
export type WorkspaceDomain = {
__typename?: 'WorkspaceDomain';
domain: Scalars['String']['output'];
@@ -4382,6 +4386,7 @@ export type WorkspaceMutations = {
delete: Scalars['Boolean']['output'];
deleteDomain: Workspace;
deleteSsoProvider: Scalars['Boolean']['output'];
dismiss: Scalars['Boolean']['output'];
invites: WorkspaceInviteMutations;
join: Workspace;
leave: Scalars['Boolean']['output'];
@@ -4419,6 +4424,11 @@ export type WorkspaceMutationsDeleteSsoProviderArgs = {
};
export type WorkspaceMutationsDismissArgs = {
input: WorkspaceDismissInput;
};
export type WorkspaceMutationsJoinArgs = {
input: JoinWorkspaceInput;
};
@@ -4871,6 +4881,13 @@ export type OnWorkspaceUpdatedSubscriptionVariables = Exact<{
export type OnWorkspaceUpdatedSubscription = { __typename?: 'Subscription', workspaceUpdated: { __typename?: 'WorkspaceUpdatedMessage', id: string, workspace: { __typename?: 'Workspace', id: string, name: string, slug: string, updatedAt: string, createdAt: string, role?: string | null, readOnly: boolean, team: { __typename?: 'WorkspaceCollaboratorCollection', totalCount: number, items: Array<{ __typename?: 'WorkspaceCollaborator', id: string, role: string, user: { __typename?: 'LimitedUser', id: string, name: string } }> }, invitedTeam?: Array<{ __typename?: 'PendingWorkspaceCollaborator', id: string, inviteId: string, workspaceId: string, workspaceName: string, title: string, role: string, token?: string | null, invitedBy: { __typename?: 'LimitedUser', id: string, name: string }, user?: { __typename?: 'LimitedUser', id: string, name: string } | null }> | null } } };
export type DismissWorkspaceMutationVariables = Exact<{
input: WorkspaceDismissInput;
}>;
export type DismissWorkspaceMutation = { __typename?: 'Mutation', workspaceMutations: { __typename?: 'WorkspaceMutations', dismiss: boolean } };
export type BasicStreamAccessRequestFieldsFragment = { __typename?: 'StreamAccessRequest', id: string, requesterId: string, streamId: string, createdAt: string, requester: { __typename?: 'LimitedUser', id: string, name: string } };
export type CreateStreamAccessRequestMutationVariables = Exact<{
@@ -5574,6 +5591,7 @@ export const GetWorkspaceDefaultRegionDocument = {"kind":"Document","definitions
export const SetWorkspaceDefaultRegionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SetWorkspaceDefaultRegion"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"regionKey"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"workspaceMutations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"setDefaultRegion"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"regionKey"},"value":{"kind":"Variable","name":{"kind":"Name","value":"regionKey"}}},{"kind":"Argument","name":{"kind":"Name","value":"workspaceId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"defaultRegion"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"key"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}}]} as unknown as DocumentNode<SetWorkspaceDefaultRegionMutation, SetWorkspaceDefaultRegionMutationVariables>;
export const OnWorkspaceProjectsUpdatedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"OnWorkspaceProjectsUpdated"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workspaceSlug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"workspaceProjectsUpdated"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"workspaceId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}}},{"kind":"Argument","name":{"kind":"Name","value":"workspaceSlug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workspaceSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"projectId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"project"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]} as unknown as DocumentNode<OnWorkspaceProjectsUpdatedSubscription, OnWorkspaceProjectsUpdatedSubscriptionVariables>;
export const OnWorkspaceUpdatedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"OnWorkspaceUpdated"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workspaceSlug"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"workspaceUpdated"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"workspaceId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}}},{"kind":"Argument","name":{"kind":"Name","value":"workspaceSlug"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workspaceSlug"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"workspace"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicWorkspace"}},{"kind":"Field","name":{"kind":"Name","value":"team"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"invitedTeam"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicPendingWorkspaceCollaborator"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicWorkspace"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Workspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"readOnly"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicPendingWorkspaceCollaborator"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PendingWorkspaceCollaborator"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"inviteId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceName"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"invitedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"token"}}]}}]} as unknown as DocumentNode<OnWorkspaceUpdatedSubscription, OnWorkspaceUpdatedSubscriptionVariables>;
export const DismissWorkspaceDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"dismissWorkspace"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceDismissInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"workspaceMutations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"dismiss"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}]}]}}]}}]} as unknown as DocumentNode<DismissWorkspaceMutation, DismissWorkspaceMutationVariables>;
export const CreateStreamAccessRequestDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateStreamAccessRequest"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamAccessRequestCreate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"streamId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamAccessRequest"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"requester"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"requesterId"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode<CreateStreamAccessRequestMutation, CreateStreamAccessRequestMutationVariables>;
export const GetStreamAccessRequestDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetStreamAccessRequest"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamAccessRequest"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"streamId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamAccessRequest"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"requester"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"requesterId"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode<GetStreamAccessRequestQuery, GetStreamAccessRequestQueryVariables>;
export const GetFullStreamAccessRequestDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFullStreamAccessRequest"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamAccessRequest"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"streamId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"}},{"kind":"Field","name":{"kind":"Name","value":"stream"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamAccessRequest"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"requester"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"requesterId"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode<GetFullStreamAccessRequestQuery, GetFullStreamAccessRequestQueryVariables>;