| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | 
							- import Toast, { type IToastProps } from '@/app/components/base/toast'
 
- import { uploadGitHub } from '@/service/plugins'
 
- import { compareVersion, getLatestVersion } from '@/utils/semver'
 
- import type { GitHubRepoReleaseResponse } from '../types'
 
- import { GITHUB_ACCESS_TOKEN } from '@/config'
 
- const formatReleases = (releases: any) => {
 
-   return releases.map((release: any) => ({
 
-     tag_name: release.tag_name,
 
-     assets: release.assets.map((asset: any) => ({
 
-       browser_download_url: asset.browser_download_url,
 
-       name: asset.name,
 
-     })),
 
-   }))
 
- }
 
- export const useGitHubReleases = () => {
 
-   const fetchReleases = async (owner: string, repo: string) => {
 
-     try {
 
-       if (!GITHUB_ACCESS_TOKEN) {
 
-         // Fetch releases without authentication from client
 
-         const res = await fetch(`https://api.github.com/repos/${owner}/${repo}/releases`)
 
-         if (!res.ok) throw new Error('Failed to fetch repository releases')
 
-         const data = await res.json()
 
-         return formatReleases(data)
 
-       }
 
-       else {
 
-         // Fetch releases with authentication from server
 
-         const res = await fetch(`/repos/${owner}/${repo}/releases`)
 
-         const bodyJson = await res.json()
 
-         if (bodyJson.status !== 200) throw new Error(bodyJson.data.message)
 
-         return formatReleases(bodyJson.data)
 
-       }
 
-     }
 
-     catch (error) {
 
-       if (error instanceof Error) {
 
-         Toast.notify({
 
-           type: 'error',
 
-           message: error.message,
 
-         })
 
-       }
 
-       else {
 
-         Toast.notify({
 
-           type: 'error',
 
-           message: 'Failed to fetch repository releases',
 
-         })
 
-       }
 
-       return []
 
-     }
 
-   }
 
-   const checkForUpdates = (fetchedReleases: GitHubRepoReleaseResponse[], currentVersion: string) => {
 
-     let needUpdate = false
 
-     const toastProps: IToastProps = {
 
-       type: 'info',
 
-       message: 'No new version available',
 
-     }
 
-     if (fetchedReleases.length === 0) {
 
-       toastProps.type = 'error'
 
-       toastProps.message = 'Input releases is empty'
 
-       return { needUpdate, toastProps }
 
-     }
 
-     const versions = fetchedReleases.map(release => release.tag_name)
 
-     const latestVersion = getLatestVersion(versions)
 
-     try {
 
-       needUpdate = compareVersion(latestVersion, currentVersion) === 1
 
-       if (needUpdate)
 
-         toastProps.message = `New version available: ${latestVersion}`
 
-     }
 
-     catch {
 
-       needUpdate = false
 
-       toastProps.type = 'error'
 
-       toastProps.message = 'Fail to compare versions, please check the version format'
 
-     }
 
-     return { needUpdate, toastProps }
 
-   }
 
-   return { fetchReleases, checkForUpdates }
 
- }
 
- export const useGitHubUpload = () => {
 
-   const handleUpload = async (
 
-     repoUrl: string,
 
-     selectedVersion: string,
 
-     selectedPackage: string,
 
-     onSuccess?: (GitHubPackage: { manifest: any; unique_identifier: string }) => void,
 
-   ) => {
 
-     try {
 
-       const response = await uploadGitHub(repoUrl, selectedVersion, selectedPackage)
 
-       const GitHubPackage = {
 
-         manifest: response.manifest,
 
-         unique_identifier: response.unique_identifier,
 
-       }
 
-       if (onSuccess) onSuccess(GitHubPackage)
 
-       return GitHubPackage
 
-     }
 
-     catch (error) {
 
-       Toast.notify({
 
-         type: 'error',
 
-         message: 'Error uploading package',
 
-       })
 
-       throw error
 
-     }
 
-   }
 
-   return { handleUpload }
 
- }
 
 
  |