Skip to content

Commit ccd8648

Browse files
fix(webapp): preserve data integrity for non-JSON payloads in replay
This fix removes the unintended Zod transformation and JSON enforcement in the ReplayRunData schema. It also refines the UI editability rules to be storage-based (not MIME-based) and adds a 512KB safety threshold for browser performance.
1 parent 34203d6 commit ccd8648

File tree

2 files changed

+15
-28
lines changed

2 files changed

+15
-28
lines changed

apps/webapp/app/components/runs/v3/ReplayRunDialog.tsx

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,7 @@ function ReplayContent({ runFriendlyId, failedRedirect }: ReplayRunDialogProps)
8888
}
8989

9090
queueFetcher.load(
91-
`/resources/orgs/${params.organizationSlug}/projects/${
92-
params.projectParam
91+
`/resources/orgs/${params.organizationSlug}/projects/${params.projectParam
9392
}/env/${envSlug}/queues?${searchParams.toString()}`
9493
);
9594
}
@@ -163,9 +162,9 @@ function ReplayForm({
163162

164163
const isSubmitting = navigation.formAction === formAction;
165164

166-
const editablePayload =
167-
replayData.payloadType === "application/json" ||
168-
replayData.payloadType === "application/super+json";
165+
const isLargePayload = replayData.payloadType === "application/store";
166+
const isTooLargeToEdit = (replayData.payload?.length ?? 0) > 512 * 1024;
167+
const editablePayload = !isLargePayload && !isTooLargeToEdit;
169168

170169
const [tab, setTab] = useState<"payload" | "metadata">(editablePayload ? "payload" : "metadata");
171170

@@ -275,10 +274,16 @@ function ReplayForm({
275274
<InfoIconTooltip
276275
content={
277276
<span className="text-sm">
278-
Payload is not editable for runs with{" "}
279-
<TextLink to={docsPath("triggering#large-payloads")}>
280-
large payloads.
281-
</TextLink>
277+
{isLargePayload ? (
278+
<>
279+
Payload is not editable for runs with{" "}
280+
<TextLink to={docsPath("triggering#large-payloads")}>
281+
large payloads.
282+
</TextLink>
283+
</>
284+
) : (
285+
"Payload is too large to edit."
286+
)}
282287
</span>
283288
}
284289
/>

apps/webapp/app/v3/replayTask.ts

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,7 @@ import { RunOptionsData } from "./testTask";
44
export const ReplayRunData = z
55
.object({
66
environment: z.string().optional(),
7-
payload: z
8-
.string()
9-
.optional()
10-
.transform((val, ctx) => {
11-
if (!val) {
12-
return "{}";
13-
}
14-
15-
try {
16-
JSON.parse(val);
17-
return val;
18-
} catch {
19-
ctx.addIssue({
20-
code: z.ZodIssueCode.custom,
21-
message: "Payload must be a valid JSON string",
22-
});
23-
return z.NEVER;
24-
}
25-
}),
7+
payload: z.string().optional(),
268
metadata: z
279
.string()
2810
.optional()

0 commit comments

Comments
 (0)