| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { Resource } from "@opencode-ai/console-resource"
- async function login() {
- const url = Resource.SALESFORCE_INSTANCE_URL.value.replace(/\/$/, "")
- const clientId = Resource.SALESFORCE_CLIENT_ID.value
- const clientSecret = Resource.SALESFORCE_CLIENT_SECRET.value
- const params = new URLSearchParams({
- grant_type: "client_credentials",
- client_id: clientId,
- client_secret: clientSecret,
- })
- const res = await fetch(`${url}/services/oauth2/token`, {
- method: "POST",
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
- body: params.toString(),
- }).catch((err) => {
- console.error("Failed to fetch Salesforce access token:", err)
- })
- if (!res) return
- if (!res.ok) {
- console.error("Failed to fetch Salesforce access token:", res.status, await res.text())
- return
- }
- const data = (await res.json()) as { access_token?: string; instance_url?: string }
- if (!data.access_token) {
- console.error("Salesforce auth response did not include an access token")
- return
- }
- return {
- token: data.access_token,
- url: data.instance_url ?? url,
- }
- }
- export interface SalesforceLeadInput {
- name: string
- role: string
- company?: string
- email: string
- phone?: string
- message: string
- }
- export async function createLead(input: SalesforceLeadInput): Promise<boolean> {
- const auth = await login()
- if (!auth) return false
- const res = await fetch(`${auth.url}/services/data/v59.0/sobjects/Lead`, {
- method: "POST",
- headers: {
- Authorization: `Bearer ${auth.token}`,
- "Content-Type": "application/json",
- },
- body: JSON.stringify({
- LastName: input.name,
- Company: input.company?.trim() || "Website",
- Email: input.email,
- Phone: input.phone ?? null,
- Title: input.role,
- Description: input.message,
- LeadSource: "Website",
- }),
- }).catch((err) => {
- console.error("Failed to create Salesforce lead:", err)
- })
- if (!res) return false
- if (!res.ok) {
- console.error("Failed to create Salesforce lead:", res.status, await res.text())
- return false
- }
- return true
- }
|