triggerdotdev/api-reference

Create an example Gmail job which uses an HTTP endpoint / trigger

Closed this issue · 1 comments

D-K-P commented

Overview

HTTP endpoints allow you to subscribe to changes from an API. You can use defineHttpEndpoint to receive webhooks, verify them, and create an HTTP Trigger.

Details:

The task is to create a job example which is triggered by an HTTP Trigger when a change is received from Gmail.

Reference material:

  • Read our HTTP endpoints docs
  • Read our SDK reference docs
  • Check out our simple Cal.com example. This is a simple implementation.
  • Check out our WhatsApp example. This is a more advanced implementation (using respondWith) because WhatsApp sends a verification GET request to confirm before the webhooks can be created. Most APIs don't required this.

Requirements:

  • Use the structure of our Cal.com example.
  • The example must connect to Gmail, receive a payload which triggers an HTTP Trigger, and then perform a simple job.

Guidelines:

  • The code must use TypeScript
  • The job must use an HTTP Trigger
  • Create a TypeScript type for the webhook, ideally use types from the official SDK from the API.
  • Cast the json to that type using const body = await request.json() as WebhookPayload
  • Use native fetch where no official SDK or incompatible auth
  • Avoid external packages apart from official SDKs
  • Prefer REST over GraphQL - avoid raw queries
  • Use a minimal io.runTask() callback - initialise clients and auth in global scope if possible
  • Leave clear comments with links to relevant developer docs, API key pages etc.

Required structure:

  1. Follow this guide to get the project setup.​

  2. Create a new file in the src folder, named to match the API, with '-http-endpoint' at the end (e.g. GitHub would be called github-http-endpoint.ts).​

  3. The Trigger.dev client must be defined at the top of the job, with the 'api-reference' id:

const client = new TriggerClient({ id: "api-reference" });


4. You must add the Express specific lines to the bottom of the Job file:

// These lines can be removed if you don't want to use express
import { createExpressServer } from "@trigger.dev/express";
createExpressServer(client);


5. You must add the new script to the package.json file, in this format:

"scripts": {
  //..other scripts
  "<api-name>": "nodemon --watch src/<api name>.ts -r tsconfig-paths/register -r dotenv/config src/<api name>.ts"
}

Important

You must test this Job works before submitting your PR, including a video or screenshot of a successful run. This may involve you having to setup accounts with services.

🎉🎈 @biplobsd has been awarded $50! 🎈🎊