stripe-sync-status.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { SchemaInstallationStatus, StripeSchemaComment } from 'stripe-experiment-sync/supabase'
  2. import type {
  3. StripeSyncState,
  4. StripeSyncStateData,
  5. } from '@/data/database-integrations/stripe/sync-state-query'
  6. import type { Schema } from '@/data/database/schemas-query'
  7. /**
  8. * Complete Stripe Sync status including schema, installation state, and sync state
  9. */
  10. export interface StripeSyncStatusResult {
  11. /** The parsed schema with status, version and error */
  12. schemaComment: StripeSchemaComment
  13. /** Current sync run state (only available when installationStatus is installed) */
  14. syncState: StripeSyncState | undefined
  15. /** Whether the status is still being determined (schemas query is loading) */
  16. isLoading: boolean
  17. /** Latest version of stripe sync engine available for installation */
  18. latestAvailableVersion: string
  19. /** True when installation or uninstallation has timed out */
  20. timedOut: boolean
  21. }
  22. export function findStripeSchema(schemas: Schema[] | undefined): Schema | undefined {
  23. return schemas?.find((s) => s.name === 'stripe')
  24. }
  25. export function isInstalled(status: SchemaInstallationStatus): boolean {
  26. return status === 'installed'
  27. }
  28. export function isUninstalled(status: SchemaInstallationStatus): boolean {
  29. return status === 'uninstalled'
  30. }
  31. export function hasInstallError(status: SchemaInstallationStatus): boolean {
  32. return status === 'install error'
  33. }
  34. export function hasUninstallError(status: SchemaInstallationStatus): boolean {
  35. return status === 'uninstall error'
  36. }
  37. export function hasError(status: SchemaInstallationStatus): boolean {
  38. return hasInstallError(status) || hasUninstallError(status)
  39. }
  40. export function isInstalling(status: SchemaInstallationStatus): boolean {
  41. return status === 'installing'
  42. }
  43. export function isUninstalling(status: SchemaInstallationStatus): boolean {
  44. return status === 'uninstalling'
  45. }
  46. export function isInProgress(status: SchemaInstallationStatus): boolean {
  47. return isInstalling(status) || isUninstalling(status)
  48. }
  49. export function isInstallDone(status: SchemaInstallationStatus): boolean {
  50. return isInstalled(status) || hasInstallError(status)
  51. }
  52. export function isUninstallDone(status: SchemaInstallationStatus): boolean {
  53. return isUninstalled(status) || hasUninstallError(status)
  54. }
  55. export function canInstall(status: SchemaInstallationStatus): boolean {
  56. return isUninstalled(status) || hasError(status)
  57. }
  58. export function isSyncRunning(syncState: StripeSyncStateData | undefined): boolean {
  59. return !!syncState && !syncState.closed_at && syncState.status === 'running'
  60. }