Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dfb00e84e9 | |||
| b5a64545bb | |||
| 3cf3eaff48 | |||
| 4ca758a3de | |||
| da81537009 | |||
| 7c1b13ba3b | |||
| 4b654e5b3b |
@@ -180,7 +180,7 @@ function getWorkerQueue() {
|
||||
},
|
||||
},
|
||||
deliverHttpSourceRequest: {
|
||||
maxAttempts: 5,
|
||||
maxAttempts: 25,
|
||||
handler: async (payload, job) => {
|
||||
const service = new DeliverHttpSourceRequestService();
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
"@trigger.dev/companyicons": "^1.5.14",
|
||||
"@trigger.dev/database": "workspace:*",
|
||||
"@trigger.dev/core": "workspace:*",
|
||||
"@trigger.dev/sdk": "workspace:2.0.4",
|
||||
"@trigger.dev/sdk": "workspace:2.0.5",
|
||||
"@uiw/react-codemirror": "^4.19.5",
|
||||
"class-variance-authority": "^0.5.2",
|
||||
"clsx": "^1.2.1",
|
||||
|
||||
@@ -7,8 +7,8 @@ description: "Interact with your Supabase project using the Supabase JS Client."
|
||||
Our `@trigger.dev/supabase` package provides an integration that wraps the [@supabase/supabase-js](https://github.com/supabase/supabase-js) package, allowing you to run tasks to interact with your Supabase project.
|
||||
|
||||
<Note>
|
||||
If you want to trigger jobs based on changes in your Supabase database, you'll
|
||||
need to use the [Supabase Management API](../management) integration
|
||||
If you want to trigger jobs based on changes in your Supabase database, you'll need to use the
|
||||
[Supabase Management API](/integrations/apis/supabase/management) integration
|
||||
</Note>
|
||||
|
||||
## Usage
|
||||
@@ -26,8 +26,7 @@ const supabase = new Supabase({
|
||||
```
|
||||
|
||||
<Warning>
|
||||
Never expose the `service_role` key in a browser or anywhere where a user can
|
||||
see it.
|
||||
Never expose the `service_role` key in a browser or anywhere where a user can see it.
|
||||
</Warning>
|
||||
|
||||
You can then use the `supabase` integration to run tasks in your jobs:
|
||||
@@ -39,21 +38,17 @@ client.defineJob({
|
||||
supabase,
|
||||
},
|
||||
run: async (payload, io, ctx) => {
|
||||
const { data: users, error } = await io.supabase.runTask(
|
||||
"find-users",
|
||||
async (db) => {
|
||||
return db.from("users").select("*");
|
||||
}
|
||||
);
|
||||
const { data: todos, error } = await io.supabase.runTask("find-todos", async (db) => {
|
||||
return db.from("todos").select("*");
|
||||
});
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
<Note>
|
||||
By using `runTask` instead of the `@supabase/supabase-js` client directly
|
||||
inside your job run, you'll be able to create tasks that can be run
|
||||
idempotently and also retried. For more, see our guide on
|
||||
[Resumability](http://localhost:3050/documentation/concepts/resumability)
|
||||
By using `runTask` instead of the `@supabase/supabase-js` client directly inside your job run,
|
||||
you'll be able to create tasks that can be run idempotently and also retried. For more, see our
|
||||
guide on [Resumability](http://localhost:3050/documentation/concepts/resumability)
|
||||
</Note>
|
||||
|
||||
You can also choose to throw an error if the query fails and abort the job run:
|
||||
@@ -65,8 +60,8 @@ client.defineJob({
|
||||
supabase,
|
||||
},
|
||||
run: async (payload, io, ctx) => {
|
||||
const users = await io.supabase.runTask("find-users", async (db) => {
|
||||
const { data, error } = await db.from("users").select("*");
|
||||
const todos = await io.supabase.runTask("find-todos", async (db) => {
|
||||
const { data, error } = await db.from("todos").select("*");
|
||||
|
||||
if (error) throw error;
|
||||
|
||||
@@ -83,10 +78,7 @@ The `db` object passed to the callback is an instance of the [@supabase/supabase
|
||||
- [Invoking Functions](https://supabase.com/docs/reference/javascript/functions-invoke)
|
||||
- [Storage](https://supabase.com/docs/reference/javascript/storage-createbucket)
|
||||
|
||||
<Warning>
|
||||
Currently we do not support Supabase Realtime (such as subscribing to a
|
||||
channel)
|
||||
</Warning>
|
||||
<Warning>Currently we do not support Supabase Realtime (such as subscribing to a channel)</Warning>
|
||||
|
||||
## Typescript Support
|
||||
|
||||
@@ -108,15 +100,15 @@ client.defineJob({
|
||||
supabase,
|
||||
},
|
||||
run: async (payload, io, ctx) => {
|
||||
const users = await io.supabase.runTask("find-users", async (db) => {
|
||||
const { data, error } = await db.from("users").select("*");
|
||||
const todos = await io.supabase.runTask("find-todos", async (db) => {
|
||||
const { data, error } = await db.from("todos").select("*");
|
||||
|
||||
if (error) throw error;
|
||||
|
||||
return data;
|
||||
});
|
||||
|
||||
// users is now typed as User[] instead of any[]
|
||||
// todos is now typed as Todo[] instead of any[]
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
@@ -126,7 +126,7 @@ client.defineJob({
|
||||
id: "supabase-trigger",
|
||||
name: "Supabase Trigger",
|
||||
trigger: db.onInserted({
|
||||
table: "users",
|
||||
table: "todos",
|
||||
}),
|
||||
run: async (payload, io, ctx) => {
|
||||
// payload is the database webhook body (see https://supabase.com/docs/guides/database/webhooks#payload)
|
||||
@@ -137,20 +137,6 @@ client.defineJob({
|
||||
You can add additional filters to the trigger by passing a `filter` object:
|
||||
|
||||
```ts
|
||||
client.defineJob({
|
||||
id: "supabase-trigger",
|
||||
name: "Supabase Trigger",
|
||||
trigger: db.onUpdated({
|
||||
table: "users",
|
||||
filter: {
|
||||
country: ["USA", "Canada"], // This will only trigger the job if the user.country is USA or Canada
|
||||
},
|
||||
}),
|
||||
run: async (payload, io, ctx) => {
|
||||
// payload is the database webhook body (see https://supabase.com/docs/guides/database/webhooks#payload)
|
||||
},
|
||||
});
|
||||
|
||||
client.defineJob({
|
||||
id: "supabase-trigger",
|
||||
name: "Supabase Trigger",
|
||||
@@ -172,6 +158,31 @@ client.defineJob({
|
||||
});
|
||||
```
|
||||
|
||||
You can also listen for multiple different events using the `on` trigger:
|
||||
|
||||
```ts
|
||||
client.defineJob({
|
||||
id: "supabase-trigger",
|
||||
name: "Supabase Trigger",
|
||||
trigger: db.on({
|
||||
table: "todos",
|
||||
events: ["INSERT", "UPDATE"] // Trigger on both insert and update events
|
||||
filter: {
|
||||
record: {
|
||||
is_completed: [false],
|
||||
},
|
||||
},
|
||||
}),
|
||||
run: async (payload, io, ctx) => {
|
||||
if (payload.type === "INSERT") {
|
||||
// payload will be typed as the INSERT payload
|
||||
} else {
|
||||
// payload will be typed as the UPDATE payload
|
||||
}
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
<Note>
|
||||
We will only create at most 1 database webhook per table, to limit resource usage when writing to
|
||||
your database. This means we cannot support scoping updated triggers to specific columns.
|
||||
@@ -196,10 +207,10 @@ client.defineJob({
|
||||
id: "supabase-trigger",
|
||||
name: "Supabase Trigger",
|
||||
trigger: db.onUpdated({
|
||||
table: "users",
|
||||
table: "todos",
|
||||
}),
|
||||
run: async (payload, io, ctx) => {
|
||||
// payload.record and payload.old_record are now correctly typed to match the users table
|
||||
// payload.record and payload.old_record are now correctly typed to match the todos table
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
@@ -2,8 +2,18 @@
|
||||
|
||||
This project is meant to be used to create a catalog of jobs, usually to test something in an integration or the SDK.
|
||||
|
||||
## Setup
|
||||
|
||||
You will need to create a `.env` file. You can duplicate the `.env.example` file and set your local `TRIGGER_API_KEY` value.
|
||||
|
||||
### Running
|
||||
|
||||
You need to build the CLI:
|
||||
|
||||
```sh
|
||||
pnpm run build --filter @trigger.dev/cli
|
||||
```
|
||||
|
||||
Each file in `src` is a separate set of jobs that can be run separately. For example, the `src/stripe.ts` file can be run with:
|
||||
|
||||
```sh
|
||||
@@ -15,7 +25,7 @@ This will open up a local server using `express` on port 8080. Then in a new ter
|
||||
|
||||
```sh
|
||||
cd examples/job-catalog
|
||||
pnpm run trigger:dev
|
||||
pnpm run dev:trigger
|
||||
```
|
||||
|
||||
### Adding a new file
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
import { TriggerClient, eventTrigger } from "@trigger.dev/sdk";
|
||||
import { TriggerClient } from "@trigger.dev/sdk";
|
||||
import { createExpressServer } from "@trigger.dev/express";
|
||||
import { z } from "zod";
|
||||
import { SupabaseManagement } from "@trigger.dev/supabase";
|
||||
import { Supabase, SupabaseManagement } from "@trigger.dev/supabase";
|
||||
|
||||
const supabaseManagement = new SupabaseManagement({
|
||||
id: "supabase-management",
|
||||
apiKey: process.env["SUPABASE_API_KEY"]!,
|
||||
});
|
||||
|
||||
const db = supabaseManagement.db(process.env["SUPABASE_ID"]!);
|
||||
const triggers = supabaseManagement.db<Database>(process.env["SUPABASE_ID"]!);
|
||||
|
||||
const supabase = new Supabase({
|
||||
id: "supabase",
|
||||
supabaseKey: process.env["SUPABASE_SERVICE_ROLE_KEY"]!,
|
||||
supabaseUrl: process.env["SUPABASE_URL"]!,
|
||||
});
|
||||
|
||||
export const client = new TriggerClient({
|
||||
id: "job-catalog",
|
||||
@@ -24,8 +29,8 @@ client.defineJob({
|
||||
id: "supabase-management-example-1",
|
||||
name: "Supabase Management Example 1",
|
||||
version: "0.1.0",
|
||||
trigger: db.onInserted({
|
||||
table: "users",
|
||||
trigger: triggers.onInserted({
|
||||
table: "todos",
|
||||
}),
|
||||
run: async (payload, io, ctx) => {},
|
||||
});
|
||||
@@ -34,8 +39,86 @@ client.defineJob({
|
||||
id: "supabase-management-example-2",
|
||||
name: "Supabase Management Example 2",
|
||||
version: "0.1.0",
|
||||
trigger: db.onUpdated({
|
||||
table: "users",
|
||||
trigger: triggers.onUpdated({
|
||||
table: "todos",
|
||||
}),
|
||||
run: async (payload, io, ctx) => {},
|
||||
});
|
||||
|
||||
client.defineJob({
|
||||
id: "supabase-management-example-on",
|
||||
name: "Supabase Management Example On",
|
||||
version: "0.1.0",
|
||||
trigger: triggers.on({
|
||||
table: "todos",
|
||||
events: ["INSERT", "UPDATE"],
|
||||
}),
|
||||
integrations: {
|
||||
supabase,
|
||||
},
|
||||
run: async (payload, io, ctx) => {
|
||||
const user = await io.supabase.runTask("fetch-user", async (db) => {
|
||||
const { data, error } = await db.auth.admin.getUserById(payload.record.user_id);
|
||||
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
return data.user;
|
||||
});
|
||||
|
||||
return user;
|
||||
},
|
||||
});
|
||||
|
||||
export type Json = string | number | boolean | null | { [key: string]: Json | undefined } | Json[];
|
||||
|
||||
export interface Database {
|
||||
public: {
|
||||
Tables: {
|
||||
todos: {
|
||||
Row: {
|
||||
id: number;
|
||||
inserted_at: string;
|
||||
is_complete: boolean | null;
|
||||
task: string | null;
|
||||
user_id: string;
|
||||
};
|
||||
Insert: {
|
||||
id?: number;
|
||||
inserted_at?: string;
|
||||
is_complete?: boolean | null;
|
||||
task?: string | null;
|
||||
user_id: string;
|
||||
};
|
||||
Update: {
|
||||
id?: number;
|
||||
inserted_at?: string;
|
||||
is_complete?: boolean | null;
|
||||
task?: string | null;
|
||||
user_id?: string;
|
||||
};
|
||||
Relationships: [
|
||||
{
|
||||
foreignKeyName: "todos_user_id_fkey";
|
||||
columns: ["user_id"];
|
||||
referencedRelation: "users";
|
||||
referencedColumns: ["id"];
|
||||
},
|
||||
];
|
||||
};
|
||||
};
|
||||
Views: {
|
||||
[_ in never]: never;
|
||||
};
|
||||
Functions: {
|
||||
[_ in never]: never;
|
||||
};
|
||||
Enums: {
|
||||
[_ in never]: never;
|
||||
};
|
||||
CompositeTypes: {
|
||||
[_ in never]: never;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# @trigger.dev/github
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @trigger.dev/integration-kit@2.0.5
|
||||
- @trigger.dev/sdk@2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/github",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "The official GitHub integration for Trigger.dev",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -29,8 +29,8 @@
|
||||
"@octokit/request": "^6.2.5",
|
||||
"@octokit/request-error": "^4.0.1",
|
||||
"@octokit/webhooks": "^10.4.0",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.4",
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.4",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.5",
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.5",
|
||||
"octokit": "^2.0.14",
|
||||
"zod": "3.21.4"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# @trigger.dev/slack
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @trigger.dev/integration-kit@2.0.5
|
||||
- @trigger.dev/sdk@2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/openai",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "The official OpenAI integration for Trigger.dev",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -25,8 +25,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"openai": "^3.3.0",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.4",
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.4",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.5",
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.5",
|
||||
"zod": "3.21.4"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# @trigger.dev/plain
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @trigger.dev/integration-kit@2.0.5
|
||||
- @trigger.dev/sdk@2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/plain",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "The official Plain.com integration for Trigger.dev",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -24,8 +24,8 @@
|
||||
"build:tsup": "tsup"
|
||||
},
|
||||
"dependencies": {
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.4",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.4",
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.5",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.5",
|
||||
"@team-plain/typescript-sdk": "^2.7.0"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# @trigger.dev/resend
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @trigger.dev/integration-kit@2.0.5
|
||||
- @trigger.dev/sdk@2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/resend",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "The official Resend.com integration for Trigger.dev",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -24,8 +24,8 @@
|
||||
"build:tsup": "tsup"
|
||||
},
|
||||
"dependencies": {
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.4",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.4",
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.5",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.5",
|
||||
"resend": "^0.9.1"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @trigger.dev/slack
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @trigger.dev/sdk@2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/slack",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "The official Slack integration for Trigger.dev",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -25,7 +25,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@slack/web-api": "^6.8.1",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.4",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.5",
|
||||
"zod": "3.21.4"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# @trigger.dev/stripe
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @trigger.dev/integration-kit@2.0.5
|
||||
- @trigger.dev/sdk@2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/stripe",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "Trigger.dev integration for stripe",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -26,8 +26,8 @@
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.4",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.4",
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.5",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.5",
|
||||
"stripe": "^12.14.0",
|
||||
"zod": "3.21.4"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @trigger.dev/supabase
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 3cf3eaff: You can now trigger on multiple database events in the same job
|
||||
- @trigger.dev/integration-kit@2.0.5
|
||||
- @trigger.dev/sdk@2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/supabase",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "Trigger.dev integration for @supabase/supabase-js",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -26,8 +26,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@supabase/supabase-js": "^2.26.0",
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.4",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.4",
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.5",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.5",
|
||||
"supabase-management-js": "^0.1.4",
|
||||
"zod": "3.21.4"
|
||||
},
|
||||
|
||||
@@ -34,6 +34,91 @@ class SupabaseDatabase<Database = any> {
|
||||
private projectRef: string
|
||||
) {}
|
||||
|
||||
/**
|
||||
* The function `on` creates a trigger for when a record is inserted, updated, or deleted on a
|
||||
* specific table in a database schema.
|
||||
* @param params - The `params` parameter is an object that contains the following properties:
|
||||
* @param params.table - The `table` property is a string that specifies the name of the table
|
||||
* that the trigger will be created for.
|
||||
* @param params.events - The `events` property is an array of events that specifies the events
|
||||
* that the trigger will be called for. The events that can be specified are `INSERT`, `UPDATE`, or `DELETE`.
|
||||
* By default, the trigger will be called for all events.
|
||||
* @param params.schema - The `schema` property is a string that specifies the name of the schema
|
||||
* that the trigger will be created for. If the schema is not specified, the default schema will
|
||||
* be used. (public)
|
||||
* @param params.filter - The `filter` property is an object that specifies the filter that will
|
||||
* be used to determine if the trigger should be called. If the filter is not specified, the
|
||||
* trigger will be called for all records.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* ```ts
|
||||
* const supabase = new SupabaseManagement({ id: "supabase" });
|
||||
* const database = supabase.database<Database>("https://<project-id>.supabase.co");
|
||||
*
|
||||
* client.defineJob({
|
||||
* trigger: database.on({
|
||||
* table: "todos",
|
||||
* events: ["INSERTED", "UPDATED"],
|
||||
* schema: "public",
|
||||
* filter: {
|
||||
* record: { is_completed: [false] },
|
||||
* },
|
||||
* }),
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
on<
|
||||
SchemaName extends string & keyof Database = "public" extends keyof Database
|
||||
? "public"
|
||||
: string & keyof Database,
|
||||
Schema extends GenericSchema = Database[SchemaName] extends GenericSchema
|
||||
? Database[SchemaName]
|
||||
: any,
|
||||
TTableName extends string & keyof Schema["Tables"] = string & keyof Schema["Tables"],
|
||||
TTable extends Schema["Tables"][TTableName] = Schema["Tables"][TTableName],
|
||||
TEvents extends WebhookEvents[] = ["INSERT", "UPDATE", "DELETE"],
|
||||
>(params: { table: TTableName; events?: TEvents; schema?: SchemaName; filter?: EventFilter }) {
|
||||
return createTrigger<Prettify<UnionPayloads<TEvents, TTableName, SchemaName, TTable["Row"]>>>(
|
||||
this.integration.source,
|
||||
{
|
||||
event: params.events ?? ["INSERT", "UPDATE", "DELETE"],
|
||||
projectRef: this.projectRef,
|
||||
...params,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* The function `onInserted` creates a trigger for when a new record is inserted into a specific
|
||||
* table in a database schema.
|
||||
* @param params - The `params` parameter is an object that contains the following properties:
|
||||
* @param params.table - The `table` property is a string that specifies the name of the table
|
||||
* that the trigger will be created for.
|
||||
* @param params.schema - The `schema` property is a string that specifies the name of the schema
|
||||
* that the trigger will be created for. If the schema is not specified, the default schema will
|
||||
* be used. (public)
|
||||
* @param params.filter - The `filter` property is an object that specifies the filter that will
|
||||
* be used to determine if the trigger should be called. If the filter is not specified, the
|
||||
* trigger will be called for all records.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* ```ts
|
||||
* const supabase = new SupabaseManagement({ id: "supabase" });
|
||||
* const database = supabase.database<Database>("https://<project-id>.supabase.co");
|
||||
*
|
||||
* client.defineJob({
|
||||
* trigger: database.onInserted({
|
||||
* table: "todos",
|
||||
* schema: "public",
|
||||
* filter: {
|
||||
* record: { is_completed: [false] },
|
||||
* },
|
||||
* }),
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
onInserted<
|
||||
SchemaName extends string & keyof Database = "public" extends keyof Database
|
||||
? "public"
|
||||
@@ -57,6 +142,37 @@ class SupabaseDatabase<Database = any> {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* The function `onUpdated` creates a trigger for when a new record is updated on a specific
|
||||
* table in a database schema.
|
||||
* @param params - The `params` parameter is an object that contains the following properties:
|
||||
* @param params.table - The `table` property is a string that specifies the name of the table
|
||||
* that the trigger will be created for.
|
||||
* @param params.schema - The `schema` property is a string that specifies the name of the schema
|
||||
* that the trigger will be created for. If the schema is not specified, the default schema will
|
||||
* be used. (public)
|
||||
* @param params.filter - The `filter` property is an object that specifies the filter that will
|
||||
* be used to determine if the trigger should be called. If the filter is not specified, the
|
||||
* trigger will be called for all records.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* ```ts
|
||||
* const supabase = new SupabaseManagement({ id: "supabase" });
|
||||
* const database = supabase.database<Database>("https://<project-id>.supabase.co");
|
||||
*
|
||||
* client.defineJob({
|
||||
* trigger: database.onUpdated({
|
||||
* table: "todos",
|
||||
* schema: "public",
|
||||
* filter: {
|
||||
* record: { completed: [true] },
|
||||
* old_record: { completed: [false] },
|
||||
* },
|
||||
* }),
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
onUpdated<
|
||||
SchemaName extends string & keyof Database = "public" extends keyof Database
|
||||
? "public"
|
||||
@@ -80,6 +196,36 @@ class SupabaseDatabase<Database = any> {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* The function `onDeleted` creates a trigger for when a new record is deleted from a specific
|
||||
* table in a database schema.
|
||||
* @param params - The `params` parameter is an object that contains the following properties:
|
||||
* @param params.table - The `table` property is a string that specifies the name of the table
|
||||
* that the trigger will be created for.
|
||||
* @param params.schema - The `schema` property is a string that specifies the name of the schema
|
||||
* that the trigger will be created for. If the schema is not specified, the default schema will
|
||||
* be used. (public)
|
||||
* @param params.filter - The `filter` property is an object that specifies the filter that will
|
||||
* be used to determine if the trigger should be called. If the filter is not specified, the
|
||||
* trigger will be called for all records.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* ```ts
|
||||
* const supabase = new SupabaseManagement({ id: "supabase" });
|
||||
* const database = supabase.database<Database>("https://<project-id>.supabase.co");
|
||||
*
|
||||
* client.defineJob({
|
||||
* trigger: database.onDeleted({
|
||||
* table: "todos",
|
||||
* schema: "public",
|
||||
* filter: {
|
||||
* old_record: { is_completed: [true] },
|
||||
* },
|
||||
* }),
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
onDeleted<
|
||||
SchemaName extends string & keyof Database = "public" extends keyof Database
|
||||
? "public"
|
||||
@@ -175,9 +321,44 @@ type WebhookEventSource = ReturnType<typeof createWebhookEventSource>;
|
||||
|
||||
type WebhookEvents = "INSERT" | "UPDATE" | "DELETE";
|
||||
|
||||
type WebhookEventPayloads<
|
||||
TTableName extends string,
|
||||
TSchemaName extends string = "public",
|
||||
TRecord = any,
|
||||
> = {
|
||||
INSERT: {
|
||||
table: TTableName;
|
||||
record: Prettify<TRecord>;
|
||||
type: "INSERT";
|
||||
schema: TSchemaName;
|
||||
old_record: null;
|
||||
};
|
||||
UPDATE: {
|
||||
table: TTableName;
|
||||
record: Prettify<TRecord>;
|
||||
type: "UPDATE";
|
||||
schema: TSchemaName;
|
||||
old_record: Prettify<TRecord>;
|
||||
};
|
||||
DELETE: {
|
||||
table: TTableName;
|
||||
record: null;
|
||||
type: "DELETE";
|
||||
schema: TSchemaName;
|
||||
old_record: Prettify<TRecord>;
|
||||
};
|
||||
};
|
||||
|
||||
type UnionPayloads<
|
||||
T extends WebhookEvents[],
|
||||
TTableName extends string,
|
||||
TSchemaName extends string = "public",
|
||||
TRecord = any,
|
||||
> = WebhookEventPayloads<TTableName, TSchemaName, TRecord>[T[number]];
|
||||
|
||||
function createTrigger<TEvent extends any>(
|
||||
source: WebhookEventSource,
|
||||
params: { event: WebhookEvents; filter?: EventFilter } & {
|
||||
params: { event: WebhookEvents | WebhookEvents[]; filter?: EventFilter } & {
|
||||
projectRef: string;
|
||||
table: string;
|
||||
schema?: string;
|
||||
@@ -190,7 +371,7 @@ function createTrigger<TEvent extends any>(
|
||||
icon: "supabase",
|
||||
filter: {
|
||||
...params.filter,
|
||||
type: [params.event],
|
||||
type: typeof params.event === "string" ? [params.event] : params.event,
|
||||
schema: [params.schema ?? "public"],
|
||||
},
|
||||
properties: [],
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# @trigger.dev/typeform
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @trigger.dev/integration-kit@2.0.5
|
||||
- @trigger.dev/sdk@2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/typeform",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "The official Typeform integration for Trigger.dev",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -26,8 +26,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@typeform/api-client": "^1.8.0",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.4",
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.4",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.5",
|
||||
"@trigger.dev/integration-kit": "workspace:^2.0.5",
|
||||
"zod": "3.21.4"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# create-trigger
|
||||
|
||||
## 2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/cli",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "The Trigger.dev CLI",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# internal-platform
|
||||
|
||||
## 2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/core",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "Common code used across the Trigger.dev SDK and platform",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @trigger.dev/express
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @trigger.dev/sdk@2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/express",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "Official Express adapter for Trigger.dev",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -18,7 +18,7 @@
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@trigger.dev/sdk": "workspace:^2.0.4",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.5",
|
||||
"@trigger.dev/tsconfig": "workspace:*",
|
||||
"@types/debug": "^4.1.7",
|
||||
"@types/express": "^4.17.13",
|
||||
@@ -32,7 +32,7 @@
|
||||
"build:tsup": "tsup"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@trigger.dev/sdk": "workspace:^2.0.4"
|
||||
"@trigger.dev/sdk": "workspace:^2.0.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"@remix-run/web-fetch": "^4.3.5",
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# @trigger.dev/integration-kit
|
||||
|
||||
## 2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
## 2.0.3
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/integration-kit",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "Trigger.dev Integration Kit has helpers to make creating integrations easier",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @trigger.dev/nextjs
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @trigger.dev/sdk@2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/nextjs",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "Trigger.dev Next.js integration",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -32,7 +32,7 @@
|
||||
"build:tsup": "tsup"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@trigger.dev/sdk": "workspace:^2.0.4",
|
||||
"@trigger.dev/sdk": "workspace:^2.0.5",
|
||||
"next": ">=12.0.0 <14.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @trigger.dev/react
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @trigger.dev/core@2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/react",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "Trigger.dev React SDK",
|
||||
"types": "dist/index.d.ts",
|
||||
"main": "dist/index.cjs",
|
||||
@@ -26,7 +26,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@tanstack/react-query": "5.0.0-beta.2",
|
||||
"@trigger.dev/core": "workspace:^2.0.4",
|
||||
"@trigger.dev/core": "workspace:^2.0.5",
|
||||
"debug": "^4.3.4",
|
||||
"zod": "3.21.4"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @trigger.dev/sdk
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @trigger.dev/core@2.0.5
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@trigger.dev/sdk",
|
||||
"version": "2.0.4",
|
||||
"version": "2.0.5",
|
||||
"description": "trigger.dev Node.JS SDK",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -24,7 +24,7 @@
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@trigger.dev/core": "workspace:^2.0.4",
|
||||
"@trigger.dev/core": "workspace:^2.0.5",
|
||||
"chalk": "^5.2.0",
|
||||
"cronstrue": "^2.21.0",
|
||||
"debug": "^4.3.4",
|
||||
|
||||
Generated
+22
-22
@@ -94,7 +94,7 @@ importers:
|
||||
'@trigger.dev/companyicons': ^1.5.14
|
||||
'@trigger.dev/core': workspace:*
|
||||
'@trigger.dev/database': workspace:*
|
||||
'@trigger.dev/sdk': workspace:2.0.4
|
||||
'@trigger.dev/sdk': workspace:2.0.5
|
||||
'@trigger.dev/tailwind-config': workspace:*
|
||||
'@types/bcryptjs': ^2.4.2
|
||||
'@types/compression': ^1.7.2
|
||||
@@ -577,8 +577,8 @@ importers:
|
||||
'@octokit/types': ^9.2.3
|
||||
'@octokit/webhooks': ^10.4.0
|
||||
'@octokit/webhooks-types': ^6.10.0
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.4
|
||||
'@trigger.dev/sdk': workspace:^2.0.4
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.5
|
||||
'@trigger.dev/sdk': workspace:^2.0.5
|
||||
'@trigger.dev/tsconfig': workspace:*
|
||||
'@types/node': '18'
|
||||
octokit: ^2.0.14
|
||||
@@ -603,8 +603,8 @@ importers:
|
||||
|
||||
integrations/openai:
|
||||
specifiers:
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.4
|
||||
'@trigger.dev/sdk': workspace:^2.0.4
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.5
|
||||
'@trigger.dev/sdk': workspace:^2.0.5
|
||||
'@trigger.dev/tsconfig': workspace:*
|
||||
'@types/node': '18'
|
||||
openai: ^3.3.0
|
||||
@@ -625,8 +625,8 @@ importers:
|
||||
integrations/plain:
|
||||
specifiers:
|
||||
'@team-plain/typescript-sdk': ^2.7.0
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.4
|
||||
'@trigger.dev/sdk': workspace:^2.0.4
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.5
|
||||
'@trigger.dev/sdk': workspace:^2.0.5
|
||||
'@trigger.dev/tsconfig': workspace:*
|
||||
'@types/node': '18'
|
||||
rimraf: ^3.0.2
|
||||
@@ -643,8 +643,8 @@ importers:
|
||||
|
||||
integrations/resend:
|
||||
specifiers:
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.4
|
||||
'@trigger.dev/sdk': workspace:^2.0.4
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.5
|
||||
'@trigger.dev/sdk': workspace:^2.0.5
|
||||
'@trigger.dev/tsconfig': workspace:*
|
||||
'@types/node': '18'
|
||||
resend: ^0.9.1
|
||||
@@ -663,7 +663,7 @@ importers:
|
||||
integrations/slack:
|
||||
specifiers:
|
||||
'@slack/web-api': ^6.8.1
|
||||
'@trigger.dev/sdk': workspace:^2.0.4
|
||||
'@trigger.dev/sdk': workspace:^2.0.5
|
||||
'@trigger.dev/tsconfig': workspace:*
|
||||
'@types/node': '18'
|
||||
rimraf: ^3.0.2
|
||||
@@ -681,8 +681,8 @@ importers:
|
||||
|
||||
integrations/stripe:
|
||||
specifiers:
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.4
|
||||
'@trigger.dev/sdk': workspace:^2.0.4
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.5
|
||||
'@trigger.dev/sdk': workspace:^2.0.5
|
||||
'@types/node': 16.x
|
||||
rimraf: ^3.0.2
|
||||
stripe: ^12.14.0
|
||||
@@ -705,8 +705,8 @@ importers:
|
||||
integrations/supabase:
|
||||
specifiers:
|
||||
'@supabase/supabase-js': ^2.26.0
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.4
|
||||
'@trigger.dev/sdk': workspace:^2.0.4
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.5
|
||||
'@trigger.dev/sdk': workspace:^2.0.5
|
||||
'@types/node': 18.x
|
||||
rimraf: ^3.0.2
|
||||
supabase-management-js: ^0.1.4
|
||||
@@ -727,8 +727,8 @@ importers:
|
||||
|
||||
integrations/typeform:
|
||||
specifiers:
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.4
|
||||
'@trigger.dev/sdk': workspace:^2.0.4
|
||||
'@trigger.dev/integration-kit': workspace:^2.0.5
|
||||
'@trigger.dev/sdk': workspace:^2.0.5
|
||||
'@typeform/api-client': ^1.8.0
|
||||
'@types/node': 16.x
|
||||
rimraf: ^3.0.2
|
||||
@@ -893,7 +893,7 @@ importers:
|
||||
packages/express:
|
||||
specifiers:
|
||||
'@remix-run/web-fetch': ^4.3.5
|
||||
'@trigger.dev/sdk': workspace:^2.0.4
|
||||
'@trigger.dev/sdk': workspace:^2.0.5
|
||||
'@trigger.dev/tsconfig': workspace:*
|
||||
'@types/debug': ^4.1.7
|
||||
'@types/express': ^4.17.13
|
||||
@@ -958,7 +958,7 @@ importers:
|
||||
packages/react:
|
||||
specifiers:
|
||||
'@tanstack/react-query': 5.0.0-beta.2
|
||||
'@trigger.dev/core': workspace:^2.0.4
|
||||
'@trigger.dev/core': workspace:^2.0.5
|
||||
'@trigger.dev/tsconfig': workspace:*
|
||||
'@types/debug': ^4.1.7
|
||||
'@types/react': 18.2.17
|
||||
@@ -988,7 +988,7 @@ importers:
|
||||
|
||||
packages/trigger-sdk:
|
||||
specifiers:
|
||||
'@trigger.dev/core': workspace:^2.0.4
|
||||
'@trigger.dev/core': workspace:^2.0.5
|
||||
'@trigger.dev/tsconfig': workspace:*
|
||||
'@types/debug': ^4.1.7
|
||||
'@types/node': '18'
|
||||
@@ -12053,7 +12053,7 @@ packages:
|
||||
/axios/0.26.1:
|
||||
resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==}
|
||||
dependencies:
|
||||
follow-redirects: 1.15.2_debug@4.3.2
|
||||
follow-redirects: 1.15.2
|
||||
transitivePeerDependencies:
|
||||
- debug
|
||||
dev: false
|
||||
@@ -12061,7 +12061,7 @@ packages:
|
||||
/axios/0.27.2:
|
||||
resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==}
|
||||
dependencies:
|
||||
follow-redirects: 1.15.2_debug@4.3.2
|
||||
follow-redirects: 1.15.2
|
||||
form-data: 4.0.0
|
||||
transitivePeerDependencies:
|
||||
- debug
|
||||
@@ -12070,7 +12070,7 @@ packages:
|
||||
/axios/1.4.0:
|
||||
resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==}
|
||||
dependencies:
|
||||
follow-redirects: 1.15.2_debug@4.3.2
|
||||
follow-redirects: 1.15.2
|
||||
form-data: 4.0.0
|
||||
proxy-from-env: 1.1.0
|
||||
transitivePeerDependencies:
|
||||
|
||||
Reference in New Issue
Block a user