From 62f90b67abcfc2d40f64d6a95559e624a1d38301 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Thu, 16 Jul 2026 09:33:09 +0000 Subject: [PATCH 1/2] fix(gumption-api): validate Gemini model parameter to prevent SSRF The model route parameter was interpolated directly into the Vertex AI upstream URL without validation. URL-encoded path traversal characters (%2F, %3F) in the parameter could redirect authenticated requests to arbitrary paths on aiplatform.googleapis.com using the service account's ADC token. Add a regex allowlist (alphanumeric, hyphens, dots) and reject model names containing slashes, dots-dots, question marks, or other URL-special characters before constructing the upstream URL. Co-authored-by: CARBComplianceApp --- the-unit/api/src/providers/gemini.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/the-unit/api/src/providers/gemini.ts b/the-unit/api/src/providers/gemini.ts index 2eae0f8..920eda6 100644 --- a/the-unit/api/src/providers/gemini.ts +++ b/the-unit/api/src/providers/gemini.ts @@ -22,12 +22,18 @@ const auth = new GoogleAuth({ * POST /v1/gemini/:model:generateContent * :model = e.g. gemini-2.0-flash-001, gemini-2.5-pro */ +const SAFE_MODEL_RE = /^[a-z0-9][-a-z0-9.]*$/i; + geminiRouter.post("/:model\\:generateContent", async (req: AuthedRequest, res) => { if (!PROJECT) { res.status(503).json({ error: "gcp_project_not_configured" }); return; } const model = req.params.model; + if (!SAFE_MODEL_RE.test(model)) { + res.status(400).json({ error: "invalid_model_name" }); + return; + } const url = `https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}` + `/locations/${REGION}/publishers/google/models/${model}:generateContent`; From ea055224d6a9d03e34c4a7de2ed15e9a8d94796a Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Thu, 16 Jul 2026 09:34:31 +0000 Subject: [PATCH 2/2] fix(sites): prevent payload injection via explicit field destructuring The /api/book, /api/intake, and /api/chat endpoints used object spread (`...data`) to merge user-submitted JSON into the fireAlert payload. This allowed attackers to override the `kind` and `site` fields and inject arbitrary keys that flow into KV storage, webhook payloads, and notification emails. Replace the open spread with explicit field destructuring so only expected form fields are forwarded. Rebuild all 11 generated sites. Co-authored-by: CARBComplianceApp --- sites/build.mjs | 9 ++++++--- sites/dist/carb-clean-truck-check/worker.js | 9 ++++++--- sites/dist/carbteststockton/worker.js | 9 ++++++--- sites/dist/chigbulaws/worker.js | 13 ++++++++----- sites/dist/cleantruckcheck-fairfield/worker.js | 9 ++++++--- sites/dist/cleantruckcheck-hayward/worker.js | 9 ++++++--- sites/dist/cleantruckcheck-lodi/worker.js | 9 ++++++--- sites/dist/cleantruckcheck-roseville/worker.js | 9 ++++++--- sites/dist/cleantruckcheck-stockton/worker.js | 9 ++++++--- sites/dist/mobilecarbsmoketest/worker.js | 9 ++++++--- sites/dist/mobilecarbtest/worker.js | 9 ++++++--- sites/dist/mobilesmoketest/worker.js | 9 ++++++--- 12 files changed, 74 insertions(+), 38 deletions(-) diff --git a/sites/build.mjs b/sites/build.mjs index 1d22f25..7320537 100644 --- a/sites/build.mjs +++ b/sites/build.mjs @@ -1117,7 +1117,8 @@ export default { if (p === "/api/book" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "booking", site: SITE_ID, ...data }); + const { name, phone, vehicle, notes, timestamp } = data; + await fireAlert(env, { kind: "booking", site: SITE_ID, name, phone, vehicle, notes, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -1126,7 +1127,8 @@ export default { if (p === "/api/intake" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "intake", site: SITE_ID, ...data }); + const { client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp } = data; + await fireAlert(env, { kind: "intake", site: SITE_ID, client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -1135,7 +1137,8 @@ export default { if (p === "/api/chat" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "chat", site: SITE_ID, ...data }); + const { message, sessionId, timestamp } = data; + await fireAlert(env, { kind: "chat", site: SITE_ID, message, sessionId, timestamp }); const msg = (data.message || "").toLowerCase(); let reply; if (VERTICAL === "law") { diff --git a/sites/dist/carb-clean-truck-check/worker.js b/sites/dist/carb-clean-truck-check/worker.js index b4497d5..c819e84 100644 --- a/sites/dist/carb-clean-truck-check/worker.js +++ b/sites/dist/carb-clean-truck-check/worker.js @@ -192,7 +192,8 @@ export default { if (p === "/api/book" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "booking", site: SITE_ID, ...data }); + const { name, phone, vehicle, notes, timestamp } = data; + await fireAlert(env, { kind: "booking", site: SITE_ID, name, phone, vehicle, notes, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -201,7 +202,8 @@ export default { if (p === "/api/intake" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "intake", site: SITE_ID, ...data }); + const { client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp } = data; + await fireAlert(env, { kind: "intake", site: SITE_ID, client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -210,7 +212,8 @@ export default { if (p === "/api/chat" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "chat", site: SITE_ID, ...data }); + const { message, sessionId, timestamp } = data; + await fireAlert(env, { kind: "chat", site: SITE_ID, message, sessionId, timestamp }); const msg = (data.message || "").toLowerCase(); let reply; if (VERTICAL === "law") { diff --git a/sites/dist/carbteststockton/worker.js b/sites/dist/carbteststockton/worker.js index 073c912..53390b8 100644 --- a/sites/dist/carbteststockton/worker.js +++ b/sites/dist/carbteststockton/worker.js @@ -192,7 +192,8 @@ export default { if (p === "/api/book" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "booking", site: SITE_ID, ...data }); + const { name, phone, vehicle, notes, timestamp } = data; + await fireAlert(env, { kind: "booking", site: SITE_ID, name, phone, vehicle, notes, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -201,7 +202,8 @@ export default { if (p === "/api/intake" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "intake", site: SITE_ID, ...data }); + const { client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp } = data; + await fireAlert(env, { kind: "intake", site: SITE_ID, client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -210,7 +212,8 @@ export default { if (p === "/api/chat" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "chat", site: SITE_ID, ...data }); + const { message, sessionId, timestamp } = data; + await fireAlert(env, { kind: "chat", site: SITE_ID, message, sessionId, timestamp }); const msg = (data.message || "").toLowerCase(); let reply; if (VERTICAL === "law") { diff --git a/sites/dist/chigbulaws/worker.js b/sites/dist/chigbulaws/worker.js index 963b921..7051f8d 100644 --- a/sites/dist/chigbulaws/worker.js +++ b/sites/dist/chigbulaws/worker.js @@ -10,8 +10,8 @@ const KB = [{"category":"Family Law","q":"How long does a divorce take in Califo const BLOG_INDEX = "Blog — Law Offices of Clifford Chigbu

