Files
speckle-server/packages/server/modules/serverinvites/services/management.ts
T
Kristaps Fabians Geikins 069f64afc9 feat(fe1 & fe2): guest role (#1768)
* feat: user guest role switching in FE1

* removed stream create buttons

* fe1 done

* fe1 - specifying role in invite dialogs

* fe1 - bulk invites

* WIP FE2 changes

* fe1: allow role select condition fixes

* xtra limitations on createForOnboarding

* more invite creation validations

* no longer able to set guest as project owner in invite

* preparations for server role select in invite dialog

* team management dialog done

* server invite dialog updated

* hiding invite dialog

* fixed mocks
2023-08-24 09:30:09 +02:00

61 lines
2.0 KiB
TypeScript

import { Roles } from '@speckle/shared'
import {
MutationStreamInviteUseArgs,
ProjectInviteCreateInput,
ProjectInviteUseInput,
StreamInviteCreateInput
} from '@/modules/core/graph/generated/graphql'
import { InviteCreateValidationError } from '@/modules/serverinvites/errors'
import {
buildUserTarget,
ResourceTargets
} from '@/modules/serverinvites/helpers/inviteHelper'
import { createAndSendInvite } from '@/modules/serverinvites/services/inviteCreationService'
import { has } from 'lodash'
import { finalizeStreamInvite } from '@/modules/serverinvites/services/inviteProcessingService'
type FullProjectInviteCreateInput = ProjectInviteCreateInput & { projectId: string }
const isStreamInviteCreateInput = (
i: StreamInviteCreateInput | FullProjectInviteCreateInput
): i is StreamInviteCreateInput => has(i, 'streamId')
export async function createStreamInviteAndNotify(
input: StreamInviteCreateInput | FullProjectInviteCreateInput,
inviterId: string
) {
const { email, userId, role } = input
if (!email && !userId) {
throw new InviteCreateValidationError('Either email or userId must be specified')
}
const target = userId ? buildUserTarget(userId) : (email as string)
await createAndSendInvite({
target,
inviterId,
resourceTarget: ResourceTargets.Streams,
resourceId: isStreamInviteCreateInput(input) ? input.streamId : input.projectId,
role: role || Roles.Stream.Contributor,
message: isStreamInviteCreateInput(input) ? input.message || undefined : undefined,
serverRole: input.serverRole || undefined
})
}
const isStreamInviteUseArgs = (
i: MutationStreamInviteUseArgs | ProjectInviteUseInput
): i is MutationStreamInviteUseArgs => has(i, 'streamId')
export async function useStreamInviteAndNotify(
input: MutationStreamInviteUseArgs | ProjectInviteUseInput,
userId: string
) {
const { accept, token } = input
await finalizeStreamInvite(
accept,
isStreamInviteUseArgs(input) ? input.streamId : input.projectId,
token,
userId
)
}