From a5ed59830f9d2537ea37bd1619842f76beb32e2e Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Wed, 20 Sep 2023 11:34:42 -0700 Subject: [PATCH 1/7] feat: BYO Auth MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Define client-side auth resolvers to be able to supply custom authentication credentials for integrations before a run is performed - Added new defineAuthResolver - Update all integrations to support the new auth resolvers - Strip internal symbols from .d.ts in integrations and trigger-sdk - Added BYO Auth docs - Update Dynamic Schedule to support associated account IDs - Create external accounts just-in-time - Added Account ID field to test job when there are external auth integrations - Show Account ID on run dashboard - Added new Run error state called β€œUnresolved auth” --- .vscode/launch.json | 9 + apps/webapp/app/components/jobs/JobsTable.tsx | 1 + .../webapp/app/components/run/RunOverview.tsx | 8 +- .../app/components/run/TriggerDetail.tsx | 7 + .../app/components/runs/RunStatuses.tsx | 40 +- .../webapp/app/models/runConnection.server.ts | 2 +- .../IntegrationClientPresenter.server.ts | 8 +- .../IntegrationsPresenter.server.ts | 5 +- .../app/presenters/RunPresenter.server.ts | 5 + .../app/presenters/TestJobPresenter.server.ts | 12 + .../TriggerDetailsPresenter.server.ts | 5 + .../route.tsx | 53 ++- ...unts.$accountId.connections.$clientSlug.ts | 8 +- .../services/events/ingestSendEvent.server.ts | 13 +- .../app/services/jobs/registerJob.server.ts | 231 +++++++---- .../app/services/jobs/testJob.server.ts | 30 +- .../app/services/runs/continueRun.server.ts | 2 +- .../runs/performRunExecutionV1.server.ts | 17 +- .../runs/performRunExecutionV2.server.ts | 25 +- apps/webapp/app/services/runs/reRun.server.ts | 8 + .../app/services/runs/startRun.server.ts | 10 +- .../schedules/registerSchedule.server.ts | 1 + .../registerScheduleSource.server.ts | 10 +- .../sources/registerSourceV1.server.ts | 8 +- .../sources/registerSourceV2.server.ts | 8 +- docs/_snippets/installs/slack.mdx | 15 + .../guides/using-integrations-apikeys.mdx | 1 + .../guides/using-integrations-byo-auth.mdx | 381 ++++++++++++++++++ .../guides/using-integrations.mdx | 17 +- .../images/byo-auth/dynamic-schedule-task.png | Bin 0 -> 297872 bytes .../byo-auth/run-dashboard-account-id.png | Bin 0 -> 156432 bytes docs/images/byo-auth/run-test-account-id.png | Bin 0 -> 98181 bytes docs/mint.json | 20 +- integrations/airtable/src/base.ts | 11 +- integrations/airtable/src/index.ts | 18 +- integrations/airtable/tsconfig.json | 3 +- integrations/github/src/compound.ts | 14 +- integrations/github/src/git.ts | 6 +- integrations/github/src/index.ts | 7 + integrations/github/src/issues.ts | 6 +- integrations/github/src/orgs.ts | 6 +- integrations/github/src/reactions.ts | 6 +- integrations/github/src/repos.ts | 12 +- integrations/github/src/sources.ts | 5 +- integrations/github/tsconfig.json | 3 +- integrations/openai/src/chat.ts | 6 +- integrations/openai/src/index.ts | 21 +- integrations/openai/src/types.ts | 2 +- integrations/openai/tsconfig.json | 3 +- integrations/plain/src/index.ts | 21 +- integrations/plain/tsconfig.json | 3 +- integrations/resend/src/index.ts | 38 +- integrations/resend/tsconfig.json | 3 +- integrations/sendgrid/src/index.ts | 23 +- integrations/sendgrid/tsconfig.json | 3 +- integrations/slack/src/index.ts | 7 + integrations/slack/tsconfig.json | 3 +- integrations/stripe/src/charges.ts | 6 +- integrations/stripe/src/checkout.ts | 6 +- integrations/stripe/src/customers.ts | 6 +- integrations/stripe/src/index.ts | 45 ++- integrations/stripe/src/subscriptions.ts | 6 +- integrations/stripe/src/types.ts | 2 +- integrations/stripe/src/webhookEndpoints.ts | 6 +- integrations/stripe/tsconfig.json | 3 +- integrations/supabase/src/database/index.ts | 7 + integrations/supabase/src/management/index.ts | 7 + integrations/supabase/tsconfig.json | 3 +- integrations/typeform/src/forms.ts | 6 +- integrations/typeform/src/index.ts | 21 +- integrations/typeform/src/types.ts | 2 +- integrations/typeform/src/webhooks.ts | 6 +- integrations/typeform/tsconfig.json | 3 +- packages/core/src/schemas/api.ts | 10 +- packages/core/src/schemas/integrations.ts | 4 +- packages/core/src/schemas/runs.ts | 3 +- packages/core/src/schemas/schedules.ts | 4 + .../migration.sql | 2 + .../migration.sql | 2 + packages/database/prisma/schema.prisma | 2 + packages/trigger-sdk/src/job.ts | 38 +- packages/trigger-sdk/src/runLocalStorage.ts | 10 + packages/trigger-sdk/src/triggerClient.ts | 294 ++++++++++++-- packages/trigger-sdk/src/triggers/dynamic.ts | 2 + .../trigger-sdk/src/triggers/scheduled.ts | 54 ++- .../src/utils/typedAsyncLocalStorage.ts | 17 + references/job-catalog/package.json | 12 +- references/job-catalog/src/byo-auth.ts | 123 ++++++ 88 files changed, 1514 insertions(+), 388 deletions(-) create mode 100644 docs/_snippets/installs/slack.mdx create mode 100644 docs/documentation/guides/using-integrations-byo-auth.mdx create mode 100644 docs/images/byo-auth/dynamic-schedule-task.png create mode 100644 docs/images/byo-auth/run-dashboard-account-id.png create mode 100644 docs/images/byo-auth/run-test-account-id.png create mode 100644 packages/database/prisma/migrations/20230919124531_add_resolver_auth_source/migration.sql create mode 100644 packages/database/prisma/migrations/20230919150351_add_unresolved_auth_job_run_status/migration.sql create mode 100644 packages/trigger-sdk/src/runLocalStorage.ts create mode 100644 packages/trigger-sdk/src/utils/typedAsyncLocalStorage.ts create mode 100644 references/job-catalog/src/byo-auth.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index 21288b65a1..37375ca33d 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -19,6 +19,15 @@ "name": "Chrome webapp", "url": "http://localhost:3030", "webRoot": "${workspaceFolder}/apps/webapp/app" + }, + { + "type": "node-terminal", + "request": "launch", + "name": "Debug BYO Auth", + "command": "pnpm run byo-auth", + "envFile": "${workspaceFolder}/references/job-catalog/.env", + "cwd": "${workspaceFolder}/references/job-catalog", + "sourceMaps": true } ] } diff --git a/apps/webapp/app/components/jobs/JobsTable.tsx b/apps/webapp/app/components/jobs/JobsTable.tsx index 7b15074d25..4884e388ee 100644 --- a/apps/webapp/app/components/jobs/JobsTable.tsx +++ b/apps/webapp/app/components/jobs/JobsTable.tsx @@ -197,6 +197,7 @@ function classForJobStatus(status: JobRunStatus) { case "TIMED_OUT": case "WAITING_ON_CONNECTIONS": case "PENDING": + case "UNRESOLVED_AUTH": return "text-rose-500"; default: return ""; diff --git a/apps/webapp/app/components/run/RunOverview.tsx b/apps/webapp/app/components/run/RunOverview.tsx index 7abceb941f..79bdfe22b4 100644 --- a/apps/webapp/app/components/run/RunOverview.tsx +++ b/apps/webapp/app/components/run/RunOverview.tsx @@ -167,7 +167,13 @@ export function RunOverview({ run, trigger, showRerun, paths }: RunOverviewProps diff --git a/apps/webapp/app/components/run/TriggerDetail.tsx b/apps/webapp/app/components/run/TriggerDetail.tsx index 006f3b5769..7f5dd41e89 100644 --- a/apps/webapp/app/components/run/TriggerDetail.tsx +++ b/apps/webapp/app/components/run/TriggerDetail.tsx @@ -45,6 +45,13 @@ export function TriggerDetail({ /> )} + {trigger.externalAccount && ( + + )}
diff --git a/apps/webapp/app/components/runs/RunStatuses.tsx b/apps/webapp/app/components/runs/RunStatuses.tsx index 0a2e16827d..4628a1ba44 100644 --- a/apps/webapp/app/components/runs/RunStatuses.tsx +++ b/apps/webapp/app/components/runs/RunStatuses.tsx @@ -1,15 +1,14 @@ -import type { JobRunExecution, JobRunStatus } from "@trigger.dev/database"; +import { NoSymbolIcon } from "@heroicons/react/20/solid"; import { CheckCircleIcon, ClockIcon, ExclamationTriangleIcon, - StopIcon, WrenchIcon, XCircleIcon, } from "@heroicons/react/24/solid"; +import type { JobRunStatus } from "@trigger.dev/database"; import { cn } from "~/utils/cn"; import { Spinner } from "../primitives/Spinner"; -import { HandRaisedIcon, NoSymbolIcon } from "@heroicons/react/20/solid"; export function hasFinished(status: JobRunStatus): boolean { return ( @@ -17,7 +16,8 @@ export function hasFinished(status: JobRunStatus): boolean { status === "FAILURE" || status === "ABORTED" || status === "TIMED_OUT" || - status === "CANCELED" + status === "CANCELED" || + status === "UNRESOLVED_AUTH" ); } @@ -48,6 +48,8 @@ export function RunStatusIcon({ status, className }: { status: JobRunStatus; cla return ; case "TIMED_OUT": return ; + case "UNRESOLVED_AUTH": + return ; case "WAITING_ON_CONNECTIONS": return ; case "ABORTED": @@ -63,26 +65,25 @@ export type RunBasicStatus = "WAITING" | "PENDING" | "RUNNING" | "COMPLETED" | " export function runBasicStatus(status: JobRunStatus): RunBasicStatus { switch (status) { - case "SUCCESS": - return "COMPLETED"; + case "WAITING_ON_CONNECTIONS": + case "QUEUED": + case "PREPROCESSING": case "PENDING": return "PENDING"; case "STARTED": return "RUNNING"; - case "QUEUED": - return "PENDING"; case "FAILURE": - return "FAILED"; case "TIMED_OUT": - return "FAILED"; - case "WAITING_ON_CONNECTIONS": - return "PENDING"; - case "ABORTED": - return "FAILED"; - case "PREPROCESSING": - return "PENDING"; + case "UNRESOLVED_AUTH": case "CANCELED": + case "ABORTED": return "FAILED"; + case "SUCCESS": + return "COMPLETED"; + default: { + const _exhaustiveCheck: never = status; + throw new Error(`Non-exhaustive match for value: ${status}`); + } } } @@ -108,6 +109,12 @@ export function runStatusTitle(status: JobRunStatus): string { return "Preprocessing"; case "CANCELED": return "Canceled"; + case "UNRESOLVED_AUTH": + return "Unresolved auth"; + default: { + const _exhaustiveCheck: never = status; + throw new Error(`Non-exhaustive match for value: ${status}`); + } } } @@ -122,6 +129,7 @@ export function runStatusClassNameColor(status: JobRunStatus): string { case "QUEUED": return "text-amber-300"; case "FAILURE": + case "UNRESOLVED_AUTH": return "text-rose-500"; case "TIMED_OUT": return "text-amber-300"; diff --git a/apps/webapp/app/models/runConnection.server.ts b/apps/webapp/app/models/runConnection.server.ts index 2ddd2bef56..732781ecc7 100644 --- a/apps/webapp/app/models/runConnection.server.ts +++ b/apps/webapp/app/models/runConnection.server.ts @@ -16,7 +16,7 @@ export async function resolveRunConnections( const result: Record = {}; for (const connection of connections) { - if (connection.integration.authSource === "LOCAL") { + if (connection.integration.authSource !== "HOSTED") { continue; } diff --git a/apps/webapp/app/presenters/IntegrationClientPresenter.server.ts b/apps/webapp/app/presenters/IntegrationClientPresenter.server.ts index 3dea16ff00..901d79b171 100644 --- a/apps/webapp/app/presenters/IntegrationClientPresenter.server.ts +++ b/apps/webapp/app/presenters/IntegrationClientPresenter.server.ts @@ -120,8 +120,12 @@ export class IntegrationClientPresenter { icon: integration.definition.icon, }, authMethod: { - type: integration.authMethod?.type ?? "local", - name: integration.authMethod?.name ?? "Local Auth", + type: + integration.authMethod?.type ?? integration.authSource === "RESOLVER" ? "local" : "local", + name: + integration.authMethod?.name ?? integration.authSource === "RESOLVER" + ? "Auth Resolver" + : "Local Auth", }, help, }; diff --git a/apps/webapp/app/presenters/IntegrationsPresenter.server.ts b/apps/webapp/app/presenters/IntegrationsPresenter.server.ts index 45fe635476..c38449a175 100644 --- a/apps/webapp/app/presenters/IntegrationsPresenter.server.ts +++ b/apps/webapp/app/presenters/IntegrationsPresenter.server.ts @@ -125,8 +125,9 @@ export class IntegrationsPresenter { name: c.definition.name, }, authMethod: { - type: c.authMethod?.type ?? "local", - name: c.authMethod?.name ?? "Local Only", + type: c.authMethod?.type ?? c.authSource === "RESOLVER" ? "resolver" : "local", + name: + c.authMethod?.name ?? c.authSource === "RESOLVER" ? "Auth Resolver" : "Local Only", }, authSource: c.authSource, setupStatus: c.setupStatus, diff --git a/apps/webapp/app/presenters/RunPresenter.server.ts b/apps/webapp/app/presenters/RunPresenter.server.ts index a3e380aa1a..369ce882e3 100644 --- a/apps/webapp/app/presenters/RunPresenter.server.ts +++ b/apps/webapp/app/presenters/RunPresenter.server.ts @@ -115,6 +115,11 @@ export class RunPresenter { payload: true, timestamp: true, deliveredAt: true, + externalAccount: { + select: { + identifier: true, + }, + }, }, }, tasks: { diff --git a/apps/webapp/app/presenters/TestJobPresenter.server.ts b/apps/webapp/app/presenters/TestJobPresenter.server.ts index 3e0a7a8fd6..3028199e2b 100644 --- a/apps/webapp/app/presenters/TestJobPresenter.server.ts +++ b/apps/webapp/app/presenters/TestJobPresenter.server.ts @@ -39,6 +39,15 @@ export class TestJobPresenter { payload: true, }, }, + integrations: { + select: { + integration: { + select: { + authSource: true, + }, + }, + }, + }, }, }, environment: { @@ -99,6 +108,9 @@ export class TestJobPresenter { ...example, payload: JSON.stringify(example.payload, exampleReplacer, 2), })), + hasAuthResolver: alias.version.integrations.some( + (i) => i.integration.authSource === "RESOLVER" + ), })), hasTestRuns: job._count.runs > 0, }; diff --git a/apps/webapp/app/presenters/TriggerDetailsPresenter.server.ts b/apps/webapp/app/presenters/TriggerDetailsPresenter.server.ts index 127f734390..d4b6fa6e38 100644 --- a/apps/webapp/app/presenters/TriggerDetailsPresenter.server.ts +++ b/apps/webapp/app/presenters/TriggerDetailsPresenter.server.ts @@ -22,6 +22,11 @@ export class TriggerDetailsPresenter { payload: true, timestamp: true, deliveredAt: true, + externalAccount: { + select: { + identifier: true, + }, + }, }, }, }, diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.jobs.$jobParam.test/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.jobs.$jobParam.test/route.tsx index 37cca5fa2e..21917e7bfe 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.jobs.$jobParam.test/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.jobs.$jobParam.test/route.tsx @@ -1,4 +1,4 @@ -import { useForm } from "@conform-to/react"; +import { conform, useForm } from "@conform-to/react"; import { parse } from "@conform-to/zod"; import { PopoverTrigger } from "@radix-ui/react-popover"; import { Form, useActionData, useSubmit } from "@remix-run/react"; @@ -14,6 +14,9 @@ import { Button, ButtonContent } from "~/components/primitives/Buttons"; import { Callout } from "~/components/primitives/Callout"; import { FormError } from "~/components/primitives/FormError"; import { Help, HelpContent, HelpTrigger } from "~/components/primitives/Help"; +import { Input } from "~/components/primitives/Input"; +import { InputGroup } from "~/components/primitives/InputGroup"; +import { Label } from "~/components/primitives/Label"; import { Popover, PopoverContent } from "~/components/primitives/Popover"; import { Select, @@ -69,6 +72,7 @@ const schema = z.object({ }), environmentId: z.string(), versionId: z.string(), + accountId: z.string().optional(), }); //todo save the chosen environment to a cookie (for that user), use it to default the env dropdown @@ -84,11 +88,7 @@ export const action: ActionFunction = async ({ request, params }) => { } const testService = new TestJobService(); - const run = await testService.call({ - environmentId: submission.value.environmentId, - payload: submission.value.payload, - versionId: submission.value.versionId, - }); + const run = await testService.call(submission.value); if (!run) { return redirectBackWithErrorMessage( @@ -124,6 +124,7 @@ export default function Page() { const [defaultJson, setDefaultJson] = useState(startingJson); const currentJson = useRef(defaultJson); const [selectedEnvironmentId, setSelectedEnvironmentId] = useState(environments[0].id); + const [currentAccountId, setCurrentAccountId] = useState(undefined); const selectedEnvironment = environments.find((e) => e.id === selectedEnvironmentId); @@ -139,6 +140,7 @@ export default function Page() { payload: currentJson.current, environmentId: selectedEnvironmentId, versionId: selectedEnvironment?.versionId ?? "", + ...(currentAccountId ? { accountId: currentAccountId } : {}), }, { action: "", @@ -147,10 +149,10 @@ export default function Page() { ); e.preventDefault(); }, - [currentJson, selectedEnvironmentId] + [currentJson, selectedEnvironmentId, currentAccountId] ); - const [form, { environmentId, payload }] = useForm({ + const [form, { environmentId, payload, accountId }] = useForm({ id: "test-job", lastSubmission, onValidate({ formData }) { @@ -234,15 +236,32 @@ export default function Page() {
-
- (currentJson.current = v)} - minHeight="150px" - /> -
+ + +
+ (currentJson.current = v)} + minHeight="150px" + /> +
+
+ + {selectedEnvironment?.hasAuthResolver && ( + + + setCurrentAccountId(e.target.value)} + /> + {accountId.error} + + )}
{payload.error ? ( {payload.error} diff --git a/apps/webapp/app/routes/api.v1.accounts.$accountId.connections.$clientSlug.ts b/apps/webapp/app/routes/api.v1.accounts.$accountId.connections.$clientSlug.ts index 5763ce8a37..e9f8d39b6f 100644 --- a/apps/webapp/app/routes/api.v1.accounts.$accountId.connections.$clientSlug.ts +++ b/apps/webapp/app/routes/api.v1.accounts.$accountId.connections.$clientSlug.ts @@ -81,13 +81,19 @@ class CreateExternalConnectionService { environment: AuthenticatedEnvironment, payload: CreateExternalConnectionBody ) { - const externalAccount = await this.#prismaClient.externalAccount.findUniqueOrThrow({ + const externalAccount = await this.#prismaClient.externalAccount.upsert({ where: { environmentId_identifier: { environmentId: environment.id, identifier: accountIdentifier, }, }, + create: { + environmentId: environment.id, + organizationId: environment.organizationId, + identifier: accountIdentifier, + }, + update: {}, }); const integration = await this.#prismaClient.integration.findUniqueOrThrow({ diff --git a/apps/webapp/app/services/events/ingestSendEvent.server.ts b/apps/webapp/app/services/events/ingestSendEvent.server.ts index a4130bfdbc..f2c5e79335 100644 --- a/apps/webapp/app/services/events/ingestSendEvent.server.ts +++ b/apps/webapp/app/services/events/ingestSendEvent.server.ts @@ -7,10 +7,7 @@ import { logger } from "../logger.server"; export class IngestSendEvent { #prismaClient: PrismaClientOrTransaction; - constructor( - prismaClient: PrismaClientOrTransaction = prisma, - private deliverEvents = true - ) { + constructor(prismaClient: PrismaClientOrTransaction = prisma, private deliverEvents = true) { this.#prismaClient = prismaClient; } @@ -41,13 +38,19 @@ export class IngestSendEvent { this.#prismaClient, async (tx) => { const externalAccount = options?.accountId - ? await tx.externalAccount.findUniqueOrThrow({ + ? await tx.externalAccount.upsert({ where: { environmentId_identifier: { environmentId: environment.id, identifier: options.accountId, }, }, + create: { + environmentId: environment.id, + organizationId: environment.organizationId, + identifier: options.accountId, + }, + update: {}, }) : undefined; diff --git a/apps/webapp/app/services/jobs/registerJob.server.ts b/apps/webapp/app/services/jobs/registerJob.server.ts index c66a6e1572..401c69c8aa 100644 --- a/apps/webapp/app/services/jobs/registerJob.server.ts +++ b/apps/webapp/app/services/jobs/registerJob.server.ts @@ -4,7 +4,14 @@ import { SCHEDULED_EVENT, TriggerMetadata, } from "@trigger.dev/core"; -import type { Endpoint, Integration, Job, JobIntegration, JobVersion } from "@trigger.dev/database"; +import type { + Endpoint, + Integration, + Job, + JobIntegration, + JobIntegrationPayload, + JobVersion, +} from "@trigger.dev/database"; import { DEFAULT_MAX_CONCURRENT_RUNS } from "~/consts"; import type { PrismaClient } from "~/db.server"; import { prisma } from "~/db.server"; @@ -62,83 +69,7 @@ export class RegisterJobService { }); if (!integration) { - if (jobIntegration.authSource === "LOCAL") { - integration = await this.#prismaClient.integration.upsert({ - where: { - organizationId_slug: { - organizationId: environment.organizationId, - slug: jobIntegration.id, - }, - }, - create: { - slug: jobIntegration.id, - title: jobIntegration.metadata.name, - authSource: "LOCAL", - connectionType: "DEVELOPER", - organization: { - connect: { - id: environment.organizationId, - }, - }, - definition: { - connectOrCreate: { - where: { - id: jobIntegration.metadata.id, - }, - create: { - id: jobIntegration.metadata.id, - name: jobIntegration.metadata.name, - instructions: jobIntegration.metadata.instructions, - }, - }, - }, - }, - update: { - title: jobIntegration.metadata.name, - authSource: "LOCAL", - connectionType: "DEVELOPER", - definition: { - connectOrCreate: { - where: { - id: jobIntegration.metadata.id, - }, - create: { - id: jobIntegration.metadata.id, - name: jobIntegration.metadata.name, - instructions: jobIntegration.metadata.instructions, - }, - }, - }, - }, - }); - } else { - integration = await this.#prismaClient.integration.create({ - data: { - slug: jobIntegration.id, - title: jobIntegration.id, - authSource: "HOSTED", - setupStatus: "MISSING_FIELDS", - connectionType: "DEVELOPER", - organization: { - connect: { - id: environment.organizationId, - }, - }, - definition: { - connectOrCreate: { - where: { - id: jobIntegration.metadata.id, - }, - create: { - id: jobIntegration.metadata.id, - name: jobIntegration.metadata.name, - instructions: jobIntegration.metadata.instructions, - }, - }, - }, - }, - }); - } + integration = await this.#upsertIntegrationForJobIntegration(environment, jobIntegration); } integrations.set(jobIntegration.id, integration); @@ -472,6 +403,7 @@ export class RegisterJobService { key: job.id, dispatcher: eventDispatcher, schedule: trigger.schedule, + organizationId: job.organizationId, }); break; @@ -479,6 +411,145 @@ export class RegisterJobService { } } + async #upsertIntegrationForJobIntegration( + environment: AuthenticatedEnvironment, + jobIntegration: IntegrationConfig + ): Promise { + switch (jobIntegration.authSource) { + case "LOCAL": { + return await this.#prismaClient.integration.upsert({ + where: { + organizationId_slug: { + organizationId: environment.organizationId, + slug: jobIntegration.id, + }, + }, + create: { + slug: jobIntegration.id, + title: jobIntegration.metadata.name, + authSource: "LOCAL", + connectionType: "DEVELOPER", + organization: { + connect: { + id: environment.organizationId, + }, + }, + definition: { + connectOrCreate: { + where: { + id: jobIntegration.metadata.id, + }, + create: { + id: jobIntegration.metadata.id, + name: jobIntegration.metadata.name, + instructions: jobIntegration.metadata.instructions, + }, + }, + }, + }, + update: { + title: jobIntegration.metadata.name, + authSource: "LOCAL", + connectionType: "DEVELOPER", + definition: { + connectOrCreate: { + where: { + id: jobIntegration.metadata.id, + }, + create: { + id: jobIntegration.metadata.id, + name: jobIntegration.metadata.name, + instructions: jobIntegration.metadata.instructions, + }, + }, + }, + }, + }); + } + case "HOSTED": { + return await this.#prismaClient.integration.create({ + data: { + slug: jobIntegration.id, + title: jobIntegration.id, + authSource: "HOSTED", + setupStatus: "MISSING_FIELDS", + connectionType: "DEVELOPER", + organization: { + connect: { + id: environment.organizationId, + }, + }, + definition: { + connectOrCreate: { + where: { + id: jobIntegration.metadata.id, + }, + create: { + id: jobIntegration.metadata.id, + name: jobIntegration.metadata.name, + instructions: jobIntegration.metadata.instructions, + }, + }, + }, + }, + }); + } + case "RESOLVER": { + return await this.#prismaClient.integration.upsert({ + where: { + organizationId_slug: { + organizationId: environment.organizationId, + slug: jobIntegration.id, + }, + }, + create: { + slug: jobIntegration.id, + title: jobIntegration.metadata.name, + authSource: "RESOLVER", + connectionType: "EXTERNAL", + organization: { + connect: { + id: environment.organizationId, + }, + }, + definition: { + connectOrCreate: { + where: { + id: jobIntegration.metadata.id, + }, + create: { + id: jobIntegration.metadata.id, + name: jobIntegration.metadata.name, + instructions: jobIntegration.metadata.instructions, + }, + }, + }, + }, + update: { + title: jobIntegration.metadata.name, + authSource: "RESOLVER", + connectionType: "EXTERNAL", + definition: { + connectOrCreate: { + where: { + id: jobIntegration.metadata.id, + }, + create: { + id: jobIntegration.metadata.id, + name: jobIntegration.metadata.name, + instructions: jobIntegration.metadata.instructions, + }, + }, + }, + }, + }); + } + default: { + assertExhaustive(jobIntegration.authSource); + } + } + } + async #upsertJobIntegration( job: Job & { integrations: Array; @@ -572,3 +643,7 @@ export class RegisterJobService { }); } } + +function assertExhaustive(x: never): never { + throw new Error("Unexpected object: " + x); +} diff --git a/apps/webapp/app/services/jobs/testJob.server.ts b/apps/webapp/app/services/jobs/testJob.server.ts index 2b154cc0e6..ab95d10856 100644 --- a/apps/webapp/app/services/jobs/testJob.server.ts +++ b/apps/webapp/app/services/jobs/testJob.server.ts @@ -13,10 +13,12 @@ export class TestJobService { environmentId, versionId, payload, + accountId, }: { environmentId: string; versionId: string; - payload: any; + payload?: any; + accountId?: string; }) { return await $transaction( this.#prismaClient, @@ -41,10 +43,27 @@ export class TestJobService { }, }); + const externalAccount = accountId + ? await tx.externalAccount.upsert({ + where: { + environmentId_identifier: { + environmentId: environment.id, + identifier: accountId, + }, + }, + create: { + environmentId: environment.id, + organizationId: environment.organizationId, + identifier: accountId, + }, + update: {}, + }) + : undefined; + const event = EventSpecificationSchema.parse(version.eventSpecification); const eventName = Array.isArray(event.name) ? event.name[0] : event.name; - const eventLog = await this.#prismaClient.eventRecord.create({ + const eventLog = await tx.eventRecord.create({ data: { organization: { connect: { @@ -61,6 +80,13 @@ export class TestJobService { id: environment.id, }, }, + externalAccount: externalAccount + ? { + connect: { + id: externalAccount.id, + }, + } + : undefined, eventId: `test:${eventName}:${new Date().getTime()}`, name: eventName, timestamp: new Date(), diff --git a/apps/webapp/app/services/runs/continueRun.server.ts b/apps/webapp/app/services/runs/continueRun.server.ts index 00dad4ad22..644cc2e0e9 100644 --- a/apps/webapp/app/services/runs/continueRun.server.ts +++ b/apps/webapp/app/services/runs/continueRun.server.ts @@ -2,7 +2,7 @@ import { RuntimeEnvironmentType } from "@trigger.dev/database"; import { $transaction, Prisma, PrismaClient, prisma } from "~/db.server"; import { enqueueRunExecutionV2 } from "~/models/jobRunExecution.server"; -const RESUMABLE_STATUSES = ["FAILURE", "TIMED_OUT", "ABORTED", "CANCELED"]; +const RESUMABLE_STATUSES = ["FAILURE", "TIMED_OUT", "UNRESOLVED_AUTH", "ABORTED", "CANCELED"]; export class ContinueRunService { #prismaClient: PrismaClient; diff --git a/apps/webapp/app/services/runs/performRunExecutionV1.server.ts b/apps/webapp/app/services/runs/performRunExecutionV1.server.ts index c886427db9..016d71477f 100644 --- a/apps/webapp/app/services/runs/performRunExecutionV1.server.ts +++ b/apps/webapp/app/services/runs/performRunExecutionV1.server.ts @@ -4,6 +4,7 @@ import { RunJobResumeWithTask, RunJobRetryWithTask, RunJobSuccess, + RunJobUnresolvedAuthError, RunSourceContextSchema, } from "@trigger.dev/core"; import type { Task } from "@trigger.dev/database"; @@ -342,6 +343,11 @@ export class PerformRunExecutionV1Service { await this.#cancelExecution(execution); break; } + case "UNRESOLVED_AUTH_ERROR": { + await this.#failRunWithUnresolvedAuthError(execution, safeBody.data); + + break; + } default: { const _exhaustiveCheck: never = status; throw new Error(`Non-exhaustive match for value: ${status}`); @@ -438,6 +444,15 @@ export class PerformRunExecutionV1Service { }); } + async #failRunWithUnresolvedAuthError( + execution: FoundRunExecution, + data: RunJobUnresolvedAuthError + ) { + return await $transaction(this.#prismaClient, async (tx) => { + await this.#failRunExecution(tx, execution, data.issues, "UNRESOLVED_AUTH"); + }); + } + async #retryRunWithTask(execution: FoundRunExecution, data: RunJobRetryWithTask) { const { run } = execution; @@ -557,7 +572,7 @@ export class PerformRunExecutionV1Service { prisma: PrismaClientOrTransaction, execution: FoundRunExecution, output: Record, - status: "FAILURE" | "ABORTED" = "FAILURE" + status: "FAILURE" | "ABORTED" | "UNRESOLVED_AUTH" = "FAILURE" ): Promise { const { run } = execution; diff --git a/apps/webapp/app/services/runs/performRunExecutionV2.server.ts b/apps/webapp/app/services/runs/performRunExecutionV2.server.ts index 763318153a..7d5f979c2c 100644 --- a/apps/webapp/app/services/runs/performRunExecutionV2.server.ts +++ b/apps/webapp/app/services/runs/performRunExecutionV2.server.ts @@ -4,6 +4,7 @@ import { RunJobResumeWithTask, RunJobRetryWithTask, RunJobSuccess, + RunJobUnresolvedAuthError, RunSourceContextSchema, } from "@trigger.dev/core"; import { RuntimeEnvironmentType, type Task } from "@trigger.dev/database"; @@ -354,6 +355,11 @@ export class PerformRunExecutionV2Service { await this.#cancelExecution(run); break; } + case "UNRESOLVED_AUTH_ERROR": { + await this.#failRunWithUnresolvedAuthError(run, safeBody.data, durationInMs); + + break; + } default: { const _exhaustiveCheck: never = status; throw new Error(`Non-exhaustive match for value: ${status}`); @@ -432,6 +438,23 @@ export class PerformRunExecutionV2Service { }); } + async #failRunWithUnresolvedAuthError( + execution: FoundRun, + data: RunJobUnresolvedAuthError, + durationInMs: number + ) { + return await $transaction(this.#prismaClient, async (tx) => { + await this.#failRunExecution( + tx, + "EXECUTE_JOB", + execution, + data.issues, + "UNRESOLVED_AUTH", + durationInMs + ); + }); + } + async #retryRunWithTask( run: FoundRun, data: RunJobRetryWithTask, @@ -556,7 +579,7 @@ export class PerformRunExecutionV2Service { reason: "EXECUTE_JOB" | "PREPROCESS", run: FoundRun, output: Record, - status: "FAILURE" | "ABORTED" | "TIMED_OUT" = "FAILURE", + status: "FAILURE" | "ABORTED" | "TIMED_OUT" | "UNRESOLVED_AUTH" = "FAILURE", durationInMs: number = 0 ): Promise { await $transaction(prisma, async (tx) => { diff --git a/apps/webapp/app/services/runs/reRun.server.ts b/apps/webapp/app/services/runs/reRun.server.ts index 8c1b8449ed..9a604c16b1 100644 --- a/apps/webapp/app/services/runs/reRun.server.ts +++ b/apps/webapp/app/services/runs/reRun.server.ts @@ -20,6 +20,7 @@ export class ReRunService { version: true, job: true, event: true, + externalAccount: true, }, where: { id: runId, @@ -43,6 +44,13 @@ export class ReRunService { id: existingRun.environment.id, }, }, + externalAccount: existingRun.externalAccount + ? { + connect: { + id: existingRun.externalAccount.id, + }, + } + : undefined, eventId: `${existingRun.event.eventId}:retry:${new Date().getTime()}`, name: existingRun.event.name, timestamp: new Date(), diff --git a/apps/webapp/app/services/runs/startRun.server.ts b/apps/webapp/app/services/runs/startRun.server.ts index 818e310c54..0773eda6cb 100644 --- a/apps/webapp/app/services/runs/startRun.server.ts +++ b/apps/webapp/app/services/runs/startRun.server.ts @@ -50,11 +50,11 @@ export class StartRunService { integrationId: runConnection.integration.id, authSource: "HOSTED", } as const) - : runConnection.result === "resolvedLocal" + : runConnection.result === "resolvedLocal" || runConnection.result === "resolvedResolver" ? ({ key, integrationId: runConnection.integration.id, - authSource: "LOCAL", + authSource: runConnection.result === "resolvedLocal" ? "LOCAL" : "RESOLVER", } as const) : undefined ) @@ -173,6 +173,7 @@ async function createRunConnections(tx: PrismaClientOrTransaction, run: FoundRun integration: Integration; } | { result: "resolvedLocal"; integration: Integration } + | { result: "resolvedResolver"; integration: Integration } | { result: "missing"; connectionType: ConnectionType; @@ -190,6 +191,11 @@ async function createRunConnections(tx: PrismaClientOrTransaction, run: FoundRun result: "resolvedLocal", integration: jobIntegration.integration, }; + } else if (jobIntegration.integration.authSource === "RESOLVER") { + acc[jobIntegration.key] = { + result: "resolvedResolver", + integration: jobIntegration.integration, + }; } else { const connection = run.externalAccountId ? await tx.integrationConnection.findFirst({ diff --git a/apps/webapp/app/services/schedules/registerSchedule.server.ts b/apps/webapp/app/services/schedules/registerSchedule.server.ts index bda3daf894..950942f05b 100644 --- a/apps/webapp/app/services/schedules/registerSchedule.server.ts +++ b/apps/webapp/app/services/schedules/registerSchedule.server.ts @@ -59,6 +59,7 @@ export class RegisterScheduleService { schedule: payload, accountId: payload.accountId, dynamicTrigger, + organizationId: environment.organizationId, }); return registration; diff --git a/apps/webapp/app/services/schedules/registerScheduleSource.server.ts b/apps/webapp/app/services/schedules/registerScheduleSource.server.ts index f27267b855..1aa58fd82d 100644 --- a/apps/webapp/app/services/schedules/registerScheduleSource.server.ts +++ b/apps/webapp/app/services/schedules/registerScheduleSource.server.ts @@ -16,24 +16,32 @@ export class RegisterScheduleSourceService { schedule, accountId, dynamicTrigger, + organizationId, }: { key: string; dispatcher: EventDispatcher; schedule: ScheduleMetadata; accountId?: string; dynamicTrigger?: DynamicTrigger; + organizationId: string; }) { const validatedSchedule = validateSchedule(schedule); return await $transaction(this.#prismaClient, async (tx) => { const externalAccount = accountId - ? await tx.externalAccount.findUniqueOrThrow({ + ? await tx.externalAccount.upsert({ where: { environmentId_identifier: { environmentId: dispatcher.environmentId, identifier: accountId, }, }, + create: { + environmentId: dispatcher.environmentId, + organizationId: organizationId, + identifier: accountId, + }, + update: {}, }) : undefined; diff --git a/apps/webapp/app/services/sources/registerSourceV1.server.ts b/apps/webapp/app/services/sources/registerSourceV1.server.ts index 2be96c6d62..828d8a0c24 100644 --- a/apps/webapp/app/services/sources/registerSourceV1.server.ts +++ b/apps/webapp/app/services/sources/registerSourceV1.server.ts @@ -71,13 +71,19 @@ export class RegisterSourceServiceV1 { } const externalAccount = accountId - ? await tx.externalAccount.findUniqueOrThrow({ + ? await tx.externalAccount.upsert({ where: { environmentId_identifier: { environmentId: environment.id, identifier: accountId, }, }, + create: { + environmentId: environment.id, + organizationId: environment.organizationId, + identifier: accountId, + }, + update: {}, }) : undefined; diff --git a/apps/webapp/app/services/sources/registerSourceV2.server.ts b/apps/webapp/app/services/sources/registerSourceV2.server.ts index 837793080d..4b6bea2527 100644 --- a/apps/webapp/app/services/sources/registerSourceV2.server.ts +++ b/apps/webapp/app/services/sources/registerSourceV2.server.ts @@ -71,13 +71,19 @@ export class RegisterSourceServiceV2 { } const externalAccount = accountId - ? await tx.externalAccount.findUniqueOrThrow({ + ? await tx.externalAccount.upsert({ where: { environmentId_identifier: { environmentId: environment.id, identifier: accountId, }, }, + create: { + environmentId: environment.id, + organizationId: environment.organizationId, + identifier: accountId, + }, + update: {}, }) : undefined; diff --git a/docs/_snippets/installs/slack.mdx b/docs/_snippets/installs/slack.mdx new file mode 100644 index 0000000000..1c6a647af5 --- /dev/null +++ b/docs/_snippets/installs/slack.mdx @@ -0,0 +1,15 @@ + + +```bash npm +npm install @trigger.dev/slack@latest +``` + +```bash pnpm +pnpm install @trigger.dev/slack@latest +``` + +```bash yarn +yarn add @trigger.dev/slack@latest +``` + + diff --git a/docs/documentation/guides/using-integrations-apikeys.mdx b/docs/documentation/guides/using-integrations-apikeys.mdx index 330aee59b3..512dcc9e83 100644 --- a/docs/documentation/guides/using-integrations-apikeys.mdx +++ b/docs/documentation/guides/using-integrations-apikeys.mdx @@ -1,6 +1,7 @@ --- title: "API Keys and Personal Access Tokens" description: "Lots of APIs use API Keys or Personal Access Tokens to authenticate. This guide will show you how to use them." +sidebarTitle: "API Keys and PATs" --- ## 1. Create an Integration client diff --git a/docs/documentation/guides/using-integrations-byo-auth.mdx b/docs/documentation/guides/using-integrations-byo-auth.mdx new file mode 100644 index 0000000000..499ff9d4ff --- /dev/null +++ b/docs/documentation/guides/using-integrations-byo-auth.mdx @@ -0,0 +1,381 @@ +--- +title: "Bring Your Own Auth" +description: "Use Auth Resolvers to provide custom authentication credentials" +--- + +In the previous guides we've covered how you can use our integrations with [API Keys](/documentation/guides/using-integrations-apikeys) or [OAuth](/documentation/guides/using-integrations-oauth), but in both cases those authentication credentials belong **to you** the developer. + +If you want to use our integrations using auth credentials of **your users** you can use an Auth Resolver which allows you to implement your own custom auth resolving using a third-party service like [Clerk](https://clerk.com/) or [Nango](https://www.nango.dev/) + +In this guide we'll demonstrate how to use Clerk.com's [Social Connections](https://clerk.com/docs/authentication/social-connections/oauth) to allow you to make requests with your user's Slack credentials and the official Trigger.dev [Slack integration](/integrations/apis/slack) + + + We won't be covering how to setup Clerk.com and their Social Connections to get the auth. This + guide assumes you already have all that setup. + + +## 1. Install the Slack integration package + + + +## 2. Create a Slack integration + +```ts slack.ts +import { Slack } from "@trigger.dev/slack"; + +const byoSlack = new Slack({ + id: "byo-slack", +}); +``` + +## 3. Define an Auth Resolver + +Using your `TriggerClient` instance, define a new Auth Resolver for the `slack` integration: + +```ts slack.ts +import { Slack } from "@trigger.dev/slack"; +// Import your TriggerClient instance. This is merely an example of how you could do it +import { client } from "./trigger"; + +const byoSlack = new Slack({ + id: "byo-slack", +}); + +client.defineAuthResolver(byoSlack, async (ctx) => { + // this is where we'll use the clerk backend SDK +}); +``` + +## 4. Define a job + +Before we finish the Slack Auth Resolver, let's create an example job that uses the Slack integration: + +```ts slack.ts +import { z } from "zod"; + +client.defineJob({ + id: "post-a-message", + name: "Post a Slack Message", + version: "1.0.0", + trigger: eventTrigger({ + name: "post.message", + schema: z.object({ + text: z.string(), + channel: z.string(), + }), + }), + integrations: { + slack: byoSlack, + }, + run: async (payload, io, ctx) => { + await io.slack.postMessage("πŸ’¬", { + channel: payload.channel, + text: payload.text, + }); + }, +}); +``` + +As you can see above, we're passing the `byoSlack` integration into the Job and using it by calling `io.slack.postMessage`. + +## 5. Install the Clerk backend SDK + + + +```bash npm +npm install @clerk/backend@latest +``` + +```bash pnpm +pnpm install @clerk/backend@latest +``` + +```bash yarn +yarn add @clerk/backend@latest +``` + + + +## 6. Import and initialize the Clerk SDK + +```ts slack.ts +import { Clerk } from "@clerk/backend"; + +// Clerk is not a class so the omission of `new Clerk` here is on purpose +const clerk = Clerk({ apiKey: process.env.CLERK_API_KEY }); +``` + +## 7. Implement the Auth Resolver + +Now we'll implement the Auth Resolver to provide authentication credentials saved in Clerk.com for Job runs, depending on the account ID of the run. + +```ts slack.ts +client.defineAuthResolver(slack, async (ctx) => { + if (!ctx.account?.id) { + return; + } + + const tokens = await clerk.users.getUserOauthAccessToken(ctx.account.id, "oauth_slack"); + + if (tokens.length === 0) { + throw new Error(`Could not find Slack auth for account ${ctx.account.id}`); + } + + return { + type: "oauth", + token: tokens[0].token, + }; +}); +``` + +The first parameter to the Auth Resolver callback is the run context ([reference docs](/sdk/context)), which optionally contains an associated account (more on this below). + + + If the Auth Resolver returns undefined or throws an Error, any Job Run that uses the `byoSlack` + integration will fail with an "Unresolved auth" error. + + +## Bonus: Multiple Slack integration clients + +If you want to also use Slack with your own authentication credentials, you can always create _another_ slack integration with a different `id`. + +```ts slack.ts +const ourSlack = new Slack({ id: "our-slack" }); + +client.defineJob({ + id: "post-a-message", + name: "Post a Slack Message", + version: "1.0.0", + trigger: eventTrigger({ + name: "post.message", + schema: z.object({ + text: z.string(), + channel: z.string(), + }), + }), + integrations: { + byoSlack: byoSlack, + ourSlack: ourSlack, + }, + run: async (payload, io, ctx) => { + await io.byoSlack.postMessage("πŸ’¬", { + channel: payload.channel, + text: payload.text, + }); + + await io.ourSlack.postMessage("πŸ“’", { + channel: "C01234567", + text: `We just sent the following message to ${ctx.account?.id}: ${payload.text}`, + }); + }, +}); +``` + +# How to Trigger Job runs with an Account ID + +Now that we have a working Clerk.com Auth Resolver for Slack we're ready to start triggering jobs with an associated account ID. The way you do this is different depending on the Trigger type. + +## Event Triggers + +Jobs that have [Event Triggers](/documentation/concepts/triggers/events) can be run with an associated account by providing an `accountId` when calling `sendEvent`: + +```ts backend.ts +// This is an instance of `TriggerClient` +await client.sendEvent( + { + name: "post.created", + payload: { id: "post_123" }, + }, + { + accountId: "user_123", + } +); +``` + +The `accountId` value is completely arbitrary and doesn't map to anything inside Trigger.dev, but generally it should be a unique ID that can be used to lookup Auth credentials in your Auth Resolvers. + +You can also send events with an associated account ID from the run of another job: + +```ts anotherJob.ts +client.defineJob({ + id: "event-1", + name: "Run when the foo.bar event happens", + version: "0.0.1", + trigger: eventTrigger({ + name: "foo.bar", + }), + run: async (payload, io, ctx) => { + //send an event using `io` + await io.sendEvent( + "🎫", + { + name: "post.created", + payload: { id: "post_123" }, + }, + { + accountId: "user_123", + } + ); + }, +}); +``` + +When a run is triggered with an associated account ID, you'll see the account ID in the run dashboard: + +![Event Trigger with Account ID](/images/byo-auth/run-dashboard-account-id.png) + +## Scheduled Triggers + +Running a job with an associated account ID that is triggered by a [Scheduled Trigger](/documentation/concepts/triggers/scheduled) works a bit differently than Event Triggers as you'll need to convert your normal `intervalTrigger` or `cronTrigger` into using a [Dynamic Schedule](/documentation/concepts/triggers/dynamic#dynamicschedule) and then registering schedules with an associated account ID. + +### 1. Convert a job to using a Dynamic Schedule + +First let's convert the following job from an `intervalTrigger` to a Dynamic Schedule: + +```ts dynamicSchedule.ts +// Before +client.defineJob({ + id: "scheduled-job", + name: "Scheduled Job", + version: "1.0.0", + trigger: intervalTrigger({ + seconds: 60, + }), + run: async (payload, io, ctx) => { + await io.logger.info("This runs every 60 seconds"); + }, +}); + +// After +export const dynamicInterval = client.defineDynamicSchedule({ id: "my-schedule" }); + +client.defineJob({ + id: "scheduled-job", + name: "Scheduled Job", + version: "1.0.0", + trigger: dynamicInterval, + run: async (payload, io, ctx) => { + await io.logger.info("This runs dynamic schedules"); + }, +}); +``` + +As you can see above, we've dropped the specific interval when defining the trigger as that will now be specific when registering schedules. + +### 2. Register a schedule + +You can now use the `dynamicInterval` instance to register a schedule, which will trigger the `scheduled-job`: + +```ts backend.ts +import { dynamicInterval } from "./dynamicSchedule"; + +// Somewhere in your backend +await dynamicInterval.register("schedule_123", { + type: "interval", + options: { seconds: 60 }, + accountId: "user_123", // associate runs triggered by this schedule with user_123 +}); +``` + +As you can see above, we've associated this registered schedule with an `accountId`, so any runs triggered by this schedule will be associated with `"user_123"` + +The first parameter above `"schedule_123"` is the Schedule ID and can be used to unregister the schedule at a later point: + +```ts backend.ts +import { dynamicInterval } from "./dynamicSchedule"; + +// Somewhere in your backend +await dynamicInterval.unregister("schedule_123"); +``` + +You can also use register/unregister inside another job run and it will automatically create a [Task](/documentation/concepts/tasks): + +```ts otherJob.ts +import { dynamicInterval } from "./dynamicSchedule"; + +client.defineJob({ + id: "event-1", + name: "Run when the foo.bar event happens", + version: "0.0.1", + trigger: eventTrigger({ + name: "foo.bar", + }), + run: async (payload, io, ctx) => { + await dynamicInterval.register("schedule_123", { + type: "interval", + options: { seconds: 60 }, + accountId: "user_123", // associate runs triggered by this schedule with user_123 + }); + }, +}); +``` + +Will produce the following run dashboard: + +![Dynamic Schedule Task](/images/byo-auth/dynamic-schedule-task.png) + + + If you will only ever add a single schedule for a user on a given Dynamic Schedule, you can just + use the accountId as the Schedule ID + +```ts +const accountId = "user_123"; +await dynamicInterval.register(accountId, { + type: "interval", + options: { seconds: 60 }, + accountId, +}); +``` + + + +## Webhook Triggers + +Support for Webhook triggers (i.e. Integration Triggers) is coming soon. + +# Testing jobs with Account ID + +If a job uses any integrations with an Auth Resolver that requires an account ID, you'll need to provide an account ID when testing the job: + +![Test Job with Account ID](/images/byo-auth/run-test-account-id.png) + +# Auth Resolver reference + +The Auth Resolver callback has the following signature: + +```ts +type TriggerAuthResolver = ( + ctx: TriggerContext, + integration: TriggerIntegration +) => Promise; + +type AuthResolverResult = { + type: "apiKey" | "oauth"; + token: string; + additionalFields?: Record; +}; +``` + +The `ctx` parameter is the [TriggerContext](/sdk/context) for the run and the `integration` parameter is the [TriggerIntegration](/sdk/integrations) instance that the Auth Resolver is being called for. You can use the `integration` parameter to check the `id` of the integration to determine which integration the Auth Resolver is being called for: + +```ts +client.defineAuthResolver(slack, async (ctx, integration) => { + if (integration.id === "byo-slack") { + // do something + } +}); +``` + +You can also return `additionalFields` in the Auth Resolver result which will be passed to the integration when making requests. This is useful if you need to provide additional fields to the integration that are not part of the standard integration options. + +```ts +client.defineAuthResolver(shopify, async (ctx, integration) => { + return { + type: "apiKey", + token: "my-api-key", + additionalFields: { + shop: "my-shop-name", + }, + }; +}); +``` diff --git a/docs/documentation/guides/using-integrations.mdx b/docs/documentation/guides/using-integrations.mdx index b8af49a61f..7c7a260f70 100644 --- a/docs/documentation/guides/using-integrations.mdx +++ b/docs/documentation/guides/using-integrations.mdx @@ -1,12 +1,12 @@ --- -title: "Using Integrations" -description: "How to use Integrations" +title: "Integrations Overview" +description: "How to use Trigger.dev Integrations" +sidebarTitle: "Overview" --- - You can use any API in your Jobs by using existing Node.js SDKs or HTTP - requests. Integrations just make it much easier especially when you want to - use OAuth. And you get great logging. + You can use any API in your Jobs by using existing Node.js SDKs or HTTP requests. Integrations + just make it much easier especially when you want to use OAuth. And you get great logging. [Integrations](/documentation/concepts/integrations) allow you to quickly use APIs, including webhooks and Tasks. @@ -121,7 +121,7 @@ import { Stripe } from "@trigger.dev/stripe"; const stripe = new Stripe({ id: "stripe", - apiKey: process.env.STRIPE_SECRET_KEY! + apiKey: process.env.STRIPE_SECRET_KEY!, }); async function createCustomer() { @@ -161,7 +161,6 @@ client.defineJob({ Behind the scenes, our `@trigger.dev/github` integration will create a webhook on your repository that will call our API when a new push event is received. We will then start your Job with the payload from the push event. - If you are just using an integration to trigger a job but not using - authenticated tasks inside the job run, there is no need to pass the - integration in the job `integrations` option. + If you are just using an integration to trigger a job but not using authenticated tasks inside the + job run, there is no need to pass the integration in the job `integrations` option. diff --git a/docs/images/byo-auth/dynamic-schedule-task.png b/docs/images/byo-auth/dynamic-schedule-task.png new file mode 100644 index 0000000000000000000000000000000000000000..6fbbffdce2706c82460389d6f806aa7a62c92b61 GIT binary patch literal 297872 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�as-CHnR57a&|2?O#kxrj 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�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

(_VgUFM|I1 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 Nt{eUF@tVWq{{u@6yx;%; literal 0 HcmV?d00001 diff --git a/docs/images/byo-auth/run-test-account-id.png b/docs/images/byo-auth/run-test-account-id.png new file mode 100644 index 0000000000000000000000000000000000000000..8120e90746bb031943569a26d27b0b25c6c02253 GIT binary patch literal 98181 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

}l(laV1#swtI&diE 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 literal 0 HcmV?d00001 diff --git a/docs/mint.json b/docs/mint.json index f8f2b7cf85..1a28926553 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -151,7 +151,6 @@ "documentation/guides/manual/fastify" ] }, - "documentation/guides/running-jobs", "documentation/guides/jobs/managing", { @@ -168,7 +167,8 @@ "pages": [ "documentation/guides/using-integrations", "documentation/guides/using-integrations-apikeys", - "documentation/guides/using-integrations-oauth" + "documentation/guides/using-integrations-oauth", + "documentation/guides/using-integrations-byo-auth" ] }, { @@ -310,7 +310,10 @@ "sdk/dynamictrigger/constructor", { "group": "Instance methods", - "pages": ["sdk/dynamictrigger/register", "sdk/dynamictrigger/unregister"] + "pages": [ + "sdk/dynamictrigger/register", + "sdk/dynamictrigger/unregister" + ] } ] }, @@ -321,7 +324,10 @@ "sdk/dynamicschedule/constructor", { "group": "Instance methods", - "pages": ["sdk/dynamicschedule/register", "sdk/dynamicschedule/unregister"] + "pages": [ + "sdk/dynamicschedule/register", + "sdk/dynamicschedule/unregister" + ] } ] }, @@ -342,7 +348,9 @@ }, { "group": "Overview", - "pages": ["examples/introduction"] + "pages": [ + "examples/introduction" + ] } ], "footerSocials": { @@ -355,4 +363,4 @@ "apiKey": "phc_hwYmedO564b3Ik8nhA4Csrb5SueY0EwFJWCbseGwWW" } } -} +} \ No newline at end of file diff --git a/integrations/airtable/src/base.ts b/integrations/airtable/src/base.ts index 821a56fced..b354bc136c 100644 --- a/integrations/airtable/src/base.ts +++ b/integrations/airtable/src/base.ts @@ -11,13 +11,10 @@ export type AirtableRecordsParams = TableParams<{}>; export type AirtableRecords = Records

; export class Base { - runTask: AirtableRunTask; - baseId: string; - - constructor(runTask: AirtableRunTask, baseId: string) { - this.runTask = runTask; - this.baseId = baseId; - } + constructor( + private runTask: AirtableRunTask, + public baseId: string + ) {} table(tableName: string) { return new Table(this.runTask, this.baseId, tableName); diff --git a/integrations/airtable/src/index.ts b/integrations/airtable/src/index.ts index c4443d7013..3391e4c2b6 100644 --- a/integrations/airtable/src/index.ts +++ b/integrations/airtable/src/index.ts @@ -1,6 +1,7 @@ import { Prettify } from "@trigger.dev/integration-kit"; import { Json, + retry, type ConnectionAuth, type IO, type IOTask, @@ -8,18 +9,10 @@ import { type RunTaskErrorCallback, type RunTaskOptions, type TriggerIntegration, - retry, } from "@trigger.dev/sdk"; import AirtableSDK from "airtable"; import { Base } from "./base"; -import * as events from "./events"; -import { - WebhookChangeType, - WebhookDataType, - Webhooks, - createTrigger, - createWebhookEventSource, -} from "./webhooks"; +import { Webhooks, createWebhookEventSource } from "./webhooks"; export * from "./types"; @@ -33,9 +26,13 @@ export type AirtableIntegrationOptions = { export type AirtableRunTask = InstanceType["runTask"]; export class Airtable implements TriggerIntegration { + // @internal private _options: AirtableIntegrationOptions; + // @internal private _client?: AirtableSDK; + // @internal private _io?: IO; + // @internal private _connectionKey?: string; constructor(options: Prettify) { @@ -46,6 +43,7 @@ export class Airtable implements TriggerIntegration { this._options = options; } + // @internal get authSource() { return this._options.token ? ("LOCAL" as const) : ("HOSTED" as const); } @@ -54,6 +52,7 @@ export class Airtable implements TriggerIntegration { return this._options.id; } + // @internal get metadata() { return { id: "airtable", name: "Airtable" }; } @@ -62,6 +61,7 @@ export class Airtable implements TriggerIntegration { return createWebhookEventSource(this); } + // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const airtable = new Airtable(this._options); airtable._io = io; diff --git a/integrations/airtable/tsconfig.json b/integrations/airtable/tsconfig.json index 9616ac98a0..d1b7924087 100644 --- a/integrations/airtable/tsconfig.json +++ b/integrations/airtable/tsconfig.json @@ -11,7 +11,8 @@ }, "declaration": false, "declarationMap": false, - "baseUrl": "." + "baseUrl": ".", + "stripInternal": true }, "exclude": ["node_modules"] } diff --git a/integrations/github/src/compound.ts b/integrations/github/src/compound.ts index 1e2c8f8a5e..ae8c85f4c3 100644 --- a/integrations/github/src/compound.ts +++ b/integrations/github/src/compound.ts @@ -5,15 +5,11 @@ import { Issues } from "./issues"; import { ReactionContent, Reactions } from "./reactions"; export class Compound { - runTask: GitHubRunTask; - issues: Issues; - reactions: Reactions; - - constructor(runTask: GitHubRunTask, issues: Issues, reactions: Reactions) { - this.runTask = runTask; - this.issues = issues; - this.reactions = reactions; - } + constructor( + private runTask: GitHubRunTask, + public issues: Issues, + public reactions: Reactions + ) {} createIssueCommentWithReaction( key: IntegrationTaskKey, diff --git a/integrations/github/src/git.ts b/integrations/github/src/git.ts index dda8837cd8..34bfd95404 100644 --- a/integrations/github/src/git.ts +++ b/integrations/github/src/git.ts @@ -34,11 +34,7 @@ type TreeType = { }; export class Git { - runTask: GitHubRunTask; - - constructor(runTask: GitHubRunTask) { - this.runTask = runTask; - } + constructor(private runTask: GitHubRunTask) {} createBlob( key: IntegrationTaskKey, diff --git a/integrations/github/src/index.ts b/integrations/github/src/index.ts index 57b8d4a66d..525d8c025c 100644 --- a/integrations/github/src/index.ts +++ b/integrations/github/src/index.ts @@ -68,9 +68,13 @@ export type GitHubReturnType Promise<{ data: K }>, K >; export class Github implements TriggerIntegration { + // @internal private _options: GithubIntegrationOptions; + // @internal private _client?: Octokit; + // @internal private _io?: IO; + // @internal private _connectionKey?: string; _repoSource: ReturnType; @@ -95,14 +99,17 @@ export class Github implements TriggerIntegration { return this.options.id; } + // @internal get metadata() { return { name: "GitHub", id: "github" }; } + // @internal get authSource() { return this._options.token ? ("LOCAL" as const) : ("HOSTED" as const); } + // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const github = new Github(this._options); github._io = io; diff --git a/integrations/github/src/issues.ts b/integrations/github/src/issues.ts index 5c4f343bef..80eea79556 100644 --- a/integrations/github/src/issues.ts +++ b/integrations/github/src/issues.ts @@ -6,11 +6,7 @@ import { issueProperties, repoProperties } from "./propertyHelpers"; type AddIssueLabels = GitHubReturnType; export class Issues { - runTask: GitHubRunTask; - - constructor(runTask: GitHubRunTask) { - this.runTask = runTask; - } + constructor(private runTask: GitHubRunTask) {} create( key: IntegrationTaskKey, diff --git a/integrations/github/src/orgs.ts b/integrations/github/src/orgs.ts index cd0dbedfe6..495aeb7b4e 100644 --- a/integrations/github/src/orgs.ts +++ b/integrations/github/src/orgs.ts @@ -3,11 +3,7 @@ import { Octokit } from "octokit"; import { GitHubReturnType, GitHubRunTask, onError } from "./index"; export class Orgs { - runTask: GitHubRunTask; - - constructor(runTask: GitHubRunTask) { - this.runTask = runTask; - } + constructor(private runTask: GitHubRunTask) {} updateWebhook( key: IntegrationTaskKey, diff --git a/integrations/github/src/reactions.ts b/integrations/github/src/reactions.ts index 84a6c31f88..e3b3c10d6c 100644 --- a/integrations/github/src/reactions.ts +++ b/integrations/github/src/reactions.ts @@ -15,11 +15,7 @@ export type ReactionContent = | "eyes"; export class Reactions { - runTask: GitHubRunTask; - - constructor(runTask: GitHubRunTask) { - this.runTask = runTask; - } + constructor(private runTask: GitHubRunTask) {} createForIssueComment( key: IntegrationTaskKey, diff --git a/integrations/github/src/repos.ts b/integrations/github/src/repos.ts index ef5b718692..50d5690853 100644 --- a/integrations/github/src/repos.ts +++ b/integrations/github/src/repos.ts @@ -1,15 +1,9 @@ -import { truncate } from "@trigger.dev/integration-kit"; -import { IntegrationTaskKey, Prettify, retry } from "@trigger.dev/sdk"; -import { GitHubReturnType, GitHubRunTask, onError } from "./index"; +import { IntegrationTaskKey } from "@trigger.dev/sdk"; import { Octokit } from "octokit"; -import { issueProperties, repoProperties } from "./propertyHelpers"; +import { GitHubReturnType, GitHubRunTask, onError } from "./index"; export class Repos { - runTask: GitHubRunTask; - - constructor(runTask: GitHubRunTask) { - this.runTask = runTask; - } + constructor(private runTask: GitHubRunTask) {} get( key: IntegrationTaskKey, diff --git a/integrations/github/src/sources.ts b/integrations/github/src/sources.ts index 1996f86259..a65a0a00e1 100644 --- a/integrations/github/src/sources.ts +++ b/integrations/github/src/sources.ts @@ -1,8 +1,7 @@ import { Webhooks } from "@octokit/webhooks"; -import { ExternalSource, TriggerIntegration, HandlerEvent } from "@trigger.dev/sdk"; +import { omit, safeJsonParse } from "@trigger.dev/integration-kit"; import type { Logger } from "@trigger.dev/sdk"; -import { safeJsonParse, omit } from "@trigger.dev/integration-kit"; -import { Octokit } from "octokit"; +import { ExternalSource, HandlerEvent } from "@trigger.dev/sdk"; import { z } from "zod"; import { Github } from "./index"; diff --git a/integrations/github/tsconfig.json b/integrations/github/tsconfig.json index 9616ac98a0..d1b7924087 100644 --- a/integrations/github/tsconfig.json +++ b/integrations/github/tsconfig.json @@ -11,7 +11,8 @@ }, "declaration": false, "declarationMap": false, - "baseUrl": "." + "baseUrl": ".", + "stripInternal": true }, "exclude": ["node_modules"] } diff --git a/integrations/openai/src/chat.ts b/integrations/openai/src/chat.ts index df647bcb3f..2cabd4c2a4 100644 --- a/integrations/openai/src/chat.ts +++ b/integrations/openai/src/chat.ts @@ -4,11 +4,7 @@ import { OpenAIRunTask } from "./index"; import { createTaskUsageProperties } from "./taskUtils"; export class Chat { - runTask: OpenAIRunTask; - - constructor(runTask: OpenAIRunTask) { - this.runTask = runTask; - } + constructor(private runTask: OpenAIRunTask) {} completions = { create: ( diff --git a/integrations/openai/src/index.ts b/integrations/openai/src/index.ts index 0da54a2f2b..bef0265173 100644 --- a/integrations/openai/src/index.ts +++ b/integrations/openai/src/index.ts @@ -23,9 +23,13 @@ import { FineTunes } from "./fineTunes"; export type OpenAIRunTask = InstanceType["runTask"]; export class OpenAI implements TriggerIntegration { + // @internal private _options: OpenAIIntegrationOptions; + // @internal private _client?: OpenAIApi; + // @internal private _io?: IO; + // @internal private _connectionKey?: string; /** @@ -46,10 +50,6 @@ export class OpenAI implements TriggerIntegration { public readonly native: OpenAIApi; constructor(private options: OpenAIIntegrationOptions) { - if (Object.keys(options).includes("apiKey") && !options.apiKey) { - throw `Can't create OpenAI integration (${options.id}) as apiKey was undefined`; - } - this._options = options; this.native = new OpenAIApi({ @@ -58,16 +58,26 @@ export class OpenAI implements TriggerIntegration { }); } + // @internal get authSource() { return "LOCAL" as const; } + // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { + const apiKey = this._options.apiKey ?? auth?.accessToken; + + if (!apiKey) { + throw new Error( + `Can't initialize OpenAI integration (${this._options.id}) as apiKey was undefined` + ); + } + const openai = new OpenAI(this._options); openai._io = io; openai._connectionKey = connectionKey; openai._client = new OpenAIApi({ - apiKey: this._options.apiKey, + apiKey, organization: this._options.organization, }); return openai; @@ -77,6 +87,7 @@ export class OpenAI implements TriggerIntegration { return this.options.id; } + // @internal get metadata() { return { id: "openai", name: "OpenAI" }; } diff --git a/integrations/openai/src/types.ts b/integrations/openai/src/types.ts index db6869887d..481bf224dd 100644 --- a/integrations/openai/src/types.ts +++ b/integrations/openai/src/types.ts @@ -1,6 +1,6 @@ export type OpenAIIntegrationOptions = { id: string; - apiKey: string; + apiKey?: string; organization?: string; }; diff --git a/integrations/openai/tsconfig.json b/integrations/openai/tsconfig.json index 9616ac98a0..d1b7924087 100644 --- a/integrations/openai/tsconfig.json +++ b/integrations/openai/tsconfig.json @@ -11,7 +11,8 @@ }, "declaration": false, "declarationMap": false, - "baseUrl": "." + "baseUrl": ".", + "stripInternal": true }, "exclude": ["node_modules"] } diff --git a/integrations/plain/src/index.ts b/integrations/plain/src/index.ts index 206c7729bb..345a719a19 100644 --- a/integrations/plain/src/index.ts +++ b/integrations/plain/src/index.ts @@ -23,21 +23,21 @@ import { export type PlainIntegrationOptions = { id: string; - apiKey: string; + apiKey?: string; apiUrl?: string; }; export class Plain implements TriggerIntegration { + // @internal private _options: PlainIntegrationOptions; + // @internal private _client?: PlainClient; + // @internal private _io?: IO; + // @internal private _connectionKey?: string; constructor(private options: PlainIntegrationOptions) { - if (Object.keys(options).includes("apiKey") && !options.apiKey) { - throw `Can't create Plain integration (${options.id}) as apiKey was undefined`; - } - this._options = options; } @@ -46,11 +46,19 @@ export class Plain implements TriggerIntegration { } cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { + const apiKey = this._options.apiKey ?? auth?.accessToken; + + if (!apiKey) { + throw new Error( + `Can't initialize Plain integration (${this._options.id}) as apiKey was undefined` + ); + } + const plain = new Plain(this._options); plain._io = io; plain._connectionKey = connectionKey; plain._client = new PlainClient({ - apiKey: this._options.apiKey, + apiKey, apiUrl: this._options.apiUrl, }); return plain; @@ -60,6 +68,7 @@ export class Plain implements TriggerIntegration { return this.options.id; } + // @internal get metadata() { return { id: "plain", name: "Plain.com" }; } diff --git a/integrations/plain/tsconfig.json b/integrations/plain/tsconfig.json index 9616ac98a0..d1b7924087 100644 --- a/integrations/plain/tsconfig.json +++ b/integrations/plain/tsconfig.json @@ -11,7 +11,8 @@ }, "declaration": false, "declarationMap": false, - "baseUrl": "." + "baseUrl": ".", + "stripInternal": true }, "exclude": ["node_modules"] } diff --git a/integrations/resend/src/index.ts b/integrations/resend/src/index.ts index 7b30670a50..928c44edd2 100644 --- a/integrations/resend/src/index.ts +++ b/integrations/resend/src/index.ts @@ -39,39 +39,61 @@ function onError(error: unknown) { export type ResendIntegrationOptions = { id: string; - apiKey: string; + apiKey?: string; }; export class Resend implements TriggerIntegration { + /** + * @internal + */ private _options: ResendIntegrationOptions; + /** + * @internal + */ private _client?: ResendClient; + /** + * @internal + */ private _io?: IO; - private _connectionKey?: string; - constructor(private options: ResendIntegrationOptions) { - if (Object.keys(options).includes("apiKey") && !options.apiKey) { - throw `Can't create Resend integration (${options.id}) as apiKey was undefined`; - } + // @internal + private _connectionKey?: string; + constructor(options: ResendIntegrationOptions) { this._options = options; } + /** + * @internal + */ get authSource() { return this._options.apiKey ? ("LOCAL" as const) : ("HOSTED" as const); } + /** + * @internal + */ cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { + const apiKey = this._options.apiKey ?? auth?.accessToken; + + if (!apiKey) { + throw new Error( + `Can't create Resend integration (${this._options.id}) as apiKey was undefined` + ); + } + const resend = new Resend(this._options); resend._io = io; resend._connectionKey = connectionKey; - resend._client = new ResendClient(this._options.apiKey); + resend._client = new ResendClient(apiKey); return resend; } get id() { - return this.options.id; + return this._options.id; } + // @internal get metadata() { return { id: "resend", name: "Resend.com" }; } diff --git a/integrations/resend/tsconfig.json b/integrations/resend/tsconfig.json index 9616ac98a0..d1b7924087 100644 --- a/integrations/resend/tsconfig.json +++ b/integrations/resend/tsconfig.json @@ -11,7 +11,8 @@ }, "declaration": false, "declarationMap": false, - "baseUrl": "." + "baseUrl": ".", + "stripInternal": true }, "exclude": ["node_modules"] } diff --git a/integrations/sendgrid/src/index.ts b/integrations/sendgrid/src/index.ts index fabf90158a..de7bf54dd5 100644 --- a/integrations/sendgrid/src/index.ts +++ b/integrations/sendgrid/src/index.ts @@ -15,33 +15,43 @@ type SendEmailData = Parameters["send"]>[0]; export type SendGridIntegrationOptions = { id: string; - apiKey: string; + apiKey?: string; }; export class SendGrid implements TriggerIntegration { + // @internal private _options: SendGridIntegrationOptions; + // @internal private _client?: MailService; + // @internal private _io?: IO; + // @internal private _connectionKey?: string; constructor(private options: SendGridIntegrationOptions) { - if (!options.apiKey) { - throw new Error(`Can't create SendGrid integration (${options.id}) as apiKey was undefined`); - } - this._options = options; } + // @internal get authSource() { return this._options.apiKey ? ("LOCAL" as const) : ("HOSTED" as const); } + // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { + const apiKey = this._options.apiKey ?? auth?.accessToken; + + if (!apiKey) { + throw new Error( + `Can't initialize SendGrid integration (${this._options.id}) as apiKey was undefined` + ); + } + const sendgrid = new SendGrid(this._options); sendgrid._io = io; sendgrid._connectionKey = connectionKey; sendgrid._client = new MailService(); - sendgrid._client.setApiKey(this._options.apiKey); + sendgrid._client.setApiKey(apiKey); return sendgrid; } @@ -49,6 +59,7 @@ export class SendGrid implements TriggerIntegration { return this.options.id; } + // @internal get metadata() { return { id: "sendgrid", name: "SendGrid" }; } diff --git a/integrations/sendgrid/tsconfig.json b/integrations/sendgrid/tsconfig.json index 9616ac98a0..d1b7924087 100644 --- a/integrations/sendgrid/tsconfig.json +++ b/integrations/sendgrid/tsconfig.json @@ -11,7 +11,8 @@ }, "declaration": false, "declarationMap": false, - "baseUrl": "." + "baseUrl": ".", + "stripInternal": true }, "exclude": ["node_modules"] } diff --git a/integrations/slack/src/index.ts b/integrations/slack/src/index.ts index 4150246e8a..978b55fce1 100644 --- a/integrations/slack/src/index.ts +++ b/integrations/slack/src/index.ts @@ -47,15 +47,20 @@ export type ChatPostMessageArguments = { }; export class Slack implements TriggerIntegration { + // @internal private _options: SlackIntegrationOptions; + // @internal private _client?: WebClient; + // @internal private _io?: IO; + // @internal private _connectionKey?: string; constructor(private options: SlackIntegrationOptions) { this._options = options; } + // @internal get authSource() { return "HOSTED" as const; } @@ -64,10 +69,12 @@ export class Slack implements TriggerIntegration { return this.options.id; } + // @internal get metadata() { return { id: "slack", name: "Slack.com" }; } + // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const slack = new Slack(this._options); slack._io = io; diff --git a/integrations/slack/tsconfig.json b/integrations/slack/tsconfig.json index ce79f20799..1ab3bda72d 100644 --- a/integrations/slack/tsconfig.json +++ b/integrations/slack/tsconfig.json @@ -9,7 +9,8 @@ }, "declaration": false, "declarationMap": false, - "baseUrl": "." + "baseUrl": ".", + "stripInternal": true }, "exclude": ["node_modules"] } diff --git a/integrations/stripe/src/charges.ts b/integrations/stripe/src/charges.ts index 3698ae3b56..13383c6be0 100644 --- a/integrations/stripe/src/charges.ts +++ b/integrations/stripe/src/charges.ts @@ -2,11 +2,7 @@ import { IntegrationTaskKey } from "@trigger.dev/sdk"; import { CreateChargeParams, CreateChargeResponse, StripeRunTask } from "./index"; export class Charges { - runTask: StripeRunTask; - - constructor(runTask: StripeRunTask) { - this.runTask = runTask; - } + constructor(private runTask: StripeRunTask) {} /** * Use the [Payment Intents API](https://stripe.com/docs/api/payment_intents) to initiate a new payment instead diff --git a/integrations/stripe/src/checkout.ts b/integrations/stripe/src/checkout.ts index 205b9a9a1d..1107bcab76 100644 --- a/integrations/stripe/src/checkout.ts +++ b/integrations/stripe/src/checkout.ts @@ -2,11 +2,7 @@ import { IntegrationTaskKey } from "@trigger.dev/sdk"; import { CreateCheckoutSessionParams, CreateCheckoutSessionResponse, StripeRunTask } from "./index"; export class Checkout { - runTask: StripeRunTask; - - constructor(runTask: StripeRunTask) { - this.runTask = runTask; - } + constructor(private runTask: StripeRunTask) {} sessions = { /** diff --git a/integrations/stripe/src/customers.ts b/integrations/stripe/src/customers.ts index cf1344e862..beeeb12416 100644 --- a/integrations/stripe/src/customers.ts +++ b/integrations/stripe/src/customers.ts @@ -9,11 +9,7 @@ import { import { omit } from "./utils"; export class Customers { - runTask: StripeRunTask; - - constructor(runTask: StripeRunTask) { - this.runTask = runTask; - } + constructor(private runTask: StripeRunTask) {} create(key: IntegrationTaskKey, params: CreateCustomerParams): Promise { return this.runTask( diff --git a/integrations/stripe/src/index.ts b/integrations/stripe/src/index.ts index 3ffd88e01d..7ab7d79c36 100644 --- a/integrations/stripe/src/index.ts +++ b/integrations/stripe/src/index.ts @@ -30,9 +30,13 @@ export * from "./types"; export type StripeRunTask = InstanceType["runTask"]; export class Stripe implements TriggerIntegration { + // @internal private _options: StripeIntegrationOptions; + // @internal private _client?: StripeClient; + // @internal private _io?: IO; + // @internal private _connectionKey?: string; /** @@ -50,34 +54,46 @@ export class Stripe implements TriggerIntegration { * const customer = await stripe.native.customers.create({}); // etc. * ``` */ - public readonly native: StripeClient; + public readonly native?: StripeClient; constructor(private options: StripeIntegrationOptions) { this._options = options; - this.native = new StripeClient(options.apiKey, { - apiVersion: "2022-11-15", - typescript: true, - timeout: 10000, - maxNetworkRetries: 0, - stripeAccount: options.stripeAccount, - appInfo: { - name: "Trigger.dev Stripe Integration", - version: "0.1.0", - url: "https://trigger.dev", - }, - }); + this.native = options.apiKey + ? new StripeClient(options.apiKey, { + apiVersion: "2022-11-15", + typescript: true, + timeout: 10000, + maxNetworkRetries: 0, + stripeAccount: options.stripeAccount, + appInfo: { + name: "Trigger.dev Stripe Integration", + version: "0.1.0", + url: "https://trigger.dev", + }, + }) + : undefined; } + // @internal get authSource() { return "LOCAL" as const; } + // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { + const apiKey = this._options.apiKey ?? auth?.accessToken; + + if (!apiKey) { + throw new Error( + `Can't initialize Stripe integration (${this._options.id}) as apiKey was undefined` + ); + } + const stripe = new Stripe(this._options); stripe._io = io; stripe._connectionKey = connectionKey; - stripe._client = new StripeClient(this._options.apiKey, { + stripe._client = new StripeClient(apiKey, { apiVersion: "2022-11-15", typescript: true, timeout: 10000, @@ -96,6 +112,7 @@ export class Stripe implements TriggerIntegration { return this.options.id; } + // @internal get metadata() { return { id: "stripe", name: "Stripe" }; } diff --git a/integrations/stripe/src/subscriptions.ts b/integrations/stripe/src/subscriptions.ts index f72c60de86..4fa05baaeb 100644 --- a/integrations/stripe/src/subscriptions.ts +++ b/integrations/stripe/src/subscriptions.ts @@ -3,11 +3,7 @@ import { RetrieveSubscriptionParams, RetrieveSubscriptionResponse, StripeRunTask import { omit } from "./utils"; export class Subscriptions { - runTask: StripeRunTask; - - constructor(runTask: StripeRunTask) { - this.runTask = runTask; - } + constructor(private runTask: StripeRunTask) {} /** * Retrieves the subscription with the given ID. diff --git a/integrations/stripe/src/types.ts b/integrations/stripe/src/types.ts index 67cddd55a0..28f6a45a87 100644 --- a/integrations/stripe/src/types.ts +++ b/integrations/stripe/src/types.ts @@ -6,7 +6,7 @@ export type StripeSDK = Stripe; export type StripeIntegrationOptions = { id: string; - apiKey: string; + apiKey?: string; /** * An account id on whose behalf you wish to make every request. diff --git a/integrations/stripe/src/webhookEndpoints.ts b/integrations/stripe/src/webhookEndpoints.ts index 2a7658dec2..d17b248e5a 100644 --- a/integrations/stripe/src/webhookEndpoints.ts +++ b/integrations/stripe/src/webhookEndpoints.ts @@ -11,11 +11,7 @@ import { import { omit } from "./utils"; export class WebhookEndpoints { - runTask: StripeRunTask; - - constructor(runTask: StripeRunTask) { - this.runTask = runTask; - } + constructor(private runTask: StripeRunTask) {} create(key: IntegrationTaskKey, params: CreateWebhookParams): Promise { return this.runTask( diff --git a/integrations/stripe/tsconfig.json b/integrations/stripe/tsconfig.json index 20a53815e4..e57743ca1f 100644 --- a/integrations/stripe/tsconfig.json +++ b/integrations/stripe/tsconfig.json @@ -19,7 +19,8 @@ "resolveJsonModule": true, "lib": ["es2019"], "module": "commonjs", - "target": "es2021" + "target": "es2021", + "stripInternal": true }, "include": ["./src/**/*.ts", "tsup.config.ts"], "exclude": ["node_modules"] diff --git a/integrations/supabase/src/database/index.ts b/integrations/supabase/src/database/index.ts index c7f286e112..16e01c8cb5 100644 --- a/integrations/supabase/src/database/index.ts +++ b/integrations/supabase/src/database/index.ts @@ -55,9 +55,13 @@ export class Supabase< : any, > implements TriggerIntegration { + // @internal private _options: SupabaseIntegrationOptions; + // @internal private _client?: SupabaseClient; + // @internal private _io?: IO; + // @internal private _connectionKey?: string; /** @@ -95,6 +99,7 @@ export class Supabase< }); } + // @internal get authSource() { return "LOCAL" as const; } @@ -103,6 +108,7 @@ export class Supabase< return this.options.id; } + // @internal get metadata() { return { id: "supabase", name: "Supabase" }; } @@ -114,6 +120,7 @@ export class Supabase< return this._client; } + // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const supabase = new Supabase(this._options); supabase._io = io; diff --git a/integrations/supabase/src/management/index.ts b/integrations/supabase/src/management/index.ts index eec724abc8..78611a480a 100644 --- a/integrations/supabase/src/management/index.ts +++ b/integrations/supabase/src/management/index.ts @@ -266,9 +266,13 @@ class SupabaseDatabase { } export class SupabaseManagement implements TriggerIntegration { + // @internal private _options: SupabaseManagementIntegrationOptions; + // @internal private _client?: SupabaseManagementAPI; + // @internal private _io?: IO; + // @internal private _connectionKey?: string; constructor(private options: SupabaseManagementIntegrationOptions) { @@ -285,6 +289,7 @@ export class SupabaseManagement implements TriggerIntegration { return this.options.id; } + // @internal get metadata() { return { id: "supabase-management", name: "Supabase Management API" }; } @@ -293,6 +298,7 @@ export class SupabaseManagement implements TriggerIntegration { return createWebhookEventSource(this); } + // @internal get authSource() { if ("apiKey" in this._options) { return "LOCAL"; @@ -301,6 +307,7 @@ export class SupabaseManagement implements TriggerIntegration { return "HOSTED" as const; } + // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const supabase = new SupabaseManagement(this._options); supabase._io = io; diff --git a/integrations/supabase/tsconfig.json b/integrations/supabase/tsconfig.json index 9616ac98a0..d1b7924087 100644 --- a/integrations/supabase/tsconfig.json +++ b/integrations/supabase/tsconfig.json @@ -11,7 +11,8 @@ }, "declaration": false, "declarationMap": false, - "baseUrl": "." + "baseUrl": ".", + "stripInternal": true }, "exclude": ["node_modules"] } diff --git a/integrations/typeform/src/forms.ts b/integrations/typeform/src/forms.ts index d75fc513c1..a06a530a8f 100644 --- a/integrations/typeform/src/forms.ts +++ b/integrations/typeform/src/forms.ts @@ -3,11 +3,7 @@ import { GetFormParams, GetFormResponse, ListFormsParams, TypeformRunTask } from import { Typeform } from "@typeform/api-client"; export class Forms { - runTask: TypeformRunTask; - - constructor(runTask: TypeformRunTask) { - this.runTask = runTask; - } + constructor(private runTask: TypeformRunTask) {} list(key: IntegrationTaskKey, params: ListFormsParams): Promise { return this.runTask( diff --git a/integrations/typeform/src/index.ts b/integrations/typeform/src/index.ts index beb8f0319c..6d84284e6d 100644 --- a/integrations/typeform/src/index.ts +++ b/integrations/typeform/src/index.ts @@ -37,19 +37,20 @@ type TypeformTrigger = ReturnType; export type TypeformRunTask = InstanceType["runTask"]; export class Typeform implements TriggerIntegration { + // @internal private _options: TypeformIntegrationOptions; + // @internal private _client?: TypeformSDK; + // @internal private _io?: IO; + // @internal private _connectionKey?: string; constructor(private options: TypeformIntegrationOptions) { - if (Object.keys(options).includes("token") && !options.token) { - throw `Can't create Typeform integration (${options.id}) as token was undefined`; - } - this._options = options; } + // @internal get authSource() { return "LOCAL" as const; } @@ -58,15 +59,25 @@ export class Typeform implements TriggerIntegration { return this.options.id; } + // @internal get metadata() { return { id: "typeform", name: "Typeform" }; } + // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { + const token = this._options.token ?? auth?.accessToken; + + if (!token) { + throw new Error( + `Can't initialize Typeform integration (${this._options.id}) as token was undefined` + ); + } + const typeform = new Typeform(this._options); typeform._io = io; typeform._connectionKey = connectionKey; - typeform._client = createClient({ token: this._options.token }); + typeform._client = createClient({ token }); return typeform; } diff --git a/integrations/typeform/src/types.ts b/integrations/typeform/src/types.ts index d1e6d9cacf..817f617383 100644 --- a/integrations/typeform/src/types.ts +++ b/integrations/typeform/src/types.ts @@ -3,7 +3,7 @@ import { Typeform, createClient } from "@typeform/api-client"; export type TypeformIntegrationOptions = { id: string; - token: string; + token?: string; apiBaseUrl?: string; }; diff --git a/integrations/typeform/src/webhooks.ts b/integrations/typeform/src/webhooks.ts index d25d887759..ddb0065db5 100644 --- a/integrations/typeform/src/webhooks.ts +++ b/integrations/typeform/src/webhooks.ts @@ -12,11 +12,7 @@ import { } from "."; export class Webhooks { - runTask: TypeformRunTask; - - constructor(runTask: TypeformRunTask) { - this.runTask = runTask; - } + constructor(private runTask: TypeformRunTask) {} create(key: IntegrationTaskKey, params: CreateWebhookParams): Promise { return this.runTask( diff --git a/integrations/typeform/tsconfig.json b/integrations/typeform/tsconfig.json index 20a53815e4..e57743ca1f 100644 --- a/integrations/typeform/tsconfig.json +++ b/integrations/typeform/tsconfig.json @@ -19,7 +19,8 @@ "resolveJsonModule": true, "lib": ["es2019"], "module": "commonjs", - "target": "es2021" + "target": "es2021", + "stripInternal": true }, "include": ["./src/**/*.ts", "tsup.config.ts"], "exclude": ["node_modules"] diff --git a/packages/core/src/schemas/api.ts b/packages/core/src/schemas/api.ts index b59f23be76..005fdff931 100644 --- a/packages/core/src/schemas/api.ts +++ b/packages/core/src/schemas/api.ts @@ -437,6 +437,13 @@ export const RunJobErrorSchema = z.object({ export type RunJobError = z.infer; +export const RunJobUnresolvedAuthErrorSchema = z.object({ + status: z.literal("UNRESOLVED_AUTH_ERROR"), + issues: z.record(z.object({ id: z.string(), error: z.string() })), +}); + +export type RunJobUnresolvedAuthError = z.infer; + export const RunJobResumeWithTaskSchema = z.object({ status: z.literal("RESUME_WITH_TASK"), task: TaskSchema, @@ -469,6 +476,7 @@ export type RunJobSuccess = z.infer; export const RunJobResponseSchema = z.discriminatedUnion("status", [ RunJobErrorSchema, + RunJobUnresolvedAuthErrorSchema, RunJobResumeWithTaskSchema, RunJobRetryWithTaskSchema, RunJobCanceledWithTaskSchema, @@ -693,7 +701,7 @@ const RegisterCommonScheduleBodySchema = z.object({ id: z.string(), /** Any additional metadata about the schedule. */ metadata: z.any(), - /** This will be used by the Trigger.dev Connect feature, which is coming soon. */ + /** An optional Account ID to associate with runs triggered by this schedule */ accountId: z.string().optional(), }); diff --git a/packages/core/src/schemas/integrations.ts b/packages/core/src/schemas/integrations.ts index dd22ff40c4..1ec5ca1ce8 100644 --- a/packages/core/src/schemas/integrations.ts +++ b/packages/core/src/schemas/integrations.ts @@ -1,7 +1,7 @@ import { z } from "zod"; export const ConnectionAuthSchema = z.object({ - type: z.enum(["oauth2"]), + type: z.enum(["oauth2", "apiKey"]), accessToken: z.string(), scopes: z.array(z.string()).optional(), additionalFields: z.record(z.string()).optional(), @@ -20,7 +20,7 @@ export type IntegrationMetadata = z.infer; export const IntegrationConfigSchema = z.object({ id: z.string(), metadata: IntegrationMetadataSchema, - authSource: z.enum(["HOSTED", "LOCAL"]), + authSource: z.enum(["HOSTED", "LOCAL", "RESOLVER"]), }); export type IntegrationConfig = z.infer; diff --git a/packages/core/src/schemas/runs.ts b/packages/core/src/schemas/runs.ts index e22b964535..9a4535ff26 100644 --- a/packages/core/src/schemas/runs.ts +++ b/packages/core/src/schemas/runs.ts @@ -1,4 +1,4 @@ -import { ZodObject, z } from "zod"; +import { z } from "zod"; import { TaskStatusSchema } from "./tasks"; import { JobRunStatusRecordSchema } from "./statuses"; @@ -13,6 +13,7 @@ export const RunStatusSchema = z.union([ z.literal("TIMED_OUT"), z.literal("ABORTED"), z.literal("CANCELED"), + z.literal("UNRESOLVED_AUTH"), ]); export const RunTaskSchema = z.object({ diff --git a/packages/core/src/schemas/schedules.ts b/packages/core/src/schemas/schedules.ts index 5c23f37b5a..56b7538806 100644 --- a/packages/core/src/schemas/schedules.ts +++ b/packages/core/src/schemas/schedules.ts @@ -30,6 +30,8 @@ export type CronOptions = z.infer; export const CronMetadataSchema = z.object({ type: z.literal("cron"), options: CronOptionsSchema, + /** An optional Account ID to associate with runs triggered by this interval */ + accountId: z.string().optional(), metadata: z.any(), }); @@ -40,6 +42,8 @@ export const IntervalMetadataSchema = z.object({ type: z.literal("interval"), /** An object containing options about the interval. */ options: IntervalOptionsSchema, + /** An optional Account ID to associate with runs triggered by this interval */ + accountId: z.string().optional(), /** Any additional metadata about the schedule. */ metadata: z.any(), }); diff --git a/packages/database/prisma/migrations/20230919124531_add_resolver_auth_source/migration.sql b/packages/database/prisma/migrations/20230919124531_add_resolver_auth_source/migration.sql new file mode 100644 index 0000000000..e3a59cee4b --- /dev/null +++ b/packages/database/prisma/migrations/20230919124531_add_resolver_auth_source/migration.sql @@ -0,0 +1,2 @@ +-- AlterEnum +ALTER TYPE "IntegrationAuthSource" ADD VALUE 'RESOLVER'; diff --git a/packages/database/prisma/migrations/20230919150351_add_unresolved_auth_job_run_status/migration.sql b/packages/database/prisma/migrations/20230919150351_add_unresolved_auth_job_run_status/migration.sql new file mode 100644 index 0000000000..663479aaf6 --- /dev/null +++ b/packages/database/prisma/migrations/20230919150351_add_unresolved_auth_job_run_status/migration.sql @@ -0,0 +1,2 @@ +-- AlterEnum +ALTER TYPE "JobRunStatus" ADD VALUE 'UNRESOLVED_AUTH'; diff --git a/packages/database/prisma/schema.prisma b/packages/database/prisma/schema.prisma index 8e36acef9a..90cf7a5590 100644 --- a/packages/database/prisma/schema.prisma +++ b/packages/database/prisma/schema.prisma @@ -189,6 +189,7 @@ model Integration { enum IntegrationAuthSource { HOSTED LOCAL + RESOLVER } enum IntegrationSetupStatus { @@ -730,6 +731,7 @@ enum JobRunStatus { TIMED_OUT ABORTED CANCELED + UNRESOLVED_AUTH } model JobRunExecution { diff --git a/packages/trigger-sdk/src/job.ts b/packages/trigger-sdk/src/job.ts index ab6997f4be..651b475786 100644 --- a/packages/trigger-sdk/src/job.ts +++ b/packages/trigger-sdk/src/job.ts @@ -58,6 +58,9 @@ export type JobOptions< io: IOWithIntegrations, context: TriggerContext ) => Promise; + + // @internal + __internal?: boolean; }; export type JobPayload = TJob extends Job>, any> @@ -110,45 +113,10 @@ export class Job< return this.options.version; } - get integrations(): Record { - return Object.keys(this.options.integrations ?? {}).reduce( - (acc: Record, key) => { - const integration = this.options.integrations![key]; - - acc[key] = { - id: integration.id, - metadata: integration.metadata, - authSource: integration.authSource, - }; - - return acc; - }, - {} - ); - } - get logLevel() { return this.options.logLevel; } - toJSON(): JobMetadata { - // @ts-ignore - const internal = this.options.__internal as JobMetadata["internal"]; - - return { - id: this.id, - name: this.name, - version: this.version, - event: this.trigger.event, - trigger: this.trigger.toJSON(), - integrations: this.integrations, - startPosition: "latest", // this is deprecated, leaving this for now to make sure newer clients work with older servers - enabled: this.enabled, - preprocessRuns: this.trigger.preprocessRuns, - internal, - }; - } - // Make sure the id is valid (must only contain alphanumeric characters and dashes) // Make sure the version is valid (must be a valid semver version) #validate() { diff --git a/packages/trigger-sdk/src/runLocalStorage.ts b/packages/trigger-sdk/src/runLocalStorage.ts new file mode 100644 index 0000000000..e16274f2e9 --- /dev/null +++ b/packages/trigger-sdk/src/runLocalStorage.ts @@ -0,0 +1,10 @@ +import { IO } from "./io"; +import { TriggerContext } from "./types"; +import { TypedAsyncLocalStorage } from "./utils/typedAsyncLocalStorage"; + +export type RunStore = { + io: IO; + ctx: TriggerContext; +}; + +export const runLocalStorage = new TypedAsyncLocalStorage(); diff --git a/packages/trigger-sdk/src/triggerClient.ts b/packages/trigger-sdk/src/triggerClient.ts index d193c53d3f..8e42fa4f33 100644 --- a/packages/trigger-sdk/src/triggerClient.ts +++ b/packages/trigger-sdk/src/triggerClient.ts @@ -9,6 +9,8 @@ import { HttpSourceResponseMetadata, IndexEndpointResponse, InitializeTriggerBodySchema, + IntegrationConfig, + JobMetadata, LogLevel, Logger, NormalizedResponse, @@ -34,9 +36,11 @@ import { TriggerIntegration } from "./integrations"; import { IO } from "./io"; import { createIOWithIntegrations } from "./ioWithIntegrations"; import { Job, JobOptions } from "./job"; +import { runLocalStorage } from "./runLocalStorage"; import { DynamicTrigger } from "./triggers/dynamic"; import { EventTrigger } from "./triggers/eventTrigger"; import { ExternalSource } from "./triggers/externalSource"; +import { DynamicIntervalOptions, DynamicSchedule } from "./triggers/scheduled"; import type { EventSpecification, Trigger, @@ -72,6 +76,17 @@ export type TriggerClientOptions = { ioLogLocalEnabled?: boolean; }; +export type AuthResolverResult = { + type: "apiKey" | "oauth"; + token: string; + additionalFields?: Record; +}; + +export type TriggerAuthResolver = ( + ctx: TriggerContext, + integration: TriggerIntegration +) => Promise; + /** A [TriggerClient](https://trigger.dev/docs/documentation/concepts/client-adaptors) is used to connect to a specific [Project](https://trigger.dev/docs/documentation/concepts/projects) by using an [API Key](https://trigger.dev/docs/documentation/concepts/environments-apikeys). */ export class TriggerClient { #options: TriggerClientOptions; @@ -94,6 +109,7 @@ export class TriggerClient { > = {}; #jobMetadataByDynamicTriggers: Record> = {}; #registeredSchedules: Record> = {}; + #authResolvers: Record = {}; #client: ApiClient; #internalLogger: Logger; @@ -199,29 +215,8 @@ export class TriggerClient { }; } case "INDEX_ENDPOINT": { - // if the x-trigger-job-id header is set, we return the job with that id - const jobId = request.headers.get("x-trigger-job-id"); - - if (jobId) { - const job = this.#registeredJobs[jobId]; - - if (!job) { - return { - status: 404, - body: { - message: "Job not found", - }, - }; - } - - return { - status: 200, - body: job.toJSON(), - }; - } - const body: IndexEndpointResponse = { - jobs: Object.values(this.#registeredJobs).map((job) => job.toJSON()), + jobs: this.#buildJobsIndex(), sources: Object.values(this.#registeredSources), dynamicTriggers: Object.values(this.#registeredDynamicTriggers).map((trigger) => ({ id: trigger.id, @@ -421,6 +416,26 @@ export class TriggerClient { }; } + defineJob< + TTrigger extends Trigger>, + TIntegrations extends Record = {}, + >(options: JobOptions) { + return new Job(this, options); + } + + defineAuthResolver( + integration: TriggerIntegration, + resolver: TriggerAuthResolver + ): TriggerClient { + this.#authResolvers[integration.id] = resolver; + + return this; + } + + defineDynamicSchedule(options: DynamicIntervalOptions): DynamicSchedule { + return new DynamicSchedule(this, options); + } + attach(job: Job, any>): void { this.#registeredJobs[job.id] = job; @@ -454,7 +469,6 @@ export class TriggerClient { ...updates, }); }, - // @ts-ignore __internal: true, }); } @@ -534,12 +548,17 @@ export class TriggerClient { ...updates, }); }, - // @ts-ignore __internal: true, }); } - attachDynamicSchedule(key: string, job: Job, any>): void { + attachDynamicSchedule(key: string): void { + const jobs = this.#registeredSchedules[key] ?? []; + + this.#registeredSchedules[key] = jobs; + } + + attachDynamicScheduleToJob(key: string, job: Job, any>): void { const jobs = this.#registeredSchedules[key] ?? []; jobs.push({ id: job.id, version: job.version }); @@ -629,10 +648,14 @@ export class TriggerClient { }; } - async #executeJob(body: RunJobBody, job: Job, any>): Promise { + async #executeJob( + body: RunJobBody, + job: Job, Record> + ): Promise { this.#internalLogger.debug("executing job", { execution: body, - job: job.toJSON(), + job: job.id, + version: job.version, }); const context = this.#createRunContext(body); @@ -650,18 +673,33 @@ export class TriggerClient { : undefined, }); + const resolvedConnections = await this.#resolveConnections( + context, + job.options.integrations, + body.connections + ); + + if (!resolvedConnections.ok) { + return { + status: "UNRESOLVED_AUTH_ERROR", + issues: resolvedConnections.issues, + }; + } + const ioWithConnections = createIOWithIntegrations( io, - body.connections, + resolvedConnections.data, job.options.integrations ); try { - const output = await job.options.run( - job.trigger.event.parsePayload(body.event.payload ?? {}), - ioWithConnections, - context - ); + const output = await runLocalStorage.runWith({ io, ctx: context }, () => { + return job.options.run( + job.trigger.event.parsePayload(body.event.payload ?? {}), + ioWithConnections, + context + ); + }); return { status: "SUCCESS", output }; } catch (error) { @@ -866,11 +904,191 @@ export class TriggerClient { }; } - defineJob< - TTrigger extends Trigger>, - TIntegrations extends Record = {}, - >(options: JobOptions) { - return new Job(this, options); + async #resolveConnections( + ctx: TriggerContext, + integrations?: Record, + connections?: Record + ): Promise< + | { ok: true; data: Record } + | { ok: false; issues: Record } + > { + if (!integrations) { + return { ok: true, data: {} }; + } + + const resolvedAuthResults = await Promise.all( + Object.keys(integrations).map(async (key) => { + const integration = integrations[key]; + const auth = (connections ?? {})[key]; + + const result = await this.#resolveConnection(ctx, integration, auth); + + if (result.ok) { + return { + ok: true as const, + auth: result.auth, + key, + }; + } else { + return { + ok: false as const, + error: result.error, + key, + }; + } + }) + ); + + const allResolved = resolvedAuthResults.every((result) => result.ok); + + if (allResolved) { + return { + ok: true, + data: resolvedAuthResults.reduce((acc: Record, result) => { + acc[result.key] = result.auth!; + + return acc; + }, {}), + }; + } else { + return { + ok: false, + issues: resolvedAuthResults.reduce( + (acc: Record, result) => { + if (result.ok) { + return acc; + } + + const integration = integrations[result.key]; + + acc[result.key] = { id: integration.id, error: result.error }; + + return acc; + }, + {} + ), + }; + } + } + + async #resolveConnection( + ctx: TriggerContext, + integration: TriggerIntegration, + auth?: ConnectionAuth + ): Promise<{ ok: true; auth: ConnectionAuth | undefined } | { ok: false; error: string }> { + if (auth) { + return { ok: true, auth }; + } + + const authResolver = this.#authResolvers[integration.id]; + + if (!authResolver) { + if (integration.authSource === "HOSTED") { + return { + ok: false, + error: `Something went wrong: Integration ${integration.id} is missing auth credentials from Trigger.dev`, + }; + } + + return { + ok: true, + auth: undefined, + }; + } + + try { + const resolvedAuth = await authResolver(ctx, integration); + + if (!resolvedAuth) { + return { + ok: false, + error: `Auth could not be resolved for ${integration.id}: auth resolver returned null or undefined`, + }; + } + + return { + ok: true, + auth: + resolvedAuth.type === "apiKey" + ? { + type: "apiKey", + accessToken: resolvedAuth.token, + additionalFields: resolvedAuth.additionalFields, + } + : { + type: "oauth2", + accessToken: resolvedAuth.token, + additionalFields: resolvedAuth.additionalFields, + }, + }; + } catch (resolverError) { + if (resolverError instanceof Error) { + return { + ok: false, + error: `Auth could not be resolved for ${integration.id}: auth resolver threw. ${resolverError.name}: ${resolverError.message}`, + }; + } else if (typeof resolverError === "string") { + return { + ok: false, + error: `Auth could not be resolved for ${integration.id}: auth resolver threw an error: ${resolverError}`, + }; + } + + return { + ok: false, + error: `Auth could not be resolved for ${ + integration.id + }: auth resolver threw an unknown error: ${JSON.stringify(resolverError)}`, + }; + } + } + + #buildJobsIndex(): IndexEndpointResponse["jobs"] { + return Object.values(this.#registeredJobs).map((job) => this.#buildJobIndex(job)); + } + + #buildJobIndex(job: Job, any>): IndexEndpointResponse["jobs"][number] { + const internal = job.options.__internal as JobMetadata["internal"]; + + return { + id: job.id, + name: job.name, + version: job.version, + event: job.trigger.event, + trigger: job.trigger.toJSON(), + integrations: this.#buildJobIntegrations(job), + startPosition: "latest", // job is deprecated, leaving job for now to make sure newer clients work with older servers + enabled: job.enabled, + preprocessRuns: job.trigger.preprocessRuns, + internal, + }; + } + + #buildJobIntegrations( + job: Job, Record> + ): IndexEndpointResponse["jobs"][number]["integrations"] { + return Object.keys(job.options.integrations ?? {}).reduce( + (acc: Record, key) => { + const integration = job.options.integrations![key]; + + acc[key] = this.#buildJobIntegration(integration); + + return acc; + }, + {} + ); + } + + #buildJobIntegration( + integration: TriggerIntegration + ): IndexEndpointResponse["jobs"][number]["integrations"][string] { + const authSource = this.#authResolvers[integration.id] ? "RESOLVER" : integration.authSource; + + return { + id: integration.id, + metadata: integration.metadata, + authSource, + }; } } diff --git a/packages/trigger-sdk/src/triggers/dynamic.ts b/packages/trigger-sdk/src/triggers/dynamic.ts index 219af52de7..7bc59e6080 100644 --- a/packages/trigger-sdk/src/triggers/dynamic.ts +++ b/packages/trigger-sdk/src/triggers/dynamic.ts @@ -56,6 +56,7 @@ export class DynamicTrigger< client.attachDynamicTrigger(this); } + // @internal toJSON(): TriggerMetadata { return { type: "dynamic", @@ -71,6 +72,7 @@ export class DynamicTrigger< return this.#options.event; } + // @internal registeredTriggerForParams(params: ExternalSourceParams): RegisterTriggerBodyV2 { const key = slugifyId(this.source.key(params)); diff --git a/packages/trigger-sdk/src/triggers/scheduled.ts b/packages/trigger-sdk/src/triggers/scheduled.ts index fed614eb6d..b7deaeecc8 100644 --- a/packages/trigger-sdk/src/triggers/scheduled.ts +++ b/packages/trigger-sdk/src/triggers/scheduled.ts @@ -11,6 +11,7 @@ import { Job } from "../job"; import { TriggerClient } from "../triggerClient"; import { EventSpecification, Trigger } from "../types"; import cronstrue from "cronstrue"; +import { runLocalStorage } from "../runLocalStorage"; type ScheduledEventSpecification = EventSpecification; @@ -146,7 +147,9 @@ export class DynamicSchedule implements Trigger { constructor( private client: TriggerClient, private options: DynamicIntervalOptions - ) {} + ) { + client.attachDynamicSchedule(this.options.id); + } get id() { return this.options.id; @@ -164,18 +167,61 @@ export class DynamicSchedule implements Trigger { } async register(key: string, metadata: ScheduleMetadata) { - return this.client.registerSchedule(this.id, key, metadata); + const runStore = runLocalStorage.getStore(); + + if (!runStore) { + return this.client.registerSchedule(this.id, key, metadata); + } + + const { io } = runStore; + + return await io.runTask( + key, + async (task) => { + return this.client.registerSchedule(this.id, key, metadata); + }, + { + name: "Register Schedule", + icon: metadata.type === "cron" ? "schedule-cron" : "schedule-interval", + properties: [ + { label: "Dynamic Schedule", text: this.id }, + { label: "Schedule ID", text: key }, + ], + params: metadata, + } + ); } async unregister(key: string) { - return this.client.unregisterSchedule(this.id, key); + const runStore = runLocalStorage.getStore(); + + if (!runStore) { + return this.client.unregisterSchedule(this.id, key); + } + + const { io } = runStore; + + return await io.runTask( + key, + async (task) => { + return this.client.unregisterSchedule(this.id, key); + }, + { + name: "Unregister Schedule", + icon: "schedule", + properties: [ + { label: "Dynamic Schedule", text: this.id }, + { label: "Schedule ID", text: key }, + ], + } + ); } attachToJob( triggerClient: TriggerClient, job: Job, any> ): void { - triggerClient.attachDynamicSchedule(this.options.id, job); + triggerClient.attachDynamicScheduleToJob(this.options.id, job); } get preprocessRuns() { diff --git a/packages/trigger-sdk/src/utils/typedAsyncLocalStorage.ts b/packages/trigger-sdk/src/utils/typedAsyncLocalStorage.ts new file mode 100644 index 0000000000..e06496fa6e --- /dev/null +++ b/packages/trigger-sdk/src/utils/typedAsyncLocalStorage.ts @@ -0,0 +1,17 @@ +import { AsyncLocalStorage } from "node:async_hooks"; + +export class TypedAsyncLocalStorage { + private storage: AsyncLocalStorage; + + constructor() { + this.storage = new AsyncLocalStorage(); + } + + runWith Promise>(context: T, fn: R): Promise> { + return this.storage.run(context, fn); + } + + getStore(): T | undefined { + return this.storage.getStore(); + } +} diff --git a/references/job-catalog/package.json b/references/job-catalog/package.json index 7d77bf5952..e4156caeed 100644 --- a/references/job-catalog/package.json +++ b/references/job-catalog/package.json @@ -22,24 +22,26 @@ "dynamic-triggers": "nodemon --watch src/dynamic-triggers.ts -r tsconfig-paths/register -r dotenv/config src/dynamic-triggers.ts", "background-fetch": "nodemon --watch src/background-fetch.ts -r tsconfig-paths/register -r dotenv/config src/background-fetch.ts", "status": "nodemon --watch src/status.ts -r tsconfig-paths/register -r dotenv/config src/status.ts", + "byo-auth": "nodemon --watch src/byo-auth.ts -r tsconfig-paths/register -r dotenv/config src/byo-auth.ts", "dev:trigger": "trigger-cli dev --port 8080" }, "dependencies": { + "@clerk/backend": "^0.29.1", + "@trigger.dev/airtable": "workspace:*", "@trigger.dev/express": "workspace:*", "@trigger.dev/github": "workspace:*", "@trigger.dev/openai": "workspace:*", "@trigger.dev/plain": "workspace:*", "@trigger.dev/resend": "workspace:*", - "@trigger.dev/sendgrid": "workspace:*", "@trigger.dev/sdk": "workspace:*", + "@trigger.dev/sendgrid": "workspace:*", "@trigger.dev/slack": "workspace:*", "@trigger.dev/stripe": "workspace:*", - "@trigger.dev/typeform": "workspace:*", "@trigger.dev/supabase": "workspace:*", + "@trigger.dev/typeform": "workspace:*", "@types/node": "20.4.2", "typescript": "5.1.6", - "zod": "3.21.4", - "@trigger.dev/airtable": "workspace:*" + "zod": "3.21.4" }, "trigger.dev": { "endpointId": "job-catalog" @@ -53,4 +55,4 @@ "ts-node": "^10.9.1", "tsconfig-paths": "^3.14.1" } -} +} \ No newline at end of file diff --git a/references/job-catalog/src/byo-auth.ts b/references/job-catalog/src/byo-auth.ts new file mode 100644 index 0000000000..b77aecc03d --- /dev/null +++ b/references/job-catalog/src/byo-auth.ts @@ -0,0 +1,123 @@ +import { createExpressServer } from "@trigger.dev/express"; +import { TriggerClient, eventTrigger } from "@trigger.dev/sdk"; +import { Resend } from "@trigger.dev/resend"; +import { Stripe } from "@trigger.dev/stripe"; +import { Slack } from "@trigger.dev/slack"; +import { OpenAI } from "@trigger.dev/openai"; +import { Clerk } from "@clerk/backend"; + +const clerk = Clerk({ apiKey: process.env.CLERK_API_KEY }); + +export const client = new TriggerClient({ + id: "job-catalog", + apiKey: process.env["TRIGGER_API_KEY"], + apiUrl: process.env["TRIGGER_API_URL"], + verbose: false, + ioLogLocalEnabled: true, +}); + +const resend = new Resend({ id: "resend" }); +const stripe = new Stripe({ + id: "stripe", +}); +const slack = new Slack({ id: "slack" }); +const openai = new OpenAI({ id: "openai" }); + +client.defineAuthResolver(resend, async (ctx, integration) => { + return { + type: "apiKey", + token: process.env.RESEND_API_KEY!, + additionalFields: { + baseUrl: "bar", + }, + }; +}); + +client.defineAuthResolver(stripe, async (ctx, integration) => { + return { + type: "apiKey", + token: process.env.STRIPE_API_KEY!, + }; +}); + +client.defineAuthResolver(slack, async (ctx, integration) => { + if (!ctx.account?.id) { + return; + } + + const tokens = await clerk.users.getUserOauthAccessToken(ctx.account.id, "oauth_slack"); + + if (tokens.length === 0) { + throw new Error(`Could not find Slack auth for account ${ctx.account.id}`); + } + + return { + type: "oauth", + token: tokens[0].token, + }; +}); + +client.defineAuthResolver(openai, async (ctx, integration) => { + return { + type: "apiKey", + token: process.env.OPENAI_API_KEY!, + }; +}); + +client.defineJob({ + id: "send-account-event", + name: "Send Account Event", + version: "1.0.0", + enabled: true, + trigger: eventTrigger({ + name: "foo.bar", + }), + integrations: { + resend, + stripe, + slack, + openai, + }, + run: async (payload, io, ctx) => { + await io.logger.info("Sending email with context", { ctx }); + + await io.slack.postMessage("πŸ’¬", { + channel: "C04GWUTDC3W", + text: "This is from an auth resolver", + }); + + await io.stripe.subscriptions.retrieve("πŸ€‘", { id: "1234" }); + + await io.resend.sendEmail("πŸ“§", { + subject: "Hello there", + text: "This is an email", + to: "eric@trigger.dev", + from: "hi@email.trigger.dev", + }); + }, +}); + +const dynamicInterval = client.defineDynamicSchedule({ id: "dynamic-schedule" }); + +client.defineJob({ + id: "register-interval", + name: "Register Interval for Account", + version: "0.0.1", + trigger: eventTrigger({ + name: "register.interval", + }), + run: async (payload, io, ctx) => { + await slack.postMessage("πŸ€–", { + text: "asdas", + channel: "Asdas", + }); + + await dynamicInterval.register("schedule_123", { + type: "interval", + options: { seconds: 3600 }, // runs every hour + accountId: "user_123", // associate runs triggered by this schedule with user_123 + }); + }, +}); + +createExpressServer(client); From 7c0b7e95643142ae98ff01b37a24443b0b0536ac Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Thu, 21 Sep 2023 07:58:24 -0700 Subject: [PATCH 2/7] Added changeset --- .changeset/tiny-pillows-dream.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .changeset/tiny-pillows-dream.md diff --git a/.changeset/tiny-pillows-dream.md b/.changeset/tiny-pillows-dream.md new file mode 100644 index 0000000000..57c6e5ce1f --- /dev/null +++ b/.changeset/tiny-pillows-dream.md @@ -0,0 +1,16 @@ +--- +"@trigger.dev/airtable": patch +"@trigger.dev/sendgrid": patch +"@trigger.dev/supabase": patch +"@trigger.dev/typeform": patch +"@trigger.dev/sdk": patch +"@trigger.dev/github": patch +"@trigger.dev/openai": patch +"@trigger.dev/resend": patch +"@trigger.dev/stripe": patch +"@trigger.dev/plain": patch +"@trigger.dev/slack": patch +"@trigger.dev/core": patch +--- + +Add support for Bring Your Own Auth From 817d3f11ac99119db7b849ddc4587198fa2863ec Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Thu, 21 Sep 2023 08:38:28 -0700 Subject: [PATCH 3/7] Remove @internal from TriggerIntegration public methods --- integrations/airtable/src/index.ts | 3 --- integrations/github/src/index.ts | 3 --- integrations/openai/src/index.ts | 3 --- integrations/plain/src/index.ts | 1 - integrations/resend/src/index.ts | 7 ------- integrations/sendgrid/src/index.ts | 3 --- integrations/slack/src/index.ts | 3 --- integrations/stripe/src/index.ts | 3 --- integrations/supabase/src/database/index.ts | 3 --- integrations/supabase/src/management/index.ts | 3 --- integrations/typeform/src/index.ts | 3 --- 11 files changed, 35 deletions(-) diff --git a/integrations/airtable/src/index.ts b/integrations/airtable/src/index.ts index 3391e4c2b6..f8c2d99f15 100644 --- a/integrations/airtable/src/index.ts +++ b/integrations/airtable/src/index.ts @@ -43,7 +43,6 @@ export class Airtable implements TriggerIntegration { this._options = options; } - // @internal get authSource() { return this._options.token ? ("LOCAL" as const) : ("HOSTED" as const); } @@ -52,7 +51,6 @@ export class Airtable implements TriggerIntegration { return this._options.id; } - // @internal get metadata() { return { id: "airtable", name: "Airtable" }; } @@ -61,7 +59,6 @@ export class Airtable implements TriggerIntegration { return createWebhookEventSource(this); } - // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const airtable = new Airtable(this._options); airtable._io = io; diff --git a/integrations/github/src/index.ts b/integrations/github/src/index.ts index 525d8c025c..59e2dc968f 100644 --- a/integrations/github/src/index.ts +++ b/integrations/github/src/index.ts @@ -99,17 +99,14 @@ export class Github implements TriggerIntegration { return this.options.id; } - // @internal get metadata() { return { name: "GitHub", id: "github" }; } - // @internal get authSource() { return this._options.token ? ("LOCAL" as const) : ("HOSTED" as const); } - // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const github = new Github(this._options); github._io = io; diff --git a/integrations/openai/src/index.ts b/integrations/openai/src/index.ts index bef0265173..4f3e2283c9 100644 --- a/integrations/openai/src/index.ts +++ b/integrations/openai/src/index.ts @@ -58,12 +58,10 @@ export class OpenAI implements TriggerIntegration { }); } - // @internal get authSource() { return "LOCAL" as const; } - // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const apiKey = this._options.apiKey ?? auth?.accessToken; @@ -87,7 +85,6 @@ export class OpenAI implements TriggerIntegration { return this.options.id; } - // @internal get metadata() { return { id: "openai", name: "OpenAI" }; } diff --git a/integrations/plain/src/index.ts b/integrations/plain/src/index.ts index 345a719a19..1761f5da80 100644 --- a/integrations/plain/src/index.ts +++ b/integrations/plain/src/index.ts @@ -68,7 +68,6 @@ export class Plain implements TriggerIntegration { return this.options.id; } - // @internal get metadata() { return { id: "plain", name: "Plain.com" }; } diff --git a/integrations/resend/src/index.ts b/integrations/resend/src/index.ts index 928c44edd2..f93be1964d 100644 --- a/integrations/resend/src/index.ts +++ b/integrations/resend/src/index.ts @@ -63,16 +63,10 @@ export class Resend implements TriggerIntegration { this._options = options; } - /** - * @internal - */ get authSource() { return this._options.apiKey ? ("LOCAL" as const) : ("HOSTED" as const); } - /** - * @internal - */ cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const apiKey = this._options.apiKey ?? auth?.accessToken; @@ -93,7 +87,6 @@ export class Resend implements TriggerIntegration { return this._options.id; } - // @internal get metadata() { return { id: "resend", name: "Resend.com" }; } diff --git a/integrations/sendgrid/src/index.ts b/integrations/sendgrid/src/index.ts index de7bf54dd5..49a1a55f2d 100644 --- a/integrations/sendgrid/src/index.ts +++ b/integrations/sendgrid/src/index.ts @@ -32,12 +32,10 @@ export class SendGrid implements TriggerIntegration { this._options = options; } - // @internal get authSource() { return this._options.apiKey ? ("LOCAL" as const) : ("HOSTED" as const); } - // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const apiKey = this._options.apiKey ?? auth?.accessToken; @@ -59,7 +57,6 @@ export class SendGrid implements TriggerIntegration { return this.options.id; } - // @internal get metadata() { return { id: "sendgrid", name: "SendGrid" }; } diff --git a/integrations/slack/src/index.ts b/integrations/slack/src/index.ts index 978b55fce1..9a8571d4ce 100644 --- a/integrations/slack/src/index.ts +++ b/integrations/slack/src/index.ts @@ -60,7 +60,6 @@ export class Slack implements TriggerIntegration { this._options = options; } - // @internal get authSource() { return "HOSTED" as const; } @@ -69,12 +68,10 @@ export class Slack implements TriggerIntegration { return this.options.id; } - // @internal get metadata() { return { id: "slack", name: "Slack.com" }; } - // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const slack = new Slack(this._options); slack._io = io; diff --git a/integrations/stripe/src/index.ts b/integrations/stripe/src/index.ts index 7ab7d79c36..1dd96f44b4 100644 --- a/integrations/stripe/src/index.ts +++ b/integrations/stripe/src/index.ts @@ -75,12 +75,10 @@ export class Stripe implements TriggerIntegration { : undefined; } - // @internal get authSource() { return "LOCAL" as const; } - // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const apiKey = this._options.apiKey ?? auth?.accessToken; @@ -112,7 +110,6 @@ export class Stripe implements TriggerIntegration { return this.options.id; } - // @internal get metadata() { return { id: "stripe", name: "Stripe" }; } diff --git a/integrations/supabase/src/database/index.ts b/integrations/supabase/src/database/index.ts index 16e01c8cb5..40816163e1 100644 --- a/integrations/supabase/src/database/index.ts +++ b/integrations/supabase/src/database/index.ts @@ -99,7 +99,6 @@ export class Supabase< }); } - // @internal get authSource() { return "LOCAL" as const; } @@ -108,7 +107,6 @@ export class Supabase< return this.options.id; } - // @internal get metadata() { return { id: "supabase", name: "Supabase" }; } @@ -120,7 +118,6 @@ export class Supabase< return this._client; } - // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const supabase = new Supabase(this._options); supabase._io = io; diff --git a/integrations/supabase/src/management/index.ts b/integrations/supabase/src/management/index.ts index 78611a480a..6d638abf00 100644 --- a/integrations/supabase/src/management/index.ts +++ b/integrations/supabase/src/management/index.ts @@ -289,7 +289,6 @@ export class SupabaseManagement implements TriggerIntegration { return this.options.id; } - // @internal get metadata() { return { id: "supabase-management", name: "Supabase Management API" }; } @@ -298,7 +297,6 @@ export class SupabaseManagement implements TriggerIntegration { return createWebhookEventSource(this); } - // @internal get authSource() { if ("apiKey" in this._options) { return "LOCAL"; @@ -307,7 +305,6 @@ export class SupabaseManagement implements TriggerIntegration { return "HOSTED" as const; } - // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const supabase = new SupabaseManagement(this._options); supabase._io = io; diff --git a/integrations/typeform/src/index.ts b/integrations/typeform/src/index.ts index 6d84284e6d..c2696453c2 100644 --- a/integrations/typeform/src/index.ts +++ b/integrations/typeform/src/index.ts @@ -50,7 +50,6 @@ export class Typeform implements TriggerIntegration { this._options = options; } - // @internal get authSource() { return "LOCAL" as const; } @@ -59,12 +58,10 @@ export class Typeform implements TriggerIntegration { return this.options.id; } - // @internal get metadata() { return { id: "typeform", name: "Typeform" }; } - // @internal cloneForRun(io: IO, connectionKey: string, auth?: ConnectionAuth) { const token = this._options.token ?? auth?.accessToken; From a159a9d7daf6dfc55793e25ae13db3810c70dd8e Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Thu, 21 Sep 2023 08:46:07 -0700 Subject: [PATCH 4/7] Add void to the result union --- packages/trigger-sdk/src/triggerClient.ts | 2 +- references/job-catalog/src/byo-auth.ts | 2 + references/job-catalog/tsconfig.json | 127 ++++++---------------- 3 files changed, 35 insertions(+), 96 deletions(-) diff --git a/packages/trigger-sdk/src/triggerClient.ts b/packages/trigger-sdk/src/triggerClient.ts index 8e42fa4f33..30ee9c0e40 100644 --- a/packages/trigger-sdk/src/triggerClient.ts +++ b/packages/trigger-sdk/src/triggerClient.ts @@ -85,7 +85,7 @@ export type AuthResolverResult = { export type TriggerAuthResolver = ( ctx: TriggerContext, integration: TriggerIntegration -) => Promise; +) => Promise; /** A [TriggerClient](https://trigger.dev/docs/documentation/concepts/client-adaptors) is used to connect to a specific [Project](https://trigger.dev/docs/documentation/concepts/projects) by using an [API Key](https://trigger.dev/docs/documentation/concepts/environments-apikeys). */ export class TriggerClient { diff --git a/references/job-catalog/src/byo-auth.ts b/references/job-catalog/src/byo-auth.ts index b77aecc03d..5a947c7caa 100644 --- a/references/job-catalog/src/byo-auth.ts +++ b/references/job-catalog/src/byo-auth.ts @@ -33,6 +33,8 @@ client.defineAuthResolver(resend, async (ctx, integration) => { }; }); +client.defineAuthResolver(resend, async (ctx, integration) => {}); + client.defineAuthResolver(stripe, async (ctx, integration) => { return { type: "apiKey", diff --git a/references/job-catalog/tsconfig.json b/references/job-catalog/tsconfig.json index 563b275458..a207e26610 100644 --- a/references/job-catalog/tsconfig.json +++ b/references/job-catalog/tsconfig.json @@ -1,102 +1,39 @@ { "extends": "@trigger.dev/tsconfig/node18.json", - "include": [ - "./src/**/*.ts" - ], + "include": ["./src/**/*.ts"], "compilerOptions": { "baseUrl": ".", - "lib": [ - "DOM", - "DOM.Iterable" - ], + "lib": ["DOM", "DOM.Iterable"], "paths": { - "@/*": [ - "./src/*" - ], - "@trigger.dev/sdk": [ - "../../packages/trigger-sdk/src/index" - ], - "@trigger.dev/sdk/*": [ - "../../packages/trigger-sdk/src/*" - ], - "@trigger.dev/express": [ - "../../packages/express/src/index" - ], - "@trigger.dev/express/*": [ - "../../packages/express/src/*" - ], - "@trigger.dev/core": [ - "../../packages/core/src/index" - ], - "@trigger.dev/core/*": [ - "../../packages/core/src/*" - ], - "@trigger.dev/integration-kit": [ - "../../packages/integration-kit/src/index" - ], - "@trigger.dev/integration-kit/*": [ - "../../packages/integration-kit/src/*" - ], - "@trigger.dev/github": [ - "../../integrations/github/src/index" - ], - "@trigger.dev/github/*": [ - "../../integrations/github/src/*" - ], - "@trigger.dev/slack": [ - "../../integrations/slack/src/index" - ], - "@trigger.dev/slack/*": [ - "../../integrations/slack/src/*" - ], - "@trigger.dev/openai": [ - "../../integrations/openai/src/index" - ], - "@trigger.dev/openai/*": [ - "../../integrations/openai/src/*" - ], - "@trigger.dev/resend": [ - "../../integrations/resend/src/index" - ], - "@trigger.dev/resend/*": [ - "../../integrations/resend/src/*" - ], - "@trigger.dev/typeform": [ - "../../integrations/typeform/src/index" - ], - "@trigger.dev/typeform/*": [ - "../../integrations/typeform/src/*" - ], - "@trigger.dev/plain": [ - "../../integrations/plain/src/index" - ], - "@trigger.dev/plain/*": [ - "../../integrations/plain/src/*" - ], - "@trigger.dev/supabase": [ - "../../integrations/supabase/src/index" - ], - "@trigger.dev/supabase/*": [ - "../../integrations/supabase/src/*" - ], - "@trigger.dev/stripe": [ - "../../integrations/stripe/src/index" - ], - "@trigger.dev/stripe/*": [ - "../../integrations/stripe/src/*" - ], - "@trigger.dev/sendgrid": [ - "../../integrations/sendgrid/src/index" - ], - "@trigger.dev/sendgrid/*": [ - "../../integrations/sendgrid/src/*" - ], - "@trigger.dev/airtable": [ - "../../integrations/airtable/src/index" - ], - "@trigger.dev/airtable/*": [ - "../../integrations/airtable/src/*" - ] + "@/*": ["./src/*"], + "@trigger.dev/sdk": ["../../packages/trigger-sdk/src/index"], + "@trigger.dev/sdk/*": ["../../packages/trigger-sdk/src/*"], + "@trigger.dev/express": ["../../packages/express/src/index"], + "@trigger.dev/express/*": ["../../packages/express/src/*"], + "@trigger.dev/core": ["../../packages/core/src/index"], + "@trigger.dev/core/*": ["../../packages/core/src/*"], + "@trigger.dev/integration-kit": ["../../packages/integration-kit/src/index"], + "@trigger.dev/integration-kit/*": ["../../packages/integration-kit/src/*"], + "@trigger.dev/github": ["../../integrations/github/src/index"], + "@trigger.dev/github/*": ["../../integrations/github/src/*"], + "@trigger.dev/slack": ["../../integrations/slack/src/index"], + "@trigger.dev/slack/*": ["../../integrations/slack/src/*"], + "@trigger.dev/openai": ["../../integrations/openai/src/index"], + "@trigger.dev/openai/*": ["../../integrations/openai/src/*"], + "@trigger.dev/resend": ["../../integrations/resend/src/index"], + "@trigger.dev/resend/*": ["../../integrations/resend/src/*"], + "@trigger.dev/typeform": ["../../integrations/typeform/src/index"], + "@trigger.dev/typeform/*": ["../../integrations/typeform/src/*"], + "@trigger.dev/plain": ["../../integrations/plain/src/index"], + "@trigger.dev/plain/*": ["../../integrations/plain/src/*"], + "@trigger.dev/supabase": ["../../integrations/supabase/src/index"], + "@trigger.dev/supabase/*": ["../../integrations/supabase/src/*"], + "@trigger.dev/stripe": ["../../integrations/stripe/src/index"], + "@trigger.dev/stripe/*": ["../../integrations/stripe/src/*"], + "@trigger.dev/sendgrid": ["../../integrations/sendgrid/src/index"], + "@trigger.dev/sendgrid/*": ["../../integrations/sendgrid/src/*"], + "@trigger.dev/airtable": ["../../integrations/airtable/src/index"], + "@trigger.dev/airtable/*": ["../../integrations/airtable/src/*"] } } -} \ No newline at end of file +} From dc77542ec792525dd86948d4842c98588773e5e0 Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Thu, 21 Sep 2023 14:34:43 -0700 Subject: [PATCH 5/7] DynamicTriggers now work with the new BYO auth system, and added a bunch of docs and docs changes --- .../registerTriggerSourceV2.server.ts | 4 +- docs/_snippets/jobs/options.mdx | 49 +++++++ .../concepts/triggers/dynamic.mdx | 32 ++--- .../guides/using-integrations-byo-auth.mdx | 136 +++++++++++++++++- .../guides/using-integrations.mdx | 8 ++ docs/mint.json | 6 +- docs/sdk/dynamicschedule/overview.mdx | 13 +- docs/sdk/dynamicschedule/register.mdx | 22 ++- docs/sdk/dynamictrigger/constructor.mdx | 5 +- docs/sdk/dynamictrigger/overview.mdx | 23 ++- docs/sdk/dynamictrigger/register.mdx | 21 ++- docs/sdk/io/registercron.mdx | 4 + docs/sdk/io/registerinterval.mdx | 4 + docs/sdk/io/registertrigger.mdx | 8 +- docs/sdk/io/unregistercron.mdx | 4 + docs/sdk/io/unregisterinterval.mdx | 4 + docs/sdk/io/unregistertrigger.mdx | 4 + docs/sdk/job.mdx | 50 +------ .../instancemethods/define-auth-resolver.mdx | 67 +++++++++ .../define-dynamic-schedule.mdx | 29 ++++ .../define-dynamic-trigger.mdx | 38 +++++ .../instancemethods/define-job.mdx | 35 +++++ .../instancemethods/sendevent.mdx | 2 +- packages/core/src/schemas/api.ts | 1 + packages/trigger-sdk/src/apiClient.ts | 4 +- packages/trigger-sdk/src/io.ts | 7 +- packages/trigger-sdk/src/triggerClient.ts | 13 +- packages/trigger-sdk/src/triggers/dynamic.ts | 54 ++++++- .../src/triggers/externalSource.ts | 4 +- .../trigger-sdk/src/triggers/scheduled.ts | 4 +- references/job-catalog/src/byo-auth.ts | 77 +++++++++- .../job-catalog/src/dynamic-schedule.ts | 4 +- .../job-catalog/src/dynamic-triggers.ts | 4 +- 33 files changed, 609 insertions(+), 131 deletions(-) create mode 100644 docs/_snippets/jobs/options.mdx create mode 100644 docs/sdk/triggerclient/instancemethods/define-auth-resolver.mdx create mode 100644 docs/sdk/triggerclient/instancemethods/define-dynamic-schedule.mdx create mode 100644 docs/sdk/triggerclient/instancemethods/define-dynamic-trigger.mdx create mode 100644 docs/sdk/triggerclient/instancemethods/define-job.mdx diff --git a/apps/webapp/app/services/triggers/registerTriggerSourceV2.server.ts b/apps/webapp/app/services/triggers/registerTriggerSourceV2.server.ts index 861d4fb9ad..3118e58a1c 100644 --- a/apps/webapp/app/services/triggers/registerTriggerSourceV2.server.ts +++ b/apps/webapp/app/services/triggers/registerTriggerSourceV2.server.ts @@ -24,7 +24,6 @@ export class RegisterTriggerSourceServiceV2 { endpointSlug, id, key, - accountId, registrationMetadata, }: { environment: AuthenticatedEnvironment; @@ -32,7 +31,6 @@ export class RegisterTriggerSourceServiceV2 { id: string; endpointSlug: string; key: string; - accountId?: string; registrationMetadata?: any; }): Promise { const endpoint = await this.#prismaClient.endpoint.findUniqueOrThrow({ @@ -63,7 +61,7 @@ export class RegisterTriggerSourceServiceV2 { endpoint.id, payload.source, dynamicTrigger.id, - accountId, + payload.accountId, { id: key, metadata: registrationMetadata } ); diff --git a/docs/_snippets/jobs/options.mdx b/docs/_snippets/jobs/options.mdx new file mode 100644 index 0000000000..d9fb0cdcb4 --- /dev/null +++ b/docs/_snippets/jobs/options.mdx @@ -0,0 +1,49 @@ + + + + The `id` property is used to uniquely identify the Job. Only change this if you want to create a new Job. + + + The `name` of the Job that you want to appear in the dashboard and logs. You can change this without creating a new Job. + + + The `version` property is used to version your Job. A new version will be created if you change this property. We recommend using [semantic versioning](https://www.baeldung.com/cs/semantic-versioning), e.g. `1.0.3`. + + + The `trigger` property is used to define when the Job should run. There are currently the following Trigger types: + - [cronTrigger](/sdk/crontrigger) + - [intervalTrigger](/sdk/intervaltrigger) + - [eventTrigger](/sdk/eventtrigger) + - [DynamicTrigger](/sdk/dynamictrigger) + - [DynamicSchedule](/sdk/dynamicschedule) + - integration Triggers, like webhooks. See the [integrations](/integrations) page for more information. + + + This function gets called automatically when a Run is Triggered. It has three parameters: + 1. `payload` – The payload that was sent to the Trigger API. + 2. [io](/sdk/io) – An object that contains the integrations that you specified in the `integrations` property and other useful functions like delays and running Tasks. + 3. [context](/sdk/context) – An object that contains information about the Organization, Job, Run and more. + + This is where you put the code you want to run for a Job. You can use normal code in here and you can also use Tasks. + + You can return a value from this function and it will be sent back to the Trigger API. + + + Imports the specified integrations into the Job. The integrations will be available on the `io` object in the `run()` function with the same name as the key. For example: + + + + The `enabled` property is an optional property that specifies whether the Job is enabled or not. The Job will be enabled by default if you omit this property. When a job is disabled, no new runs will be triggered or resumed. In progress runs will continue to run until they are finished or delayed by using `io.wait`. + + + The `logLevel` property is an optional property that specifies the level of + logging for the Job. The level is inherited from the client if you omit this property. + - `log` - logs only essential messages + - `error` - logs error messages + - `warn` - logs errors and warning messages + - `info` - logs errors, warnings and info messages + - `debug` - logs everything with full verbosity + + + + diff --git a/docs/documentation/concepts/triggers/dynamic.mdx b/docs/documentation/concepts/triggers/dynamic.mdx index dda10dfede..5a12b2b5bc 100644 --- a/docs/documentation/concepts/triggers/dynamic.mdx +++ b/docs/documentation/concepts/triggers/dynamic.mdx @@ -12,7 +12,7 @@ Sometimes you don't know when you write the code what the trigger or schedule wi ```typescript //1. create a DynamicSchedule -const dynamicSchedule = new DynamicSchedule(client, { +const dynamicSchedule = client.defineDynamicSchedule({ id: "dynamicinterval", }); @@ -53,15 +53,18 @@ client.defineJob({ }), }), run: async (payload, io, ctx) => { - //6. Register the DynamicSchedule - await io.registerInterval("πŸ“†", dynamicSchedule, payload.userId, { - seconds: payload.seconds, + //6. Register the DynamicSchedule (this will automatically create a task) + await dynamicSchedule.register(userId, { + type: "cron", + options: { + cron: userSchedule, + }, }); await io.wait("wait", 60); - //7. Unregister the DynamicSchedule if you want - await io.unregisterInterval("βŒπŸ“†", dynamicSchedule, payload.id); + //7. Unregister the DynamicSchedule if you want (this will automatically create a task) + await dynamicSchedule.unregister(userId); }, }); ``` @@ -70,7 +73,7 @@ client.defineJob({ ```typescript //1. create a DynamicTrigger -const dynamicOnIssueOpenedTrigger = new DynamicTrigger(client, { +const dynamicOnIssueOpenedTrigger = client.defineDynamicTrigger({ id: "github-issue-opened", event: events.onIssueOpened, source: github.sources.repo, @@ -96,7 +99,7 @@ client.defineJob({ //3. Register the DynamicTrigger anywhere in your app async function registerRepo(owner: string, repo: string) { //the first param (key) should be unique - await dynamicOnIssueOpenedTrigger.register(`${owner}/${repo}`, { + await dynamicOnIssueOpenedTrigger.register(`${owner}-${repo}`, { owner, repo, }); @@ -114,15 +117,10 @@ client.defineJob({ }), run: async (payload, io, ctx) => { //6. Register the dynamic trigger so you get notified when an issue is opened - return await io.registerTrigger( - "register-repo", - dynamicOnIssueOpenedTrigger, - payload.repository.name, - { - owner: payload.repository.owner.login, - repo: payload.repository.name, - } - ); + await dynamicOnIssueOpenedTrigger.register(`${owner}-${repo}`, { + owner, + repo, + }); }, }); ``` diff --git a/docs/documentation/guides/using-integrations-byo-auth.mdx b/docs/documentation/guides/using-integrations-byo-auth.mdx index 499ff9d4ff..a46d94680b 100644 --- a/docs/documentation/guides/using-integrations-byo-auth.mdx +++ b/docs/documentation/guides/using-integrations-byo-auth.mdx @@ -331,7 +331,141 @@ await dynamicInterval.register(accountId, { ## Webhook Triggers -Support for Webhook triggers (i.e. Integration Triggers) is coming soon. +Running a job with an associated account ID that is triggered by a [Webhook Trigger](/documentation/concepts/triggers/webhook) requires converting to the use of a [Dynamic Trigger](/documentation/concepts/triggers/dynamic#dynamictrigger) + +Dynamic Trigger's work very similarly to Dynamic Schedules, but instead of registering schedules, you register triggers: + + + + +Using the GitHub integration we'll create a Dynamic Trigger that is triggered by the `onIssueOpened` event: + +```ts github.ts +import { Github, events } from "@trigger.dev/github"; + +const github = new Github({ + id: "github", +}); + +const dynamicOnIssueOpenedTrigger = client.defineDynamicTrigger({ + id: "github-issue-opened", + event: events.onIssueOpened, + source: github.sources.repo, +}); +``` + + + + + +Now we'll use the Dynamic Trigger to define a Job that is triggered by it: + +```ts github.ts +client.defineJob({ + id: "listen-for-dynamic-trigger", + name: "Listen for dynamic trigger", + version: "0.1.1", + trigger: dynamicOnIssueOpenedTrigger, + integrations: { + github, + }, + run: async (payload, io, ctx) => { + await io.github.issues.createComment("create-issue-comment", { + owner: payload.repository.owner.login, + repo: payload.repository.name, + issueNumber: payload.issue.number, + body: "First! πŸ₯‡", + }); + }, +}); +``` + + + + + +Define an Auth Resolver to fetch the GitHub OAuth token from Clerk.com: + +```ts github.ts +client.defineAuthResolver(github, async (ctx) => { + if (!ctx.account?.id) { + return; + } + + const tokens = await clerk.users.getUserOauthAccessToken(ctx.account.id, "oauth_github"); + + if (tokens.length === 0) { + throw new Error(`Could not find GitHub auth for account ${ctx.account.id}`); + } + + return { + type: "oauth", + token: tokens[0].token, + }; +}); +``` + + + If you are using clerk, you'll probably want to [Add additional + scopes](https://clerk.com/docs/authentication/social-connections/oauth#request-additional-o-auth-scopes-after-sign-up) + to be able to do useful things with the GitHub integration. For example, if you plan on + registering GitHub triggers you'll need `write:repo_hook` and `read:repo_hook` or just + `admin:repo_hook`. If you want to create issues you'll need `repo` or `public_repo`. + + + + + + + Finally, we can register a new Trigger at "runtime", either inside another Job run or in your backend: + +```ts github.ts +// Register inside another job run: +client.defineJob({ + id: "register-issue-opened", + name: "Register Issue Opened for Account", + version: "0.0.1", + trigger: eventTrigger({ + name: "register.issue.opened", + }), + run: async (payload, io, ctx) => { + // This will automatically create a task in this run with the `payload.id` as the Task Key. + await dynamicOnIssueOpenedTrigger.register( + payload.id, + { + owner: payload.owner, + repo: payload.repo, + }, + { + accountId: payload.accountId, + } + ); + }, +}); + +// Register in your backend: +// This skips creating a Task since it's outside a job and will just call our backend API directly +async function registerIssueOpenedTrigger( + id: string, + owner: string, + repo: string, + accountId?: string +) { + return await dynamicOnIssueOpenedTrigger.register( + id, + { + owner, + repo, + }, + { + accountId, + } + ); +} +``` + + + # Testing jobs with Account ID diff --git a/docs/documentation/guides/using-integrations.mdx b/docs/documentation/guides/using-integrations.mdx index 7c7a260f70..b2a3dc8bf5 100644 --- a/docs/documentation/guides/using-integrations.mdx +++ b/docs/documentation/guides/using-integrations.mdx @@ -37,6 +37,14 @@ There are two ways to authenticate Integrations, OAuth and API Keys/Access Token > Use OAuth to connect an Integration for your team or your users + + Use our integrations with your user’s auth credentials, using Clerk.com, Nango.dev, or rolling + your own with our custom auth resolvers + ## Using for Jobs & Tasks diff --git a/docs/mint.json b/docs/mint.json index 1a28926553..3e889d254f 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -276,7 +276,11 @@ "sdk/triggerclient/instancemethods/sendevent", "sdk/triggerclient/instancemethods/getevent", "sdk/triggerclient/instancemethods/getruns", - "sdk/triggerclient/instancemethods/getrun" + "sdk/triggerclient/instancemethods/getrun", + "sdk/triggerclient/instancemethods/define-job", + "sdk/triggerclient/instancemethods/define-dynamic-trigger", + "sdk/triggerclient/instancemethods/define-dynamic-schedule", + "sdk/triggerclient/instancemethods/define-auth-resolver" ] } ] diff --git a/docs/sdk/dynamicschedule/overview.mdx b/docs/sdk/dynamicschedule/overview.mdx index 4525aac74c..f6faaa0a80 100644 --- a/docs/sdk/dynamicschedule/overview.mdx +++ b/docs/sdk/dynamicschedule/overview.mdx @@ -34,7 +34,7 @@ Use this method to unregister a schedule from the DynamicSchedule, using the id ```typescript //1. create a DynamicSchedule -const dynamicSchedule = new DynamicSchedule(client, { +const dynamicSchedule = client.defineDynamicSchedule({ id: "dynamicinterval", }); @@ -76,14 +76,17 @@ client.defineJob({ }), run: async (payload, io, ctx) => { //6. Register the DynamicSchedule - await io.registerInterval("πŸ“†", dynamicSchedule, payload.userId, { - seconds: payload.seconds, + await dynamicSchedule.register(payload.userId, { + type: "interval", + options: { + seconds: payload.seconds, + }, }); await io.wait("wait", 60); - //7. Unregister the DynamicSchedule if you want - await io.unregisterInterval("βŒπŸ“†", dynamicSchedule, payload.id); + //7. Unregister the DynamicSchedule at some later date + await dynamicSchedule.unregister(payload.userId); }, }); ``` diff --git a/docs/sdk/dynamicschedule/register.mdx b/docs/sdk/dynamicschedule/register.mdx index 71b9cd76c5..8b15bcc164 100644 --- a/docs/sdk/dynamicschedule/register.mdx +++ b/docs/sdk/dynamicschedule/register.mdx @@ -7,8 +7,8 @@ description: "Use this method to register a new schedule with the DynamicSchedul ## Parameters - The id of the schedule to register. The identifier you use will be available - in the `context.source.id` when the Job runs. + The id of the schedule to register. The identifier you use will be available in the + `context.source.id` when the Job runs. The schedule to register. It is either a `cron` or `interval` schedule. @@ -24,8 +24,13 @@ description: "Use this method to register a new schedule with the DynamicSchedul - Any additional data you wish to store with the schedule. This will be - available in the `context.source.metadata` when the Job runs. + Any additional data you wish to store with the schedule. This will be available in the + `context.source.metadata` when the Job runs. + + + An optional account ID to use when running the job. This will be available in the Job + [context](/sdk/context) and can be used in [auth + resolvers](/sdk/triggerclient/instancemethods/define-auth-resolver) @@ -40,8 +45,13 @@ description: "Use this method to register a new schedule with the DynamicSchedul - Any additional data you wish to store with the schedule. This will be - available in the `context.source.metadata` when the Job runs. + Any additional data you wish to store with the schedule. This will be available in the + `context.source.metadata` when the Job runs. + + + An optional account ID to use when running the job. This will be available in the Job + [context](/sdk/context) and can be used in [auth + resolvers](/sdk/triggerclient/instancemethods/define-auth-resolver) diff --git a/docs/sdk/dynamictrigger/constructor.mdx b/docs/sdk/dynamictrigger/constructor.mdx index 477d264e10..aea8078d00 100644 --- a/docs/sdk/dynamictrigger/constructor.mdx +++ b/docs/sdk/dynamictrigger/constructor.mdx @@ -16,9 +16,8 @@ description: "The `DynamicTrigger()` constructor creates a new [DynamicTrigger]( Used to uniquely identify a DynamicTrigger - An event from an [Integration](/integrations) package that you want to - attach to the DynamicTrigger. The event types will come through to the - payload in your Job's run. + An event from an [Integration](/integrations) package that you want to attach to the + DynamicTrigger. The event types will come through to the payload in your Job's run. An external source fron an [Integration](/integrations) package diff --git a/docs/sdk/dynamictrigger/overview.mdx b/docs/sdk/dynamictrigger/overview.mdx index c6626d90ac..b78330cf3b 100644 --- a/docs/sdk/dynamictrigger/overview.mdx +++ b/docs/sdk/dynamictrigger/overview.mdx @@ -9,7 +9,7 @@ Sometimes you want to subscribe to a webhook but you don't know the exact config ### [DynamicTrigger()](/sdk/dynamictrigger/constructor) -Creates a new `DynamicTrigger` instance. +Creates a new `DynamicTrigger` instance. You should use the [`TriggerClient.defineDynamicTrigger`]() method instead of calling this directly. ## Instance methods @@ -33,7 +33,7 @@ Use this method to unregister a schedule from the DynamicTrigger, using the id y ```typescript DynamicTrigger //1. create a DynamicTrigger -const dynamicOnIssueOpenedTrigger = new DynamicTrigger(client, { +const dynamicOnIssueOpenedTrigger = client.defineDynamicTrigger({ id: "github-issue-opened", event: events.onIssueOpened, source: github.sources.repo, @@ -59,7 +59,7 @@ client.defineJob({ //3. Register the DynamicTrigger anywhere in your app async function registerRepo(owner: string, repo: string) { //the first param (key) should be unique - await dynamicOnIssueOpenedTrigger.register(`${owner}/${repo}`, { + await dynamicOnIssueOpenedTrigger.register(`${owner}-${repo}`, { owner, repo, }); @@ -76,16 +76,13 @@ client.defineJob({ org: "triggerdotdev", }), run: async (payload, io, ctx) => { - //6. Register the dynamic trigger so you get notified when an issue is opened - return await io.registerTrigger( - "register-repo", - dynamicOnIssueOpenedTrigger, - payload.repository.name, - { - owner: payload.repository.owner.login, - repo: payload.repository.name, - } - ); + const owner = payload.repository.owner.login; + const repo = payload.repository.name; + //6. Register the dynamic trigger so you get notified when an issue is opened. A task will automatically be created + await dynamicOnIssueOpenedTrigger.register(`${owner}-${repo}`, { + owner, + repo, + }); }, }); ``` diff --git a/docs/sdk/dynamictrigger/register.mdx b/docs/sdk/dynamictrigger/register.mdx index 18136e7a71..95e2049c8c 100644 --- a/docs/sdk/dynamictrigger/register.mdx +++ b/docs/sdk/dynamictrigger/register.mdx @@ -7,12 +7,25 @@ description: "Use this method to register a new configuration with the DynamicTr ## Parameters - The id of the registration. The identifier you use will be available in the - `context.source.id` when the Job runs. It will also be used to unregister. + The id of the registration. The identifier you use will be available in the `context.source.id` + when the Job runs. It will also be used to unregister. - The shape of this object will depend on the type of event you set when - constructing the `DynamicTrigger`. + The shape of this object will depend on the type of event you set when constructing the + `DynamicTrigger`. + + + + + An optional account ID to use when running the job. This will be available in the Job + [context](/sdk/context) and can be used in [auth + resolvers](/sdk/triggerclient/instancemethods/define-auth-resolver) + + + An optional filter to apply to the event. See our [EventFilter + guide](/documentation/guides/event-filter) for more + + ## Returns diff --git a/docs/sdk/io/registercron.mdx b/docs/sdk/io/registercron.mdx index ab9bc9708a..769acc0913 100644 --- a/docs/sdk/io/registercron.mdx +++ b/docs/sdk/io/registercron.mdx @@ -4,6 +4,10 @@ sidebarTitle: "registerCron()" description: "`io.registerCron()` allows you to register a [DynamicSchedule](/sdk/dynamicschedule) that will trigger any jobs it's attached to on a regular CRON schedule." --- + + This has been deprecated in favor of [DynamicSchedule.register](/sdk/dynamicschedule/register) + + ## Parameters diff --git a/docs/sdk/io/registerinterval.mdx b/docs/sdk/io/registerinterval.mdx index 48ef44bbf3..7704267ec7 100644 --- a/docs/sdk/io/registerinterval.mdx +++ b/docs/sdk/io/registerinterval.mdx @@ -4,6 +4,10 @@ sidebarTitle: "registerInterval()" description: "`io.registerInterval()` allows you to register a [DynamicSchedule](/sdk/dynamicschedule) that will trigger any jobs it's attached to on a regular interval." --- + + This has been deprecated in favor of [DynamicSchedule.register](/sdk/dynamicschedule/register) + + ## Parameters diff --git a/docs/sdk/io/registertrigger.mdx b/docs/sdk/io/registertrigger.mdx index e3bf1fb029..6562ef8cef 100644 --- a/docs/sdk/io/registertrigger.mdx +++ b/docs/sdk/io/registertrigger.mdx @@ -4,6 +4,10 @@ sidebarTitle: "registerTrigger()" description: "`io.registerTrigger()` allows you to register a [DynamicTrigger](/sdk/dynamictrigger) with the specified trigger data." --- + + This has been deprecated in favor of [DynamicTrigger.register](/sdk/dynamictrigger/register) + + ## Parameters @@ -30,9 +34,9 @@ A Promise that resolves to an object with the following fields: ## Example -```typescript +```ts //1. create a DynamicTrigger -const dynamicOnIssueOpenedTrigger = new DynamicTrigger(client, { +const dynamicOnIssueOpenedTrigger = client.defineDynamicTrigger({ id: "github-issue-opened", event: events.onIssueOpened, source: github.sources.repo, diff --git a/docs/sdk/io/unregistercron.mdx b/docs/sdk/io/unregistercron.mdx index 7f750efef2..9b43e0e166 100644 --- a/docs/sdk/io/unregistercron.mdx +++ b/docs/sdk/io/unregistercron.mdx @@ -4,6 +4,10 @@ sidebarTitle: "unregisterCron()" description: "`io.unregisterCron()` allows you to unregister a [DynamicSchedule](/sdk/dynamicschedule) that was previously registered with `io.registerCron()`." --- + + This has been deprecated in favor of [DynamicSchedule.unregister](/sdk/dynamicschedule/unregister) + + ## Parameters diff --git a/docs/sdk/io/unregisterinterval.mdx b/docs/sdk/io/unregisterinterval.mdx index 86d0ff9bd7..7b5fcf3d25 100644 --- a/docs/sdk/io/unregisterinterval.mdx +++ b/docs/sdk/io/unregisterinterval.mdx @@ -4,6 +4,10 @@ sidebarTitle: "unregisterInterval()" description: "`io.unregisterInterval()` allows you to unregister a [DynamicSchedule](/sdk/dynamicschedule) that was previously registered with `io.registerInterval()`." --- + + This has been deprecated in favor of [DynamicSchedule.unregister](/sdk/dynamicschedule/unregister) + + ## Parameters diff --git a/docs/sdk/io/unregistertrigger.mdx b/docs/sdk/io/unregistertrigger.mdx index ca47e9541d..3fa9fa2c2f 100644 --- a/docs/sdk/io/unregistertrigger.mdx +++ b/docs/sdk/io/unregistertrigger.mdx @@ -4,6 +4,10 @@ sidebarTitle: "unregisterTrigger()" description: "`io.unregisterTrigger()` allows you to unregister a [DynamicTrigger](/sdk/dynamictrigger) that was previously registered with `io.registerTrigger()`." --- + + This has been deprecated in favor of [DynamicTrigger.unregister](/sdk/dynamictrigger/unregister) + + ## Parameters diff --git a/docs/sdk/job.mdx b/docs/sdk/job.mdx index a9bc27f818..229bbf13c5 100644 --- a/docs/sdk/job.mdx +++ b/docs/sdk/job.mdx @@ -59,55 +59,7 @@ client.defineJob({ An instance of [TriggerClient](/sdk/triggerclient) that is used to send events to the Trigger API. - - - - The `id` property is used to uniquely identify the Job. Only change this if you want to create a new Job. - - - The `name` of the Job that you want to appear in the dashboard and logs. You can change this without creating a new Job. - - - The `version` property is used to version your Job. A new version will be created if you change this property. We recommend using [semantic versioning](https://www.baeldung.com/cs/semantic-versioning), e.g. `1.0.3`. - - - The `trigger` property is used to define when the Job should run. There are currently the following Trigger types: - - [cronTrigger](/sdk/crontrigger) - - [intervalTrigger](/sdk/intervaltrigger) - - [eventTrigger](/sdk/eventtrigger) - - [DynamicTrigger](/sdk/dynamictrigger) - - [DynamicSchedule](/sdk/dynamicschedule) - - integration Triggers, like webhooks. See the [integrations](/integrations) page for more information. - - - This function gets called automatically when a Run is Triggered. It has three parameters: - 1. `payload` – The payload that was sent to the Trigger API. - 2. [io](/sdk/io) – An object that contains the integrations that you specified in the `integrations` property and other useful functions like delays and running Tasks. - 3. [context](/sdk/context) – An object that contains information about the Organization, Job, Run and more. - - This is where you put the code you want to run for a Job. You can use normal code in here and you can also use Tasks. - - You can return a value from this function and it will be sent back to the Trigger API. - - - Imports the specified integrations into the Job. The integrations will be available on the `io` object in the `run()` function with the same name as the key. For example: - - - - The `enabled` property is an optional property that specifies whether the Job is enabled or not. The Job will be enabled by default if you omit this property. When a job is disabled, no new runs will be triggered or resumed. In progress runs will continue to run until they are finished or delayed by using `io.wait`. - - - The `logLevel` property is an optional property that specifies the level of - logging for the Job. The level is inherited from the client if you omit this property. - - `log` - logs only essential messages - - `error` - logs error messages - - `warn` - logs errors and warning messages - - `info` - logs errors, warnings and info messages - - `debug` - logs everything with full verbosity - - - - + ## Returns diff --git a/docs/sdk/triggerclient/instancemethods/define-auth-resolver.mdx b/docs/sdk/triggerclient/instancemethods/define-auth-resolver.mdx new file mode 100644 index 0000000000..b6f34a577b --- /dev/null +++ b/docs/sdk/triggerclient/instancemethods/define-auth-resolver.mdx @@ -0,0 +1,67 @@ +--- +title: "defineAuthResolver()" +description: "Define a custom auth resolver for a specific integration" +--- + +Auth Resolvers allow you to inject the authentication credentials of **your users**, using a third-party service like [Clerk](https://clerk.com/) or [Nango](https://www.nango.dev/) or your own custom solution. + +See our [Bring-your-own Auth Guide](/documentation/guides/using-integrations-byo-auth) for more about how this works. + + + +```ts example +client.defineAuthResolver(slack, async (ctx) => { + if (!ctx.account?.id) { + return; + } + + const tokens = await clerk.users.getUserOauthAccessToken(ctx.account.id, "oauth_slack"); + + if (tokens.length === 0) { + throw new Error(`Could not find Slack auth for account ${ctx.account.id}`); + } + + return { + type: "oauth", + token: tokens[0].token, + }; +}); +``` + + + +## Parameters + + + The Integration client (e.g. `slack`) to define the auth resolver for. + + + + The resolver function to use for this integration. Should return a [AuthResolverResult](#authresolverresult) object. + +{" "} + + + + The [TriggerContext](/sdk/context) object for the run that is requesting authentication. + + + The Integration client that is requesting authentication. + + + + + +## AuthResolverResult + + + Should be either "apiKey" or "oauth" + + + + The authentication token to use for this integration. + + + + Additional fields to pass to the integration. + diff --git a/docs/sdk/triggerclient/instancemethods/define-dynamic-schedule.mdx b/docs/sdk/triggerclient/instancemethods/define-dynamic-schedule.mdx new file mode 100644 index 0000000000..3509ce38e3 --- /dev/null +++ b/docs/sdk/triggerclient/instancemethods/define-dynamic-schedule.mdx @@ -0,0 +1,29 @@ +--- +title: "defineDynamicSchedule()" +description: "Define a Dynamic Schedule" +--- + +## Parameters + + + The options for the dynamic schedule. + + + Used to uniquely identify a DynamicSchedule + + + + +## Returns + + + + + +```ts example +const dynamicSchedule = client.defineDynamicSchedule({ + id: "dynamicinterval", +}); +``` + + diff --git a/docs/sdk/triggerclient/instancemethods/define-dynamic-trigger.mdx b/docs/sdk/triggerclient/instancemethods/define-dynamic-trigger.mdx new file mode 100644 index 0000000000..42dd6b850c --- /dev/null +++ b/docs/sdk/triggerclient/instancemethods/define-dynamic-trigger.mdx @@ -0,0 +1,38 @@ +--- +title: "defineDynamicTrigger()" +description: "Define a Dynamic Trigger" +--- + +## Parameters + + + The options for the dynamic trigger. + + + Used to uniquely identify a DynamicTrigger + + + An event from an [Integration](/integrations) package that you want to attach to the + DynamicTrigger. The event types will come through to the payload in your Job's run. + + + An external source fron an [Integration](/integrations) package + + + + +## Returns + + + + + +```ts example +const dynamicOnIssueOpenedTrigger = client.defineDynamicTrigger({ + id: "github-issue-opened", + event: events.onIssueOpened, + source: github.sources.repo, +}); +``` + + diff --git a/docs/sdk/triggerclient/instancemethods/define-job.mdx b/docs/sdk/triggerclient/instancemethods/define-job.mdx new file mode 100644 index 0000000000..2b9732e1b0 --- /dev/null +++ b/docs/sdk/triggerclient/instancemethods/define-job.mdx @@ -0,0 +1,35 @@ +--- +title: "defineJob()" +description: "Defines a job" +--- + +A [Job](/documentation/concepts/jobs) is used to define the [Trigger](/documentation/concepts/triggers), metadata, and what happens when it runs. + + + +```ts example +client.defineJob({ + id: "github-integration-on-issue", + name: "GitHub Integration - On Issue", + version: "0.1.0", + trigger: github.triggers.repo({ + event: events.onIssue, + owner: "triggerdotdev", + repo: "empty", + }), + run: async (payload, io, ctx) => { + await io.logger.info("This is a simple log info message"); + return { payload, ctx }; + }, +}); +``` + + + +## Parameters + + + +## Returns + + diff --git a/docs/sdk/triggerclient/instancemethods/sendevent.mdx b/docs/sdk/triggerclient/instancemethods/sendevent.mdx index ba2c393b70..05c0b4bf88 100644 --- a/docs/sdk/triggerclient/instancemethods/sendevent.mdx +++ b/docs/sdk/triggerclient/instancemethods/sendevent.mdx @@ -4,7 +4,7 @@ sidebarTitle: "sendEvent()" description: "The `sendEvent()` instance method send an event that triggers any Jobs that are listening for that event (based on the name)." --- -You can call this function from anywhere in your code to send an event. The other way to send an event is by using [io.sendEvent()](/sdk/io/sendevent) from inside a `run()` function. +You can call this function from anywhere in your backend to send an event. The other way to send an event is by using [io.sendEvent()](/sdk/io/sendevent) from inside a `run()` function. Use [eventTrigger()](/sdk/eventtrigger) on a Job to listen for events. diff --git a/packages/core/src/schemas/api.ts b/packages/core/src/schemas/api.ts index 005fdff931..9f47e9de0f 100644 --- a/packages/core/src/schemas/api.ts +++ b/packages/core/src/schemas/api.ts @@ -683,6 +683,7 @@ export type RegisterTriggerBodyV1 = z.infer; export const RegisterTriggerBodySchemaV2 = z.object({ rule: EventRuleSchema, source: SourceMetadataV2Schema, + accountId: z.string().optional(), }); export type RegisterTriggerBodyV2 = z.infer; diff --git a/packages/trigger-sdk/src/apiClient.ts b/packages/trigger-sdk/src/apiClient.ts index f7a4bcb399..744a5cb8c9 100644 --- a/packages/trigger-sdk/src/apiClient.ts +++ b/packages/trigger-sdk/src/apiClient.ts @@ -12,8 +12,8 @@ import { LogLevel, Logger, RegisterScheduleResponseBodySchema, - RegisterSourceEventV2, RegisterSourceEventSchemaV2, + RegisterSourceEventV2, RunTaskBodyInput, ScheduleMetadata, SendEvent, @@ -21,12 +21,12 @@ import { ServerTaskSchema, TriggerSource, TriggerSourceSchema, - urlWithSearchParams, UpdateTriggerSourceBodyV2, RegisterTriggerBodyV2, GetRunStatusesSchema, JobRunStatusRecordSchema, StatusUpdate, + urlWithSearchParams, } from "@trigger.dev/core"; import fetch, { type RequestInit } from "node-fetch"; diff --git a/packages/trigger-sdk/src/io.ts b/packages/trigger-sdk/src/io.ts index 5e0101528f..62665e118c 100644 --- a/packages/trigger-sdk/src/io.ts +++ b/packages/trigger-sdk/src/io.ts @@ -351,6 +351,7 @@ export class IO { * @param id A unique id for the interval. This is used to identify and unregister the interval later. * @param options The options for the interval. * @returns A promise that has information about the interval. + * @deprecated Use `DynamicSchedule.register` instead. */ async registerInterval( key: string | any[], @@ -382,6 +383,7 @@ export class IO { * @param key Should be a stable and unique key inside the `run()`. See [resumability](https://trigger.dev/docs/documentation/concepts/resumability) for more information. * @param dynamicSchedule The [DynamicSchedule](https://trigger.dev/docs/sdk/dynamicschedule) to unregister a schedule on. * @param id A unique id for the interval. This is used to identify and unregister the interval later. + * @deprecated Use `DynamicSchedule.unregister` instead. */ async unregisterInterval(key: string | any[], dynamicSchedule: DynamicSchedule, id: string) { return await this.runTask( @@ -404,6 +406,7 @@ export class IO { * @param dynamicSchedule The [DynamicSchedule](https://trigger.dev/docs/sdk/dynamicschedule) to register a new schedule on. * @param id A unique id for the schedule. This is used to identify and unregister the schedule later. * @param options The options for the CRON schedule. + * @deprecated Use `DynamicSchedule.register` instead. */ async registerCron( key: string | any[], @@ -435,6 +438,7 @@ export class IO { * @param key Should be a stable and unique key inside the `run()`. See [resumability](https://trigger.dev/docs/documentation/concepts/resumability) for more information. * @param dynamicSchedule The [DynamicSchedule](https://trigger.dev/docs/sdk/dynamicschedule) to unregister a schedule on. * @param id A unique id for the interval. This is used to identify and unregister the interval later. + * @deprecated Use `DynamicSchedule.unregister` instead. */ async unregisterCron(key: string | any[], dynamicSchedule: DynamicSchedule, id: string) { return await this.runTask( @@ -457,6 +461,7 @@ export class IO { * @param trigger The [DynamicTrigger](https://trigger.dev/docs/sdk/dynamictrigger) to register. * @param id A unique id for the trigger. This is used to identify and unregister the trigger later. * @param params The params for the trigger. + * @deprecated Use `DynamicTrigger.register` instead. */ async registerTrigger< TTrigger extends DynamicTrigger, ExternalSource>, @@ -548,7 +553,7 @@ export class IO { const task = await this._apiClient.runTask(this._id, { idempotencyKey, - displayKey: typeof key === "string" ? key : undefined, + displayKey: typeof key === "string" ? key : key.join("."), noop: false, ...(options ?? {}), parentId, diff --git a/packages/trigger-sdk/src/triggerClient.ts b/packages/trigger-sdk/src/triggerClient.ts index 30ee9c0e40..ed8adaa924 100644 --- a/packages/trigger-sdk/src/triggerClient.ts +++ b/packages/trigger-sdk/src/triggerClient.ts @@ -37,7 +37,7 @@ import { IO } from "./io"; import { createIOWithIntegrations } from "./ioWithIntegrations"; import { Job, JobOptions } from "./job"; import { runLocalStorage } from "./runLocalStorage"; -import { DynamicTrigger } from "./triggers/dynamic"; +import { DynamicTrigger, DynamicTriggerOptions } from "./triggers/dynamic"; import { EventTrigger } from "./triggers/eventTrigger"; import { ExternalSource } from "./triggers/externalSource"; import { DynamicIntervalOptions, DynamicSchedule } from "./triggers/scheduled"; @@ -436,6 +436,15 @@ export class TriggerClient { return new DynamicSchedule(this, options); } + defineDynamicTrigger< + TEventSpec extends EventSpecification, + TExternalSource extends ExternalSource, + >( + options: DynamicTriggerOptions + ): DynamicTrigger { + return new DynamicTrigger(this, options); + } + attach(job: Job, any>): void { this.#registeredJobs[job.id] = job; @@ -445,7 +454,7 @@ export class TriggerClient { attachDynamicTrigger(trigger: DynamicTrigger): void { this.#registeredDynamicTriggers[trigger.id] = trigger; - new Job(this, { + this.defineJob({ id: dynamicTriggerRegisterSourceJobId(trigger.id), name: `Register dynamic trigger ${trigger.id}`, version: trigger.source.version, diff --git a/packages/trigger-sdk/src/triggers/dynamic.ts b/packages/trigger-sdk/src/triggers/dynamic.ts index 7bc59e6080..545f1869f7 100644 --- a/packages/trigger-sdk/src/triggers/dynamic.ts +++ b/packages/trigger-sdk/src/triggers/dynamic.ts @@ -9,6 +9,8 @@ import { TriggerClient } from "../triggerClient"; import { EventSpecification, Trigger } from "../types"; import { slugifyId } from "../utils"; import { ExternalSource, ExternalSourceParams } from "./externalSource"; +import { runLocalStorage } from "../runLocalStorage"; +import { EventFilter } from "@trigger.dev/core"; /** Options for a DynamicTrigger */ export type DynamicTriggerOptions< @@ -24,7 +26,7 @@ export type DynamicTriggerOptions< * ```ts * import { events } from "@trigger.dev/github"; * - * const dynamicOnIssueOpened = new DynamicTrigger(client, { + * const dynamicOnIssueOpened = client.defineDynamicTrigger({ id: "github-issue-opened", event: events.onIssueOpened, source: github.sources.repo, @@ -73,14 +75,21 @@ export class DynamicTrigger< } // @internal - registeredTriggerForParams(params: ExternalSourceParams): RegisterTriggerBodyV2 { + registeredTriggerForParams( + params: ExternalSourceParams, + options: { accountId?: string; filter?: EventFilter } = {} + ): RegisterTriggerBodyV2 { const key = slugifyId(this.source.key(params)); return { rule: { event: this.event.name, source: this.event.source, - payload: deepMergeFilters(this.source.filter(params), this.event.filter ?? {}), + payload: deepMergeFilters( + this.source.filter(params), + this.event.filter ?? {}, + options.filter ?? {} + ), }, source: { version: "2", @@ -97,18 +106,53 @@ export class DynamicTrigger< authSource: this.source.integration.authSource, }, }, + accountId: options.accountId, }; } /** Use this method to register a new configuration with the DynamicTrigger. * @param key The key for the configuration. This will be used to identify the configuration when it is triggered. * @param params The params for the configuration. + * @param options Options for the configuration. + * @param options.accountId The accountId to associate with the configuration. + * @param options.filter The filter to use for the configuration. + * */ async register( key: string, - params: ExternalSourceParams + params: ExternalSourceParams, + options: { accountId?: string; filter?: EventFilter } = {} ): Promise { - return this.#client.registerTrigger(this.id, key, this.registeredTriggerForParams(params)); + const runStore = runLocalStorage.getStore(); + + if (!runStore) { + return this.#client.registerTrigger( + this.id, + key, + this.registeredTriggerForParams(params, options) + ); + } + + const { io } = runStore; + + return await io.runTask( + key, + async (task) => { + return this.#client.registerTrigger( + this.id, + key, + this.registeredTriggerForParams(params, options) + ); + }, + { + name: "Register Dynamic Trigger", + properties: [ + { label: "Dynamic Trigger ID", text: this.id }, + { label: "ID", text: key }, + ], + params: params as any, + } + ); } attachToJob(triggerClient: TriggerClient, job: Job, any>): void { diff --git a/packages/trigger-sdk/src/triggers/externalSource.ts b/packages/trigger-sdk/src/triggers/externalSource.ts index ccc274bdc3..8fa50f0247 100644 --- a/packages/trigger-sdk/src/triggers/externalSource.ts +++ b/packages/trigger-sdk/src/triggers/externalSource.ts @@ -260,9 +260,7 @@ export class ExternalSource< } export type ExternalSourceParams> = - TExternalSource extends ExternalSource - ? TParams & { filter?: EventFilter } - : never; + TExternalSource extends ExternalSource ? TParams : never; export type ExternalSourceTriggerOptions< TEventSpecification extends EventSpecification, diff --git a/packages/trigger-sdk/src/triggers/scheduled.ts b/packages/trigger-sdk/src/triggers/scheduled.ts index b7deaeecc8..3dc2fe38e5 100644 --- a/packages/trigger-sdk/src/triggers/scheduled.ts +++ b/packages/trigger-sdk/src/triggers/scheduled.ts @@ -176,7 +176,7 @@ export class DynamicSchedule implements Trigger { const { io } = runStore; return await io.runTask( - key, + [key, "register"], async (task) => { return this.client.registerSchedule(this.id, key, metadata); }, @@ -202,7 +202,7 @@ export class DynamicSchedule implements Trigger { const { io } = runStore; return await io.runTask( - key, + [key, "unregister"], async (task) => { return this.client.unregisterSchedule(this.id, key); }, diff --git a/references/job-catalog/src/byo-auth.ts b/references/job-catalog/src/byo-auth.ts index 5a947c7caa..e77786bb13 100644 --- a/references/job-catalog/src/byo-auth.ts +++ b/references/job-catalog/src/byo-auth.ts @@ -4,6 +4,7 @@ import { Resend } from "@trigger.dev/resend"; import { Stripe } from "@trigger.dev/stripe"; import { Slack } from "@trigger.dev/slack"; import { OpenAI } from "@trigger.dev/openai"; +import { Github, events } from "@trigger.dev/github"; import { Clerk } from "@clerk/backend"; const clerk = Clerk({ apiKey: process.env.CLERK_API_KEY }); @@ -22,6 +23,7 @@ const stripe = new Stripe({ }); const slack = new Slack({ id: "slack" }); const openai = new OpenAI({ id: "openai" }); +const github = new Github({ id: "github" }); client.defineAuthResolver(resend, async (ctx, integration) => { return { @@ -42,6 +44,13 @@ client.defineAuthResolver(stripe, async (ctx, integration) => { }; }); +client.defineAuthResolver(github, async (ctx, integration) => { + return { + type: "apiKey", + token: process.env.GITHUB_PAT!, + }; +}); + client.defineAuthResolver(slack, async (ctx, integration) => { if (!ctx.account?.id) { return; @@ -109,15 +118,69 @@ client.defineJob({ name: "register.interval", }), run: async (payload, io, ctx) => { - await slack.postMessage("πŸ€–", { - text: "asdas", - channel: "Asdas", + await dynamicInterval.register("schedule_1235", { + type: "interval", + options: { seconds: payload.seconds }, // runs X seconds + accountId: "user_1235", // associate runs triggered by this schedule with user_123 }); + }, +}); - await dynamicInterval.register("schedule_123", { - type: "interval", - options: { seconds: 3600 }, // runs every hour - accountId: "user_123", // associate runs triggered by this schedule with user_123 +client.defineJob({ + id: "use-interval", + name: "Use Interval", + version: "0.0.1", + trigger: dynamicInterval, + run: async (payload, io, ctx) => { + await io.logger.info("Running interval", { ctx }); + }, +}); + +const dynamicOnIssueOpenedTrigger = client.defineDynamicTrigger({ + id: "github-issue-opened", + event: events.onIssueOpened, + source: github.sources.repo, +}); + +client.defineJob({ + id: "register-issue-opened", + name: "Register Issue Opened for Account", + version: "0.0.1", + trigger: eventTrigger({ + name: "register.issue.opened", + }), + run: async (payload, io, ctx) => { + await dynamicOnIssueOpenedTrigger.register( + payload.id, + { + owner: payload.owner, + repo: payload.repo, + }, + { + accountId: payload.accountId, + } + ); + }, +}); + +client.defineJob({ + id: "dynamic-issue-opened", + name: "Dynamic Issue Opened for Account", + version: "0.0.1", + trigger: dynamicOnIssueOpenedTrigger, + integrations: { + github, + }, + run: async (payload, io, ctx) => { + await io.github.issues.createComment("create-issue-comment", { + owner: payload.repository.owner.login, + repo: payload.repository.name, + issueNumber: payload.issue.number, + body: `Hello there: \n\n\`\`\`json\n${JSON.stringify( + payload, + null, + 2 + )}\`\`\`\n\n\`\`\`json\n${JSON.stringify(ctx, null, 2)}\`\`\``, }); }, }); diff --git a/references/job-catalog/src/dynamic-schedule.ts b/references/job-catalog/src/dynamic-schedule.ts index 1a9287362d..b3b7421951 100644 --- a/references/job-catalog/src/dynamic-schedule.ts +++ b/references/job-catalog/src/dynamic-schedule.ts @@ -1,5 +1,5 @@ -import { DynamicSchedule, TriggerClient, eventTrigger } from "@trigger.dev/sdk"; import { createExpressServer } from "@trigger.dev/express"; +import { TriggerClient, eventTrigger } from "@trigger.dev/sdk"; import { z } from "zod"; export const client = new TriggerClient({ @@ -10,7 +10,7 @@ export const client = new TriggerClient({ ioLogLocalEnabled: true, }); -const dynamicSchedule = new DynamicSchedule(client, { +const dynamicSchedule = client.defineDynamicSchedule({ id: "dynamic-interval", }); diff --git a/references/job-catalog/src/dynamic-triggers.ts b/references/job-catalog/src/dynamic-triggers.ts index fb2f82dadd..2aa80852c3 100644 --- a/references/job-catalog/src/dynamic-triggers.ts +++ b/references/job-catalog/src/dynamic-triggers.ts @@ -16,13 +16,13 @@ const github = new Github({ token: process.env["GITHUB_API_KEY"]!, }); -const dynamicOnIssueOpenedTrigger = new DynamicTrigger(client, { +const dynamicOnIssueOpenedTrigger = client.defineDynamicTrigger({ id: "github-issue-opened", event: events.onIssueOpened, source: github.sources.repo, }); -const dynamicUserTrigger = new DynamicTrigger(client, { +const dynamicUserTrigger = client.defineDynamicTrigger({ id: "dynamic-user-trigger", event: events.onIssueOpened, source: github.sources.repo, From 6134a2e704cc2ea21a8798933996e2ddbe64ca9d Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Thu, 21 Sep 2023 14:41:55 -0700 Subject: [PATCH 6/7] Add additional key material for registering dynamic trigger task --- packages/trigger-sdk/src/triggers/dynamic.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/trigger-sdk/src/triggers/dynamic.ts b/packages/trigger-sdk/src/triggers/dynamic.ts index 545f1869f7..84203e33d8 100644 --- a/packages/trigger-sdk/src/triggers/dynamic.ts +++ b/packages/trigger-sdk/src/triggers/dynamic.ts @@ -136,7 +136,7 @@ export class DynamicTrigger< const { io } = runStore; return await io.runTask( - key, + [key, "register"], async (task) => { return this.#client.registerTrigger( this.id, From d30345340e7a234e304fcb862860e3ded7d9c84c Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Thu, 21 Sep 2023 14:43:24 -0700 Subject: [PATCH 7/7] Add new define* instance methods to the overview --- docs/sdk/triggerclient/overview.mdx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/sdk/triggerclient/overview.mdx b/docs/sdk/triggerclient/overview.mdx index c9484812aa..f7583caeb0 100644 --- a/docs/sdk/triggerclient/overview.mdx +++ b/docs/sdk/triggerclient/overview.mdx @@ -43,3 +43,19 @@ The `getRuns()` method gets runs for a Job. #### [getRun()](/sdk/triggerclient/instancemethods/getrun) The `getRun()` method gets the details for a given Run. + +#### [defineJob()](/sdk/triggerclient/instancemethods/define-job) + +The `defineJob()` method defines a new Job. + +#### [defineDynamicTrigger()](/sdk/triggerclient/instancemethods/define-dynamic-trigger) + +The `defineDynamicTrigger()` method defines a new Dynamic Trigger. + +#### [defineDynamicSchedule()](/sdk/triggerclient/instancemethods/define-dynamic-schedule) + +The `defineDynamicSchedule()` method defines a new Dynamic Schedule. + +#### [defineAuthResolver()](/sdk/triggerclient/instancemethods/define-auth-resolver) + +The `defineAuthResolver()` method defines a new Auth Resolver.

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 literal 0 HcmV?d00001 diff --git a/docs/images/byo-auth/run-dashboard-account-id.png b/docs/images/byo-auth/run-dashboard-account-id.png new file mode 100644 index 0000000000000000000000000000000000000000..831fa882b2924127ac39aa3efd11e1998aab3433 GIT binary patch literal 156432 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