-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Added Component Form.taxi #18198
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Added Component Form.taxi #18198
Conversation
The latest updates on your projects. Learn more about Vercel for GitHub. 2 Skipped Deployments
|
Warning Rate limit exceeded@wrktbiz has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 7 minutes and 25 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (2)
WalkthroughAdds a new Form.taxi component: README, package manifest, app descriptor, and a “New Form Submission” source that registers, renews, and deletes webhooks, persists webhook state, acknowledges HTTP webhook calls, emits submission events, and supports sample fetching. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant Dev as Developer
participant Source as Pipedream Source
participant FTAPI as Form.taxi API
Note over Source,FTAPI: Activation / registration flow
Dev->>Source: Deploy / Activate
Source->>FTAPI: POST /webhooks (register)
FTAPI-->>Source: { webhook_id, expires_at }
Source->>Source: Persist webhook_id + expiry (db)
Note over Source: ensureWebhookFresh runs before expiry -> renew
Source->>FTAPI: POST /webhooks (renew) / DELETE old webhook
FTAPI-->>Source: { webhook_id, expires_at }
Source->>Source: Update persisted webhook info
sequenceDiagram
autonumber
participant User as Form Submitter
participant FT as Form.taxi
participant Source as Pipedream Source (HTTP)
participant PD as Pipedream Event Emitter
Note over FT,Source: Incoming submission flow
User->>FT: Submit form
FT->>Source: POST webhook (headers, query, body)
Source-->>FT: 200 OK (acknowledge)
Source->>Source: Compute event id, timestamp
Source->>PD: Emit event {headers, query, body, received_at, source}
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Poem
✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
Thank you so much for submitting this! We've added it to our backlog to review, and our team has been notified. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
🧹 Nitpick comments (7)
components/form_taxi/README.md (1)
1-7
: Add a concise Setup + Sample event sectionThis will help users configure the source quickly and understand emitted data.
# Overview Form.taxi provides a simple and secure way to handle form submissions without writing any server-side code. With Form.taxi, you can quickly connect your HTML forms and deliver submissions or integrate them into your existing workflows. By using Pipedream, you can automate actions in response to new form submissions—such as storing data, sending notifications, or connecting with third-party apps—making it easy to streamline processes and boost productivity. +## Setup +1. In Pipedream, add the “Form.taxi — New Form Submission” source. +2. Enter your Form Code and API Key from the Form.taxi Panel (Form settings → Information). +3. Save to provision the webhook. Submit a test form to see an event in Pipedream. + +## Sample event +```json +{ + "headers": { "...": "..." }, + "query": {}, + "body": { "id": "abc123", "created_at": "2025-08-27T19:00:00Z", "...": "..." }, + "received_at": "2025-08-27T19:01:00Z", + "source": "Form.taxi" +} +``` + # Troubleshooting If you have issues with this integration, please reach out at [[email protected]](mailto:[email protected]).components/form_taxi/package.json (2)
15-15
: Drop gitHead from committed manifestThis is an npm-publish artifact; keeping it in source causes noise.
- "gitHead": "e12480b94cc03bed4808ebc6b13e7fdb3a1ba535",
19-21
: Remove unused devDependency "package"Looks accidental; not required here.
- "devDependencies": { - "package": "^1.0.1" - } + "devDependencies": {}components/form_taxi/sources/new-form-submission/new-form-submission.mjs (4)
216-225
: ACK the webhook before renewal work to minimize vendor timeoutsRenewal can block the response. Fire-and-forget after ACK.
async run(event) { - // Vor der Verarbeitung prüfen, ob der Hook bald abläuft und ggf. erneuern - await this.ensureWebhookFresh(); - // Sofort ACK an Form.taxi await this.http.respond({ status: 200, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ ok: true }), }); + + // Renew in background (don’t block the webhook response) + this.ensureWebhookFresh().catch((err) => + console.error("ensureWebhookFresh failed:", err?.message) + ); // Event emittierenAlso applies to: 227-227
134-138
: Broaden event id extraction for stable dedupeAlso check
id
oruuid
before falling back to random.eventIdFromBody(body) { return ( - body?._id || + body?.id || body?._id || body?.uuid || `${Date.now()}-${Math.random().toString(36).slice(2)}` ); },
60-64
: Standardize logs/comments to English for consistencyMinor wording cleanups; no behavior change.
- const expires_at = resp?.data?.expires_at; // ISO-8601 erwartet + const expires_at = resp?.data?.expires_at; // ISO-8601 expected - if (!expires_at) throw new Error(`Response without Expire-Date!`); + if (!expires_at) throw new Error(`Response missing expires_at!`); - console.warn(`Webhook-Delete fehlgeschlagen: ${resp.status} ${msg}`); + console.warn(`Webhook deletion failed: ${resp.status} ${msg}`); - // ---- Ablaufprüfung & Erneuerung ---- + // Expiry check & renewal - // Wenn wir kein Ablaufdatum kennen, machen wir nichts (oder könnten aggressiv erneuern). + // If no expiry is known, renew aggressively. - const windowMs = 60 * 60 * 1000; // 60 Minuten + const windowMs = 60 * 60 * 1000; // 60 minutes - // Erneuerungsbedingungen: + // Renewal conditions: - // Alten Hook bereinigen (best effort), wenn wir eine neue ID haben + // Clean up old webhook (best effort) if the ID changed - console.log( - `Webhook erstellt/erneuert. Neue ID: ${res?.id || "unbekannt"}, läuft bis: ${res?.expires_at || "unbekannt"}` - ); + console.log( + `Webhook created/renewed. New ID: ${res?.id || "unknown"}, expires at: ${res?.expires_at || "unknown"}` + ); - console.error(`Automatische Erneuerung fehlgeschlagen: ${err.message}`); + console.error(`Automatic renewal failed: ${err.message}`); - console.warn(`Sample-GET fehlgeschlagen (${resp.status}): ${msg}`); + console.warn(`Sample GET failed (${resp.status}): ${msg}`); - console.warn("Sample-GET: leere Antwort"); + console.warn("Sample GET: empty response"); - // Wir packen die Daten in das gleiche Format wie echte Events + // Emit in the same shape as real events - console.warn("Sample-GET: unbekanntes Format", data); + console.warn("Sample GET: unknown format", data); - console.error(`Sample-GET Exception: ${err.message}`); + console.error(`Sample GET exception: ${err.message}`); - // Unmittelbar Sample-Daten laden und emittieren + // Immediately fetch and emit sample data - // Webhook frisch registrieren + // Register webhook - console.log("Webhook registriert:", res); + console.log("Webhook registered:", res); - console.warn("Fehler beim Entfernen des Webhooks:", err.message); + console.warn("Error removing webhook:", err.message); - // Sofort ACK an Form.taxi + // Immediate ACK to Form.taxi - // Event emittieren + // Emit eventAlso applies to: 77-77, 87-94, 99-103, 121-131, 146-146, 152-153, 162-163, 185-185, 188-188, 197-197, 202-205, 210-211, 220-220, 227-227
32-46
: Optional: validate webhook authenticity if Form.taxi supports signingIf available (e.g., HMAC header), verify signature and/or verify form_code in payload to prevent spoofed calls.
Would you like me to add a verification helper once we confirm the header name and algorithm?
Also applies to: 48-69, 141-190
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (4)
components/form_taxi/README.md
(1 hunks)components/form_taxi/form_taxi.app.mjs
(1 hunks)components/form_taxi/package.json
(1 hunks)components/form_taxi/sources/new-form-submission/new-form-submission.mjs
(1 hunks)
🔇 Additional comments (2)
components/form_taxi/README.md (1)
1-7
: Docs are clear and accurateNice concise overview and support contact.
components/form_taxi/form_taxi.app.mjs (1)
1-6
: App descriptor looks goodMatches Pipedream’s app metadata shape.
components/form_taxi/sources/new-form-submission/new-form-submission.mjs
Outdated
Show resolved
Hide resolved
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…ission.mjs Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
♻️ Duplicate comments (1)
components/form_taxi/sources/new-form-submission/new-form-submission.mjs (1)
193-212
: Good fix: hooks is now an object, so lifecycle runsThis resolves the earlier issue flagged in a past review; deploy/activate/deactivate will execute.
🧹 Nitpick comments (1)
components/form_taxi/sources/new-form-submission/new-form-submission.mjs (1)
77-79
: Standardize logs to English for consistencyImproves maintainability and aligns with repo norms.
- console.warn(`Webhook-Delete fehlgeschlagen: ${resp.status} ${msg}`); + console.warn(`Webhook delete failed: ${resp.status} ${msg}`); @@ - console.log( - `Webhook erstellt/erneuert. Neue ID: ${res?.id || "unbekannt"}, läuft bis: ${res?.expires_at || "unbekannt"}` - ); + console.log( + `Webhook created/renewed. New ID: ${res?.id || "unknown"}, expires at: ${res?.expires_at || "unknown"}` + ); @@ - console.error(`Automatische Erneuerung fehlgeschlagen: ${err.message}`); + console.error(`Automatic renewal failed: ${err.message}`); @@ - console.warn(`Sample-GET fehlgeschlagen (${resp.status}): ${msg}`); + console.warn(`Sample GET failed (${resp.status}): ${msg}`); @@ - console.warn("Sample-GET: leere Antwort"); + console.warn("Sample GET: empty response"); @@ - console.warn("Sample-GET: unbekanntes Format", data); + console.warn("Sample GET: unknown format", data); @@ - console.error(`Sample-GET Exception: ${err.message}`); + console.error(`Sample GET exception: ${err.message}`); @@ - console.log("Webhook registriert:", res); + console.log("Webhook registered:", res); @@ - console.warn("Fehler beim Entfernen des Webhooks:", err.message); + console.warn("Failed to remove webhook:", err.message);Also applies to: 126-131, 146-147, 152-153, 185-186, 188-189, 202-204, 206-210
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
components/form_taxi/sources/new-form-submission/new-form-submission.mjs
(1 hunks)
🔇 Additional comments (2)
components/form_taxi/sources/new-form-submission/new-form-submission.mjs (2)
95-132
: Renewal window logic looks solidClean handling of missing/expired expiry, and safe best-effort cleanup of old hooks.
150-178
: Event shape and summaries are consistent and usefulHeaders/query/body payload + summary/ts and
dedupe: "unique"
are wired correctly.Also applies to: 225-238
components/form_taxi/sources/new-form-submission/new-form-submission.mjs
Show resolved
Hide resolved
components/form_taxi/sources/new-form-submission/new-form-submission.mjs
Show resolved
Hide resolved
components/form_taxi/sources/new-form-submission/new-form-submission.mjs
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
everything is fine
WHY
Summary by CodeRabbit
New Features
Documentation