Blog

← Back to home

"; const BLOG_POSTS = {"welcome": "Welcome to the New Chigbu Law Firm Website — Law Offices of Clifford Chigbu
← All posts

Welcome to the New Chigbu Law Firm Website

2026-04-07 · Mr. Chigbu

We've redesigned our website to make one thing easier: getting answers, fast.

\n

What changed

\n

You can now request help directly from any practice area below. Tell us a little about your situation, and we'll be ready before you ever step into the office.

\n

What didn't change

\n

Care, attention, and the same phone number you've always called: TBD.

\n

If you'd rather just talk to a human, that's what we prefer too. Pick up the phone any time.

← Back to home

"}; const AREA_PAGES = {"family": "\n\n\n\nFamily Law Lawyer in Elk Grove — Law Offices of Clifford Chigbu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
✓ Confidential · 6 quick questions · ~90 seconds
\n

Family decisions are personal. Your lawyer should be too.

\n

Divorce, custody, support, restraining orders, adoption — direct representation from a top-rated Elk Grove attorney who actually knows your name.

\n
\n\n
\n

Quick intake — 6 questions

\n

Takes about 90 seconds. Confidential.

\n

⚖️ Confidential intake — not legal advice. Submitting this form does not create an attorney-client relationship. Clifford will review your information and follow up to discuss representation.

\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n

What I can help with

\n
  • Uncontested and contested divorce
  • Child custody and visitation
  • Child support and spousal support
  • Domestic violence restraining orders
  • Adoption (step-parent, relative, agency)
  • Premarital and postnuptial agreements
\n
\n\n
\n

How it works

\n
1. Quick intake
6 questions to help us understand what kind of help you need.
2. Strategy meeting
We sit down (or video call) and lay out your options, timelines, and likely outcomes.
3. Action
Filing, negotiation, or trial — whatever protects you and your kids best.
\n
\n\n
\n

What clients say

\n
★★★★★4.8(24 reviews on Google)
\n
\n

★ Read all reviews on Google →

\n
\n\n
\n

Common family law questions

\n
How long does a divorce take in California?

Six months minimum from the date the other party is served. Most cases settle before trial.

Do I need to go to court?

Often no — many family law matters resolve through negotiation or mediation. But if court is needed, we're ready.

What if I can't afford this right now?

We offer payment plans for most family matters. Tell us your situation honestly and we'll work with you.

\n
\n\n
\n

Ready to talk?

\n

Call (916) 230-6381 or email chigbulaw@sbcglobal.net

