iobroker.gotify-ws 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/build/main.js +6 -1
- package/build/main.js.map +2 -2
- package/io-package.json +29 -29
- package/package.json +13 -18
package/README.md
CHANGED
|
@@ -67,6 +67,13 @@ You can then configure a notification service of your choice for forwarding.
|
|
|
67
67
|
## Changelog
|
|
68
68
|
|
|
69
69
|
<!-- ### **WORK IN PROGRESS** -->
|
|
70
|
+
### 0.2.4 (2025-11-23)
|
|
71
|
+
* (simatec) dependencies updated
|
|
72
|
+
* (simatec) Fix npm publish
|
|
73
|
+
|
|
74
|
+
### 0.2.3 (2025-08-31)
|
|
75
|
+
* (simatec) dependencies updated
|
|
76
|
+
|
|
70
77
|
### 0.2.2 (2025-07-20)
|
|
71
78
|
* (simatec) dependencies updated
|
|
72
79
|
|
package/build/main.js
CHANGED
|
@@ -154,7 +154,12 @@ class GotifyWs extends utils.Adapter {
|
|
|
154
154
|
this.log.info("WebSocket connected");
|
|
155
155
|
});
|
|
156
156
|
this.ws.on("message", async (data) => {
|
|
157
|
-
|
|
157
|
+
if (typeof data !== "string" && !Buffer.isBuffer(data)) {
|
|
158
|
+
this.log.warn("Unexpected WebSocket message format");
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const message = typeof data === "string" ? data : data.toString("utf-8");
|
|
162
|
+
const line = JSON.parse(message);
|
|
158
163
|
await this.pushMessage(line);
|
|
159
164
|
});
|
|
160
165
|
this.ws.on("close", async () => {
|
package/build/main.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/main.ts"],
|
|
4
|
-
"sourcesContent": ["'use strict';\n\nimport WebSocket from 'ws';\nimport * as utils from '@iobroker/adapter-core';\n\nclass GotifyWs extends utils.Adapter {\n private systemLang: string = 'de';\n private ws!: WebSocket;\n private timer: ioBroker.Timeout | undefined = undefined;\n private stopNow: boolean = false;\n\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'gotify-ws',\n });\n this.on('ready', this.onReady.bind(this));\n this.on('unload', this.onUnload.bind(this));\n }\n\n private async onReady(): Promise<void> {\n const sysLang = await this.getForeignObjectAsync('system.config');\n\n if (sysLang && sysLang.common && sysLang.common.language) {\n this.systemLang = sysLang.common.language;\n }\n\n await this.setState('info.connection', false, true);\n this.connectWebSocket();\n }\n\n private async onUnload(callback: () => void): Promise<void> {\n await this.setState('info.connection', false, true);\n\n try {\n if (this.ws) {\n this.stopNow = true;\n this.ws.close();\n this.ws.terminate();\n this.clearTimeout(this.timer);\n this.timer = null;\n }\n callback();\n } catch (e) {\n callback();\n }\n }\n\n private async onMessage(obj: ioBroker.Message | null): Promise<void> {\n switch (obj?.command) {\n case 'sendToInstance':\n if (obj && obj.command === 'sendToInstance' && obj.message && obj.message.type) {\n const resultInstances = [];\n\n const instances = await this.getObjectViewAsync('system', 'instance', {\n startkey: `system.adapter.${obj.message.type}.`,\n\n endkey: `system.adapter.${obj.message.type}.\\u9999`,\n }).catch(err => this.log.error(err));\n\n if (instances && instances.rows && instances.rows.length != 0) {\n instances.rows.forEach(row => {\n resultInstances.push({\n label: row.id.replace('system.adapter.', ''),\n value: row.id.replace('system.adapter.', ''),\n });\n });\n } else {\n resultInstances.push({\n label: this._('none', this.systemLang),\n value: 'none',\n });\n }\n this.log.debug(`sendToInstance - ${JSON.stringify(obj)}`);\n this.sendTo(obj.from, obj.command, resultInstances, obj.callback);\n }\n break;\n\n case 'sendToTelegramUser': {\n let useUsername = false;\n\n if (obj && obj.command === 'sendToTelegramUser' && obj.message && obj.message.instance) {\n const inst = obj.message.instance ? obj.message.instance : this.config.telegramInstance;\n const userList = (await this.getForeignStateAsync(`${inst}.communicate.users`)) as ioBroker.State;\n const configTelegram = await this.getForeignObjectAsync(`system.adapter.${inst}`);\n\n if (configTelegram && configTelegram.native) {\n const native = configTelegram.native;\n useUsername = native.useUsername;\n }\n\n const resultUser = [{ label: this._('All Receiver', this.systemLang), value: 'allTelegramUsers' }];\n\n if (userList && userList?.val) {\n const users = JSON.parse(userList?.val as string);\n\n for (const i in users) {\n resultUser.push({\n label: useUsername === true ? users[i].userName : users[i].firstName,\n value: useUsername === true ? users[i].userName : users[i].firstName,\n });\n }\n\n try {\n this.sendTo(obj.from, obj.command, resultUser, obj.callback);\n } catch (err) {\n this.log.error(`Cannot parse stored user IDs from Telegram: ${err}`);\n }\n }\n }\n break;\n }\n case 'sendToDiscordTarget':\n if (obj && obj.command === 'sendToDiscordTarget' && obj.message && obj.message.instance) {\n const resultTarget = [{ label: this._('none', this.systemLang), value: 'none' }];\n\n const targetList = await this.sendToAsync(obj.message.instance, 'getNotificationTargets', {});\n\n if (Array.isArray(targetList)) {\n for (const i in targetList) {\n resultTarget.push({\n label: targetList[i].value,\n value: targetList[i].value,\n });\n }\n }\n\n try {\n this.sendTo(obj.from, obj.command, resultTarget, obj.callback);\n } catch (err) {\n this.log.error(`Cannot parse stored user IDs from Discord: ${err}`);\n }\n } else if (obj && obj.command === 'sendToDiscordTarget') {\n const resultTarget = [{ label: this._('none', this.systemLang), value: 'none' }];\n\n try {\n this.sendTo(obj.from, obj.command, resultTarget, obj.callback);\n } catch (err) {\n this.log.error(`Cannot parse stored user IDs from Discord: ${err}`);\n }\n }\n break;\n }\n }\n\n private connectWebSocket(): void {\n if (this.config.ip && this.config.port) {\n const uri = `ws://${this.config.ip}:${this.config.port}/stream`;\n\n this.ws = new WebSocket(uri, {\n headers: {\n 'X-Gotify-Key': this.config.token,\n },\n });\n\n this.ws.on('open', async () => {\n await this.setState('info.connection', true, true);\n this.log.info('WebSocket connected');\n });\n\n this.ws.on('message', async data => {\n const line = JSON.parse(data.toString('utf-8'));\n await this.pushMessage(line);\n });\n\n this.ws.on('close', async () => {\n await this.setState('info.connection', false, true);\n this.log.info('WebSocket closed');\n if (this.stopNow === false) {\n this.timer = this.setTimeout(this.connectWebSocket, 5000);\n }\n });\n\n this.ws.on('error', async err => {\n await this.setState('info.connection', false, true);\n\n this.log.error(`WebSocket error: ${err}`);\n });\n } else {\n this.log.error('WebSocket error: Please check your Configuration');\n }\n }\n\n private async pushMessage(line: ioBroker.GotifyMessage): Promise<void> {\n if (this.config.notificationType) {\n switch (this.config.notificationType) {\n case 'telegram':\n if (\n this.config.telegramUser &&\n this.config.telegramUser === 'allTelegramUsers' &&\n this.config.telegramInstance\n ) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : '<b>Gotifi WS Message</b>';\n\n try {\n await this.sendToAsync(this.config.telegramInstance, 'send', {\n parse_mode: 'HTML',\n text: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending Telegram message: ${err}`);\n }\n } else if (\n this.config.telegramUser &&\n this.config.telegramUser != 'allTelegramUsers' &&\n this.config.telegramInstance\n ) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : '<b>Gotifi WS Message</b>';\n\n try {\n await this.sendToAsync(this.config.telegramInstance, 'send', {\n user: this.config.telegramUser,\n parse_mode: 'HTML',\n text: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending Telegram message: ${err}`);\n }\n }\n break;\n case 'email':\n if (this.config.emailInstance && this.config.emailReceiver && this.config.emailSender) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title = line.title != '' ? line.title.replace(/[`]/g, '') : 'Gotifi WS Message';\n\n try {\n await this.sendToAsync(this.config.emailInstance, 'send', {\n text: formatMessage,\n to: this.config.emailReceiver,\n subject: title,\n from: this.config.emailSender,\n });\n } catch (err) {\n this.log.warn(`Error sending E-Mail message: ${err}`);\n }\n }\n break;\n case 'pushover':\n if (\n this.config.pushoverSilentNotice === true &&\n this.config.pushoverInstance &&\n this.config.pushoverDeviceID\n ) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : '<b>Gotifi WS Message</b>';\n\n try {\n await this.sendToAsync(this.config.pushoverInstance, 'send', {\n message: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n sound: '',\n priority: -1,\n title: title,\n device: this.config.pushoverDeviceID,\n html: 1,\n });\n } catch (err) {\n this.log.warn(`Error sending Pushover message: ${err}`);\n }\n } else if (this.config.pushoverInstance && this.config.pushoverDeviceID) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : '<b>Gotifi WS Message</b>';\n\n try {\n await this.sendToAsync(this.config.pushoverInstance, 'send', {\n message: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n sound: '',\n title: title,\n device: this.config.pushoverDeviceID,\n html: 1,\n });\n } catch (err) {\n this.log.warn(`Error sending Pushover message: ${err}`);\n }\n }\n break;\n case 'whatsapp-cmb':\n if (this.config.whatsappInstance) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title = line.title != '' ? `*${line.title.replace(/[`]/g, '')}*` : '*Gotifi WS Message*';\n\n try {\n await this.sendToAsync(this.config.whatsappInstance, 'send', {\n text: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending WhatsApp message: ${err}`);\n }\n }\n break;\n case 'notification-manager':\n if (this.config.notificationManagerInstance) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : '<b>Gotifi WS Message</b>';\n\n try {\n await this.sendToAsync(\n this.config.notificationManagerInstance,\n 'registerUserNotification',\n {\n category: 'notify',\n message: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n },\n );\n } catch (err) {\n this.log.warn(`Error sending Notification-Manager message: ${err}`);\n }\n }\n break;\n case 'signal-cmb':\n if (this.config.signalInstance) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title = line.title != '' ? line.title.replace(/[`]/g, '') : 'Gotifi WS Message';\n\n try {\n await this.sendToAsync(this.config.signalInstance, 'send', {\n text: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending Signal message: ${err}`);\n }\n }\n break;\n case 'matrix-org':\n if (this.config.matrixInstance) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : '<b>Gotifi WS Message</b>';\n\n try {\n await this.sendToAsync(this.config.matrixInstance, {\n html: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending Matrix message: ${err}`);\n }\n }\n break;\n case 'discord':\n if (this.config.discordInstance && this.config.discordTarget) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : 'Gotifi WS Message';\n\n if (this.config.discordTarget.match(/^\\d+$/)) {\n // send to a single user\n try {\n await this.sendToAsync(this.config.discordInstance, 'sendMessage', {\n userId: this.config.discordTarget,\n content: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending Discord message: ${err}`);\n }\n } else if (this.config.discordTarget.match(/^\\d+\\/\\d+$/)) {\n // send to a server channel\n const [serverId, channelId] = this.config.discordTarget.split('/');\n try {\n await this.sendToAsync(this.config.discordInstance, 'sendMessage', {\n serverId,\n channelId,\n content: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending Discord message: ${err}`);\n }\n }\n }\n break;\n }\n } else {\n this.log.error('Push-Message error: Please check your Configuration');\n }\n }\n\n private async _(word: string, systemLang: string): Promise<string> {\n return new Promise(resolve => {\n void (async () => {\n const translations = await import(`../admin/i18n/${systemLang ? systemLang : 'en'}/translations.json`);\n if (translations[word]) {\n resolve(translations[word]);\n } else {\n this.log.debug(`Please translate in translations.json: ${word}`);\n resolve(word);\n }\n })();\n });\n }\n}\n\nif (require.main !== module) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) => new GotifyWs(options);\n} else {\n // otherwise start the instance directly\n (() => new GotifyWs())();\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["'use strict';\n\nimport WebSocket from 'ws';\nimport * as utils from '@iobroker/adapter-core';\n\nclass GotifyWs extends utils.Adapter {\n private systemLang: string = 'de';\n private ws!: WebSocket;\n private timer: ioBroker.Timeout | undefined = undefined;\n private stopNow: boolean = false;\n\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'gotify-ws',\n });\n this.on('ready', this.onReady.bind(this));\n this.on('unload', this.onUnload.bind(this));\n }\n\n private async onReady(): Promise<void> {\n const sysLang = await this.getForeignObjectAsync('system.config');\n\n if (sysLang && sysLang.common && sysLang.common.language) {\n this.systemLang = sysLang.common.language;\n }\n\n await this.setState('info.connection', false, true);\n this.connectWebSocket();\n }\n\n private async onUnload(callback: () => void): Promise<void> {\n await this.setState('info.connection', false, true);\n\n try {\n if (this.ws) {\n this.stopNow = true;\n this.ws.close();\n this.ws.terminate();\n this.clearTimeout(this.timer);\n this.timer = null;\n }\n callback();\n } catch (e) {\n callback();\n }\n }\n\n private async onMessage(obj: ioBroker.Message | null): Promise<void> {\n switch (obj?.command) {\n case 'sendToInstance':\n if (obj && obj.command === 'sendToInstance' && obj.message && obj.message.type) {\n const resultInstances = [];\n\n const instances = await this.getObjectViewAsync('system', 'instance', {\n startkey: `system.adapter.${obj.message.type}.`,\n\n endkey: `system.adapter.${obj.message.type}.\\u9999`,\n }).catch(err => this.log.error(err));\n\n if (instances && instances.rows && instances.rows.length != 0) {\n instances.rows.forEach(row => {\n resultInstances.push({\n label: row.id.replace('system.adapter.', ''),\n value: row.id.replace('system.adapter.', ''),\n });\n });\n } else {\n resultInstances.push({\n label: this._('none', this.systemLang),\n value: 'none',\n });\n }\n this.log.debug(`sendToInstance - ${JSON.stringify(obj)}`);\n this.sendTo(obj.from, obj.command, resultInstances, obj.callback);\n }\n break;\n\n case 'sendToTelegramUser': {\n let useUsername = false;\n\n if (obj && obj.command === 'sendToTelegramUser' && obj.message && obj.message.instance) {\n const inst = obj.message.instance ? obj.message.instance : this.config.telegramInstance;\n const userList = (await this.getForeignStateAsync(`${inst}.communicate.users`)) as ioBroker.State;\n const configTelegram = await this.getForeignObjectAsync(`system.adapter.${inst}`);\n\n if (configTelegram && configTelegram.native) {\n const native = configTelegram.native;\n useUsername = native.useUsername;\n }\n\n const resultUser = [{ label: this._('All Receiver', this.systemLang), value: 'allTelegramUsers' }];\n\n if (userList && userList?.val) {\n const users = JSON.parse(userList?.val as string);\n\n for (const i in users) {\n resultUser.push({\n label: useUsername === true ? users[i].userName : users[i].firstName,\n value: useUsername === true ? users[i].userName : users[i].firstName,\n });\n }\n\n try {\n this.sendTo(obj.from, obj.command, resultUser, obj.callback);\n } catch (err) {\n this.log.error(`Cannot parse stored user IDs from Telegram: ${err}`);\n }\n }\n }\n break;\n }\n case 'sendToDiscordTarget':\n if (obj && obj.command === 'sendToDiscordTarget' && obj.message && obj.message.instance) {\n const resultTarget = [{ label: this._('none', this.systemLang), value: 'none' }];\n\n const targetList = await this.sendToAsync(obj.message.instance, 'getNotificationTargets', {});\n\n if (Array.isArray(targetList)) {\n for (const i in targetList) {\n resultTarget.push({\n label: targetList[i].value,\n value: targetList[i].value,\n });\n }\n }\n\n try {\n this.sendTo(obj.from, obj.command, resultTarget, obj.callback);\n } catch (err) {\n this.log.error(`Cannot parse stored user IDs from Discord: ${err}`);\n }\n } else if (obj && obj.command === 'sendToDiscordTarget') {\n const resultTarget = [{ label: this._('none', this.systemLang), value: 'none' }];\n\n try {\n this.sendTo(obj.from, obj.command, resultTarget, obj.callback);\n } catch (err) {\n this.log.error(`Cannot parse stored user IDs from Discord: ${err}`);\n }\n }\n break;\n }\n }\n\n private connectWebSocket(): void {\n if (this.config.ip && this.config.port) {\n const uri = `ws://${this.config.ip}:${this.config.port}/stream`;\n\n this.ws = new WebSocket(uri, {\n headers: {\n 'X-Gotify-Key': this.config.token,\n },\n });\n\n this.ws.on('open', async () => {\n await this.setState('info.connection', true, true);\n this.log.info('WebSocket connected');\n });\n\n this.ws.on('message', async data => {\n if (typeof data !== 'string' && !Buffer.isBuffer(data)) {\n this.log.warn('Unexpected WebSocket message format');\n return;\n }\n\n const message = typeof data === 'string' ? data : data.toString('utf-8');\n const line = JSON.parse(message);\n await this.pushMessage(line);\n });\n\n this.ws.on('close', async () => {\n await this.setState('info.connection', false, true);\n this.log.info('WebSocket closed');\n if (this.stopNow === false) {\n this.timer = this.setTimeout(this.connectWebSocket, 5000);\n }\n });\n\n this.ws.on('error', async err => {\n await this.setState('info.connection', false, true);\n\n this.log.error(`WebSocket error: ${err}`);\n });\n } else {\n this.log.error('WebSocket error: Please check your Configuration');\n }\n }\n\n private async pushMessage(line: ioBroker.GotifyMessage): Promise<void> {\n if (this.config.notificationType) {\n switch (this.config.notificationType) {\n case 'telegram':\n if (\n this.config.telegramUser &&\n this.config.telegramUser === 'allTelegramUsers' &&\n this.config.telegramInstance\n ) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : '<b>Gotifi WS Message</b>';\n\n try {\n await this.sendToAsync(this.config.telegramInstance, 'send', {\n parse_mode: 'HTML',\n text: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending Telegram message: ${err}`);\n }\n } else if (\n this.config.telegramUser &&\n this.config.telegramUser != 'allTelegramUsers' &&\n this.config.telegramInstance\n ) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : '<b>Gotifi WS Message</b>';\n\n try {\n await this.sendToAsync(this.config.telegramInstance, 'send', {\n user: this.config.telegramUser,\n parse_mode: 'HTML',\n text: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending Telegram message: ${err}`);\n }\n }\n break;\n case 'email':\n if (this.config.emailInstance && this.config.emailReceiver && this.config.emailSender) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title = line.title != '' ? line.title.replace(/[`]/g, '') : 'Gotifi WS Message';\n\n try {\n await this.sendToAsync(this.config.emailInstance, 'send', {\n text: formatMessage,\n to: this.config.emailReceiver,\n subject: title,\n from: this.config.emailSender,\n });\n } catch (err) {\n this.log.warn(`Error sending E-Mail message: ${err}`);\n }\n }\n break;\n case 'pushover':\n if (\n this.config.pushoverSilentNotice === true &&\n this.config.pushoverInstance &&\n this.config.pushoverDeviceID\n ) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : '<b>Gotifi WS Message</b>';\n\n try {\n await this.sendToAsync(this.config.pushoverInstance, 'send', {\n message: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n sound: '',\n priority: -1,\n title: title,\n device: this.config.pushoverDeviceID,\n html: 1,\n });\n } catch (err) {\n this.log.warn(`Error sending Pushover message: ${err}`);\n }\n } else if (this.config.pushoverInstance && this.config.pushoverDeviceID) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : '<b>Gotifi WS Message</b>';\n\n try {\n await this.sendToAsync(this.config.pushoverInstance, 'send', {\n message: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n sound: '',\n title: title,\n device: this.config.pushoverDeviceID,\n html: 1,\n });\n } catch (err) {\n this.log.warn(`Error sending Pushover message: ${err}`);\n }\n }\n break;\n case 'whatsapp-cmb':\n if (this.config.whatsappInstance) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title = line.title != '' ? `*${line.title.replace(/[`]/g, '')}*` : '*Gotifi WS Message*';\n\n try {\n await this.sendToAsync(this.config.whatsappInstance, 'send', {\n text: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending WhatsApp message: ${err}`);\n }\n }\n break;\n case 'notification-manager':\n if (this.config.notificationManagerInstance) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : '<b>Gotifi WS Message</b>';\n\n try {\n await this.sendToAsync(\n this.config.notificationManagerInstance,\n 'registerUserNotification',\n {\n category: 'notify',\n message: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n },\n );\n } catch (err) {\n this.log.warn(`Error sending Notification-Manager message: ${err}`);\n }\n }\n break;\n case 'signal-cmb':\n if (this.config.signalInstance) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title = line.title != '' ? line.title.replace(/[`]/g, '') : 'Gotifi WS Message';\n\n try {\n await this.sendToAsync(this.config.signalInstance, 'send', {\n text: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending Signal message: ${err}`);\n }\n }\n break;\n case 'matrix-org':\n if (this.config.matrixInstance) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : '<b>Gotifi WS Message</b>';\n\n try {\n await this.sendToAsync(this.config.matrixInstance, {\n html: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending Matrix message: ${err}`);\n }\n }\n break;\n case 'discord':\n if (this.config.discordInstance && this.config.discordTarget) {\n const formatMessage = line.message.replace(/[`]/g, '').replace(/[']/g, '\"');\n\n const title =\n line.title != '' ? `<b>${line.title.replace(/[`]/g, '')}</b>` : 'Gotifi WS Message';\n\n if (this.config.discordTarget.match(/^\\d+$/)) {\n // send to a single user\n try {\n await this.sendToAsync(this.config.discordInstance, 'sendMessage', {\n userId: this.config.discordTarget,\n content: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending Discord message: ${err}`);\n }\n } else if (this.config.discordTarget.match(/^\\d+\\/\\d+$/)) {\n // send to a server channel\n const [serverId, channelId] = this.config.discordTarget.split('/');\n try {\n await this.sendToAsync(this.config.discordInstance, 'sendMessage', {\n serverId,\n channelId,\n content: `${title != '' ? `${title}\\n` : ''}${formatMessage}`,\n });\n } catch (err) {\n this.log.warn(`Error sending Discord message: ${err}`);\n }\n }\n }\n break;\n }\n } else {\n this.log.error('Push-Message error: Please check your Configuration');\n }\n }\n\n private async _(word: string, systemLang: string): Promise<string> {\n return new Promise(resolve => {\n void (async () => {\n const translations = await import(`../admin/i18n/${systemLang ? systemLang : 'en'}/translations.json`);\n if (translations[word]) {\n resolve(translations[word]);\n } else {\n this.log.debug(`Please translate in translations.json: ${word}`);\n resolve(word);\n }\n })();\n });\n }\n}\n\nif (require.main !== module) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) => new GotifyWs(options);\n} else {\n // otherwise start the instance directly\n (() => new GotifyWs())();\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["WebSocket"]
|
|
7
7
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "gotify-ws",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.4",
|
|
5
5
|
"news": {
|
|
6
|
+
"0.2.4": {
|
|
7
|
+
"en": "dependencies updated\nFix npm publish",
|
|
8
|
+
"de": "aktualisierte abhängigkeiten\nNpm veröffentlichen",
|
|
9
|
+
"ru": "обновленные зависимости\nИздательство Fix npm",
|
|
10
|
+
"pt": "dependências atualizadas\nCorrigir a publicação do npm",
|
|
11
|
+
"nl": "afhankelijkheden bijgewerkt\nFix npm publiceren",
|
|
12
|
+
"fr": "dépendances mises à jour\nCorrection de npm publier",
|
|
13
|
+
"it": "dipendenze aggiornate\nFisso npm pubblicazione",
|
|
14
|
+
"es": "dependencias actualizadas\nCorrección npm publicar",
|
|
15
|
+
"pl": "zaktualizowane zależności\nNapraw publikację npm",
|
|
16
|
+
"uk": "оновлені залежності\nВиправлення npm опублікування",
|
|
17
|
+
"zh-cn": "更新依赖关系\n修复 npm 发布"
|
|
18
|
+
},
|
|
19
|
+
"0.2.3": {
|
|
20
|
+
"en": "dependencies updated",
|
|
21
|
+
"de": "aktualisierte abhängigkeiten",
|
|
22
|
+
"ru": "обновленные зависимости",
|
|
23
|
+
"pt": "dependências atualizadas",
|
|
24
|
+
"nl": "afhankelijkheden bijgewerkt",
|
|
25
|
+
"fr": "dépendances mises à jour",
|
|
26
|
+
"it": "dipendenze aggiornate",
|
|
27
|
+
"es": "dependencias actualizadas",
|
|
28
|
+
"pl": "zaktualizowane zależności",
|
|
29
|
+
"uk": "оновлені залежності",
|
|
30
|
+
"zh-cn": "更新依赖关系"
|
|
31
|
+
},
|
|
6
32
|
"0.2.2": {
|
|
7
33
|
"en": "dependencies updated",
|
|
8
34
|
"de": "aktualisierte abhängigkeiten",
|
|
@@ -67,32 +93,6 @@
|
|
|
67
93
|
"pl": "Aktualizacja zależności\nmały fix",
|
|
68
94
|
"uk": "Залежність оновлено\nневелика фіксація",
|
|
69
95
|
"zh-cn": "更新的依赖关系\n小修补"
|
|
70
|
-
},
|
|
71
|
-
"0.1.11": {
|
|
72
|
-
"en": "eslint-config fix\nCode fix\nDependencies updated\nUpdate License",
|
|
73
|
-
"de": "eslint-config fix\nCode fix\nAusgaben aktualisiert\nLizenz aktualisieren",
|
|
74
|
-
"ru": "eslint-конфигурация\nКод\nОбновленные данные о зависимостях\nЛицензия обновления",
|
|
75
|
-
"pt": "eslint-config fix\nCorreção de código\nDependências atualizadas\nLicença de atualização",
|
|
76
|
-
"nl": "eslint-config fix\nCodefix\nAfhankelijkheden bijgewerkt\nLicentie bijwerken",
|
|
77
|
-
"fr": "fixateur eslint-config\nFixation du code\nDépendances actualisées\nMettre à jour la licence",
|
|
78
|
-
"it": "eslint-config fix\nCodice di correzione\nDipendenze aggiornate\nLicenza di aggiornamento",
|
|
79
|
-
"es": "eslint-config fix\nCódigo\nActualización de las dependencias\nActualizar Licencia",
|
|
80
|
-
"pl": "fix eslint- config\nUstawienie kodu\nAktualizacja zależności\nUaktualnij licencję",
|
|
81
|
-
"uk": "eslint-config виправити\nВиправлення коду\nЗалежність оновлено\nОновлення ліцензії",
|
|
82
|
-
"zh-cn": "埃斯林特配置修复\n代码修正\n更新的依赖关系\n更新许可证"
|
|
83
|
-
},
|
|
84
|
-
"0.1.10": {
|
|
85
|
-
"en": "Dependencies updated\nResponsive Design fix\nIssue Action added\neslint-config added",
|
|
86
|
-
"de": "Ausgaben aktualisiert\nResponsive Design fix\nAusgabe Aktion hinzugefügt\neslint-config hinzugefügt",
|
|
87
|
-
"ru": "Обновленные данные о зависимостях\nРеакция Responsive Design\nДополнительные меры\nдобавлена eslint-config",
|
|
88
|
-
"pt": "Dependências atualizadas\nCorreção de design responsivo\nAção de problemas adicionada\neslint-config adicionado",
|
|
89
|
-
"nl": "Afhankelijkheden bijgewerkt\nResponsive Design fix\nOnderwerpactie toegevoegd\neslint-config toegevoegd",
|
|
90
|
-
"fr": "Dépendances actualisées\nCorrection de conception sensible\nMesure à prendre\neslint-config ajouté",
|
|
91
|
-
"it": "Dipendenze aggiornate\nResponsive Design fix\nAzione di problema aggiunto\neslint-config aggiunto",
|
|
92
|
-
"es": "Actualización de las dependencias\nResponsive Design fix\nTema Acción añadido\neslint-config añadido",
|
|
93
|
-
"pl": "Aktualizacja zależności\nResponsive Design fix\nDodano działanie\neslint- config dodany",
|
|
94
|
-
"uk": "Залежність оновлено\nКріплення адаптивного дизайну\nДодана емісія\neslint-config додано",
|
|
95
|
-
"zh-cn": "更新的依赖关系\n反应设计修正\n添加的问题行动\n添加埃斯林特配置"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
|
@@ -157,12 +157,12 @@
|
|
|
157
157
|
},
|
|
158
158
|
"dependencies": [
|
|
159
159
|
{
|
|
160
|
-
"js-controller": ">=
|
|
160
|
+
"js-controller": ">=6.0.11"
|
|
161
161
|
}
|
|
162
162
|
],
|
|
163
163
|
"globalDependencies": [
|
|
164
164
|
{
|
|
165
|
-
"admin": ">=7.
|
|
165
|
+
"admin": ">=7.6.17"
|
|
166
166
|
}
|
|
167
167
|
]
|
|
168
168
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.gotify-ws",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "Gotify web socket for connection to various notification systems",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "simatec",
|
|
@@ -28,28 +28,23 @@
|
|
|
28
28
|
"node": ">= 20"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@iobroker/adapter-core": "^3.2
|
|
32
|
-
"axios": "^1.
|
|
31
|
+
"@iobroker/adapter-core": "^3.3.2",
|
|
32
|
+
"axios": "^1.13.2",
|
|
33
33
|
"ws": "^8.18.3"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@alcalzone/release-script": "^
|
|
37
|
-
"@alcalzone/release-script-plugin-iobroker": "^
|
|
38
|
-
"@alcalzone/release-script-plugin-license": "^
|
|
39
|
-
"@alcalzone/release-script-plugin-manual-review": "^
|
|
40
|
-
"@iobroker/adapter-dev": "^1.
|
|
41
|
-
"@iobroker/eslint-config": "^2.0
|
|
42
|
-
"@iobroker/testing": "^5.
|
|
43
|
-
"@tsconfig/node20": "^20.1.
|
|
36
|
+
"@alcalzone/release-script": "^5.0.0",
|
|
37
|
+
"@alcalzone/release-script-plugin-iobroker": "^4.0.0",
|
|
38
|
+
"@alcalzone/release-script-plugin-license": "^4.0.0",
|
|
39
|
+
"@alcalzone/release-script-plugin-manual-review": "^4.0.0",
|
|
40
|
+
"@iobroker/adapter-dev": "^1.5.0",
|
|
41
|
+
"@iobroker/eslint-config": "^2.2.0",
|
|
42
|
+
"@iobroker/testing": "^5.2.2",
|
|
43
|
+
"@tsconfig/node20": "^20.1.8",
|
|
44
44
|
"@types/ws": "^8.18.1",
|
|
45
|
-
"
|
|
46
|
-
"chai-as-promised": "^8.0.1",
|
|
47
|
-
"mocha": "^11.7.1",
|
|
48
|
-
"rimraf": "^6.0.1",
|
|
49
|
-
"sinon": "^21.0.0",
|
|
50
|
-
"sinon-chai": "^4.0.0",
|
|
45
|
+
"rimraf": "^6.1.2",
|
|
51
46
|
"ts-node": "^10.9.2",
|
|
52
|
-
"typescript": "^5.
|
|
47
|
+
"typescript": "^5.9.3"
|
|
53
48
|
},
|
|
54
49
|
"main": "build/main.js",
|
|
55
50
|
"files": [
|