diff --git a/apps/docs/src/content/docs/alerting/providers/ntfy.mdx b/apps/docs/src/content/docs/alerting/providers/ntfy.mdx new file mode 100644 index 00000000..2f152cf9 --- /dev/null +++ b/apps/docs/src/content/docs/alerting/providers/ntfy.mdx @@ -0,0 +1,13 @@ +--- +title: ntfy.sh +description: "How to set up ntfy.sh notifications in OpenStatus to get alerts when your synthetic check fail" +--- + +[ntfy.sh](https://ntfy.sh/) is an open-source servicer that allows you to receive push notifications on your phone. + + + + +Go to the Notifications Page . Select `ntfy.sh` from the list of available integrations. + +Enter your ntfy topic (required), your custom server URL, and your bearer token. \ No newline at end of file diff --git a/apps/docs/src/content/docs/alerting/providers/pagerduty.mdx b/apps/docs/src/content/docs/alerting/providers/pagerduty.mdx index c28b7d3c..258d6ee2 100644 --- a/apps/docs/src/content/docs/alerting/providers/pagerduty.mdx +++ b/apps/docs/src/content/docs/alerting/providers/pagerduty.mdx @@ -12,7 +12,7 @@ Get Notified on PagerDuty when we create an incident. ## How to connect PagerDuty -Go to the Alerts Page . Select `PagerDuty` from the list of available integrations. +Go to the Notifications Page . Select `PagerDuty` from the list of available integrations. diff --git a/apps/web/package.json b/apps/web/package.json index 100139f7..f7f3ad5a 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -25,6 +25,7 @@ "@openstatus/header-analysis": "workspace:*", "@openstatus/notification-discord": "workspace:*", "@openstatus/notification-emails": "workspace:*", + "@openstatus/notification-ntfy": "workspace:*", "@openstatus/notification-pagerduty": "workspace:*", "@openstatus/notification-slack": "workspace:*", "@openstatus/notification-opsgenie": "workspace:*", diff --git a/apps/web/public/assets/changelog/ntfy.png b/apps/web/public/assets/changelog/ntfy.png new file mode 100644 index 0000000000000000000000000000000000000000..842819bff020b9f33ebafd5738509e6562e18f37 GIT binary patch literal 88086 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 z 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 literal 0 HcmV?d00001 diff --git a/apps/web/src/app/app/[workspaceSlug]/(dashboard)/notifications/(overview)/_components/channel-table.tsx b/apps/web/src/app/app/[workspaceSlug]/(dashboard)/notifications/(overview)/_components/channel-table.tsx index 3be12710..0cc464b8 100644 --- a/apps/web/src/app/app/[workspaceSlug]/(dashboard)/notifications/(overview)/_components/channel-table.tsx +++ b/apps/web/src/app/app/[workspaceSlug]/(dashboard)/notifications/(overview)/_components/channel-table.tsx @@ -1,6 +1,5 @@ import { env } from "@/env"; import type { Workspace } from "@openstatus/db/src/schema"; -import { getLimit } from "@openstatus/db/src/schema/plan/utils"; import { Button, Separator } from "@openstatus/ui"; import Link from "next/link"; @@ -32,6 +31,20 @@ export default function ChannelTable({ workspace, disabled }: ChannelTable) { disabled={disabled} /> + + + + - ); diff --git a/apps/web/src/app/app/[workspaceSlug]/(dashboard)/notifications/new/[channel]/page.tsx b/apps/web/src/app/app/[workspaceSlug]/(dashboard)/notifications/new/[channel]/page.tsx index b258b1d6..81d3e3eb 100644 --- a/apps/web/src/app/app/[workspaceSlug]/(dashboard)/notifications/new/[channel]/page.tsx +++ b/apps/web/src/app/app/[workspaceSlug]/(dashboard)/notifications/new/[channel]/page.tsx @@ -32,7 +32,6 @@ export default async function ChannelPage(props: { if (isLimitReached) { return ; } - return ( ; case "email": return ; + case "ntfy": + return ; default: return
No provider selected
; } diff --git a/apps/web/src/components/forms/notification/provider/actions.ts b/apps/web/src/components/forms/notification/provider/actions.ts index ec0322c6..300b9079 100644 --- a/apps/web/src/components/forms/notification/provider/actions.ts +++ b/apps/web/src/components/forms/notification/provider/actions.ts @@ -3,6 +3,8 @@ import { sendTest as sendOpsGenieAlert } from "@openstatus/notification-opsgenie"; import { sendTest as sendPagerDutyAlert } from "@openstatus/notification-pagerduty"; + +import { sendTest as sendNtfyAlert } from "@openstatus/notification-ntfy"; export async function sendOpsGenieTestAlert( apiKey: string, region: "us" | "eu", @@ -17,3 +19,16 @@ export async function sendPagerDutyTestAlert(integrationKey: string) { }); return isSuccessfull; } + +export async function sendNtfyTestAlert({ + topic, + serverUrl, + token, +}: { + topic: string; + serverUrl?: string; + token?: string; +}) { + const isSuccessfull = await sendNtfyAlert({ topic, serverUrl, token }); + return isSuccessfull; +} diff --git a/apps/web/src/components/forms/notification/provider/section-ntfy.tsx b/apps/web/src/components/forms/notification/provider/section-ntfy.tsx new file mode 100644 index 00000000..289a48b3 --- /dev/null +++ b/apps/web/src/components/forms/notification/provider/section-ntfy.tsx @@ -0,0 +1,106 @@ +"use client"; + +import { toastAction } from "@/lib/toast"; +import type { UseFormReturn } from "react-hook-form"; + +import { LoadingAnimation } from "@/components/loading-animation"; +import type { InsertNotificationWithData } from "@openstatus/db/src/schema"; +import { + Button, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, + Input, +} from "@openstatus/ui"; +import { useTransition } from "react"; +import { sendNtfyTestAlert } from "./actions"; + +interface Props { + form: UseFormReturn; +} + +export function SectionNtfy({ form }: Props) { + const [isTestPending, startTestTransition] = useTransition(); + + const watchTopic = form.watch("data.ntfy.topic"); + const watchUrl = form.watch("data.ntfy.serverUrl"); + const watchToken = form.watch("data.ntfy.token"); + + async function sendTestAlert() { + if (!watchTopic) return; + startTestTransition(async () => { + const isSuccessfull = await sendNtfyTestAlert({ + topic: watchTopic, + serverUrl: watchUrl || undefined, + token: watchToken || undefined, + }); + if (isSuccessfull) { + toastAction("test-success"); + } else { + toastAction("test-error"); + } + }); + } + + return ( + <> + ( + + Topic + + + + + + )} + /> + ( + + URL + + + + + + )} + /> + ( + + Bearer Token + + + + + + )} + /> +
+ +
+ + ); +} diff --git a/apps/web/src/config/pricing-table.tsx b/apps/web/src/config/pricing-table.tsx index a7fb49fb..51ceff78 100644 --- a/apps/web/src/config/pricing-table.tsx +++ b/apps/web/src/config/pricing-table.tsx @@ -110,7 +110,7 @@ export const pricingTableConfig: Record< features: [ { value: "notifications", - label: "Slack, Discord, Email", + label: "Slack, Discord, Email, ntfy.sh", }, { value: "sms", diff --git a/apps/web/src/content/changelog/ntfh-sh-integration.mdx b/apps/web/src/content/changelog/ntfh-sh-integration.mdx new file mode 100644 index 00000000..5fb85697 --- /dev/null +++ b/apps/web/src/content/changelog/ntfh-sh-integration.mdx @@ -0,0 +1,13 @@ +--- +title: ntfy.sh Integration +description: Get notified via ntfy.sh if we detect an Incident. +image: /assets/changelog/ntfy.png +publishedAt: 2025-03-17 +--- +You can now receive notifications via ntfy.sh when we detect an incident. + +[ntfy.sh](https://ntfy.sh/) is an open-source servicer that allows you to receive push notifications on your phone. + +We love open source, so we've added this integration to our free plan. + +Open source FTW 🚀 \ No newline at end of file diff --git a/apps/workflows/Dockerfile b/apps/workflows/Dockerfile index 386f582a..18d81624 100644 --- a/apps/workflows/Dockerfile +++ b/apps/workflows/Dockerfile @@ -13,6 +13,7 @@ RUN \ --mount=type=bind,target=packages/emails/package.json,source=packages/emails/package.json \ --mount=type=bind,target=packages/notifications/discord/package.json,source=packages/notifications/discord/package.json \ --mount=type=bind,target=packages/notifications/email/package.json,source=packages/notifications/email/package.json \ + --mount=type=bind,target=packages/notifications/ntfy/package.json,source=packages/notifications/ntfy/package.json \ --mount=type=bind,target=packages/notifications/opsgenie/package.json,source=packages/notifications/opsgenie/package.json \ --mount=type=bind,target=packages/notifications/pagerduty/package.json,source=packages/notifications/pagerduty/package.json \ --mount=type=bind,target=packages/notifications/slack/package.json,source=packages/notifications/slack/package.json \ diff --git a/apps/workflows/dofigen.lock b/apps/workflows/dofigen.lock index 6c826409..57730a09 100644 --- a/apps/workflows/dofigen.lock +++ b/apps/workflows/dofigen.lock @@ -51,6 +51,8 @@ effective: | source: packages/notifications/discord/package.json - target: packages/notifications/email/package.json source: packages/notifications/email/package.json + - target: packages/notifications/ntfy/package.json + source: packages/notifications/ntfy/package.json - target: packages/notifications/opsgenie/package.json source: packages/notifications/opsgenie/package.json - target: packages/notifications/pagerduty/package.json @@ -92,7 +94,7 @@ images: digest: sha256:e831d9a884d63734fe3dd9c491ed9a5a3d4c6a6d32c5b14f2067357c49b0b7e1 resources: dofigen.yml: - hash: 89efc794b70865f5718e42302021382f7ed0c0ea9459a7bd9a8047cdd28757ae + hash: 756c481a0bf4efc02d00ba1da6a9d84960b3424e625d492ef4c93ec841d075f6 content: | ignore: - node_modules @@ -117,6 +119,7 @@ resources: - packages/emails/package.json - packages/notifications/discord/package.json - packages/notifications/email/package.json + - packages/notifications/ntfy/package.json - packages/notifications/opsgenie/package.json - packages/notifications/pagerduty/package.json - packages/notifications/slack/package.json diff --git a/apps/workflows/dofigen.yml b/apps/workflows/dofigen.yml index d78b81c0..0060e463 100644 --- a/apps/workflows/dofigen.yml +++ b/apps/workflows/dofigen.yml @@ -21,6 +21,7 @@ builders: - packages/emails/package.json - packages/notifications/discord/package.json - packages/notifications/email/package.json + - packages/notifications/ntfy/package.json - packages/notifications/opsgenie/package.json - packages/notifications/pagerduty/package.json - packages/notifications/slack/package.json diff --git a/apps/workflows/package.json b/apps/workflows/package.json index 6358e7cf..bdb37819 100644 --- a/apps/workflows/package.json +++ b/apps/workflows/package.json @@ -11,6 +11,7 @@ "@openstatus/emails": "workspace:*", "@openstatus/notification-discord": "workspace:*", "@openstatus/notification-emails": "workspace:*", + "@openstatus/notification-ntfy": "workspace:*", "@openstatus/notification-opsgenie": "workspace:*", "@openstatus/notification-pagerduty": "workspace:*", "@openstatus/notification-slack": "workspace:*", diff --git a/apps/workflows/src/checker/utils.ts b/apps/workflows/src/checker/utils.ts index be6d123d..7af61692 100644 --- a/apps/workflows/src/checker/utils.ts +++ b/apps/workflows/src/checker/utils.ts @@ -13,6 +13,11 @@ import { sendDegraded as sendEmailDegraded, sendRecovery as sendEmailRecovery, } from "@openstatus/notification-emails"; +import { + sendAlert as sendNtfyAlert, + sendDegraded as sendNtfyDegraded, + sendRecovery as sendNtfyRecovery, +} from "@openstatus/notification-ntfy"; import { sendAlert as sendSlackAlert, sendDegraded as sendSlackDegraded, @@ -32,6 +37,7 @@ import { import type { Region } from "@openstatus/db/src/schema/constants"; import { + sendAlert, sendAlert as sendOpsGenieAlert, sendDegraded as sendOpsGenieDegraded, sendRecovery as sendOpsGenieRecovery, @@ -64,25 +70,20 @@ type Notif = { }; export const providerToFunction = { - email: { - sendAlert: sendEmailAlert, - sendRecovery: sendEmailRecovery, - sendDegraded: sendEmailDegraded, - }, - slack: { - sendAlert: sendSlackAlert, - sendRecovery: sendSlackRecovery, - sendDegraded: sendSlackDegraded, - }, discord: { sendAlert: sendDiscordAlert, sendRecovery: sendDiscordRecovery, sendDegraded: sendDiscordDegraded, }, - sms: { - sendAlert: sendSmsAlert, - sendRecovery: sendSmsRecovery, - sendDegraded: sendSmsDegraded, + email: { + sendAlert: sendEmailAlert, + sendRecovery: sendEmailRecovery, + sendDegraded: sendEmailDegraded, + }, + ntfy: { + sendAlert: sendNtfyAlert, + sendRecovery: sendNtfyRecovery, + sendDegraded: sendNtfyDegraded, }, opsgenie: { sendAlert: sendOpsGenieAlert, @@ -94,4 +95,14 @@ export const providerToFunction = { sendRecovery: sendPagerDutyRecovery, sendDegraded: sendPagerDutyDegraded, }, + slack: { + sendAlert: sendSlackAlert, + sendRecovery: sendSlackRecovery, + sendDegraded: sendSlackDegraded, + }, + sms: { + sendAlert: sendSmsAlert, + sendRecovery: sendSmsRecovery, + sendDegraded: sendSmsDegraded, + }, } satisfies Record; diff --git a/packages/db/src/schema/notifications/constants.ts b/packages/db/src/schema/notifications/constants.ts index 6ca77d89..6aba6014 100644 --- a/packages/db/src/schema/notifications/constants.ts +++ b/packages/db/src/schema/notifications/constants.ts @@ -1,8 +1,9 @@ export const notificationProvider = [ "email", "discord", - "slack", - "sms", + "ntfy", "pagerduty", "opsgenie", + "slack", + "sms", ] as const; diff --git a/packages/db/src/schema/notifications/validation.ts b/packages/db/src/schema/notifications/validation.ts index 3c1563da..bd391de5 100644 --- a/packages/db/src/schema/notifications/validation.ts +++ b/packages/db/src/schema/notifications/validation.ts @@ -36,6 +36,13 @@ export const phoneSchema = z.string().regex(phoneRegex, "Invalid Number!"); export const emailSchema = z.string().email(); export const urlSchema = z.string().url(); +export const ntfyDataSchema = z.object({ + ntfy: z.object({ + topic: z.string().default(""), + serverUrl: z.string().default("https://ntfy.sh"), + token: z.string().optional(), + }), +}); export const webhookDataSchema = z.object({ webhook: urlSchema }); export const emailDataSchema = z.object({ email: emailSchema }); export const phoneDataSchema = z.object({ sms: phoneSchema }); @@ -61,6 +68,12 @@ export const NotificationDataSchema = z.union([ export const InsertNotificationWithDataSchema = z.discriminatedUnion( "provider", [ + insertNotificationSchema.merge( + z.object({ + provider: z.literal("discord"), + data: discordDataSchema, + }), + ), insertNotificationSchema.merge( z.object({ provider: z.literal("email"), @@ -69,32 +82,32 @@ export const InsertNotificationWithDataSchema = z.discriminatedUnion( ), insertNotificationSchema.merge( z.object({ - provider: z.literal("sms"), - data: phoneDataSchema, + provider: z.literal("ntfy"), + data: ntfyDataSchema, }), ), insertNotificationSchema.merge( z.object({ - provider: z.literal("slack"), - data: slackDataSchema, + provider: z.literal("pagerduty"), + data: pagerdutyDataSchema, }), ), insertNotificationSchema.merge( z.object({ - provider: z.literal("discord"), - data: discordDataSchema, + provider: z.literal("opsgenie"), + data: opsgenieDataSchema, }), ), insertNotificationSchema.merge( z.object({ - provider: z.literal("pagerduty"), - data: pagerdutyDataSchema, + provider: z.literal("sms"), + data: phoneDataSchema, }), ), insertNotificationSchema.merge( z.object({ - provider: z.literal("opsgenie"), - data: opsgenieDataSchema, + provider: z.literal("slack"), + data: slackDataSchema, }), ), ], diff --git a/packages/notifications/ntfy/.gitignore b/packages/notifications/ntfy/.gitignore new file mode 100644 index 00000000..f81d56ea --- /dev/null +++ b/packages/notifications/ntfy/.gitignore @@ -0,0 +1,169 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +\*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +\*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +\*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +\*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.cache +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +.cache/ + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp +.cache + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.\* diff --git a/packages/notifications/ntfy/README.md b/packages/notifications/ntfy/README.md new file mode 100644 index 00000000..f2b93f4c --- /dev/null +++ b/packages/notifications/ntfy/README.md @@ -0,0 +1,15 @@ +# @openstatus/notification-ntfy +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run src/index.ts +``` + +This project was created using `bun init` in bun v1.0.0. [Bun](https://bun.sh) +is a fast all-in-one JavaScript runtime. diff --git a/packages/notifications/ntfy/package.json b/packages/notifications/ntfy/package.json new file mode 100644 index 00000000..dc87604d --- /dev/null +++ b/packages/notifications/ntfy/package.json @@ -0,0 +1,14 @@ +{ + "name": "@openstatus/notification-ntfy", + "version": "1.0.0", + "main": "src/index.ts", + "dependencies": { + "@openstatus/db": "workspace:*", + "zod": "3.23.8" + }, + "devDependencies": { + "@openstatus/tsconfig": "workspace:*", + "@types/node": "22.10.2", + "typescript": "5.6.2" + } +} diff --git a/packages/notifications/ntfy/src/index.ts b/packages/notifications/ntfy/src/index.ts new file mode 100644 index 00000000..5efa2ec7 --- /dev/null +++ b/packages/notifications/ntfy/src/index.ts @@ -0,0 +1,166 @@ +import type { Monitor, Notification } from "@openstatus/db/src/schema"; + +import type { Region } from "@openstatus/db/src/schema/constants"; +import { NtfySchema } from "./schema"; + +export const sendAlert = async ({ + monitor, + notification, + statusCode, + message, + // biome-ignore lint/correctness/noUnusedVariables: + incidentId, +}: { + monitor: Monitor; + notification: Notification; + statusCode?: number; + message?: string; + incidentId?: string; + cronTimestamp: number; + latency?: number; + region?: Region; +}) => { + const notificationData = NtfySchema.parse(JSON.parse(notification.data)); + const { name } = monitor; + + const body = `Your monitor ${name} / ${monitor.url} is down with ${ + statusCode ? `status code ${statusCode}` : `error: ${message}` + }`; + + const authorization = notificationData.token + ? { Authorization: `Bearer ${notificationData.token}` } + : undefined; + + const url = notificationData.serverUrl + ? `${notificationData.serverUrl}/${notificationData.topic}` + : `https://ntfy.sh/${notificationData.topic}`; + + try { + await fetch(url, { + method: "post", + body, + headers: { + ...authorization, + }, + }); + } catch (err) { + console.log(err); + // Do something + } +}; + +export const sendRecovery = async ({ + monitor, + notification, + // biome-ignore lint/correctness/noUnusedVariables: + statusCode, + // biome-ignore lint/correctness/noUnusedVariables: + message, + // biome-ignore lint/correctness/noUnusedVariables: + incidentId, +}: { + monitor: Monitor; + notification: Notification; + statusCode?: number; + message?: string; + incidentId?: string; + cronTimestamp: number; + latency?: number; + region?: Region; +}) => { + const notificationData = NtfySchema.parse(JSON.parse(notification.data)); + const { name } = monitor; + + const body = `Your monitor ${name} / ${monitor.url} is up again`; + const authorization = notificationData.token + ? { Authorization: `Bearer ${notificationData.token}` } + : undefined; + + const url = notificationData.serverUrl + ? `${notificationData.serverUrl}/${notificationData.topic}` + : `https://ntfy.sh/${notificationData.topic}`; + try { + await fetch(url, { + method: "post", + body, + headers: { + ...authorization, + }, + }); + } catch (err) { + console.log(err); + // Do something + } +}; + +export const sendDegraded = async ({ + monitor, + notification, + // biome-ignore lint/correctness/noUnusedVariables: + statusCode, + // biome-ignore lint/correctness/noUnusedVariables: + message, +}: { + monitor: Monitor; + notification: Notification; + statusCode?: number; + message?: string; + incidentId?: string; + cronTimestamp: number; + latency?: number; + region?: Region; +}) => { + const notificationData = NtfySchema.parse(JSON.parse(notification.data)); + const { name } = monitor; + + const body = `Your monitor ${name} / ${monitor.url} is degraded `; + + const authorization = notificationData.token + ? { Authorization: `Bearer ${notificationData.token}` } + : undefined; + + const url = notificationData.serverUrl + ? `${notificationData.serverUrl}/${notificationData.topic}` + : `https://ntfy.sh/${notificationData.topic}`; + + try { + await fetch(url, { + method: "post", + body, + headers: { + ...authorization, + }, + }); + } catch (err) { + console.log(err); + // Do something + } +}; + +export const sendTest = async ({ + serverUrl, + topic, + token, +}: { + topic: string; + serverUrl?: string; + token?: string; +}) => { + const authorization = token + ? { Authorization: `Bearer ${token}` } + : undefined; + const url = serverUrl ? `${serverUrl}/${topic}` : `https://ntfy.sh/${topic}`; + try { + await fetch(url, { + method: "post", + body: "This is a test message from OpenStatus", + headers: { + ...authorization, + }, + }); + } catch (err) { + console.log(err); + return false; + } + return true; +}; diff --git a/packages/notifications/ntfy/src/schema.ts b/packages/notifications/ntfy/src/schema.ts new file mode 100644 index 00000000..7bf11b21 --- /dev/null +++ b/packages/notifications/ntfy/src/schema.ts @@ -0,0 +1,7 @@ +import { z } from "zod"; + +export const NtfySchema = z.object({ + topic: z.string(), + serverUrl: z.string().default("https://ntfy.sh"), + token: z.string().optional(), +}); diff --git a/packages/notifications/ntfy/tsconfig.json b/packages/notifications/ntfy/tsconfig.json new file mode 100644 index 00000000..a8a8c930 --- /dev/null +++ b/packages/notifications/ntfy/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "@openstatus/tsconfig/nextjs.json", + "include": ["src", "*.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8eff5339..834aefcc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -254,6 +254,9 @@ importers: '@openstatus/notification-emails': specifier: workspace:* version: link:../../packages/notifications/email + '@openstatus/notification-ntfy': + specifier: workspace:* + version: link:../../packages/notifications/ntfy '@openstatus/notification-opsgenie': specifier: workspace:* version: link:../../packages/notifications/opsgenie @@ -495,6 +498,9 @@ importers: '@openstatus/notification-emails': specifier: workspace:* version: link:../../packages/notifications/email + '@openstatus/notification-ntfy': + specifier: workspace:* + version: link:../../packages/notifications/ntfy '@openstatus/notification-opsgenie': specifier: workspace:* version: link:../../packages/notifications/opsgenie @@ -814,6 +820,25 @@ importers: specifier: 5.6.2 version: 5.6.2 + packages/notifications/ntfy: + dependencies: + '@openstatus/db': + specifier: workspace:* + version: link:../../db + zod: + specifier: 3.23.8 + version: 3.23.8 + devDependencies: + '@openstatus/tsconfig': + specifier: workspace:* + version: link:../../tsconfig + '@types/node': + specifier: 22.10.2 + version: 22.10.2 + typescript: + specifier: 5.6.2 + version: 5.6.2 + packages/notifications/opsgenie: dependencies: '@openstatus/db':