\n 📞 Call (916) 230-6381\n
\n\n
\n
Law Offices of Clifford Chigbu
\n
Clifford Chigbu · State Bar of California #221386
\n
📞 (916) 230-6381 · ✉️ chigbulaw@sbcglobal.net
\n \n
This website is attorney advertising. The information on this site is for general informational purposes only and does not constitute legal advice or create an attorney-client relationship. No attorney-client relationship is formed by visiting this site, by submitting an intake form, or by communicating with the chat assistant — only by signing a written engagement agreement with the Law Offices of Clifford Chigbu. Past results do not guarantee similar outcomes. Statements regarding ratings, awards, and recognition are based on third-party sources and do not constitute a comparison with other attorneys. Clifford Chigbu is licensed in the State of California (Bar #221386) and accepts cases only in jurisdictions where he is admitted to practice.
\n
\n\n📞 Talk to Clifford · (916) 230-6381\n\n\n\n\n\n\n", "immigration": "\n\n\n\nImmigration Lawyer in Elk Grove — Law Offices of Clifford Chigbu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
✓ Confidential · 6 quick questions · ~90 seconds
\n

An immigrant lawyer for immigrants.

\n

Mr. Chigbu came here from Nigeria. He understands what's at stake — and he treats every client's case like it's his family's.

\n
\n\n
\n

Quick intake — 6 questions

\n

Takes about 90 seconds. Confidential.

\n

⚖️ Confidential intake — not legal advice. Submitting this form does not create an attorney-client relationship. Clifford will review your information and follow up to discuss representation.

\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n

What I can help with

\n
  • Family-based green cards and visa petitions
  • Naturalization and citizenship
  • Deportation and removal defense
  • Work visas (H-1B, L-1, O-1) and PERM
  • DACA renewals and adjustment of status
  • Asylum and humanitarian relief
\n
\n\n
\n

How it works

\n
1. Confidential intake
6 quick questions. Everything on this page is confidential.
2. Honest review
Mr. Chigbu personally reviews — not a paralegal. He'll tell you what's possible and what's not.
3. Filing & follow-through
We handle the petitions, the agencies, and we keep you informed at every step.
\n
\n\n
\n

What clients say

\n
★★★★★4.8(24 reviews on Google)
\n
\n

★ Read all reviews on Google →

\n
\n\n
\n

Common immigration questions

\n
Is it safe to fill out this form if I'm undocumented?

Yes. Everything you submit is protected by attorney-client confidentiality the moment we receive it.

Do you handle deportation cases?

Yes. If you or a family member is in removal proceedings, contact us today — timing matters.

How long does it take to get a green card?

It depends on the category and country of origin — anywhere from months to years. We'll give you a realistic timeline.

\n
\n\n
\n

Ready to talk?

\n

Call (916) 230-6381 or email chigbulaw@sbcglobal.net

\n 📞 Call (916) 230-6381\n
\n\n
\n
Law Offices of Clifford Chigbu
\n
Clifford Chigbu · State Bar of California #221386
\n
📞 (916) 230-6381 · ✉️ chigbulaw@sbcglobal.net
\n \n
This website is attorney advertising. The information on this site is for general informational purposes only and does not constitute legal advice or create an attorney-client relationship. No attorney-client relationship is formed by visiting this site, by submitting an intake form, or by communicating with the chat assistant — only by signing a written engagement agreement with the Law Offices of Clifford Chigbu. Past results do not guarantee similar outcomes. Statements regarding ratings, awards, and recognition are based on third-party sources and do not constitute a comparison with other attorneys. Clifford Chigbu is licensed in the State of California (Bar #221386) and accepts cases only in jurisdictions where he is admitted to practice.
\n
\n\n📞 Talk to Clifford · (916) 230-6381\n\n\n\n\n\n\n", "personal-injury": "\n\n\n\nPersonal Injury Lawyer in Elk Grove — Law Offices of Clifford Chigbu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
✓ Free consultation · No fee unless we win
\n

Injured? You pay nothing unless we win.

\n

Free consultation. No fees, no costs, no risk to you. We only get paid if you do.

\n
\n\n
\n

Free consultation request

\n

Takes about 90 seconds. Confidential.

\n

⚖️ Confidential intake — not legal advice. Submitting this form does not create an attorney-client relationship. Clifford will review your information and follow up to discuss representation.

\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n

What I can help with

\n
  • Car, truck, and motorcycle accidents
  • Slip and fall / premises liability
  • Dog bites
  • Workplace injuries and third-party claims
  • Wrongful death
  • We front all costs — you pay nothing out of pocket
\n
\n\n
\n

How it works

\n
1. Free consultation
Tell us what happened. We'll tell you straight whether you have a case.
2. Investigation & treatment
We work with medical providers and gather evidence while you focus on recovery.
3. Settlement or trial
Most cases settle. If insurance won't be reasonable, we go to trial.
\n
\n\n
\n

What clients say

\n
★★★★★4.8(24 reviews on Google)
\n
\n

★ Read all reviews on Google →

\n
\n\n
\n

Common personal injury questions

\n
How much does this cost me?

Nothing up front. Our fee is a percentage of the recovery — only if we win.

How long do I have to file?

California's deadline (statute of limitations) is generally 2 years for personal injury, but it can be much shorter in some cases. Don't wait — call.

Should I talk to the other side's insurance?

No. Talk to us first — anything you say to them can be used to lower your settlement.

\n
\n\n
\n

Ready to talk?

\n

Call (916) 230-6381 or email chigbulaw@sbcglobal.net

\n 📞 Call (916) 230-6381\n
\n\n
\n
Law Offices of Clifford Chigbu
\n
Clifford Chigbu · State Bar of California #221386
\n
📞 (916) 230-6381 · ✉️ chigbulaw@sbcglobal.net
\n \n
This website is attorney advertising. The information on this site is for general informational purposes only and does not constitute legal advice or create an attorney-client relationship. No attorney-client relationship is formed by visiting this site, by submitting an intake form, or by communicating with the chat assistant — only by signing a written engagement agreement with the Law Offices of Clifford Chigbu. Past results do not guarantee similar outcomes. Statements regarding ratings, awards, and recognition are based on third-party sources and do not constitute a comparison with other attorneys. Clifford Chigbu is licensed in the State of California (Bar #221386) and accepts cases only in jurisdictions where he is admitted to practice.
\n
\n\n📞 Talk to Clifford · (916) 230-6381\n\n\n\n\n\n\n", "bankruptcy": "\n\n\n\nBankruptcy Lawyer in Elk Grove — Law Offices of Clifford Chigbu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
✓ Confidential · 6 quick questions · ~90 seconds
\n

Stop the harassment. Get your life back.

\n

Chapter 7 and Chapter 13 bankruptcy in California. Most clients walk out of the first meeting with a real plan and a real number.

\n
\n\n
\n

Quick intake — 6 questions

\n

Takes about 90 seconds. Confidential.

\n

⚖️ Confidential intake — not legal advice. Submitting this form does not create an attorney-client relationship. Clifford will review your information and follow up to discuss representation.

\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n

What I can help with

\n
  • Stop wage garnishments — usually within 24 hours of filing
  • Stop foreclosure and repossession
  • End creditor calls and lawsuits
  • Wipe out qualifying credit card, medical, and personal-loan debt
  • Payment plans available for filing fees and attorney fees
\n
\n\n
\n

How it works

\n
1. Quick intake
6 questions on this page. Takes about 90 seconds.
2. Honest assessment
Mr. Chigbu reviews and tells you straight whether bankruptcy is your best move — and which chapter.
3. Filing & relief
If we move forward, the automatic stay stops creditor action the moment we file.
\n
\n\n
\n

What clients say

\n
★★★★★4.8(24 reviews on Google)
\n
\n

★ Read all reviews on Google →

\n
\n\n
\n

Common bankruptcy questions

\n
Will I lose my house?

Usually no. California's homestead exemption protects most home equity for primary residences. We'll review your specific situation.

How long does it take?

Chapter 7 typically wraps in 3–4 months. Chapter 13 is a 3–5 year plan.

Will it ruin my credit?

Bankruptcy stays on your credit 7–10 years, but most clients see scores recover faster than they expected — and you start from zero debt.

\n
\n\n
\n

Ready to talk?

\n

Call (916) 230-6381 or email chigbulaw@sbcglobal.net

\n 📞 Call (916) 230-6381\n
\n\n
\n
Law Offices of Clifford Chigbu
\n
Clifford Chigbu · State Bar of California #221386
\n
📞 (916) 230-6381 · ✉️ chigbulaw@sbcglobal.net
\n \n
This website is attorney advertising. The information on this site is for general informational purposes only and does not constitute legal advice or create an attorney-client relationship. No attorney-client relationship is formed by visiting this site, by submitting an intake form, or by communicating with the chat assistant — only by signing a written engagement agreement with the Law Offices of Clifford Chigbu. Past results do not guarantee similar outcomes. Statements regarding ratings, awards, and recognition are based on third-party sources and do not constitute a comparison with other attorneys. Clifford Chigbu is licensed in the State of California (Bar #221386) and accepts cases only in jurisdictions where he is admitted to practice.
\n
\n\n📞 Talk to Clifford · (916) 230-6381\n\n\n\n\n\n\n", "business": "\n\n\n\nBusiness & Contract Law Lawyer in Elk Grove — Law Offices of Clifford Chigbu\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Law Offices of Clifford Chigbu · Business & Contract Law
\n\n
\n
✓ Confidential · 6 quick questions · ~90 seconds
\n

Business decisions that hold up in court.

\n

Contracts, formations, and disputes handled by a California attorney who's been doing this for years.

\n
\n\n
\n

Quick intake — 6 questions

\n

Takes about 90 seconds. Confidential.

\n

⚖️ Confidential intake — not legal advice. Submitting this form does not create an attorney-client relationship. Clifford will review your information and follow up to discuss representation.

\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n

What I can help with

\n
  • Contract drafting, review, and negotiation
  • LLC and corporation formation
  • Breach of contract disputes
  • Partnership agreements
  • Vendor and service agreements
  • Business purchase and sale
\n
\n\n
\n

How it works

\n
1. Quick intake
6 questions to understand what you're working on.
2. Review & strategy
We look at your contract, situation, or dispute and tell you what's enforceable and what's not.
3. Action
Draft, revise, negotiate, or litigate — whatever the matter needs.
\n
\n\n
\n

What clients say

\n
★★★★★4.8(24 reviews on Google)
\n
\n

★ Read all reviews on Google →

\n
\n\n
\n

Common business & contract law questions

\n
Do I really need a lawyer to form an LLC?

Not legally — but DIY filings often miss operating agreement details that matter when disputes come up later. A small upfront investment saves big headaches.

Someone breached our contract. What now?

Call us before you send any demand letters. What you say early can affect the remedies you have later.

Can you review a contract before I sign it?

Yes — and we strongly recommend it for anything significant. Flat-rate reviews available.

\n
\n\n
\n

Ready to talk?

\n

Call (916) 230-6381 or email chigbulaw@sbcglobal.net

\n 📞 Call (916) 230-6381\n
\n\n
\n
Law Offices of Clifford Chigbu
\n
Clifford Chigbu · State Bar of California #221386
\n
📞 (916) 230-6381 · ✉️ chigbulaw@sbcglobal.net
\n \n
This website is attorney advertising. The information on this site is for general informational purposes only and does not constitute legal advice or create an attorney-client relationship. No attorney-client relationship is formed by visiting this site, by submitting an intake form, or by communicating with the chat assistant — only by signing a written engagement agreement with the Law Offices of Clifford Chigbu. Past results do not guarantee similar outcomes. Statements regarding ratings, awards, and recognition are based on third-party sources and do not constitute a comparison with other attorneys. Clifford Chigbu is licensed in the State of California (Bar #221386) and accepts cases only in jurisdictions where he is admitted to practice.
\n
\n\n📞 Talk to Clifford · (916) 230-6381\n\n\n\n\n\n\n"}; -const PRIVACY_HTML = "Privacy Policy — Law Offices of Clifford Chigbu
\n ← Back to home\n

Privacy Policy

\n

Last updated: 2026-06-01

\n\n

Who we are

\n

Law Offices of Clifford Chigbu (\"we\", \"our\", \"us\") operates the website chigbulaws.com (the \"Site\"). We are a California law firm located at 4815 Laguna Park Dr, Suite C, Elk Grove, CA 95758, contactable at (916) 230-6381 or chigbulaw@sbcglobal.net.

\n\n

What information we collect

\n

We collect information you voluntarily provide when you:

\n
    \n
  • Submit a contact form or intake form (name, phone, email, the details of your legal matter)
  • \n
  • Send a message through the OBI chat assistant
  • \n
  • Email or call us
  • \n
\n

We may also collect anonymous technical information automatically, including IP address, browser type, pages visited, and time of visit. We do not use tracking cookies on this site.

\n\n

How we use your information

\n
    \n
  • To respond to your inquiry and discuss potential legal representation
  • \n
  • To evaluate whether we can take your case
  • \n
  • To follow up on a consultation or representation
  • \n
  • To comply with legal obligations
  • \n
\n

We do not sell, rent, or share your personal information with third parties for their marketing purposes.

\n\n

Confidentiality and attorney-client privilege

\n

Information you submit through this Site is treated as confidential, but submitting an inquiry does not create an attorney-client relationship. An attorney-client relationship is formed only after a written engagement agreement is signed. Until then, please do not send sensitive case details — keep your initial message to a brief description of your legal matter.

\n\n

Data retention

\n

Form submissions are retained for 90 days in our service provider's storage and then automatically deleted, unless we open a case file based on your inquiry, in which case retention is governed by our standard client file retention policy.

\n\n

Your California rights (CCPA / CPRA)

\n

If you are a California resident, you have the right to:

\n
    \n
  • Know what personal information we collect about you
  • \n
  • Request that we delete your personal information
  • \n
  • Opt out of any sale or sharing of your personal information (we do not sell or share)
  • \n
  • Non-discrimination for exercising your rights
  • \n
\n

To exercise any of these rights, contact us at chigbulaw@sbcglobal.net or call (916) 230-6381.

\n\n

Third-party services

\n

We use the following third-party services to operate this Site:

\n
    \n
  • Cloudflare — content delivery, security, and analytics (cookie-free)
  • \n
  • Resend / MailChannels — email delivery for form submissions to our office
  • \n
  • Google Maps — directions to our office (loaded only when you click \"Get Directions\")
  • \n
\n\n

Changes to this policy

\n

We may update this policy from time to time. The \"Last updated\" date at the top reflects the most recent version. Substantive changes will be communicated via a notice on this page.

\n\n

Contact

\n

Questions about this privacy policy?

\n

Law Offices of Clifford Chigbu
\n 4815 Laguna Park Dr, Suite C, Elk Grove, CA 95758
\n Phone: (916) 230-6381
\n Email: chigbulaw@sbcglobal.net

\n\n

← Back to home · Terms of Use

\n
"; -const TERMS_HTML = "Terms of Use — Law Offices of Clifford Chigbu
\n ← Back to home\n

Terms of Use

\n

Last updated: 2026-06-01

\n\n

Attorney advertising

\n

This website is an advertisement for legal services provided by Law Offices of Clifford Chigbu. The information presented should not be construed as formal legal advice or the formation of a lawyer-client relationship.

\n\n

No legal advice

\n

The content on this Site, including blog posts, the FAQ, and the OBI chat assistant, is provided for general informational purposes only and is not a substitute for the advice of a licensed attorney. Every legal situation is different; do not rely on the general information here to make decisions about your specific case. Always consult with an attorney about your particular circumstances.

\n\n

No attorney-client relationship

\n

Visiting this Site, submitting a form, sending an email, or chatting with the OBI assistant does not create an attorney-client relationship. An attorney-client relationship is formed only after Clifford Chigbu has agreed in writing to represent you and a written engagement agreement has been signed by both parties.

\n\n

Confidentiality

\n

Information you transmit through this Site may not be confidential or protected by attorney-client privilege until an engagement agreement is in place. Please do not transmit sensitive or confidential information about your legal matter through web forms — call our office at (916) 230-6381 to discuss anything sensitive.

\n\n

Past results disclaimer

\n

Past results, settlements, verdicts, awards, and recognitions described on this Site do not guarantee similar outcomes in future cases. Each legal matter is unique and outcomes depend on facts, applicable law, opposing parties, and many other factors.

\n\n

Awards and ratings

\n

Statements regarding awards, recognition, ratings, and reviews are based on third-party sources (Google Business Profile, BusinessRate, etc.) and reflect the opinions of those third parties. They are not a comparison to or claim of superiority over other attorneys.

\n\n

Jurisdiction

\n

Clifford Chigbu is licensed to practice law in the State of California (State Bar #221386). The information on this Site is intended for residents of California. Use of this Site by residents of other states is not encouraged and we may decline representation for matters outside our jurisdiction.

\n\n

Limitation of liability

\n

Law Offices of Clifford Chigbu makes no warranties, express or implied, regarding the accuracy or completeness of the information on this Site. We are not liable for any actions you take or fail to take based on information from this Site.

\n\n

Governing law

\n

These Terms are governed by the laws of the State of California, without regard to conflict of laws principles.

\n\n

← Back to home · Privacy Policy

\n
"; +const PRIVACY_HTML = "Privacy Policy — Law Offices of Clifford Chigbu
\n ← Back to home\n

Privacy Policy

\n

Last updated: 2026-07-16

\n\n

Who we are

\n

Law Offices of Clifford Chigbu (\"we\", \"our\", \"us\") operates the website chigbulaws.com (the \"Site\"). We are a California law firm located at 4815 Laguna Park Dr, Suite C, Elk Grove, CA 95758, contactable at (916) 230-6381 or chigbulaw@sbcglobal.net.

\n\n

What information we collect

\n

We collect information you voluntarily provide when you:

\n
    \n
  • Submit a contact form or intake form (name, phone, email, the details of your legal matter)
  • \n
  • Send a message through the OBI chat assistant
  • \n
  • Email or call us
  • \n
\n

We may also collect anonymous technical information automatically, including IP address, browser type, pages visited, and time of visit. We do not use tracking cookies on this site.

\n\n

How we use your information

\n
    \n
  • To respond to your inquiry and discuss potential legal representation
  • \n
  • To evaluate whether we can take your case
  • \n
  • To follow up on a consultation or representation
  • \n
  • To comply with legal obligations
  • \n
\n

We do not sell, rent, or share your personal information with third parties for their marketing purposes.

\n\n

Confidentiality and attorney-client privilege

\n

Information you submit through this Site is treated as confidential, but submitting an inquiry does not create an attorney-client relationship. An attorney-client relationship is formed only after a written engagement agreement is signed. Until then, please do not send sensitive case details — keep your initial message to a brief description of your legal matter.

\n\n

Data retention

\n

Form submissions are retained for 90 days in our service provider's storage and then automatically deleted, unless we open a case file based on your inquiry, in which case retention is governed by our standard client file retention policy.

\n\n

Your California rights (CCPA / CPRA)

\n

If you are a California resident, you have the right to:

\n
    \n
  • Know what personal information we collect about you
  • \n
  • Request that we delete your personal information
  • \n
  • Opt out of any sale or sharing of your personal information (we do not sell or share)
  • \n
  • Non-discrimination for exercising your rights
  • \n
\n

To exercise any of these rights, contact us at chigbulaw@sbcglobal.net or call (916) 230-6381.

\n\n

Third-party services

\n

We use the following third-party services to operate this Site:

\n
    \n
  • Cloudflare — content delivery, security, and analytics (cookie-free)
  • \n
  • Resend / MailChannels — email delivery for form submissions to our office
  • \n
  • Google Maps — directions to our office (loaded only when you click \"Get Directions\")
  • \n
\n\n

Changes to this policy

\n

We may update this policy from time to time. The \"Last updated\" date at the top reflects the most recent version. Substantive changes will be communicated via a notice on this page.

\n\n

Contact

\n

Questions about this privacy policy?

\n

Law Offices of Clifford Chigbu
\n 4815 Laguna Park Dr, Suite C, Elk Grove, CA 95758
\n Phone: (916) 230-6381
\n Email: chigbulaw@sbcglobal.net

\n\n

← Back to home · Terms of Use

\n
"; +const TERMS_HTML = "Terms of Use — Law Offices of Clifford Chigbu
\n ← Back to home\n

Terms of Use

\n

Last updated: 2026-07-16

\n\n

Attorney advertising

\n

This website is an advertisement for legal services provided by Law Offices of Clifford Chigbu. The information presented should not be construed as formal legal advice or the formation of a lawyer-client relationship.

\n\n

No legal advice

\n

The content on this Site, including blog posts, the FAQ, and the OBI chat assistant, is provided for general informational purposes only and is not a substitute for the advice of a licensed attorney. Every legal situation is different; do not rely on the general information here to make decisions about your specific case. Always consult with an attorney about your particular circumstances.

\n\n

No attorney-client relationship

\n

Visiting this Site, submitting a form, sending an email, or chatting with the OBI assistant does not create an attorney-client relationship. An attorney-client relationship is formed only after Clifford Chigbu has agreed in writing to represent you and a written engagement agreement has been signed by both parties.

\n\n

Confidentiality

\n

Information you transmit through this Site may not be confidential or protected by attorney-client privilege until an engagement agreement is in place. Please do not transmit sensitive or confidential information about your legal matter through web forms — call our office at (916) 230-6381 to discuss anything sensitive.

\n\n

Past results disclaimer

\n

Past results, settlements, verdicts, awards, and recognitions described on this Site do not guarantee similar outcomes in future cases. Each legal matter is unique and outcomes depend on facts, applicable law, opposing parties, and many other factors.

\n\n

Awards and ratings

\n

Statements regarding awards, recognition, ratings, and reviews are based on third-party sources (Google Business Profile, BusinessRate, etc.) and reflect the opinions of those third parties. They are not a comparison to or claim of superiority over other attorneys.

\n\n

Jurisdiction

\n

Clifford Chigbu is licensed to practice law in the State of California (State Bar #221386). The information on this Site is intended for residents of California. Use of this Site by residents of other states is not encouraged and we may decline representation for matters outside our jurisdiction.

\n\n

Limitation of liability

\n

Law Offices of Clifford Chigbu makes no warranties, express or implied, regarding the accuracy or completeness of the information on this Site. We are not liable for any actions you take or fail to take based on information from this Site.

\n\n

Governing law

\n

These Terms are governed by the laws of the State of California, without regard to conflict of laws principles.

\n\n

← Back to home · Privacy Policy

\n
"; const VCARD = "BEGIN:VCARD\r\nVERSION:3.0\r\nFN:Clifford Chigbu\r\nN:Chigbu;Clifford;;;\r\nORG:Law Offices of Clifford Chigbu\r\nTITLE:Attorney at Law\r\nTEL;TYPE=WORK,VOICE:(916) 230-6381\r\nEMAIL;TYPE=WORK:chigbulaw@sbcglobal.net\r\nURL:https://chigbulaws.com/\r\nADR;TYPE=WORK:;;4815 Laguna Park Dr, Suite C;Elk Grove;CA;95758;USA\r\nCATEGORIES:Lawyer,Attorney\r\nNOTE:Clifford C. Chigbu, Attorney at Law — Top-rated Family Law and Immigration attorney serving Elk Grove, Sacramento, Davis, Lodi, Stockton, and Jackson. Divorce, custody, green cards, citizenship, and more. Call (916) 230-6381.\r\nEND:VCARD\r\n"; const SITE_ID = "chigbulaws"; const VERTICAL = "law"; @@ -192,7 +192,8 @@ export default { if (p === "/api/book" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "booking", site: SITE_ID, ...data }); + const { name, phone, vehicle, notes, timestamp } = data; + await fireAlert(env, { kind: "booking", site: SITE_ID, name, phone, vehicle, notes, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -201,7 +202,8 @@ export default { if (p === "/api/intake" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "intake", site: SITE_ID, ...data }); + const { client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp } = data; + await fireAlert(env, { kind: "intake", site: SITE_ID, client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -210,7 +212,8 @@ export default { if (p === "/api/chat" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "chat", site: SITE_ID, ...data }); + const { message, sessionId, timestamp } = data; + await fireAlert(env, { kind: "chat", site: SITE_ID, message, sessionId, timestamp }); const msg = (data.message || "").toLowerCase(); let reply; if (VERTICAL === "law") { diff --git a/sites/dist/cleantruckcheck-fairfield/worker.js b/sites/dist/cleantruckcheck-fairfield/worker.js index 6464f30..57999dc 100644 --- a/sites/dist/cleantruckcheck-fairfield/worker.js +++ b/sites/dist/cleantruckcheck-fairfield/worker.js @@ -192,7 +192,8 @@ export default { if (p === "/api/book" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "booking", site: SITE_ID, ...data }); + const { name, phone, vehicle, notes, timestamp } = data; + await fireAlert(env, { kind: "booking", site: SITE_ID, name, phone, vehicle, notes, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -201,7 +202,8 @@ export default { if (p === "/api/intake" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "intake", site: SITE_ID, ...data }); + const { client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp } = data; + await fireAlert(env, { kind: "intake", site: SITE_ID, client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -210,7 +212,8 @@ export default { if (p === "/api/chat" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "chat", site: SITE_ID, ...data }); + const { message, sessionId, timestamp } = data; + await fireAlert(env, { kind: "chat", site: SITE_ID, message, sessionId, timestamp }); const msg = (data.message || "").toLowerCase(); let reply; if (VERTICAL === "law") { diff --git a/sites/dist/cleantruckcheck-hayward/worker.js b/sites/dist/cleantruckcheck-hayward/worker.js index 44e22e8..e415886 100644 --- a/sites/dist/cleantruckcheck-hayward/worker.js +++ b/sites/dist/cleantruckcheck-hayward/worker.js @@ -192,7 +192,8 @@ export default { if (p === "/api/book" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "booking", site: SITE_ID, ...data }); + const { name, phone, vehicle, notes, timestamp } = data; + await fireAlert(env, { kind: "booking", site: SITE_ID, name, phone, vehicle, notes, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -201,7 +202,8 @@ export default { if (p === "/api/intake" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "intake", site: SITE_ID, ...data }); + const { client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp } = data; + await fireAlert(env, { kind: "intake", site: SITE_ID, client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -210,7 +212,8 @@ export default { if (p === "/api/chat" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "chat", site: SITE_ID, ...data }); + const { message, sessionId, timestamp } = data; + await fireAlert(env, { kind: "chat", site: SITE_ID, message, sessionId, timestamp }); const msg = (data.message || "").toLowerCase(); let reply; if (VERTICAL === "law") { diff --git a/sites/dist/cleantruckcheck-lodi/worker.js b/sites/dist/cleantruckcheck-lodi/worker.js index 505ccb9..ed6fbeb 100644 --- a/sites/dist/cleantruckcheck-lodi/worker.js +++ b/sites/dist/cleantruckcheck-lodi/worker.js @@ -192,7 +192,8 @@ export default { if (p === "/api/book" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "booking", site: SITE_ID, ...data }); + const { name, phone, vehicle, notes, timestamp } = data; + await fireAlert(env, { kind: "booking", site: SITE_ID, name, phone, vehicle, notes, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -201,7 +202,8 @@ export default { if (p === "/api/intake" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "intake", site: SITE_ID, ...data }); + const { client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp } = data; + await fireAlert(env, { kind: "intake", site: SITE_ID, client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -210,7 +212,8 @@ export default { if (p === "/api/chat" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "chat", site: SITE_ID, ...data }); + const { message, sessionId, timestamp } = data; + await fireAlert(env, { kind: "chat", site: SITE_ID, message, sessionId, timestamp }); const msg = (data.message || "").toLowerCase(); let reply; if (VERTICAL === "law") { diff --git a/sites/dist/cleantruckcheck-roseville/worker.js b/sites/dist/cleantruckcheck-roseville/worker.js index 9903a1b..ae5e842 100644 --- a/sites/dist/cleantruckcheck-roseville/worker.js +++ b/sites/dist/cleantruckcheck-roseville/worker.js @@ -192,7 +192,8 @@ export default { if (p === "/api/book" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "booking", site: SITE_ID, ...data }); + const { name, phone, vehicle, notes, timestamp } = data; + await fireAlert(env, { kind: "booking", site: SITE_ID, name, phone, vehicle, notes, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -201,7 +202,8 @@ export default { if (p === "/api/intake" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "intake", site: SITE_ID, ...data }); + const { client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp } = data; + await fireAlert(env, { kind: "intake", site: SITE_ID, client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -210,7 +212,8 @@ export default { if (p === "/api/chat" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "chat", site: SITE_ID, ...data }); + const { message, sessionId, timestamp } = data; + await fireAlert(env, { kind: "chat", site: SITE_ID, message, sessionId, timestamp }); const msg = (data.message || "").toLowerCase(); let reply; if (VERTICAL === "law") { diff --git a/sites/dist/cleantruckcheck-stockton/worker.js b/sites/dist/cleantruckcheck-stockton/worker.js index 89d5dfa..8e90e6e 100644 --- a/sites/dist/cleantruckcheck-stockton/worker.js +++ b/sites/dist/cleantruckcheck-stockton/worker.js @@ -192,7 +192,8 @@ export default { if (p === "/api/book" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "booking", site: SITE_ID, ...data }); + const { name, phone, vehicle, notes, timestamp } = data; + await fireAlert(env, { kind: "booking", site: SITE_ID, name, phone, vehicle, notes, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -201,7 +202,8 @@ export default { if (p === "/api/intake" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "intake", site: SITE_ID, ...data }); + const { client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp } = data; + await fireAlert(env, { kind: "intake", site: SITE_ID, client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -210,7 +212,8 @@ export default { if (p === "/api/chat" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "chat", site: SITE_ID, ...data }); + const { message, sessionId, timestamp } = data; + await fireAlert(env, { kind: "chat", site: SITE_ID, message, sessionId, timestamp }); const msg = (data.message || "").toLowerCase(); let reply; if (VERTICAL === "law") { diff --git a/sites/dist/mobilecarbsmoketest/worker.js b/sites/dist/mobilecarbsmoketest/worker.js index 97c354e..de4218d 100644 --- a/sites/dist/mobilecarbsmoketest/worker.js +++ b/sites/dist/mobilecarbsmoketest/worker.js @@ -192,7 +192,8 @@ export default { if (p === "/api/book" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "booking", site: SITE_ID, ...data }); + const { name, phone, vehicle, notes, timestamp } = data; + await fireAlert(env, { kind: "booking", site: SITE_ID, name, phone, vehicle, notes, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -201,7 +202,8 @@ export default { if (p === "/api/intake" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "intake", site: SITE_ID, ...data }); + const { client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp } = data; + await fireAlert(env, { kind: "intake", site: SITE_ID, client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -210,7 +212,8 @@ export default { if (p === "/api/chat" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "chat", site: SITE_ID, ...data }); + const { message, sessionId, timestamp } = data; + await fireAlert(env, { kind: "chat", site: SITE_ID, message, sessionId, timestamp }); const msg = (data.message || "").toLowerCase(); let reply; if (VERTICAL === "law") { diff --git a/sites/dist/mobilecarbtest/worker.js b/sites/dist/mobilecarbtest/worker.js index c74a621..a6b11e0 100644 --- a/sites/dist/mobilecarbtest/worker.js +++ b/sites/dist/mobilecarbtest/worker.js @@ -192,7 +192,8 @@ export default { if (p === "/api/book" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "booking", site: SITE_ID, ...data }); + const { name, phone, vehicle, notes, timestamp } = data; + await fireAlert(env, { kind: "booking", site: SITE_ID, name, phone, vehicle, notes, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -201,7 +202,8 @@ export default { if (p === "/api/intake" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "intake", site: SITE_ID, ...data }); + const { client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp } = data; + await fireAlert(env, { kind: "intake", site: SITE_ID, client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -210,7 +212,8 @@ export default { if (p === "/api/chat" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "chat", site: SITE_ID, ...data }); + const { message, sessionId, timestamp } = data; + await fireAlert(env, { kind: "chat", site: SITE_ID, message, sessionId, timestamp }); const msg = (data.message || "").toLowerCase(); let reply; if (VERTICAL === "law") { diff --git a/sites/dist/mobilesmoketest/worker.js b/sites/dist/mobilesmoketest/worker.js index 2291512..84fa3b5 100644 --- a/sites/dist/mobilesmoketest/worker.js +++ b/sites/dist/mobilesmoketest/worker.js @@ -192,7 +192,8 @@ export default { if (p === "/api/book" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "booking", site: SITE_ID, ...data }); + const { name, phone, vehicle, notes, timestamp } = data; + await fireAlert(env, { kind: "booking", site: SITE_ID, name, phone, vehicle, notes, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -201,7 +202,8 @@ export default { if (p === "/api/intake" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "intake", site: SITE_ID, ...data }); + const { client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp } = data; + await fireAlert(env, { kind: "intake", site: SITE_ID, client_name, client_phone, client_email, matter_type, summary, urgency, area, timestamp }); return new Response(JSON.stringify({ ok: true }), { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }); } catch (e) { return new Response(JSON.stringify({ ok: false, error: e.message }), { status: 400, headers: { "Content-Type": "application/json" } }); @@ -210,7 +212,8 @@ export default { if (p === "/api/chat" && request.method === "POST") { try { const data = await request.json(); - await fireAlert(env, { kind: "chat", site: SITE_ID, ...data }); + const { message, sessionId, timestamp } = data; + await fireAlert(env, { kind: "chat", site: SITE_ID, message, sessionId, timestamp }); const msg = (data.message || "").toLowerCase(); let reply; if (VERTICAL === "law") {