Add retrieve background worker API endpoint

This commit is contained in:
Eric Allam
2024-09-23 14:23:40 +01:00
parent 9ce3f790f9
commit e81380314c
3 changed files with 97 additions and 58 deletions
@@ -0,0 +1,94 @@
import { LoaderFunctionArgs, json } from "@remix-run/server-runtime";
import { z } from "zod";
import { prisma } from "~/db.server";
import {
authenticateProjectApiKeyOrPersonalAccessToken,
authenticatedEnvironmentForAuthentication,
} from "~/services/apiAuth.server";
import zlib from "node:zlib";
const ParamsSchema = z.object({
projectRef: z.string(),
envSlug: z.string(),
version: z.string(),
});
export async function loader({ params, request }: LoaderFunctionArgs) {
const parsedParams = ParamsSchema.safeParse(params);
if (!parsedParams.success) {
return json({ error: "Invalid params" }, { status: 400 });
}
const authenticationResult = await authenticateProjectApiKeyOrPersonalAccessToken(request);
if (!authenticationResult) {
return json({ error: "Invalid or Missing API key" }, { status: 401 });
}
const environment = await authenticatedEnvironmentForAuthentication(
authenticationResult,
parsedParams.data.projectRef,
parsedParams.data.envSlug
);
// Find the background worker and tasks and files
const backgroundWorker = await prisma.backgroundWorker.findFirst({
where: {
runtimeEnvironmentId: environment.id,
version: parsedParams.data.version,
},
include: {
tasks: true,
files: {
include: {
tasks: {
select: {
slug: true,
},
},
},
},
},
});
if (!backgroundWorker) {
return json({ error: "Background worker not found" }, { status: 404 });
}
return json({
id: backgroundWorker.friendlyId,
version: backgroundWorker.version,
cliVersion: backgroundWorker.cliVersion,
sdkVersion: backgroundWorker.sdkVersion,
contentHash: backgroundWorker.contentHash,
createdAt: backgroundWorker.createdAt,
updatedAt: backgroundWorker.updatedAt,
tasks: backgroundWorker.tasks.map((task) => ({
id: task.slug,
exportName: task.exportName,
filePath: task.filePath,
source: task.triggerSource,
retryConfig: task.retryConfig,
queueConfig: task.queueConfig,
})),
files: backgroundWorker.files.map((file) => ({
id: file.friendlyId,
filePath: file.filePath,
contentHash: file.contentHash,
contents: decompressContent(file.contents),
tasks: Array.from(new Set(file.tasks.map((task) => task.slug))),
})),
});
}
function decompressContent(compressedBuffer: Buffer): string {
// First, we need to decode the base64 Buffer to get the actual compressed data
const decodedBuffer = Buffer.from(compressedBuffer.toString("utf-8"), "base64");
// Decompress the data
const decompressedData = zlib.inflateSync(decodedBuffer);
// Convert the decompressed data to string
return decompressedData.toString();
}
+2 -57
View File
@@ -1335,8 +1335,8 @@ importers:
references/hello-world:
dependencies:
'@trigger.dev/sdk':
specifier: 0.0.0-prerelease-20240825150620
version: 0.0.0-prerelease-20240825150620(typescript@5.5.4)
specifier: workspace:*
version: link:../../packages/trigger-sdk
devDependencies:
trigger.dev:
specifier: workspace:*
@@ -14169,67 +14169,12 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
/@trigger.dev/core@0.0.0-prerelease-20240825150620:
resolution: {integrity: sha512-lFlYRMygi8T3i8qnx+hzmd5u2HnoA4lkmeA7e1ESTBgD8b/TsHIkwfcNk6eLmlnspvE2dQp7x7Am0Ss/g7L4fw==}
engines: {node: '>=18.20.0'}
dependencies:
'@google-cloud/precise-date': 4.0.0
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs': 0.52.1
'@opentelemetry/exporter-logs-otlp-http': 0.52.1(@opentelemetry/api@1.9.0)
'@opentelemetry/exporter-trace-otlp-http': 0.52.1(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-logs': 0.52.1(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-node': 0.52.1(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-node': 1.25.1(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.25.1
execa: 8.0.1
humanize-duration: 3.27.3
socket.io-client: 4.7.5
superjson: 2.2.1
zod: 3.22.3
zod-error: 1.5.0
zod-validation-error: 1.5.0(zod@3.22.3)
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
dev: false
/@trigger.dev/platform@1.0.12:
resolution: {integrity: sha512-pOB9S2XG+TmTdlYtF9xuQoFz1aRlRGWSVCXuv3Vj2ArzU6Zz3ukvK24qlTd0PJB1otX71Ho/NfViGKEzCyRb5Q==}
dependencies:
zod: 3.22.3
dev: false
/@trigger.dev/sdk@0.0.0-prerelease-20240825150620(typescript@5.5.4):
resolution: {integrity: sha512-cKCZ0/ZOaozkWo0bBjGZ5TWpok2lMc/KeUKLfefPUYgb04GoMGUCHzWdQeKgJwXursvDn9/dXxCWA1RuOQRmMQ==}
engines: {node: '>=18.20.0'}
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs': 0.52.1
'@opentelemetry/semantic-conventions': 1.25.1
'@trigger.dev/core': 0.0.0-prerelease-20240825150620
chalk: 5.3.0
cronstrue: 2.21.0
debug: 4.3.6
evt: 2.4.13
msw: 2.3.5(typescript@5.5.4)
slug: 6.1.0
terminal-link: 3.0.0
ulid: 2.3.0
uuid: 9.0.0
ws: 8.18.0
zod: 3.22.3
transitivePeerDependencies:
- bufferutil
- supports-color
- typescript
- utf-8-validate
dev: false
/@trigger.dev/yalt@2.3.19:
resolution: {integrity: sha512-q7YebisSl8EjO9tAI2t22uloFxcixHubHhyV2ZBwwMje1bu9LolQajk59BYRUvvxJMSwUMwaMoc2pluwOyV1jw==}
engines: {node: '>=18.0.0'}
+1 -1
View File
@@ -7,6 +7,6 @@
"typescript": "^5.5.4"
},
"dependencies": {
"@trigger.dev/sdk": "0.0.0-prerelease-20240825150620"
"@trigger.dev/sdk": "workspace:*"
}
}