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