b1987dc090
## Summary Adds Billing Limits to the webapp. Customers can set a monthly spend cap. When usage crosses the limit, billable environments enter a grace period. If the limit is not resolved before grace expires, new triggers are rejected until the organization increases or removes the limit.
807 lines
22 KiB
TypeScript
807 lines
22 KiB
TypeScript
import type { RuntimeEnvironment, TaskRun, WorkerDeployment } from "@trigger.dev/database";
|
|
import { z } from "zod";
|
|
import { type TaskRunListSearchFilters } from "~/components/runs/v3/RunFilters";
|
|
import type { Organization } from "~/models/organization.server";
|
|
import type { Project } from "~/models/project.server";
|
|
import { RUNS_BULK_INSPECTOR_OPEN_VALUE } from "~/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/shouldRevalidateRunsList";
|
|
import { objectToSearchParams } from "./searchParams";
|
|
import { type WaitpointSearchParams } from "~/components/runs/v3/WaitpointTokenFilters";
|
|
export type OrgForPath = Pick<Organization, "slug">;
|
|
export type ProjectForPath = Pick<Project, "slug">;
|
|
export type EnvironmentForPath = Pick<RuntimeEnvironment, "slug">;
|
|
export type v3RunForPath = Pick<TaskRun, "friendlyId">;
|
|
export type v3SpanForPath = Pick<TaskRun, "spanId">;
|
|
export type DeploymentForPath = Pick<WorkerDeployment, "shortCode">;
|
|
export type TaskForPath = {
|
|
taskIdentifier: string;
|
|
};
|
|
|
|
export const OrganizationParamsSchema = z.object({
|
|
organizationSlug: z.string(),
|
|
});
|
|
|
|
export const ProjectParamSchema = OrganizationParamsSchema.extend({
|
|
projectParam: z.string(),
|
|
});
|
|
|
|
export const EnvironmentParamSchema = ProjectParamSchema.extend({
|
|
envParam: z.string(),
|
|
});
|
|
|
|
//v3
|
|
export const v3TaskParamsSchema = EnvironmentParamSchema.extend({
|
|
taskParam: z.string(),
|
|
});
|
|
|
|
export const v3RunParamsSchema = EnvironmentParamSchema.extend({
|
|
runParam: z.string(),
|
|
});
|
|
|
|
export const v3SpanParamsSchema = v3RunParamsSchema.extend({
|
|
spanParam: z.string(),
|
|
});
|
|
|
|
export const v3RunStreamParamsSchema = v3RunParamsSchema.extend({
|
|
streamKey: z.string(),
|
|
});
|
|
|
|
export const v3DeploymentParams = EnvironmentParamSchema.extend({
|
|
deploymentParam: z.string(),
|
|
});
|
|
|
|
export const v3ScheduleParams = EnvironmentParamSchema.extend({
|
|
scheduleParam: z.string(),
|
|
});
|
|
|
|
export function rootPath() {
|
|
return `/`;
|
|
}
|
|
|
|
/** Given a path, it makes it an impersonation path */
|
|
export function impersonate(path: string) {
|
|
return `/@${path}`;
|
|
}
|
|
|
|
export function accountPath() {
|
|
return `/account`;
|
|
}
|
|
|
|
export function personalAccessTokensPath() {
|
|
return `/account/tokens`;
|
|
}
|
|
|
|
export function accountSecurityPath() {
|
|
return `/account/security`;
|
|
}
|
|
|
|
export function invitesPath() {
|
|
return `/invites`;
|
|
}
|
|
|
|
export function confirmBasicDetailsPath() {
|
|
return `/confirm-basic-details`;
|
|
}
|
|
|
|
export function acceptInvitePath(token: string) {
|
|
return `/invite-accept?token=${token}`;
|
|
}
|
|
|
|
export function resendInvitePath() {
|
|
return `/invite-resend`;
|
|
}
|
|
|
|
export function logoutPath() {
|
|
return `/logout`;
|
|
}
|
|
|
|
export function revokeInvitePath() {
|
|
return `/invite-revoke`;
|
|
}
|
|
|
|
// Org
|
|
export function organizationPath(organization: OrgForPath) {
|
|
return `/orgs/${organizationParam(organization)}`;
|
|
}
|
|
|
|
export function newOrganizationPath() {
|
|
return `/orgs/new`;
|
|
}
|
|
|
|
export function selectPlanPath(organization: OrgForPath) {
|
|
return `${organizationPath(organization)}/select-plan`;
|
|
}
|
|
|
|
export function organizationTeamPath(organization: OrgForPath) {
|
|
return `${organizationPath(organization)}/settings/team`;
|
|
}
|
|
|
|
export function organizationRolesPath(organization: OrgForPath) {
|
|
return `${organizationPath(organization)}/settings/roles`;
|
|
}
|
|
|
|
export function organizationSsoPath(organization: OrgForPath) {
|
|
return `${organizationPath(organization)}/settings/sso`;
|
|
}
|
|
|
|
export function inviteTeamMemberPath(organization: OrgForPath) {
|
|
return `${organizationPath(organization)}/invite`;
|
|
}
|
|
|
|
export function organizationBillingPath(organization: OrgForPath) {
|
|
return `${organizationPath(organization)}/billing`;
|
|
}
|
|
|
|
export function organizationSettingsPath(organization: OrgForPath) {
|
|
return `${organizationPath(organization)}/settings`;
|
|
}
|
|
|
|
export function organizationIntegrationsPath(organization: OrgForPath) {
|
|
return `${organizationPath(organization)}/settings/integrations`;
|
|
}
|
|
|
|
export function organizationVercelIntegrationPath(organization: OrgForPath) {
|
|
return `${organizationIntegrationsPath(organization)}/vercel`;
|
|
}
|
|
|
|
export function organizationSlackIntegrationPath(organization: OrgForPath) {
|
|
return `${organizationIntegrationsPath(organization)}/slack`;
|
|
}
|
|
|
|
function organizationParam(organization: OrgForPath) {
|
|
return organization.slug;
|
|
}
|
|
|
|
// Project
|
|
export function newProjectPath(organization: OrgForPath, message?: string) {
|
|
return `${organizationPath(organization)}/projects/new${
|
|
message ? `?message=${encodeURIComponent(message)}` : ""
|
|
}`;
|
|
}
|
|
|
|
function projectParam(project: ProjectForPath) {
|
|
return project.slug;
|
|
}
|
|
|
|
function environmentParam(environment: EnvironmentForPath) {
|
|
return environment.slug;
|
|
}
|
|
|
|
//v3 project
|
|
export function v3ProjectPath(organization: OrgForPath, project: ProjectForPath) {
|
|
return `/orgs/${organizationParam(organization)}/projects/${projectParam(project)}`;
|
|
}
|
|
|
|
export function githubAppInstallPath(organizationSlug: string, redirectTo: string) {
|
|
return `/github/install?org_slug=${organizationSlug}&redirect_to=${encodeURIComponent(
|
|
redirectTo
|
|
)}`;
|
|
}
|
|
|
|
export function vercelAppInstallPath(organizationSlug: string, projectSlug: string) {
|
|
return `/vercel/install?org_slug=${organizationSlug}&project_slug=${projectSlug}`;
|
|
}
|
|
|
|
export function vercelCallbackPath() {
|
|
return `/vercel/callback`;
|
|
}
|
|
|
|
export function vercelResourcePath(
|
|
organizationSlug: string,
|
|
projectSlug: string,
|
|
environmentSlug: string
|
|
) {
|
|
return `/resources/orgs/${organizationSlug}/projects/${projectSlug}/env/${environmentSlug}/vercel`;
|
|
}
|
|
|
|
export function v3EnvironmentPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `/orgs/${organizationParam(organization)}/projects/${projectParam(
|
|
project
|
|
)}/env/${environmentParam(environment)}`;
|
|
}
|
|
|
|
export function v3TasksDashboardPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/tasks/dashboard`;
|
|
}
|
|
|
|
export function v3TasksStreamingPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/tasks/stream`;
|
|
}
|
|
|
|
export function v3ApiKeysPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/apikeys`;
|
|
}
|
|
|
|
export function v3BulkActionsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/bulk-actions`;
|
|
}
|
|
|
|
export function v3BulkActionPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
bulkAction: { friendlyId: string }
|
|
) {
|
|
return `${v3BulkActionsPath(organization, project, environment)}/${bulkAction.friendlyId}`;
|
|
}
|
|
|
|
export function v3EnvironmentVariablesPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/environment-variables`;
|
|
}
|
|
|
|
export function v3NewEnvironmentVariablesPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentVariablesPath(organization, project, environment)}/new`;
|
|
}
|
|
|
|
export function v3ProjectAlertsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/alerts`;
|
|
}
|
|
|
|
export function v3NewProjectAlertPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3ProjectAlertsPath(organization, project, environment)}/new`;
|
|
}
|
|
|
|
export function v3NewProjectAlertPathConnectToSlackPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3ProjectAlertsPath(organization, project, environment)}/new/connect-to-slack`;
|
|
}
|
|
|
|
export function v3TestPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/test`;
|
|
}
|
|
|
|
export function queryPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/query`;
|
|
}
|
|
|
|
export function v3CustomDashboardPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
dashboard: { friendlyId: string }
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/dashboards/custom/${
|
|
dashboard.friendlyId
|
|
}`;
|
|
}
|
|
|
|
export function v3BuiltInDashboardPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
key: string
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/dashboards/${key}`;
|
|
}
|
|
|
|
export function v3DashboardsLandingPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/dashboards`;
|
|
}
|
|
|
|
export function v3TestTaskPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
task: TaskForPath
|
|
) {
|
|
return `${v3TestPath(organization, project, environment)}/tasks/${encodeURIComponent(
|
|
task.taskIdentifier
|
|
)}`;
|
|
}
|
|
|
|
export function v3PlaygroundPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/playground`;
|
|
}
|
|
|
|
export function v3PlaygroundAgentPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
agentSlug: string
|
|
) {
|
|
return `${v3PlaygroundPath(organization, project, environment)}/${encodeURIComponent(agentSlug)}`;
|
|
}
|
|
|
|
export function v3AgentTaskPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
agentSlug: string
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/agents/${encodeURIComponent(
|
|
agentSlug
|
|
)}`;
|
|
}
|
|
|
|
export function v3StandardTaskPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
taskSlug: string
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/tasks/standard/${encodeURIComponent(
|
|
taskSlug
|
|
)}`;
|
|
}
|
|
|
|
export function v3ScheduledTaskPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
taskSlug: string
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/tasks/scheduled/${encodeURIComponent(
|
|
taskSlug
|
|
)}`;
|
|
}
|
|
|
|
export function v3RunsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
filters?: TaskRunListSearchFilters
|
|
) {
|
|
const searchParams = objectToSearchParams(filters);
|
|
const query = searchParams ? `?${searchParams.toString()}` : "";
|
|
return `${v3EnvironmentPath(organization, project, environment)}/runs${query}`;
|
|
}
|
|
|
|
export function v3CreateBulkActionPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
filters?: TaskRunListSearchFilters,
|
|
mode?: "selected" | "filter",
|
|
action?: "replay" | "cancel"
|
|
) {
|
|
const searchParams = objectToSearchParams(filters) ?? new URLSearchParams();
|
|
searchParams.set("bulkInspector", RUNS_BULK_INSPECTOR_OPEN_VALUE);
|
|
if (mode) {
|
|
searchParams.set("mode", mode);
|
|
}
|
|
if (action) {
|
|
searchParams.set("action", action);
|
|
}
|
|
const query = `?${searchParams.toString()}`;
|
|
return `${v3RunsPath(organization, project, environment)}${query}`;
|
|
}
|
|
|
|
export function v3RunPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
run: v3RunForPath,
|
|
searchParams?: URLSearchParams
|
|
) {
|
|
const query = searchParams ? `?${searchParams.toString()}` : "";
|
|
return `${v3RunsPath(organization, project, environment)}/${run.friendlyId}${query}`;
|
|
}
|
|
|
|
export function v3RunRedirectPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
run: v3RunForPath
|
|
) {
|
|
return `${v3ProjectPath(organization, project)}/runs/${run.friendlyId}`;
|
|
}
|
|
|
|
export function v3RunPathFromFriendlyId(runId: string) {
|
|
return `/runs/${runId}`;
|
|
}
|
|
|
|
export function v3RunDownloadLogsPath(run: v3RunForPath) {
|
|
return `/resources/runs/${run.friendlyId}/logs/download`;
|
|
}
|
|
|
|
export function v3RunSpanPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
run: v3RunForPath,
|
|
span: v3SpanForPath,
|
|
searchParams?: URLSearchParams
|
|
) {
|
|
searchParams = searchParams ?? new URLSearchParams();
|
|
searchParams.set("span", span.spanId);
|
|
return `${v3RunPath(organization, project, environment, run, searchParams)}`;
|
|
}
|
|
|
|
export function v3RunStreamingPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
run: v3RunForPath
|
|
) {
|
|
return `${v3RunPath(organization, project, environment, run)}/stream`;
|
|
}
|
|
|
|
export function v3RunIdempotencyKeyResetPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
run: v3RunForPath
|
|
) {
|
|
return `/resources/orgs/${organizationParam(organization)}/projects/${projectParam(
|
|
project
|
|
)}/env/${environmentParam(environment)}/runs/${run.friendlyId}/idempotencyKey/reset`;
|
|
}
|
|
|
|
export function v3SchedulePath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
schedule: { friendlyId: string }
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/schedules/${
|
|
schedule.friendlyId
|
|
}`;
|
|
}
|
|
|
|
export function v3EditSchedulePath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
schedule: { friendlyId: string }
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/schedules/edit/${
|
|
schedule.friendlyId
|
|
}`;
|
|
}
|
|
|
|
export function v3NewSchedulePath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/schedules/new`;
|
|
}
|
|
|
|
export function v3SchedulesAddOnPath(organization: OrgForPath) {
|
|
return `/resources/orgs/${organizationParam(organization)}/schedules-addon`;
|
|
}
|
|
|
|
export function v3QueuesPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/queues`;
|
|
}
|
|
|
|
export function v3WaitpointTokensPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
filters?: WaitpointSearchParams
|
|
) {
|
|
const searchParams = objectToSearchParams(filters);
|
|
const query = searchParams ? `?${searchParams.toString()}` : "";
|
|
return `${v3EnvironmentPath(organization, project, environment)}/waitpoints/tokens${query}`;
|
|
}
|
|
|
|
export function v3WaitpointTokenPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
token: { id: string },
|
|
filters?: WaitpointSearchParams
|
|
) {
|
|
const searchParams = objectToSearchParams(filters);
|
|
const query = searchParams ? `?${searchParams.toString()}` : "";
|
|
return `${v3WaitpointTokensPath(organization, project, environment)}/${token.id}${query}`;
|
|
}
|
|
|
|
export function v3BatchesPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/batches`;
|
|
}
|
|
|
|
export function v3SessionsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/sessions`;
|
|
}
|
|
|
|
export function v3SessionPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
session: { friendlyId: string }
|
|
) {
|
|
return `${v3SessionsPath(organization, project, environment)}/${session.friendlyId}`;
|
|
}
|
|
|
|
export function v3BatchPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
batch: { friendlyId: string }
|
|
) {
|
|
return `${v3BatchesPath(organization, project, environment)}/${batch.friendlyId}`;
|
|
}
|
|
|
|
export function v3BatchRunsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
batch: { friendlyId: string }
|
|
) {
|
|
return `${v3RunsPath(organization, project, environment, { batchId: batch.friendlyId })}`;
|
|
}
|
|
|
|
export function v3ProjectSettingsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/settings`;
|
|
}
|
|
|
|
export function v3ProjectSettingsGeneralPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3ProjectSettingsPath(organization, project, environment)}/general`;
|
|
}
|
|
|
|
export function v3ProjectSettingsIntegrationsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3ProjectSettingsPath(organization, project, environment)}/integrations`;
|
|
}
|
|
|
|
export function v3LogsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/logs`;
|
|
}
|
|
|
|
export function v3PromptsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/prompts`;
|
|
}
|
|
|
|
export function v3PromptPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
promptSlug: string,
|
|
version?: string | number
|
|
) {
|
|
const base = `${v3PromptsPath(organization, project, environment)}/${promptSlug}`;
|
|
return version != null ? `${base}?version=${version}` : base;
|
|
}
|
|
|
|
export function v3ModelsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/models`;
|
|
}
|
|
|
|
export function v3ModelDetailPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
modelId: string
|
|
) {
|
|
return `${v3ModelsPath(organization, project, environment)}/${modelId}`;
|
|
}
|
|
|
|
export function v3ModelComparePath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3ModelsPath(organization, project, environment)}/compare`;
|
|
}
|
|
|
|
export function v3ErrorsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/errors`;
|
|
}
|
|
|
|
export function v3ErrorsConnectToSlackPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3ErrorsPath(organization, project, environment)}/connect-to-slack`;
|
|
}
|
|
|
|
export function v3ErrorPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
error: { fingerprint: string }
|
|
) {
|
|
return `${v3ErrorsPath(organization, project, environment)}/${error.fingerprint}`;
|
|
}
|
|
|
|
export function v3DeploymentsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/deployments`;
|
|
}
|
|
|
|
export function v3DeploymentPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
deployment: DeploymentForPath,
|
|
currentPage: number
|
|
) {
|
|
const query = currentPage ? `?page=${currentPage}` : "";
|
|
return `${v3DeploymentsPath(organization, project, environment)}/${deployment.shortCode}${query}`;
|
|
}
|
|
|
|
export function v3DeploymentVersionPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath,
|
|
version: string
|
|
) {
|
|
return `${v3DeploymentsPath(organization, project, environment)}?version=${version}`;
|
|
}
|
|
|
|
export function branchesPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/branches`;
|
|
}
|
|
|
|
export function branchesDevPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/dev-branches`;
|
|
}
|
|
|
|
export function concurrencyPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/concurrency`;
|
|
}
|
|
|
|
export function limitsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/limits`;
|
|
}
|
|
|
|
export function regionsPath(
|
|
organization: OrgForPath,
|
|
project: ProjectForPath,
|
|
environment: EnvironmentForPath
|
|
) {
|
|
return `${v3EnvironmentPath(organization, project, environment)}/regions`;
|
|
}
|
|
|
|
export function v3BillingPath(organization: OrgForPath, message?: string) {
|
|
return `${organizationPath(organization)}/settings/billing${
|
|
message ? `?message=${encodeURIComponent(message)}` : ""
|
|
}`;
|
|
}
|
|
|
|
export function v3BillingLimitsPath(organization: OrgForPath) {
|
|
return `${organizationPath(organization)}/settings/billing-limits`;
|
|
}
|
|
|
|
/** @deprecated Use v3BillingLimitsPath — redirects from billing-alerts are preserved */
|
|
export function v3BillingAlertsPath(organization: OrgForPath) {
|
|
return v3BillingLimitsPath(organization);
|
|
}
|
|
|
|
export function v3PrivateConnectionsPath(organization: OrgForPath) {
|
|
return `${organizationPath(organization)}/settings/private-connections`;
|
|
}
|
|
|
|
export function v3NewPrivateConnectionPath(organization: OrgForPath) {
|
|
return `${organizationPath(organization)}/settings/private-connections/new`;
|
|
}
|
|
|
|
export function v3StripePortalPath(organization: OrgForPath) {
|
|
return `/resources/${organization.slug}/subscription/portal`;
|
|
}
|
|
|
|
export function v3UsagePath(organization: OrgForPath) {
|
|
return `${organizationPath(organization)}/settings/usage`;
|
|
}
|
|
|
|
// Docs
|
|
export function docsRoot() {
|
|
return "https://trigger.dev/docs";
|
|
}
|
|
|
|
export function docsPath(path: string) {
|
|
return `${docsRoot()}/${path}`;
|
|
}
|
|
|
|
export function docsTroubleshootingPath(path: string) {
|
|
return `${docsRoot()}/v3/troubleshooting`;
|
|
}
|
|
|
|
export function adminPath() {
|
|
return `/@`;
|
|
}
|