Files
simstudioai--sim/apps/sim/lib/api/contracts/v1/admin/workspaces.ts
T
wehub-resource-sync d25d482dc2
CI / Migrate Dev DB (push) Has been skipped
CI / Detect Version (push) Has been cancelled
CI / Migrate DB (push) Has been cancelled
CI / Build Dev ECR (./docker/app.Dockerfile, ECR_APP) (push) Has been cancelled
CI / Build Dev ECR (./docker/db.Dockerfile, ECR_MIGRATIONS) (push) Has been cancelled
CI / Build Dev ECR (./docker/pii.Dockerfile, ECR_PII) (push) Has been cancelled
CI / Build Dev ECR (./docker/realtime.Dockerfile, ECR_REALTIME) (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
CI / Build AMD64 (./docker/app.Dockerfile, ECR_APP, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build AMD64 (./docker/db.Dockerfile, ECR_MIGRATIONS, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (./docker/pii.Dockerfile, ECR_PII, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (./docker/realtime.Dockerfile, ECR_REALTIME, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/app.Dockerfile, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/db.Dockerfile, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/pii.Dockerfile, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/realtime.Dockerfile, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Test and Build (push) Has been cancelled
Publish CLI Package / publish-npm (push) Has been cancelled
Publish Python SDK / publish-pypi (push) Has been cancelled
Publish TypeScript SDK / publish-npm (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:20:55 +08:00

333 lines
11 KiB
TypeScript

import { z } from 'zod'
import { type ContractJsonResponse, defineRouteContract } from '@/lib/api/contracts/types'
import {
adminV1ExportFormatQuerySchema,
adminV1IdParamsSchema,
adminV1ListResponseSchema,
adminV1PaginationQuerySchema,
adminV1QueryStringSchema,
adminV1SingleResponseSchema,
lastQueryValue,
} from '@/lib/api/contracts/v1/admin/shared'
import {
adminV1ImportResultSchema,
adminV1WorkflowSchema,
} from '@/lib/api/contracts/v1/admin/workflows'
import { workspacePermissionSchema } from '@/lib/api/contracts/workspaces'
export const adminV1WorkspaceMemberParamsSchema = adminV1IdParamsSchema.extend({
memberId: z.string().min(1),
})
export const adminV1DeleteWorkspaceMemberQuerySchema = z.object({
userId: z.preprocess(
lastQueryValue,
z
.string({ error: 'userId query parameter is required' })
.min(1, { error: 'userId query parameter is required' })
),
})
export const adminV1WorkspaceImportQuerySchema = z.object({
createFolders: z
.preprocess(lastQueryValue, z.enum(['true', 'false']).catch('true'))
.transform((value) => value !== 'false'),
rootFolderName: adminV1QueryStringSchema,
})
export const adminV1WorkspaceSchema = z.object({
id: z.string(),
name: z.string(),
ownerId: z.string(),
createdAt: z.string(),
updatedAt: z.string(),
})
export const adminV1WorkspaceDetailSchema = adminV1WorkspaceSchema.extend({
workflowCount: z.number(),
folderCount: z.number(),
})
export const adminV1FolderSchema = z.object({
id: z.string(),
name: z.string(),
parentId: z.string().nullable(),
color: z.string().nullable(),
sortOrder: z.number(),
createdAt: z.string(),
updatedAt: z.string(),
})
export const adminV1WorkspaceMemberSchema = z.object({
id: z.string(),
workspaceId: z.string(),
userId: z.string(),
permissions: workspacePermissionSchema,
createdAt: z.string(),
updatedAt: z.string(),
userName: z.string(),
userEmail: z.string(),
userImage: z.string().nullable(),
})
export const adminV1WorkspaceImportResponseSchema = z.object({
imported: z.number(),
failed: z.number(),
results: z.array(adminV1ImportResultSchema),
})
export const adminV1WorkspaceMemberBodySchema = z.object({
userId: z.string({ error: 'userId is required' }).min(1, { error: 'userId is required' }),
permissions: workspacePermissionSchema.refine((value) => value !== null, {
error: 'permissions must be "admin", "write", or "read"',
}),
})
export const adminV1UpdateWorkspaceMemberBodySchema = z.object({
permissions: workspacePermissionSchema.refine((value) => value !== null, {
error: 'permissions must be "admin", "write", or "read"',
}),
})
export const adminV1WorkspaceImportBodySchema = z.object({
workflows: z.array(
z.object({
content: z.union([z.string(), z.record(z.string(), z.unknown())]),
name: z.string().optional(),
folderPath: z.array(z.string()).optional(),
}),
{ error: 'Invalid JSON body. Expected { workflows: [...] }' }
),
})
const adminV1DeleteWorkspaceWorkflowsResultSchema = z.object({
success: z.literal(true),
deleted: z.number(),
})
const adminV1WorkspaceMemberMutationResultSchema = adminV1WorkspaceMemberSchema.extend({
action: z.enum(['created', 'updated', 'already_member']),
})
const adminV1DeleteWorkspaceMemberResultSchema = z.object({
removed: z.literal(true),
userId: z.string(),
workspaceId: z.string(),
})
const adminV1RemoveWorkspaceMemberResultSchema = z.object({
removed: z.literal(true),
memberId: z.string(),
userId: z.string(),
workspaceId: z.string(),
})
export const adminV1ListWorkspacesContract = defineRouteContract({
method: 'GET',
path: '/api/v1/admin/workspaces',
query: adminV1PaginationQuerySchema,
response: {
mode: 'json',
schema: adminV1ListResponseSchema(adminV1WorkspaceSchema),
},
})
export const adminV1GetWorkspaceContract = defineRouteContract({
method: 'GET',
path: '/api/v1/admin/workspaces/[id]',
params: adminV1IdParamsSchema,
response: {
mode: 'json',
schema: adminV1SingleResponseSchema(adminV1WorkspaceDetailSchema),
},
})
export const adminV1ListWorkspaceWorkflowsContract = defineRouteContract({
method: 'GET',
path: '/api/v1/admin/workspaces/[id]/workflows',
params: adminV1IdParamsSchema,
query: adminV1PaginationQuerySchema,
response: {
mode: 'json',
schema: adminV1ListResponseSchema(adminV1WorkflowSchema),
},
})
export const adminV1DeleteWorkspaceWorkflowsContract = defineRouteContract({
method: 'DELETE',
path: '/api/v1/admin/workspaces/[id]/workflows',
params: adminV1IdParamsSchema,
response: {
mode: 'json',
schema: adminV1DeleteWorkspaceWorkflowsResultSchema,
},
})
export const adminV1ListWorkspaceFoldersContract = defineRouteContract({
method: 'GET',
path: '/api/v1/admin/workspaces/[id]/folders',
params: adminV1IdParamsSchema,
query: adminV1PaginationQuerySchema,
response: {
mode: 'json',
schema: adminV1ListResponseSchema(adminV1FolderSchema),
},
})
export const adminV1ExportWorkspaceContract = defineRouteContract({
method: 'GET',
path: '/api/v1/admin/workspaces/[id]/export',
params: adminV1IdParamsSchema,
query: adminV1ExportFormatQuerySchema,
response: {
mode: 'binary',
},
})
export const adminV1ImportWorkspaceContract = defineRouteContract({
method: 'POST',
path: '/api/v1/admin/workspaces/[id]/import',
params: adminV1IdParamsSchema,
query: adminV1WorkspaceImportQuerySchema,
response: {
mode: 'json',
schema: adminV1WorkspaceImportResponseSchema,
},
})
export const adminV1ListWorkspaceMembersContract = defineRouteContract({
method: 'GET',
path: '/api/v1/admin/workspaces/[id]/members',
params: adminV1IdParamsSchema,
query: adminV1PaginationQuerySchema,
response: {
mode: 'json',
schema: adminV1ListResponseSchema(adminV1WorkspaceMemberSchema),
},
})
export const adminV1CreateWorkspaceMemberContract = defineRouteContract({
method: 'POST',
path: '/api/v1/admin/workspaces/[id]/members',
params: adminV1IdParamsSchema,
body: adminV1WorkspaceMemberBodySchema,
response: {
mode: 'json',
schema: adminV1SingleResponseSchema(adminV1WorkspaceMemberMutationResultSchema),
},
})
export const adminV1DeleteWorkspaceMemberContract = defineRouteContract({
method: 'DELETE',
path: '/api/v1/admin/workspaces/[id]/members',
params: adminV1IdParamsSchema,
query: adminV1DeleteWorkspaceMemberQuerySchema,
response: {
mode: 'json',
schema: adminV1SingleResponseSchema(adminV1DeleteWorkspaceMemberResultSchema),
},
})
export const adminV1GetWorkspaceMemberContract = defineRouteContract({
method: 'GET',
path: '/api/v1/admin/workspaces/[id]/members/[memberId]',
params: adminV1WorkspaceMemberParamsSchema,
response: {
mode: 'json',
schema: adminV1SingleResponseSchema(adminV1WorkspaceMemberSchema),
},
})
export const adminV1UpdateWorkspaceMemberContract = defineRouteContract({
method: 'PATCH',
path: '/api/v1/admin/workspaces/[id]/members/[memberId]',
params: adminV1WorkspaceMemberParamsSchema,
body: adminV1UpdateWorkspaceMemberBodySchema,
response: {
mode: 'json',
schema: adminV1SingleResponseSchema(adminV1WorkspaceMemberSchema),
},
})
export const adminV1RemoveWorkspaceMemberContract = defineRouteContract({
method: 'DELETE',
path: '/api/v1/admin/workspaces/[id]/members/[memberId]',
params: adminV1WorkspaceMemberParamsSchema,
response: {
mode: 'json',
schema: adminV1SingleResponseSchema(adminV1RemoveWorkspaceMemberResultSchema),
},
})
export const adminV1ExportFolderContract = defineRouteContract({
method: 'GET',
path: '/api/v1/admin/folders/[id]/export',
params: adminV1IdParamsSchema,
query: adminV1ExportFormatQuerySchema,
response: {
mode: 'binary',
},
})
export type AdminV1WorkspaceMemberParamsInput = z.input<typeof adminV1WorkspaceMemberParamsSchema>
export type AdminV1WorkspaceMemberParams = z.output<typeof adminV1WorkspaceMemberParamsSchema>
export type AdminV1DeleteWorkspaceMemberQueryInput = z.input<
typeof adminV1DeleteWorkspaceMemberQuerySchema
>
export type AdminV1DeleteWorkspaceMemberQuery = z.output<
typeof adminV1DeleteWorkspaceMemberQuerySchema
>
export type AdminV1WorkspaceImportQueryInput = z.input<typeof adminV1WorkspaceImportQuerySchema>
export type AdminV1WorkspaceImportQuery = z.output<typeof adminV1WorkspaceImportQuerySchema>
export type AdminV1WorkspaceMemberBodyInput = z.input<typeof adminV1WorkspaceMemberBodySchema>
export type AdminV1WorkspaceMemberBody = z.output<typeof adminV1WorkspaceMemberBodySchema>
export type AdminV1UpdateWorkspaceMemberBodyInput = z.input<
typeof adminV1UpdateWorkspaceMemberBodySchema
>
export type AdminV1UpdateWorkspaceMemberBody = z.output<
typeof adminV1UpdateWorkspaceMemberBodySchema
>
export type AdminV1WorkspaceImportBodyInput = z.input<typeof adminV1WorkspaceImportBodySchema>
export type AdminV1WorkspaceImportBody = z.output<typeof adminV1WorkspaceImportBodySchema>
export type AdminV1Workspace = z.output<typeof adminV1WorkspaceSchema>
export type AdminV1WorkspaceDetail = z.output<typeof adminV1WorkspaceDetailSchema>
export type AdminV1Folder = z.output<typeof adminV1FolderSchema>
export type AdminV1WorkspaceMember = z.output<typeof adminV1WorkspaceMemberSchema>
export type AdminV1WorkspaceImportResponseBody = z.output<
typeof adminV1WorkspaceImportResponseSchema
>
export type AdminV1ListWorkspacesResponse = ContractJsonResponse<
typeof adminV1ListWorkspacesContract
>
export type AdminV1GetWorkspaceResponse = ContractJsonResponse<typeof adminV1GetWorkspaceContract>
export type AdminV1ListWorkspaceWorkflowsResponse = ContractJsonResponse<
typeof adminV1ListWorkspaceWorkflowsContract
>
export type AdminV1DeleteWorkspaceWorkflowsResponse = ContractJsonResponse<
typeof adminV1DeleteWorkspaceWorkflowsContract
>
export type AdminV1ListWorkspaceFoldersResponse = ContractJsonResponse<
typeof adminV1ListWorkspaceFoldersContract
>
export type AdminV1ImportWorkspaceResponse = ContractJsonResponse<
typeof adminV1ImportWorkspaceContract
>
export type AdminV1ListWorkspaceMembersResponse = ContractJsonResponse<
typeof adminV1ListWorkspaceMembersContract
>
export type AdminV1CreateWorkspaceMemberResponse = ContractJsonResponse<
typeof adminV1CreateWorkspaceMemberContract
>
export type AdminV1DeleteWorkspaceMemberResponse = ContractJsonResponse<
typeof adminV1DeleteWorkspaceMemberContract
>
export type AdminV1GetWorkspaceMemberResponse = ContractJsonResponse<
typeof adminV1GetWorkspaceMemberContract
>
export type AdminV1UpdateWorkspaceMemberResponse = ContractJsonResponse<
typeof adminV1UpdateWorkspaceMemberContract
>
export type AdminV1RemoveWorkspaceMemberResponse = ContractJsonResponse<
typeof adminV1RemoveWorkspaceMemberContract
>