Files
speckle-server/packages/server/modules/workspaces/domain/logic.ts
T
Chuck Driesler 0f5c22329b Chuck/web 3465 auto join discoverable workspace setting (#4791)
* feat(workspaces): enable toggle for auto-join discoverable workspaces

* fix(workspaces): include auto-join flag on LimitedWorkspace

* chore(workspaces): gqlgen
2025-05-22 10:11:05 +01:00

56 lines
1.6 KiB
TypeScript

import { UserEmail } from '@/modules/core/domain/userEmails/types'
import { WorkspaceDomainsInvalidState } from '@/modules/workspaces/errors/workspace'
import {
LimitedWorkspace,
Workspace,
WorkspaceDomain
} from '@/modules/workspacesCore/domain/types'
import { Roles, WorkspaceRoles } from '@speckle/shared'
export const userEmailsCompliantWithWorkspaceDomains = ({
userEmails,
workspaceDomains
}: {
userEmails: UserEmail[]
workspaceDomains: WorkspaceDomain[]
}): boolean =>
anyEmailCompliantWithWorkspaceDomains({
emails: userEmails.filter((e) => e.verified).map((e) => e.email),
workspaceDomains
})
export const anyEmailCompliantWithWorkspaceDomains = ({
emails,
workspaceDomains
}: {
emails: string[]
workspaceDomains: WorkspaceDomain[]
}): boolean => {
const validWorkspaceDomains = workspaceDomains.filter((domain) => domain.verified)
// we must have min 1 domain to validate compliance
if (!validWorkspaceDomains.length) throw new WorkspaceDomainsInvalidState()
for (const email of emails) {
if (validWorkspaceDomains.some((domain) => email.endsWith(domain.domain)))
return true
}
return false
}
export const isWorkspaceRole = (role: string): role is WorkspaceRoles => {
const validRoles: string[] = Object.values(Roles.Workspace)
return validRoles.includes(role)
}
export const toLimitedWorkspace = (workspace: Workspace): LimitedWorkspace => {
return {
id: workspace.id,
slug: workspace.slug,
name: workspace.name,
description: workspace.description,
logo: workspace.logo,
discoverabilityAutoJoinEnabled: workspace.discoverabilityAutoJoinEnabled
}
}