mirror of
https://github.com/kunkunsh/kunkun.git
synced 2025-04-20 13:39:15 +00:00
fixed some supabase errors
This commit is contained in:
parent
2418cb103b
commit
2b9df3106f
8
apps/desktop/dev.ts
Normal file
8
apps/desktop/dev.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { getExtensionsLatestPublishByIdentifier } from "@kksh/sdk"
|
||||||
|
|
||||||
|
const latestPublish = await getExtensionsLatestPublishByIdentifier({
|
||||||
|
path: {
|
||||||
|
identifier: "RAG1"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
console.log(latestPublish)
|
@ -1,8 +1,7 @@
|
|||||||
import { extensions } from "@/stores"
|
import { extensions } from "@/stores"
|
||||||
import { supabaseAPI } from "@/supabase"
|
|
||||||
import { isCompatible } from "@kksh/api"
|
import { isCompatible } from "@kksh/api"
|
||||||
import type { ExtPackageJsonExtra } from "@kksh/api/models"
|
import type { ExtPackageJsonExtra } from "@kksh/api/models"
|
||||||
import { greaterThan } from "@std/semver"
|
import { getExtensionsLatestPublishByIdentifier } from "@kksh/sdk"
|
||||||
import { relaunch } from "@tauri-apps/plugin-process"
|
import { relaunch } from "@tauri-apps/plugin-process"
|
||||||
import { check } from "@tauri-apps/plugin-updater"
|
import { check } from "@tauri-apps/plugin-updater"
|
||||||
import { gt } from "semver"
|
import { gt } from "semver"
|
||||||
@ -32,11 +31,22 @@ export async function checkSingleExtensionUpdate(
|
|||||||
installedExt: ExtPackageJsonExtra,
|
installedExt: ExtPackageJsonExtra,
|
||||||
autoupgrade: boolean
|
autoupgrade: boolean
|
||||||
) {
|
) {
|
||||||
const { data: sbExt, error } = await supabaseAPI.getLatestExtPublish(
|
const {
|
||||||
installedExt.kunkun.identifier
|
data: sbExt,
|
||||||
)
|
error,
|
||||||
|
response
|
||||||
|
} = await getExtensionsLatestPublishByIdentifier({
|
||||||
|
path: {
|
||||||
|
identifier: "RAG"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// const { data: sbExt, error } = await supabaseAPI.getLatestExtPublish(
|
||||||
|
// installedExt.kunkun.identifier
|
||||||
|
// )
|
||||||
if (error) {
|
if (error) {
|
||||||
return toast.error(`Failed to check update for ${installedExt.kunkun.identifier}: ${error}`)
|
return toast.error(
|
||||||
|
`Failed to check update for ${installedExt.kunkun.identifier}: ${error} (${response.status})`
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sbExt) {
|
if (!sbExt) {
|
||||||
@ -49,10 +59,7 @@ export async function checkSingleExtensionUpdate(
|
|||||||
) {
|
) {
|
||||||
if (autoupgrade) {
|
if (autoupgrade) {
|
||||||
await extensions
|
await extensions
|
||||||
.upgradeStoreExtension(
|
.upgradeStoreExtension(sbExt.identifier, sbExt.tarball_path)
|
||||||
sbExt.identifier,
|
|
||||||
supabaseAPI.translateExtensionFilePathToUrl(sbExt.tarball_path)
|
|
||||||
)
|
|
||||||
.then(() => {
|
.then(() => {
|
||||||
toast.success(`${sbExt.name} upgraded`, {
|
toast.success(`${sbExt.name} upgraded`, {
|
||||||
description: `From ${installedExt.version} to ${sbExt.version}`
|
description: `From ${installedExt.version} to ${sbExt.version}`
|
||||||
|
@ -2,14 +2,13 @@
|
|||||||
import { getExtensionsFolder } from "@/constants"
|
import { getExtensionsFolder } from "@/constants"
|
||||||
import { appState, extensions } from "@/stores"
|
import { appState, extensions } from "@/stores"
|
||||||
import { keys } from "@/stores/keys"
|
import { keys } from "@/stores/keys"
|
||||||
import { supabaseAPI } from "@/supabase"
|
|
||||||
import { goBackOnEscapeClearSearchTerm, goHomeOnEscapeClearSearchTerm } from "@/utils/key"
|
|
||||||
import { goBack, goHome } from "@/utils/route"
|
import { goBack, goHome } from "@/utils/route"
|
||||||
import { Action as ActionSchema } from "@kksh/api/models"
|
import { Action as ActionSchema, ExtensionStoreListItem, ExtPublish } from "@kksh/api/models"
|
||||||
import { Action } from "@kksh/api/ui"
|
import { Action } from "@kksh/api/ui"
|
||||||
import { SBExt } from "@kksh/supabase/models"
|
import {
|
||||||
import type { ExtPublishMetadata } from "@kksh/supabase/models"
|
getExtensionsLatestPublishByIdentifier,
|
||||||
import { type Tables } from "@kksh/supabase/types"
|
postExtensionsIncrementDownloads
|
||||||
|
} from "@kksh/sdk"
|
||||||
import { Button, Command } from "@kksh/svelte5"
|
import { Button, Command } from "@kksh/svelte5"
|
||||||
import { Constants } from "@kksh/ui"
|
import { Constants } from "@kksh/ui"
|
||||||
import { ExtListItem } from "@kksh/ui/extension"
|
import { ExtListItem } from "@kksh/ui/extension"
|
||||||
@ -71,51 +70,57 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
function onExtItemSelected(ext: SBExt) {
|
function onExtItemSelected(ext: ExtensionStoreListItem) {
|
||||||
goto(`./store/${ext.identifier}`)
|
goto(`./store/${ext.identifier}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function onExtItemUpgrade(ext: SBExt) {
|
async function onExtItemUpgrade(ext: ExtensionStoreListItem) {
|
||||||
const res = await supabaseAPI.getLatestExtPublish(ext.identifier)
|
const { data, error, response } = await getExtensionsLatestPublishByIdentifier({
|
||||||
if (res.error)
|
path: {
|
||||||
|
identifier: ext.identifier
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (error)
|
||||||
return toast.error("Fail to get latest extension", {
|
return toast.error("Fail to get latest extension", {
|
||||||
description: res.error.message
|
description: error as string
|
||||||
})
|
})
|
||||||
const tarballUrl = res.data.tarball_path.startsWith("http")
|
const installExtras = await getInstallExtras(data?.metadata)
|
||||||
? res.data.tarball_path
|
|
||||||
: supabaseAPI.translateExtensionFilePathToUrl(res.data.tarball_path)
|
|
||||||
const installExtras = await getInstallExtras(
|
|
||||||
res.data as Tables<"ext_publish"> & { metadata: ExtPublishMetadata }
|
|
||||||
)
|
|
||||||
return extensions
|
return extensions
|
||||||
.upgradeStoreExtension(ext.identifier, tarballUrl, installExtras)
|
.upgradeStoreExtension(ext.identifier, data.tarball_path, installExtras)
|
||||||
.then((newExt) => {
|
.then((newExt) => {
|
||||||
toast.success(`${ext.name} Upgraded to ${newExt.version}`)
|
toast.success(`${ext.name} Upgraded to ${newExt.version}`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function onExtItemInstall(ext: SBExt) {
|
async function onExtItemInstall(ext: ExtensionStoreListItem) {
|
||||||
const res = await supabaseAPI.getLatestExtPublish(ext.identifier)
|
const { data, error, response } = await getExtensionsLatestPublishByIdentifier({
|
||||||
if (res.error)
|
path: {
|
||||||
|
identifier: ext.identifier
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (error)
|
||||||
return toast.error("Fail to get latest extension", {
|
return toast.error("Fail to get latest extension", {
|
||||||
description: res.error.message
|
description: error
|
||||||
})
|
})
|
||||||
|
|
||||||
const tarballUrl = res.data.tarball_path.startsWith("http")
|
const installExtras = await getInstallExtras(data?.metadata)
|
||||||
? res.data.tarball_path
|
|
||||||
: supabaseAPI.translateExtensionFilePathToUrl(res.data.tarball_path)
|
|
||||||
const installExtras = await getInstallExtras(
|
|
||||||
res.data as Tables<"ext_publish"> & { metadata: ExtPublishMetadata }
|
|
||||||
)
|
|
||||||
const installDir = await getExtensionsFolder()
|
const installDir = await getExtensionsFolder()
|
||||||
return extensions
|
return extensions
|
||||||
.installFromTarballUrl(tarballUrl, installDir, installExtras)
|
.installFromTarballUrl(data.tarball_path, installDir, installExtras)
|
||||||
.then(() => toast.success(`Plugin ${ext.name} Installed`))
|
.then(() => toast.success(`Plugin ${ext.name} Installed`))
|
||||||
.then(() =>
|
.then(() =>
|
||||||
supabaseAPI.incrementDownloads({
|
postExtensionsIncrementDownloads({
|
||||||
identifier: ext.identifier,
|
body: {
|
||||||
version: ext.version
|
identifier: ext.identifier,
|
||||||
|
version: ext.version
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
.then(({ error }) => {
|
||||||
|
if (error) {
|
||||||
|
console.error(error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(console.error)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,43 +1,40 @@
|
|||||||
import { appConfig, appState, extensions, installedStoreExts } from "@/stores"
|
import { appConfig, appState, extensions, installedStoreExts } from "@/stores"
|
||||||
import { supabaseAPI } from "@/supabase"
|
import { goHome } from "@/utils/route"
|
||||||
import type { ExtPackageJsonExtra } from "@kksh/api/models"
|
// import { supabaseAPI } from "@/supabase"
|
||||||
|
import type { ExtensionStoreListItem, ExtPackageJsonExtra } from "@kksh/api/models"
|
||||||
import { isExtPathInDev, isUpgradable } from "@kksh/extension"
|
import { isExtPathInDev, isUpgradable } from "@kksh/extension"
|
||||||
import { SBExt } from "@kksh/supabase/models"
|
import { getExtensionsStoreList } from "@kksh/sdk"
|
||||||
import { sleep } from "@kksh/utils"
|
import { toast } from "svelte-sonner"
|
||||||
import { error } from "@sveltejs/kit"
|
|
||||||
import { derived, get, type Readable } from "svelte/store"
|
import { derived, get, type Readable } from "svelte/store"
|
||||||
import type { PageLoad } from "./$types"
|
import type { PageLoad } from "./$types"
|
||||||
|
|
||||||
export const load: PageLoad = (): Promise<{
|
export const load: PageLoad = (): Promise<{
|
||||||
storeExtList: SBExt[]
|
storeExtList: ExtensionStoreListItem[]
|
||||||
installedStoreExts: Readable<ExtPackageJsonExtra[]>
|
installedStoreExts: Readable<ExtPackageJsonExtra[]>
|
||||||
installedExtsMap: Readable<Record<string, string>>
|
installedExtsMap: Readable<Record<string, string>>
|
||||||
upgradableExpsMap: Readable<Record<string, boolean>>
|
upgradableExpsMap: Readable<Record<string, boolean>>
|
||||||
}> => {
|
}> => {
|
||||||
appState.setFullScreenLoading(true)
|
appState.setFullScreenLoading(true)
|
||||||
return supabaseAPI
|
return getExtensionsStoreList()
|
||||||
.getExtList()
|
.then(({ data: storeExtList, error, response }) => {
|
||||||
.then(async (storeExtList) => {
|
storeExtList = storeExtList ?? []
|
||||||
// map identifier to extItem
|
if (error) {
|
||||||
|
toast.error(`Failed to load extension store: ${error} (${response.status})`)
|
||||||
|
goHome()
|
||||||
|
return
|
||||||
|
}
|
||||||
const storeExtsMap = Object.fromEntries(storeExtList.map((ext) => [ext.identifier, ext]))
|
const storeExtsMap = Object.fromEntries(storeExtList.map((ext) => [ext.identifier, ext]))
|
||||||
// const _appConfig = get(appConfig)
|
|
||||||
// const installedStoreExts = derived(extensions, ($extensions) => {
|
|
||||||
// if (!_appConfig.extensionPath) return []
|
|
||||||
// return $extensions.filter((ext) => !isExtPathInDev(_appConfig.extensionPath!, ext.extPath))
|
|
||||||
// })
|
|
||||||
// map installed extension identifier to version
|
|
||||||
const installedExtsMap = derived(installedStoreExts, ($exts) =>
|
const installedExtsMap = derived(installedStoreExts, ($exts) =>
|
||||||
Object.fromEntries($exts.map((ext) => [ext.kunkun.identifier, ext.version]))
|
Object.fromEntries($exts.map((ext) => [ext.kunkun.identifier, ext.version]))
|
||||||
)
|
)
|
||||||
const upgradableExpsMap = derived(installedStoreExts, ($exts) =>
|
const upgradableExpsMap = derived(installedStoreExts, ($exts) =>
|
||||||
Object.fromEntries(
|
Object.fromEntries(
|
||||||
$exts.map((ext) => {
|
$exts.map((ext) => {
|
||||||
const dbExt: SBExt | undefined = storeExtsMap[ext.kunkun.identifier]
|
const dbExt: ExtensionStoreListItem | undefined = storeExtsMap[ext.kunkun.identifier]
|
||||||
return [ext.kunkun.identifier, dbExt ? isUpgradable(dbExt, ext.version) : false]
|
return [ext.kunkun.identifier, dbExt ? isUpgradable(dbExt, ext.version) : false]
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
storeExtList,
|
storeExtList,
|
||||||
installedStoreExts,
|
installedStoreExts,
|
||||||
|
@ -2,11 +2,8 @@
|
|||||||
import { getExtensionsFolder } from "@/constants.js"
|
import { getExtensionsFolder } from "@/constants.js"
|
||||||
import { i18n } from "@/i18n.js"
|
import { i18n } from "@/i18n.js"
|
||||||
import { extensions, installedStoreExts } from "@/stores/extensions.js"
|
import { extensions, installedStoreExts } from "@/stores/extensions.js"
|
||||||
import { supabaseAPI } from "@/supabase"
|
import { ExtensionStoreListItem, ExtPackageJson, ExtPublish } from "@kksh/api/models"
|
||||||
import { goBack } from "@/utils/route.js"
|
import { postExtensionsIncrementDownloads } from "@kksh/sdk"
|
||||||
import { ExtPackageJson } from "@kksh/api/models"
|
|
||||||
import { ExtPublishMetadata } from "@kksh/supabase/models"
|
|
||||||
import type { Tables } from "@kksh/supabase/types"
|
|
||||||
import { Button } from "@kksh/svelte5"
|
import { Button } from "@kksh/svelte5"
|
||||||
import { cn } from "@kksh/svelte5/utils"
|
import { cn } from "@kksh/svelte5/utils"
|
||||||
import { Constants } from "@kksh/ui"
|
import { Constants } from "@kksh/ui"
|
||||||
@ -22,10 +19,8 @@
|
|||||||
import { getInstallExtras } from "./helper"
|
import { getInstallExtras } from "./helper"
|
||||||
|
|
||||||
const { data } = $props()
|
const { data } = $props()
|
||||||
const extPublish: Tables<"ext_publish"> & { metadata: ExtPublishMetadata } = $derived(
|
const extPublish: ExtPublish = $derived(data.extPublish)
|
||||||
data.extPublish
|
const ext: ExtensionStoreListItem = $derived(data.ext)
|
||||||
)
|
|
||||||
const ext: Tables<"extensions"> = $derived(data.ext)
|
|
||||||
const manifest = $derived(data.manifest)
|
const manifest = $derived(data.manifest)
|
||||||
const installedExt = storeDerived(installedStoreExts, ($e) => {
|
const installedExt = storeDerived(installedStoreExts, ($e) => {
|
||||||
return $e.find((e) => e.kunkun.identifier === extPublish.identifier)
|
return $e.find((e) => e.kunkun.identifier === extPublish.identifier)
|
||||||
@ -77,28 +72,29 @@
|
|||||||
}, 500)
|
}, 500)
|
||||||
})
|
})
|
||||||
|
|
||||||
const demoImages = $derived(
|
const demoImages = $derived(extPublish.demo_images)
|
||||||
extPublish.demo_images.map((src) =>
|
|
||||||
src.startsWith("http") ? src : supabaseAPI.translateExtensionFilePathToUrl(src)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
async function onInstallSelected() {
|
async function onInstallSelected() {
|
||||||
loading.install = true
|
loading.install = true
|
||||||
const tarballUrl = extPublish.tarball_path.startsWith("http")
|
const installExtras = await getInstallExtras(extPublish.metadata)
|
||||||
? extPublish.tarball_path
|
|
||||||
: supabaseAPI.translateExtensionFilePathToUrl(extPublish.tarball_path)
|
|
||||||
const installExtras = await getInstallExtras(extPublish)
|
|
||||||
const installDir = await getExtensionsFolder()
|
const installDir = await getExtensionsFolder()
|
||||||
return extensions
|
return extensions
|
||||||
.installFromTarballUrl(tarballUrl, installDir, installExtras)
|
.installFromTarballUrl(extPublish.tarball_path, installDir, installExtras)
|
||||||
.then(() => toast.success(`Plugin ${extPublish.name} Installed`))
|
.then(() => toast.success(`Plugin ${extPublish.name} Installed`))
|
||||||
.then((loadedExt) => {
|
.then((loadedExt) => {
|
||||||
info(`Successfully installed ${extPublish.name}`)
|
info(`Successfully installed ${extPublish.name}`)
|
||||||
supabaseAPI.incrementDownloads({
|
postExtensionsIncrementDownloads({
|
||||||
identifier: extPublish.identifier,
|
body: {
|
||||||
version: extPublish.version
|
identifier: extPublish.identifier,
|
||||||
|
version: extPublish.version
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
.then(({ error }) => {
|
||||||
|
if (error) {
|
||||||
|
console.error(error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(console.error)
|
||||||
showBtn.install = false
|
showBtn.install = false
|
||||||
showBtn.uninstall = true
|
showBtn.uninstall = true
|
||||||
})
|
})
|
||||||
@ -113,9 +109,8 @@
|
|||||||
|
|
||||||
function onUpgradeSelected() {
|
function onUpgradeSelected() {
|
||||||
loading.upgrade = true
|
loading.upgrade = true
|
||||||
const tarballUrl = supabaseAPI.translateExtensionFilePathToUrl(extPublish.tarball_path)
|
|
||||||
return extensions
|
return extensions
|
||||||
.upgradeStoreExtension(extPublish.identifier, tarballUrl)
|
.upgradeStoreExtension(extPublish.identifier, extPublish.tarball_path)
|
||||||
.then((newExt) => {
|
.then((newExt) => {
|
||||||
toast.success(
|
toast.success(
|
||||||
`${extPublish.name} Upgraded from ${$installedExt?.version} to ${newExt.version}`
|
`${extPublish.name} Upgraded from ${$installedExt?.version} to ${newExt.version}`
|
||||||
|
@ -1,9 +1,17 @@
|
|||||||
import { appState, extensions } from "@/stores"
|
import { appState, extensions } from "@/stores"
|
||||||
import { supabaseAPI } from "@/supabase"
|
import {
|
||||||
import { KunkunExtManifest, type ExtPackageJsonExtra } from "@kksh/api/models"
|
ExtensionStoreListItem,
|
||||||
import { ExtPublishMetadata } from "@kksh/supabase/models"
|
ExtPublish,
|
||||||
import type { Tables } from "@kksh/supabase/types"
|
KunkunExtManifest,
|
||||||
import { sleep } from "@kksh/utils"
|
type ExtPackageJsonExtra
|
||||||
|
} from "@kksh/api/models"
|
||||||
|
import {
|
||||||
|
getExtensionsByIdentifier,
|
||||||
|
getExtensionsLatestPublishByIdentifier,
|
||||||
|
type GetExtensionsByIdentifierResponse,
|
||||||
|
type GetExtensionsLatestPublishByIdentifierResponse,
|
||||||
|
type GetExtensionsLatestPublishByIdentifierResponses
|
||||||
|
} from "@kksh/sdk"
|
||||||
import { error } from "@sveltejs/kit"
|
import { error } from "@sveltejs/kit"
|
||||||
import { toast } from "svelte-sonner"
|
import { toast } from "svelte-sonner"
|
||||||
import * as v from "valibot"
|
import * as v from "valibot"
|
||||||
@ -12,43 +20,43 @@ import type { PageLoad } from "./$types"
|
|||||||
export const load: PageLoad = ({
|
export const load: PageLoad = ({
|
||||||
params
|
params
|
||||||
}): Promise<{
|
}): Promise<{
|
||||||
extPublish: Tables<"ext_publish"> & { metadata: ExtPublishMetadata }
|
// extPublish: GetExtensionsLatestPublishByIdentifierResponses['200']
|
||||||
ext: Tables<"extensions">
|
ext: GetExtensionsByIdentifierResponse
|
||||||
manifest: KunkunExtManifest
|
manifest: GetExtensionsLatestPublishByIdentifierResponse["manifest"]
|
||||||
params: {
|
params: {
|
||||||
identifier: string
|
identifier: string
|
||||||
}
|
}
|
||||||
}> => {
|
}> => {
|
||||||
appState.setFullScreenLoading(true)
|
appState.setFullScreenLoading(true)
|
||||||
return supabaseAPI
|
return getExtensionsLatestPublishByIdentifier({
|
||||||
.getLatestExtPublish(params.identifier)
|
path: {
|
||||||
.then(async ({ error: dbError, data: extPublish }) => {
|
identifier: params.identifier
|
||||||
const metadataParse = v.safeParse(ExtPublishMetadata, extPublish?.metadata ?? {})
|
}
|
||||||
if (dbError) {
|
})
|
||||||
|
.then(async ({ data: extPublish, error: err, response }) => {
|
||||||
|
if (err || !extPublish) {
|
||||||
|
console.error(err)
|
||||||
return error(400, {
|
return error(400, {
|
||||||
message: dbError.message
|
message: "Failed to get extension publish"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const metadata = metadataParse.success ? metadataParse.output : {}
|
const { data: ext, error: extError } = await getExtensionsByIdentifier({
|
||||||
const parseManifest = v.safeParse(KunkunExtManifest, extPublish.manifest)
|
path: {
|
||||||
if (!parseManifest.success) {
|
identifier: params.identifier
|
||||||
const errMsg = "Invalid extension manifest, you may need to upgrade your app."
|
}
|
||||||
toast.error(errMsg)
|
})
|
||||||
throw error(400, errMsg)
|
|
||||||
}
|
|
||||||
|
|
||||||
const { data: ext, error: extError } = await supabaseAPI.getExtension(params.identifier)
|
|
||||||
if (extError) {
|
if (extError) {
|
||||||
|
console.error(extError)
|
||||||
return error(400, {
|
return error(400, {
|
||||||
message: extError.message
|
message: "Failed to get extension"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
extPublish: { ...extPublish, metadata },
|
// extPublish,
|
||||||
ext,
|
ext,
|
||||||
params,
|
manifest: extPublish.manifest,
|
||||||
manifest: parseManifest.output
|
params
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
|
@ -1,15 +1,17 @@
|
|||||||
import type { ExtPublishMetadata } from "@kksh/supabase/models"
|
import type { ExtPublishMetadata } from "@kunkunapi/src/models"
|
||||||
import type { Tables } from "@kksh/supabase/types"
|
|
||||||
|
|
||||||
export async function getInstallExtras(
|
export async function getInstallExtras(
|
||||||
ext: Tables<"ext_publish"> & { metadata?: ExtPublishMetadata }
|
extMetadata?: {
|
||||||
|
sourceType?: string
|
||||||
|
source?: string
|
||||||
|
}
|
||||||
): Promise<{ overwritePackageJson?: string }> {
|
): Promise<{ overwritePackageJson?: string }> {
|
||||||
const extras: { overwritePackageJson?: string } = {}
|
const extras: { overwritePackageJson?: string } = {}
|
||||||
if (ext.metadata?.sourceType) {
|
if (extMetadata?.sourceType) {
|
||||||
if (ext.metadata?.sourceType === "jsr") {
|
if (extMetadata?.sourceType === "jsr") {
|
||||||
if (ext.metadata?.source) {
|
if (extMetadata?.source) {
|
||||||
try {
|
try {
|
||||||
const res = await fetch(`${ext.metadata.source}/package.json`)
|
const res = await fetch(`${extMetadata.source}/package.json`)
|
||||||
const pkgJsonContent = await res.text()
|
const pkgJsonContent = await res.text()
|
||||||
extras.overwritePackageJson = pkgJsonContent
|
extras.overwritePackageJson = pkgJsonContent
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import * as v from "valibot"
|
import * as v from "valibot"
|
||||||
import { BaseIcon } from "./icon"
|
import { BaseIcon } from "./icon"
|
||||||
|
import { ExtPackageJson, KunkunExtManifest } from "./manifest"
|
||||||
|
|
||||||
export enum ExtPublishSourceTypeEnum {
|
export enum ExtPublishSourceTypeEnum {
|
||||||
jsr = "jsr",
|
jsr = "jsr",
|
||||||
@ -26,13 +27,14 @@ export const ExtPublishMetadata = v.object({
|
|||||||
export type ExtPublishMetadata = v.InferOutput<typeof ExtPublishMetadata>
|
export type ExtPublishMetadata = v.InferOutput<typeof ExtPublishMetadata>
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* Correspond to `extensions` table in supabase
|
* Correspond to `extensions` table in supabase, missing a few fields
|
||||||
*/
|
*/
|
||||||
export const ExtensionStoreListItem = v.object({
|
export const ExtensionStoreListItem = v.object({
|
||||||
identifier: v.string(),
|
identifier: v.string(),
|
||||||
name: v.string(),
|
name: v.string(),
|
||||||
created_at: v.string(),
|
created_at: v.string(),
|
||||||
downloads: v.number(),
|
downloads: v.number(),
|
||||||
|
author_id: v.string(),
|
||||||
short_description: v.string(),
|
short_description: v.string(),
|
||||||
long_description: v.string(),
|
long_description: v.string(),
|
||||||
version: v.string(),
|
version: v.string(),
|
||||||
@ -41,3 +43,34 @@ export const ExtensionStoreListItem = v.object({
|
|||||||
})
|
})
|
||||||
|
|
||||||
export type ExtensionStoreListItem = v.InferOutput<typeof ExtensionStoreListItem>
|
export type ExtensionStoreListItem = v.InferOutput<typeof ExtensionStoreListItem>
|
||||||
|
|
||||||
|
export enum PublishStateEnum {
|
||||||
|
"public",
|
||||||
|
"pending",
|
||||||
|
"under_review",
|
||||||
|
"private"
|
||||||
|
}
|
||||||
|
export const ExtensionPublishState = v.enum(PublishStateEnum)
|
||||||
|
|
||||||
|
export const ExtPublish = v.object({
|
||||||
|
name: v.string(),
|
||||||
|
tarball_path: v.string(),
|
||||||
|
created_at: v.date(),
|
||||||
|
version: v.string(),
|
||||||
|
manifest: KunkunExtManifest,
|
||||||
|
shasum: v.string(),
|
||||||
|
tarball_size: v.number(),
|
||||||
|
unpacked_size: v.nullable(v.number()),
|
||||||
|
cmd_count: v.number(),
|
||||||
|
identifier: v.string(),
|
||||||
|
downloads: v.number(),
|
||||||
|
demo_images: v.array(v.string()),
|
||||||
|
api_version: v.nullable(v.string()),
|
||||||
|
extension_state: ExtensionPublishState,
|
||||||
|
package_json: ExtPackageJson,
|
||||||
|
metadata: ExtPublishMetadata,
|
||||||
|
readme: v.nullable(v.string())
|
||||||
|
})
|
||||||
|
export type ExtPublish = v.InferOutput<typeof ExtPublish>
|
||||||
|
|
||||||
|
export const DBExtension = v.object({})
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
import { isCompatible } from "@kksh/api"
|
import { isCompatible } from "@kksh/api"
|
||||||
import { copy_dir_all, db, decompressTarball } from "@kksh/api/commands"
|
import { copy_dir_all, db, decompressTarball } from "@kksh/api/commands"
|
||||||
import type { ExtPackageJsonExtra } from "@kksh/api/models"
|
import type { ExtensionStoreListItem, ExtPackageJsonExtra } from "@kksh/api/models"
|
||||||
import { SBExt } from "@kksh/supabase/models"
|
// import { SBExt } from "@kksh/supabase/models"
|
||||||
import { greaterThan, parse as parseSemver } from "@std/semver"
|
import { greaterThan, parse as parseSemver } from "@std/semver"
|
||||||
import * as path from "@tauri-apps/api/path"
|
import * as path from "@tauri-apps/api/path"
|
||||||
import * as dialog from "@tauri-apps/plugin-dialog"
|
import * as dialog from "@tauri-apps/plugin-dialog"
|
||||||
@ -193,7 +193,7 @@ export async function uninstallExtensionByPath(extPath: string) {
|
|||||||
return fs.remove(extPath, { recursive: true }).then(() => db.deleteExtensionByPath(extPath))
|
return fs.remove(extPath, { recursive: true }).then(() => db.deleteExtensionByPath(extPath))
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isUpgradable(dbExt: SBExt, installedExtVersion: string) {
|
export function isUpgradable(dbExt: ExtensionStoreListItem, installedExtVersion: string) {
|
||||||
const upgradable =
|
const upgradable =
|
||||||
greaterThan(parseSemver(dbExt.version), parseSemver(installedExtVersion)) && dbExt.api_version
|
greaterThan(parseSemver(dbExt.version), parseSemver(installedExtVersion)) && dbExt.api_version
|
||||||
? isCompatible(dbExt.api_version)
|
? isCompatible(dbExt.api_version)
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
import { ExtPackageJson } from "@kksh/api/models"
|
import { ExtPackageJson } from "@kksh/api/models"
|
||||||
import { type Database } from "@kksh/supabase/types"
|
|
||||||
import { createClient } from "@supabase/supabase-js"
|
import { createClient } from "@supabase/supabase-js"
|
||||||
import { parse, string } from "valibot"
|
import { parse, string } from "valibot"
|
||||||
import * as v from "valibot"
|
import * as v from "valibot"
|
||||||
import { getJsonSchema } from "../src"
|
import { getJsonSchema } from "../src"
|
||||||
|
|
||||||
const supabase = createClient<Database>(
|
const supabase = createClient(
|
||||||
parse(string(), process.env.SUPABASE_URL),
|
parse(string(), process.env.SUPABASE_URL),
|
||||||
parse(string(), process.env.SUPABASE_SERVICE_ROLE_KEY)
|
parse(string(), process.env.SUPABASE_SERVICE_ROLE_KEY)
|
||||||
)
|
)
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { writeFileSync } from "fs"
|
import { writeFileSync } from "fs"
|
||||||
import { type Database } from "@kksh/supabase/types"
|
// import { type Database } from "@kksh/supabase/types"
|
||||||
import { createClient } from "@supabase/supabase-js"
|
import { createClient } from "@supabase/supabase-js"
|
||||||
|
|
||||||
if (!process.env.SUPABASE_URL || !process.env.SUPABASE_ANON_KEY) {
|
if (!process.env.SUPABASE_URL || !process.env.SUPABASE_ANON_KEY) {
|
||||||
throw new Error("SUPABASE_URL and SUPABASE_ANON_KEY must be set")
|
throw new Error("SUPABASE_URL and SUPABASE_ANON_KEY must be set")
|
||||||
}
|
}
|
||||||
|
|
||||||
const supabase = createClient<Database>(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY)
|
const supabase = createClient(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY)
|
||||||
|
|
||||||
const { data, error } = await supabase.storage.from("pub").download("server_public_key.pem")
|
const { data, error } = await supabase.storage.from("pub").download("server_public_key.pem")
|
||||||
if (error) {
|
if (error) {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Icon from "@iconify/svelte"
|
import Icon from "@iconify/svelte"
|
||||||
import { ExtData, Icon as TIcon } from "@kksh/api/models"
|
import { ExtData, ExtensionStoreListItem, Icon as TIcon } from "@kksh/api/models"
|
||||||
import { SBExt } from "@kksh/supabase/models"
|
|
||||||
import { Button, Command } from "@kksh/svelte5"
|
import { Button, Command } from "@kksh/svelte5"
|
||||||
import { Constants, IconMultiplexer } from "@kksh/ui"
|
import { Constants, IconMultiplexer } from "@kksh/ui"
|
||||||
import { cn, humanReadableNumber } from "@kksh/ui/utils"
|
import { cn, humanReadableNumber } from "@kksh/ui/utils"
|
||||||
@ -19,7 +18,7 @@
|
|||||||
class: className
|
class: className
|
||||||
}: {
|
}: {
|
||||||
class?: string
|
class?: string
|
||||||
ext: SBExt
|
ext: ExtensionStoreListItem
|
||||||
installedVersion?: string
|
installedVersion?: string
|
||||||
onSelect: () => void
|
onSelect: () => void
|
||||||
onUpgrade: () => void
|
onUpgrade: () => void
|
||||||
|
@ -1,9 +1,16 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import autoAnimate from "@formkit/auto-animate"
|
import autoAnimate from "@formkit/auto-animate"
|
||||||
import Icon from "@iconify/svelte"
|
import Icon from "@iconify/svelte"
|
||||||
import { ExtPackageJson, IconEnum, KunkunExtManifest } from "@kksh/api/models"
|
import {
|
||||||
import { ExtPublishMetadata, ExtPublishSourceTypeEnum } from "@kksh/supabase/models"
|
ExtPackageJson,
|
||||||
import { type Tables } from "@kksh/supabase/types"
|
ExtPublish,
|
||||||
|
ExtPublishMetadata,
|
||||||
|
ExtPublishSourceTypeEnum,
|
||||||
|
IconEnum,
|
||||||
|
KunkunExtManifest
|
||||||
|
} from "@kksh/api/models"
|
||||||
|
// import { ExtPublishMetadata, ExtPublishSourceTypeEnum } from "@kksh/supabase/models"
|
||||||
|
// import { type Tables } from "@kksh/supabase/types"
|
||||||
import { Badge, Button, ScrollArea, Separator, Tooltip } from "@kksh/svelte5"
|
import { Badge, Button, ScrollArea, Separator, Tooltip } from "@kksh/svelte5"
|
||||||
import { Constants, IconMultiplexer } from "@kksh/ui"
|
import { Constants, IconMultiplexer } from "@kksh/ui"
|
||||||
import { cn } from "@kksh/ui/utils"
|
import { cn } from "@kksh/ui/utils"
|
||||||
@ -36,8 +43,11 @@
|
|||||||
loading,
|
loading,
|
||||||
imageDialogOpen = $bindable(false)
|
imageDialogOpen = $bindable(false)
|
||||||
}: {
|
}: {
|
||||||
extPublish: Tables<"ext_publish">
|
extPublish: ExtPublish
|
||||||
ext: Tables<"extensions">
|
ext: {
|
||||||
|
author_id: string
|
||||||
|
downloads: number
|
||||||
|
}
|
||||||
author?: {
|
author?: {
|
||||||
id: string
|
id: string
|
||||||
name: string
|
name: string
|
||||||
|
Loading…
x
Reference in New Issue
Block a user