fix: padroniza nomes de serviços e adiciona campos para Firebase e Appwrite

This commit is contained in:
GoHorse Deploy 2026-03-07 18:24:23 -03:00
parent cedca43851
commit 23dfe6099e

View file

@ -141,10 +141,53 @@ export default function SettingsPage() {
} }
const schemas: any = { const schemas: any = {
stripe: { label: "Stripe", fields: [{ key: "secretKey", label: "Secret Key", type: "password" }, { key: "webhookSecret", label: "Webhook Secret", type: "password" }] }, stripe: {
storage: { label: "S3 Storage", fields: [{ key: "endpoint", label: "Endpoint" }, { key: "bucket", label: "Bucket" }, { key: "accessKey", label: "Access Key" }, { key: "secretKey", label: "Secret Key", type: "password" }] }, label: "Stripe",
cloudflare_config: { label: "Cloudflare", fields: [{ key: "apiToken", label: "API Token", type: "password" }, { key: "zoneId", label: "Zone ID" }] }, fields: [
smtp: { label: "SMTP Email", fields: [{ key: "host", label: "Host" }, { key: "port", label: "Port", type: "number" }, { key: "username", label: "Username" }, { key: "password", label: "Password", type: "password" }] }, { key: "secretKey", label: "Secret Key", type: "password" },
{ key: "webhookSecret", label: "Webhook Secret", type: "password" }
]
},
storage: {
label: "S3 Storage (Civo/AWS)",
fields: [
{ key: "endpoint", label: "Endpoint (ex: https://objectstore...)" },
{ key: "bucket", label: "Bucket Name" },
{ key: "accessKey", label: "Access Key" },
{ key: "secretKey", label: "Secret Key", type: "password" }
]
},
cloudflare_config: {
label: "Cloudflare",
fields: [
{ key: "apiToken", label: "API Token", type: "password" },
{ key: "zoneId", label: "Zone ID" }
]
},
smtp: {
label: "SMTP Email",
fields: [
{ key: "host", label: "Host" },
{ key: "port", label: "Port", type: "number" },
{ key: "username", label: "Username" },
{ key: "password", label: "Password", type: "password" },
{ key: "fromEmail", label: "Sender Email (From)" }
]
},
fcm_service_account: {
label: "Firebase Admin (FCM)",
fields: [
{ key: "serviceAccountJson", label: "Service Account JSON Content", type: "textarea" }
]
},
appwrite: {
label: "Appwrite (Chat & Realtime)",
fields: [
{ key: "endpoint", label: "API Endpoint" },
{ key: "projectId", label: "Project ID" },
{ key: "apiKey", label: "API Key (Standard)", type: "password" }
]
}
} }
const configuredMap = new Map(credentials.map((svc) => [svc.service_name, svc])) const configuredMap = new Map(credentials.map((svc) => [svc.service_name, svc]))
@ -326,7 +369,20 @@ export default function SettingsPage() {
{selectedService && schemas[selectedService]?.fields.map((field: any) => ( {selectedService && schemas[selectedService]?.fields.map((field: any) => (
<div key={field.key} className="grid gap-2"> <div key={field.key} className="grid gap-2">
<Label>{field.label}</Label> <Label>{field.label}</Label>
<Input type={field.type || "text"} value={credentialPayload[field.key] || ""} onChange={(e) => setCredentialPayload({ ...credentialPayload, [field.key]: e.target.value })} /> {field.type === "textarea" ? (
<Textarea
value={credentialPayload[field.key] || ""}
onChange={(e) => setCredentialPayload({ ...credentialPayload, [field.key]: e.target.value })}
className="min-h-[200px] font-mono text-xs"
placeholder='{ "type": "service_account", ... }'
/>
) : (
<Input
type={field.type || "text"}
value={credentialPayload[field.key] || ""}
onChange={(e) => setCredentialPayload({ ...credentialPayload, [field.key]: e.target.value })}
/>
)}
</div> </div>
))} ))}
</div> </div>