@postgres.ai/shared 4.1.2 → 4.2.0-pr-1200
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/UpgradeCloneModal/index.d.ts +11 -0
- package/components/UpgradeCloneModal/index.js +75 -0
- package/package.json +7 -15
- package/{dist/pages → pages}/Branches/Branch/index.js +27 -2
- package/{dist/pages → pages}/Branches/Branch/stores/Main.d.ts +5 -0
- package/{dist/pages → pages}/Branches/Branch/stores/Main.js +29 -0
- package/{dist/pages → pages}/Branches/components/BranchesTable/index.js +2 -2
- package/{dist/pages → pages}/Branches/index.js +10 -1
- package/{dist/pages → pages}/Clone/Status/index.js +3 -0
- package/{dist/pages → pages}/Clone/index.js +12 -4
- package/{dist/pages → pages}/Clone/stores/Main.d.ts +9 -1
- package/{dist/pages → pages}/Clone/stores/Main.js +40 -3
- package/{dist/pages → pages}/CreateBranch/stores/Main.d.ts +3 -0
- package/{dist/pages → pages}/CreateClone/index.js +2 -0
- package/{dist/pages → pages}/CreateClone/stores/Main.d.ts +5 -1
- package/{dist/pages → pages}/CreateClone/stores/Main.js +8 -3
- package/pages/Instance/Configuration/PhysicalMode/EnvsEditor/index.d.ts +13 -0
- package/pages/Instance/Configuration/PhysicalMode/EnvsEditor/index.js +31 -0
- package/pages/Instance/Configuration/PhysicalMode/PgBackRest/index.d.ts +10 -0
- package/pages/Instance/Configuration/PhysicalMode/PgBackRest/index.js +29 -0
- package/pages/Instance/Configuration/PhysicalMode/Sync/index.d.ts +9 -0
- package/pages/Instance/Configuration/PhysicalMode/Sync/index.js +14 -0
- package/pages/Instance/Configuration/PhysicalMode/Walg/index.d.ts +10 -0
- package/pages/Instance/Configuration/PhysicalMode/Walg/index.js +21 -0
- package/pages/Instance/Configuration/PhysicalMode/index.d.ts +10 -0
- package/pages/Instance/Configuration/PhysicalMode/index.js +17 -0
- package/pages/Instance/Configuration/SimpleMode/PreviewCard.d.ts +13 -0
- package/pages/Instance/Configuration/SimpleMode/PreviewCard.js +14 -0
- package/pages/Instance/Configuration/SimpleMode/index.d.ts +19 -0
- package/pages/Instance/Configuration/SimpleMode/index.js +166 -0
- package/pages/Instance/Configuration/configMode.d.ts +2 -0
- package/pages/Instance/Configuration/configMode.js +7 -0
- package/pages/Instance/Configuration/configOptions.d.ts +25 -0
- package/pages/Instance/Configuration/configOptions.js +130 -0
- package/pages/Instance/Configuration/connectionString.d.ts +20 -0
- package/pages/Instance/Configuration/connectionString.js +129 -0
- package/pages/Instance/Configuration/dockerCatalog.d.ts +2 -0
- package/pages/Instance/Configuration/dockerCatalog.js +19 -0
- package/{dist/pages → pages}/Instance/Configuration/index.d.ts +1 -2
- package/{dist/pages → pages}/Instance/Configuration/index.js +115 -86
- package/{dist/pages → pages}/Instance/Configuration/useForm.d.ts +20 -0
- package/pages/Instance/Configuration/useForm.js +196 -0
- package/{dist/pages → pages}/Instance/Configuration/utils/index.js +1 -17
- package/{dist/pages → pages}/Instance/Info/Snapshots/Calendar/Day/index.js +3 -3
- package/{dist/pages → pages}/Instance/Info/Snapshots/Calendar/utils.d.ts +3 -0
- package/{dist/pages → pages}/Instance/Info/Snapshots/utils.d.ts +6 -0
- package/{dist/pages → pages}/Instance/Snapshots/components/SnapshotsList/index.js +11 -1
- package/{dist/pages → pages}/Instance/Snapshots/index.js +11 -3
- package/{dist/pages → pages}/Instance/Snapshots/utils/index.d.ts +3 -0
- package/{dist/pages → pages}/Instance/Tabs/styles.js +6 -6
- package/{dist/pages → pages}/Instance/index.js +1 -3
- package/{dist/pages → pages}/Instance/stores/Main.d.ts +22 -2
- package/{dist/pages → pages}/Instance/stores/Main.js +26 -9
- package/{dist/pages → pages}/Snapshots/Snapshot/index.js +28 -2
- package/{dist/pages → pages}/Snapshots/Snapshot/stores/Main.d.ts +5 -0
- package/{dist/pages → pages}/Snapshots/Snapshot/stores/Main.js +29 -0
- package/{dist/stores → stores}/Snapshots.d.ts +1 -1
- package/{dist/stores → stores}/Snapshots.js +12 -6
- package/{dist/types → types}/api/endpoints/getBranches.d.ts +6 -0
- package/types/api/endpoints/probeSource.d.ts +32 -0
- package/{dist/types → types}/api/endpoints/testDbSource.d.ts +3 -1
- package/{dist/types → types}/api/endpoints/testDbSource.js +6 -0
- package/types/api/endpoints/updateBranch.d.ts +11 -0
- package/types/api/endpoints/updateConfig.js +1 -0
- package/types/api/endpoints/updateSnapshot.d.ts +11 -0
- package/types/api/endpoints/updateSnapshot.js +1 -0
- package/types/api/endpoints/upgradeClone.d.ts +8 -0
- package/types/api/endpoints/upgradeClone.js +1 -0
- package/{dist/types → types}/api/entities/branchSnapshots.d.ts +3 -0
- package/{dist/types → types}/api/entities/clone.d.ts +9 -2
- package/{dist/types → types}/api/entities/config.d.ts +32 -0
- package/types/api/entities/config.js +74 -0
- package/types/api/entities/dbSource.js +1 -0
- package/{dist/types → types}/api/entities/instance.d.ts +11 -1
- package/{dist/types → types}/api/entities/instanceState.d.ts +16 -1
- package/{dist/types → types}/api/entities/snapshot.d.ts +6 -0
- package/{dist/utils → utils}/api.d.ts +1 -1
- package/{dist/utils → utils}/api.js +6 -0
- package/{dist/utils → utils}/clone.d.ts +3 -1
- package/{dist/utils → utils}/clone.js +7 -1
- package/utils/clonePoller.d.ts +12 -0
- package/utils/clonePoller.js +41 -0
- package/{dist/utils → utils}/date.js +12 -12
- package/utils/protection.d.ts +5 -0
- package/utils/protection.js +23 -0
- package/.gitlab-ci.yml +0 -79
- package/components/AlertSnackbar/index.tsx +0 -23
- package/components/AlertSnackbar/useAlertSnackbar.tsx +0 -65
- package/components/Button/index.tsx +0 -79
- package/components/Button2/index.tsx +0 -43
- package/components/DestroyCloneModal/index.tsx +0 -52
- package/components/DestroyCloneRestrictionModal/index.tsx +0 -50
- package/components/ErrorStub/index.tsx +0 -83
- package/components/FormattedText/index.tsx +0 -44
- package/components/GatewayLink/index.tsx +0 -33
- package/components/HorizontalScrollContainer/index.tsx +0 -131
- package/components/HorizontalScrollContainer/types.ts +0 -12
- package/components/HorizontalScrollContainer/utils.ts +0 -16
- package/components/ImportantText/index.tsx +0 -29
- package/components/Link2/index.tsx +0 -31
- package/components/MenuButton/index.tsx +0 -88
- package/components/Modal/index.tsx +0 -93
- package/components/PageSpinner/index.tsx +0 -18
- package/components/ResetCloneModal/index.tsx +0 -149
- package/components/SectionTitle/index.tsx +0 -74
- package/components/Select/index.tsx +0 -43
- package/components/SimpleModalControls/index.tsx +0 -56
- package/components/Spinner/icon.tsx +0 -29
- package/components/Spinner/index.tsx +0 -16
- package/components/Status/index.tsx +0 -61
- package/components/StubContainer/index.tsx +0 -41
- package/components/StubSpinner/index.tsx +0 -49
- package/components/StubSpinnerFlex/index.tsx +0 -20
- package/components/SyntaxHighlight/index.tsx +0 -107
- package/components/Table/RowMenu/index.tsx +0 -111
- package/components/Table/index.tsx +0 -140
- package/components/Text/index.tsx +0 -28
- package/components/TextField/index.tsx +0 -119
- package/components/Tooltip/index.tsx +0 -52
- package/config/index.ts +0 -32
- package/config/links.ts +0 -6
- package/dist/components/Button2/styles.module.scss +0 -82
- package/dist/components/FormattedText/styles.module.scss +0 -34
- package/dist/components/Link2/styles.module.scss +0 -12
- package/dist/components/MenuButton/styles.module.scss +0 -42
- package/dist/components/PageSpinner/styles.module.scss +0 -13
- package/dist/components/Spinner/styles.module.scss +0 -33
- package/dist/components/Status/styles.module.scss +0 -45
- package/dist/components/StubSpinnerFlex/styles.module.scss +0 -20
- package/dist/meta.json +0 -1
- package/dist/package.json +0 -54
- package/dist/pages/CreateClone/styles.module.scss +0 -129
- package/dist/pages/Instance/Clones/ClonesList/styles.module.scss +0 -42
- package/dist/pages/Instance/Clones/Header/Item/styles.module.scss +0 -17
- package/dist/pages/Instance/Clones/Header/styles.module.scss +0 -14
- package/dist/pages/Instance/Configuration/configOptions.d.ts +0 -9
- package/dist/pages/Instance/Configuration/configOptions.js +0 -59
- package/dist/pages/Instance/Configuration/styles.module.scss +0 -122
- package/dist/pages/Instance/Configuration/useForm.js +0 -75
- package/dist/pages/Instance/Info/Retrieval/RefreshFailedAlert/styles.module.scss +0 -33
- package/dist/pages/Instance/Info/Retrieval/RetrievalModal/styles.module.scss +0 -6
- package/dist/pages/Instance/Info/Retrieval/RetrievalTable/styles.module.scss +0 -29
- package/dist/pages/Instance/Info/Status/InstanceResponseModal/styles.module.scss +0 -3
- package/dist/pages/Instance/Info/Status/styles.module.scss +0 -12
- package/dist/pages/Instance/Info/components/Property/styles.module.scss +0 -21
- package/dist/pages/Instance/styles.scss +0 -37
- package/dist/react-app-env.d.ts +0 -64
- package/dist/styles/global.scss +0 -29
- package/dist/styles/mixins.scss +0 -30
- package/dist/styles/vars.scss +0 -43
- package/dist/tsconfig.build.json +0 -36
- package/dist/tsconfig.json +0 -30
- package/dist/types/api/entities/config.js +0 -47
- package/helpers/getEntropy.ts +0 -278
- package/helpers/localStorage.ts +0 -15
- package/helpers/request.ts +0 -47
- package/hooks/useWindowDimensions.ts +0 -16
- package/icons/ArrowDropDown/index.tsx +0 -31
- package/icons/Circle/index.tsx +0 -27
- package/icons/External/index.tsx +0 -14
- package/icons/Info/index.tsx +0 -12
- package/icons/PostgresSQL/index.tsx +0 -18
- package/icons/Renewable/index.tsx +0 -65
- package/icons/Shield/index.tsx +0 -33
- package/icons/Warning/index.tsx +0 -29
- package/pages/Branches/Branch/context.ts +0 -25
- package/pages/Branches/Branch/index.tsx +0 -434
- package/pages/Branches/Branch/stores/Main.ts +0 -138
- package/pages/Branches/Branch/useCreatedStores.ts +0 -10
- package/pages/Branches/components/BranchesTable/index.tsx +0 -194
- package/pages/Branches/components/Modals/DeleteBranchModal/index.tsx +0 -84
- package/pages/Branches/components/Modals/types.ts +0 -4
- package/pages/Branches/index.tsx +0 -128
- package/pages/Clone/Status/index.tsx +0 -73
- package/pages/Clone/context.ts +0 -24
- package/pages/Clone/index.tsx +0 -756
- package/pages/Clone/stores/Main.ts +0 -215
- package/pages/Clone/useCreatedStores.ts +0 -11
- package/pages/Clone/utils/index.ts +0 -15
- package/pages/CreateBranch/index.tsx +0 -322
- package/pages/CreateBranch/stores/Main.ts +0 -99
- package/pages/CreateBranch/useCreatedStores.ts +0 -11
- package/pages/CreateBranch/useForm.ts +0 -60
- package/pages/CreateBranch/utils/index.ts +0 -18
- package/pages/CreateClone/index.tsx +0 -520
- package/pages/CreateClone/stores/Main.ts +0 -139
- package/pages/CreateClone/useCreatedStores.ts +0 -11
- package/pages/CreateClone/useForm.ts +0 -51
- package/pages/CreateClone/utils/index.ts +0 -38
- package/pages/CreateSnapshot/index.tsx +0 -253
- package/pages/CreateSnapshot/stores/Main.ts +0 -70
- package/pages/CreateSnapshot/useCreatedStores.ts +0 -11
- package/pages/CreateSnapshot/useForm.ts +0 -34
- package/pages/CreateSnapshot/utils/index.ts +0 -8
- package/pages/Instance/Clones/ClonesList/ConnectionModal/index.tsx +0 -196
- package/pages/Instance/Clones/ClonesList/MenuCell/index.tsx +0 -98
- package/pages/Instance/Clones/ClonesList/MenuCell/utils.ts +0 -21
- package/pages/Instance/Clones/ClonesList/index.tsx +0 -246
- package/pages/Instance/Clones/ClonesModal/index.tsx +0 -71
- package/pages/Instance/Clones/ClonesModal/utils.ts +0 -21
- package/pages/Instance/Clones/Header/Item/index.tsx +0 -15
- package/pages/Instance/Clones/Header/index.tsx +0 -74
- package/pages/Instance/Clones/index.tsx +0 -141
- package/pages/Instance/Configuration/Header/index.tsx +0 -84
- package/pages/Instance/Configuration/InputWithTooltip/index.tsx +0 -240
- package/pages/Instance/Configuration/ResponseMessage/index.tsx +0 -71
- package/pages/Instance/Configuration/configOptions.ts +0 -60
- package/pages/Instance/Configuration/index.tsx +0 -1243
- package/pages/Instance/Configuration/tooltipText.tsx +0 -190
- package/pages/Instance/Configuration/useForm.ts +0 -110
- package/pages/Instance/Configuration/utils/index.ts +0 -236
- package/pages/Instance/InactiveInstance/index.tsx +0 -157
- package/pages/Instance/InactiveInstance/utils.ts +0 -9
- package/pages/Instance/Info/Connection/ConnectModal/Content/index.tsx +0 -176
- package/pages/Instance/Info/Connection/ConnectModal/Content/utils.ts +0 -24
- package/pages/Instance/Info/Connection/ConnectModal/index.tsx +0 -36
- package/pages/Instance/Info/Connection/index.tsx +0 -81
- package/pages/Instance/Info/Details/index.tsx +0 -20
- package/pages/Instance/Info/Disks/Disk/ActionsMenu/index.tsx +0 -100
- package/pages/Instance/Info/Disks/Disk/ProgressBar/PointerIcon.tsx +0 -20
- package/pages/Instance/Info/Disks/Disk/ProgressBar/index.tsx +0 -76
- package/pages/Instance/Info/Disks/Disk/Status/index.tsx +0 -75
- package/pages/Instance/Info/Disks/PoolSection/DatasetRow/index.tsx +0 -117
- package/pages/Instance/Info/Disks/PoolSection/index.tsx +0 -112
- package/pages/Instance/Info/Disks/index.tsx +0 -114
- package/pages/Instance/Info/Icons/index.tsx +0 -39
- package/pages/Instance/Info/Retrieval/ConfirmFullRefreshModal/index.tsx +0 -109
- package/pages/Instance/Info/Retrieval/RefreshFailedAlert/index.tsx +0 -32
- package/pages/Instance/Info/Retrieval/RetrievalModal/index.tsx +0 -43
- package/pages/Instance/Info/Retrieval/RetrievalTable/index.tsx +0 -53
- package/pages/Instance/Info/Retrieval/index.tsx +0 -113
- package/pages/Instance/Info/Retrieval/utils.ts +0 -10
- package/pages/Instance/Info/Snapshots/Calendar/Day/index.tsx +0 -125
- package/pages/Instance/Info/Snapshots/Calendar/index.tsx +0 -133
- package/pages/Instance/Info/Snapshots/Calendar/utils.ts +0 -74
- package/pages/Instance/Info/Snapshots/TimeLine/Day/index.tsx +0 -79
- package/pages/Instance/Info/Snapshots/TimeLine/index.tsx +0 -57
- package/pages/Instance/Info/Snapshots/index.tsx +0 -102
- package/pages/Instance/Info/Snapshots/utils.ts +0 -31
- package/pages/Instance/Info/Status/InstanceResponseModal/index.tsx +0 -32
- package/pages/Instance/Info/Status/index.tsx +0 -89
- package/pages/Instance/Info/Status/utils.ts +0 -24
- package/pages/Instance/Info/components/Property/index.tsx +0 -32
- package/pages/Instance/Info/components/Section/index.tsx +0 -50
- package/pages/Instance/Info/components/ValueStatus/index.tsx +0 -51
- package/pages/Instance/Info/index.tsx +0 -137
- package/pages/Instance/Snapshots/components/SnapshotHeader/index.tsx +0 -77
- package/pages/Instance/Snapshots/components/SnapshotsList/index.tsx +0 -285
- package/pages/Instance/Snapshots/components/SnapshotsModal/utils.ts +0 -17
- package/pages/Instance/Snapshots/components/SnapshotsTable/index.tsx +0 -231
- package/pages/Instance/Snapshots/index.tsx +0 -171
- package/pages/Instance/Snapshots/utils/index.ts +0 -39
- package/pages/Instance/SnapshotsModal/index.tsx +0 -159
- package/pages/Instance/Tabs/PlatformTabs.tsx +0 -83
- package/pages/Instance/Tabs/index.tsx +0 -140
- package/pages/Instance/Tabs/styles.ts +0 -68
- package/pages/Instance/components/ErrorStub/index.tsx +0 -77
- package/pages/Instance/components/ModalReloadButton/index.tsx +0 -42
- package/pages/Instance/components/Tags/Tag/index.tsx +0 -60
- package/pages/Instance/components/Tags/index.tsx +0 -42
- package/pages/Instance/context.ts +0 -46
- package/pages/Instance/index.tsx +0 -257
- package/pages/Instance/stores/ClonesModal.ts +0 -35
- package/pages/Instance/stores/Main.ts +0 -484
- package/pages/Instance/stores/SnapshotsModal.ts +0 -35
- package/pages/Instance/useCreatedStores.ts +0 -14
- package/pages/Logs/Icons/PlusIcon.tsx +0 -9
- package/pages/Logs/constants/index.ts +0 -7
- package/pages/Logs/hooks/useWsScroll.tsx +0 -47
- package/pages/Logs/index.tsx +0 -287
- package/pages/Logs/utils/index.ts +0 -20
- package/pages/Logs/wsLogs.ts +0 -126
- package/pages/Logs/wsSnackbar.ts +0 -26
- package/pages/Snapshots/Snapshot/DestorySnapshotModal/index.tsx +0 -144
- package/pages/Snapshots/Snapshot/context.ts +0 -26
- package/pages/Snapshots/Snapshot/index.tsx +0 -485
- package/pages/Snapshots/Snapshot/stores/Main.ts +0 -120
- package/pages/Snapshots/Snapshot/useCreatedStores.ts +0 -10
- package/postgres.ai-shared-4.1.2.tgz +0 -0
- package/scripts/copy-assets.js +0 -30
- package/scripts/pack.js +0 -70
- package/stores/Snapshots.ts +0 -97
- package/styles/colors.ts +0 -67
- package/styles/icons.tsx +0 -1917
- package/styles/styles.ts +0 -87
- package/styles/theme.ts +0 -53
- package/styles/vars.ts +0 -40
- package/types/api/endpoints/createBranch.ts +0 -14
- package/types/api/endpoints/createClone.ts +0 -11
- package/types/api/endpoints/createSnapshot.ts +0 -10
- package/types/api/endpoints/deleteBranch.ts +0 -4
- package/types/api/endpoints/destroyClone.ts +0 -7
- package/types/api/endpoints/destroySnapshot.ts +0 -8
- package/types/api/endpoints/fullRefresh.ts +0 -6
- package/types/api/endpoints/getBranchSnapshot.ts +0 -6
- package/types/api/endpoints/getBranches.ts +0 -22
- package/types/api/endpoints/getClone.ts +0 -6
- package/types/api/endpoints/getConfig.ts +0 -6
- package/types/api/endpoints/getEngine.ts +0 -13
- package/types/api/endpoints/getFullConfig.ts +0 -4
- package/types/api/endpoints/getInstance.ts +0 -6
- package/types/api/endpoints/getInstanceRetrieval.ts +0 -6
- package/types/api/endpoints/getSeImages.ts +0 -22
- package/types/api/endpoints/getSnapshotList.ts +0 -14
- package/types/api/endpoints/getSnapshots.ts +0 -6
- package/types/api/endpoints/getWSToken.ts +0 -6
- package/types/api/endpoints/initWS.ts +0 -1
- package/types/api/endpoints/refreshInstance.ts +0 -4
- package/types/api/endpoints/resetClone.ts +0 -8
- package/types/api/endpoints/testDbSource.ts +0 -50
- package/types/api/endpoints/updateClone.ts +0 -11
- package/types/api/endpoints/updateConfig.ts +0 -9
- package/types/api/entities/branchSnapshot.ts +0 -8
- package/types/api/entities/branchSnapshots.ts +0 -10
- package/types/api/entities/clone.ts +0 -47
- package/types/api/entities/config.ts +0 -126
- package/types/api/entities/createBranch.ts +0 -7
- package/types/api/entities/createSnapshot.ts +0 -7
- package/types/api/entities/dbSource.ts +0 -14
- package/types/api/entities/instance.ts +0 -67
- package/types/api/entities/instanceRetrieval.ts +0 -46
- package/types/api/entities/instanceState.ts +0 -106
- package/types/api/entities/pool.ts +0 -27
- package/types/api/entities/snapshot.ts +0 -22
- package/types/api/entities/wsToken.ts +0 -7
- package/types/byte-size/index.d.ts +0 -22
- package/utils/api.ts +0 -30
- package/utils/clone.ts +0 -31
- package/utils/connection.ts +0 -38
- package/utils/date.ts +0 -136
- package/utils/instance.ts +0 -10
- package/utils/numbers.ts +0 -11
- package/utils/react.ts +0 -10
- package/utils/snapshot.ts +0 -8
- package/utils/strings.ts +0 -11
- package/utils/units.ts +0 -23
- /package/{dist/components → components}/AlertSnackbar/index.d.ts +0 -0
- /package/{dist/components → components}/AlertSnackbar/index.js +0 -0
- /package/{dist/components → components}/AlertSnackbar/useAlertSnackbar.d.ts +0 -0
- /package/{dist/components → components}/AlertSnackbar/useAlertSnackbar.js +0 -0
- /package/{dist/components → components}/Button/index.d.ts +0 -0
- /package/{dist/components → components}/Button/index.js +0 -0
- /package/{dist/components → components}/Button2/index.d.ts +0 -0
- /package/{dist/components → components}/Button2/index.js +0 -0
- /package/{dist/components → components}/DestroyCloneModal/index.d.ts +0 -0
- /package/{dist/components → components}/DestroyCloneModal/index.js +0 -0
- /package/{dist/components → components}/DestroyCloneRestrictionModal/index.d.ts +0 -0
- /package/{dist/components → components}/DestroyCloneRestrictionModal/index.js +0 -0
- /package/{dist/components → components}/ErrorStub/index.d.ts +0 -0
- /package/{dist/components → components}/ErrorStub/index.js +0 -0
- /package/{dist/components → components}/FormattedText/index.d.ts +0 -0
- /package/{dist/components → components}/FormattedText/index.js +0 -0
- /package/{dist/components → components}/GatewayLink/index.d.ts +0 -0
- /package/{dist/components → components}/GatewayLink/index.js +0 -0
- /package/{dist/components → components}/HorizontalScrollContainer/index.d.ts +0 -0
- /package/{dist/components → components}/HorizontalScrollContainer/index.js +0 -0
- /package/{dist/components → components}/HorizontalScrollContainer/types.d.ts +0 -0
- /package/{dist/components → components}/HorizontalScrollContainer/types.js +0 -0
- /package/{dist/components → components}/HorizontalScrollContainer/utils.d.ts +0 -0
- /package/{dist/components → components}/HorizontalScrollContainer/utils.js +0 -0
- /package/{dist/components → components}/ImportantText/index.d.ts +0 -0
- /package/{dist/components → components}/ImportantText/index.js +0 -0
- /package/{dist/components → components}/Link2/index.d.ts +0 -0
- /package/{dist/components → components}/Link2/index.js +0 -0
- /package/{dist/components → components}/MenuButton/index.d.ts +0 -0
- /package/{dist/components → components}/MenuButton/index.js +0 -0
- /package/{dist/components → components}/Modal/index.d.ts +0 -0
- /package/{dist/components → components}/Modal/index.js +0 -0
- /package/{dist/components → components}/PageSpinner/index.d.ts +0 -0
- /package/{dist/components → components}/PageSpinner/index.js +0 -0
- /package/{dist/components → components}/ResetCloneModal/index.d.ts +0 -0
- /package/{dist/components → components}/ResetCloneModal/index.js +0 -0
- /package/{dist/components → components}/SectionTitle/index.d.ts +0 -0
- /package/{dist/components → components}/SectionTitle/index.js +0 -0
- /package/{dist/components → components}/Select/index.d.ts +0 -0
- /package/{dist/components → components}/Select/index.js +0 -0
- /package/{dist/components → components}/SimpleModalControls/index.d.ts +0 -0
- /package/{dist/components → components}/SimpleModalControls/index.js +0 -0
- /package/{dist/components → components}/Spinner/icon.d.ts +0 -0
- /package/{dist/components → components}/Spinner/icon.js +0 -0
- /package/{dist/components → components}/Spinner/index.d.ts +0 -0
- /package/{dist/components → components}/Spinner/index.js +0 -0
- /package/{dist/components → components}/Status/index.d.ts +0 -0
- /package/{dist/components → components}/Status/index.js +0 -0
- /package/{dist/components → components}/StubContainer/index.d.ts +0 -0
- /package/{dist/components → components}/StubContainer/index.js +0 -0
- /package/{dist/components → components}/StubSpinner/index.d.ts +0 -0
- /package/{dist/components → components}/StubSpinner/index.js +0 -0
- /package/{dist/components → components}/StubSpinnerFlex/index.d.ts +0 -0
- /package/{dist/components → components}/StubSpinnerFlex/index.js +0 -0
- /package/{dist/components → components}/SyntaxHighlight/index.d.ts +0 -0
- /package/{dist/components → components}/SyntaxHighlight/index.js +0 -0
- /package/{dist/components → components}/Table/RowMenu/index.d.ts +0 -0
- /package/{dist/components → components}/Table/RowMenu/index.js +0 -0
- /package/{dist/components → components}/Table/index.d.ts +0 -0
- /package/{dist/components → components}/Table/index.js +0 -0
- /package/{dist/components → components}/Text/index.d.ts +0 -0
- /package/{dist/components → components}/Text/index.js +0 -0
- /package/{dist/components → components}/TextField/index.d.ts +0 -0
- /package/{dist/components → components}/TextField/index.js +0 -0
- /package/{dist/components → components}/Tooltip/index.d.ts +0 -0
- /package/{dist/components → components}/Tooltip/index.js +0 -0
- /package/{dist/config → config}/index.d.ts +0 -0
- /package/{dist/config → config}/index.js +0 -0
- /package/{dist/config → config}/links.d.ts +0 -0
- /package/{dist/config → config}/links.js +0 -0
- /package/{dist/helpers → helpers}/getEntropy.d.ts +0 -0
- /package/{dist/helpers → helpers}/getEntropy.js +0 -0
- /package/{dist/helpers → helpers}/localStorage.d.ts +0 -0
- /package/{dist/helpers → helpers}/localStorage.js +0 -0
- /package/{dist/helpers → helpers}/request.d.ts +0 -0
- /package/{dist/helpers → helpers}/request.js +0 -0
- /package/{dist/hooks → hooks}/useWindowDimensions.d.ts +0 -0
- /package/{dist/hooks → hooks}/useWindowDimensions.js +0 -0
- /package/{dist/icons → icons}/ArrowDropDown/index.d.ts +0 -0
- /package/{dist/icons → icons}/ArrowDropDown/index.js +0 -0
- /package/{dist/icons → icons}/Circle/index.d.ts +0 -0
- /package/{dist/icons → icons}/Circle/index.js +0 -0
- /package/{dist/icons → icons}/External/index.d.ts +0 -0
- /package/{dist/icons → icons}/External/index.js +0 -0
- /package/{dist/icons → icons}/Info/index.d.ts +0 -0
- /package/{dist/icons → icons}/Info/index.js +0 -0
- /package/{dist/icons → icons}/PostgresSQL/index.d.ts +0 -0
- /package/{dist/icons → icons}/PostgresSQL/index.js +0 -0
- /package/{dist/icons → icons}/Renewable/index.d.ts +0 -0
- /package/{dist/icons → icons}/Renewable/index.js +0 -0
- /package/{dist/icons → icons}/Shield/index.d.ts +0 -0
- /package/{dist/icons → icons}/Shield/index.js +0 -0
- /package/{dist/icons → icons}/Warning/index.d.ts +0 -0
- /package/{dist/icons → icons}/Warning/index.js +0 -0
- /package/{dist/pages → pages}/Branches/Branch/context.d.ts +0 -0
- /package/{dist/pages → pages}/Branches/Branch/context.js +0 -0
- /package/{dist/pages → pages}/Branches/Branch/index.d.ts +0 -0
- /package/{dist/pages → pages}/Branches/Branch/useCreatedStores.d.ts +0 -0
- /package/{dist/pages → pages}/Branches/Branch/useCreatedStores.js +0 -0
- /package/{dist/pages → pages}/Branches/components/BranchesTable/index.d.ts +0 -0
- /package/{dist/pages → pages}/Branches/components/Modals/DeleteBranchModal/index.d.ts +0 -0
- /package/{dist/pages → pages}/Branches/components/Modals/DeleteBranchModal/index.js +0 -0
- /package/{dist/pages → pages}/Branches/components/Modals/types.d.ts +0 -0
- /package/{dist/pages → pages}/Branches/components/Modals/types.js +0 -0
- /package/{dist/pages → pages}/Branches/index.d.ts +0 -0
- /package/{dist/pages → pages}/Clone/Status/index.d.ts +0 -0
- /package/{dist/pages → pages}/Clone/context.d.ts +0 -0
- /package/{dist/pages → pages}/Clone/context.js +0 -0
- /package/{dist/pages → pages}/Clone/index.d.ts +0 -0
- /package/{dist/pages → pages}/Clone/useCreatedStores.d.ts +0 -0
- /package/{dist/pages → pages}/Clone/useCreatedStores.js +0 -0
- /package/{dist/pages → pages}/Clone/utils/index.d.ts +0 -0
- /package/{dist/pages → pages}/Clone/utils/index.js +0 -0
- /package/{dist/pages → pages}/CreateBranch/index.d.ts +0 -0
- /package/{dist/pages → pages}/CreateBranch/index.js +0 -0
- /package/{dist/pages → pages}/CreateBranch/stores/Main.js +0 -0
- /package/{dist/pages → pages}/CreateBranch/useCreatedStores.d.ts +0 -0
- /package/{dist/pages → pages}/CreateBranch/useCreatedStores.js +0 -0
- /package/{dist/pages → pages}/CreateBranch/useForm.d.ts +0 -0
- /package/{dist/pages → pages}/CreateBranch/useForm.js +0 -0
- /package/{dist/pages → pages}/CreateBranch/utils/index.d.ts +0 -0
- /package/{dist/pages → pages}/CreateBranch/utils/index.js +0 -0
- /package/{dist/pages → pages}/CreateClone/index.d.ts +0 -0
- /package/{dist/pages → pages}/CreateClone/useCreatedStores.d.ts +0 -0
- /package/{dist/pages → pages}/CreateClone/useCreatedStores.js +0 -0
- /package/{dist/pages → pages}/CreateClone/useForm.d.ts +0 -0
- /package/{dist/pages → pages}/CreateClone/useForm.js +0 -0
- /package/{dist/pages → pages}/CreateClone/utils/index.d.ts +0 -0
- /package/{dist/pages → pages}/CreateClone/utils/index.js +0 -0
- /package/{dist/pages → pages}/CreateSnapshot/index.d.ts +0 -0
- /package/{dist/pages → pages}/CreateSnapshot/index.js +0 -0
- /package/{dist/pages → pages}/CreateSnapshot/stores/Main.d.ts +0 -0
- /package/{dist/pages → pages}/CreateSnapshot/stores/Main.js +0 -0
- /package/{dist/pages → pages}/CreateSnapshot/useCreatedStores.d.ts +0 -0
- /package/{dist/pages → pages}/CreateSnapshot/useCreatedStores.js +0 -0
- /package/{dist/pages → pages}/CreateSnapshot/useForm.d.ts +0 -0
- /package/{dist/pages → pages}/CreateSnapshot/useForm.js +0 -0
- /package/{dist/pages → pages}/CreateSnapshot/utils/index.d.ts +0 -0
- /package/{dist/pages → pages}/CreateSnapshot/utils/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Clones/ClonesList/ConnectionModal/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Clones/ClonesList/ConnectionModal/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Clones/ClonesList/MenuCell/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Clones/ClonesList/MenuCell/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Clones/ClonesList/MenuCell/utils.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Clones/ClonesList/MenuCell/utils.js +0 -0
- /package/{dist/pages → pages}/Instance/Clones/ClonesList/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Clones/ClonesList/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Clones/ClonesModal/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Clones/ClonesModal/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Clones/ClonesModal/utils.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Clones/ClonesModal/utils.js +0 -0
- /package/{dist/pages → pages}/Instance/Clones/Header/Item/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Clones/Header/Item/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Clones/Header/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Clones/Header/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Clones/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Clones/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Configuration/Header/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Configuration/Header/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Configuration/InputWithTooltip/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Configuration/InputWithTooltip/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Configuration/ResponseMessage/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Configuration/ResponseMessage/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Configuration/tooltipText.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Configuration/tooltipText.js +0 -0
- /package/{dist/pages → pages}/Instance/Configuration/utils/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/InactiveInstance/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/InactiveInstance/index.js +0 -0
- /package/{dist/pages → pages}/Instance/InactiveInstance/utils.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/InactiveInstance/utils.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Connection/ConnectModal/Content/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Connection/ConnectModal/Content/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Connection/ConnectModal/Content/utils.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Connection/ConnectModal/Content/utils.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Connection/ConnectModal/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Connection/ConnectModal/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Connection/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Connection/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Details/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Details/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/Disk/ActionsMenu/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/Disk/ActionsMenu/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/Disk/ProgressBar/PointerIcon.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/Disk/ProgressBar/PointerIcon.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/Disk/ProgressBar/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/Disk/ProgressBar/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/Disk/Status/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/Disk/Status/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/PoolSection/DatasetRow/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/PoolSection/DatasetRow/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/PoolSection/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/PoolSection/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Disks/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Icons/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Icons/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Retrieval/ConfirmFullRefreshModal/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Retrieval/ConfirmFullRefreshModal/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Retrieval/RefreshFailedAlert/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Retrieval/RefreshFailedAlert/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Retrieval/RetrievalModal/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Retrieval/RetrievalModal/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Retrieval/RetrievalTable/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Retrieval/RetrievalTable/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Retrieval/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Retrieval/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Retrieval/utils.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Retrieval/utils.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Snapshots/Calendar/Day/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Snapshots/Calendar/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Snapshots/Calendar/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Snapshots/Calendar/utils.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Snapshots/TimeLine/Day/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Snapshots/TimeLine/Day/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Snapshots/TimeLine/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Snapshots/TimeLine/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Snapshots/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Snapshots/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Snapshots/utils.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Status/InstanceResponseModal/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Status/InstanceResponseModal/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Status/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Status/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/Status/utils.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/Status/utils.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/components/Property/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/components/Property/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/components/Section/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/components/Section/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/components/ValueStatus/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/components/ValueStatus/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Info/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Info/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Snapshots/components/SnapshotHeader/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Snapshots/components/SnapshotHeader/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Snapshots/components/SnapshotsList/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Snapshots/components/SnapshotsModal/utils.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Snapshots/components/SnapshotsModal/utils.js +0 -0
- /package/{dist/pages → pages}/Instance/Snapshots/components/SnapshotsTable/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Snapshots/components/SnapshotsTable/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Snapshots/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Snapshots/utils/index.js +0 -0
- /package/{dist/pages → pages}/Instance/SnapshotsModal/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/SnapshotsModal/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Tabs/PlatformTabs.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Tabs/PlatformTabs.js +0 -0
- /package/{dist/pages → pages}/Instance/Tabs/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/Tabs/index.js +0 -0
- /package/{dist/pages → pages}/Instance/Tabs/styles.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/components/ErrorStub/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/components/ErrorStub/index.js +0 -0
- /package/{dist/pages → pages}/Instance/components/ModalReloadButton/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/components/ModalReloadButton/index.js +0 -0
- /package/{dist/pages → pages}/Instance/components/Tags/Tag/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/components/Tags/Tag/index.js +0 -0
- /package/{dist/pages → pages}/Instance/components/Tags/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/components/Tags/index.js +0 -0
- /package/{dist/pages → pages}/Instance/context.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/context.js +0 -0
- /package/{dist/pages → pages}/Instance/index.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/stores/ClonesModal.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/stores/ClonesModal.js +0 -0
- /package/{dist/pages → pages}/Instance/stores/SnapshotsModal.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/stores/SnapshotsModal.js +0 -0
- /package/{dist/pages → pages}/Instance/useCreatedStores.d.ts +0 -0
- /package/{dist/pages → pages}/Instance/useCreatedStores.js +0 -0
- /package/{dist/pages → pages}/Logs/Icons/PlusIcon.d.ts +0 -0
- /package/{dist/pages → pages}/Logs/Icons/PlusIcon.js +0 -0
- /package/{dist/pages → pages}/Logs/constants/index.d.ts +0 -0
- /package/{dist/pages → pages}/Logs/constants/index.js +0 -0
- /package/{dist/pages → pages}/Logs/hooks/useWsScroll.d.ts +0 -0
- /package/{dist/pages → pages}/Logs/hooks/useWsScroll.js +0 -0
- /package/{dist/pages → pages}/Logs/index.d.ts +0 -0
- /package/{dist/pages → pages}/Logs/index.js +0 -0
- /package/{dist/pages → pages}/Logs/utils/index.d.ts +0 -0
- /package/{dist/pages → pages}/Logs/utils/index.js +0 -0
- /package/{dist/pages → pages}/Logs/wsLogs.d.ts +0 -0
- /package/{dist/pages → pages}/Logs/wsLogs.js +0 -0
- /package/{dist/pages → pages}/Logs/wsSnackbar.d.ts +0 -0
- /package/{dist/pages → pages}/Logs/wsSnackbar.js +0 -0
- /package/{dist/pages → pages}/Snapshots/Snapshot/DestorySnapshotModal/index.d.ts +0 -0
- /package/{dist/pages → pages}/Snapshots/Snapshot/DestorySnapshotModal/index.js +0 -0
- /package/{dist/pages → pages}/Snapshots/Snapshot/context.d.ts +0 -0
- /package/{dist/pages → pages}/Snapshots/Snapshot/context.js +0 -0
- /package/{dist/pages → pages}/Snapshots/Snapshot/index.d.ts +0 -0
- /package/{dist/pages → pages}/Snapshots/Snapshot/useCreatedStores.d.ts +0 -0
- /package/{dist/pages → pages}/Snapshots/Snapshot/useCreatedStores.js +0 -0
- /package/{dist/styles → styles}/colors.d.ts +0 -0
- /package/{dist/styles → styles}/colors.js +0 -0
- /package/{dist/styles → styles}/icons.d.ts +0 -0
- /package/{dist/styles → styles}/icons.js +0 -0
- /package/{dist/styles → styles}/styles.d.ts +0 -0
- /package/{dist/styles → styles}/styles.js +0 -0
- /package/{dist/styles → styles}/theme.d.ts +0 -0
- /package/{dist/styles → styles}/theme.js +0 -0
- /package/{dist/styles → styles}/vars.d.ts +0 -0
- /package/{dist/styles → styles}/vars.js +0 -0
- /package/{dist/types → types}/api/endpoints/createBranch.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/createBranch.js +0 -0
- /package/{dist/types → types}/api/endpoints/createClone.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/createClone.js +0 -0
- /package/{dist/types → types}/api/endpoints/createSnapshot.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/createSnapshot.js +0 -0
- /package/{dist/types → types}/api/endpoints/deleteBranch.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/deleteBranch.js +0 -0
- /package/{dist/types → types}/api/endpoints/destroyClone.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/destroyClone.js +0 -0
- /package/{dist/types → types}/api/endpoints/destroySnapshot.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/destroySnapshot.js +0 -0
- /package/{dist/types → types}/api/endpoints/fullRefresh.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/fullRefresh.js +0 -0
- /package/{dist/types → types}/api/endpoints/getBranchSnapshot.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/getBranchSnapshot.js +0 -0
- /package/{dist/types → types}/api/endpoints/getBranches.js +0 -0
- /package/{dist/types → types}/api/endpoints/getClone.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/getClone.js +0 -0
- /package/{dist/types → types}/api/endpoints/getConfig.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/getConfig.js +0 -0
- /package/{dist/types → types}/api/endpoints/getEngine.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/getEngine.js +0 -0
- /package/{dist/types → types}/api/endpoints/getFullConfig.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/getFullConfig.js +0 -0
- /package/{dist/types → types}/api/endpoints/getInstance.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/getInstance.js +0 -0
- /package/{dist/types → types}/api/endpoints/getInstanceRetrieval.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/getInstanceRetrieval.js +0 -0
- /package/{dist/types → types}/api/endpoints/getSeImages.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/getSeImages.js +0 -0
- /package/{dist/types → types}/api/endpoints/getSnapshotList.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/getSnapshotList.js +0 -0
- /package/{dist/types → types}/api/endpoints/getSnapshots.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/getSnapshots.js +0 -0
- /package/{dist/types → types}/api/endpoints/getWSToken.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/getWSToken.js +0 -0
- /package/{dist/types → types}/api/endpoints/initWS.d.ts +0 -0
- /package/{dist/types → types}/api/endpoints/initWS.js +0 -0
- /package/{dist/types/api/endpoints/refreshInstance.js → types/api/endpoints/probeSource.js} +0 -0
- /package/{dist/types → types}/api/endpoints/refreshInstance.d.ts +0 -0
- /package/{dist/types/api/endpoints/resetClone.js → types/api/endpoints/refreshInstance.js} +0 -0
- /package/{dist/types → types}/api/endpoints/resetClone.d.ts +0 -0
- /package/{dist/types/api/endpoints/updateClone.js → types/api/endpoints/resetClone.js} +0 -0
- /package/{dist/types/api/endpoints/updateConfig.js → types/api/endpoints/updateBranch.js} +0 -0
- /package/{dist/types → types}/api/endpoints/updateClone.d.ts +0 -0
- /package/{dist/types/api/entities/dbSource.js → types/api/endpoints/updateClone.js} +0 -0
- /package/{dist/types → types}/api/endpoints/updateConfig.d.ts +0 -0
- /package/{dist/types → types}/api/entities/branchSnapshot.d.ts +0 -0
- /package/{dist/types → types}/api/entities/branchSnapshot.js +0 -0
- /package/{dist/types → types}/api/entities/branchSnapshots.js +0 -0
- /package/{dist/types → types}/api/entities/clone.js +0 -0
- /package/{dist/types → types}/api/entities/createBranch.d.ts +0 -0
- /package/{dist/types → types}/api/entities/createBranch.js +0 -0
- /package/{dist/types → types}/api/entities/createSnapshot.d.ts +0 -0
- /package/{dist/types → types}/api/entities/createSnapshot.js +0 -0
- /package/{dist/types → types}/api/entities/dbSource.d.ts +0 -0
- /package/{dist/types → types}/api/entities/instance.js +0 -0
- /package/{dist/types → types}/api/entities/instanceRetrieval.d.ts +0 -0
- /package/{dist/types → types}/api/entities/instanceRetrieval.js +0 -0
- /package/{dist/types → types}/api/entities/instanceState.js +0 -0
- /package/{dist/types → types}/api/entities/pool.d.ts +0 -0
- /package/{dist/types → types}/api/entities/pool.js +0 -0
- /package/{dist/types → types}/api/entities/snapshot.js +0 -0
- /package/{dist/types → types}/api/entities/wsToken.d.ts +0 -0
- /package/{dist/types → types}/api/entities/wsToken.js +0 -0
- /package/{dist/utils → utils}/connection.d.ts +0 -0
- /package/{dist/utils → utils}/connection.js +0 -0
- /package/{dist/utils → utils}/date.d.ts +0 -0
- /package/{dist/utils → utils}/instance.d.ts +0 -0
- /package/{dist/utils → utils}/instance.js +0 -0
- /package/{dist/utils → utils}/numbers.d.ts +0 -0
- /package/{dist/utils → utils}/numbers.js +0 -0
- /package/{dist/utils → utils}/react.d.ts +0 -0
- /package/{dist/utils → utils}/react.js +0 -0
- /package/{dist/utils → utils}/snapshot.d.ts +0 -0
- /package/{dist/utils → utils}/snapshot.js +0 -0
- /package/{dist/utils → utils}/strings.d.ts +0 -0
- /package/{dist/utils → utils}/strings.js +0 -0
- /package/{dist/utils → utils}/units.d.ts +0 -0
- /package/{dist/utils → utils}/units.js +0 -0
|
@@ -2,7 +2,7 @@ import { makeAutoObservable } from 'mobx';
|
|
|
2
2
|
import { SnapshotsStore, } from '@postgres.ai/shared/stores/Snapshots';
|
|
3
3
|
import { getTextFromUnknownApiError } from '@postgres.ai/shared/utils/api';
|
|
4
4
|
import { checkIsCloneStable } from '@postgres.ai/shared/utils/clone';
|
|
5
|
-
|
|
5
|
+
import { ClonePoller } from '@postgres.ai/shared/utils/clonePoller';
|
|
6
6
|
export class MainStore {
|
|
7
7
|
constructor(api) {
|
|
8
8
|
this.instance = null;
|
|
@@ -11,6 +11,7 @@ export class MainStore {
|
|
|
11
11
|
this.getSnapshotsError = null;
|
|
12
12
|
this.clone = null;
|
|
13
13
|
this.cloneError = null;
|
|
14
|
+
this.poller = new ClonePoller();
|
|
14
15
|
this.load = async (instanceId) => {
|
|
15
16
|
var _a, _b;
|
|
16
17
|
const [instance, isLoadedSnapshots] = await Promise.all([
|
|
@@ -26,6 +27,7 @@ export class MainStore {
|
|
|
26
27
|
this.createClone = async (data) => {
|
|
27
28
|
if (!this.instance)
|
|
28
29
|
return false;
|
|
30
|
+
this.poller.start();
|
|
29
31
|
const { response, error } = await this.api.createClone({
|
|
30
32
|
...data,
|
|
31
33
|
instanceId: this.instance.id,
|
|
@@ -61,13 +63,16 @@ export class MainStore {
|
|
|
61
63
|
this.getSnapshotsError = await error.json().then((err) => err);
|
|
62
64
|
return response;
|
|
63
65
|
};
|
|
66
|
+
this.stopPolling = () => this.poller.stop();
|
|
64
67
|
this.updateCloneUntilStable = async (args) => {
|
|
65
|
-
|
|
68
|
+
if (this.poller.isStopped)
|
|
69
|
+
return;
|
|
70
|
+
this.poller.cancel();
|
|
66
71
|
const { response, error } = await this.api.getClone(args);
|
|
67
72
|
if (response) {
|
|
68
73
|
this.clone = response;
|
|
69
74
|
if (!this.isCloneStable)
|
|
70
|
-
this.
|
|
75
|
+
this.poller.scheduleNext(() => this.updateCloneUntilStable(args));
|
|
71
76
|
}
|
|
72
77
|
if (error)
|
|
73
78
|
this.cloneError = await error.json().then((err) => (err === null || err === void 0 ? void 0 : err.message) || err);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { PhysicalEnv } from '../../useForm';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
envs: PhysicalEnv[];
|
|
5
|
+
onChange: (envs: PhysicalEnv[]) => void;
|
|
6
|
+
suggestions?: string[];
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
keyErrors?: (string | undefined)[];
|
|
9
|
+
};
|
|
10
|
+
export declare const MASKED_ENV_VALUE = "****";
|
|
11
|
+
export declare const isMaskedEnvValue: (value: string) => boolean;
|
|
12
|
+
export declare const EnvsEditor: ({ envs, onChange, suggestions, disabled, keyErrors, }: Props) => JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, IconButton, TextField, Typography } from '@material-ui/core';
|
|
3
|
+
import Box from '@mui/material/Box';
|
|
4
|
+
// MASKED_ENV_VALUE is what the engine returns instead of a stored env value:
|
|
5
|
+
// envs carry WAL-G and pgBackRest credentials, so GET /admin/config lists
|
|
6
|
+
// the keys only. Posting the mask back for a key keeps the stored value.
|
|
7
|
+
export const MASKED_ENV_VALUE = '****';
|
|
8
|
+
export const isMaskedEnvValue = (value) => value === MASKED_ENV_VALUE;
|
|
9
|
+
const MASKED_HINT = 'Stored on the server; kept unless you change it';
|
|
10
|
+
// EnvsEditor renders a rows-of-key/value editor with add/remove and a
|
|
11
|
+
// click-to-add suggestion list. Engine consumes envs as a free-form map
|
|
12
|
+
// (physical.go:76, CopyOptions.Envs map[string]string); the UI is a thin
|
|
13
|
+
// surface over that map.
|
|
14
|
+
export const EnvsEditor = ({ envs, onChange, suggestions = [], disabled, keyErrors = [], }) => {
|
|
15
|
+
const updateRow = (i, patch) => {
|
|
16
|
+
const next = envs.slice();
|
|
17
|
+
next[i] = { ...next[i], ...patch };
|
|
18
|
+
onChange(next);
|
|
19
|
+
};
|
|
20
|
+
const removeRow = (i) => {
|
|
21
|
+
const next = envs.slice();
|
|
22
|
+
next.splice(i, 1);
|
|
23
|
+
onChange(next);
|
|
24
|
+
};
|
|
25
|
+
const addRow = (key = '') => {
|
|
26
|
+
onChange([...envs, { key, value: '' }]);
|
|
27
|
+
};
|
|
28
|
+
const usedKeys = new Set(envs.map((e) => e.key));
|
|
29
|
+
const hasMasked = envs.some((e) => isMaskedEnvValue(e.value));
|
|
30
|
+
return (_jsxs(Box, { mt: 1, "data-testid": "envs-editor", children: [_jsx(Typography, { variant: "subtitle2", children: "Environment variables" }), hasMasked && (_jsx(Box, { mt: 0.5, children: _jsxs(Typography, { variant: "caption", color: "textSecondary", "data-testid": "envs-masked-hint", children: ["Values shown as ", MASKED_ENV_VALUE, " are stored on the server and are kept unless you change them. Renaming such a variable requires entering its value again."] }) })), envs.length === 0 ? (_jsx(Box, { mt: 1, mb: 1, children: _jsx(Typography, { variant: "caption", color: "textSecondary", children: "No environment variables set. Use suggestions below or click \"Add\"." }) })) : (envs.map((env, i) => (_jsxs(Box, { display: "flex", alignItems: "center", mt: 1, "data-testid": `envs-row-${i}`, children: [_jsx(TextField, { size: "small", label: "Name", value: env.key, disabled: disabled, error: Boolean(keyErrors[i]), helperText: keyErrors[i], onChange: (e) => updateRow(i, { key: e.target.value }), inputProps: { 'data-testid': `envs-key-${i}` } }), _jsx(Box, { mx: 1, children: _jsx(TextField, { size: "small", label: "Value", value: env.value, disabled: disabled, helperText: isMaskedEnvValue(env.value) ? MASKED_HINT : undefined, onChange: (e) => updateRow(i, { value: e.target.value }), inputProps: { 'data-testid': `envs-value-${i}` } }) }), _jsx(IconButton, { size: "small", "aria-label": "remove env", disabled: disabled, onClick: () => removeRow(i), "data-testid": `envs-remove-${i}`, children: "\u00D7" })] }, i)))), _jsx(Box, { mt: 1, children: _jsx(Button, { size: "small", variant: "outlined", disabled: disabled, onClick: () => addRow(), "data-testid": "envs-add", children: "+ Add" }) }), suggestions.length > 0 && (_jsxs(Box, { mt: 1, children: [_jsx(Typography, { variant: "caption", color: "textSecondary", children: "Suggestions:" }), _jsx(Box, { mt: 0.5, children: suggestions.map((s) => (_jsx(Button, { size: "small", variant: "text", disabled: disabled || usedKeys.has(s), onClick: () => addRow(s), "data-testid": `envs-suggest-${s}`, children: s }, s))) })] }))] }));
|
|
31
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { FormValues } from '../../useForm';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
values: FormValues;
|
|
5
|
+
onChange: <K extends keyof FormValues>(key: K, value: FormValues[K]) => void;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
envsKeyErrors?: (string | undefined)[];
|
|
8
|
+
};
|
|
9
|
+
export declare const PgBackRest: ({ values, onChange, disabled, envsKeyErrors, }: Props) => JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Checkbox, FormControlLabel, TextField, Typography, } from '@material-ui/core';
|
|
3
|
+
import Box from '@mui/material/Box';
|
|
4
|
+
import { EnvsEditor } from '../EnvsEditor';
|
|
5
|
+
// pgBackRest exposes two structured fields (stanza, delta); repo paths, S3
|
|
6
|
+
// keys, archive options all live in the envs map. See
|
|
7
|
+
// engine/internal/retrieval/engine/postgres/physical/pgbackrest.go:23-26 and
|
|
8
|
+
// the example envs in config.example.physical_pgbackrest.yml:84-99.
|
|
9
|
+
const PGBACKREST_ENV_SUGGESTIONS = [
|
|
10
|
+
'PGBACKREST_REPO',
|
|
11
|
+
'PGBACKREST_REPO1_TYPE',
|
|
12
|
+
'PGBACKREST_REPO1_PATH',
|
|
13
|
+
'PGBACKREST_REPO1_HOST',
|
|
14
|
+
'PGBACKREST_REPO1_HOST_USER',
|
|
15
|
+
'PGBACKREST_REPO1_S3_BUCKET',
|
|
16
|
+
'PGBACKREST_REPO1_S3_ENDPOINT',
|
|
17
|
+
'PGBACKREST_REPO1_S3_KEY',
|
|
18
|
+
'PGBACKREST_REPO1_S3_KEY_SECRET',
|
|
19
|
+
'PGBACKREST_REPO1_S3_REGION',
|
|
20
|
+
'PGBACKREST_LOG_LEVEL_CONSOLE',
|
|
21
|
+
'PGBACKREST_PROCESS_MAX',
|
|
22
|
+
];
|
|
23
|
+
export const PgBackRest = ({ values, onChange, disabled, envsKeyErrors, }) => {
|
|
24
|
+
const onEnvsChange = (envs) => onChange('physicalEnvs', envs);
|
|
25
|
+
return (_jsxs(Box, { mt: 2, "data-testid": "pgbackrest-form", children: [_jsx(Typography, { variant: "subtitle1", children: "pgBackRest" }), _jsx(Box, { mt: 1, children: _jsx(TextField, { fullWidth: true, label: "Stanza", placeholder: "my-stanza", value: values.physicalPgbackrestStanza, disabled: disabled, onChange: (e) => onChange('physicalPgbackrestStanza', e.target.value), helperText: "Stanza name (must match the stanza configured in your pgBackRest setup).", inputProps: { 'data-testid': 'pgbackrest-stanza' } }) }), _jsx(Box, { mt: 1, children: _jsx(FormControlLabel, { control: _jsx(Checkbox, { checked: values.physicalPgbackrestDelta, disabled: disabled, onChange: (e) => onChange('physicalPgbackrestDelta', e.target.checked), inputProps: {
|
|
26
|
+
'aria-label': 'delta',
|
|
27
|
+
'data-testid': 'pgbackrest-delta',
|
|
28
|
+
} }), label: "Delta restore" }) }), _jsx(EnvsEditor, { envs: values.physicalEnvs, onChange: onEnvsChange, suggestions: PGBACKREST_ENV_SUGGESTIONS, disabled: disabled, keyErrors: envsKeyErrors })] }));
|
|
29
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { FormValues } from '../../useForm';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
values: FormValues;
|
|
5
|
+
onChange: <K extends keyof FormValues>(key: K, value: FormValues[K]) => void;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const Sync: ({ values, onChange, disabled }: Props) => JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Checkbox, FormControlLabel, TextField, Typography, } from '@material-ui/core';
|
|
3
|
+
import Box from '@mui/material/Box';
|
|
4
|
+
// Shared section rendered below WAL-G / pgBackRest with the structured fields
|
|
5
|
+
// that apply across all physical sub-tools (sync.enabled and dockerImage). The
|
|
6
|
+
// engine surfaces more knobs (sync.healthCheck, sync.configs, recovery target,
|
|
7
|
+
// custom restore command), but they remain YAML-only for 4.2 to keep the
|
|
8
|
+
// projection footprint flat.
|
|
9
|
+
export const Sync = ({ values, onChange, disabled }) => {
|
|
10
|
+
return (_jsxs(Box, { mt: 2, "data-testid": "physical-sync", children: [_jsx(Typography, { variant: "subtitle1", children: "Sync container & image" }), _jsx(Box, { mt: 1, children: _jsx(TextField, { fullWidth: true, label: "Docker image", placeholder: "postgresai/extended-postgres:18-0.6.2", value: values.physicalDockerImage, disabled: disabled, onChange: (e) => onChange('physicalDockerImage', e.target.value), helperText: "Postgres image for restore/sync containers. Major version must match the source.", inputProps: { 'data-testid': 'physical-docker-image' } }) }), _jsx(Box, { mt: 1, children: _jsx(FormControlLabel, { control: _jsx(Checkbox, { checked: values.physicalSyncEnabled, disabled: disabled, onChange: (e) => onChange('physicalSyncEnabled', e.target.checked), inputProps: {
|
|
11
|
+
'aria-label': 'sync enabled',
|
|
12
|
+
'data-testid': 'physical-sync-enabled',
|
|
13
|
+
} }), label: "Run sync container" }) }), _jsx(Box, { mt: 1, children: _jsx(Typography, { variant: "caption", color: "textSecondary", children: "For advanced sync settings (health check, sync postgres configs, recovery target), edit the YAML config directly." }) })] }));
|
|
14
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { FormValues } from '../../useForm';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
values: FormValues;
|
|
5
|
+
onChange: <K extends keyof FormValues>(key: K, value: FormValues[K]) => void;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
envsKeyErrors?: (string | undefined)[];
|
|
8
|
+
};
|
|
9
|
+
export declare const Walg: ({ values, onChange, disabled, envsKeyErrors }: Props) => JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { TextField, Typography } from '@material-ui/core';
|
|
3
|
+
import Box from '@mui/material/Box';
|
|
4
|
+
import { EnvsEditor } from '../EnvsEditor';
|
|
5
|
+
// WAL-G has one structured field (BackupName, defaulting to "LATEST"); storage
|
|
6
|
+
// backend, bucket, prefix, and credentials all live in the envs map. See
|
|
7
|
+
// engine/internal/retrieval/engine/postgres/physical/wal_g.go:36-38 and the
|
|
8
|
+
// example envs in config.example.physical_walg.yml:84-86.
|
|
9
|
+
const WALG_ENV_SUGGESTIONS = [
|
|
10
|
+
'WALG_GS_PREFIX',
|
|
11
|
+
'WALG_S3_PREFIX',
|
|
12
|
+
'WALG_FILE_PREFIX',
|
|
13
|
+
'GOOGLE_APPLICATION_CREDENTIALS',
|
|
14
|
+
'AWS_ACCESS_KEY_ID',
|
|
15
|
+
'AWS_SECRET_ACCESS_KEY',
|
|
16
|
+
'AWS_REGION',
|
|
17
|
+
];
|
|
18
|
+
export const Walg = ({ values, onChange, disabled, envsKeyErrors }) => {
|
|
19
|
+
const onEnvsChange = (envs) => onChange('physicalEnvs', envs);
|
|
20
|
+
return (_jsxs(Box, { mt: 2, "data-testid": "walg-form", children: [_jsx(Typography, { variant: "subtitle1", children: "WAL-G" }), _jsx(Box, { mt: 1, children: _jsx(TextField, { fullWidth: true, label: "Backup name", placeholder: "LATEST", value: values.physicalWalgBackupName, disabled: disabled, onChange: (e) => onChange('physicalWalgBackupName', e.target.value), helperText: 'Which backup to restore. "LATEST" picks the most recent.', inputProps: { 'data-testid': 'walg-backup-name' } }) }), _jsx(Box, { mt: 2, children: _jsx(Typography, { variant: "caption", color: "textSecondary", children: "Storage backend, bucket, prefix, and credentials all live in the envs map. Do not paste credentials into the backup name field or any URL." }) }), _jsx(EnvsEditor, { envs: values.physicalEnvs, onChange: onEnvsChange, suggestions: WALG_ENV_SUGGESTIONS, disabled: disabled, keyErrors: envsKeyErrors })] }));
|
|
21
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { FormValues } from '../useForm';
|
|
3
|
+
declare type Props = {
|
|
4
|
+
values: FormValues;
|
|
5
|
+
onChange: <K extends keyof FormValues>(key: K, value: FormValues[K]) => void;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
envsKeyErrors?: (string | undefined)[];
|
|
8
|
+
};
|
|
9
|
+
export declare const PhysicalMode: ({ values, onChange, disabled, envsKeyErrors, }: Props) => JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { FormControl, FormControlLabel, Radio, RadioGroup, Typography, } from '@material-ui/core';
|
|
3
|
+
import Box from '@mui/material/Box';
|
|
4
|
+
import { PgBackRest } from './PgBackRest';
|
|
5
|
+
import { Sync } from './Sync';
|
|
6
|
+
import { Walg } from './Walg';
|
|
7
|
+
// Physical-mode restore tool selector + sub-form. Two values surface in the
|
|
8
|
+
// UI: WAL-G and pgBackRest, the two tool values the engine accepts outside
|
|
9
|
+
// customTool. pg_basebackup is invoked via the customTool path and remains
|
|
10
|
+
// YAML-only; when the loaded projection has `tool: customTool` we render a
|
|
11
|
+
// banner instead of the sub-form, keeping the user from accidentally wiping a
|
|
12
|
+
// hand-edited customTool config.
|
|
13
|
+
export const PhysicalMode = ({ values, onChange, disabled, envsKeyErrors, }) => {
|
|
14
|
+
const tool = values.physicalTool;
|
|
15
|
+
const isCustomTool = tool === 'customTool';
|
|
16
|
+
return (_jsxs(Box, { mt: 1, "data-testid": "physical-mode", children: [_jsx(Typography, { variant: "subtitle2", children: "Restore tool" }), isCustomTool ? (_jsx(Box, { mt: 1, "data-testid": "physical-custom-tool-banner", children: _jsx(Typography, { variant: "body2", color: "textSecondary", children: "This config uses a custom restore tool (e.g. pg_basebackup). The UI cannot edit customTool configurations \u2014 edit the YAML directly." }) })) : (_jsx(FormControl, { children: _jsxs(RadioGroup, { row: true, value: tool, onChange: (_, value) => onChange('physicalTool', value), "aria-label": "physical restore tool", children: [_jsx(FormControlLabel, { value: "walg", control: _jsx(Radio, { disabled: disabled }), label: "WAL-G" }), _jsx(FormControlLabel, { value: "pgbackrest", control: _jsx(Radio, { disabled: disabled }), label: "pgBackRest" })] }) })), !isCustomTool && tool === 'walg' && (_jsx(Walg, { values: values, onChange: onChange, disabled: disabled, envsKeyErrors: envsKeyErrors })), !isCustomTool && tool === 'pgbackrest' && (_jsx(PgBackRest, { values: values, onChange: onChange, disabled: disabled, envsKeyErrors: envsKeyErrors })), !isCustomTool && tool && (_jsx(Sync, { values: values, onChange: onChange, disabled: disabled }))] }));
|
|
17
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ProposedConfig } from '@postgres.ai/shared/types/api/endpoints/probeSource';
|
|
3
|
+
import { ResolvedImage } from '../configOptions';
|
|
4
|
+
declare type Props = {
|
|
5
|
+
proposed: ProposedConfig;
|
|
6
|
+
resolved: ResolvedImage;
|
|
7
|
+
applying: boolean;
|
|
8
|
+
applyError: string | null;
|
|
9
|
+
onApply: () => void;
|
|
10
|
+
onEdit: () => void;
|
|
11
|
+
};
|
|
12
|
+
export declare const PreviewCard: ({ proposed, resolved, applying, applyError, onApply, onEdit, }: Props) => JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Link, Typography } from '@material-ui/core';
|
|
3
|
+
import Box from '@mui/material/Box';
|
|
4
|
+
import { Spinner } from '@postgres.ai/shared/components/Spinner';
|
|
5
|
+
import { providerKeyToImage } from '../configOptions';
|
|
6
|
+
const Field = ({ label, value }) => (_jsxs(Box, { display: "flex", mb: 0.5, children: [_jsx(Box, { minWidth: 220, fontWeight: 600, children: label }), _jsx(Box, { minWidth: 0, style: { overflowWrap: 'anywhere' }, children: value })] }));
|
|
7
|
+
const Callout = ({ children }) => (_jsx(Box, { mt: 1, p: 1, bgcolor: "#fff8e1", borderLeft: "4px solid #f5a623", fontSize: 13, style: { overflowWrap: 'anywhere' }, children: children }));
|
|
8
|
+
export const PreviewCard = ({ proposed, resolved, applying, applyError, onApply, onEdit, }) => {
|
|
9
|
+
var _a, _b, _c;
|
|
10
|
+
const mapping = providerKeyToImage(proposed.dockerImage, proposed.pgMajorVersion);
|
|
11
|
+
const preloadLibraries = (_a = resolved.sharedPreloadLibraries) !== null && _a !== void 0 ? _a : proposed.sharedPreloadLibraries;
|
|
12
|
+
const tuningEntries = Object.entries((_b = proposed.queryTuning) !== null && _b !== void 0 ? _b : {});
|
|
13
|
+
return (_jsxs(Box, { mt: 2, p: 2, border: "1px solid #e0e0e0", borderRadius: 4, "data-testid": "preview-card", children: [_jsx(Typography, { variant: "h6", children: "Proposed configuration" }), _jsxs(Box, { mt: 2, children: [_jsx(Field, { label: "Detected provider", value: proposed.detectedProvider || 'unknown' }), _jsx(Field, { label: "Docker image", value: resolved.dockerPath || mapping.imageType }), _jsx(Field, { label: "Postgres major version", value: String(proposed.pgMajorVersion || 'unknown') }), _jsx(Field, { label: "Databases", value: ((_c = proposed.databases) === null || _c === void 0 ? void 0 : _c.join(', ')) || '(none)' }), _jsx(Field, { label: "shared_buffers", value: proposed.sharedBuffers || '' }), _jsx(Field, { label: "shared_preload_libraries", value: preloadLibraries || '' })] }), tuningEntries.length > 0 && (_jsxs(Box, { mt: 2, children: [_jsx(Typography, { variant: "subtitle2", children: "Query tuning" }), _jsx(Box, { component: "table", mt: 1, style: { borderCollapse: 'collapse' }, children: _jsx("tbody", { children: tuningEntries.map(([k, v]) => (_jsxs("tr", { children: [_jsx("td", { style: { padding: '2px 16px 2px 0', fontWeight: 600 }, children: k }), _jsx("td", { style: { padding: '2px 0' }, children: v })] }, k))) }) })] })), _jsxs(Box, { mt: 2, children: [(mapping.fallback || proposed.detectedProvider === 'generic') && (_jsx(Callout, { children: "Could not detect a managed cloud provider; using the generic Postgres image. Switch to Expert mode if your source runs on a managed service and we missed it." })), !proposed.memoryProbed && (_jsxs(Callout, { children: ["Could not detect host memory; ", _jsx("code", { children: "shared_buffers" }), " is set to a 1\u00A0GB safe default. Adjust in Expert mode if your host has more RAM."] })), _jsx(Callout, { children: "Query tuning is copied from your source. If you use the RDS refresh tool, these values may not match production \u2014 review in Expert mode after the first retrieval run." }), resolved.isSe ? (_jsxs(Callout, { children: ["Shipping the ", _jsx("code", { children: resolved.dockerPath }), " image with its curated ", _jsx("code", { children: "shared_preload_libraries" }), " preset, so the detected extensions are bundled."] })) : (_jsxs(Callout, { children: ["We'll ship ", _jsx("code", { children: preloadLibraries }), ". If the chosen image does not bundle one of these libraries, the clone container will fail to start with a \"could not load library\" error \u2014 check", ' ', _jsx("code", { children: "docker logs dblab_server" }), " after Apply."] }))] }), _jsxs(Box, { mt: 2, display: "flex", alignItems: "center", children: [_jsxs(Button, { variant: "contained", color: "secondary", onClick: onApply, disabled: applying, "data-testid": "preview-apply", children: ["Apply & start retrieval", applying && _jsx(Spinner, { size: "sm" })] }), _jsx(Box, { ml: 2, children: _jsx(Link, { component: "button", type: "button", onClick: onEdit, "data-testid": "preview-edit", children: "Edit before applying" }) })] }), applyError && (_jsx(Box, { mt: 1, color: "#d32f2f", fontSize: 13, "data-testid": "apply-error", children: applyError }))] }));
|
|
14
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { SeImages } from '@postgres.ai/shared/types/api/endpoints/getSeImages';
|
|
3
|
+
import { ProposedConfig } from '@postgres.ai/shared/types/api/endpoints/probeSource';
|
|
4
|
+
import { ResolvedImage } from '../configOptions';
|
|
5
|
+
import { FormValues } from '../useForm';
|
|
6
|
+
declare type Props = {
|
|
7
|
+
instanceId: string;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
onApplied?: () => void;
|
|
10
|
+
onEdit?: (proposed: ProposedConfig, password: string) => void;
|
|
11
|
+
};
|
|
12
|
+
export declare const buildProjectionFromProposed: (proposed: ProposedConfig, password: string, resolved?: ResolvedImage) => FormValues;
|
|
13
|
+
export declare const resolveProbeImage: (proposed: ProposedConfig, getSeImages: (args: {
|
|
14
|
+
packageGroup: string;
|
|
15
|
+
}) => Promise<SeImages[] | null | undefined>) => Promise<ResolvedImage>;
|
|
16
|
+
export declare const SimpleMode: (({ instanceId, disabled, onApplied, onEdit }: Props) => JSX.Element) & {
|
|
17
|
+
displayName: string;
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { observer } from 'mobx-react-lite';
|
|
4
|
+
import { Button, TextField, Typography } from '@material-ui/core';
|
|
5
|
+
import Box from '@mui/material/Box';
|
|
6
|
+
import { Spinner } from '@postgres.ai/shared/components/Spinner';
|
|
7
|
+
import { useStores } from '@postgres.ai/shared/pages/Instance/context';
|
|
8
|
+
import { providerKeyToImage, resolveDockerImagePath, selectSeImage, } from '../configOptions';
|
|
9
|
+
import { PreviewCard } from './PreviewCard';
|
|
10
|
+
// genericFallbackImage resolves the generic CE image for a probed source. Used
|
|
11
|
+
// when no SE image is available (CE, or a managed provider with no SE image for
|
|
12
|
+
// the detected major version).
|
|
13
|
+
const genericFallbackImage = (proposed) => {
|
|
14
|
+
const mapping = providerKeyToImage(proposed.dockerImage, proposed.pgMajorVersion);
|
|
15
|
+
const isGeneric = mapping.imageType === 'Generic Postgres';
|
|
16
|
+
return {
|
|
17
|
+
dockerPath: resolveDockerImagePath(proposed.dockerImage, proposed.pgMajorVersion, proposed.dockerTag),
|
|
18
|
+
dockerTag: isGeneric ? proposed.dockerTag || mapping.defaultTag || '' : '',
|
|
19
|
+
sharedPreloadLibraries: proposed.sharedPreloadLibraries,
|
|
20
|
+
isSe: false,
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
// Translates a ProposedConfig from POST /admin/probe-source into the
|
|
24
|
+
// FormValues shape the Expert form uses. Both Apply (→ updateConfig) and
|
|
25
|
+
// Edit (→ formik.setValues) consume it, so the engine receives the same
|
|
26
|
+
// projection regardless of which flow the user picks. The resolved image (SE
|
|
27
|
+
// or generic) is passed in so the preview and the applied config never diverge.
|
|
28
|
+
export const buildProjectionFromProposed = (proposed, password, resolved) => {
|
|
29
|
+
var _a;
|
|
30
|
+
const mapping = providerKeyToImage(proposed.dockerImage, proposed.pgMajorVersion);
|
|
31
|
+
const isGeneric = mapping.imageType === 'Generic Postgres';
|
|
32
|
+
const image = resolved !== null && resolved !== void 0 ? resolved : genericFallbackImage(proposed);
|
|
33
|
+
return {
|
|
34
|
+
debug: false,
|
|
35
|
+
dockerImage: isGeneric
|
|
36
|
+
? String(proposed.pgMajorVersion)
|
|
37
|
+
: mapping.imageType,
|
|
38
|
+
dockerImageType: mapping.imageType,
|
|
39
|
+
dockerPath: image.dockerPath,
|
|
40
|
+
dockerTag: image.dockerTag,
|
|
41
|
+
sharedBuffers: proposed.sharedBuffers,
|
|
42
|
+
sharedPreloadLibraries: (_a = image.sharedPreloadLibraries) !== null && _a !== void 0 ? _a : proposed.sharedPreloadLibraries,
|
|
43
|
+
// tuningParams is typed as string on FormValues but updateConfig.ts
|
|
44
|
+
// spreads it as a key-value object; cast matches the Expert form's
|
|
45
|
+
// formatTuningParamsToObj(...) as unknown as string pattern.
|
|
46
|
+
tuningParams: { ...proposed.queryTuning },
|
|
47
|
+
timetable: '0 0 * * *',
|
|
48
|
+
dbname: proposed.source.dbname,
|
|
49
|
+
host: proposed.source.host,
|
|
50
|
+
port: String(proposed.source.port),
|
|
51
|
+
username: proposed.source.username,
|
|
52
|
+
password,
|
|
53
|
+
databases: proposed.databases.join(' '),
|
|
54
|
+
dumpParallelJobs: '',
|
|
55
|
+
dumpIgnoreErrors: false,
|
|
56
|
+
restoreParallelJobs: '',
|
|
57
|
+
// managed sources reference cloud-only extensions/objects (e.g. supabase_vault)
|
|
58
|
+
// that are absent from the clone image; best-effort restore skips them.
|
|
59
|
+
restoreIgnoreErrors: true,
|
|
60
|
+
restoreConfigs: '',
|
|
61
|
+
pgDumpCustomOptions: '',
|
|
62
|
+
// skip ownership and privileges on restore: managed sources (Supabase, RDS)
|
|
63
|
+
// reference roles that do not exist in the clone, which would abort pg_restore.
|
|
64
|
+
pgRestoreCustomOptions: '--no-owner --no-privileges --no-tablespaces',
|
|
65
|
+
retrievalMode: 'logical',
|
|
66
|
+
physicalTool: '',
|
|
67
|
+
physicalDockerImage: '',
|
|
68
|
+
physicalSyncEnabled: false,
|
|
69
|
+
physicalWalgBackupName: '',
|
|
70
|
+
physicalPgbackrestStanza: '',
|
|
71
|
+
physicalPgbackrestDelta: false,
|
|
72
|
+
physicalEnvs: [],
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
// resolveProbeImage selects the platform SE image for a managed provider when
|
|
76
|
+
// the SE catalog is reachable — SE/Enterprise instances expose it (platformUrl
|
|
77
|
+
// set), CE returns undefined. Falls back to the generic image for CE and for
|
|
78
|
+
// managed providers with no SE image at the detected major version.
|
|
79
|
+
export const resolveProbeImage = async (proposed, getSeImages) => {
|
|
80
|
+
var _a;
|
|
81
|
+
const mapping = providerKeyToImage(proposed.dockerImage, proposed.pgMajorVersion);
|
|
82
|
+
if (mapping.imageType !== 'Generic Postgres') {
|
|
83
|
+
const seImages = await getSeImages({ packageGroup: mapping.imageType });
|
|
84
|
+
const se = selectSeImage(seImages, proposed.pgMajorVersion);
|
|
85
|
+
if (se) {
|
|
86
|
+
return {
|
|
87
|
+
dockerPath: se.location,
|
|
88
|
+
dockerTag: se.tag,
|
|
89
|
+
sharedPreloadLibraries: (_a = se.pg_config_presets) === null || _a === void 0 ? void 0 : _a.shared_preload_libraries,
|
|
90
|
+
isSe: true,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return genericFallbackImage(proposed);
|
|
95
|
+
};
|
|
96
|
+
export const SimpleMode = observer(({ instanceId, disabled, onApplied, onEdit }) => {
|
|
97
|
+
const stores = useStores();
|
|
98
|
+
const main = stores.main;
|
|
99
|
+
const [url, setUrl] = useState('');
|
|
100
|
+
const [password, setPassword] = useState('');
|
|
101
|
+
const [probing, setProbing] = useState(false);
|
|
102
|
+
const [probeError, setProbeError] = useState(null);
|
|
103
|
+
const [proposed, setProposed] = useState(null);
|
|
104
|
+
const [resolved, setResolved] = useState(null);
|
|
105
|
+
const [applying, setApplying] = useState(false);
|
|
106
|
+
const [applyError, setApplyError] = useState(null);
|
|
107
|
+
const onDetect = async () => {
|
|
108
|
+
setProbing(true);
|
|
109
|
+
setProbeError(null);
|
|
110
|
+
setProposed(null);
|
|
111
|
+
setResolved(null);
|
|
112
|
+
setApplyError(null);
|
|
113
|
+
const result = await main.probeSource({ url, password });
|
|
114
|
+
if (!result) {
|
|
115
|
+
setProbing(false);
|
|
116
|
+
setProbeError('Probe is not available on this instance.');
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (result.error) {
|
|
120
|
+
setProbing(false);
|
|
121
|
+
setProbeError(result.error.message);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (result.response) {
|
|
125
|
+
const image = await resolveProbeImage(result.response, main.getSeImages);
|
|
126
|
+
setResolved(image);
|
|
127
|
+
setProposed(result.response);
|
|
128
|
+
}
|
|
129
|
+
setProbing(false);
|
|
130
|
+
};
|
|
131
|
+
const onApply = async () => {
|
|
132
|
+
var _a;
|
|
133
|
+
if (!proposed || !resolved)
|
|
134
|
+
return;
|
|
135
|
+
setApplying(true);
|
|
136
|
+
setApplyError(null);
|
|
137
|
+
try {
|
|
138
|
+
const projection = buildProjectionFromProposed(proposed, password, resolved);
|
|
139
|
+
const response = await main.updateConfig(projection, instanceId);
|
|
140
|
+
if (!response) {
|
|
141
|
+
setApplyError((_a = main.configError) !== null && _a !== void 0 ? _a : 'Could not apply the proposed configuration.');
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const refresh = await main.fullRefresh(instanceId);
|
|
145
|
+
if (refresh === null || refresh === void 0 ? void 0 : refresh.error) {
|
|
146
|
+
setApplyError(`Configuration applied, but starting data retrieval failed: ${refresh.error.message}`);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
onApplied === null || onApplied === void 0 ? void 0 : onApplied();
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
setApplyError(err instanceof Error
|
|
153
|
+
? err.message
|
|
154
|
+
: 'Could not apply the proposed configuration.');
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
setApplying(false);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
const handleEdit = () => {
|
|
161
|
+
if (proposed)
|
|
162
|
+
onEdit === null || onEdit === void 0 ? void 0 : onEdit(proposed, password);
|
|
163
|
+
};
|
|
164
|
+
const canDetect = !probing && url.trim().length > 0 && password.length > 0 && !disabled;
|
|
165
|
+
return (_jsxs(Box, { mt: 2, mb: 2, "data-testid": "simple-mode", children: [!proposed && (_jsxs(Box, { children: [_jsx(Typography, { variant: "h6", children: "Simple configuration" }), _jsx(Typography, { variant: "body2", children: "Paste your source connection string and password. We'll probe the source, propose a configuration, and let you review before starting retrieval." }), _jsx(Box, { mt: 2, children: _jsx(TextField, { label: "Connection string", placeholder: "postgres://user@host:5432/dbname", value: url, onChange: (e) => setUrl(e.target.value), fullWidth: true, disabled: probing || disabled, inputProps: { 'data-testid': 'simple-url' } }) }), _jsx(Box, { mt: 2, children: _jsx(TextField, { label: "Password", type: "password", value: password, onChange: (e) => setPassword(e.target.value), fullWidth: true, disabled: probing || disabled, inputProps: { 'data-testid': 'simple-password' } }) }), _jsx(Box, { mt: 2, children: _jsxs(Button, { variant: "contained", color: "secondary", onClick: onDetect, disabled: !canDetect, "data-testid": "simple-detect", children: ["Detect & preview", probing && _jsx(Spinner, { size: "sm" })] }) }), probeError && (_jsx(Box, { mt: 1, color: "#d32f2f", fontSize: 13, "data-testid": "probe-error", children: probeError }))] })), proposed && resolved && (_jsx(PreviewCard, { proposed: proposed, resolved: resolved, applying: applying, applyError: applyError, onApply: onApply, onEdit: handleEdit }))] }));
|
|
166
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Picks the default Configuration tab when the page first finishes loading
|
|
2
|
+
// the server config. An unconfigured instance lands on Simple; an instance
|
|
3
|
+
// that already has a source host filled in OR a non-logical retrieval mode
|
|
4
|
+
// configured lands on Expert so the user sees the form they previously
|
|
5
|
+
// interacted with. Physical-mode users do not have a host field but still
|
|
6
|
+
// need to land on Expert because Simple-mode targets logical retrieval.
|
|
7
|
+
export const getInitialConfigMode = (host, retrievalMode) => (host || retrievalMode === 'physical' ? 'expert' : 'simple');
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { SeImages } from '@postgres.ai/shared/types/api/endpoints/getSeImages';
|
|
2
|
+
export declare type ProviderImageMapping = {
|
|
3
|
+
imageType: string;
|
|
4
|
+
defaultTag?: string;
|
|
5
|
+
fallback: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare const genericImagePathForVersion: (pgMajorVersion: number) => string;
|
|
8
|
+
export declare type ResolvedImage = {
|
|
9
|
+
dockerPath: string;
|
|
10
|
+
dockerTag: string;
|
|
11
|
+
sharedPreloadLibraries?: string;
|
|
12
|
+
isSe: boolean;
|
|
13
|
+
};
|
|
14
|
+
export declare const selectSeImage: (seImages: SeImages[] | null | undefined, pgMajorVersion: number) => SeImages | undefined;
|
|
15
|
+
export declare const resolveDockerImagePath: (providerKey: string, pgMajorVersion: number, dockerTag?: string) => string;
|
|
16
|
+
export declare const providerKeyToImage: (providerKey: string, pgMajorVersion: number) => ProviderImageMapping;
|
|
17
|
+
export declare const dockerImageOptions: {
|
|
18
|
+
name: string;
|
|
19
|
+
type: string;
|
|
20
|
+
}[];
|
|
21
|
+
export declare const imagePgOptions: {
|
|
22
|
+
optionType: string;
|
|
23
|
+
pgDumpOptions: string[];
|
|
24
|
+
pgRestoreOptions: never[];
|
|
25
|
+
}[];
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { dockerImagesConfig, genericImagePrefix } from './dockerCatalog';
|
|
2
|
+
// Mapping from the engine probe's provider key (probe.Provider) to a
|
|
3
|
+
// dockerImageOptions.type value the form already understands. Keys must
|
|
4
|
+
// match the values defined in engine/internal/retrieval/probe/provider.go
|
|
5
|
+
// (ProviderRDS, ProviderAurora, etc.) — see Task 18 in the plan.
|
|
6
|
+
const providerKeyToImageType = {
|
|
7
|
+
generic: 'Generic Postgres',
|
|
8
|
+
rds: 'rds',
|
|
9
|
+
aurora: 'aurora',
|
|
10
|
+
cloudsql: 'google-cloud-sql',
|
|
11
|
+
supabase: 'supabase',
|
|
12
|
+
heroku: 'heroku',
|
|
13
|
+
timescale: 'timescale-cloud',
|
|
14
|
+
};
|
|
15
|
+
// Reads the most recent tag for a given PG major from the shared catalog.
|
|
16
|
+
// SE images (rds, aurora, etc.) require the platform-only getSeImages call
|
|
17
|
+
// and have no entry here — they return defaultTag: undefined.
|
|
18
|
+
const genericDefaultTag = (pgMajorVersion) => {
|
|
19
|
+
if (!pgMajorVersion)
|
|
20
|
+
return undefined;
|
|
21
|
+
const version = String(pgMajorVersion);
|
|
22
|
+
const tags = dockerImagesConfig[version];
|
|
23
|
+
if (!tags || tags.length === 0)
|
|
24
|
+
return undefined;
|
|
25
|
+
return `${version}-${tags[0]}`;
|
|
26
|
+
};
|
|
27
|
+
// genericImagePathForVersion returns a pullable generic extended-postgres
|
|
28
|
+
// reference for a PG major version, or '' when the version is unknown. Simple
|
|
29
|
+
// mode uses it as the CE fallback for managed providers, whose SE images are
|
|
30
|
+
// only resolvable through the platform-only getSeImages call.
|
|
31
|
+
export const genericImagePathForVersion = (pgMajorVersion) => {
|
|
32
|
+
const tag = genericDefaultTag(pgMajorVersion);
|
|
33
|
+
return tag ? `${genericImagePrefix}:${tag}` : '';
|
|
34
|
+
};
|
|
35
|
+
// selectSeImage picks the SE catalog entry matching the detected major version.
|
|
36
|
+
// Returns undefined when the catalog is empty (CE) or has no matching version,
|
|
37
|
+
// which signals the caller to fall back to the generic image.
|
|
38
|
+
export const selectSeImage = (seImages, pgMajorVersion) => seImages === null || seImages === void 0 ? void 0 : seImages.find((image) => image.pg_major_version === String(pgMajorVersion));
|
|
39
|
+
// resolveDockerImagePath returns the concrete image reference Simple mode ships
|
|
40
|
+
// for a probed source. Managed providers fall back to the generic image in CE,
|
|
41
|
+
// so both the Apply payload and the preview show the same value.
|
|
42
|
+
export const resolveDockerImagePath = (providerKey, pgMajorVersion, dockerTag) => {
|
|
43
|
+
const mapping = providerKeyToImage(providerKey, pgMajorVersion);
|
|
44
|
+
const tag = dockerTag || mapping.defaultTag || '';
|
|
45
|
+
if (mapping.imageType === 'Generic Postgres') {
|
|
46
|
+
return tag ? `${genericImagePrefix}:${tag}` : '';
|
|
47
|
+
}
|
|
48
|
+
return genericImagePathForVersion(pgMajorVersion);
|
|
49
|
+
};
|
|
50
|
+
// Resolves a probe provider key to a concrete docker image type the
|
|
51
|
+
// Configuration form can write into the projection. Unknown keys (including
|
|
52
|
+
// "azure", which has no matching SE image today) fall back to the generic
|
|
53
|
+
// Postgres image and set fallback=true so the UI can warn.
|
|
54
|
+
export const providerKeyToImage = (providerKey, pgMajorVersion) => {
|
|
55
|
+
const known = providerKeyToImageType[providerKey];
|
|
56
|
+
if (!known) {
|
|
57
|
+
return {
|
|
58
|
+
imageType: 'Generic Postgres',
|
|
59
|
+
defaultTag: genericDefaultTag(pgMajorVersion),
|
|
60
|
+
fallback: true,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
if (known === 'Generic Postgres') {
|
|
64
|
+
return {
|
|
65
|
+
imageType: 'Generic Postgres',
|
|
66
|
+
defaultTag: genericDefaultTag(pgMajorVersion),
|
|
67
|
+
fallback: false,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return { imageType: known, defaultTag: undefined, fallback: false };
|
|
71
|
+
};
|
|
72
|
+
export const dockerImageOptions = [
|
|
73
|
+
{
|
|
74
|
+
name: 'Generic PostgreSQL (postgresai/extended-postgres)',
|
|
75
|
+
type: 'Generic Postgres',
|
|
76
|
+
},
|
|
77
|
+
{ name: 'Generic PostgreSQL with PostGIS', type: 'postgis' },
|
|
78
|
+
{ name: 'Amazon RDS for PostgreSQL', type: 'rds' },
|
|
79
|
+
{ name: 'Amazon RDS Aurora for PostgreSQL', type: 'aurora' },
|
|
80
|
+
{ name: 'Heroku PostgreSQL', type: 'heroku' },
|
|
81
|
+
{ name: 'Supabase PostgreSQL', type: 'supabase' },
|
|
82
|
+
{ name: 'Google Cloud SQL for PostgreSQL', type: 'google-cloud-sql' },
|
|
83
|
+
{
|
|
84
|
+
name: 'Timescale Cloud',
|
|
85
|
+
type: 'timescale-cloud',
|
|
86
|
+
},
|
|
87
|
+
{ name: 'Custom image', type: 'custom' },
|
|
88
|
+
];
|
|
89
|
+
export const imagePgOptions = [
|
|
90
|
+
{
|
|
91
|
+
optionType: 'Generic Postgres',
|
|
92
|
+
pgDumpOptions: [],
|
|
93
|
+
pgRestoreOptions: [],
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
optionType: 'postgis',
|
|
97
|
+
pgDumpOptions: [],
|
|
98
|
+
pgRestoreOptions: [],
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
optionType: 'rds',
|
|
102
|
+
pgDumpOptions: ['--exclude-schema=awsdms'],
|
|
103
|
+
pgRestoreOptions: [],
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
optionType: 'aurora',
|
|
107
|
+
pgDumpOptions: ['--exclude-schema=awsdms'],
|
|
108
|
+
pgRestoreOptions: [],
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
optionType: 'heroku',
|
|
112
|
+
pgDumpOptions: [],
|
|
113
|
+
pgRestoreOptions: [],
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
optionType: 'supabase',
|
|
117
|
+
pgDumpOptions: [],
|
|
118
|
+
pgRestoreOptions: [],
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
optionType: 'google-cloud-sql',
|
|
122
|
+
pgDumpOptions: [],
|
|
123
|
+
pgRestoreOptions: [],
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
optionType: 'timescale-cloud',
|
|
127
|
+
pgDumpOptions: [],
|
|
128
|
+
pgRestoreOptions: [],
|
|
129
|
+
},
|
|
130
|
+
];
|