import type { CompanySecret, CompanySecretUsageBinding, CompanySecretProviderConfig, SecretProviderConfigDiscoveryPreviewResult, RemoteSecretImportPreviewResult, RemoteSecretImportResult, SecretAccessEvent, SecretManagedMode, SecretProvider, SecretProviderConfigStatus, SecretProviderConfigHealthResponse, SecretProviderDescriptor, SecretStatus, } from "@paperclipai/shared"; import { api } from "./client"; export interface SecretUsageResponse { secretId: string; bindings: CompanySecretUsageBinding[]; } export interface CreateSecretInput { name: string; key?: string; provider?: SecretProvider; managedMode?: SecretManagedMode; value?: string | null; description?: string | null; externalRef?: string | null; providerVersionRef?: string | null; providerConfigId?: string | null; providerMetadata?: Record | null; } export interface SecretProviderHealthResponse { providers: Array<{ provider: SecretProvider; status: "ok" | "warn" | "error"; message: string; warnings?: string[]; backupGuidance?: string[]; details?: Record; }>; } export interface UpdateSecretInput { name?: string; key?: string; status?: SecretStatus; description?: string | null; externalRef?: string | null; providerMetadata?: Record | null; } export interface RotateSecretInput { value?: string | null; externalRef?: string | null; providerVersionRef?: string | null; providerConfigId?: string | null; } export interface CreateSecretProviderConfigInput { provider: SecretProvider; displayName: string; status?: SecretProviderConfigStatus; isDefault?: boolean; config?: Record; } export interface UpdateSecretProviderConfigInput { displayName?: string; status?: SecretProviderConfigStatus; isDefault?: boolean; config?: Record; } export interface RemoteImportPreviewInput { providerConfigId: string; query?: string | null; nextToken?: string | null; pageSize?: number; } export interface RemoteImportSelectionInput { externalRef: string; name?: string | null; key?: string | null; description?: string | null; providerVersionRef?: string | null; providerMetadata?: Record | null; } export interface RemoteImportInput { providerConfigId: string; secrets: RemoteImportSelectionInput[]; } export interface SecretProviderConfigDiscoveryPreviewInput { provider: SecretProvider; config?: Record; query?: string | null; nextToken?: string | null; pageSize?: number; } export const secretsApi = { list: (companyId: string) => api.get(`/companies/${companyId}/secrets`), providers: (companyId: string) => api.get(`/companies/${companyId}/secret-providers`), providerHealth: (companyId: string) => api.get(`/companies/${companyId}/secret-providers/health`), providerConfigs: (companyId: string) => api.get(`/companies/${companyId}/secret-provider-configs`), providerConfigDiscoveryPreview: ( companyId: string, data: SecretProviderConfigDiscoveryPreviewInput, ) => api.post( `/companies/${companyId}/secret-provider-configs/discovery/preview`, data, ), createProviderConfig: (companyId: string, data: CreateSecretProviderConfigInput) => api.post(`/companies/${companyId}/secret-provider-configs`, data), updateProviderConfig: (id: string, data: UpdateSecretProviderConfigInput) => api.patch(`/secret-provider-configs/${id}`, data), disableProviderConfig: (id: string) => api.patch(`/secret-provider-configs/${id}`, { status: "disabled" }), removeProviderConfig: (id: string) => api.delete(`/secret-provider-configs/${id}`), setDefaultProviderConfig: (id: string) => api.post(`/secret-provider-configs/${id}/default`, {}), checkProviderConfigHealth: (id: string) => api.post(`/secret-provider-configs/${id}/health`, {}), create: (companyId: string, data: CreateSecretInput) => api.post(`/companies/${companyId}/secrets`, data), update: (id: string, data: UpdateSecretInput) => api.patch(`/secrets/${id}`, data), rotate: (id: string, data: RotateSecretInput) => api.post(`/secrets/${id}/rotate`, data), disable: (id: string) => api.patch(`/secrets/${id}`, { status: "disabled" satisfies SecretStatus }), enable: (id: string) => api.patch(`/secrets/${id}`, { status: "active" satisfies SecretStatus }), archive: (id: string) => api.patch(`/secrets/${id}`, { status: "archived" satisfies SecretStatus }), remove: (id: string) => api.delete<{ ok: true }>(`/secrets/${id}`), usage: (id: string) => api.get(`/secrets/${id}/usage`), accessEvents: (id: string) => api.get(`/secrets/${id}/access-events`), remoteImportPreview: (companyId: string, data: RemoteImportPreviewInput) => api.post( `/companies/${companyId}/secrets/remote-import/preview`, data, ), remoteImport: (companyId: string, data: RemoteImportInput) => api.post(`/companies/${companyId}/secrets/remote-import`, data), };