diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.apikeys/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.apikeys/route.tsx
index a151ca312..7ffd1e5d9 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.apikeys/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.apikeys/route.tsx
@@ -1,7 +1,8 @@
-import { BookOpenIcon } from "@heroicons/react/20/solid";
+import { BookOpenIcon, LightBulbIcon, ShieldCheckIcon } from "@heroicons/react/20/solid";
import { Form } from "@remix-run/react";
import { ActionFunctionArgs, LoaderFunctionArgs } from "@remix-run/server-runtime";
import { typedjson, useTypedLoaderData } from "remix-typedjson";
+import { AdminDebugTooltip } from "~/components/admin/debugTooltip";
import { EnvironmentLabel, environmentTitle } from "~/components/environments/EnvironmentLabel";
import { RegenerateApiKeyModal } from "~/components/environments/RegenerateApiKeyModal";
import { PageBody, PageContainer } from "~/components/layout/AppLayout";
@@ -10,8 +11,9 @@ import { Callout } from "~/components/primitives/Callout";
import { ClipboardField } from "~/components/primitives/ClipboardField";
import { DateTime } from "~/components/primitives/DateTime";
import { Header3 } from "~/components/primitives/Headers";
-import { PageAccessories, NavBar, PageTitle } from "~/components/primitives/PageHeader";
+import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader";
import { Paragraph } from "~/components/primitives/Paragraph";
+import { Property, PropertyTable } from "~/components/primitives/PropertyTable";
import {
Table,
TableBody,
@@ -24,7 +26,6 @@ import {
import { TextLink } from "~/components/primitives/TextLink";
import { prisma } from "~/db.server";
import { useFeatures } from "~/hooks/useFeatures";
-import { useProject } from "~/hooks/useProject";
import { redirectWithErrorMessage, redirectWithSuccessMessage } from "~/models/message.server";
import { createEnvironment } from "~/models/organization.server";
import { ApiKeysPresenter } from "~/presenters/v3/ApiKeysPresenter.server";
@@ -132,6 +133,18 @@ export default function Page() {
+
+
+ {environments.map((environment) => (
+
+
+
+ ))}
+
+
+
{
const userId = await requireUserId(request);
@@ -116,6 +118,33 @@ export default function Page() {
title={`Run #${run.number}`}
/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {run.environment.organizationId}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {run.environment.organizationId}
+
+
+
+
+
+
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.schedules/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.schedules/route.tsx
index aace86174..710a6f035 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.schedules/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.schedules/route.tsx
@@ -4,6 +4,7 @@ import { Outlet, useLocation, useParams } from "@remix-run/react";
import { LoaderFunctionArgs } from "@remix-run/server-runtime";
import { typedjson, useTypedLoaderData } from "remix-typedjson";
import { BlankstateInstructions } from "~/components/BlankstateInstructions";
+import { AdminDebugTooltip } from "~/components/admin/debugTooltip";
import { InlineCode } from "~/components/code/InlineCode";
import { EnvironmentLabel } from "~/components/environments/EnvironmentLabel";
import { MainCenteredContainer, PageBody, PageContainer } from "~/components/layout/AppLayout";
@@ -12,6 +13,7 @@ import { DateTime } from "~/components/primitives/DateTime";
import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader";
import { PaginationControls } from "~/components/primitives/Pagination";
import { Paragraph } from "~/components/primitives/Paragraph";
+import { Property, PropertyTable } from "~/components/primitives/PropertyTable";
import {
ResizableHandle,
ResizablePanel,
@@ -93,6 +95,18 @@ export default function Page() {
+
+
+ {schedules.map((schedule) => (
+
+
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
{project.organizationId}
+
+
+
+
+
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.team/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.team/route.tsx
index f6cd7a4fc..0885e3714 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.team/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.team/route.tsx
@@ -8,6 +8,7 @@ import { UseDataFunctionReturn, typedjson, useTypedLoaderData } from "remix-type
import invariant from "tiny-invariant";
import { z } from "zod";
import { UserAvatar } from "~/components/UserProfilePhoto";
+import { AdminDebugTooltip } from "~/components/admin/debugTooltip";
import { PageBody, PageContainer } from "~/components/layout/AppLayout";
import {
Alert,
@@ -23,8 +24,9 @@ import { Button, ButtonContent, LinkButton } from "~/components/primitives/Butto
import { DateTime } from "~/components/primitives/DateTime";
import { Header2, Header3 } from "~/components/primitives/Headers";
import { NamedIcon } from "~/components/primitives/NamedIcon";
-import { NavBar, PageTitle } from "~/components/primitives/PageHeader";
+import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader";
import { Paragraph } from "~/components/primitives/Paragraph";
+import { Property, PropertyTable } from "~/components/primitives/PropertyTable";
import { SimpleTooltip } from "~/components/primitives/Tooltip";
import { useOrganization } from "~/hooks/useOrganizations";
import { useUser } from "~/hooks/useUser";
@@ -107,6 +109,28 @@ export default function Page() {
+
+
+
+
+
+
+
+
+ {members.map((member) => (
+
+
+
+ {member.user.email} - {member.user.id}
+
+
+
+ ))}
+
+
+
Members
diff --git a/apps/webapp/app/routes/_app/route.tsx b/apps/webapp/app/routes/_app/route.tsx
index 6d8f8e9dc..23e1b3834 100644
--- a/apps/webapp/app/routes/_app/route.tsx
+++ b/apps/webapp/app/routes/_app/route.tsx
@@ -15,9 +15,12 @@ export const loader = async ({ request }: LoaderFunctionArgs) => {
return redirect(confirmBasicDetailsPath());
}
- return typedjson({
- headers: [["Set-Cookie", await commitSession(await clearRedirectTo(request))]],
- });
+ return typedjson(
+ {},
+ {
+ headers: { "Set-Cookie": await commitSession(await clearRedirectTo(request)) },
+ }
+ );
};
export default function App() {
diff --git a/apps/webapp/app/routes/admin.orgs.tsx b/apps/webapp/app/routes/admin.orgs.tsx
index 3c0321213..591e2ae5b 100644
--- a/apps/webapp/app/routes/admin.orgs.tsx
+++ b/apps/webapp/app/routes/admin.orgs.tsx
@@ -1,11 +1,9 @@
import { MagnifyingGlassIcon } from "@heroicons/react/20/solid";
import { Form } from "@remix-run/react";
import type { ActionFunctionArgs, LoaderFunctionArgs } from "@remix-run/server-runtime";
-import { redirect } from "@remix-run/server-runtime";
import { typedjson, useTypedLoaderData } from "remix-typedjson";
import { z } from "zod";
import { Button, LinkButton } from "~/components/primitives/Buttons";
-import { Header1 } from "~/components/primitives/Headers";
import { Input } from "~/components/primitives/Input";
import { PaginationControls } from "~/components/primitives/Pagination";
import { Paragraph } from "~/components/primitives/Paragraph";
@@ -18,10 +16,8 @@ import {
TableHeaderCell,
TableRow,
} from "~/components/primitives/Table";
-import { useUser } from "~/hooks/useUser";
-import { adminGetOrganizations, adminGetUsers, setV3Enabled } from "~/models/admin.server";
+import { adminGetOrganizations, setV3Enabled } from "~/models/admin.server";
import { redirectWithSuccessMessage } from "~/models/message.server";
-import { commitImpersonationSession, setImpersonationId } from "~/services/impersonation.server";
import { requireUserId } from "~/services/session.server";
import { createSearchParams } from "~/utils/searchParams";
diff --git a/apps/webapp/app/routes/resources.taskruns.$runParam.replay.ts b/apps/webapp/app/routes/resources.taskruns.$runParam.replay.ts
index 0abd29f14..f211e81e6 100644
--- a/apps/webapp/app/routes/resources.taskruns.$runParam.replay.ts
+++ b/apps/webapp/app/routes/resources.taskruns.$runParam.replay.ts
@@ -63,6 +63,14 @@ export const action: ActionFunction = async ({ request, params }) => {
{ spanId: newRun.spanId }
);
+ logger.debug("Replayed run", {
+ taskRunId: taskRun.id,
+ taskRunFriendlyId: taskRun.friendlyId,
+ newRunId: newRun.id,
+ newRunFriendlyId: newRun.friendlyId,
+ runPath,
+ });
+
return redirectWithSuccessMessage(runPath, request, `Replaying run`);
} catch (error) {
if (error instanceof Error) {
diff --git a/apps/webapp/app/v3/eventRepository.server.ts b/apps/webapp/app/v3/eventRepository.server.ts
index b81474ef4..991c52d82 100644
--- a/apps/webapp/app/v3/eventRepository.server.ts
+++ b/apps/webapp/app/v3/eventRepository.server.ts
@@ -14,6 +14,7 @@ import {
correctErrorStackTrace,
createPacketAttributesAsJson,
flattenAttributes,
+ NULL_SENTINEL,
isExceptionSpanEvent,
omit,
unflattenAttributes,
@@ -441,21 +442,10 @@ export class EventRepository {
return;
}
- const output = isEmptyJson(fullEvent.output)
- ? null
- : unflattenAttributes(fullEvent.output as Attributes);
+ const output = rehydrateJson(fullEvent.output);
+ const payload = rehydrateJson(fullEvent.payload);
- const payload = isEmptyJson(fullEvent.payload)
- ? null
- : unflattenAttributes(fullEvent.payload as Attributes);
-
- const show = unflattenAttributes(
- filteredAttributes(fullEvent.properties as Attributes, SemanticInternalAttributes.SHOW)
- )[SemanticInternalAttributes.SHOW] as
- | {
- actions?: boolean;
- }
- | undefined;
+ const show = rehydrateShow(fullEvent.properties);
const properties = sanitizedAttributes(fullEvent.properties);
@@ -1083,7 +1073,7 @@ function isEmptyJson(json: Prisma.JsonValue) {
return false;
}
-function sanitizedAttributes(json: Prisma.JsonValue): Record | undefined {
+function sanitizedAttributes(json: Prisma.JsonValue) {
if (json === null || json === undefined) {
return;
}
@@ -1182,3 +1172,57 @@ function getNowInNanoseconds(): bigint {
function getDateFromNanoseconds(nanoseconds: bigint) {
return new Date(Number(nanoseconds) / 1_000_000);
}
+
+function rehydrateJson(json: Prisma.JsonValue): any {
+ if (json === null) {
+ return undefined;
+ }
+
+ if (json === NULL_SENTINEL) {
+ return null;
+ }
+
+ if (typeof json === "string") {
+ return json;
+ }
+
+ if (typeof json === "number") {
+ return json;
+ }
+
+ if (typeof json === "boolean") {
+ return json;
+ }
+
+ if (Array.isArray(json)) {
+ return json.map((item) => rehydrateJson(item));
+ }
+
+ if (typeof json === "object") {
+ return unflattenAttributes(json as Attributes);
+ }
+
+ return null;
+}
+
+function rehydrateShow(properties: Prisma.JsonValue): { actions?: boolean } | undefined {
+ if (properties === null || properties === undefined) {
+ return;
+ }
+
+ if (typeof properties !== "object") {
+ return;
+ }
+
+ if (Array.isArray(properties)) {
+ return;
+ }
+
+ const actions = properties[SemanticInternalAttributes.SHOW_ACTIONS];
+
+ if (typeof actions === "boolean") {
+ return { actions };
+ }
+
+ return;
+}
diff --git a/apps/webapp/app/v3/marqs/index.server.ts b/apps/webapp/app/v3/marqs/index.server.ts
index bfb3cd82d..45f5eadfc 100644
--- a/apps/webapp/app/v3/marqs/index.server.ts
+++ b/apps/webapp/app/v3/marqs/index.server.ts
@@ -19,6 +19,7 @@ import {
MarQSQueuePriorityStrategy,
MessagePayload,
QueueCapacities,
+ QueueRange,
} from "./types";
import { workerQueue } from "~/services/worker.server";
@@ -618,7 +619,7 @@ export class MarQS {
parentQueue
);
- const queues = await this.#zrangeWithScores(parentQueue, range[0], range[1]);
+ const queues = await this.#getChildQueuesWithScores(parentQueue, range);
const queuesWithScores = await this.#calculateQueueScores(queues, calculateCapacities);
@@ -629,21 +630,25 @@ export class MarQS {
selectionId
);
- if (typeof choice !== "string") {
- return;
- }
-
span.setAttributes({
...flattenAttributes(queues, "marqs.queues"),
});
span.setAttributes({
...flattenAttributes(queuesWithScores, "marqs.queuesWithScores"),
});
- span.setAttribute("marqs.nextRange", range);
- span.setAttribute("marqs.queueCount", queues.length);
- span.setAttribute("marqs.queueChoice", choice);
+ span.setAttribute("nextRange.offset", range.offset);
+ span.setAttribute("nextRange.count", range.count);
+ span.setAttribute("queueCount", queues.length);
- return choice;
+ if (typeof choice !== "string") {
+ span.setAttribute("noQueueChoice", true);
+
+ return;
+ } else {
+ span.setAttribute("queueChoice", choice);
+
+ return choice;
+ }
},
{
kind: SpanKind.CONSUMER,
@@ -687,12 +692,19 @@ export class MarQS {
});
}
- async #zrangeWithScores(
+ async #getChildQueuesWithScores(
key: string,
- min: number,
- max: number
+ range: QueueRange
): Promise> {
- const valuesWithScores = await this.redis.zrange(key, min, max, "WITHSCORES");
+ const valuesWithScores = await this.redis.zrangebyscore(
+ key,
+ "-inf",
+ Date.now(),
+ "WITHSCORES",
+ "LIMIT",
+ range.offset,
+ range.count
+ );
const result: Array<{ value: string; score: number }> = [];
for (let i = 0; i < valuesWithScores.length; i += 2) {
@@ -1591,7 +1603,7 @@ function getMarQSClient() {
return new MarQS({
keysProducer: new MarQSShortKeyProducer(KEY_PREFIX),
- queuePriorityStrategy: new SimpleWeightedChoiceStrategy({ queueSelectionCount: 12 }),
+ queuePriorityStrategy: new SimpleWeightedChoiceStrategy({ queueSelectionCount: 36 }),
envQueuePriorityStrategy: new SimpleWeightedChoiceStrategy({ queueSelectionCount: 12 }),
workers: 1,
redis: redisOptions,
diff --git a/apps/webapp/app/v3/marqs/priorityStrategy.server.ts b/apps/webapp/app/v3/marqs/priorityStrategy.server.ts
index d4cb1c7a3..cb488aa50 100644
--- a/apps/webapp/app/v3/marqs/priorityStrategy.server.ts
+++ b/apps/webapp/app/v3/marqs/priorityStrategy.server.ts
@@ -1,5 +1,10 @@
import { RedisOptions } from "ioredis";
-import { MarQSQueuePriorityStrategy, PriorityStrategyChoice, QueueWithScores } from "./types";
+import {
+ MarQSQueuePriorityStrategy,
+ PriorityStrategyChoice,
+ QueueRange,
+ QueueWithScores,
+} from "./types";
import { nanoid } from "nanoid";
import seedrandom from "seedrandom";
@@ -26,9 +31,7 @@ export class DynamicWeightedChoiceStrategy implements MarQSQueuePriorityStrategy
throw new Error("Method not implemented.");
}
- nextCandidateSelection(
- parentQueue: string
- ): Promise<{ range: [number, number]; selectionId: string }> {
+ nextCandidateSelection(parentQueue: string): Promise<{ range: QueueRange; selectionId: string }> {
throw new Error("Method not implemented.");
}
}
@@ -39,13 +42,18 @@ export type SimpleWeightedChoiceStrategyOptions = {
};
export class SimpleWeightedChoiceStrategy implements MarQSQueuePriorityStrategy {
- private _nextRangesByParentQueue: Map = new Map();
+ private _nextRangesByParentQueue: Map = new Map();
private _randomGenerator = seedrandom(this.options.randomSeed);
constructor(private options: SimpleWeightedChoiceStrategyOptions) {}
- private nextRangeForParentQueue(parentQueue: string) {
- return this._nextRangesByParentQueue.get(parentQueue) ?? [0, this.options.queueSelectionCount];
+ private nextRangeForParentQueue(parentQueue: string): QueueRange {
+ return (
+ this._nextRangesByParentQueue.get(parentQueue) ?? {
+ offset: 0,
+ count: this.options.queueSelectionCount,
+ }
+ );
}
chooseQueue(
@@ -55,25 +63,23 @@ export class SimpleWeightedChoiceStrategy implements MarQSQueuePriorityStrategy
): PriorityStrategyChoice {
const filteredQueues = filterQueuesAtCapacity(queues);
- if (filteredQueues.length === 0) {
- if (queues.length === this.options.queueSelectionCount) {
- const nextRangeForParentQueue = this.nextRangeForParentQueue(parentQueue);
- const nextRange: [number, number] = nextRangeForParentQueue
- ? [
- nextRangeForParentQueue[1],
- nextRangeForParentQueue[1] + this.options.queueSelectionCount,
- ]
- : [this.options.queueSelectionCount, this.options.queueSelectionCount * 2];
- // If all queues are at capacity, and we were passed the max number of queues, then we will slide the window "to the right"
- this._nextRangesByParentQueue.set(parentQueue, nextRange);
- } else {
- this._nextRangesByParentQueue.delete(parentQueue);
- }
-
- return { abort: true };
+ if (queues.length === this.options.queueSelectionCount) {
+ const nextRangeForParentQueue = this.nextRangeForParentQueue(parentQueue);
+ const nextRange: QueueRange = nextRangeForParentQueue
+ ? {
+ offset: nextRangeForParentQueue.offset + this.options.queueSelectionCount,
+ count: this.options.queueSelectionCount,
+ }
+ : { offset: this.options.queueSelectionCount, count: this.options.queueSelectionCount };
+ // If all queues are at capacity, and we were passed the max number of queues, then we will slide the window "to the right"
+ this._nextRangesByParentQueue.set(parentQueue, nextRange);
+ } else {
+ this._nextRangesByParentQueue.delete(parentQueue);
}
- this._nextRangesByParentQueue.delete(parentQueue);
+ if (filteredQueues.length === 0) {
+ return { abort: true };
+ }
const queueWeights = this.#calculateQueueWeights(filteredQueues);
@@ -82,7 +88,7 @@ export class SimpleWeightedChoiceStrategy implements MarQSQueuePriorityStrategy
async nextCandidateSelection(
parentQueue: string
- ): Promise<{ range: [number, number]; selectionId: string }> {
+ ): Promise<{ range: QueueRange; selectionId: string }> {
return { range: this.nextRangeForParentQueue(parentQueue), selectionId: nanoid(24) };
}
diff --git a/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts b/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts
index 4e75c2047..12004c6d8 100644
--- a/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts
+++ b/apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts
@@ -28,7 +28,7 @@ import { generateFriendlyId } from "../friendlyIdentifiers";
import { socketIo } from "../handleSocketIo.server";
import { findCurrentWorkerDeployment } from "../models/workerDeployment.server";
import { RestoreCheckpointService } from "../services/restoreCheckpoint.server";
-import { tracer } from "../tracer.server";
+import { SEMINTATTRS_FORCE_RECORDING, tracer } from "../tracer.server";
import { CrashTaskRunService } from "../services/crashTaskRun.server";
import { FailedTaskRunService } from "../failedTaskRun.server";
import { CreateTaskRunAttemptService } from "../services/createTaskRunAttempt.server";
@@ -71,7 +71,6 @@ export type SharedQueueConsumerOptions = {
traceTimeoutSeconds?: number;
nextTickInterval?: number;
interval?: number;
- parentContext?: Context;
};
export class SharedQueueConsumer {
@@ -97,7 +96,6 @@ export class SharedQueueConsumer {
traceTimeoutSeconds: options.traceTimeoutSeconds ?? 60, // 60 seconds
nextTickInterval: options.nextTickInterval ?? 1000, // 1 second
interval: options.interval ?? 100, // 100ms
- parentContext: options.parentContext ?? ROOT_CONTEXT,
};
}
@@ -197,19 +195,17 @@ export class SharedQueueConsumer {
) {
this.#endCurrentSpan();
- const parentContext = this._options.parentContext ?? ROOT_CONTEXT;
-
// Create a new trace
this._currentSpan = tracer.startSpan(
"SharedQueueConsumer.doWork()",
{
kind: SpanKind.CONSUMER,
},
- parentContext
+ ROOT_CONTEXT
);
// Get the span trace context
- this._currentSpanContext = trace.setSpan(parentContext, this._currentSpan);
+ this._currentSpanContext = trace.setSpan(ROOT_CONTEXT, this._currentSpan);
this._perTraceCountdown = this._options.maximumItemsPerTrace;
this._lastNewTrace = new Date();
diff --git a/apps/webapp/app/v3/marqs/types.ts b/apps/webapp/app/v3/marqs/types.ts
index d1c8afd69..68d22cf28 100644
--- a/apps/webapp/app/v3/marqs/types.ts
+++ b/apps/webapp/app/v3/marqs/types.ts
@@ -18,6 +18,8 @@ export type QueueWithScores = {
age: number;
};
+export type QueueRange = { offset: number; count: number };
+
export interface MarQSKeyProducer {
queueConcurrencyLimitKey(env: AuthenticatedEnvironment, queue: string): string;
envConcurrencyLimitKey(env: AuthenticatedEnvironment): string;
@@ -69,9 +71,7 @@ export interface MarQSQueuePriorityStrategy {
*
* @returns The scores and the selectionId for the next candidate selection
*/
- nextCandidateSelection(
- parentQueue: string
- ): Promise<{ range: [number, number]; selectionId: string }>;
+ nextCandidateSelection(parentQueue: string): Promise<{ range: QueueRange; selectionId: string }>;
}
export const MessagePayload = z.object({
diff --git a/apps/webapp/app/v3/sharedSocketConnection.ts b/apps/webapp/app/v3/sharedSocketConnection.ts
index 634f0384b..53cbd133c 100644
--- a/apps/webapp/app/v3/sharedSocketConnection.ts
+++ b/apps/webapp/app/v3/sharedSocketConnection.ts
@@ -1,19 +1,17 @@
+import { trace } from "@opentelemetry/api";
import { clientWebsocketMessages, serverWebsocketMessages } from "@trigger.dev/core/v3";
+import type { StructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
import {
+ MessageCatalogToSocketIoEvents,
ZodMessageHandler,
ZodMessageSender,
- MessageCatalogToSocketIoEvents,
} from "@trigger.dev/core/v3/zodMessageHandler";
-import type { StructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
import { Evt } from "evt";
import { randomUUID } from "node:crypto";
+import type { DisconnectReason, Namespace, Socket } from "socket.io";
+import { env } from "~/env.server";
import { logger } from "~/services/logger.server";
import { SharedQueueConsumer } from "./marqs/sharedQueueConsumer.server";
-import type { DisconnectReason, Namespace, Socket } from "socket.io";
-import { ROOT_CONTEXT, Span, SpanKind, trace } from "@opentelemetry/api";
-import { env } from "~/env.server";
-
-const tracer = trace.getTracer("sharedQueueConsumerPool");
interface SharedQueueConsumerPoolOptions {
sender: ZodMessageSender;
@@ -22,22 +20,8 @@ interface SharedQueueConsumerPoolOptions {
class SharedQueueConsumerPool {
#consumers: SharedQueueConsumer[];
- #span: Span;
constructor(opts: SharedQueueConsumerPoolOptions) {
- this.#span = tracer.startSpan(
- "SharedQueueConsumerPool()",
- {
- kind: SpanKind.CONSUMER,
- attributes: {
- "pool.size": opts.poolSize,
- },
- },
- ROOT_CONTEXT
- );
-
- const spanContext = trace.setSpan(ROOT_CONTEXT, this.#span);
-
this.#consumers = Array(opts.poolSize)
.fill(null)
.map(
@@ -45,7 +29,6 @@ class SharedQueueConsumerPool {
new SharedQueueConsumer(opts.sender, {
interval: env.SHARED_QUEUE_CONSUMER_INTERVAL_MS,
nextTickInterval: env.SHARED_QUEUE_CONSUMER_NEXT_TICK_INTERVAL_MS,
- parentContext: spanContext,
})
);
}
@@ -56,7 +39,6 @@ class SharedQueueConsumerPool {
async stop() {
await Promise.allSettled(this.#consumers.map((consumer) => consumer.stop()));
- this.#span.end();
}
}
@@ -100,7 +82,7 @@ export class SharedSocketConnection {
},
});
- logger.log("Starting SharedQueueConsumer pool", {
+ logger.debug("Starting SharedQueueConsumer pool", {
poolSize: opts.poolSize ?? this._defaultPoolSize,
});
diff --git a/apps/webapp/app/v3/tracer.server.ts b/apps/webapp/app/v3/tracer.server.ts
index eaa58486f..f95c894bf 100644
--- a/apps/webapp/app/v3/tracer.server.ts
+++ b/apps/webapp/app/v3/tracer.server.ts
@@ -125,7 +125,7 @@ function getTracer() {
);
} else {
if (env.INTERNAL_OTEL_TRACE_LOGGING_ENABLED === "1") {
- console.log(`🔦 Tracer: Logger exporter enabled`);
+ console.log(`🔦 Tracer: Logger exporter enabled (sampling = ${samplingRate})`);
const loggerExporter = new LoggerSpanExporter();
diff --git a/apps/webapp/test/marqs.test.ts b/apps/webapp/test/marqs.test.ts
index 36a60679b..5458336cc 100644
--- a/apps/webapp/test/marqs.test.ts
+++ b/apps/webapp/test/marqs.test.ts
@@ -88,7 +88,10 @@ describe("SimpleWeightedChoiceStrategy", () => {
const nextSelection = await stategy.nextCandidateSelection("parentQueue");
- expect(nextSelection).toEqual({ range: [3, 6], selectionId: expect.any(String) });
+ expect(nextSelection).toEqual({
+ range: { offset: 3, count: 3 },
+ selectionId: expect.any(String),
+ });
// Now pass some queues that have some capacity
const chosenQueue2 = stategy.chooseQueue(
@@ -129,7 +132,10 @@ describe("SimpleWeightedChoiceStrategy", () => {
const nextSelection2 = await stategy.nextCandidateSelection("parentQueue");
- expect(nextSelection2).toEqual({ range: [0, 3], selectionId: expect.any(String) });
+ expect(nextSelection2).toEqual({
+ range: { offset: 6, count: 3 },
+ selectionId: expect.any(String),
+ });
});
it("should adjust the next filter range only if passed the maximum number of queues", async () => {
@@ -167,7 +173,10 @@ describe("SimpleWeightedChoiceStrategy", () => {
const nextSelection = await stategy.nextCandidateSelection("parentQueue");
- expect(nextSelection).toEqual({ range: [0, 3], selectionId: expect.any(String) });
+ expect(nextSelection).toEqual({
+ range: { offset: 0, count: 3 },
+ selectionId: expect.any(String),
+ });
});
it("should adjust the next candidate range ONLY for the matching parent queue", async () => {
@@ -182,7 +191,7 @@ describe("SimpleWeightedChoiceStrategy", () => {
queue: "queue1",
age: 4497,
capacities: {
- queue: { current: 10, limit: 10 },
+ queue: { current: 0, limit: 10 },
env: { current: 0, limit: 10 },
org: { current: 0, limit: 10 },
},
@@ -210,15 +219,21 @@ describe("SimpleWeightedChoiceStrategy", () => {
"selectionId"
);
- expect(chosenQueue).toEqual({ abort: true });
+ expect(chosenQueue).toEqual("queue1");
const nextSelection = await stategy.nextCandidateSelection("parentQueue2");
- expect(nextSelection).toEqual({ range: [0, 3], selectionId: expect.any(String) });
+ expect(nextSelection).toEqual({
+ range: { offset: 0, count: 3 },
+ selectionId: expect.any(String),
+ });
const nextSelection2 = await stategy.nextCandidateSelection("parentQueue");
- expect(nextSelection2).toEqual({ range: [3, 6], selectionId: expect.any(String) });
+ expect(nextSelection2).toEqual({
+ range: { offset: 3, count: 3 },
+ selectionId: expect.any(String),
+ });
const chosenQueue2 = stategy.chooseQueue(
[
@@ -250,14 +265,52 @@ describe("SimpleWeightedChoiceStrategy", () => {
},
},
],
- "parentQueue2",
+ "parentQueue",
"selectionId"
);
- expect(chosenQueue2).toEqual("queue3");
+ expect(chosenQueue2).toEqual("queue2");
- const nextSelection3 = await stategy.nextCandidateSelection("parentQueue2");
+ const nextSelection3 = await stategy.nextCandidateSelection("parentQueue");
- expect(nextSelection3).toEqual({ range: [0, 3], selectionId: expect.any(String) });
+ expect(nextSelection3).toEqual({
+ range: { offset: 6, count: 3 },
+ selectionId: expect.any(String),
+ });
+
+ // Not passed 3 queues, so the range should be reset (we've reached the end)
+ const chosenQueue3 = stategy.chooseQueue(
+ [
+ {
+ queue: "queue1",
+ age: 4497,
+ capacities: {
+ queue: { current: 0, limit: 10 },
+ env: { current: 0, limit: 10 },
+ org: { current: 0, limit: 10 },
+ },
+ },
+ {
+ queue: "queue2",
+ age: 19670,
+ capacities: {
+ queue: { current: 0, limit: 10 },
+ env: { current: 0, limit: 10 },
+ org: { current: 0, limit: 10 },
+ },
+ },
+ ],
+ "parentQueue",
+ "selectionId"
+ );
+
+ expect(chosenQueue3).toEqual("queue2");
+
+ const nextSelection4 = await stategy.nextCandidateSelection("parentQueue");
+
+ expect(nextSelection4).toEqual({
+ range: { offset: 0, count: 3 },
+ selectionId: expect.any(String),
+ });
});
});
diff --git a/docs/v3/errors-retrying.mdx b/docs/v3/errors-retrying.mdx
index 11c40ef2a..eface1e49 100644
--- a/docs/v3/errors-retrying.mdx
+++ b/docs/v3/errors-retrying.mdx
@@ -29,6 +29,8 @@ This task will retry 10 times with exponential backoff.
One way to gain reliability is to break your work into smaller tasks and [trigger](/v3/triggering) them from each other. Each task can have its own retrying behavior:
```ts /trigger/multiple-tasks.ts
+import { task } from "@trigger.dev/sdk/v3";
+
export const myTask = task({
id: "my-task",
retry: {
@@ -66,7 +68,7 @@ We provide some useful functions that you can use to retry smaller parts of a ta
You can retry a block of code that can throw an error, with the same retry settings as a task.
```ts /trigger/retry-on-throw.ts
-import { task, logger, retry } from "@trigger.dev/sdk/v3"
+import { task, logger, retry } from "@trigger.dev/sdk/v3";
export const retryOnThrow = task({
id: "retry-on-throw",
@@ -102,6 +104,8 @@ You can use `fetch`, `axios`, or any other library in your code.
But we do provide a convenient function to perform HTTP requests with conditional retrying based on the response:
```ts /trigger/retry-fetch.ts
+import { task, logger, retry } from "@trigger.dev/sdk/v3";
+
export const taskWithFetchRetries = task({
id: "task-with-fetch-retries",
run: async ({ payload, ctx }) => {
@@ -195,6 +199,8 @@ In this complicated example:
- If we've run out of requests or tokens we retry at the time specified in the headers.
```ts
+import { task } from "@trigger.dev/sdk/v3";
+
export const openaiTask = task({
id: "openai-task",
retry: {
diff --git a/integrations/airtable/CHANGELOG.md b/integrations/airtable/CHANGELOG.md
index f866f92e1..c438f9d53 100644
--- a/integrations/airtable/CHANGELOG.md
+++ b/integrations/airtable/CHANGELOG.md
@@ -1,5 +1,19 @@
# @trigger.dev/airtable
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.25
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.24
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/airtable/package.json b/integrations/airtable/package.json
index 473ea62f7..9181733b0 100644
--- a/integrations/airtable/package.json
+++ b/integrations/airtable/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/airtable",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Trigger.dev integration for airtable",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -25,8 +25,8 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.25",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"airtable": "^0.12.1",
"zod": "3.22.3"
},
diff --git a/integrations/github/CHANGELOG.md b/integrations/github/CHANGELOG.md
index 9f7854fdc..4731f81c6 100644
--- a/integrations/github/CHANGELOG.md
+++ b/integrations/github/CHANGELOG.md
@@ -1,5 +1,19 @@
# @trigger.dev/github
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.25
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.24
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/github/package.json b/integrations/github/package.json
index 7162f8130..a01a43664 100644
--- a/integrations/github/package.json
+++ b/integrations/github/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/github",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "The official GitHub integration for Trigger.dev",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -30,8 +30,8 @@
"@octokit/request-error": "^5.0.1",
"@octokit/webhooks": "^12.0.10",
"octokit": "^3.1.2",
- "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.25",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"zod": "3.22.3"
},
"engines": {
diff --git a/integrations/linear/CHANGELOG.md b/integrations/linear/CHANGELOG.md
index f785081c4..f7c01cb4d 100644
--- a/integrations/linear/CHANGELOG.md
+++ b/integrations/linear/CHANGELOG.md
@@ -1,5 +1,19 @@
# @trigger.dev/linear
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.25
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.24
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/linear/package.json b/integrations/linear/package.json
index 674117abe..3d56f79b3 100644
--- a/integrations/linear/package.json
+++ b/integrations/linear/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/linear",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Trigger.dev integration for @linear/sdk",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -26,8 +26,8 @@
},
"dependencies": {
"@linear/sdk": "^8.0.0",
- "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.25",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"zod": "3.22.3"
},
"engines": {
diff --git a/integrations/openai/CHANGELOG.md b/integrations/openai/CHANGELOG.md
index 857476015..c124aa659 100644
--- a/integrations/openai/CHANGELOG.md
+++ b/integrations/openai/CHANGELOG.md
@@ -1,5 +1,19 @@
# @trigger.dev/slack
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.25
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.24
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/openai/package.json b/integrations/openai/package.json
index 5db724d37..a8613207d 100644
--- a/integrations/openai/package.json
+++ b/integrations/openai/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/openai",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "The official OpenAI integration for Trigger.dev",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -42,8 +42,8 @@
},
"dependencies": {
"openai": "^4.16.1",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
- "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23"
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
+ "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.25"
},
"engines": {
"node": ">=18.0.0"
diff --git a/integrations/plain/CHANGELOG.md b/integrations/plain/CHANGELOG.md
index a1eeb3359..2f4eea253 100644
--- a/integrations/plain/CHANGELOG.md
+++ b/integrations/plain/CHANGELOG.md
@@ -1,5 +1,19 @@
# @trigger.dev/plain
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.25
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.24
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/plain/package.json b/integrations/plain/package.json
index 8aeea0adf..73a19c14b 100644
--- a/integrations/plain/package.json
+++ b/integrations/plain/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/plain",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "The official Plain.com integration for Trigger.dev",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -24,8 +24,8 @@
"build:tsup": "tsup"
},
"dependencies": {
- "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.25",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"@team-plain/typescript-sdk": "^2.7.0"
},
"engines": {
diff --git a/integrations/replicate/CHANGELOG.md b/integrations/replicate/CHANGELOG.md
index 89b1ed428..951f3f4a2 100644
--- a/integrations/replicate/CHANGELOG.md
+++ b/integrations/replicate/CHANGELOG.md
@@ -1,5 +1,19 @@
# @trigger.dev/replicate
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.25
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.24
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/replicate/package.json b/integrations/replicate/package.json
index 6265695af..9183a07b2 100644
--- a/integrations/replicate/package.json
+++ b/integrations/replicate/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/replicate",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Trigger.dev integration for replicate",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -25,8 +25,8 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.25",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"replicate": "^0.18.1",
"zod": "3.22.3"
},
diff --git a/integrations/resend/CHANGELOG.md b/integrations/resend/CHANGELOG.md
index 93a0f3358..6c1a670e8 100644
--- a/integrations/resend/CHANGELOG.md
+++ b/integrations/resend/CHANGELOG.md
@@ -1,5 +1,19 @@
# @trigger.dev/resend
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.25
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.24
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/resend/package.json b/integrations/resend/package.json
index 206fa4b42..21a6de3ca 100644
--- a/integrations/resend/package.json
+++ b/integrations/resend/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/resend",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "The official Resend.com integration for Trigger.dev",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -24,8 +24,8 @@
"build:tsup": "tsup"
},
"dependencies": {
- "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.25",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"resend": "^2.1.0"
},
"engines": {
diff --git a/integrations/sendgrid/CHANGELOG.md b/integrations/sendgrid/CHANGELOG.md
index cc5ca677a..93f29cc5a 100644
--- a/integrations/sendgrid/CHANGELOG.md
+++ b/integrations/sendgrid/CHANGELOG.md
@@ -1,5 +1,19 @@
# @trigger.dev/sendgrid
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.25
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.24
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/sendgrid/package.json b/integrations/sendgrid/package.json
index 855b1a9d1..05c86d67a 100644
--- a/integrations/sendgrid/package.json
+++ b/integrations/sendgrid/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/sendgrid",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Trigger.dev integration for @sendgrid/mail",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -26,8 +26,8 @@
},
"dependencies": {
"@sendgrid/mail": "^7.7.0",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
- "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23"
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
+ "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.25"
},
"engines": {
"node": ">=16.8.0"
diff --git a/integrations/shopify/CHANGELOG.md b/integrations/shopify/CHANGELOG.md
index ac4121142..2ef7bd7c2 100644
--- a/integrations/shopify/CHANGELOG.md
+++ b/integrations/shopify/CHANGELOG.md
@@ -1,5 +1,19 @@
# @trigger.dev/shopify
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.25
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.24
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/shopify/package.json b/integrations/shopify/package.json
index a06251c19..f3707803e 100644
--- a/integrations/shopify/package.json
+++ b/integrations/shopify/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/shopify",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Trigger.dev integration for @shopify/shopify-api",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -26,8 +26,8 @@
},
"dependencies": {
"@shopify/shopify-api": "^8.0.2",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
- "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
+ "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.25",
"zod": "3.22.3"
},
"engines": {
diff --git a/integrations/slack/CHANGELOG.md b/integrations/slack/CHANGELOG.md
index 4bf60263e..1180a28c0 100644
--- a/integrations/slack/CHANGELOG.md
+++ b/integrations/slack/CHANGELOG.md
@@ -1,5 +1,17 @@
# @trigger.dev/slack
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/slack/package.json b/integrations/slack/package.json
index 1ae95c1c0..13d2b04e1 100644
--- a/integrations/slack/package.json
+++ b/integrations/slack/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/slack",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "The official Slack integration for Trigger.dev",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -25,7 +25,7 @@
},
"dependencies": {
"@slack/web-api": "^6.8.1",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"zod": "3.22.3"
},
"engines": {
diff --git a/integrations/stripe/CHANGELOG.md b/integrations/stripe/CHANGELOG.md
index f3fb391e8..c1a67cd8e 100644
--- a/integrations/stripe/CHANGELOG.md
+++ b/integrations/stripe/CHANGELOG.md
@@ -1,5 +1,19 @@
# @trigger.dev/stripe
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.25
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.24
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/stripe/package.json b/integrations/stripe/package.json
index 9e60bc520..1527d58f7 100644
--- a/integrations/stripe/package.json
+++ b/integrations/stripe/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/stripe",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Trigger.dev integration for stripe",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -25,8 +25,8 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.25",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"stripe": "^12.14.0",
"zod": "3.22.3"
},
diff --git a/integrations/supabase/CHANGELOG.md b/integrations/supabase/CHANGELOG.md
index d8728b059..b7e7cfe81 100644
--- a/integrations/supabase/CHANGELOG.md
+++ b/integrations/supabase/CHANGELOG.md
@@ -1,5 +1,19 @@
# @trigger.dev/supabase
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.25
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.24
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/supabase/package.json b/integrations/supabase/package.json
index de2103f0c..db5926990 100644
--- a/integrations/supabase/package.json
+++ b/integrations/supabase/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/supabase",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Trigger.dev integration for @supabase/supabase-js",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -26,8 +26,8 @@
},
"dependencies": {
"@supabase/supabase-js": "^2.26.0",
- "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.25",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"supabase-management-js": "^1.0.0",
"zod": "3.22.3"
},
diff --git a/integrations/typeform/CHANGELOG.md b/integrations/typeform/CHANGELOG.md
index 1e113b7bb..462608a36 100644
--- a/integrations/typeform/CHANGELOG.md
+++ b/integrations/typeform/CHANGELOG.md
@@ -1,5 +1,19 @@
# @trigger.dev/typeform
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.25
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/integration-kit@3.0.0-beta.24
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/integrations/typeform/package.json b/integrations/typeform/package.json
index 1df5fa92d..21ed57031 100644
--- a/integrations/typeform/package.json
+++ b/integrations/typeform/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/typeform",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "The official Typeform integration for Trigger.dev",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -24,8 +24,8 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/integration-kit": "workspace:^3.0.0-beta.25",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"@typeform/api-client": "^1.8.0",
"zod": "3.22.3"
},
diff --git a/packages/astro/CHANGELOG.md b/packages/astro/CHANGELOG.md
index b8b5ca97a..efa065c83 100644
--- a/packages/astro/CHANGELOG.md
+++ b/packages/astro/CHANGELOG.md
@@ -1,5 +1,17 @@
# @trigger.dev/astro
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/astro/package.json b/packages/astro/package.json
index 0e9dda74f..d16d9c32e 100644
--- a/packages/astro/package.json
+++ b/packages/astro/package.json
@@ -1,7 +1,7 @@
{
"name": "@trigger.dev/astro",
"description": "An Astro-native integration for Trigger.dev background jobs platform",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"files": [
@@ -20,7 +20,7 @@
"build:tsup": "tsup"
},
"peerDependencies": {
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23"
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25"
},
"devDependencies": {
"astro": "^3.0.12",
diff --git a/packages/cli-v3/CHANGELOG.md b/packages/cli-v3/CHANGELOG.md
index f02b5a53e..ce72e1189 100644
--- a/packages/cli-v3/CHANGELOG.md
+++ b/packages/cli-v3/CHANGELOG.md
@@ -1,5 +1,23 @@
# trigger.dev
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- e337b2165: Add a postInstall option to allow running scripts after dependencies have been installed in deployed images
+- c37c82231: Use locked package versions when resolving dependencies in deployed workers
+- Updated dependencies [e337b2165]
+- Updated dependencies [9e5382951]
+ - @trigger.dev/core@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- 83dc87155: Fix issues with consecutive waits
+- Updated dependencies [83dc87155]
+ - @trigger.dev/core@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/cli-v3/package.json b/packages/cli-v3/package.json
index 63feb7ca8..c3b903997 100644
--- a/packages/cli-v3/package.json
+++ b/packages/cli-v3/package.json
@@ -1,6 +1,6 @@
{
"name": "trigger.dev",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "A Command-Line Interface for Trigger.dev (v3) projects",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
@@ -86,7 +86,7 @@
"@opentelemetry/sdk-trace-base": "^1.22.0",
"@opentelemetry/sdk-trace-node": "^1.22.0",
"@opentelemetry/semantic-conventions": "^1.22.0",
- "@trigger.dev/core": "workspace:3.0.0-beta.23",
+ "@trigger.dev/core": "workspace:3.0.0-beta.25",
"@types/degit": "^2.8.3",
"chalk": "^5.2.0",
"chokidar": "^3.5.3",
diff --git a/packages/cli-v3/src/Containerfile.prod b/packages/cli-v3/src/Containerfile.prod
index df09ff001..737a1cbbd 100644
--- a/packages/cli-v3/src/Containerfile.prod
+++ b/packages/cli-v3/src/Containerfile.prod
@@ -19,6 +19,8 @@ COPY --chown=node:node . .
USER node
RUN npm ci --no-fund --no-audit && npm cache clean --force
+__POST_INSTALL__
+
# Development or production stage builds upon the base stage
FROM base AS final
diff --git a/packages/cli-v3/src/commands/deploy.ts b/packages/cli-v3/src/commands/deploy.ts
index 5eaf7895c..f59f6e8c8 100644
--- a/packages/cli-v3/src/commands/deploy.ts
+++ b/packages/cli-v3/src/commands/deploy.ts
@@ -1286,6 +1286,8 @@ async function compileProject(
const dependencies = await gatherRequiredDependencies(allImports, config, javascriptProject);
+ logger.debug("gatherRequiredDependencies()", { dependencies });
+
const packageJsonContents = {
name: "trigger-worker",
version: "0.0.0",
@@ -1328,8 +1330,19 @@ async function compileProject(
// Write the Containerfile to /tmp/dir/Containerfile
const containerFilePath = join(cliRootPath(), "Containerfile.prod");
- // Copy the Containerfile to /tmp/dir/Containerfile
- await copyFile(containerFilePath, join(tempDir, "Containerfile"));
+
+ let containerFileContents = readFileSync(containerFilePath, "utf-8");
+
+ if (config.postInstall) {
+ containerFileContents = containerFileContents.replace(
+ "__POST_INSTALL__",
+ `RUN ${config.postInstall}`
+ );
+ } else {
+ containerFileContents = containerFileContents.replace("__POST_INSTALL__", "");
+ }
+
+ await writeFile(join(tempDir, "Containerfile"), containerFileContents);
const contentHasher = createHash("sha256");
contentHasher.update(Buffer.from(entryPointOutputFile.text));
@@ -1539,6 +1552,7 @@ async function gatherRequiredDependencies(
project: JavascriptProject
) {
const dependencies: Record = {};
+ const resolvablePackageNames = new Set();
for (const file of imports) {
if ((file.kind !== "require-call" && file.kind !== "dynamic-import") || !file.external) {
@@ -1547,26 +1561,32 @@ async function gatherRequiredDependencies(
const packageName = detectPackageNameFromImportPath(file.path);
- if (dependencies[packageName]) {
+ if (!packageName) {
continue;
}
- const externalDependencyVersion = await project.resolve(packageName);
+ resolvablePackageNames.add(packageName);
+ }
- if (externalDependencyVersion) {
- dependencies[packageName] = stripWorkspaceFromVersion(externalDependencyVersion);
- continue;
- }
+ const resolvedPackageVersions = await project.resolveAll(Array.from(resolvablePackageNames));
+ const missingPackages = Array.from(resolvablePackageNames).filter(
+ (packageName) => !resolvedPackageVersions[packageName]
+ );
+ for (const missingPackage of missingPackages) {
const internalDependencyVersion =
- (packageJson.dependencies as Record)[packageName] ??
- detectDependencyVersion(packageName);
+ (packageJson.dependencies as Record)[missingPackage] ??
+ detectDependencyVersion(missingPackage);
if (internalDependencyVersion) {
- dependencies[packageName] = stripWorkspaceFromVersion(internalDependencyVersion);
+ dependencies[missingPackage] = stripWorkspaceFromVersion(internalDependencyVersion);
}
}
+ for (const [packageName, version] of Object.entries(resolvedPackageVersions)) {
+ dependencies[packageName] = version;
+ }
+
if (config.additionalPackages) {
for (const packageName of config.additionalPackages) {
if (dependencies[packageName]) {
diff --git a/packages/cli-v3/src/utilities/javascriptProject.ts b/packages/cli-v3/src/utilities/javascriptProject.ts
index 36229963e..fd9ba32d2 100644
--- a/packages/cli-v3/src/utilities/javascriptProject.ts
+++ b/packages/cli-v3/src/utilities/javascriptProject.ts
@@ -5,51 +5,10 @@ import { logger } from "./logger";
import { PackageManager, getUserPackageManager } from "./getUserPackageManager";
import { PackageJson } from "type-fest";
import { assertExhaustive } from "./assertExhaustive";
+import { builtinModules } from "node:module";
export type ResolveOptions = { allowDev: boolean };
-const BuiltInModules = new Set([
- "assert",
- "async_hooks",
- "buffer",
- "child_process",
- "cluster",
- "console",
- "constants",
- "crypto",
- "dgram",
- "dns",
- "domain",
- "events",
- "fs",
- "http",
- "http2",
- "https",
- "inspector",
- "module",
- "net",
- "os",
- "path",
- "perf_hooks",
- "process",
- "punycode",
- "querystring",
- "readline",
- "repl",
- "stream",
- "string_decoder",
- "timers",
- "tls",
- "trace_events",
- "tty",
- "url",
- "util",
- "v8",
- "vm",
- "worker_threads",
- "zlib",
-]);
-
export class JavascriptProject {
private _packageJson?: PackageJson;
private _packageManager?: PackageManager;
@@ -84,27 +43,73 @@ export class JavascriptProject {
}
}
+ async resolveAll(
+ packageNames: string[],
+ options?: ResolveOptions
+ ): Promise> {
+ const externalPackages = packageNames.filter((packageName) => !isBuiltInModule(packageName));
+
+ const opts = { allowDev: false, ...options };
+
+ const command = await this.#getCommand();
+
+ try {
+ const versions = await command.resolveDependencyVersions(externalPackages, {
+ cwd: this.projectPath,
+ });
+
+ if (versions) {
+ logger.debug(`Resolved [${externalPackages.join(", ")}] version using ${command.name}`, {
+ versions,
+ });
+ }
+
+ // Merge the resolved versions with the package.json dependencies
+ const missingPackages = externalPackages.filter((packageName) => !versions[packageName]);
+ const missingPackageVersions: Record = {};
+
+ for (const packageName of missingPackages) {
+ const packageJsonVersion = this.packageJson.dependencies?.[packageName];
+
+ if (typeof packageJsonVersion === "string") {
+ logger.debug(`Resolved ${packageName} version using package.json`, {
+ packageJsonVersion,
+ });
+
+ missingPackageVersions[packageName] = packageJsonVersion;
+ }
+
+ if (opts.allowDev) {
+ const devPackageJsonVersion = this.packageJson.devDependencies?.[packageName];
+
+ if (typeof devPackageJsonVersion === "string") {
+ logger.debug(`Resolved ${packageName} version using devDependencies`, {
+ devPackageJsonVersion,
+ });
+
+ missingPackageVersions[packageName] = devPackageJsonVersion;
+ }
+ }
+ }
+
+ return { ...versions, ...missingPackageVersions };
+ } catch (error) {
+ logger.debug(`Failed to resolve dependency versions using ${command.name}`, {
+ packageNames,
+ error,
+ });
+
+ return {};
+ }
+ }
+
async resolve(packageName: string, options?: ResolveOptions): Promise {
- if (BuiltInModules.has(packageName)) {
+ if (isBuiltInModule(packageName)) {
return undefined;
}
const opts = { allowDev: false, ...options };
- const packageJsonVersion = this.packageJson.dependencies?.[packageName];
-
- if (typeof packageJsonVersion === "string") {
- return packageJsonVersion;
- }
-
- if (opts.allowDev) {
- const devPackageJsonVersion = this.packageJson.devDependencies?.[packageName];
-
- if (typeof devPackageJsonVersion === "string") {
- return devPackageJsonVersion;
- }
- }
-
const command = await this.#getCommand();
try {
@@ -113,8 +118,30 @@ export class JavascriptProject {
});
if (version) {
+ logger.debug(`Resolved ${packageName} version using ${command.name}`, { version });
+
return version;
}
+
+ const packageJsonVersion = this.packageJson.dependencies?.[packageName];
+
+ if (typeof packageJsonVersion === "string") {
+ logger.debug(`Resolved ${packageName} version using package.json`, { packageJsonVersion });
+
+ return packageJsonVersion;
+ }
+
+ if (opts.allowDev) {
+ const devPackageJsonVersion = this.packageJson.devDependencies?.[packageName];
+
+ if (typeof devPackageJsonVersion === "string") {
+ logger.debug(`Resolved ${packageName} version using devDependencies`, {
+ devPackageJsonVersion,
+ });
+
+ return devPackageJsonVersion;
+ }
+ }
} catch (error) {
logger.debug(`Failed to resolve dependency version using ${command.name}`, {
packageName,
@@ -176,6 +203,11 @@ interface PackageManagerCommands {
packageName: string,
options: PackageManagerOptions
): Promise;
+
+ resolveDependencyVersions(
+ packageNames: string[],
+ options: PackageManagerOptions
+ ): Promise>;
}
class PNPMCommands implements PackageManagerCommands {
@@ -197,7 +229,7 @@ class PNPMCommands implements PackageManagerCommands {
const { stdout } = await $({ cwd: options.cwd })`${this.cmd} list ${packageName} -r --json`;
const result = JSON.parse(stdout) as PnpmList;
- logger.debug(`Resolving ${packageName} version using ${this.name}`, { result });
+ logger.debug(`Resolving ${packageName} version using ${this.name}`);
// Return the first dependency version that matches the package name
for (const dep of result) {
@@ -208,6 +240,31 @@ class PNPMCommands implements PackageManagerCommands {
}
}
}
+
+ async resolveDependencyVersions(
+ packageNames: string[],
+ options: PackageManagerOptions
+ ): Promise> {
+ const { stdout } = await $({ cwd: options.cwd })`${this.cmd} list ${packageNames} -r --json`;
+ const result = JSON.parse(stdout) as PnpmList;
+
+ logger.debug(`Resolving ${packageNames.join(" ")} version using ${this.name}`);
+
+ const results: Record = {};
+
+ // Return the first dependency version that matches the package name
+ for (const dep of result) {
+ for (const packageName of packageNames) {
+ const dependency = dep.dependencies?.[packageName];
+
+ if (dependency) {
+ results[packageName] = dependency.version;
+ }
+ }
+ }
+
+ return results;
+ }
}
type NpmDependency = {
@@ -246,6 +303,28 @@ class NPMCommands implements PackageManagerCommands {
return this.#recursivelySearchDependencies(output.dependencies, packageName);
}
+ async resolveDependencyVersions(
+ packageNames: string[],
+ options: PackageManagerOptions
+ ): Promise> {
+ const { stdout } = await $({ cwd: options.cwd })`${this.cmd} list ${packageNames} --json`;
+ const output = JSON.parse(stdout) as NpmListOutput;
+
+ logger.debug(`Resolving ${packageNames.join(" ")} version using ${this.name}`, { output });
+
+ const results: Record = {};
+
+ for (const packageName of packageNames) {
+ const version = this.#recursivelySearchDependencies(output.dependencies, packageName);
+
+ if (version) {
+ results[packageName] = version;
+ }
+ }
+
+ return results;
+ }
+
#recursivelySearchDependencies(
dependencies: Record,
packageName: string
@@ -286,7 +365,7 @@ class YarnCommands implements PackageManagerCommands {
const lines = stdout.split("\n");
- logger.debug(`Resolving ${packageName} version using ${this.name}`, { lines });
+ logger.debug(`Resolving ${packageName} version using ${this.name}`);
for (const line of lines) {
const json = JSON.parse(line);
@@ -296,4 +375,54 @@ class YarnCommands implements PackageManagerCommands {
}
}
}
+
+ async resolveDependencyVersions(
+ packageNames: string[],
+ options: PackageManagerOptions
+ ): Promise> {
+ const { stdout } = await $({ cwd: options.cwd })`${this.cmd} info ${packageNames} --json`;
+
+ const lines = stdout.split("\n");
+
+ logger.debug(`Resolving ${packageNames.join(" ")} version using ${this.name}`);
+
+ const results: Record = {};
+
+ for (const line of lines) {
+ const json = JSON.parse(line);
+
+ const packageName = this.#parseYarnValueIntoPackageName(json.value);
+
+ if (packageNames.includes(packageName)) {
+ results[packageName] = json.children.Version;
+ }
+ }
+
+ return results;
+ }
+
+ // The "value" when doing yarn info is formatted like this:
+ // "package-name@npm:version" or "package-name@workspace:version"
+ // This function will parse the value into just the package name.
+ // This correctly handles scoped packages as well e.g. @scope/package-name@npm:version
+ #parseYarnValueIntoPackageName(value: string): string {
+ const parts = value.split("@");
+
+ // If the value does not contain an "@" symbol, then it's just the package name
+ if (parts.length === 3) {
+ return parts[1] as string;
+ }
+
+ // If the value contains an "@" symbol, then the package name is the first part
+ return parts[0] as string;
+ }
+}
+
+function isBuiltInModule(module: string): boolean {
+ // if the module has node: prefix, it's a built-in module
+ if (module.startsWith("node:")) {
+ return true;
+ }
+
+ return builtinModules.includes(module);
}
diff --git a/packages/cli-v3/src/workers/prod/entry-point.ts b/packages/cli-v3/src/workers/prod/entry-point.ts
index a3bd67aab..a39ebcc58 100644
--- a/packages/cli-v3/src/workers/prod/entry-point.ts
+++ b/packages/cli-v3/src/workers/prod/entry-point.ts
@@ -91,7 +91,7 @@ class ProdWorker {
// Currently, this is only used for duration waits. Might need adjusting for other use cases.
this.#backgroundWorker.onCancelCheckpoint.attach(async (message) => {
- logger.log("onCancelCheckpoint()", { message });
+ logger.log("onCancelCheckpoint", { message });
const { checkpointCanceled } = await this.#coordinatorSocket.socket.emitWithAck(
"CANCEL_CHECKPOINT",
diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md
index bca332d2c..4ff628804 100644
--- a/packages/cli/CHANGELOG.md
+++ b/packages/cli/CHANGELOG.md
@@ -1,5 +1,22 @@
# create-trigger
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- Updated dependencies [e337b2165]
+- Updated dependencies [9e5382951]
+ - @trigger.dev/core@3.0.0-beta.25
+ - @trigger.dev/yalt@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- Updated dependencies [83dc87155]
+ - @trigger.dev/core@3.0.0-beta.24
+ - @trigger.dev/yalt@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/cli/package.json b/packages/cli/package.json
index c425fc0cb..a901c8e2c 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/cli",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "The Trigger.dev CLI",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
diff --git a/packages/core-apps/CHANGELOG.md b/packages/core-apps/CHANGELOG.md
index 5178b683a..771114d04 100644
--- a/packages/core-apps/CHANGELOG.md
+++ b/packages/core-apps/CHANGELOG.md
@@ -1,5 +1,9 @@
# @trigger.dev/core-apps
+## 3.0.0-beta.25
+
+## 3.0.0-beta.24
+
## 3.0.0-beta.23
## 3.0.0-beta.22
diff --git a/packages/core-apps/package.json b/packages/core-apps/package.json
index f7f776f26..be71c33ec 100644
--- a/packages/core-apps/package.json
+++ b/packages/core-apps/package.json
@@ -1,7 +1,7 @@
{
"name": "@trigger.dev/core-apps",
"description": "Backend core code used across apps",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"private": true,
"license": "MIT",
"main": "./dist/index.js",
diff --git a/packages/core-backend/CHANGELOG.md b/packages/core-backend/CHANGELOG.md
index e85118ed6..d4ddf0db8 100644
--- a/packages/core-backend/CHANGELOG.md
+++ b/packages/core-backend/CHANGELOG.md
@@ -1,5 +1,9 @@
# @trigger.dev/core-backend
+## 3.0.0-beta.25
+
+## 3.0.0-beta.24
+
## 3.0.0-beta.23
## 3.0.0-beta.22
diff --git a/packages/core-backend/package.json b/packages/core-backend/package.json
index e69087107..827bb633c 100644
--- a/packages/core-backend/package.json
+++ b/packages/core-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/core-backend",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Core code used across `@trigger.dev/sdk` and Trigger.dev server",
"license": "MIT",
"main": "./dist/index.js",
diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md
index 77acfe5d4..2c18de9fb 100644
--- a/packages/core/CHANGELOG.md
+++ b/packages/core/CHANGELOG.md
@@ -1,5 +1,18 @@
# internal-platform
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- e337b2165: Add a postInstall option to allow running scripts after dependencies have been installed in deployed images
+- 9e5382951: Improve the display of non-object return types in the run trace viewer
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- 83dc87155: Fix issues with consecutive waits
+
## 3.0.0-beta.23
## 3.0.0-beta.22
diff --git a/packages/core/package.json b/packages/core/package.json
index 772d7e235..3097fc563 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/core",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Core code used across the Trigger.dev SDK and platform",
"license": "MIT",
"main": "./dist/index.js",
diff --git a/packages/core/src/v3/index.ts b/packages/core/src/v3/index.ts
index 2428a7c7e..d8698d0ac 100644
--- a/packages/core/src/v3/index.ts
+++ b/packages/core/src/v3/index.ts
@@ -28,6 +28,7 @@ export {
flattenAttributes,
primitiveValueOrflattenedAttributes,
unflattenAttributes,
+ NULL_SENTINEL,
} from "./utils/flattenAttributes";
export { omit } from "./utils/omit";
export {
diff --git a/packages/core/src/v3/schemas/schemas.ts b/packages/core/src/v3/schemas/schemas.ts
index 5a609a21d..2d73b74dd 100644
--- a/packages/core/src/v3/schemas/schemas.ts
+++ b/packages/core/src/v3/schemas/schemas.ts
@@ -212,6 +212,7 @@ export const Config = z.object({
dependenciesToBundle: z.array(z.union([z.string(), RegexSchema])).optional(),
logLevel: z.string().optional(),
enableConsoleLogging: z.boolean().optional(),
+ postInstall: z.string().optional(),
});
export type Config = z.infer;
diff --git a/packages/core/src/v3/types/config.ts b/packages/core/src/v3/types/config.ts
index 81786576d..33055ec55 100644
--- a/packages/core/src/v3/types/config.ts
+++ b/packages/core/src/v3/types/config.ts
@@ -69,4 +69,11 @@ export interface ProjectConfig {
* onStart is called the first time a task is executed in a run (not before every retry)
*/
onStart?: (payload: unknown, params: StartFnParams) => Promise;
+
+ /**
+ * postInstall will run during the deploy build step, after all the dependencies have been installed.
+ *
+ * @example "prisma generate"
+ */
+ postInstall?: string;
}
diff --git a/packages/core/src/v3/utils/flattenAttributes.ts b/packages/core/src/v3/utils/flattenAttributes.ts
index a8afe13ce..e58f5d8b7 100644
--- a/packages/core/src/v3/utils/flattenAttributes.ts
+++ b/packages/core/src/v3/utils/flattenAttributes.ts
@@ -1,5 +1,7 @@
import { Attributes } from "@opentelemetry/api";
+export const NULL_SENTINEL = "$@null((";
+
export function flattenAttributes(
obj: Record | Array | string | boolean | number | null | undefined,
prefix?: string
@@ -7,7 +9,12 @@ export function flattenAttributes(
const result: Attributes = {};
// Check if obj is null or undefined
- if (!obj) {
+ if (obj === undefined) {
+ return result;
+ }
+
+ if (obj === null) {
+ result[prefix || ""] = NULL_SENTINEL;
return result;
}
@@ -27,14 +34,18 @@ export function flattenAttributes(
}
for (const [key, value] of Object.entries(obj)) {
- const newPrefix = `${prefix ? `${prefix}.` : ""}${key}`;
+ const newPrefix = `${prefix ? `${prefix}.` : ""}${Array.isArray(obj) ? `[${key}]` : key}`;
if (Array.isArray(value)) {
for (let i = 0; i < value.length; i++) {
if (typeof value[i] === "object" && value[i] !== null) {
// update null check here as well
Object.assign(result, flattenAttributes(value[i], `${newPrefix}.[${i}]`));
} else {
- result[`${newPrefix}.[${i}]`] = value[i];
+ if (value[i] === null) {
+ result[`${newPrefix}.[${i}]`] = NULL_SENTINEL;
+ } else {
+ result[`${newPrefix}.[${i}]`] = value[i];
+ }
}
}
} else if (isRecord(value)) {
@@ -43,6 +54,8 @@ export function flattenAttributes(
} else {
if (typeof value === "number" || typeof value === "string" || typeof value === "boolean") {
result[newPrefix] = value;
+ } else if (value === null) {
+ result[newPrefix] = NULL_SENTINEL;
}
}
}
@@ -54,55 +67,69 @@ function isRecord(value: unknown): value is Record {
return value !== null && typeof value === "object" && !Array.isArray(value);
}
-export function unflattenAttributes(obj: Attributes): Record {
+export function unflattenAttributes(
+ obj: Attributes
+): Record | string | number | boolean | null | undefined {
if (typeof obj !== "object" || obj === null || Array.isArray(obj)) {
return obj;
}
+ if (
+ typeof obj === "object" &&
+ obj !== null &&
+ Object.keys(obj).length === 1 &&
+ Object.keys(obj)[0] === ""
+ ) {
+ return rehydrateNull(obj[""]) as any;
+ }
+
+ if (Object.keys(obj).length === 0) {
+ return;
+ }
+
const result: Record = {};
for (const [key, value] of Object.entries(obj)) {
const parts = key.split(".").reduce((acc, part) => {
- // Splitting array indices as separate parts
- if (detectIsArrayIndex(part)) {
- acc.push(part);
+ if (part.includes("[")) {
+ // Handling nested array indices
+ const subparts = part.split(/\[|\]/).filter((p) => p !== "");
+ acc.push(...subparts);
} else {
- acc.push(...part.split(/\.\[(.*?)\]/).filter(Boolean));
+ acc.push(part);
}
return acc;
}, [] as string[]);
- let current: Record = result;
+ let current: any = result;
for (let i = 0; i < parts.length - 1; i++) {
const part = parts[i];
- const isArray = detectIsArrayIndex(part);
- const cleanPart = isArray ? part.substring(1, part.length - 1) : part;
- const nextIsArray = detectIsArrayIndex(parts[i + 1]);
- if (!current[cleanPart]) {
- current[cleanPart] = nextIsArray ? [] : {};
+ const nextPart = parts[i + 1];
+ const isArray = /^\d+$/.test(nextPart);
+ if (isArray && !Array.isArray(current[part])) {
+ current[part] = [];
+ } else if (!isArray && current[part] === undefined) {
+ current[part] = {};
}
- current = current[cleanPart] as Record;
+ current = current[part];
}
const lastPart = parts[parts.length - 1];
- const cleanLastPart = detectIsArrayIndex(lastPart)
- ? parseInt(lastPart.substring(1, lastPart.length - 1), 10)
- : lastPart;
- current[cleanLastPart] = value;
+ current[lastPart] = rehydrateNull(value);
+ }
+
+ // Convert the result to an array if all top-level keys are numeric indices
+ if (Object.keys(result).every((k) => /^\d+$/.test(k))) {
+ const maxIndex = Math.max(...Object.keys(result).map((k) => parseInt(k)));
+ const arrayResult = Array(maxIndex + 1);
+ for (const key in result) {
+ arrayResult[parseInt(key)] = result[key];
+ }
+ return arrayResult as any;
}
return result;
}
-function detectIsArrayIndex(key: string): boolean {
- const match = key.match(/^\[(\d+)\]$/);
-
- if (match) {
- return true;
- }
-
- return false;
-}
-
export function primitiveValueOrflattenedAttributes(
obj: Record | Array | string | boolean | number | undefined,
prefix: string | undefined
@@ -129,3 +156,11 @@ export function primitiveValueOrflattenedAttributes(
return attributes;
}
+
+function rehydrateNull(value: any): any {
+ if (value === NULL_SENTINEL) {
+ return null;
+ }
+
+ return value;
+}
diff --git a/packages/core/src/v3/utils/ioSerialization.ts b/packages/core/src/v3/utils/ioSerialization.ts
index e39c3277e..d03688c95 100644
--- a/packages/core/src/v3/utils/ioSerialization.ts
+++ b/packages/core/src/v3/utils/ioSerialization.ts
@@ -216,11 +216,13 @@ export async function createPacketAttributes(
const parsed = parse(packet.data) as any;
const jsonified = JSON.parse(JSON.stringify(parsed, safeReplacer));
- return {
+ const result = {
...flattenAttributes(jsonified, dataKey),
[dataTypeKey]: "application/json",
};
- } catch {
+
+ return result;
+ } catch (e) {
return;
}
diff --git a/packages/core/test/flattenAttributes.test.ts b/packages/core/test/flattenAttributes.test.ts
index 3ce865112..86c6036cb 100644
--- a/packages/core/test/flattenAttributes.test.ts
+++ b/packages/core/test/flattenAttributes.test.ts
@@ -1,24 +1,50 @@
import { flattenAttributes, unflattenAttributes } from "../src/v3/utils/flattenAttributes";
describe("flattenAttributes", () => {
- it("handles null and undefined gracefully", () => {
- expect(flattenAttributes(null)).toEqual({});
- expect(flattenAttributes(undefined)).toEqual({});
+ it("handles null correctly", () => {
+ expect(flattenAttributes(null)).toEqual({ "": "$@null((" });
+ expect(unflattenAttributes({ "": "$@null((" })).toEqual(null);
+
+ expect(flattenAttributes(null, "$output")).toEqual({ $output: "$@null((" });
+ expect(flattenAttributes({ foo: null })).toEqual({ foo: "$@null((" });
+ expect(unflattenAttributes({ foo: "$@null((" })).toEqual({ foo: null });
+
+ expect(flattenAttributes({ foo: [null] })).toEqual({ "foo.[0]": "$@null((" });
+ expect(unflattenAttributes({ "foo.[0]": "$@null((" })).toEqual({ foo: [null] });
+
+ expect(flattenAttributes([null])).toEqual({ "[0]": "$@null((" });
+ expect(unflattenAttributes({ "[0]": "$@null((" })).toEqual([null]);
});
it("flattens string attributes correctly", () => {
const result = flattenAttributes("testString");
expect(result).toEqual({ "": "testString" });
+ expect(unflattenAttributes(result)).toEqual("testString");
});
it("flattens number attributes correctly", () => {
const result = flattenAttributes(12345);
expect(result).toEqual({ "": 12345 });
+ expect(unflattenAttributes(result)).toEqual(12345);
});
it("flattens boolean attributes correctly", () => {
const result = flattenAttributes(true);
expect(result).toEqual({ "": true });
+ expect(unflattenAttributes(result)).toEqual(true);
+ });
+
+ it("flattens boolean attributes correctly", () => {
+ const result = flattenAttributes(true, "$output");
+ expect(result).toEqual({ $output: true });
+ expect(unflattenAttributes(result)).toEqual({ $output: true });
+ });
+
+ it("flattens array attributes correctly", () => {
+ const input = [1, 2, 3];
+ const result = flattenAttributes(input);
+ expect(result).toEqual({ "[0]": 1, "[1]": 2, "[2]": 3 });
+ expect(unflattenAttributes(result)).toEqual(input);
});
it("flattens complex objects correctly", () => {
diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md
index 3e1319a18..d66e8e15a 100644
--- a/packages/eslint-plugin/CHANGELOG.md
+++ b/packages/eslint-plugin/CHANGELOG.md
@@ -1,5 +1,9 @@
# @trigger.dev/eslint-plugin
+## 3.0.0-beta.25
+
+## 3.0.0-beta.24
+
## 3.0.0-beta.23
## 3.0.0-beta.22
diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json
index e48df6b85..64c4e6a54 100644
--- a/packages/eslint-plugin/package.json
+++ b/packages/eslint-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/eslint-plugin",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "ESLint plugin with trigger.dev best practices",
"keywords": [
"eslint",
diff --git a/packages/express/CHANGELOG.md b/packages/express/CHANGELOG.md
index 0753eb35a..0142ae384 100644
--- a/packages/express/CHANGELOG.md
+++ b/packages/express/CHANGELOG.md
@@ -1,5 +1,17 @@
# @trigger.dev/express
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/express/package.json b/packages/express/package.json
index 49c3432c2..aef773ff0 100644
--- a/packages/express/package.json
+++ b/packages/express/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/express",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Official Express adapter for Trigger.dev",
"license": "MIT",
"main": "./dist/index.js",
@@ -23,7 +23,7 @@
"./package.json": "./package.json"
},
"devDependencies": {
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"@trigger.dev/tsconfig": "workspace:*",
"@types/debug": "^4.1.7",
"@types/express": "^4.17.13",
@@ -39,7 +39,7 @@
"build:tsup": "tsup"
},
"peerDependencies": {
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23"
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25"
},
"dependencies": {
"debug": "^4.3.4",
diff --git a/packages/hono/CHANGELOG.md b/packages/hono/CHANGELOG.md
index ef522e646..fd513a107 100644
--- a/packages/hono/CHANGELOG.md
+++ b/packages/hono/CHANGELOG.md
@@ -1,5 +1,17 @@
# @trigger.dev/hono
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/hono/package.json b/packages/hono/package.json
index 59242b114..c147c8807 100644
--- a/packages/hono/package.json
+++ b/packages/hono/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/hono",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "A Trigger.dev adapter for Hono.dev",
"license": "MIT",
"main": "./dist/index.js",
@@ -32,7 +32,7 @@
},
"peerDependencies": {
"hono": "3.x",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23"
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25"
},
"devDependencies": {
"@trigger.dev/tsconfig": "workspace:*",
diff --git a/packages/integration-kit/CHANGELOG.md b/packages/integration-kit/CHANGELOG.md
index 51e0c2e55..4a3f5f772 100644
--- a/packages/integration-kit/CHANGELOG.md
+++ b/packages/integration-kit/CHANGELOG.md
@@ -1,5 +1,20 @@
# @trigger.dev/integration-kit
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- Updated dependencies [e337b2165]
+- Updated dependencies [9e5382951]
+ - @trigger.dev/core@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- Updated dependencies [83dc87155]
+ - @trigger.dev/core@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/integration-kit/package.json b/packages/integration-kit/package.json
index e6db7a9f7..c4430af34 100644
--- a/packages/integration-kit/package.json
+++ b/packages/integration-kit/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/integration-kit",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Trigger.dev Integration Kit has helpers to make creating integrations easier",
"license": "MIT",
"main": "./dist/index.js",
diff --git a/packages/nestjs/CHANGELOG.md b/packages/nestjs/CHANGELOG.md
index e8a25cf8f..dd71d2081 100644
--- a/packages/nestjs/CHANGELOG.md
+++ b/packages/nestjs/CHANGELOG.md
@@ -1,5 +1,17 @@
# @trigger.dev/nestjs
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/nestjs/package.json b/packages/nestjs/package.json
index 007ebc785..5c854a42d 100644
--- a/packages/nestjs/package.json
+++ b/packages/nestjs/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/nestjs",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Official NestJS adapter for Trigger.dev",
"license": "MIT",
"main": "./dist/index.js",
@@ -23,7 +23,7 @@
"./package.json": "./package.json"
},
"devDependencies": {
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"@trigger.dev/tsconfig": "workspace:*",
"@types/debug": "^4.1.7",
"@types/express": "^4.17.13",
@@ -41,7 +41,7 @@
},
"peerDependencies": {
"@nestjs/common": ">=10.0.0",
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23"
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25"
},
"dependencies": {
"@nestjs/common": "^10.2.4",
diff --git a/packages/nextjs/CHANGELOG.md b/packages/nextjs/CHANGELOG.md
index bbc1e02e5..d54dafdc9 100644
--- a/packages/nextjs/CHANGELOG.md
+++ b/packages/nextjs/CHANGELOG.md
@@ -1,5 +1,17 @@
# @trigger.dev/nextjs
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json
index 437f03523..2fbb99668 100644
--- a/packages/nextjs/package.json
+++ b/packages/nextjs/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/nextjs",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Trigger.dev Next.js integration",
"license": "MIT",
"main": "./dist/index.js",
@@ -41,7 +41,7 @@
"build:tsup": "tsup"
},
"peerDependencies": {
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"next": ">=12.0.0"
},
"dependencies": {
diff --git a/packages/otlp-importer/CHANGELOG.md b/packages/otlp-importer/CHANGELOG.md
index 0f5b96e57..68255bcd4 100644
--- a/packages/otlp-importer/CHANGELOG.md
+++ b/packages/otlp-importer/CHANGELOG.md
@@ -1,5 +1,9 @@
# @trigger.dev/otlp-importer
+## 3.0.0-beta.25
+
+## 3.0.0-beta.24
+
## 3.0.0-beta.23
## 3.0.0-beta.22
diff --git a/packages/otlp-importer/package.json b/packages/otlp-importer/package.json
index 8bbf16e06..92a1703c8 100644
--- a/packages/otlp-importer/package.json
+++ b/packages/otlp-importer/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/otlp-importer",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "OpenTelemetry OTLP Importer for Node.js written in TypeScript",
"license": "MIT",
"main": "./dist/index.js",
diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md
index f0a4d0903..815e11879 100644
--- a/packages/react/CHANGELOG.md
+++ b/packages/react/CHANGELOG.md
@@ -1,5 +1,20 @@
# @trigger.dev/react
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- Updated dependencies [e337b2165]
+- Updated dependencies [9e5382951]
+ - @trigger.dev/core@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- Updated dependencies [83dc87155]
+ - @trigger.dev/core@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/react/package.json b/packages/react/package.json
index 1db7b2aa5..afe0a0337 100644
--- a/packages/react/package.json
+++ b/packages/react/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/react",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Trigger.dev React SDK",
"license": "MIT",
"types": "dist/index.d.ts",
@@ -27,7 +27,7 @@
},
"dependencies": {
"@tanstack/react-query": "5.0.0-beta.2",
- "@trigger.dev/core": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/core": "workspace:^3.0.0-beta.25",
"debug": "^4.3.4",
"zod": "3.22.3"
},
diff --git a/packages/remix/CHANGELOG.md b/packages/remix/CHANGELOG.md
index 5f5166ba0..2af5967eb 100644
--- a/packages/remix/CHANGELOG.md
+++ b/packages/remix/CHANGELOG.md
@@ -1,5 +1,17 @@
# @trigger.dev/remix
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/remix/package.json b/packages/remix/package.json
index 7d495ab4f..17880f904 100644
--- a/packages/remix/package.json
+++ b/packages/remix/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/remix",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Trigger.dev Remix integration",
"license": "MIT",
"main": "./dist/index.js",
@@ -39,7 +39,7 @@
"build:tsup": "tsup"
},
"peerDependencies": {
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25",
"@remix-run/server-runtime": ">1.19.0"
},
"dependencies": {
diff --git a/packages/sveltekit/CHANGELOG.md b/packages/sveltekit/CHANGELOG.md
index f03ba813a..54aa0d04c 100644
--- a/packages/sveltekit/CHANGELOG.md
+++ b/packages/sveltekit/CHANGELOG.md
@@ -1,5 +1,17 @@
# @trigger.dev/sveltekit
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/sveltekit/package.json b/packages/sveltekit/package.json
index b7304492f..2bfd6c606 100644
--- a/packages/sveltekit/package.json
+++ b/packages/sveltekit/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/sveltekit",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "Trigger.dev svelteKit integration",
"license": "MIT",
"main": "./dist/index.js",
@@ -39,7 +39,7 @@
"build:tsup": "tsup"
},
"peerDependencies": {
- "@trigger.dev/sdk": "workspace:^3.0.0-beta.23"
+ "@trigger.dev/sdk": "workspace:^3.0.0-beta.25"
},
"dependencies": {
"debug": "^4.3.4"
diff --git a/packages/testing/CHANGELOG.md b/packages/testing/CHANGELOG.md
index f5cc3e84c..03c6c0d3b 100644
--- a/packages/testing/CHANGELOG.md
+++ b/packages/testing/CHANGELOG.md
@@ -1,5 +1,22 @@
# @trigger.dev/testing
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- Updated dependencies [e337b2165]
+- Updated dependencies [9e5382951]
+ - @trigger.dev/core@3.0.0-beta.25
+ - @trigger.dev/sdk@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- Updated dependencies [83dc87155]
+ - @trigger.dev/core@3.0.0-beta.24
+ - @trigger.dev/sdk@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/testing/package.json b/packages/testing/package.json
index bd968f7d1..719bd4106 100644
--- a/packages/testing/package.json
+++ b/packages/testing/package.json
@@ -1,7 +1,7 @@
{
"name": "@trigger.dev/testing",
"description": "A collection of useful tools to write tests for Trigger.dev.",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"license": "MIT",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
diff --git a/packages/trigger-sdk/CHANGELOG.md b/packages/trigger-sdk/CHANGELOG.md
index a65a1cea4..b0115e910 100644
--- a/packages/trigger-sdk/CHANGELOG.md
+++ b/packages/trigger-sdk/CHANGELOG.md
@@ -1,5 +1,22 @@
# @trigger.dev/sdk
+## 3.0.0-beta.25
+
+### Patch Changes
+
+- Updated dependencies [e337b2165]
+- Updated dependencies [9e5382951]
+ - @trigger.dev/core@3.0.0-beta.25
+ - @trigger.dev/core-backend@3.0.0-beta.25
+
+## 3.0.0-beta.24
+
+### Patch Changes
+
+- Updated dependencies [83dc87155]
+ - @trigger.dev/core@3.0.0-beta.24
+ - @trigger.dev/core-backend@3.0.0-beta.24
+
## 3.0.0-beta.23
### Patch Changes
diff --git a/packages/trigger-sdk/package.json b/packages/trigger-sdk/package.json
index e8003e063..362304a15 100644
--- a/packages/trigger-sdk/package.json
+++ b/packages/trigger-sdk/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/sdk",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "trigger.dev Node.JS SDK",
"license": "MIT",
"main": "./dist/index.js",
@@ -48,8 +48,8 @@
"@opentelemetry/api": "^1.8.0",
"@opentelemetry/api-logs": "^0.48.0",
"@opentelemetry/semantic-conventions": "^1.22.0",
- "@trigger.dev/core": "workspace:3.0.0-beta.23",
- "@trigger.dev/core-backend": "workspace:3.0.0-beta.23",
+ "@trigger.dev/core": "workspace:3.0.0-beta.25",
+ "@trigger.dev/core-backend": "workspace:3.0.0-beta.25",
"chalk": "^5.2.0",
"cronstrue": "^2.21.0",
"debug": "^4.3.4",
diff --git a/packages/yalt/CHANGELOG.md b/packages/yalt/CHANGELOG.md
index 32a80fb1a..b8e04cc30 100644
--- a/packages/yalt/CHANGELOG.md
+++ b/packages/yalt/CHANGELOG.md
@@ -1,5 +1,9 @@
# @trigger.dev/yalt
+## 3.0.0-beta.25
+
+## 3.0.0-beta.24
+
## 3.0.0-beta.23
## 3.0.0-beta.22
diff --git a/packages/yalt/package.json b/packages/yalt/package.json
index dadb80220..c4d06fdd4 100644
--- a/packages/yalt/package.json
+++ b/packages/yalt/package.json
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/yalt",
- "version": "3.0.0-beta.23",
+ "version": "3.0.0-beta.25",
"description": "yalt.dev client library",
"license": "MIT",
"main": "./dist/index.js",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index be2dc4374..b2aae1180 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -845,10 +845,10 @@ importers:
integrations/airtable:
dependencies:
'@trigger.dev/integration-kit':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
airtable:
specifier: ^0.12.1
@@ -888,10 +888,10 @@ importers:
specifier: ^12.0.10
version: 12.0.10
'@trigger.dev/integration-kit':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
octokit:
specifier: ^3.1.2
@@ -931,10 +931,10 @@ importers:
specifier: ^8.0.0
version: 8.0.0
'@trigger.dev/integration-kit':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
zod:
specifier: 3.22.3
@@ -962,10 +962,10 @@ importers:
integrations/openai:
dependencies:
'@trigger.dev/integration-kit':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
openai:
specifier: ^4.16.1
@@ -1005,10 +1005,10 @@ importers:
specifier: ^2.7.0
version: 2.7.0
'@trigger.dev/integration-kit':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
devDependencies:
'@trigger.dev/tsconfig':
@@ -1033,10 +1033,10 @@ importers:
integrations/replicate:
dependencies:
'@trigger.dev/integration-kit':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
replicate:
specifier: ^0.18.1
@@ -1067,10 +1067,10 @@ importers:
integrations/resend:
dependencies:
'@trigger.dev/integration-kit':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
resend:
specifier: ^2.1.0
@@ -1101,10 +1101,10 @@ importers:
specifier: ^7.7.0
version: 7.7.0
'@trigger.dev/integration-kit':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
devDependencies:
'@trigger.dev/tsconfig':
@@ -1132,10 +1132,10 @@ importers:
specifier: ^8.0.2
version: 8.0.2
'@trigger.dev/integration-kit':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
zod:
specifier: 3.22.3
@@ -1166,7 +1166,7 @@ importers:
specifier: ^6.8.1
version: 6.8.1
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
zod:
specifier: 3.22.3
@@ -1194,10 +1194,10 @@ importers:
integrations/stripe:
dependencies:
'@trigger.dev/integration-kit':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
stripe:
specifier: ^12.14.0
@@ -1231,10 +1231,10 @@ importers:
specifier: ^2.26.0
version: 2.31.0
'@trigger.dev/integration-kit':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
supabase-management-js:
specifier: ^1.0.0
@@ -1265,10 +1265,10 @@ importers:
integrations/typeform:
dependencies:
'@trigger.dev/integration-kit':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../../packages/trigger-sdk
'@typeform/api-client':
specifier: ^1.8.0
@@ -1296,7 +1296,7 @@ importers:
packages/astro:
dependencies:
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../trigger-sdk
debug:
specifier: ^4.3.4
@@ -1514,7 +1514,7 @@ importers:
specifier: ^1.22.0
version: 1.22.0
'@trigger.dev/core':
- specifier: workspace:3.0.0-beta.23
+ specifier: workspace:3.0.0-beta.25
version: link:../core
'@types/degit':
specifier: ^2.8.3
@@ -1956,7 +1956,7 @@ importers:
version: 4.18.2
devDependencies:
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../trigger-sdk
'@trigger.dev/tsconfig':
specifier: workspace:*
@@ -2051,7 +2051,7 @@ importers:
version: 4.3.4(supports-color@8.1.1)
devDependencies:
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../trigger-sdk
'@trigger.dev/tsconfig':
specifier: workspace:*
@@ -2084,7 +2084,7 @@ importers:
packages/nextjs:
dependencies:
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../trigger-sdk
debug:
specifier: ^4.3.4
@@ -2170,7 +2170,7 @@ importers:
specifier: 5.0.0-beta.2
version: 5.0.0-beta.2(react@18.2.0)
'@trigger.dev/core':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../core
debug:
specifier: ^4.3.4
@@ -2213,7 +2213,7 @@ importers:
packages/remix:
dependencies:
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../trigger-sdk
debug:
specifier: ^4.3.4
@@ -2250,7 +2250,7 @@ importers:
packages/sveltekit:
dependencies:
'@trigger.dev/sdk':
- specifier: workspace:^3.0.0-beta.23
+ specifier: workspace:^3.0.0-beta.25
version: link:../trigger-sdk
debug:
specifier: ^4.3.4
@@ -2324,10 +2324,10 @@ importers:
specifier: ^1.22.0
version: 1.22.0
'@trigger.dev/core':
- specifier: workspace:3.0.0-beta.23
+ specifier: workspace:3.0.0-beta.25
version: link:../core
'@trigger.dev/core-backend':
- specifier: workspace:3.0.0-beta.23
+ specifier: workspace:3.0.0-beta.25
version: link:../core-backend
chalk:
specifier: ^5.2.0
@@ -3083,6 +3083,12 @@ importers:
'@opentelemetry/api':
specifier: ^1.8.0
version: 1.8.0
+ '@react-email/components':
+ specifier: ^0.0.17
+ version: 0.0.17(@types/react@18.3.1)(react@18.2.0)
+ '@react-email/render':
+ specifier: ^0.0.7
+ version: 0.0.7
'@sindresorhus/slugify':
specifier: ^2.2.1
version: 2.2.1
@@ -3110,6 +3116,12 @@ importers:
pg:
specifier: ^8.11.5
version: 8.11.5
+ react:
+ specifier: ^18.2.0
+ version: 18.2.0
+ react-email:
+ specifier: ^1.6.1
+ version: 1.6.1(react@18.2.0)
reflect-metadata:
specifier: ^0.1.13
version: 0.1.13
@@ -3129,6 +3141,9 @@ importers:
'@types/node':
specifier: 20.4.2
version: 20.4.2
+ '@types/react':
+ specifier: ^18.3.1
+ version: 18.3.1
trigger.dev:
specifier: workspace:*
version: link:../../packages/cli-v3
@@ -8771,7 +8786,7 @@ packages:
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
dependencies:
'@npmcli/git': 4.1.0
- glob: 10.3.3
+ glob: 10.3.10
hosted-git-info: 6.1.1
json-parse-even-better-errors: 3.0.0
normalize-package-data: 5.0.0
@@ -9717,6 +9732,20 @@ packages:
react: 18.2.0
dev: false
+ /@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.1)(react@18.2.0):
+ resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.22.5
+ '@types/react': 18.3.1
+ react: 18.2.0
+ dev: false
+
/@radix-ui/react-context@1.0.0(react@18.2.0):
resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==}
peerDependencies:
@@ -10293,6 +10322,21 @@ packages:
react: 18.2.0
dev: false
+ /@radix-ui/react-slot@1.0.2(@types/react@18.3.1)(react@18.2.0):
+ resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ dependencies:
+ '@babel/runtime': 7.22.5
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.2.0)
+ '@types/react': 18.3.1
+ react: 18.2.0
+ dev: false
+
/@radix-ui/react-switch@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.69)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==}
peerDependencies:
@@ -11206,24 +11250,138 @@ packages:
react: 18.2.0
dev: false
+ /@react-email/body@0.0.8(react@18.2.0):
+ resolution: {integrity: sha512-gqdkNYlIaIw0OdpWu8KjIcQSIFvx7t2bZpXVxMMvBS859Ia1+1X3b5RNbjI3S1ZqLddUf7owOHkO4MiXGE+nxg==}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /@react-email/button@0.0.15(react@18.2.0):
+ resolution: {integrity: sha512-9Zi6SO3E8PoHYDfcJTecImiHLyitYWmIRs0HE3Ogra60ZzlWP2EXu+AZqwQnhXuq+9pbgwBWNWxB5YPetNPTNA==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/@react-email/button@0.0.4:
resolution: {integrity: sha512-6leTjsbf37fBb54AKSTOp1lzDsEFgJ/RdoBAy9MhuiciOqnUhJ5BRHZd4LJkt46FsBrILs8Ob50Y4quzV4kP0Q==}
dependencies:
react: 18.2.0
dev: false
+ /@react-email/code-block@0.0.4(react@18.2.0):
+ resolution: {integrity: sha512-xjVLi/9dFNJ70N7hYme+21eQWa3b9/kgp4V+FKQJkQCuIMobxPRCIGM5jKD/0Vo2OqrE5chYv/dkg/aP8a8sPg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ prismjs: 1.29.0
+ react: 18.2.0
+ dev: false
+
+ /@react-email/code-inline@0.0.2(react@18.2.0):
+ resolution: {integrity: sha512-0cmgbbibFeOJl0q04K9jJlPDuJ+SEiX/OG6m3Ko7UOkG3TqjRD8Dtvkij6jNDVfUh/zESpqJCP2CxrCLLMUjdA==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /@react-email/column@0.0.10(react@18.2.0):
+ resolution: {integrity: sha512-MnP8Mnwipr0X3XtdD6jMLckb0sI5/IlS6Kl/2F6/rsSWBJy5Gg6nizlekTdkwDmy0kNSe3/1nGU0Zqo98pl63Q==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /@react-email/components@0.0.17(@types/react@18.3.1)(react@18.2.0):
+ resolution: {integrity: sha512-x5gGQaK0QchbwHvUrCBVnE8GCWdO5osTVuTSA54Fwzels6ZDeNTHEYRx9gI3Nwcf/dkoVYkVH4rzWST0SF0MLA==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ '@react-email/body': 0.0.8(react@18.2.0)
+ '@react-email/button': 0.0.15(react@18.2.0)
+ '@react-email/code-block': 0.0.4(react@18.2.0)
+ '@react-email/code-inline': 0.0.2(react@18.2.0)
+ '@react-email/column': 0.0.10(react@18.2.0)
+ '@react-email/container': 0.0.12(react@18.2.0)
+ '@react-email/font': 0.0.6(react@18.2.0)
+ '@react-email/head': 0.0.8(react@18.2.0)
+ '@react-email/heading': 0.0.12(@types/react@18.3.1)(react@18.2.0)
+ '@react-email/hr': 0.0.8(react@18.2.0)
+ '@react-email/html': 0.0.8(react@18.2.0)
+ '@react-email/img': 0.0.8(react@18.2.0)
+ '@react-email/link': 0.0.8(react@18.2.0)
+ '@react-email/markdown': 0.0.10(react@18.2.0)
+ '@react-email/preview': 0.0.9(react@18.2.0)
+ '@react-email/render': 0.0.13
+ '@react-email/row': 0.0.8(react@18.2.0)
+ '@react-email/section': 0.0.12(react@18.2.0)
+ '@react-email/tailwind': 0.0.16(react@18.2.0)
+ '@react-email/text': 0.0.8(react@18.2.0)
+ react: 18.2.0
+ transitivePeerDependencies:
+ - '@types/react'
+ dev: false
+
+ /@react-email/container@0.0.12(react@18.2.0):
+ resolution: {integrity: sha512-HFu8Pu5COPFfeZxSL+wKv/TV5uO/sp4zQ0XkRCdnGkj/xoq0lqOHVDL4yC2Pu6fxXF/9C3PHDA++5uEYV5WVJw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/@react-email/container@0.0.4:
resolution: {integrity: sha512-NwyppwXFfj+jzociP/jXIVkxCB6q9hNyoyMPIOnSbZDl6A16WaEi4ABo+i8BG3dzqQCJ357KPvMRkn8PJ/pWjA==}
dependencies:
react: 18.2.0
dev: false
+ /@react-email/font@0.0.6(react@18.2.0):
+ resolution: {integrity: sha512-sZZFvEZ4U3vNCAZ8wXqIO3DuGJR2qE/8m2fEH+tdqwa532zGO3zW+UlCTg0b9455wkJSzEBeaWik0IkNvjXzxw==}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/@react-email/head@0.0.2:
resolution: {integrity: sha512-DLPDRPsqxOKTUYMy7TouldjGZ6/ZAnfmQuRFceliL2YyP4QPQyR+cWaYUItw026+wIJ4eNqLmVgb6M6UOFzB9w==}
dependencies:
react: 18.2.0
dev: false
+ /@react-email/head@0.0.8(react@18.2.0):
+ resolution: {integrity: sha512-8/NI0gtQmLIilAe6rebK1TWw3IXHxtrR02rInkQq8yQ7zKbYbzx7Q/FhmsJgAk+uYh2Er/KhgYJ0sHZyDhfMTQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /@react-email/heading@0.0.12(@types/react@18.3.1)(react@18.2.0):
+ resolution: {integrity: sha512-eB7mpnAvDmwvQLoPuwEiPRH4fPXWe6ltz6Ptbry2BlI88F0a2k11Ghb4+sZHBqg7vVw/MKbqEgtLqr3QJ/KfCQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ '@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.2.0)
+ react: 18.2.0
+ transitivePeerDependencies:
+ - '@types/react'
+ dev: false
+
/@react-email/heading@0.0.5:
resolution: {integrity: sha512-guSPzy6x+za+O4ch+3XeRkhgu82rT6FvcDtpuUwAqrFrrY4RTRIZ4jlRWO/hMC9EYGd76PjpsRG7deb+YcwmcQ==}
dependencies:
@@ -11238,28 +11396,83 @@ packages:
react: 18.2.0
dev: false
+ /@react-email/hr@0.0.8(react@18.2.0):
+ resolution: {integrity: sha512-JLVvpCg2wYKEB+n/PGCggWG9fRU5e4lxsGdpK5SDLsCL0ic3OLKSpHMfeE+ZSuw0GixAVVQN7F64PVJHQkd4MQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/@react-email/html@0.0.2:
resolution: {integrity: sha512-j6r7PdBUuH0G5OhiIskCtDerdowkiOia8nzAMbKt2S3vkRkgIIULIZwWA1mEjHXyTP5ZAOeCaqFTILt4Wn1seA==}
dev: false
+ /@react-email/html@0.0.8(react@18.2.0):
+ resolution: {integrity: sha512-arII3wBNLpeJtwyIJXPaILm5BPKhA+nvdC1F9QkuKcOBJv2zXctn8XzPqyGqDfdplV692ulNJP7XY55YqbKp6w==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/@react-email/img@0.0.2:
resolution: {integrity: sha512-ULvl6OnKlifj0kcQ3U0WL2Ita2e6FOqjZb9PFYGzu82ZphceiK3aMetn9tK+WJCsQA1LEKt9fYr5o3Yz8MF58A==}
dependencies:
react: 18.2.0
dev: false
+ /@react-email/img@0.0.8(react@18.2.0):
+ resolution: {integrity: sha512-jx/rPuKo31tV18fu7P5rRqelaH5wkhg83Dq7uLwJpfqhbi4KFBGeBfD0Y3PiLPPoh+WvYf+Adv9W2ghNW8nOMQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/@react-email/link@0.0.2:
resolution: {integrity: sha512-HhUGxOfoBJW6G/7dWs7LIKwkGBn+PfTYcewpkxBoA+IBc6YTwu1KL0gyB3VLTB0qeEXDlT9lNM+qc/EZNsRoaQ==}
dependencies:
react: 18.2.0
dev: false
+ /@react-email/link@0.0.8(react@18.2.0):
+ resolution: {integrity: sha512-nVikuTi8WJHa6Baad4VuRUbUCa/7EtZ1Qy73TRejaCHn+vhetc39XGqHzKLNh+Z/JFL8Hv9g+4AgG16o2R0ogQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /@react-email/markdown@0.0.10(react@18.2.0):
+ resolution: {integrity: sha512-MH0xO+NJ4IuJcx9nyxbgGKAMXyudFjCZ0A2GQvuWajemW9qy2hgnJ3mW3/z5lwcenG+JPn7JyO/iZpizQ7u1tA==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ md-to-react-email: 5.0.2(react@18.2.0)
+ react: 18.2.0
+ dev: false
+
/@react-email/preview@0.0.2:
resolution: {integrity: sha512-qUe4n5R3z999O12H1IGGzq/zCFKKrzRoi30PLCpxqN4e1CWB+e/s0w20UDFJRy7rRpaZYuLTwTQ5w4T6XHNHIg==}
dependencies:
react: 18.2.0
dev: false
+ /@react-email/preview@0.0.9(react@18.2.0):
+ resolution: {integrity: sha512-2fyAA/zzZYfYmxfyn3p2YOIU30klyA6Dq4ytyWq4nfzQWWglt5hNDE0cMhObvRtfjM9ghMSVtoELAb0MWiF/kw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/@react-email/render@0.0.12:
resolution: {integrity: sha512-S8WRv/PqECEi6x0QJBj0asnAb5GFtJaHlnByxLETLkgJjc76cxMYDH4r9wdbuJ4sjkcbpwP3LPnVzwS+aIjT7g==}
engines: {node: '>=18.0.0'}
@@ -11270,6 +11483,16 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
+ /@react-email/render@0.0.13:
+ resolution: {integrity: sha512-lmBizrV+rQeSa3GjiL8/kPU0gENqO/wv+4xrlWANabp9UY3lTLXzy7HMRSE8YFBES9AbxP5VX1iRKuEnsoBDew==}
+ engines: {node: '>=18.0.0'}
+ dependencies:
+ html-to-text: 9.0.5
+ js-beautify: 1.15.1
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
/@react-email/render@0.0.4(react@18.2.0):
resolution: {integrity: sha512-HPWjgw1TKcvYUPh74BjVC8Xq0ZU4nqb/tKsTa/VK/Ln4yXqnakBXNYl/UdHeJs57Ic9RMXSA9iOciQEHLgFWOg==}
engines: {node: '>=16.0.0'}
@@ -11301,18 +11524,54 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
+ /@react-email/row@0.0.8(react@18.2.0):
+ resolution: {integrity: sha512-JsB6pxs/ZyjYpEML3nbwJRGAerjcN/Pa/QG48XUwnT/MioDWrUuyQuefw+CwCrSUZ2P1IDrv2tUD3/E3xzcoKw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/@react-email/section@0.0.1:
resolution: {integrity: sha512-Pb2HcGNhTOtFRJVB+Kq2vTUnd8M+LuZBuHfpUD16ua/m2/mbW5WeXAfSuJ2Tl6qspzvDKLHqVX+o6HBc1qgl2Q==}
dependencies:
react: 18.2.0
dev: false
+ /@react-email/section@0.0.12(react@18.2.0):
+ resolution: {integrity: sha512-UCD/N/BeOTN4h3VZBUaFdiSem6HnpuxD1Q51TdBFnqeNqS5hBomp8LWJJ9s4gzwHWk1XPdNfLA3I/fJwulJshg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
+ /@react-email/tailwind@0.0.16(react@18.2.0):
+ resolution: {integrity: sha512-uMifPxCEHaHLhpS1kVCMGyTeEL+aMYzHT4bgj8CkgCiBoF9wNNfIVMUlHGzHUTv4ZTEPaMfZgC/Hi8RqzL/Ogw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/@react-email/text@0.0.2:
resolution: {integrity: sha512-BUOl5/2nsImBLSBC9XE7Khj3KWpubni73l0jT1weLzXG+GY3cZARTEErSit3BC5/KAG9lVISwFTTOfnVjhVDBA==}
dependencies:
react: 18.2.0
dev: false
+ /@react-email/text@0.0.8(react@18.2.0):
+ resolution: {integrity: sha512-uvN2TNWMrfC9wv/LLmMLbbEN1GrMWZb9dBK14eYxHHAEHCeyvGb5ePZZ2MPyzO7Y5yTC+vFEnCEr76V+hWMxCQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.2.0
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/@react-stately/calendar@3.4.3(react@18.2.0):
resolution: {integrity: sha512-OrEcdskszDjnjVnFuSiDC2PVBJ6lWMCJROD5s6W1LUehUtBp8LX9wPavAGHV43LbhN9ldj560sxaQ4WCddrRCA==}
peerDependencies:
@@ -14246,6 +14505,12 @@ packages:
'@types/scheduler': 0.16.2
csstype: 3.1.1
+ /@types/react@18.3.1:
+ resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==}
+ dependencies:
+ '@types/prop-types': 15.7.5
+ csstype: 3.1.1
+
/@types/request@2.48.12:
resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==}
dependencies:
@@ -17318,6 +17583,7 @@ packages:
/commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+ dev: true
/commander@4.1.1:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
@@ -18436,16 +18702,6 @@ packages:
safe-buffer: 5.2.1
dev: false
- /editorconfig@0.15.3:
- resolution: {integrity: sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==}
- hasBin: true
- dependencies:
- commander: 2.20.3
- lru-cache: 4.1.5
- semver: 5.7.1
- sigmund: 1.0.1
- dev: false
-
/editorconfig@1.0.4:
resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==}
engines: {node: '>=14'}
@@ -21429,18 +21685,6 @@ packages:
minipass: 7.0.3
path-scurry: 1.10.1
- /glob@10.3.3:
- resolution: {integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==}
- engines: {node: '>=16 || 14 >=14.17'}
- hasBin: true
- dependencies:
- foreground-child: 3.1.1
- jackspeak: 2.3.0
- minimatch: 9.0.3
- minipass: 7.0.3
- path-scurry: 1.10.1
- dev: true
-
/glob@7.1.6:
resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
dependencies:
@@ -21493,17 +21737,6 @@ packages:
once: 1.4.0
dev: false
- /glob@8.1.0:
- resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
- engines: {node: '>=12'}
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 5.1.2
- once: 1.4.0
- dev: false
-
/glob@9.3.5:
resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -23031,15 +23264,6 @@ packages:
resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==}
engines: {node: '>=6'}
- /jackspeak@2.3.0:
- resolution: {integrity: sha512-uKmsITSsF4rUWQHzqaRUuyAir3fZfW3f202Ee34lz/gZCi970CPZwyQXLGNgWJvvZbvFyzeyGq0+4fcG/mBKZg==}
- engines: {node: '>=14'}
- dependencies:
- '@isaacs/cliui': 8.0.2
- optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
- dev: true
-
/jackspeak@2.3.6:
resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
engines: {node: '>=14'}
@@ -23721,17 +23945,6 @@ packages:
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
engines: {node: '>=10'}
- /js-beautify@1.14.7:
- resolution: {integrity: sha512-5SOX1KXPFKx+5f6ZrPsIPEY7NwKeQz47n3jm2i+XeHx9MoRsfQenlOP13FQhWvg8JRS0+XLO6XYUQ2GX+q+T9A==}
- engines: {node: '>=10'}
- hasBin: true
- dependencies:
- config-chain: 1.1.13
- editorconfig: 0.15.3
- glob: 8.1.0
- nopt: 6.0.0
- dev: false
-
/js-beautify@1.15.1:
resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==}
engines: {node: '>=14'}
@@ -24471,6 +24684,12 @@ packages:
hasBin: true
dev: false
+ /marked@7.0.4:
+ resolution: {integrity: sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==}
+ engines: {node: '>= 16'}
+ hasBin: true
+ dev: false
+
/match-sorter@6.3.1:
resolution: {integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==}
dependencies:
@@ -24478,6 +24697,15 @@ packages:
remove-accents: 0.4.2
dev: false
+ /md-to-react-email@5.0.2(react@18.2.0):
+ resolution: {integrity: sha512-x6kkpdzIzUhecda/yahltfEl53mH26QdWu4abUF9+S0Jgam8P//Ciro8cdhyMHnT5MQUJYrIbO6ORM2UxPiNNA==}
+ peerDependencies:
+ react: 18.x
+ dependencies:
+ marked: 7.0.4
+ react: 18.2.0
+ dev: false
+
/md5@2.3.0:
resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
dependencies:
@@ -27950,7 +28178,7 @@ packages:
dependencies:
condense-newlines: 0.2.1
extend-shallow: 2.0.1
- js-beautify: 1.14.7
+ js-beautify: 1.15.1
dev: false
/printable-characters@1.0.42:
@@ -29852,10 +30080,6 @@ packages:
/siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
- /sigmund@1.0.1:
- resolution: {integrity: sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==}
- dev: false
-
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
diff --git a/references/v3-catalog/package.json b/references/v3-catalog/package.json
index a6e915e7b..52b673a11 100644
--- a/references/v3-catalog/package.json
+++ b/references/v3-catalog/package.json
@@ -10,6 +10,8 @@
"@ffmpeg-installer/ffmpeg": "^1.1.0",
"@ffprobe-installer/ffprobe": "^2.1.2",
"@opentelemetry/api": "^1.8.0",
+ "@react-email/components": "^0.0.17",
+ "@react-email/render": "^0.0.7",
"@sindresorhus/slugify": "^2.2.1",
"@traceloop/instrumentation-openai": "^0.3.9",
"@trigger.dev/core": "workspace:^3.0.0-beta.0",
@@ -19,6 +21,8 @@
"msw": "^2.2.1",
"openai": "^4.28.0",
"pg": "^8.11.5",
+ "react": "^18.2.0",
+ "react-email": "^1.6.1",
"reflect-metadata": "^0.1.13",
"stripe": "^12.14.0",
"typeorm": "^0.3.20",
@@ -27,6 +31,7 @@
"devDependencies": {
"@trigger.dev/tsconfig": "workspace:*",
"@types/node": "20.4.2",
+ "@types/react": "^18.3.1",
"trigger.dev": "workspace:*",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
diff --git a/references/v3-catalog/prisma/schema.prisma b/references/v3-catalog/prisma/schema.prisma
new file mode 100644
index 000000000..0789f5d39
--- /dev/null
+++ b/references/v3-catalog/prisma/schema.prisma
@@ -0,0 +1,14 @@
+datasource db {
+ provider = "postgresql"
+ url = env("DATABASE_URL")
+ directUrl = env("DIRECT_URL")
+}
+
+generator client {
+ provider = "prisma-client-js"
+}
+
+model User {
+ id String @id @default(cuid())
+ email String @unique
+}
diff --git a/references/v3-catalog/src/trigger/email.tsx b/references/v3-catalog/src/trigger/email.tsx
new file mode 100644
index 000000000..5d2f010b7
--- /dev/null
+++ b/references/v3-catalog/src/trigger/email.tsx
@@ -0,0 +1,13 @@
+import { task } from "@trigger.dev/sdk/v3";
+import { ExampleEmail } from "./emails";
+import { render } from "@react-email/render";
+
+export const emailTask = task({
+ id: "email",
+ run: async () => {
+ return {
+ subject: "Example email",
+ react: render(),
+ };
+ },
+});
diff --git a/references/v3-catalog/src/trigger/emails/index.tsx b/references/v3-catalog/src/trigger/emails/index.tsx
new file mode 100644
index 000000000..d66c79ac6
--- /dev/null
+++ b/references/v3-catalog/src/trigger/emails/index.tsx
@@ -0,0 +1,15 @@
+import { Button, Html } from "@react-email/components";
+import * as React from "react";
+
+export function ExampleEmail(props: {}) {
+ return (
+
+
+
+ );
+}
diff --git a/references/v3-catalog/src/trigger/returnTypes.ts b/references/v3-catalog/src/trigger/returnTypes.ts
index e09dc4bd8..ccac7aa2f 100644
--- a/references/v3-catalog/src/trigger/returnTypes.ts
+++ b/references/v3-catalog/src/trigger/returnTypes.ts
@@ -1,5 +1,30 @@
import { task } from "@trigger.dev/sdk/v3";
+export const returnAllTypes = task({
+ id: "return-all-types",
+ run: async () => {
+ const resultString = await returnString.triggerAndWait();
+ const resultNumber = await returnNumber.triggerAndWait();
+ const resultTrue = await returnTrue.triggerAndWait();
+ const resultFalse = await returnFalse.triggerAndWait();
+ const resultNull = await returnNull.triggerAndWait();
+ const resultUndefined = await returnUndefined.triggerAndWait();
+ const resultObject = await returnObject.triggerAndWait();
+ const resultArray = await returnArray.triggerAndWait();
+
+ return {
+ resultString,
+ resultNumber,
+ resultTrue,
+ resultFalse,
+ resultNull,
+ resultUndefined,
+ resultObject,
+ resultArray,
+ };
+ },
+});
+
export const returnString = task({
id: "return-string",
run: async () => {
diff --git a/references/v3-catalog/trigger.config.ts b/references/v3-catalog/trigger.config.ts
index d30df2e2f..41650c57f 100644
--- a/references/v3-catalog/trigger.config.ts
+++ b/references/v3-catalog/trigger.config.ts
@@ -16,8 +16,8 @@ export const config: TriggerConfig = {
randomize: true,
},
},
- additionalPackages: ["wrangler@3.35.0", "pg@8.11.5"],
- additionalFiles: ["./wrangler/wrangler.toml"],
+ additionalPackages: ["wrangler@3.35.0", "pg@8.11.5", "prisma@5.11.0"],
+ additionalFiles: ["./wrangler/wrangler.toml", "./prisma/schema.prisma"],
dependenciesToBundle: [/@sindresorhus/, "escape-string-regexp"],
instrumentations: [new OpenAIInstrumentation()],
logLevel: "log",
@@ -34,4 +34,5 @@ export const config: TriggerConfig = {
throw error;
},
+ postInstall: "npm exec --package prisma -- prisma generate",
};
diff --git a/references/v3-catalog/tsconfig.json b/references/v3-catalog/tsconfig.json
index 11f740215..707fe9531 100644
--- a/references/v3-catalog/tsconfig.json
+++ b/references/v3-catalog/tsconfig.json
@@ -1,7 +1,8 @@
{
"extends": "@trigger.dev/tsconfig/node18.json",
- "include": ["./src/**/*.ts", "trigger.config.ts"],
+ "include": ["./src/**/*.ts", "trigger.config.ts", "src/trigger/email.tsx"],
"compilerOptions": {
+ "jsx": "react-jsx",
"baseUrl": ".",
"lib": ["DOM", "DOM.Iterable"],
"paths": {