import { z } from "zod"; import { INVITE_JOIN_TYPES, JOIN_REQUEST_STATUSES, JOIN_REQUEST_TYPES, PERMISSION_KEYS, } from "../constants.js"; import { optionalAgentAdapterTypeSchema } from "../adapter-type.js"; export const createCompanyInviteSchema = z.object({ allowedJoinTypes: z.enum(INVITE_JOIN_TYPES).default("both"), defaultsPayload: z.record(z.string(), z.unknown()).optional().nullable(), agentMessage: z.string().max(4000).optional().nullable(), }); export type CreateCompanyInvite = z.infer; export const createOpenClawInvitePromptSchema = z.object({ agentMessage: z.string().max(4000).optional().nullable(), }); export type CreateOpenClawInvitePrompt = z.infer< typeof createOpenClawInvitePromptSchema >; export const acceptInviteSchema = z.object({ requestType: z.enum(JOIN_REQUEST_TYPES), agentName: z.string().min(1).max(120).optional(), adapterType: optionalAgentAdapterTypeSchema, capabilities: z.string().max(4000).optional().nullable(), agentDefaultsPayload: z.record(z.string(), z.unknown()).optional().nullable(), // OpenClaw join compatibility fields accepted at top level. responsesWebhookUrl: z.string().max(4000).optional().nullable(), responsesWebhookMethod: z.string().max(32).optional().nullable(), responsesWebhookHeaders: z.record(z.string(), z.unknown()).optional().nullable(), paperclipApiUrl: z.string().max(4000).optional().nullable(), webhookAuthHeader: z.string().max(4000).optional().nullable(), }); export type AcceptInvite = z.infer; export const listJoinRequestsQuerySchema = z.object({ status: z.enum(JOIN_REQUEST_STATUSES).optional(), requestType: z.enum(JOIN_REQUEST_TYPES).optional(), }); export type ListJoinRequestsQuery = z.infer; export const claimJoinRequestApiKeySchema = z.object({ claimSecret: z.string().min(16).max(256), }); export type ClaimJoinRequestApiKey = z.infer; export const boardCliAuthAccessLevelSchema = z.enum([ "board", "instance_admin_required", ]); export type BoardCliAuthAccessLevel = z.infer; export const createCliAuthChallengeSchema = z.object({ command: z.string().min(1).max(240), clientName: z.string().max(120).optional().nullable(), requestedAccess: boardCliAuthAccessLevelSchema.default("board"), requestedCompanyId: z.string().uuid().optional().nullable(), }); export type CreateCliAuthChallenge = z.infer; export const resolveCliAuthChallengeSchema = z.object({ token: z.string().min(16).max(256), }); export type ResolveCliAuthChallenge = z.infer; export const updateMemberPermissionsSchema = z.object({ grants: z.array( z.object({ permissionKey: z.enum(PERMISSION_KEYS), scope: z.record(z.string(), z.unknown()).optional().nullable(), }), ), }); export type UpdateMemberPermissions = z.infer; export const updateUserCompanyAccessSchema = z.object({ companyIds: z.array(z.string().uuid()).default([]), }); export type UpdateUserCompanyAccess = z.infer;