diff --git a/apps/webapp/app/services/accessToken.server.ts b/apps/webapp/app/services/accessToken.server.ts index e3c71b612..9feb74598 100644 --- a/apps/webapp/app/services/accessToken.server.ts +++ b/apps/webapp/app/services/accessToken.server.ts @@ -7,7 +7,15 @@ export async function getAccessToken( ): Promise { switch (connection.authenticationMethod) { case "OAUTH": { - return await pizzly.accessToken(connection.apiIdentifier, connection.id); + const accessToken = await pizzly.accessToken( + connection.apiIdentifier, + connection.id + ); + if (accessToken == null) { + return undefined; + } + //todo if it's an OAuth1 API then this will fail, as Pizzly returns an object + return accessToken as string; } case "API_KEY": { const parsed = apiKeyConfigSchema.safeParse( diff --git a/apps/webapp/app/services/externalSources/registerExternalSource.server.ts b/apps/webapp/app/services/externalSources/registerExternalSource.server.ts index c22d907a7..bc3e999ee 100644 --- a/apps/webapp/app/services/externalSources/registerExternalSource.server.ts +++ b/apps/webapp/app/services/externalSources/registerExternalSource.server.ts @@ -4,10 +4,8 @@ import crypto from "node:crypto"; import type { PrismaClient } from "~/db.server"; import { prisma } from "~/db.server"; import { env } from "~/env.server"; -import { apiKeyConfigSchema } from "~/models/apiConnection.server"; import { findExternalSourceById } from "~/models/externalSource.server"; import { getAccessToken } from "../accessToken.server"; -import { pizzly } from "../pizzly.server"; export class RegisterExternalSource { #prismaClient: PrismaClient; @@ -49,6 +47,10 @@ export class RegisterExternalSource { connection: APIConnection ) { const accessToken = await getAccessToken(connection); + if (accessToken == null) { + throw new Error("No access token found for webhook"); + } + const secret = crypto.randomBytes(32).toString("hex"); const webhookUrl = `${env.APP_ORIGIN}/api/v1/internal/webhooks/${connection.apiIdentifier}/${externalSource.id}`; diff --git a/apps/webapp/app/services/mergent.server.ts b/apps/webapp/app/services/mergent.server.ts deleted file mode 100644 index e312f1dd9..000000000 --- a/apps/webapp/app/services/mergent.server.ts +++ /dev/null @@ -1,4 +0,0 @@ -import Mergent from "mergent"; -import { env } from "~/env.server"; - -export const mergent = new Mergent(env.MERGENT_KEY); diff --git a/examples/github-webhook/src/index.ts b/examples/github-webhook/src/index.ts index 20f6c3d6b..5418f6ac7 100644 --- a/examples/github-webhook/src/index.ts +++ b/examples/github-webhook/src/index.ts @@ -7,7 +7,7 @@ const trigger = new Trigger({ apiKey: "trigger_dev_zC25mKNn6c0q", endpoint: "ws://localhost:8889/ws", logLevel: "debug", - on: github.triggers.repoIssueEvent({ repo: "triggerdotdev/trigger.dev" }), + on: github.events.repoIssueEvent({ repo: "triggerdotdev/trigger.dev" }), run: async (event, ctx) => { await ctx.logger.info( "Inside the github-webhook workflow, received event", diff --git a/examples/smoke-test/src/index.ts b/examples/smoke-test/src/index.ts index 01ba56e41..2aac737af 100644 --- a/examples/smoke-test/src/index.ts +++ b/examples/smoke-test/src/index.ts @@ -18,7 +18,10 @@ const trigger = new Trigger({ myDate: new Date(), }); - await ctx.fireEvent({ name: "smoke.test", payload: { baz: "banana" } }); + await ctx.fireEvent("start-fire", { + name: "smoke.test", + payload: { baz: "banana" }, + }); return { foo: "bar" }; }, diff --git a/packages/internal-integrations/package.json b/packages/internal-integrations/package.json index f187def69..a9e6fdf7a 100644 --- a/packages/internal-integrations/package.json +++ b/packages/internal-integrations/package.json @@ -7,6 +7,7 @@ "types": "./src/index.ts", "devDependencies": { "@trigger.dev/tsconfig": "workspace:*", + "internal-providers": "workspace:*", "@types/debug": "^4.1.7", "@types/node": "^18.11.9", "typescript": "^4.9.4" @@ -17,4 +18,4 @@ "debug": "^4.3.4", "zod": "^3.20.2" } -} \ No newline at end of file +} diff --git a/packages/internal-integrations/src/github/index.ts b/packages/internal-integrations/src/github/index.ts index dadfad6f9..c0e6b10c4 100644 --- a/packages/internal-integrations/src/github/index.ts +++ b/packages/internal-integrations/src/github/index.ts @@ -5,13 +5,8 @@ import { WebhookIntegration, } from "../types"; import { Webhooks } from "@octokit/webhooks"; - -import { - WebhookSourceSchema, - IssueEventSchema, - WebhookRepoSource, - WebhookOrganizationSource, -} from "./schemas"; +import { z } from "zod"; +import { github } from "internal-providers"; export class GitHubWebhookIntegration implements WebhookIntegration { keyForSource(source: unknown): string { @@ -115,14 +110,10 @@ export class GitHubWebhookIntegration implements WebhookIntegration { } export const webhooks = new GitHubWebhookIntegration(); -export const schemas = { - IssueEventSchema, - WebhookSourceSchema, -}; async function registerRepositoryWebhook( config: WebhookConfig, - source: WebhookRepoSource + source: z.infer ) { // Create the webhook in github const response = await fetch( @@ -160,7 +151,7 @@ async function registerRepositoryWebhook( async function registerOrganizationWebhook( config: WebhookConfig, - source: WebhookOrganizationSource + source: z.infer ) { // Create the webhook in github const response = await fetch( @@ -197,7 +188,7 @@ async function registerOrganizationWebhook( } function parseWebhookSource(source: unknown) { - return WebhookSourceSchema.parse(source); + return github.schemas.WebhookSourceSchema.parse(source); } function omit, K extends keyof T>( diff --git a/packages/internal-integrations/src/slack/index.ts b/packages/internal-integrations/src/slack/index.ts index e7bf259b0..bbc87a2b9 100644 --- a/packages/internal-integrations/src/slack/index.ts +++ b/packages/internal-integrations/src/slack/index.ts @@ -6,20 +6,7 @@ import { PerformRequestOptions, RequestIntegration, } from "../types"; -import { - PostMessageSuccessResponseSchema, - PostMessageResponseSchema, - PostMessageBodySchema, - JoinConversationResponseSchema, - JoinConversationBodySchema, - ListConversationsResponseSchema, -} from "./schemas"; - -export const schemas = { - PostMessageSuccessResponseSchema, - PostMessageResponseSchema, - PostMessageBodySchema, -}; +import { slack } from "internal-providers"; import debug from "debug"; @@ -27,25 +14,25 @@ const log = debug("trigger:integrations:slack"); class SlackRequestIntegration implements RequestIntegration { #joinChannelEndpoint = new HttpEndpoint< - typeof JoinConversationResponseSchema, - typeof JoinConversationBodySchema + typeof slack.schemas.JoinConversationResponseSchema, + typeof slack.schemas.JoinConversationBodySchema >({ - response: JoinConversationResponseSchema, + response: slack.schemas.JoinConversationResponseSchema, method: "POST", path: "/conversations.join", }); #listConversationsEndpoint = new HttpEndpoint({ - response: ListConversationsResponseSchema, + response: slack.schemas.ListConversationsResponseSchema, method: "GET", path: "/conversations.list", }); #postMessageEndpoint = new HttpEndpoint< - typeof PostMessageResponseSchema, - typeof PostMessageBodySchema + typeof slack.schemas.PostMessageResponseSchema, + typeof slack.schemas.PostMessageBodySchema >({ - response: PostMessageResponseSchema, + response: slack.schemas.PostMessageResponseSchema, method: "POST", path: "/chat.postMessage", }); @@ -91,7 +78,7 @@ class SlackRequestIntegration implements RequestIntegration { params: any, cache?: CacheService ): Promise { - const parsedParams = PostMessageBodySchema.parse(params); + const parsedParams = slack.schemas.PostMessageBodySchema.parse(params); log("chat.postMessage %O", parsedParams); diff --git a/packages/internal-integrations/tsconfig.json b/packages/internal-integrations/tsconfig.json index 6e9e7dcd1..24e1e4b24 100644 --- a/packages/internal-integrations/tsconfig.json +++ b/packages/internal-integrations/tsconfig.json @@ -1,6 +1,9 @@ { "extends": "@trigger.dev/tsconfig/node18.json", - "include": ["./src/**/*.ts"], + "include": [ + "./src/**/*.ts", + "../internal-providers/src/providers/slack/schemas.ts" + ], "compilerOptions": { "experimentalDecorators": true, "emitDecoratorMetadata": true, diff --git a/packages/internal-providers/src/index.ts b/packages/internal-providers/src/index.ts index 590bb8837..edbcf046c 100644 --- a/packages/internal-providers/src/index.ts +++ b/packages/internal-providers/src/index.ts @@ -1,16 +1,20 @@ -import { githubProvider } from "./providers/github"; -import { slackProvider } from "./providers/slack"; -import { Provider, ProviderCatalog } from "./types"; +import { github } from "./providers/github"; +import { slack } from "./providers/slack"; +import { Provider } from "./types"; export type { Provider, - ProviderCatalog, APIKeyAuthentication, OAuthAuthentication, } from "./types"; +const providerCatalog = { + providers: { github, slack }, +}; + export function getProviders(isAdmin: boolean): Provider[] { - return catalog.providers.filter((provider) => { + const providers = Object.values(providerCatalog.providers); + return providers.filter((provider) => { switch (provider.enabledFor) { case "all": return true; @@ -18,10 +22,10 @@ export function getProviders(isAdmin: boolean): Provider[] { return isAdmin; case "none": return false; + default: + return false; } - }); + }) as Provider[]; } -const catalog: ProviderCatalog = { - providers: [githubProvider, slackProvider], -}; +export { github, slack }; diff --git a/packages/internal-providers/src/providers/github.ts b/packages/internal-providers/src/providers/github/index.ts similarity index 80% rename from packages/internal-providers/src/providers/github.ts rename to packages/internal-providers/src/providers/github/index.ts index fb96466ed..1219780fc 100644 --- a/packages/internal-providers/src/providers/github.ts +++ b/packages/internal-providers/src/providers/github/index.ts @@ -1,6 +1,6 @@ -import { Provider } from "../types"; +import * as schemas from "./schemas"; -export const githubProvider: Provider = { +export const github = { name: "GitHub", slug: "github", icon: "/integrations/github.png", @@ -17,4 +17,5 @@ export const githubProvider: Provider = { }, }, }, + schemas, }; diff --git a/packages/internal-integrations/src/github/schemas.ts b/packages/internal-providers/src/providers/github/schemas.ts similarity index 97% rename from packages/internal-integrations/src/github/schemas.ts rename to packages/internal-providers/src/providers/github/schemas.ts index 01054ff51..ab00d0e3a 100644 --- a/packages/internal-integrations/src/github/schemas.ts +++ b/packages/internal-providers/src/providers/github/schemas.ts @@ -7,8 +7,6 @@ export const WebhookRepoSourceSchema = z.object({ events: z.array(z.string()), }); -export type WebhookRepoSource = z.infer; - export const WebhookOrganizationSourceSchema = z.object({ subresource: z.literal("organization"), scopes: z.array(z.string()), @@ -16,10 +14,6 @@ export const WebhookOrganizationSourceSchema = z.object({ events: z.array(z.string()), }); -export type WebhookOrganizationSource = z.infer< - typeof WebhookOrganizationSourceSchema ->; - export const WebhookSourceSchema = z.union([ WebhookRepoSourceSchema, WebhookOrganizationSourceSchema, diff --git a/packages/internal-providers/src/providers/slack.ts b/packages/internal-providers/src/providers/slack/index.ts similarity index 82% rename from packages/internal-providers/src/providers/slack.ts rename to packages/internal-providers/src/providers/slack/index.ts index 04b4187c6..cad902f44 100644 --- a/packages/internal-providers/src/providers/slack.ts +++ b/packages/internal-providers/src/providers/slack/index.ts @@ -1,6 +1,6 @@ -import { Provider } from "../types"; +import * as schemas from "./schemas"; -export const slackProvider: Provider = { +export const slack = { name: "Slack", slug: "slack", icon: "/integrations/slack.png", @@ -17,4 +17,5 @@ export const slackProvider: Provider = { }, }, }, + schemas, }; diff --git a/packages/internal-integrations/src/slack/schemas.ts b/packages/internal-providers/src/providers/slack/schemas.ts similarity index 100% rename from packages/internal-integrations/src/slack/schemas.ts rename to packages/internal-providers/src/providers/slack/schemas.ts diff --git a/packages/internal-providers/src/types.ts b/packages/internal-providers/src/types.ts index 682fd2e8c..a56583d9c 100644 --- a/packages/internal-providers/src/types.ts +++ b/packages/internal-providers/src/types.ts @@ -1,9 +1,12 @@ +import { ZodTypeAny } from "zod"; + export type Provider = { name: string; slug: string; icon: string; enabledFor: "all" | "admins" | "none"; authentication: OAuthAuthentication | APIKeyAuthentication; + schemas: Record; }; export type OAuthAuthentication = { @@ -20,5 +23,5 @@ export type APIKeyAuthentication = { }; export type ProviderCatalog = { - providers: Provider[]; + providers: Record; }; diff --git a/packages/trigger-integrations/package.json b/packages/trigger-integrations/package.json index 51d856471..0863c0f28 100644 --- a/packages/trigger-integrations/package.json +++ b/packages/trigger-integrations/package.json @@ -9,7 +9,7 @@ ], "devDependencies": { "@trigger.dev/tsconfig": "workspace:*", - "internal-integrations": "workspace:*", + "internal-providers": "workspace:*", "@types/node": "^18.11.9", "rimraf": "^3.0.2", "tsup": "^6.5.0" @@ -24,4 +24,4 @@ "zod": "^3.20.2", "@trigger.dev/sdk": "workspace:*" } -} \ No newline at end of file +} diff --git a/packages/trigger-integrations/src/integrations/github/triggers.ts b/packages/trigger-integrations/src/integrations/github/events.ts similarity index 96% rename from packages/trigger-integrations/src/integrations/github/triggers.ts rename to packages/trigger-integrations/src/integrations/github/events.ts index a6293c820..54d9b962a 100644 --- a/packages/trigger-integrations/src/integrations/github/triggers.ts +++ b/packages/trigger-integrations/src/integrations/github/events.ts @@ -1,5 +1,5 @@ import { TriggerEvent } from "@trigger.dev/sdk"; -import { github } from "internal-integrations"; +import { github } from "internal-providers"; export function repoIssueEvent(params: { repo: string; diff --git a/packages/trigger-integrations/src/integrations/github/index.ts b/packages/trigger-integrations/src/integrations/github/index.ts index b88eb7067..324692d48 100644 --- a/packages/trigger-integrations/src/integrations/github/index.ts +++ b/packages/trigger-integrations/src/integrations/github/index.ts @@ -1,3 +1,3 @@ -import * as triggers from "./triggers"; +import * as events from "./events"; -export { triggers }; +export { events }; diff --git a/packages/trigger-integrations/src/integrations/slack/index.ts b/packages/trigger-integrations/src/integrations/slack/index.ts index 7f30f7352..d521c6d9a 100644 --- a/packages/trigger-integrations/src/integrations/slack/index.ts +++ b/packages/trigger-integrations/src/integrations/slack/index.ts @@ -1,6 +1,6 @@ import { getTriggerRun } from "@trigger.dev/sdk"; import { z } from "zod"; -import { slack } from "internal-integrations"; +import { slack } from "internal-providers"; export type PostMessageOptions = z.infer< typeof slack.schemas.PostMessageBodySchema diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bdcfa84e4..3137749fa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -584,6 +584,7 @@ importers: '@types/debug': ^4.1.7 '@types/node': ^18.11.9 debug: ^4.3.4 + internal-providers: workspace:* typescript: ^4.9.4 zod: ^3.20.2 dependencies: @@ -594,6 +595,7 @@ importers: '@trigger.dev/tsconfig': link:../../config-packages/tsconfig '@types/debug': 4.1.7 '@types/node': 18.11.15 + internal-providers: link:../internal-providers typescript: 4.9.4 packages/internal-platform: @@ -623,11 +625,9 @@ importers: '@types/node': ^18.11.9 tiny-invariant: ^1.2.0 typescript: ^4.9.4 - yaml: ^2.2.0 zod: ^3.20.2 dependencies: tiny-invariant: 1.3.1 - yaml: 2.2.0 zod: 3.20.2 devDependencies: '@trigger.dev/tsconfig': link:../../config-packages/tsconfig @@ -664,7 +664,7 @@ importers: '@trigger.dev/sdk': workspace:* '@trigger.dev/tsconfig': workspace:* '@types/node': ^18.11.9 - internal-integrations: workspace:* + internal-providers: workspace:* rimraf: ^3.0.2 tsup: ^6.5.0 zod: ^3.20.2 @@ -674,7 +674,7 @@ importers: devDependencies: '@trigger.dev/tsconfig': link:../../config-packages/tsconfig '@types/node': 18.11.11 - internal-integrations: link:../internal-integrations + internal-providers: link:../internal-providers rimraf: 3.0.2 tsup: 6.5.0 @@ -17019,11 +17019,6 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - /yaml/2.2.0: - resolution: {integrity: sha512-auf7Gi6QwO7HW//GA9seGvTXVGWl1CM/ADWh1+RxtXr6XOxnT65ovDl9fTi4e0monEyJxCHqDpF6QnFDXmJE4g==} - engines: {node: '>= 14'} - dev: false - /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'}