trigger.dev
Version:
A Command-Line Interface for Trigger.dev (v3) projects
291 lines • 10.7 kB
JavaScript
import { z } from "zod";
import { CreateAuthorizationCodeResponseSchema, GetPersonalAccessTokenResponseSchema, WhoAmIResponseSchema, CreateBackgroundWorkerResponse, StartDeploymentIndexingResponseBody, GetProjectEnvResponse, GetEnvironmentVariablesResponseBody, InitializeDeploymentResponseBody, GetDeploymentResponseBody, GetProjectsResponseBody, GetProjectResponseBody, EnvironmentVariableResponseBody, TaskRunExecution, FailDeploymentResponseBody, PromoteDeploymentResponseBody, } from "@trigger.dev/core/v3";
import { zodfetch, ApiError, zodfetchSSE } from "@trigger.dev/core/v3/zodfetch";
export class CliApiClient {
apiURL;
accessToken;
constructor(apiURL, accessToken) {
this.apiURL = apiURL;
this.accessToken = accessToken;
this.apiURL = apiURL.replace(/\/$/, "");
}
async createAuthorizationCode() {
return wrapZodFetch(CreateAuthorizationCodeResponseSchema, `${this.apiURL}/api/v1/authorization-code`, {
method: "POST",
});
}
async getPersonalAccessToken(authorizationCode) {
return wrapZodFetch(GetPersonalAccessTokenResponseSchema, `${this.apiURL}/api/v1/token`, {
method: "POST",
body: JSON.stringify({
authorizationCode,
}),
});
}
async whoAmI() {
if (!this.accessToken) {
throw new Error("whoAmI: No access token");
}
return wrapZodFetch(WhoAmIResponseSchema, `${this.apiURL}/api/v2/whoami`, {
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
});
}
async retrieveExternals() {
return wrapZodFetch(z.object({ externals: z.array(z.string()) }), `https://jsonhero.io/j/GU7CwoDOL40k.json`, {
headers: {
"Content-Type": "application/json",
},
});
}
async getProject(projectRef) {
if (!this.accessToken) {
throw new Error("getProject: No access token");
}
return wrapZodFetch(GetProjectResponseBody, `${this.apiURL}/api/v1/projects/${projectRef}`, {
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
});
}
async getProjects() {
if (!this.accessToken) {
throw new Error("getProjects: No access token");
}
return wrapZodFetch(GetProjectsResponseBody, `${this.apiURL}/api/v1/projects`, {
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
});
}
async createBackgroundWorker(projectRef, body) {
if (!this.accessToken) {
throw new Error("createBackgroundWorker: No access token");
}
return wrapZodFetch(CreateBackgroundWorkerResponse, `${this.apiURL}/api/v1/projects/${projectRef}/background-workers`, {
method: "POST",
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
});
}
async createTaskRunAttempt(runFriendlyId) {
if (!this.accessToken) {
throw new Error("creatTaskRunAttempt: No access token");
}
return wrapZodFetch(TaskRunExecution, `${this.apiURL}/api/v1/runs/${runFriendlyId}/attempts`, {
method: "POST",
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
});
}
async getProjectEnv({ projectRef, env }) {
if (!this.accessToken) {
throw new Error("getProjectDevEnv: No access token");
}
return wrapZodFetch(GetProjectEnvResponse, `${this.apiURL}/api/v1/projects/${projectRef}/${env}`, {
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
});
}
async getEnvironmentVariables(projectRef) {
if (!this.accessToken) {
throw new Error("getEnvironmentVariables: No access token");
}
return wrapZodFetch(GetEnvironmentVariablesResponseBody, `${this.apiURL}/api/v1/projects/${projectRef}/envvars`, {
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
});
}
async importEnvVars(projectRef, slug, params) {
if (!this.accessToken) {
throw new Error("importEnvVars: No access token");
}
return wrapZodFetch(EnvironmentVariableResponseBody, `${this.apiURL}/api/v1/projects/${projectRef}/envvars/${slug}/import`, {
method: "POST",
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify(params),
});
}
async initializeDeployment(body) {
if (!this.accessToken) {
throw new Error("initializeDeployment: No access token");
}
return wrapZodFetch(InitializeDeploymentResponseBody, `${this.apiURL}/api/v1/deployments`, {
method: "POST",
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
});
}
async createDeploymentBackgroundWorker(deploymentId, body) {
if (!this.accessToken) {
throw new Error("createDeploymentBackgroundWorker: No access token");
}
return wrapZodFetch(CreateBackgroundWorkerResponse, `${this.apiURL}/api/v1/deployments/${deploymentId}/background-workers`, {
method: "POST",
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
});
}
async failDeployment(id, body) {
if (!this.accessToken) {
throw new Error("failDeployment: No access token");
}
return wrapZodFetch(FailDeploymentResponseBody, `${this.apiURL}/api/v1/deployments/${id}/fail`, {
method: "POST",
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
});
}
async finalizeDeployment(id, body, onLog) {
if (!this.accessToken) {
throw new Error("finalizeDeployment: No access token");
}
let resolvePromise;
let rejectPromise;
const promise = new Promise((resolve, reject) => {
resolvePromise = resolve;
rejectPromise = reject;
});
const source = zodfetchSSE({
url: `${this.apiURL}/api/v3/deployments/${id}/finalize`,
request: {
method: "POST",
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
},
messages: {
error: z.object({ error: z.string() }),
log: z.object({ message: z.string() }),
complete: FailDeploymentResponseBody,
},
});
source.onConnectionError((error) => {
rejectPromise({
success: false,
error,
});
});
source.onMessage("complete", (message) => {
resolvePromise({
success: true,
data: message,
});
});
source.onMessage("error", ({ error }) => {
rejectPromise({
success: false,
error,
});
});
if (onLog) {
source.onMessage("log", ({ message }) => {
onLog(message);
});
}
const result = await promise;
source.stop();
return result;
}
async promoteDeployment(version) {
if (!this.accessToken) {
throw new Error("promoteDeployment: No access token");
}
return wrapZodFetch(PromoteDeploymentResponseBody, `${this.apiURL}/api/v1/deployments/${version}/promote`, {
method: "POST",
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
});
}
async startDeploymentIndexing(deploymentId, body) {
if (!this.accessToken) {
throw new Error("startDeploymentIndexing: No access token");
}
return wrapZodFetch(StartDeploymentIndexingResponseBody, `${this.apiURL}/api/v1/deployments/${deploymentId}/start-indexing`, {
method: "POST",
headers: {
Authorization: `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
});
}
async getDeployment(deploymentId) {
if (!this.accessToken) {
throw new Error("getDeployment: No access token");
}
return wrapZodFetch(GetDeploymentResponseBody, `${this.apiURL}/api/v1/deployments/${deploymentId}`, {
headers: {
Authorization: `Bearer ${this.accessToken}`,
Accept: "application/json",
},
});
}
}
async function wrapZodFetch(schema, url, requestInit) {
try {
const response = await zodfetch(schema, url, requestInit, {
retry: {
minTimeoutInMs: 500,
maxTimeoutInMs: 5000,
maxAttempts: 5,
factor: 2,
randomize: false,
},
});
return {
success: true,
data: response,
};
}
catch (error) {
if (error instanceof ApiError) {
return {
success: false,
error: error.message,
};
}
else if (error instanceof Error) {
return {
success: false,
error: error.message,
};
}
else {
return {
success: false,
error: String(error),
};
}
}
}
//# sourceMappingURL=apiClient.js.map