From aec278bde2a734ed15ce37aec2ee5b027b7f3317 Mon Sep 17 00:00:00 2001 From: Biplob Sutradhar Date: Sat, 9 Dec 2023 16:41:05 +0600 Subject: [PATCH] Added DigitalOcean example (#57) --- .env.example | 6 +++-- package.json | 1 + src/digitalocean.ts | 54 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 src/digitalocean.ts diff --git a/.env.example b/.env.example index 6f4679d..dc34dfd 100644 --- a/.env.example +++ b/.env.example @@ -24,6 +24,9 @@ DEEPL_BASE_URL=https://api-free.deepl.com/v2/ DISCORD_BOT_TOKEN= DISCORD_APPLICATION_KEY= +## Digital Ocean +DIGITALOCEAN_TOKEN= + # GitHub GITHUB_TOKEN= @@ -168,5 +171,4 @@ ZAPIER_TRIGGER_SECRET= GMAIL_SERVICE_ACCOUNT_EMAIL= # PagerDuty -PAGERDUTY_WEBHOOK_SIGNING_SECRET= - +PAGERDUTY_WEBHOOK_SIGNING_SECRET= \ No newline at end of file diff --git a/package.json b/package.json index bd5e4b1..c00216a 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "deepl": "node -r dotenv/config -r ts-node/register src/deepl.ts", "discord": "node -r dotenv/config -r ts-node/register src/discord.ts", "discord-http-endpoint": "node -r dotenv/config -r ts-node/register src/discord-http-endpoint.ts", + "digitalocean": "node -r dotenv/config -r ts-node/register src/digitalocean.ts", "github": "node -r dotenv/config -r ts-node/register src/github.ts", "gmail": "node -r dotenv/config -r ts-node/register src/gmail.ts", "gmail-http-endpoint": "node -r dotenv/config -r ts-node/register src/gmail-http-endpoint.ts", diff --git a/src/digitalocean.ts b/src/digitalocean.ts new file mode 100644 index 0000000..4844057 --- /dev/null +++ b/src/digitalocean.ts @@ -0,0 +1,54 @@ +import { TriggerClient, eventTrigger } from "@trigger.dev/sdk"; +import z from "zod"; + +// hide-code +const client = new TriggerClient({ id: "api-reference" }); +// end-hide-code + +// API reference: https://docs.digitalocean.com/reference/api/api-reference/#operation/uptime_create_check +// Create tokens at +// https://docs.digitalocean.com/reference/api/create-personal-access-token/ + +const endpointURL = "https://api.digitalocean.com/v2/uptime/checks"; + +client.defineJob({ + id: "digitalocean", + name: "DigitalOcean uptime create", + version: "1.0.0", + trigger: eventTrigger({ + name: "digitalocean", + schema: z.object({ + name: z.string(), + type: z.enum(["http", "https", "ping"]).default("https"), + target: z.string(), + regions: z.string().array().default(["us_east", "eu_west"]), + enabled: z.boolean().default(true), + }), + }), + run: async (payload, io, ctx) => { + // Wrap an SDK call in io.runTask so it's resumable and displays in logs + await io.runTask( + "DigitalOcean", + async () => { + // Make request using Fetch API + return await fetch(endpointURL, { + method: "POST", + headers: { + Authorization: `Bearer ${process.env.DIGITALOCEAN_TOKEN}`, + "content-type": "application/json", + }, + body: JSON.stringify(payload), + }).then((response) => response.json()); + }, + + // Add metadata to improve how the task displays in the logs + { name: "DigitalOcean uptime create", icon: "digitalocean" } + ); + }, +}); + +// hide-code +// These lines can be removed if you don't want to use express +import { createExpressServer } from "@trigger.dev/express"; +createExpressServer(client); +// end-hide-code