credentials.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import { api } from './client'
  2. export type CredentialType = 'basic' | 'bearer' | 'api_key' | 'oauth2' | 'imap' | 'mysql' | 'postgresql'
  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 PostgresqlData {
  52. host: string
  53. port: number
  54. username: string
  55. password: string
  56. database: string
  57. use_ssl: boolean
  58. }
  59. export interface CreateCredentialRequest {
  60. name: string
  61. description?: string
  62. type: CredentialType
  63. data: BasicAuthData | BearerTokenData | ApiKeyData | OAuth2Data | ImapData | MysqlData | PostgresqlData
  64. allowedWorkflows?: string[]
  65. }
  66. export interface UpdateCredentialRequest {
  67. name?: string
  68. description?: string
  69. data?: BasicAuthData | BearerTokenData | ApiKeyData | OAuth2Data | ImapData | MysqlData | PostgresqlData
  70. allowedWorkflows?: string[]
  71. }
  72. // Transform backend credential data to frontend format
  73. function transformCredential(data: any): CredentialInfo {
  74. return {
  75. id: data.id || data._id,
  76. name: data.name,
  77. description: data.description,
  78. type: data.type,
  79. createdBy: data.createdBy || data.ownerId,
  80. createdAt: data.createdAt || data._createdAt,
  81. updatedAt: data.updatedAt || data._updatedAt,
  82. allowedWorkflows: data.allowedWorkflows || [],
  83. publicData: data.publicData,
  84. }
  85. }
  86. export const credentialsApi = {
  87. list: async (): Promise<{ credentials: CredentialInfo[] }> => {
  88. const response = await api.get('/credentials')
  89. return {
  90. ...response.data,
  91. credentials: (response.data.credentials || []).map(transformCredential),
  92. }
  93. },
  94. get: async (id: string): Promise<CredentialInfo> => {
  95. const response = await api.get(`/credentials/${id}`)
  96. return transformCredential(response.data)
  97. },
  98. create: async (data: CreateCredentialRequest): Promise<CredentialInfo> => {
  99. const response = await api.post('/credentials', data)
  100. return transformCredential(response.data)
  101. },
  102. update: async (id: string, data: UpdateCredentialRequest): Promise<CredentialInfo> => {
  103. const response = await api.put(`/credentials/${id}`, data)
  104. return transformCredential(response.data)
  105. },
  106. delete: async (id: string): Promise<void> => {
  107. await api.delete(`/credentials/${id}`)
  108. },
  109. refreshOAuth2: async (id: string): Promise<{ success: boolean; expiresAt?: number }> => {
  110. const response = await api.post(`/credentials/${id}/refresh`)
  111. return response.data
  112. },
  113. }