From 6e656a317716c22c75f0640280945dbecda6e861 Mon Sep 17 00:00:00 2001 From: dsaicharan072-cmyk Date: Sun, 14 Jun 2026 23:18:24 +0530 Subject: [PATCH 1/2] fix(apps): resolve deno-runtime module not found after upgrade --- .../runtime/deno/AppsEngineDenoRuntime.ts | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/packages/apps/src/server/runtime/deno/AppsEngineDenoRuntime.ts b/packages/apps/src/server/runtime/deno/AppsEngineDenoRuntime.ts index acc483f69692c..f0328d77094dc 100644 --- a/packages/apps/src/server/runtime/deno/AppsEngineDenoRuntime.ts +++ b/packages/apps/src/server/runtime/deno/AppsEngineDenoRuntime.ts @@ -186,11 +186,37 @@ export class DenoRuntimeSubprocessController extends EventEmitter implements IRu * Deno 2.x refuses to run scripts inside the node_modules, so we create a symlink to the deno runtime files in the temp directory * The temp directory is the same we are given by the host to store temporary upload files */ + const targetPath = path.dirname(this.denoConfigPath); + const symlinkPath = path.dirname(this.denoRuntimePath); + + let shouldRecreate = false; try { - fs.symlinkSync(path.dirname(this.denoConfigPath), path.dirname(this.denoRuntimePath), 'dir'); - } catch (reason: unknown) { - if ((reason as NodeJS.ErrnoException).code !== 'EEXIST') { - throw reason; + const stat = fs.lstatSync(symlinkPath); + if (stat.isSymbolicLink()) { + const currentTarget = fs.readlinkSync(symlinkPath); + const isBroken = !fs.existsSync(symlinkPath); + if (currentTarget !== targetPath || isBroken) { + shouldRecreate = true; + } + } else { + shouldRecreate = true; + } + } catch (err) { + if ((err as NodeJS.ErrnoException).code === 'ENOENT') { + shouldRecreate = true; + } else { + throw err; + } + } + + if (shouldRecreate) { + try { + fs.rmSync(symlinkPath, { recursive: true, force: true }); + fs.symlinkSync(targetPath, symlinkPath, 'dir'); + } catch (symlinkError: unknown) { + if ((symlinkError as NodeJS.ErrnoException).code !== 'EEXIST') { + throw symlinkError; + } } } From 805421d6b90da631a06f0bf3ecf0eabcd4e7f422 Mon Sep 17 00:00:00 2001 From: dsaicharan072-cmyk Date: Sun, 14 Jun 2026 23:18:24 +0530 Subject: [PATCH 2/2] chore: add changeset --- .changeset/fix-deno-runtime-symlink.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/fix-deno-runtime-symlink.md diff --git a/.changeset/fix-deno-runtime-symlink.md b/.changeset/fix-deno-runtime-symlink.md new file mode 100644 index 0000000000000..f86931c947467 --- /dev/null +++ b/.changeset/fix-deno-runtime-symlink.md @@ -0,0 +1,5 @@ +--- +"@rocket.chat/apps": patch +--- + +Fix: Recreate broken or stale temporary deno-runtime symlinks on server startup.