credentials.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import { api } from './client'
  2. export type CredentialType = 'basic' | 'bearer' | 'api_key' | 'oauth2' | 'imap' | 'mysql'
  3. export interface CredentialInfo {
  4. id: string
  5. name: string
  6. description?: string
  7. type: CredentialType
  8. createdBy: string
  9. createdAt: number
  10. updatedAt: number
  11. allowedWorkflows: string[]
  12. publicData?: Record<string, unknown> // Non-secret fields for editing
  13. }
  14. export interface BasicAuthData {
  15. username: string
  16. password: string
  17. }
  18. export interface BearerTokenData {
  19. token: string
  20. }
  21. export interface ApiKeyData {
  22. header_name: string
  23. key_value: string
  24. }
  25. export interface OAuth2Data {
  26. grant_type: 'client_credentials' | 'authorization_code'
  27. client_id: string
  28. client_secret: string
  29. token_url: string
  30. auth_url?: string
  31. scope?: string
  32. access_token?: string
  33. refresh_token?: string
  34. expires_at?: number
  35. }
  36. export interface ImapData {
  37. host: string
  38. port: number
  39. username: string
  40. password: string
  41. use_ssl: boolean
  42. }
  43. export interface MysqlData {
  44. host: string
  45. port: number
  46. username: string
  47. password: string
  48. database: string
  49. use_ssl: boolean
  50. }
  51. export interface CreateCredentialRequest {
  52. name: string
  53. description?: string
  54. type: CredentialType
  55. data: BasicAuthData | BearerTokenData | ApiKeyData | OAuth2Data | ImapData | MysqlData
  56. allowedWorkflows?: string[]
  57. }
  58. export interface UpdateCredentialRequest {
  59. name?: string
  60. description?: string
  61. data?: BasicAuthData | BearerTokenData | ApiKeyData | OAuth2Data | ImapData | MysqlData
  62. allowedWorkflows?: string[]
  63. }
  64. // Transform backend credential data to frontend format
  65. function transformCredential(data: any): CredentialInfo {
  66. return {
  67. id: data.id || data._id,
  68. name: data.name,
  69. description: data.description,
  70. type: data.type,
  71. createdBy: data.createdBy || data.ownerId,
  72. createdAt: data.createdAt || data._createdAt,
  73. updatedAt: data.updatedAt || data._updatedAt,
  74. allowedWorkflows: data.allowedWorkflows || [],
  75. publicData: data.publicData,
  76. }
  77. }
  78. export const credentialsApi = {
  79. list: async (): Promise<{ credentials: CredentialInfo[] }> => {
  80. const response = await api.get('/credentials')
  81. return {
  82. ...response.data,
  83. credentials: (response.data.credentials || []).map(transformCredential),
  84. }
  85. },
  86. get: async (id: string): Promise<CredentialInfo> => {
  87. const response = await api.get(`/credentials/${id}`)
  88. return transformCredential(response.data)
  89. },
  90. create: async (data: CreateCredentialRequest): Promise<CredentialInfo> => {
  91. const response = await api.post('/credentials', data)
  92. return transformCredential(response.data)
  93. },
  94. update: async (id: string, data: UpdateCredentialRequest): Promise<CredentialInfo> => {
  95. const response = await api.put(`/credentials/${id}`, data)
  96. return transformCredential(response.data)
  97. },
  98. delete: async (id: string): Promise<void> => {
  99. await api.delete(`/credentials/${id}`)
  100. },
  101. refreshOAuth2: async (id: string): Promise<{ success: boolean; expiresAt?: number }> => {
  102. const response = await api.post(`/credentials/${id}/refresh`)
  103. return response.data
  104. },
  105. }