diff --git a/packages/installer/src/calls/packageInstall.ts b/packages/installer/src/calls/packageInstall.ts index 4e97a0f0c..1fb1f6816 100644 --- a/packages/installer/src/calls/packageInstall.ts +++ b/packages/installer/src/calls/packageInstall.ts @@ -11,7 +11,8 @@ import { writeAndValidateFiles, postInstallClean, afterInstall, - checkInstallRequirements + checkInstallRequirements, + sendPackageInstalledResolvedNotification } from "../installer/index.js"; import { logs, getLogUi, logUiClear } from "@dappnode/logger"; import { Routes } from "@dappnode/types"; @@ -102,6 +103,7 @@ export async function packageInstall( await postInstallClean(packagesData, log); afterInstall(dnpNames); await sendCoreInstalledResolvedNotification(packagesData); + await sendPackageInstalledResolvedNotification(packagesData); logUiClear({ id }); } catch (e) { afterInstall(dnpNames); diff --git a/packages/installer/src/installer/index.ts b/packages/installer/src/installer/index.ts index 7f31a81de..b9187a7bd 100644 --- a/packages/installer/src/installer/index.ts +++ b/packages/installer/src/installer/index.ts @@ -8,3 +8,4 @@ export * from "./runPackages.js"; export * from "./restartPatch.js"; export * from "./writeAndValidateFiles.js"; export * from "./checkInstallRequirements.js"; +export * from "./sendPackageInstallResolvedNotification.js"; diff --git a/packages/installer/src/installer/sendPackageInstallResolvedNotification.ts b/packages/installer/src/installer/sendPackageInstallResolvedNotification.ts new file mode 100644 index 000000000..a0b613c87 --- /dev/null +++ b/packages/installer/src/installer/sendPackageInstallResolvedNotification.ts @@ -0,0 +1,34 @@ +import { Category, InstallPackageData, Priority, Status } from "@dappnode/types"; +import { logs } from "@dappnode/logger"; +import { notifications } from "@dappnode/notifications"; +import { prettyDnpName } from "@dappnode/utils"; +import { params } from "@dappnode/params"; + +/** + * Send resolved notification for regular packages once installed/updated + * This dismisses the "update available" notification by sending a resolved status + * @param packagesData + */ +export async function sendPackageInstalledResolvedNotification(packagesData: InstallPackageData[]): Promise { + // Filter out core packages as they are handled separately + const regularPackages = packagesData.filter((p) => !params.corePackagesNotAutoupdatable.includes(p.dnpName)); + + for (const pkg of regularPackages) { + const title = `${prettyDnpName(pkg.dnpName)} installed successfully`; + const body = `${prettyDnpName(pkg.dnpName)} version ${pkg.semVersion} has been installed successfully`; + + await notifications + .sendNotification({ + title: title, + dnpName: pkg.dnpName, + body: body, + category: Category.system, + priority: Priority.low, + status: Status.resolved, + isBanner: false, + isRemote: false, + correlationId: "dappmanager-update-pkg" + }) + .catch((e) => logs.error(`Error sending resolved notification for ${pkg.dnpName}`, e)); + } +}