Adding ntfy module
This commit is contained in:
parent
f8699080a8
commit
2f7d5c68ef
6 changed files with 188 additions and 5 deletions
36
package-lock.json
generated
36
package-lock.json
generated
|
|
@ -17,6 +17,7 @@
|
|||
"@nestjs/platform-express": "^9.0.0",
|
||||
"@nestjs/schedule": "^2.2.2",
|
||||
"@nestjs/typeorm": "^9.0.1",
|
||||
"axios": "^1.5.0",
|
||||
"bull": "^4.10.4",
|
||||
"class-transformer": "^0.5.1",
|
||||
"class-validator": "^0.14.0",
|
||||
|
|
@ -3451,8 +3452,17 @@
|
|||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
||||
"dev": true
|
||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
|
||||
"integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.0",
|
||||
"form-data": "^4.0.0",
|
||||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/babel-jest": {
|
||||
"version": "29.5.0",
|
||||
|
|
@ -4300,7 +4310,6 @@
|
|||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
},
|
||||
|
|
@ -4611,7 +4620,6 @@
|
|||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
|
|
@ -5741,6 +5749,25 @@
|
|||
"integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
||||
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/RubenVerborgh"
|
||||
}
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"debug": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/fork-ts-checker-webpack-plugin": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz",
|
||||
|
|
@ -5865,7 +5892,6 @@
|
|||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@
|
|||
"@nestjs/platform-express": "^9.0.0",
|
||||
"@nestjs/schedule": "^2.2.2",
|
||||
"@nestjs/typeorm": "^9.0.1",
|
||||
"axios": "^1.5.0",
|
||||
"bull": "^4.10.4",
|
||||
"class-transformer": "^0.5.1",
|
||||
"class-validator": "^0.14.0",
|
||||
|
|
|
|||
34
src/ntfy/client.ts
Normal file
34
src/ntfy/client.ts
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
import { Inject, Injectable } from '@nestjs/common'
|
||||
import { ConfigService } from '@nestjs/config'
|
||||
import { Axios } from 'axios'
|
||||
|
||||
import { MessageConfig } from './types'
|
||||
|
||||
@Injectable()
|
||||
export class NtfyClient {
|
||||
private readonly httpClient: Axios
|
||||
private readonly topic: string
|
||||
constructor(
|
||||
@Inject(ConfigService)
|
||||
private readonly configService: ConfigService,
|
||||
) {
|
||||
const host = this.configService.getOrThrow<string>('NTFY_HOST')
|
||||
this.topic = this.configService.getOrThrow<string>('NTFY_TOPIC')
|
||||
this.httpClient = new Axios({
|
||||
baseURL: `https://${host}`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
async publish(message: Omit<MessageConfig, 'topic'>) {
|
||||
return await this.httpClient.post(
|
||||
'/',
|
||||
JSON.stringify({
|
||||
topic: this.topic,
|
||||
...message,
|
||||
}),
|
||||
)
|
||||
}
|
||||
}
|
||||
10
src/ntfy/module.ts
Normal file
10
src/ntfy/module.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
import { Module } from '@nestjs/common'
|
||||
|
||||
import { NtfyClient } from './client'
|
||||
import { NtfyProvider } from './provider'
|
||||
|
||||
@Module({
|
||||
providers: [NtfyProvider, NtfyClient],
|
||||
exports: [NtfyProvider, NtfyClient],
|
||||
})
|
||||
export class NtfyModule {}
|
||||
38
src/ntfy/provider.ts
Normal file
38
src/ntfy/provider.ts
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
import { Inject, Injectable } from '@nestjs/common'
|
||||
|
||||
import { NtfyClient } from './client'
|
||||
import { MessagePriority, MessageTags } from './types'
|
||||
|
||||
@Injectable()
|
||||
export class NtfyProvider {
|
||||
constructor(
|
||||
@Inject(NtfyClient)
|
||||
private readonly ntfyClient: NtfyClient,
|
||||
) {}
|
||||
|
||||
async sendErrorNotification(
|
||||
title: string,
|
||||
message: string,
|
||||
priority = MessagePriority.default,
|
||||
) {
|
||||
await this.ntfyClient.publish({
|
||||
title,
|
||||
message,
|
||||
tags: [MessageTags.red_x],
|
||||
priority,
|
||||
})
|
||||
}
|
||||
|
||||
async sendInfoNotification(
|
||||
title: string,
|
||||
message: string,
|
||||
priority = MessagePriority.low,
|
||||
) {
|
||||
await this.ntfyClient.publish({
|
||||
title,
|
||||
message,
|
||||
tags: [MessageTags.info],
|
||||
priority,
|
||||
})
|
||||
}
|
||||
}
|
||||
74
src/ntfy/types.ts
Normal file
74
src/ntfy/types.ts
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
export enum MessageTags {
|
||||
thumbs_up = '+1',
|
||||
thumbs_down = '-1',
|
||||
warning = 'warning',
|
||||
rotating_light = 'rotating-light',
|
||||
skull_and_crossbones = 'skull_and_crossbones',
|
||||
tada = 'tada',
|
||||
outbox_tray = 'outbox_tray',
|
||||
inbox_tray = 'inbox_tray',
|
||||
date = 'date',
|
||||
no_entry = 'no_entry',
|
||||
exclamation = 'exclamation',
|
||||
question = 'question',
|
||||
white_check_mark = 'white_check_mark',
|
||||
red_x = 'x',
|
||||
zero = 'zero',
|
||||
one = 'zero',
|
||||
two = 'zero',
|
||||
three = 'zero',
|
||||
four = 'zero',
|
||||
five = 'zero',
|
||||
six = 'zero',
|
||||
seven = 'zero',
|
||||
eight = 'zero',
|
||||
nine = 'zero',
|
||||
new = 'new',
|
||||
ok = 'ok',
|
||||
sos = 'sos',
|
||||
clock12 = 'clock12',
|
||||
clock1230 = 'clock1230',
|
||||
clock1 = 'clock1',
|
||||
clock130 = 'clock130',
|
||||
clock2 = 'clock2',
|
||||
clock230 = 'clock230',
|
||||
clock3 = 'clock3',
|
||||
clock330 = 'clock330',
|
||||
clock4 = 'clock4',
|
||||
clock430 = 'clock430',
|
||||
clock5 = 'clock5',
|
||||
clock530 = 'clock530',
|
||||
clock6 = 'clock6',
|
||||
clock630 = 'clock630',
|
||||
clock7 = 'clock7',
|
||||
clock730 = 'clock730',
|
||||
clock8 = 'clock8',
|
||||
clock830 = 'clock830',
|
||||
clock9 = 'clock9',
|
||||
clock930 = 'clock930',
|
||||
clock10 = 'clock10',
|
||||
clock1030 = 'clock1030',
|
||||
clock11 = 'clock11',
|
||||
clock1130 = 'clock1130',
|
||||
badminton = 'badminton',
|
||||
info = 'information_source',
|
||||
}
|
||||
|
||||
export enum MessagePriority {
|
||||
min = '1',
|
||||
low = '2',
|
||||
default = '3',
|
||||
high = '4',
|
||||
max = '5',
|
||||
}
|
||||
|
||||
export interface MessageConfig {
|
||||
topic: string
|
||||
message?: string
|
||||
title?: string
|
||||
tags?: MessageTags[]
|
||||
priority?: MessagePriority
|
||||
actions?: object[]
|
||||
markdown?: boolean
|
||||
icon?: string
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue