Compare commits

...

11 Commits

Author SHA1 Message Date
Eric Allam 8eb68dd852 Fix pnpm lock file 2024-04-29 14:50:28 +01:00
github-actions[bot] a42037da03 chore: Update version for release (beta) (#1070)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-29 14:48:01 +01:00
Eric Allam 43bc7ed94e Hoist uncaughtException handler to the top of workers to better report error messages 2024-04-29 14:22:55 +01:00
Matt Aitken 4fdb7f8288 Bulk insert environment variables (#1069)
* Fix for #1066. Correct environment username if dev

* WIP changing the form

* WIP on the form

* WIP on repository

* Adding environment variables en masse is working

* WIP on pasting

* useList hook with reducer

* Got bulk insert working with pasting… it was a pain

* Allow overwriting of values

* Set a max height on the new env var form
2024-04-28 18:31:31 +01:00
Matt Aitken 37b9b056c4 Upload payload packets outside of the db transaction 2024-04-28 18:18:33 +01:00
Matt Aitken 801c86bf73 Added search to the test tasks list 2024-04-28 16:10:46 +01:00
Matt Aitken a1de11a001 Default the test page to the “DEV” tab 2024-04-28 15:59:45 +01:00
Praveen Pendyala 29e9e372ee Added example of github workflow for deploy to staging (#1068) 2024-04-26 18:39:34 +01:00
Eric Allam affc128161 Try to fix prisma generate errors 2024-04-26 18:28:17 +01:00
Eric Allam 40ba8ad0ee Fix the test page when a scheduled task has recent run payloads that aren’t scheduled payloads 2024-04-26 18:20:04 +01:00
Matt Aitken 96168eb383 Fixes for test page problems 2024-04-26 17:45:06 +01:00
85 changed files with 1022 additions and 380 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"trigger.dev": patch
---
Hoist uncaughtException handler to the top of workers to better report error messages
+1
View File
@@ -46,6 +46,7 @@
"changesets": [
"angry-eagles-trade",
"beige-pens-dance",
"big-tomatoes-deliver",
"breezy-gorillas-mate",
"chilled-hornets-move",
"clean-pianos-listen",
+3 -1
View File
@@ -4,13 +4,15 @@ on:
jobs:
publish:
runs-on: ubuntu-latest
env:
PRISMA_ENGINES_CHECKSUM_IGNORE_MISSING: 1
outputs:
version: ${{ steps.get_version.outputs.version }}
short_sha: ${{ steps.get_commit.outputs.sha_short }}
steps:
- name: Setup Depot CLI
uses: depot/setup-action@v1
- name: ⬇️ Checkout repo
uses: actions/checkout@v3
with:
@@ -1,5 +1,9 @@
import { Paragraph } from "./Paragraph";
export function Hint({ children }: { children: React.ReactNode }) {
return <Paragraph variant="extra-small">{children}</Paragraph>;
export function Hint({ children, className }: { children: React.ReactNode; className?: string }) {
return (
<Paragraph variant="extra-small" className={className}>
{children}
</Paragraph>
);
}
@@ -195,7 +195,12 @@ function BlankState({ isLoading, filters }: Pick<RunsTableProps, "isLoading" | "
{environment ? (
<>
{" "}
in <EnvironmentLabel environment={environment} size="large" />
in{" "}
<EnvironmentLabel
environment={environment}
userName={environment.userName}
size="large"
/>
</>
) : null}
</Paragraph>
+72
View File
@@ -0,0 +1,72 @@
import { Reducer, useReducer } from "react";
export type ListState<T> = {
items: T[];
};
type AppendAction<T> = {
type: "append";
items: T[];
};
type UpdateAction<T> = {
type: "update";
index: number;
item: T;
};
type DeleteAction<T> = {
type: "delete";
index: number;
};
type InsertAfter<T> = {
type: "insertAfter";
index: number;
items: T[];
};
type Action<T> = AppendAction<T> | UpdateAction<T> | DeleteAction<T> | InsertAfter<T>;
function reducer<T>(state: ListState<T>, action: Action<T>): ListState<T> {
switch (action.type) {
case "append":
return { items: [...state.items, ...action.items] };
case "update":
return {
items: state.items.map((v, i) => (i === action.index ? action.item : v)),
};
case "delete":
return { items: state.items.filter((_, i) => i !== action.index) };
case "insertAfter":
return {
items: [
...state.items.slice(0, action.index + 1),
...action.items,
...state.items.slice(action.index + 1),
],
};
}
}
type HookReturn<T> = {
items: T[];
append: (items: T[]) => void;
update: (index: number, item: T) => void;
delete: (index: number) => void;
insertAfter: (index: number, items: T[]) => void;
};
export function useList<T>(initialItems: T[]): HookReturn<T> {
const [state, dispatch] = useReducer<Reducer<ListState<T>, Action<T>>>(reducer, {
items: initialItems,
});
return {
items: state.items,
append: (items: T[]) => dispatch({ type: "append", items }),
update: (index: number, item: T) => dispatch({ type: "update", index, item }),
delete: (index: number) => dispatch({ type: "delete", index }),
insertAfter: (index: number, items: T[]) => dispatch({ type: "insertAfter", index, items }),
};
}
@@ -63,17 +63,18 @@ export class TestPresenter {
const searchParams = createSearchParams(url, TestSearchParams);
//no environmentId
if (!searchParams.success || !searchParams.params.get("environment")) {
if (!searchParams.success) {
return {
hasSelectedEnvironment: false as const,
environments,
};
}
//default to dev environment
const environment = searchParams.params.get("environment") ?? "dev";
//is the environmentId valid?
const matchingEnvironment = project.environments.find(
(env) => env.slug === searchParams.params.get("environment")
);
const matchingEnvironment = project.environments.find((env) => env.slug === environment);
if (!matchingEnvironment) {
return {
hasSelectedEnvironment: false as const,
@@ -101,7 +102,7 @@ export class TestPresenter {
WHERE "runtimeEnvironmentId" = ${matchingEnvironment.id}
),
latest_workers AS (SELECT * FROM workers WHERE rn = 1)
SELECT bwt.id, version, slug as "taskIdentifier", "filePath", "exportName", bwt."friendlyId"
SELECT bwt.id, version, slug as "taskIdentifier", "filePath", "exportName", bwt."friendlyId", bwt."triggerSource"
FROM latest_workers
JOIN ${sqlDatabaseSchema}."BackgroundWorkerTask" bwt ON bwt."workerId" = latest_workers.id
ORDER BY bwt."exportName" ASC;
@@ -171,17 +171,23 @@ export class TestTaskPresenter {
return {
triggerSource: "SCHEDULED",
task: taskWithEnvironment,
runs: await Promise.all(
latestRuns.map(async (r) => {
const number = Number(r.number);
runs: (
await Promise.all(
latestRuns.map(async (r) => {
const number = Number(r.number);
return {
...r,
number,
payload: await getScheduleTaskRunPayload(r),
};
})
),
const payload = await getScheduleTaskRunPayload(r);
if (payload.success) {
return {
...r,
number,
payload: payload.data,
};
}
})
)
).filter(Boolean),
};
}
}
@@ -189,6 +195,6 @@ export class TestTaskPresenter {
async function getScheduleTaskRunPayload(run: RawRun) {
const payload = await parsePacket({ data: run.payload, dataType: run.payloadType });
const parsed = ScheduledTaskPayload.parse(payload);
const parsed = ScheduledTaskPayload.safeParse(payload);
return parsed;
}
@@ -1,35 +1,43 @@
import { Submission, conform, useForm } from "@conform-to/react";
import {
FieldConfig,
list,
requestIntent,
useFieldList,
useFieldset,
useForm,
} from "@conform-to/react";
import { parse } from "@conform-to/zod";
import { Form, useActionData, useLocation, useNavigate, useNavigation } from "@remix-run/react";
import { PlusIcon, XMarkIcon } from "@heroicons/react/20/solid";
import { Form, useActionData, useNavigate, useNavigation } from "@remix-run/react";
import { ActionFunctionArgs, LoaderFunctionArgs, json } from "@remix-run/server-runtime";
import { Fragment, useEffect, useRef, useState } from "react";
import { RefObject, useCallback, useEffect, useRef, useState } from "react";
import { redirect, typedjson, useTypedLoaderData } from "remix-typedjson";
import { z } from "zod";
import { InlineCode } from "~/components/code/InlineCode";
import { EnvironmentLabel } from "~/components/environments/EnvironmentLabel";
import {
environmentTextClassName,
environmentTitle,
} from "~/components/environments/EnvironmentLabel";
import { Button, LinkButton } from "~/components/primitives/Buttons";
import { Callout } from "~/components/primitives/Callout";
import { Checkbox } from "~/components/primitives/Checkbox";
import { Dialog, DialogContent, DialogHeader } from "~/components/primitives/Dialog";
import { Fieldset } from "~/components/primitives/Fieldset";
import { FormButtons } from "~/components/primitives/FormButtons";
import { FormError } from "~/components/primitives/FormError";
import { Hint } from "~/components/primitives/Hint";
import { Input } from "~/components/primitives/Input";
import { InputGroup } from "~/components/primitives/InputGroup";
import { Label } from "~/components/primitives/Label";
import { Switch } from "~/components/primitives/Switch";
import { prisma } from "~/db.server";
import { useList } from "~/hooks/useList";
import { useOrganization } from "~/hooks/useOrganizations";
import { useProject } from "~/hooks/useProject";
import { redirectWithSuccessMessage } from "~/models/message.server";
import { EnvironmentVariablesPresenter } from "~/presenters/v3/EnvironmentVariablesPresenter.server";
import { requireUserId } from "~/services/session.server";
import {
ProjectParamSchema,
v3EnvironmentVariablesPath,
v3NewEnvironmentVariablesPath,
} from "~/utils/pathBuilder";
import { cn } from "~/utils/cn";
import { ProjectParamSchema, v3EnvironmentVariablesPath } from "~/utils/pathBuilder";
import { EnvironmentVariablesRepository } from "~/v3/environmentVariables/environmentVariablesRepository.server";
import { CreateEnvironmentVariable } from "~/v3/environmentVariables/repository";
import { EnvironmentVariableKey } from "~/v3/environmentVariables/repository";
export const loader = async ({ request, params }: LoaderFunctionArgs) => {
const userId = await requireUserId(request);
@@ -47,7 +55,6 @@ export const loader = async ({ request, params }: LoaderFunctionArgs) => {
environments,
});
} catch (error) {
console.error(error);
throw new Response(undefined, {
status: 400,
statusText: "Something went wrong, if this problem persists please contact support.",
@@ -55,9 +62,39 @@ export const loader = async ({ request, params }: LoaderFunctionArgs) => {
}
};
const Variable = z.object({
key: EnvironmentVariableKey,
value: z.string().nonempty("Value is required"),
});
type Variable = z.infer<typeof Variable>;
const schema = z.object({
action: z.enum(["create", "create-more"]),
...CreateEnvironmentVariable.shape,
overwrite: z.preprocess((i) => {
if (i === "true") return true;
if (i === "false") return false;
return;
}, z.boolean()),
environmentIds: z.preprocess((i) => {
if (typeof i === "string") return [i];
if (Array.isArray(i)) {
const ids = i.filter((v) => typeof v === "string" && v !== "");
if (ids.length === 0) {
return;
}
return ids;
}
return;
}, z.array(z.string(), { required_error: "At least one environment is required" })),
variables: z.preprocess((i) => {
if (!Array.isArray(i)) {
return [];
}
return i;
}, Variable.array().nonempty("At least one variable is required")),
});
export const action = async ({ request, params }: ActionFunctionArgs) => {
@@ -92,22 +129,22 @@ export const action = async ({ request, params }: ActionFunctionArgs) => {
const result = await repository.create(project.id, userId, submission.value);
if (!result.success) {
submission.error.key = result.error;
if (result.variableErrors) {
for (const { key, error } of result.variableErrors) {
const index = submission.value.variables.findIndex((v) => v.key === key);
if (index !== -1) {
submission.error[`variables[${index}].key`] = error;
}
}
} else {
submission.error.variables = result.error;
}
return json(submission);
}
switch (submission.value.action) {
case "create":
return redirect(
v3EnvironmentVariablesPath({ slug: organizationSlug }, { slug: projectParam })
);
case "create-more":
return redirectWithSuccessMessage(
v3NewEnvironmentVariablesPath({ slug: organizationSlug }, { slug: projectParam }),
request,
`Created ${submission.value.key} environment variable`
);
}
return redirect(v3EnvironmentVariablesPath({ slug: organizationSlug }, { slug: projectParam }));
};
export default function Page() {
@@ -118,15 +155,11 @@ export default function Page() {
const navigate = useNavigate();
const organization = useOrganization();
const project = useProject();
const keyFieldRef = useRef<HTMLInputElement>(null);
const isLoading =
navigation.state !== "idle" &&
navigation.formMethod === "post" &&
navigation.formData?.get("action") === "create";
const isLoading = navigation.state !== "idle" && navigation.formMethod === "post";
const [form, { key }] = useForm({
id: "create-environment-variable",
const [form, { environmentIds, variables }] = useForm({
id: "create-environment-variables",
// TODO: type this
lastSubmission: lastSubmission as any,
onValidate({ formData }) {
@@ -141,14 +174,6 @@ export default function Page() {
setIsOpen(true);
}, []);
useEffect(() => {
if (navigation.state !== "idle") return;
if (lastSubmission !== undefined) return;
form.ref.current?.reset();
keyFieldRef.current?.focus();
}, [navigation.state, lastSubmission]);
return (
<Dialog
open={isOpen}
@@ -159,60 +184,63 @@ export default function Page() {
}}
>
<DialogContent>
<DialogHeader>New environment variable</DialogHeader>
<Form method="post" {...form.props}>
<DialogHeader>New environment variables</DialogHeader>
<Form
method="post"
{...form.props}
className="max-h-[70vh] overflow-y-auto scrollbar-thin scrollbar-track-transparent scrollbar-thumb-charcoal-600"
>
<Fieldset className="mt-2">
<InputGroup fullWidth>
<Label>Key</Label>
<Input
{...conform.input(key)}
placeholder="e.g. CLIENT_KEY"
autoFocus
ref={keyFieldRef}
/>
</InputGroup>
<InputGroup fullWidth>
<div className="flex items-center justify-between">
<Label>Values</Label>
<Switch
variant="small"
label="Reveal values"
checked={revealAll}
onCheckedChange={(e) => setRevealAll(e.valueOf())}
/>
</div>
<div className="grid grid-cols-[auto_1fr] gap-x-2 gap-y-2">
{environments.map((environment, index) => {
return (
<Fragment key={environment.id}>
<input
type="hidden"
name={`values[${index}].environmentId`}
value={environment.id}
/>
<label
className="flex items-center justify-end"
htmlFor={`values[${index}].value`}
<Label>Environments</Label>
<div className="flex flex-wrap items-center gap-2">
{environments.map((environment) => (
<Checkbox
key={environment.id}
id={environment.id}
value={environment.id}
name="environmentIds"
type="radio"
label={
<span
className={cn("text-xs uppercase", environmentTextClassName(environment))}
>
<EnvironmentLabel environment={environment} className="h-5 px-2" />
</label>
<Input
type={revealAll ? "text" : "password"}
name={`values[${index}].value`}
placeholder="Not set"
/>
</Fragment>
);
})}
{environmentTitle(environment)}
</span>
}
variant="button"
/>
))}
</div>
<FormError id={environmentIds.errorId}>{environmentIds.error}</FormError>
<Hint>
Dev environment variables specified here will be overridden by ones in your .env
file when running locally.
</Hint>
</InputGroup>
<Hint>Tip: Paste your .env into this form to populate it:</Hint>
<InputGroup fullWidth>
<FieldLayout>
<Label>Keys</Label>
<div className="flex justify-between gap-1">
<Label>Values</Label>
<Switch
variant="small"
label="Reveal"
checked={revealAll}
onCheckedChange={(e) => setRevealAll(e.valueOf())}
/>
</div>
</FieldLayout>
<VariableFields
revealValues={revealAll}
formId={form.id}
formRef={form.ref}
variablesFields={variables}
/>
<FormError id={variables.errorId}>{variables.error}</FormError>
</InputGroup>
<Callout variant="info" className="inline-flex">
Dev environment variables specified here will be overridden by ones in your{" "}
<InlineCode variant="extra-small">.env</InlineCode> file when running locally.
</Callout>
<FormError id={key.errorId}>{key.error}</FormError>
<FormError>{form.error}</FormError>
<FormButtons
confirmButton={
@@ -221,18 +249,18 @@ export default function Page() {
type="submit"
variant="primary/small"
disabled={isLoading}
name="action"
value="create-more"
name="overwrite"
value="false"
>
{isLoading ? "Saving" : "Save and add another"}
{isLoading ? "Saving" : "Save"}
</Button>
<Button
variant="secondary/small"
disabled={isLoading}
name="action"
value="create"
name="overwrite"
value="true"
>
{isLoading ? "Saving" : "Save"}
{isLoading ? "Overwriting" : "Overwrite"}
</Button>
</div>
}
@@ -251,3 +279,164 @@ export default function Page() {
</Dialog>
);
}
function FieldLayout({ children }: { children: React.ReactNode }) {
return <div className="grid w-full grid-cols-[1fr_1fr_2rem] gap-2">{children}</div>;
}
function VariableFields({
revealValues,
formId,
variablesFields,
formRef,
}: {
revealValues: boolean;
formId?: string;
variablesFields: FieldConfig<any>;
formRef: RefObject<HTMLFormElement>;
}) {
const {
items,
append,
update,
delete: remove,
insertAfter,
} = useList<Variable>([{ key: "", value: "" }]);
const handlePaste = useCallback((index: number, e: React.ClipboardEvent<HTMLInputElement>) => {
const clipboardData = e.clipboardData;
if (!clipboardData) return;
let text = clipboardData.getData("text");
//replace carriage returns
text = text.replace(/\r/g, "");
const lines = text.split("\n");
const keyValuePairs = lines.flatMap((line) => {
if (line.trim().startsWith("#")) return [];
const split = line.split("=");
if (split.length === 2) {
return [{ key: split[0], value: split[1] }];
}
return [];
});
if (keyValuePairs.length === 0) return;
//prevent default pasting
e.preventDefault();
const [firstPair, ...rest] = keyValuePairs;
update(index, firstPair);
for (const pair of rest) {
requestIntent(formRef.current ?? undefined, list.append(variablesFields.name));
}
insertAfter(index, rest);
}, []);
const fields = useFieldList(formRef, variablesFields);
return (
<>
{fields.map((field, index) => {
const item = items[index];
return (
<VariableField
formId={formId}
key={index}
index={index}
value={item}
onChange={(value) => update(index, value)}
onPaste={(e) => handlePaste(index, e)}
onDelete={() => {
requestIntent(
formRef.current ?? undefined,
list.remove(variablesFields.name, { index })
);
remove(index);
}}
showDeleteButton={items.length > 1}
showValue={revealValues}
config={field}
/>
);
})}
<Button
variant="tertiary/medium"
type="button"
onClick={() => {
requestIntent(formRef.current ?? undefined, list.append(variablesFields.name));
append([{ key: "", value: "" }]);
}}
LeadingIcon={PlusIcon}
>
Add another
</Button>
</>
);
}
function VariableField({
formId,
index,
value,
onChange,
onPaste,
onDelete,
showDeleteButton,
showValue,
config,
}: {
formId?: string;
index: number;
value: Variable;
onChange: (value: Variable) => void;
onPaste: (e: React.ClipboardEvent<HTMLInputElement>) => void;
onDelete: () => void;
showDeleteButton: boolean;
showValue: boolean;
config: FieldConfig<Variable>;
}) {
const ref = useRef<HTMLFieldSetElement>(null);
const fields = useFieldset(ref, config);
const baseFieldName = `variables[${index}]`;
return (
<fieldset ref={ref}>
<FieldLayout>
<Input
id={`${formId}-${baseFieldName}.key`}
name={`${baseFieldName}.key`}
placeholder="e.g. CLIENT_KEY"
value={value.key}
onChange={(e) => onChange({ ...value, key: e.currentTarget.value })}
autoFocus={index === 0}
onPaste={onPaste}
/>
<Input
id={`${formId}-${baseFieldName}.value`}
name={`${baseFieldName}.value`}
type={showValue ? "text" : "password"}
placeholder="Not set"
value={value.value}
onChange={(e) => onChange({ ...value, value: e.currentTarget.value })}
/>
{showDeleteButton && (
<Button
variant="minimal/medium"
type="button"
onClick={() => onDelete()}
LeadingIcon={XMarkIcon}
/>
)}
</FieldLayout>
<div className="space-y-2">
<FormError id={fields.key.errorId}>{fields.key.error}</FormError>
<FormError id={fields.value.errorId}>{fields.value.error}</FormError>
</div>
</fieldset>
);
}
@@ -187,8 +187,9 @@ export default function Page() {
to={v3NewEnvironmentVariablesPath(organization, project)}
variant="primary/small"
LeadingIcon={PlusIcon}
shortcut={{ key: "n" }}
>
New environment variable
Add new
</LinkButton>
</div>
<Table>
@@ -9,6 +9,7 @@ import {
} from "~/components/environments/EnvironmentLabel";
import { PageBody, PageContainer } from "~/components/layout/AppLayout";
import { Header2 } from "~/components/primitives/Headers";
import { Input } from "~/components/primitives/Input";
import { NavBar, PageTitle } from "~/components/primitives/PageHeader";
import { Paragraph } from "~/components/primitives/Paragraph";
import { RadioButtonCircle } from "~/components/primitives/RadioButton";
@@ -20,6 +21,7 @@ import {
import { Spinner } from "~/components/primitives/Spinner";
import {
Table,
TableBlankRow,
TableBody,
TableCell,
TableHeader,
@@ -32,6 +34,7 @@ import { useLinkStatus } from "~/hooks/useLinkStatus";
import { useOptimisticLocation } from "~/hooks/useOptimisticLocation";
import { useOrganization } from "~/hooks/useOrganizations";
import { useProject } from "~/hooks/useProject";
import { useTextFilter } from "~/hooks/useTextFilter";
import {
SelectedEnvironment,
TaskListItem,
@@ -67,7 +70,7 @@ export default function Page() {
//get optimistic location for the segment control
const optimisticLocation = useOptimisticLocation();
const environment = new URLSearchParams(optimisticLocation.search).get("environment");
const environment = new URLSearchParams(optimisticLocation.search).get("environment") ?? "dev";
const navigation = useNavigation();
@@ -150,11 +153,50 @@ function TaskSelector({
tasks: TaskListItem[];
environmentSlug: string;
}) {
const organization = useOrganization();
const project = useProject();
const { filterText, setFilterText, filteredItems } = useTextFilter<TaskListItem>({
items: tasks,
filter: (task, text) => {
if (task.taskIdentifier.toLowerCase().includes(text.toLowerCase())) {
return true;
}
if (task.exportName.toLowerCase().includes(text.toLowerCase())) {
return true;
}
if (task.filePath.toLowerCase().includes(text.toLowerCase())) {
return true;
}
if (task.id.toLowerCase().includes(text.toLowerCase())) {
return true;
}
if (task.friendlyId.toLowerCase().includes(text.toLowerCase())) {
return true;
}
if (task.triggerSource === "SCHEDULED" && "scheduled".includes(text.toLowerCase())) {
return true;
}
return false;
},
});
return (
<div className="divide-y divide-charcoal-800 overflow-y-auto scrollbar-thin scrollbar-track-transparent scrollbar-thumb-charcoal-600">
<div className="px-2 pb-2">
<Input
placeholder="Search tasks"
variant="medium"
icon="search"
fullWidth={true}
value={filterText}
autoFocus
onChange={(e) => setFilterText(e.target.value)}
/>
</div>
<Table>
<TableHeader>
<TableRow>
@@ -166,42 +208,17 @@ function TaskSelector({
</TableRow>
</TableHeader>
<TableBody>
{tasks.map((t) => {
const path = v3TestTaskPath(organization, project, t, environmentSlug);
const { isActive, isPending } = useLinkStatus(path);
return (
<TableRow
key={t.taskIdentifier}
className={cn(
(isActive || isPending) &&
"z-20 rounded-sm outline outline-1 outline-offset-[-1px] outline-secondary"
)}
>
<TableCell to={path} actionClassName="pl-2.5 pr-1 py-1">
<RadioButtonCircle checked={isActive || isPending} />
</TableCell>
<TableCell to={path} actionClassName="pl-1 pr-2 py-1">
<div className="flex flex-col gap-0.5">
<TaskFunctionName
variant="extra-small"
functionName={t.exportName}
className="-ml-1 inline-flex"
/>
<div className="flex items-start gap-1">
<TaskTriggerSourceIcon source={t.triggerSource} className="size-3.5" />
<Paragraph variant="extra-small" className="text-text-dimmed">
{t.taskIdentifier}
</Paragraph>
</div>
</div>
</TableCell>
<TableCell to={path} actionClassName="px-2 py-1">
{t.filePath}
</TableCell>
</TableRow>
);
})}
{filteredItems.length > 0 ? (
filteredItems.map((t) => (
<TaskRow key={t.friendlyId} task={t} environmentSlug={environmentSlug} />
))
) : (
<TableBlankRow colSpan={3}>
<Paragraph spacing variant="small">
No tasks match "{filterText}"
</Paragraph>
</TableBlankRow>
)}
</TableBody>
</Table>
</div>
@@ -217,3 +234,43 @@ function NoTaskInstructions({ environment }: { environment?: SelectedEnvironment
</div>
);
}
function TaskRow({ task, environmentSlug }: { task: TaskListItem; environmentSlug: string }) {
const organization = useOrganization();
const project = useProject();
const path = v3TestTaskPath(organization, project, task, environmentSlug);
const { isActive, isPending } = useLinkStatus(path);
return (
<TableRow
key={task.taskIdentifier}
className={cn(
(isActive || isPending) &&
"z-20 rounded-sm outline outline-1 outline-offset-[-1px] outline-secondary"
)}
>
<TableCell to={path} actionClassName="pl-2.5 pr-1 py-1">
<RadioButtonCircle checked={isActive || isPending} />
</TableCell>
<TableCell to={path} actionClassName="pl-1 pr-2 py-1">
<div className="flex flex-col gap-0.5">
<TaskFunctionName
variant="extra-small"
functionName={task.exportName}
className="-ml-1 inline-flex"
/>
<div className="flex items-start gap-1">
<TaskTriggerSourceIcon source={task.triggerSource} className="size-3.5" />
<Paragraph variant="extra-small" className="text-text-dimmed">
{task.taskIdentifier}
</Paragraph>
</div>
</div>
</TableCell>
<TableCell to={path} actionClassName="px-2 py-1">
{task.filePath}
</TableCell>
</TableRow>
);
}
@@ -1,10 +1,17 @@
import { Prisma, PrismaClient } from "@trigger.dev/database";
import { Prisma, PrismaClient, RuntimeEnvironmentType } from "@trigger.dev/database";
import { z } from "zod";
import { environmentTitle } from "~/components/environments/EnvironmentLabel";
import { $transaction, prisma } from "~/db.server";
import { env } from "~/env.server";
import { getSecretStore } from "~/services/secrets/secretStore.server";
import { generateFriendlyId } from "../friendlyIdentifiers";
import { EnvironmentVariable, ProjectEnvironmentVariable, Repository, Result } from "./repository";
import { env } from "~/env.server";
import {
CreateResult,
EnvironmentVariable,
ProjectEnvironmentVariable,
Repository,
Result,
} from "./repository";
function secretKeyProjectPrefix(projectId: string) {
return `environmentvariable:${projectId}:`;
@@ -35,8 +42,15 @@ export class EnvironmentVariablesRepository implements Repository {
async create(
projectId: string,
userId: string,
options: { key: string; values: { value: string; environmentId: string }[] }
): Promise<Result> {
options: {
overwrite: boolean;
environmentIds: string[];
variables: {
key: string;
value: string;
}[];
}
): Promise<CreateResult> {
const project = await this.prismaClient.project.findUnique({
where: {
id: projectId,
@@ -55,6 +69,18 @@ export class EnvironmentVariablesRepository implements Repository {
id: true,
},
},
environmentVariables: {
select: {
key: true,
values: {
select: {
environment: {
select: { id: true, type: true },
},
},
},
},
},
},
});
@@ -62,58 +88,109 @@ export class EnvironmentVariablesRepository implements Repository {
return { success: false as const, error: "Project not found" };
}
if (options.values.every((v) => !project.environments.some((e) => e.id === v.environmentId))) {
if (options.environmentIds.every((v) => !project.environments.some((e) => e.id === v))) {
return { success: false as const, error: `Environment not found` };
}
//get rid of empty strings
const values = options.values.filter((v) => v.value.trim() !== "");
//get rid of empty variables
const values = options.variables.filter((v) => v.key.trim() !== "" && v.value.trim() !== "");
if (values.length === 0) {
return { success: false as const, error: `You must set at least one value` };
}
//check if any of them exist in an environment we're setting
if (!options.overwrite) {
const existingVariableKeys: { key: string; environments: RuntimeEnvironmentType[] }[] = [];
for (const variable of values) {
const existingVariable = project.environmentVariables.find((v) => v.key === variable.key);
if (
existingVariable &&
existingVariable.values.some((v) => options.environmentIds.includes(v.environment.id))
) {
existingVariableKeys.push({
key: variable.key,
environments: existingVariable.values
.filter((v) => options.environmentIds.includes(v.environment.id))
.map((v) => v.environment.type),
});
}
}
if (existingVariableKeys.length > 0) {
return {
success: false as const,
error: `Some of the variables are already set for these environments`,
variableErrors: existingVariableKeys.map((val) => ({
key: val.key,
error: `Variable already set in ${val.environments
.map((e) => environmentTitle({ type: e }))
.join(", ")}.`,
})),
};
}
}
try {
const result = await $transaction(this.prismaClient, async (tx) => {
const environmentVariable = await tx.environmentVariable.create({
data: {
key: options.key,
friendlyId: generateFriendlyId("envvar"),
project: {
connect: {
id: projectId,
for (const variable of values) {
const environmentVariable = await tx.environmentVariable.upsert({
where: {
projectId_key: {
key: variable.key,
projectId,
},
},
},
});
const secretStore = getSecretStore("DATABASE", {
prismaClient: tx,
});
//create the secret values and references
for (const value of values) {
const key = secretKey(projectId, value.environmentId, options.key);
//create the secret reference
const secretReference = await tx.secretReference.create({
data: {
key,
provider: "DATABASE",
create: {
key: variable.key,
friendlyId: generateFriendlyId("envvar"),
project: {
connect: {
id: projectId,
},
},
},
update: {},
});
const variableValue = await tx.environmentVariableValue.create({
data: {
variableId: environmentVariable.id,
environmentId: value.environmentId,
valueReferenceId: secretReference.id,
},
const secretStore = getSecretStore("DATABASE", {
prismaClient: tx,
});
await secretStore.setSecret<{ secret: string }>(key, {
secret: value.value,
});
//set the secret values and references
for (const environmentId of options.environmentIds) {
const key = secretKey(projectId, environmentId, variable.key);
//create the secret reference
const secretReference = await tx.secretReference.upsert({
where: {
key,
},
create: {
key,
provider: "DATABASE",
},
update: {},
});
const variableValue = await tx.environmentVariableValue.upsert({
where: {
variableId_environmentId: {
variableId: environmentVariable.id,
environmentId,
},
},
create: {
variableId: environmentVariable.id,
environmentId: environmentId,
valueReferenceId: secretReference.id,
},
update: {},
});
await secretStore.setSecret<{ secret: string }>(key, {
secret: variable.value,
});
}
}
});
@@ -126,7 +203,7 @@ export class EnvironmentVariablesRepository implements Repository {
if (error.code === "P2002") {
return {
success: false as const,
error: `There's already an environment variable called ${options.key}.`,
error: `There was already an existing field`,
};
}
}
@@ -1,22 +1,27 @@
import { RuntimeEnvironmentType } from "@trigger.dev/database";
import { z } from "zod";
const EnvironmentVariable = z
export const EnvironmentVariableKey = z
.string()
.nonempty("Environment variable key is required")
.regex(/^\w+$/, "Environment variables can only contain alphanumeric characters and underscores");
.nonempty("Key is required")
.regex(/^\w+$/, "Keys can only use alphanumeric characters and underscores");
export const CreateEnvironmentVariable = z.object({
key: EnvironmentVariable,
values: z.array(
z.object({
environmentId: z.string(),
value: z.string(),
})
),
export const CreateEnvironmentVariables = z.object({
environmentIds: z.array(z.string()),
variables: z.array(z.object({ key: EnvironmentVariableKey, value: z.string() })),
});
export type CreateEnvironmentVariable = z.infer<typeof CreateEnvironmentVariable>;
export type CreateEnvironmentVariables = z.infer<typeof CreateEnvironmentVariables>;
export type CreateResult =
| {
success: true;
}
| {
success: false;
error: string;
variableErrors?: { key: string; error: string }[];
};
export const EditEnvironmentVariable = z.object({
id: z.string(),
@@ -60,7 +65,11 @@ export type EnvironmentVariable = {
};
export interface Repository {
create(projectId: string, userId: string, options: CreateEnvironmentVariable): Promise<Result>;
create(
projectId: string,
userId: string,
options: CreateEnvironmentVariables
): Promise<CreateResult>;
edit(projectId: string, userId: string, options: EditEnvironmentVariable): Promise<Result>;
getProject(projectId: string, userId: string): Promise<ProjectEnvironmentVariable[]>;
getEnvironment(
@@ -76,6 +76,15 @@ export class TriggerTaskService extends BaseService {
immediate: true,
},
async (event, traceContext) => {
const runFriendlyId = generateFriendlyId("run");
const payloadPacket = await this.#handlePayloadPacket(
body.payload,
body.options?.payloadType ?? "application/json",
runFriendlyId,
environment
);
const lockId = taskIdentifierToLockId(taskId);
const run = await $transaction(this._prisma, async (tx) => {
@@ -105,15 +114,6 @@ export class TriggerTaskService extends BaseService {
event.setAttribute("queueName", queueName);
span.setAttribute("queueName", queueName);
const runFriendlyId = generateFriendlyId("run");
const payloadPacket = await this.#handlePayloadPacket(
body.payload,
body.options?.payloadType ?? "application/json",
runFriendlyId,
environment
);
const taskRun = await tx.taskRun.create({
data: {
status: "PENDING",
+35 -2
View File
@@ -7,8 +7,10 @@ This simple GitHub action file will deploy you Trigger.dev tasks when new code i
<Warning>The deploy step will fail if any version mismatches are detected. Please see the [version pinning](/v3/github-actions#version-pinning) section for more details.</Warning>
```yaml .github/workflows/release-trigger.yml
name: Deploy to Trigger.dev
<CodeGroup>
```yaml .github/workflows/release-trigger-prod.yml
name: Deploy to Trigger.dev (prod)
on:
push:
@@ -39,6 +41,37 @@ jobs:
npx trigger.dev@beta deploy
```
```yaml .github/workflows/release-trigger-staging.yml
name: Deploy to Trigger.dev (staging)
# Requires manually calling the workflow from a branch / commit to deploy to staging
on:
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js 20.x
uses: actions/setup-node@v4
with:
node-version: "20.x"
- name: Install dependencies
run: npm install
- name: 🚀 Deploy Trigger.dev
env:
TRIGGER_ACCESS_TOKEN: ${{ secrets.TRIGGER_ACCESS_TOKEN }}
run: |
npx trigger.dev@beta deploy --env staging
```
</CodeGroup>
If you already have a GitHub action file, you can just add the final step "🚀 Deploy Trigger.dev" to your existing file.
You need to add the `TRIGGER_ACCESS_TOKEN` secret to your repository. You can create a new access token by going to your profile page and then clicking on the "Personal Access Tokens" tab.
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/airtable
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/integration-kit@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/airtable",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.22",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"airtable": "^0.12.1",
"zod": "3.22.3"
},
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/github
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/integration-kit@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/github",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.22",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"zod": "3.22.3"
},
"engines": {
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/linear
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/integration-kit@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/linear",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.22",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"zod": "3.22.3"
},
"engines": {
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/slack
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/integration-kit@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/openai",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.22"
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23"
},
"engines": {
"node": ">=18.0.0"
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/plain
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/integration-kit@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/plain",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.22",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"@team-plain/typescript-sdk": "^2.7.0"
},
"engines": {
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/replicate
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/integration-kit@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/replicate",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.22",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"replicate": "^0.18.1",
"zod": "3.22.3"
},
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/resend
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/integration-kit@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/resend",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.22",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"resend": "^2.1.0"
},
"engines": {
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/sendgrid
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/integration-kit@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/sendgrid",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.22"
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23"
},
"engines": {
"node": ">=16.8.0"
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/shopify
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/integration-kit@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/shopify",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
"zod": "3.22.3"
},
"engines": {
+6
View File
@@ -1,5 +1,11 @@
# @trigger.dev/slack
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/slack",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"zod": "3.22.3"
},
"engines": {
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/stripe
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/integration-kit@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/stripe",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.22",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"stripe": "^12.14.0",
"zod": "3.22.3"
},
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/supabase
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/integration-kit@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/supabase",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.22",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"supabase-management-js": "^1.0.0",
"zod": "3.22.3"
},
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/typeform
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/integration-kit@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/typeform",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.22",
"@trigger.dev/integration-kit": "workspace:^3.0.0-beta.23",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"@typeform/api-client": "^1.8.0",
"zod": "3.22.3"
},
+6
View File
@@ -1,5 +1,11 @@
# @trigger.dev/astro
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+2 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@trigger.dev/astro",
"description": "An Astro-native integration for Trigger.dev background jobs platform",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22"
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23"
},
"devDependencies": {
"astro": "^3.0.12",
+7
View File
@@ -1,5 +1,12 @@
# trigger.dev
## 3.0.0-beta.23
### Patch Changes
- 43bc7ed94: Hoist uncaughtException handler to the top of workers to better report error messages
- @trigger.dev/core@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "trigger.dev",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/core": "workspace:3.0.0-beta.23",
"@types/degit": "^2.8.3",
"chalk": "^5.2.0",
"chokidar": "^3.5.3",
+10
View File
@@ -202,6 +202,13 @@ async function _deployCommand(dir: string, options: DeployCommandOptions) {
projectRef: options.projectRef,
});
if (resolvedConfig.status === "error") {
logger.error("Failed to read config:", resolvedConfig.error);
span && recordSpanException(span, resolvedConfig.error);
throw new SkipLoggingError("Failed to read config");
}
logger.debug("Resolved config", { resolvedConfig });
span?.setAttributes({
@@ -1126,6 +1133,9 @@ async function compileProject(
format: "cjs", // This is needed to support opentelemetry instrumentation that uses module patching
target: ["node18", "es2020"],
outdir: "out",
banner: {
js: `process.on("uncaughtException", function(error, origin) { if (error instanceof Error) { process.send && process.send({ type: "EVENT", message: { type: "UNCAUGHT_EXCEPTION", payload: { error: { name: error.name, message: error.message, stack: error.stack }, origin }, version: "v1" } }); } else { process.send && process.send({ type: "EVENT", message: { type: "UNCAUGHT_EXCEPTION", payload: { error: { name: "Error", message: typeof error === "string" ? error : JSON.stringify(error) }, origin }, version: "v1" } }); } });`,
},
define: {
TRIGGER_API_URL: `"${config.triggerUrl}"`,
__PROJECT_CONFIG__: JSON.stringify(config),
+13 -5
View File
@@ -153,6 +153,11 @@ async function startDev(
logger.debug("Initial config", { config });
if (config.status === "error") {
logger.error("Failed to read config", config.error);
process.exit(1);
}
async function getDevReactElement(
configParam: ResolvedConfig,
authorization: { apiUrl: string; accessToken: string },
@@ -164,18 +169,18 @@ async function startDev(
apiClient = new CliApiClient(apiUrl, accessToken);
const devEnv = await apiClient.getProjectEnv({
projectRef: config.config.project,
projectRef: configParam.project,
env: "dev",
});
if (!devEnv.success) {
if (devEnv.error === "Project not found") {
logger.error(
`Project not found: ${config.config.project}. Ensure you are using the correct project ref and CLI profile (use --profile). Currently using the "${options.profile}" profile, which points to ${authorization.apiUrl}`
`Project not found: ${configParam.project}. Ensure you are using the correct project ref and CLI profile (use --profile). Currently using the "${options.profile}" profile, which points to ${authorization.apiUrl}`
);
} else {
logger.error(
`Failed to initialize dev environment: ${devEnv.error}. Using project ref ${config.config.project}`
`Failed to initialize dev environment: ${devEnv.error}. Using project ref ${configParam.project}`
);
}
@@ -388,6 +393,9 @@ function useDev({
resolveDir: process.cwd(),
sourcefile: "__entryPoint.ts",
},
banner: {
js: `process.on("uncaughtException", function(error, origin) { if (error instanceof Error) { process.send && process.send({ type: "UNCAUGHT_EXCEPTION", payload: { error: { name: error.name, message: error.message, stack: error.stack }, origin }, version: "v1" }); } else { process.send && process.send({ type: "UNCAUGHT_EXCEPTION", payload: { error: { name: "Error", message: typeof error === "string" ? error : JSON.stringify(error) }, origin }, version: "v1" }); } });`,
},
bundle: true,
metafile: true,
write: false,
@@ -602,10 +610,10 @@ function useDev({
} else {
}
if (e.originalError.stack) {
if (e.originalError.message || e.originalError.stack) {
logger.log(
`${chalkError("X Error:")} Worker failed to start`,
e.originalError.stack
e.originalError.stack ?? e.originalError.message
);
}
+24 -13
View File
@@ -126,6 +126,10 @@ export type ReadConfigResult =
| {
status: "in-memory";
config: ResolvedConfig;
}
| {
status: "error";
error: unknown;
};
export async function readConfig(
@@ -182,22 +186,29 @@ export async function readConfig(
],
});
// import the config file
const userConfigModule = await import(builtConfigFileHref);
try {
// import the config file
const userConfigModule = await import(builtConfigFileHref);
// The --project-ref CLI arg will always override the project specified in the config file
const rawConfig = await normalizeConfig(
userConfigModule?.config,
options?.projectRef ? { project: options?.projectRef } : undefined
);
// The --project-ref CLI arg will always override the project specified in the config file
const rawConfig = await normalizeConfig(
userConfigModule?.config,
options?.projectRef ? { project: options?.projectRef } : undefined
);
const config = Config.parse(rawConfig);
const config = Config.parse(rawConfig);
return {
status: "file",
config: await resolveConfig(absoluteDir, config),
path: configPath,
};
return {
status: "file",
config: await resolveConfig(absoluteDir, config),
path: configPath,
};
} catch (error) {
return {
status: "error",
error,
};
}
}
export async function resolveConfig(path: string, config: Config): Promise<ResolvedConfig> {
@@ -33,19 +33,4 @@ export const sender = new ZodMessageSender({
},
});
process.on("uncaughtException", (error, origin) => {
sender
.send("UNCAUGHT_EXCEPTION", {
error: {
name: error.name,
message: error.message,
stack: error.stack,
},
origin,
})
.catch((err) => {
console.error("Failed to send UNCAUGHT_EXCEPTION message", err);
});
});
taskCatalog.setGlobalTaskCatalog(new StandardTaskCatalog());
@@ -19,22 +19,4 @@ export const tracingSDK = new TracingSDK({
diagLogLevel: (process.env.OTEL_LOG_LEVEL as TracingDiagnosticLogLevel) ?? "none",
});
process.on("uncaughtException", (error, origin) => {
process.send?.({
type: "EVENT",
message: {
type: "UNCAUGHT_EXCEPTION",
payload: {
error: {
name: error.name,
message: error.message,
stack: error.stack,
},
origin,
},
version: "v1",
},
});
});
taskCatalog.setGlobalTaskCatalog(new StandardTaskCatalog());
+7
View File
@@ -1,5 +1,12 @@
# create-trigger
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/core@3.0.0-beta.23
- @trigger.dev/yalt@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/cli",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"description": "The Trigger.dev CLI",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
+2
View File
@@ -1,5 +1,7 @@
# @trigger.dev/core-apps
## 3.0.0-beta.23
## 3.0.0-beta.22
## 3.0.0-beta.21
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@trigger.dev/core-apps",
"description": "Backend core code used across apps",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"private": true,
"license": "MIT",
"main": "./dist/index.js",
+2
View File
@@ -1,5 +1,7 @@
# @trigger.dev/core-backend
## 3.0.0-beta.23
## 3.0.0-beta.22
## 3.0.0-beta.21
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/core-backend",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"description": "Core code used across `@trigger.dev/sdk` and Trigger.dev server",
"license": "MIT",
"main": "./dist/index.js",
+2
View File
@@ -1,5 +1,7 @@
# internal-platform
## 3.0.0-beta.23
## 3.0.0-beta.22
## 3.0.0-beta.21
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/core",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"description": "Core code used across the Trigger.dev SDK and platform",
"license": "MIT",
"main": "./dist/index.js",
+2
View File
@@ -1,5 +1,7 @@
# @trigger.dev/eslint-plugin
## 3.0.0-beta.23
## 3.0.0-beta.22
## 3.0.0-beta.21
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/eslint-plugin",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"description": "ESLint plugin with trigger.dev best practices",
"keywords": [
"eslint",
+6
View File
@@ -1,5 +1,11 @@
# @trigger.dev/express
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/express",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"@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.22"
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23"
},
"dependencies": {
"debug": "^4.3.4",
+6
View File
@@ -1,5 +1,11 @@
# @trigger.dev/hono
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/hono",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22"
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23"
},
"devDependencies": {
"@trigger.dev/tsconfig": "workspace:*",
+6
View File
@@ -1,5 +1,11 @@
# @trigger.dev/integration-kit
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/core@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/integration-kit",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"description": "Trigger.dev Integration Kit has helpers to make creating integrations easier",
"license": "MIT",
"main": "./dist/index.js",
+6
View File
@@ -1,5 +1,11 @@
# @trigger.dev/nestjs
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/nestjs",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"@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.22"
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23"
},
"dependencies": {
"@nestjs/common": "^10.2.4",
+6
View File
@@ -1,5 +1,11 @@
# @trigger.dev/nextjs
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/nextjs",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"next": ">=12.0.0"
},
"dependencies": {
+2
View File
@@ -1,5 +1,7 @@
# @trigger.dev/otlp-importer
## 3.0.0-beta.23
## 3.0.0-beta.22
## 3.0.0-beta.21
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/otlp-importer",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"description": "OpenTelemetry OTLP Importer for Node.js written in TypeScript",
"license": "MIT",
"main": "./dist/index.js",
+6
View File
@@ -1,5 +1,11 @@
# @trigger.dev/react
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/core@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/react",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/core": "workspace:^3.0.0-beta.23",
"debug": "^4.3.4",
"zod": "3.22.3"
},
+6
View File
@@ -1,5 +1,11 @@
# @trigger.dev/remix
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/remix",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23",
"@remix-run/server-runtime": ">1.19.0"
},
"dependencies": {
+6
View File
@@ -1,5 +1,11 @@
# @trigger.dev/sveltekit
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/sveltekit",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22"
"@trigger.dev/sdk": "workspace:^3.0.0-beta.23"
},
"dependencies": {
"debug": "^4.3.4"
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/testing
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/core@3.0.0-beta.23
- @trigger.dev/sdk@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+1 -1
View File
@@ -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.22",
"version": "3.0.0-beta.23",
"license": "MIT",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
+7
View File
@@ -1,5 +1,12 @@
# @trigger.dev/sdk
## 3.0.0-beta.23
### Patch Changes
- @trigger.dev/core@3.0.0-beta.23
- @trigger.dev/core-backend@3.0.0-beta.23
## 3.0.0-beta.22
### Patch Changes
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/sdk",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"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.22",
"@trigger.dev/core-backend": "workspace:3.0.0-beta.22",
"@trigger.dev/core": "workspace:3.0.0-beta.23",
"@trigger.dev/core-backend": "workspace:3.0.0-beta.23",
"chalk": "^5.2.0",
"cronstrue": "^2.21.0",
"debug": "^4.3.4",
+2
View File
@@ -1,5 +1,7 @@
# @trigger.dev/yalt
## 3.0.0-beta.23
## 3.0.0-beta.22
## 3.0.0-beta.21
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@trigger.dev/yalt",
"version": "3.0.0-beta.22",
"version": "3.0.0-beta.23",
"description": "yalt.dev client library",
"license": "MIT",
"main": "./dist/index.js",
+35 -35
View File
@@ -836,10 +836,10 @@ importers:
integrations/airtable:
dependencies:
'@trigger.dev/integration-kit':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
airtable:
specifier: ^0.12.1
@@ -879,10 +879,10 @@ importers:
specifier: ^12.0.10
version: 12.0.10
'@trigger.dev/integration-kit':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
octokit:
specifier: ^3.1.2
@@ -922,10 +922,10 @@ importers:
specifier: ^8.0.0
version: 8.0.0
'@trigger.dev/integration-kit':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
zod:
specifier: 3.22.3
@@ -953,10 +953,10 @@ importers:
integrations/openai:
dependencies:
'@trigger.dev/integration-kit':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
openai:
specifier: ^4.16.1
@@ -996,10 +996,10 @@ importers:
specifier: ^2.7.0
version: 2.7.0
'@trigger.dev/integration-kit':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
devDependencies:
'@trigger.dev/tsconfig':
@@ -1024,10 +1024,10 @@ importers:
integrations/replicate:
dependencies:
'@trigger.dev/integration-kit':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
replicate:
specifier: ^0.18.1
@@ -1058,10 +1058,10 @@ importers:
integrations/resend:
dependencies:
'@trigger.dev/integration-kit':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
resend:
specifier: ^2.1.0
@@ -1092,10 +1092,10 @@ importers:
specifier: ^7.7.0
version: 7.7.0
'@trigger.dev/integration-kit':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
devDependencies:
'@trigger.dev/tsconfig':
@@ -1123,10 +1123,10 @@ importers:
specifier: ^8.0.2
version: 8.0.2
'@trigger.dev/integration-kit':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
zod:
specifier: 3.22.3
@@ -1157,7 +1157,7 @@ importers:
specifier: ^6.8.1
version: 6.8.1
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
zod:
specifier: 3.22.3
@@ -1185,10 +1185,10 @@ importers:
integrations/stripe:
dependencies:
'@trigger.dev/integration-kit':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
stripe:
specifier: ^12.14.0
@@ -1222,10 +1222,10 @@ importers:
specifier: ^2.26.0
version: 2.31.0
'@trigger.dev/integration-kit':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
supabase-management-js:
specifier: ^1.0.0
@@ -1256,10 +1256,10 @@ importers:
integrations/typeform:
dependencies:
'@trigger.dev/integration-kit':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/integration-kit
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../../packages/trigger-sdk
'@typeform/api-client':
specifier: ^1.8.0
@@ -1287,7 +1287,7 @@ importers:
packages/astro:
dependencies:
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../trigger-sdk
debug:
specifier: ^4.3.4
@@ -1505,7 +1505,7 @@ importers:
specifier: ^1.22.0
version: 1.22.0
'@trigger.dev/core':
specifier: workspace:3.0.0-beta.22
specifier: workspace:3.0.0-beta.23
version: link:../core
'@types/degit':
specifier: ^2.8.3
@@ -1947,7 +1947,7 @@ importers:
version: 4.18.2
devDependencies:
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../trigger-sdk
'@trigger.dev/tsconfig':
specifier: workspace:*
@@ -2042,7 +2042,7 @@ importers:
version: 4.3.4(supports-color@8.1.1)
devDependencies:
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../trigger-sdk
'@trigger.dev/tsconfig':
specifier: workspace:*
@@ -2075,7 +2075,7 @@ importers:
packages/nextjs:
dependencies:
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../trigger-sdk
debug:
specifier: ^4.3.4
@@ -2161,7 +2161,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.22
specifier: workspace:^3.0.0-beta.23
version: link:../core
debug:
specifier: ^4.3.4
@@ -2204,7 +2204,7 @@ importers:
packages/remix:
dependencies:
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../trigger-sdk
debug:
specifier: ^4.3.4
@@ -2241,7 +2241,7 @@ importers:
packages/sveltekit:
dependencies:
'@trigger.dev/sdk':
specifier: workspace:^3.0.0-beta.22
specifier: workspace:^3.0.0-beta.23
version: link:../trigger-sdk
debug:
specifier: ^4.3.4
@@ -2315,10 +2315,10 @@ importers:
specifier: ^1.22.0
version: 1.22.0
'@trigger.dev/core':
specifier: workspace:3.0.0-beta.22
specifier: workspace:3.0.0-beta.23
version: link:../core
'@trigger.dev/core-backend':
specifier: workspace:3.0.0-beta.22
specifier: workspace:3.0.0-beta.23
version: link:../core-backend
chalk:
specifier: ^5.2.0