Skip to main content

Description​

https://gotify.net/ Gotify is a simple server for sending & receiving messages

Welcome to @digital-alchemy/gotify-extension!

💾 Install​

This library can be installed as a simple dependency

npm i @digital-alchemy/gotify-extension

Then added to your project

import { LIB_GOTIFY } from "@digital-alchemy/gotify-extension";

// application
const MY_APP = CreateApplication({
libraries: [LIB_GOTIFY],
name: "home_automation",
})

// library
export const MY_LIBRARY = CreateLibrary({
depends: [LIB_GOTIFY],
name: "special_logic",
})

🎉 Listing as an import will automatically load into LoadedModules and make the library features available as gotify on TServiceParams.

Configuration​

Map tokens to friendly names to use within the application

[gotify.CHANNEL_MAPPING]
app_name=token
another_app=token
app_the_third=token

Application token

Services​

  • application
  • client
  • message

Multi-channel type friendly messages​

Create a wrapper to send messages from a particular application. Uses the correct credentials, and quick to type

enum MyGotifyApps {
testing = "testing",
reminders = "reminders",
}

export function MyGotifyServices({ gotify, config }: TServiceParams) {
return {
...(Object.fromEntries(
Object.values(MyGotifyApps).map(i => [
i,
async (message: Message) => {
await gotify.message.create({
...message,
appid: config.gotify.CHANNEL_MAPPING[i],
});
},
]),
) as Record<`${MyGotifyApps}`, (message: Message) => Promise<void>>),
};
}

Send messages

export function MyService({ app, lifecycle, internal }: TServiceParams) {
lifecycle.onReady(async() => {
await app.gotify.reminders({
message: `Failed to create countdown timer for ${internal.utils.relativeDate(target)}`,
});
})
}