import type { AgentAdapterType, JoinRequest } from "@paperclipai/shared"; import { api } from "./client"; type InviteSummary = { id: string; companyId: string | null; inviteType: "company_join" | "bootstrap_ceo"; allowedJoinTypes: "human" | "agent" | "both"; expiresAt: string; onboardingPath?: string; onboardingUrl?: string; onboardingTextPath?: string; onboardingTextUrl?: string; skillIndexPath?: string; skillIndexUrl?: string; inviteMessage?: string | null; }; type AcceptInviteInput = | { requestType: "human" } | { requestType: "agent"; agentName: string; adapterType?: AgentAdapterType; capabilities?: string | null; agentDefaultsPayload?: Record | null; }; type AgentJoinRequestAccepted = JoinRequest & { claimSecret: string; claimApiKeyPath: string; onboarding?: Record; diagnostics?: Array<{ code: string; level: "info" | "warn"; message: string; hint?: string; }>; }; type InviteOnboardingManifest = { invite: InviteSummary; onboarding: { inviteMessage?: string | null; connectivity?: { guidance?: string; connectionCandidates?: string[]; testResolutionEndpoint?: { method?: string; path?: string; url?: string; }; }; textInstructions?: { url?: string; }; }; }; type BoardClaimStatus = { status: "available" | "claimed" | "expired"; requiresSignIn: boolean; expiresAt: string | null; claimedByUserId: string | null; }; type CompanyInviteCreated = { id: string; token: string; inviteUrl: string; expiresAt: string; allowedJoinTypes: "human" | "agent" | "both"; onboardingTextPath?: string; onboardingTextUrl?: string; inviteMessage?: string | null; }; export const accessApi = { createCompanyInvite: ( companyId: string, input: { allowedJoinTypes?: "human" | "agent" | "both"; defaultsPayload?: Record | null; agentMessage?: string | null; } = {}, ) => api.post(`/companies/${companyId}/invites`, input), createOpenClawInvitePrompt: ( companyId: string, input: { agentMessage?: string | null; } = {}, ) => api.post( `/companies/${companyId}/openclaw/invite-prompt`, input, ), getInvite: (token: string) => api.get(`/invites/${token}`), getInviteOnboarding: (token: string) => api.get(`/invites/${token}/onboarding`), acceptInvite: (token: string, input: AcceptInviteInput) => api.post( `/invites/${token}/accept`, input, ), listJoinRequests: (companyId: string, status: "pending_approval" | "approved" | "rejected" = "pending_approval") => api.get(`/companies/${companyId}/join-requests?status=${status}`), approveJoinRequest: (companyId: string, requestId: string) => api.post(`/companies/${companyId}/join-requests/${requestId}/approve`, {}), rejectJoinRequest: (companyId: string, requestId: string) => api.post(`/companies/${companyId}/join-requests/${requestId}/reject`, {}), claimJoinRequestApiKey: (requestId: string, claimSecret: string) => api.post<{ keyId: string; token: string; agentId: string; createdAt: string }>( `/join-requests/${requestId}/claim-api-key`, { claimSecret }, ), getBoardClaimStatus: (token: string, code: string) => api.get(`/board-claim/${token}?code=${encodeURIComponent(code)}`), claimBoard: (token: string, code: string) => api.post<{ claimed: true; userId: string }>(`/board-claim/${token}/claim`, { code }), };