import { api } from './client' export type CredentialType = 'basic' | 'bearer' | 'api_key' | 'oauth2' | 'imap' | 'mysql' | 'postgresql' export interface CredentialInfo { id: string name: string description?: string type: CredentialType createdBy: string createdAt: number updatedAt: number allowedWorkflows: string[] publicData?: Record // Non-secret fields for editing } export interface BasicAuthData { username: string password: string } export interface BearerTokenData { token: string } export interface ApiKeyData { header_name: string key_value: string } export interface OAuth2Data { grant_type: 'client_credentials' | 'authorization_code' client_id: string client_secret: string token_url: string auth_url?: string scope?: string access_token?: string refresh_token?: string expires_at?: number } export interface ImapData { host: string port: number username: string password: string use_ssl: boolean } export interface MysqlData { host: string port: number username: string password: string database: string use_ssl: boolean } export interface PostgresqlData { host: string port: number username: string password: string database: string use_ssl: boolean } export interface CreateCredentialRequest { name: string description?: string type: CredentialType data: BasicAuthData | BearerTokenData | ApiKeyData | OAuth2Data | ImapData | MysqlData | PostgresqlData allowedWorkflows?: string[] } export interface UpdateCredentialRequest { name?: string description?: string data?: BasicAuthData | BearerTokenData | ApiKeyData | OAuth2Data | ImapData | MysqlData | PostgresqlData allowedWorkflows?: string[] } // Transform backend credential data to frontend format function transformCredential(data: any): CredentialInfo { return { id: data.id || data._id, name: data.name, description: data.description, type: data.type, createdBy: data.createdBy || data.ownerId, createdAt: data.createdAt || data._createdAt, updatedAt: data.updatedAt || data._updatedAt, allowedWorkflows: data.allowedWorkflows || [], publicData: data.publicData, } } export const credentialsApi = { list: async (): Promise<{ credentials: CredentialInfo[] }> => { const response = await api.get('/credentials') return { ...response.data, credentials: (response.data.credentials || []).map(transformCredential), } }, get: async (id: string): Promise => { const response = await api.get(`/credentials/${id}`) return transformCredential(response.data) }, create: async (data: CreateCredentialRequest): Promise => { const response = await api.post('/credentials', data) return transformCredential(response.data) }, update: async (id: string, data: UpdateCredentialRequest): Promise => { const response = await api.put(`/credentials/${id}`, data) return transformCredential(response.data) }, delete: async (id: string): Promise => { await api.delete(`/credentials/${id}`) }, refreshOAuth2: async (id: string): Promise<{ success: boolean; expiresAt?: number }> => { const response = await api.post(`/credentials/${id}/refresh`) return response.data }, }