import { createClient } from "https://esm.sh/@supabase/supabase-js@2";
const corsHeaders = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "authorization, content-type",
};
Deno.serve(async (req) => {
if (req.method === "OPTIONS") {
return new Response("ok", { headers: corsHeaders });
}
const supabase = createClient(
Deno.env.get("SUPABASE_URL")!,
Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!
);
const { template_id, signer_email, signer_first_name, signer_last_name } =
await req.json();
// Get the authenticated user
const authHeader = req.headers.get("Authorization")!;
const {
data: { user },
} = await supabase.auth.getUser(authHeader.replace("Bearer ", ""));
if (!user) {
return new Response(JSON.stringify({ error: "Unauthorized" }), {
status: 401,
headers: { ...corsHeaders, "Content-Type": "application/json" },
});
}
// Create a signing request via Firma API
const firmaResponse = await fetch(
"https://api.firma.dev/functions/v1/signing-request-api/signing-requests",
{
method: "POST",
headers: {
Authorization: Deno.env.get("FIRMA_API_KEY"),
"Content-Type": "application/json",
},
body: JSON.stringify({
template_id,
recipients: [
{
first_name: signer_first_name,
last_name: signer_last_name,
email: signer_email,
designation: "Signer",
},
],
}),
}
);
const firmaData = await firmaResponse.json();
if (!firmaResponse.ok) {
return new Response(JSON.stringify({ error: firmaData }), {
status: firmaResponse.status,
headers: { ...corsHeaders, "Content-Type": "application/json" },
});
}
// Store the signing request in your database
const { error } = await supabase.from("signing_requests").insert({
firma_request_id: firmaData.id,
user_id: user.id,
template_id,
status: "pending",
});
if (error) {
return new Response(JSON.stringify({ error: error.message }), {
status: 500,
headers: { ...corsHeaders, "Content-Type": "application/json" },
});
}
return new Response(JSON.stringify(firmaData), {
status: 201,
headers: { ...corsHeaders, "Content-Type": "application/json" },
});
});