@trigger.dev/sdk: Adding some type helpers for getting the payload and IO types from jobs and triggers
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@trigger.dev/sdk": patch
|
||||
---
|
||||
|
||||
Adding some type helpers for getting the payload and IO types from jobs and triggers
|
||||
@@ -1,6 +1,14 @@
|
||||
import { Database } from "@/supabase.types";
|
||||
import { client } from "@/trigger";
|
||||
import { Job, eventTrigger } from "@trigger.dev/sdk";
|
||||
import {
|
||||
type IntegrationIO,
|
||||
Job,
|
||||
eventTrigger,
|
||||
type JobPayload,
|
||||
type JobIO,
|
||||
type TriggerPayload,
|
||||
type IOWithIntegrations,
|
||||
} from "@trigger.dev/sdk";
|
||||
import { SupabaseManagement, Supabase } from "@trigger.dev/supabase";
|
||||
import { z } from "zod";
|
||||
|
||||
@@ -25,6 +33,15 @@ const supabaseDB = new Supabase<Database>({
|
||||
supabaseKey: process.env.SUPABASE_KEY!,
|
||||
});
|
||||
|
||||
async function doPlaygroundStuff(
|
||||
io: IntegrationIO<typeof supabaseManagementKey>,
|
||||
ref: string
|
||||
) {
|
||||
await io.getPGConfig("get-pg-config", {
|
||||
ref,
|
||||
});
|
||||
}
|
||||
|
||||
new Job(client, {
|
||||
id: "supabase-playground",
|
||||
name: "Supabase Playground",
|
||||
@@ -87,7 +104,7 @@ new Job(client, {
|
||||
},
|
||||
});
|
||||
|
||||
new Job(client, {
|
||||
const createTodoJob = new Job(client, {
|
||||
id: "supabase-create-todo",
|
||||
name: "Supabase Create Todo",
|
||||
version: "0.1.1",
|
||||
@@ -126,20 +143,63 @@ new Job(client, {
|
||||
},
|
||||
});
|
||||
|
||||
type CreateTodo = JobPayload<typeof createTodoJob>;
|
||||
type CreateTodoIO = JobIO<typeof createTodoJob>;
|
||||
|
||||
async function runCreateTodo(payload: CreateTodo, io: CreateTodoIO) {
|
||||
const newTodo = await io.supabaseDB.runTask(
|
||||
"create-todo",
|
||||
async (db) => {
|
||||
const { data, error } = await db
|
||||
.from("todos")
|
||||
.insert({
|
||||
contents: payload.contents,
|
||||
user_id: payload.user_id,
|
||||
is_complete: false,
|
||||
})
|
||||
.select();
|
||||
|
||||
if (error) throw error;
|
||||
|
||||
return data;
|
||||
},
|
||||
{
|
||||
name: "Create Todo",
|
||||
properties: [{ label: "Contents", text: payload.contents }],
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
const createProjectTrigger = eventTrigger({
|
||||
name: "supabase.create",
|
||||
schema: z.object({
|
||||
name: z.string(),
|
||||
organization_id: z.string(),
|
||||
plan: z.enum(["free", "pro"]),
|
||||
region: z.enum(["us-east-1", "us-west-1"]),
|
||||
password: z.string(),
|
||||
}),
|
||||
});
|
||||
|
||||
async function doRun(
|
||||
payload: TriggerPayload<typeof createProjectTrigger>,
|
||||
io: IOWithIntegrations<{ supabase: typeof supabase }>
|
||||
) {
|
||||
await io.supabase.createProject("create-project", {
|
||||
name: payload.name,
|
||||
organization_id: payload.organization_id,
|
||||
plan: payload.plan,
|
||||
region: payload.region,
|
||||
kps_enabled: true,
|
||||
db_pass: payload.password,
|
||||
});
|
||||
}
|
||||
|
||||
new Job(client, {
|
||||
id: "supabase-create-project",
|
||||
name: "Supabase Create Project",
|
||||
version: "0.1.1",
|
||||
trigger: eventTrigger({
|
||||
name: "supabase.create",
|
||||
schema: z.object({
|
||||
name: z.string(),
|
||||
organization_id: z.string(),
|
||||
plan: z.enum(["free", "pro"]),
|
||||
region: z.enum(["us-east-1", "us-west-1"]),
|
||||
password: z.string(),
|
||||
}),
|
||||
}),
|
||||
trigger: createProjectTrigger,
|
||||
integrations: {
|
||||
supabase,
|
||||
},
|
||||
|
||||
@@ -161,6 +161,7 @@ export const getPostgRESTConfig: AuthenticatedTask<
|
||||
},
|
||||
};
|
||||
|
||||
/** Gets project's Postgres config */
|
||||
export const getPGConfig: AuthenticatedTask<
|
||||
SupabaseManagementAPI,
|
||||
{ ref: string },
|
||||
|
||||
@@ -113,6 +113,10 @@ type ExtractIntegrationClient<
|
||||
> = ExtractIntegrationClientClient<TIntegrationClient> &
|
||||
ExtractTasks<TIntegrationClient["tasks"]>;
|
||||
|
||||
export type IntegrationIO<
|
||||
TIntegration extends TriggerIntegration<IntegrationClient<any, any>>
|
||||
> = ExtractIntegrationClient<TIntegration["client"]>;
|
||||
|
||||
type ExtractIntegrations<
|
||||
TIntegrations extends Record<
|
||||
string,
|
||||
|
||||
@@ -77,6 +77,17 @@ export type JobOptions<
|
||||
) => Promise<any>;
|
||||
};
|
||||
|
||||
export type JobPayload<TJob> = TJob extends Job<
|
||||
Trigger<EventSpecification<infer TEvent>>,
|
||||
any
|
||||
>
|
||||
? TEvent
|
||||
: never;
|
||||
|
||||
export type JobIO<TJob> = TJob extends Job<any, infer TIntegrations>
|
||||
? IOWithIntegrations<TIntegrations>
|
||||
: never;
|
||||
|
||||
/** A [Job](https://trigger.dev/docs/documentation/concepts/jobs) is used to define the [Trigger](https://trigger.dev/docs/documentation/concepts/triggers), metadata, and what happens when it runs. */
|
||||
export class Job<
|
||||
TTrigger extends Trigger<EventSpecification<any>>,
|
||||
|
||||
@@ -67,6 +67,12 @@ export interface Trigger<TEventSpec extends EventSpecification<any>> {
|
||||
preprocessRuns: boolean;
|
||||
}
|
||||
|
||||
export type TriggerPayload<TTrigger> = TTrigger extends Trigger<
|
||||
EventSpecification<infer TEvent>
|
||||
>
|
||||
? TEvent
|
||||
: never;
|
||||
|
||||
export type EventSpecificationExample = {
|
||||
id: string;
|
||||
name: string;
|
||||
|
||||
Reference in New Issue
Block a user