Spaces:
Paused
Paused
| import type { AgentAdapterType, JoinRequest } from "@paperclipai/shared"; | |
| import { api } from "./client"; | |
| type InviteSummary = { | |
| id: string; | |
| companyId: string | null; | |
| companyName?: 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<string, unknown> | null; | |
| }; | |
| type AgentJoinRequestAccepted = JoinRequest & { | |
| claimSecret: string; | |
| claimApiKeyPath: string; | |
| onboarding?: Record<string, unknown>; | |
| 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 CliAuthChallengeStatus = { | |
| id: string; | |
| status: "pending" | "approved" | "cancelled" | "expired"; | |
| command: string; | |
| clientName: string | null; | |
| requestedAccess: "board" | "instance_admin_required"; | |
| requestedCompanyId: string | null; | |
| requestedCompanyName: string | null; | |
| approvedAt: string | null; | |
| cancelledAt: string | null; | |
| expiresAt: string; | |
| approvedByUser: { id: string; name: string; email: string } | null; | |
| requiresSignIn: boolean; | |
| canApprove: boolean; | |
| currentUserId: string | null; | |
| }; | |
| type CompanyInviteCreated = { | |
| id: string; | |
| token: string; | |
| inviteUrl: string; | |
| expiresAt: string; | |
| allowedJoinTypes: "human" | "agent" | "both"; | |
| companyName?: string | null; | |
| onboardingTextPath?: string; | |
| onboardingTextUrl?: string; | |
| inviteMessage?: string | null; | |
| }; | |
| export const accessApi = { | |
| createCompanyInvite: ( | |
| companyId: string, | |
| input: { | |
| allowedJoinTypes?: "human" | "agent" | "both"; | |
| defaultsPayload?: Record<string, unknown> | null; | |
| agentMessage?: string | null; | |
| } = {}, | |
| ) => | |
| api.post<CompanyInviteCreated>(`/companies/${companyId}/invites`, input), | |
| createOpenClawInvitePrompt: ( | |
| companyId: string, | |
| input: { | |
| agentMessage?: string | null; | |
| } = {}, | |
| ) => | |
| api.post<CompanyInviteCreated>( | |
| `/companies/${companyId}/openclaw/invite-prompt`, | |
| input, | |
| ), | |
| getInvite: (token: string) => api.get<InviteSummary>(`/invites/${token}`), | |
| getInviteOnboarding: (token: string) => | |
| api.get<InviteOnboardingManifest>(`/invites/${token}/onboarding`), | |
| acceptInvite: (token: string, input: AcceptInviteInput) => | |
| api.post<AgentJoinRequestAccepted | JoinRequest | { bootstrapAccepted: true; userId: string }>( | |
| `/invites/${token}/accept`, | |
| input, | |
| ), | |
| listJoinRequests: (companyId: string, status: "pending_approval" | "approved" | "rejected" = "pending_approval") => | |
| api.get<JoinRequest[]>(`/companies/${companyId}/join-requests?status=${status}`), | |
| approveJoinRequest: (companyId: string, requestId: string) => | |
| api.post<JoinRequest>(`/companies/${companyId}/join-requests/${requestId}/approve`, {}), | |
| rejectJoinRequest: (companyId: string, requestId: string) => | |
| api.post<JoinRequest>(`/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<BoardClaimStatus>(`/board-claim/${token}?code=${encodeURIComponent(code)}`), | |
| claimBoard: (token: string, code: string) => | |
| api.post<{ claimed: true; userId: string }>(`/board-claim/${token}/claim`, { code }), | |
| getCliAuthChallenge: (id: string, token: string) => | |
| api.get<CliAuthChallengeStatus>(`/cli-auth/challenges/${id}?token=${encodeURIComponent(token)}`), | |
| approveCliAuthChallenge: (id: string, token: string) => | |
| api.post<{ approved: boolean; status: string; userId: string; keyId: string | null; expiresAt: string }>( | |
| `/cli-auth/challenges/${id}/approve`, | |
| { token }, | |
| ), | |
| cancelCliAuthChallenge: (id: string, token: string) => | |
| api.post<{ cancelled: boolean; status: string }>(`/cli-auth/challenges/${id}/cancel`, { token }), | |
| }; | |