transformers.ts 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import { formatCostForStorage } from "@/lib/utils/currency";
  2. import type { Key } from "@/types/key";
  3. import type { MessageRequest } from "@/types/message";
  4. import type { ModelPrice } from "@/types/model-price";
  5. import type { Provider } from "@/types/provider";
  6. import type { SystemSettings } from "@/types/system-config";
  7. import type { User } from "@/types/user";
  8. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  9. export function toUser(dbUser: any): User {
  10. return {
  11. ...dbUser,
  12. description: dbUser?.description || "",
  13. role: (dbUser?.role as User["role"]) || "user",
  14. rpm: dbUser?.rpm || 60,
  15. dailyQuota: dbUser?.dailyQuota ? parseFloat(dbUser.dailyQuota) : 0,
  16. providerGroup: dbUser?.providerGroup ?? null,
  17. tags: dbUser?.tags ?? [],
  18. limitTotalUsd:
  19. dbUser?.limitTotalUsd !== null && dbUser?.limitTotalUsd !== undefined
  20. ? parseFloat(dbUser.limitTotalUsd)
  21. : null,
  22. isEnabled: dbUser?.isEnabled ?? true,
  23. expiresAt: dbUser?.expiresAt ? new Date(dbUser.expiresAt) : null,
  24. createdAt: dbUser?.createdAt ? new Date(dbUser.createdAt) : new Date(),
  25. updatedAt: dbUser?.updatedAt ? new Date(dbUser.updatedAt) : new Date(),
  26. };
  27. }
  28. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  29. export function toKey(dbKey: any): Key {
  30. return {
  31. ...dbKey,
  32. isEnabled: dbKey?.isEnabled ?? true,
  33. canLoginWebUi: dbKey?.canLoginWebUi ?? true,
  34. limit5hUsd: dbKey?.limit5hUsd ? parseFloat(dbKey.limit5hUsd) : null,
  35. limitDailyUsd: dbKey?.limitDailyUsd ? parseFloat(dbKey.limitDailyUsd) : null,
  36. dailyResetTime: dbKey?.dailyResetTime ?? "00:00",
  37. limitWeeklyUsd: dbKey?.limitWeeklyUsd ? parseFloat(dbKey.limitWeeklyUsd) : null,
  38. limitMonthlyUsd: dbKey?.limitMonthlyUsd ? parseFloat(dbKey.limitMonthlyUsd) : null,
  39. limitTotalUsd:
  40. dbKey?.limitTotalUsd !== null && dbKey?.limitTotalUsd !== undefined
  41. ? parseFloat(dbKey.limitTotalUsd)
  42. : null,
  43. limitConcurrentSessions: dbKey?.limitConcurrentSessions ?? 0,
  44. providerGroup: dbKey?.providerGroup ?? null,
  45. createdAt: dbKey?.createdAt ? new Date(dbKey.createdAt) : new Date(),
  46. updatedAt: dbKey?.updatedAt ? new Date(dbKey.updatedAt) : new Date(),
  47. };
  48. }
  49. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  50. export function toProvider(dbProvider: any): Provider {
  51. return {
  52. ...dbProvider,
  53. isEnabled: dbProvider?.isEnabled ?? true,
  54. weight: dbProvider?.weight ?? 1,
  55. priority: dbProvider?.priority ?? 0,
  56. costMultiplier: dbProvider?.costMultiplier ? parseFloat(dbProvider.costMultiplier) : 1.0,
  57. groupTag: dbProvider?.groupTag ?? null,
  58. providerType: dbProvider?.providerType ?? "claude",
  59. modelRedirects: dbProvider?.modelRedirects ?? null,
  60. codexInstructionsStrategy: dbProvider?.codexInstructionsStrategy ?? "auto",
  61. mcpPassthroughType: dbProvider?.mcpPassthroughType ?? "none",
  62. mcpPassthroughUrl: dbProvider?.mcpPassthroughUrl ?? null,
  63. limit5hUsd: dbProvider?.limit5hUsd ? parseFloat(dbProvider.limit5hUsd) : null,
  64. limitDailyUsd: dbProvider?.limitDailyUsd ? parseFloat(dbProvider.limitDailyUsd) : null,
  65. dailyResetTime: dbProvider?.dailyResetTime ?? "00:00",
  66. limitWeeklyUsd: dbProvider?.limitWeeklyUsd ? parseFloat(dbProvider.limitWeeklyUsd) : null,
  67. limitMonthlyUsd: dbProvider?.limitMonthlyUsd ? parseFloat(dbProvider.limitMonthlyUsd) : null,
  68. limitConcurrentSessions: dbProvider?.limitConcurrentSessions ?? 0,
  69. maxRetryAttempts:
  70. dbProvider?.maxRetryAttempts !== undefined && dbProvider?.maxRetryAttempts !== null
  71. ? Number(dbProvider.maxRetryAttempts)
  72. : null,
  73. circuitBreakerFailureThreshold: dbProvider?.circuitBreakerFailureThreshold ?? 5,
  74. circuitBreakerOpenDuration: dbProvider?.circuitBreakerOpenDuration ?? 1800000,
  75. circuitBreakerHalfOpenSuccessThreshold: dbProvider?.circuitBreakerHalfOpenSuccessThreshold ?? 2,
  76. proxyUrl: dbProvider?.proxyUrl ?? null,
  77. proxyFallbackToDirect: dbProvider?.proxyFallbackToDirect ?? false,
  78. firstByteTimeoutStreamingMs: dbProvider?.firstByteTimeoutStreamingMs ?? 30000,
  79. streamingIdleTimeoutMs: dbProvider?.streamingIdleTimeoutMs ?? 10000,
  80. requestTimeoutNonStreamingMs: dbProvider?.requestTimeoutNonStreamingMs ?? 600000,
  81. websiteUrl: dbProvider?.websiteUrl ?? null,
  82. faviconUrl: dbProvider?.faviconUrl ?? null,
  83. tpm: dbProvider?.tpm ?? null,
  84. rpm: dbProvider?.rpm ?? null,
  85. rpd: dbProvider?.rpd ?? null,
  86. cc: dbProvider?.cc ?? null,
  87. createdAt: dbProvider?.createdAt ? new Date(dbProvider.createdAt) : new Date(),
  88. updatedAt: dbProvider?.updatedAt ? new Date(dbProvider.updatedAt) : new Date(),
  89. };
  90. }
  91. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  92. export function toMessageRequest(dbMessage: any): MessageRequest {
  93. return {
  94. ...dbMessage,
  95. costMultiplier: dbMessage?.costMultiplier ? parseFloat(dbMessage.costMultiplier) : undefined,
  96. createdAt: dbMessage?.createdAt ? new Date(dbMessage.createdAt) : new Date(),
  97. updatedAt: dbMessage?.updatedAt ? new Date(dbMessage.updatedAt) : new Date(),
  98. costUsd: (() => {
  99. const formatted = formatCostForStorage(dbMessage?.costUsd);
  100. return formatted ?? undefined;
  101. })(),
  102. };
  103. }
  104. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  105. export function toModelPrice(dbPrice: any): ModelPrice {
  106. return {
  107. ...dbPrice,
  108. createdAt: dbPrice?.createdAt ? new Date(dbPrice.createdAt) : new Date(),
  109. updatedAt: dbPrice?.updatedAt ? new Date(dbPrice.updatedAt) : new Date(),
  110. };
  111. }
  112. // eslint-disable-next-line @typescript-eslint/no-explicit-any
  113. export function toSystemSettings(dbSettings: any): SystemSettings {
  114. return {
  115. id: dbSettings?.id ?? 0,
  116. siteTitle: dbSettings?.siteTitle ?? "Claude Code Hub",
  117. allowGlobalUsageView: dbSettings?.allowGlobalUsageView ?? true,
  118. currencyDisplay: dbSettings?.currencyDisplay ?? "USD",
  119. billingModelSource: dbSettings?.billingModelSource ?? "original",
  120. enableAutoCleanup: dbSettings?.enableAutoCleanup ?? false,
  121. cleanupRetentionDays: dbSettings?.cleanupRetentionDays ?? 30,
  122. cleanupSchedule: dbSettings?.cleanupSchedule ?? "0 2 * * *",
  123. cleanupBatchSize: dbSettings?.cleanupBatchSize ?? 10000,
  124. enableClientVersionCheck: dbSettings?.enableClientVersionCheck ?? false,
  125. verboseProviderError: dbSettings?.verboseProviderError ?? false,
  126. enableHttp2: dbSettings?.enableHttp2 ?? false,
  127. createdAt: dbSettings?.createdAt ? new Date(dbSettings.createdAt) : new Date(),
  128. updatedAt: dbSettings?.updatedAt ? new Date(dbSettings.updatedAt) : new Date(),
  129. };
  130. }