From efd590976c28034b363e267403bf1adabcd2d492 Mon Sep 17 00:00:00 2001 From: Ashutosh Bhadauriya Date: Mon, 31 Jul 2023 21:13:44 +0530 Subject: [PATCH] Feat: Detect if a Next.js project is running on the specified port before opening a tunnel (#214) * Feat: Detect nextjs project * Add check before opening tunnel * Update dev.ts * Add changeset --- .changeset/blue-monkeys-speak.md | 5 +++++ packages/cli/src/commands/dev.ts | 20 ++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 .changeset/blue-monkeys-speak.md diff --git a/.changeset/blue-monkeys-speak.md b/.changeset/blue-monkeys-speak.md new file mode 100644 index 000000000..41e0de0b7 --- /dev/null +++ b/.changeset/blue-monkeys-speak.md @@ -0,0 +1,5 @@ +--- +"@trigger.dev/cli": patch +--- + +Detect if a nextjs project is running on the specified port before opening tunnel diff --git a/packages/cli/src/commands/dev.ts b/packages/cli/src/commands/dev.ts index 56e3ebd1d..bb0ac43cd 100644 --- a/packages/cli/src/commands/dev.ts +++ b/packages/cli/src/commands/dev.ts @@ -9,6 +9,7 @@ import { logger } from "../utils/logger.js"; import { resolvePath } from "../utils/parseNameAndPath.js"; import { TriggerApi } from "../utils/triggerApi.js"; import dotenv from "dotenv"; +import fetch from "node-fetch"; export const DevCommandOptionsSchema = z.object({ port: z.coerce.number(), @@ -48,7 +49,7 @@ export async function devCommand(path: string, anyOptions: any) { logger.success(`✔️ [trigger.dev] Detected TriggerClient id: ${endpointId}`); // Read from .env.local or .env to get the TRIGGER_API_KEY and TRIGGER_API_URL - const { apiUrl, envFile } = await getTriggerApiDetails( + const { apiUrl, envFile, apiKey } = await getTriggerApiDetails( resolvedPath, options.envFile ); @@ -59,9 +60,24 @@ export async function devCommand(path: string, anyOptions: any) { ` [trigger.dev] Looking for Next.js site on port ${options.port}` ); + const localEndpointHandlerUrl = `http://localhost:${options.port}${options.handlerPath}`; + + try { + await fetch(localEndpointHandlerUrl, { + method: "HEAD", + headers: { + "x-trigger-api-key": apiKey, + "x-trigger-action": "PING", + "x-trigger-endpoint-id": endpointId, + }, + }); + } catch (err) { + logger.error(`❌ [trigger.dev] No server found on port ${options.port}.`); + process.exit(1); + } + // Setup tunnel const endpointUrl = await resolveEndpointUrl(apiUrl, options.port); - const endpointHandlerUrl = `${endpointUrl}${options.handlerPath}`; const connectingSpinner = ora(