diff --git a/app/stores/app.js b/app/stores/app.js index 6a05ab3a..b86b4e39 100644 --- a/app/stores/app.js +++ b/app/stores/app.js @@ -88,7 +88,7 @@ export const useAppStore = defineStore("app", () => { return loadedExtensions.value.get(id); } - async function loadExtension(path, backendPath = undefined) { + async function loadExtension(path, backendPath = undefined, port = undefined) { try { let finalURL = path; @@ -104,6 +104,8 @@ export const useAppStore = defineStore("app", () => { } // oxlint-disable-next-line no-inline-comments const extensionModule = await import(/* @vite-ignore */ finalURL); + const store = extensionModule.metadata.store(); + store.$patch({ default_local_port: port }); if (finalURL !== path && finalURL.startsWith("blob:")) { URL.revokeObjectURL(finalURL); diff --git a/app/stores/infra.js b/app/stores/infra.js index 0270bb8f..72d8939f 100644 --- a/app/stores/infra.js +++ b/app/stores/infra.js @@ -77,6 +77,7 @@ export const useInfraStore = defineStore("infra", { await Promise.all( this.microservices.map(async (store) => { + console.log("[INFRA] Connecting to microservice:", store.$id); await store.connect(); console.log("[INFRA] Microservice connected:", store.$id); }), diff --git a/app/utils/extension.js b/app/utils/extension.js index 401e4716..2585157a 100644 --- a/app/utils/extension.js +++ b/app/utils/extension.js @@ -24,19 +24,15 @@ async function registerRunningExtensions() { type: "application/javascript", }); const blobUrl = URL.createObjectURL(blob); - const extensionModule = await appStore.loadExtension(blobUrl); + const extensionModule = await appStore.loadExtension(blobUrl, undefined, port); console.log("[ExtensionManager] Extension loaded:", id); - if (extensionModule.metadata?.store) { - const storeFactory = extensionModule.metadata.store; - const store = storeFactory(); - store.$patch((state) => { - state.default_local_port = port; - }); - appStore.registerStore(store); - console.log("[ExtensionManager] Store registered:", store.$id); - infraStore.register_microservice(store); - } + const storeFactory = extensionModule.metadata.store; + const store = storeFactory(); + appStore.registerStore(store); + console.log("[ExtensionManager] Store registered:", store.$id); + infraStore.register_microservice(store); + return { name, version, diff --git a/app/utils/local/path.js b/app/utils/local/path.js index 82700262..a4c0572a 100644 --- a/app/utils/local/path.js +++ b/app/utils/local/path.js @@ -76,8 +76,6 @@ async function lookForLocalExtensionDistPath(rootPath, extentionRepoName, fronte // oxlint-disable-next-line no-await-in-loop await setTimeout(MILLISECONDS_PER_RETRY); } - - throw new Error(`Failed to find local extension dist path: ${rebuiltFilePath}`); } async function extensionFrontendPath(unzippedExtensionPath, frontendFile, rootPath, extensionId) { console.log("[extensionFrontendPath]", { diff --git a/server/api/extensions/run.post.js b/server/api/extensions/run.post.js index 9c9936dc..1d27180f 100644 --- a/server/api/extensions/run.post.js +++ b/server/api/extensions/run.post.js @@ -10,7 +10,10 @@ import { addMicroserviceMetadatas, runBack, } from "@geode/opengeodeweb-front/app/utils/local/microservices.js"; -import { extensionFrontendPath } from "@geode/opengeodeweb-front/app/utils/local/path.js"; +import { + executableName, + extensionFrontendPath, +} from "@geode/opengeodeweb-front/app/utils/local/path.js"; import { extensionsConf } from "@geode/opengeodeweb-front/app/utils/config.js"; import { unzipFile } from "@geode/opengeodeweb-front/app/utils/server.js"; @@ -67,9 +70,13 @@ export default defineEventHandler(async (event) => { console.log("runExtensions", { frontendFilePath }); const frontendContent = await fs.promises.readFile(frontendFilePath, "utf8"); - const backendExecutablePath = path.join(unzippedExtensionPath, backendExecutable); + const backendExecutablePath = path.join( + unzippedExtensionPath, + executableName(backendExecutable), + ); + console.log("runExtensions", { backendExecutablePath }); fs.chmodSync(backendExecutablePath, "755"); - const port = await runBack(backendExecutable, backendExecutablePath, { + const port = await runBack(backendExecutable, unzippedExtensionPath, { projectFolderPath, }); await addMicroserviceMetadatas(projectFolderPath, {