From aa3c62b7549da6c57e1072cf2f799432d6f502a5 Mon Sep 17 00:00:00 2001
From: Anish Sarkar <104695310+AnishSarkar22@users.noreply.github.com>
Date: Wed, 15 Jul 2026 15:46:43 +0530
Subject: [PATCH] feat(amazon): enhance playground with Amazon-specific field
options and hints
---
.../components/playground-runner.tsx | 9 ++++
.../playground/components/schema-form.tsx | 45 ++++++++++++++++++-
.../playground/platform-overrides/amazon.tsx | 38 ++++++++++++++++
3 files changed, 91 insertions(+), 1 deletion(-)
create mode 100644 surfsense_web/lib/playground/platform-overrides/amazon.tsx
diff --git a/surfsense_web/app/dashboard/[workspace_id]/playground/components/playground-runner.tsx b/surfsense_web/app/dashboard/[workspace_id]/playground/components/playground-runner.tsx
index 6b426b196..32624ca55 100644
--- a/surfsense_web/app/dashboard/[workspace_id]/playground/components/playground-runner.tsx
+++ b/surfsense_web/app/dashboard/[workspace_id]/playground/components/playground-runner.tsx
@@ -14,6 +14,11 @@ import { AppError } from "@/lib/error";
import { findVerb } from "@/lib/playground/catalog";
import { formatCost, formatDuration, formatPricing } from "@/lib/playground/format";
import { buildPayload, initialFormValues, parseSchemaFields } from "@/lib/playground/json-schema";
+import {
+ AmazonMarketplaceHint,
+ getAmazonFieldOptions,
+ hasAmazonFranceValue,
+} from "@/lib/playground/platform-overrides/amazon";
import { ApiReference } from "./api-reference";
import { OutputViewer } from "./output-viewer";
import { RunProgressPanel } from "./run-progress-panel";
@@ -171,6 +176,8 @@ export function PlaygroundRunner({ workspaceId, platform, verb }: PlaygroundRunn
[run.detail]
);
const endpoint = `POST /workspaces/${workspaceId}/scrapers/${platform}/${verb}`;
+ const isAmazonScrape = platform === "amazon" && verb === "scrape";
+ const hasAmazonFranceUrl = useMemo(() => hasAmazonFranceValue(values), [values]);
useEffect(() => {
const previousStatus = previousStatusRef.current;
@@ -260,7 +267,9 @@ export function PlaygroundRunner({ workspaceId, platform, verb }: PlaygroundRunn
values={values}
onChange={handleChange}
disabled={isRunning}
+ getFieldOptions={isAmazonScrape ? getAmazonFieldOptions : undefined}
/>
+ {isAmazonScrape ? : null}
diff --git a/surfsense_web/lib/playground/platform-overrides/amazon.tsx b/surfsense_web/lib/playground/platform-overrides/amazon.tsx
new file mode 100644
index 000000000..a34fef846
--- /dev/null
+++ b/surfsense_web/lib/playground/platform-overrides/amazon.tsx
@@ -0,0 +1,38 @@
+import { Info } from "lucide-react";
+import type { FieldOption } from "@/app/dashboard/[workspace_id]/playground/components/schema-form";
+import { Alert, AlertDescription } from "@/components/ui/alert";
+import type { FormField } from "@/lib/playground/json-schema";
+
+export const AMAZON_DOMAIN_OPTIONS: FieldOption[] = [
+ { label: "US", value: "www.amazon.com" },
+ { label: "UK", value: "www.amazon.co.uk" },
+ { label: "Germany", value: "www.amazon.de" },
+ { label: "Italy", value: "www.amazon.it" },
+ { label: "Spain", value: "www.amazon.es" },
+ { label: "France, best effort", value: "www.amazon.fr" },
+];
+
+const AMAZON_SUPPORTED_COUNTRIES = "US, UK, Germany, Italy, Spain, France";
+
+export function getAmazonFieldOptions(field: FormField): FieldOption[] | undefined {
+ return field.name === "domain" ? AMAZON_DOMAIN_OPTIONS : undefined;
+}
+
+export function hasAmazonFranceValue(values: Record): boolean {
+ return JSON.stringify(values).toLowerCase().includes("amazon.fr");
+}
+
+export function AmazonMarketplaceHint({ showFranceWarning }: { showFranceWarning: boolean }) {
+ return (
+
+
+
+ Supported countries:
+ {AMAZON_SUPPORTED_COUNTRIES}
+ {showFranceWarning
+ ? " France is more WAF-sensitive. If this run returns no results, retry later or use another marketplace."
+ : null}
+
+
+ );
+}