Skip to content

Conversation

@michelle0927
Copy link
Collaborator

@michelle0927 michelle0927 commented Dec 16, 2025

Resolves #13253

Summary by CodeRabbit

  • New Features

    • Added four new Launch27 actions: Get Booking Spots, Get Next Booking Date, Get Policy, and List Services.
  • Chores

    • Version bumped to 0.7.0.

✏️ Tip: You can customize this high-level summary in your review settings.

@vercel
Copy link

vercel bot commented Dec 16, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Review Updated (UTC)
pipedream-docs-redirect-do-not-edit Ignored Ignored Dec 16, 2025 8:58pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 16, 2025

Walkthrough

Introduces four new Launch27 action modules (get-booking-spots, get-next-booking-date, get-policy, list-services) and extends the core app module with token-based HTTP request infrastructure, five new API methods (listFrequencies, listServices, getPolicy, getBookingSpots, getNextBookingDate), and a frequencyId prop definition. Replaces the previous authKeys approach with OAuth token-authenticated requests. Package version incremented to 0.7.0.

Changes

Cohort / File(s) Summary
New Launch27 Actions
components/launch27/actions/get-booking-spots/get-booking-spots.mjs, components/launch27/actions/get-next-booking-date/get-next-booking-date.mjs, components/launch27/actions/get-policy/get-policy.mjs, components/launch27/actions/list-services/list-services.mjs
Four new action modules exposing Launch27 booking and service operations. Each exports async run method that invokes corresponding app method, builds summary string with operation result, and returns API response. Actions define metadata, annotations, and typed props (date, days, mode, grid, type, frequencyId).
App Infrastructure
components/launch27/launch27.app.mjs
Added frequencyId propDefinition with dynamic options fetching. Removed authKeys method. Introduced _baseUrl() helper and _makeRequest({ $, path, ...opts }) wrapper for OAuth-authenticated axios requests. Added five public methods: listFrequencies, listServices, getPolicy, getBookingSpots, getNextBookingDate.
Version Update
components/launch27/package.json
Bumped @pipedream/launch27 version from 0.6.0 to 0.7.0.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • OAuth token integration in _makeRequest: Verify proper Authorization header formation and error handling
  • frequencyId propDefinition options method: Confirm listFrequencies mapping and null/error handling
  • Action module data contracts: Validate parameter passing (date, days, mode, grid, type, frequencyId) across all four actions
  • Summary message formatting: Check consistency in exported summary strings and data access patterns

Pre-merge checks and finishing touches

❌ Failed checks (3 warnings, 1 inconclusive)
Check name Status Explanation Resolution
Description check ⚠️ Warning The description only references the issue number without providing any context about the changes, objectives, or implementation details. Expand the description to explain the three new polling sources (new-booking-instant, new-customer-instant, booking-completed-instant) and their purpose.
Linked Issues check ⚠️ Warning The pull request introduces action modules and app methods but omits the three required polling sources (new-booking-instant, new-customer-instant, booking-completed-instant) specified in issue #13253. Implement the three polling sources as specified in issue #13253 to emit events when bookings are created, customers are created, and bookings are completed.
Out of Scope Changes check ⚠️ Warning The pull request adds multiple action modules and app methods that are out of scope for issue #13253, which only requires three polling sources. Remove action modules (get-booking-spots, get-next-booking-date, get-policy, list-services) and focus exclusively on implementing the three required polling sources.
Title check ❓ Inconclusive The title is vague and overly broad, using generic phrasing like 'new components' without specifying the type or focus area. Specify the component types in the title, such as 'Launch27: Add polling sources for booking and customer events' to better communicate the change.
✅ Passed checks (1 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch issue-13253

📜 Recent review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d6edb6e and 5be8368.

📒 Files selected for processing (6)
  • components/launch27/actions/get-booking-spots/get-booking-spots.mjs (1 hunks)
  • components/launch27/actions/get-next-booking-date/get-next-booking-date.mjs (1 hunks)
  • components/launch27/actions/get-policy/get-policy.mjs (1 hunks)
  • components/launch27/actions/list-services/list-services.mjs (1 hunks)
  • components/launch27/launch27.app.mjs (1 hunks)
  • components/launch27/package.json (1 hunks)
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2024-10-08T15:33:38.240Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 12731
File: components/hackerone/actions/get-members/get-members.mjs:3-28
Timestamp: 2024-10-08T15:33:38.240Z
Learning: When exporting a summary message in the `run` method of an action, ensure the message is correctly formatted. For example, in the `hackerone-get-members` action, the correct format is `Successfully retrieved ${response.data.length} members`.

Applied to files:

  • components/launch27/actions/get-policy/get-policy.mjs
📚 Learning: 2025-09-15T22:01:11.472Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 18362
File: components/leonardo_ai/actions/generate-image/generate-image.mjs:103-105
Timestamp: 2025-09-15T22:01:11.472Z
Learning: In Pipedream components, pipedream/platform's axios implementation automatically excludes undefined values from HTTP requests, so there's no need to manually check for truthiness before including properties in request payloads.

Applied to files:

  • components/launch27/launch27.app.mjs
📚 Learning: 2025-06-04T17:52:05.780Z
Learnt from: GTFalcao
Repo: PipedreamHQ/pipedream PR: 16954
File: components/salesloft/salesloft.app.mjs:14-23
Timestamp: 2025-06-04T17:52:05.780Z
Learning: In the Salesloft API integration (components/salesloft/salesloft.app.mjs), the _makeRequest method returns response.data which directly contains arrays for list endpoints like listPeople, listCadences, listUsers, and listAccounts. The propDefinitions correctly call .map() directly on these responses without needing to destructure a nested data property.

Applied to files:

  • components/launch27/launch27.app.mjs
🧬 Code graph analysis (4)
components/launch27/actions/get-booking-spots/get-booking-spots.mjs (3)
components/launch27/actions/get-next-booking-date/get-next-booking-date.mjs (1)
  • response (29-35)
components/launch27/actions/get-policy/get-policy.mjs (1)
  • response (29-32)
components/launch27/actions/list-services/list-services.mjs (1)
  • response (18-20)
components/launch27/actions/list-services/list-services.mjs (3)
components/launch27/actions/get-booking-spots/get-booking-spots.mjs (1)
  • response (43-51)
components/launch27/actions/get-next-booking-date/get-next-booking-date.mjs (1)
  • response (29-35)
components/launch27/actions/get-policy/get-policy.mjs (1)
  • response (29-32)
components/launch27/actions/get-policy/get-policy.mjs (3)
components/launch27/actions/get-booking-spots/get-booking-spots.mjs (1)
  • response (43-51)
components/launch27/actions/get-next-booking-date/get-next-booking-date.mjs (1)
  • response (29-35)
components/launch27/actions/list-services/list-services.mjs (1)
  • response (18-20)
components/launch27/actions/get-next-booking-date/get-next-booking-date.mjs (3)
components/launch27/actions/get-booking-spots/get-booking-spots.mjs (1)
  • response (43-51)
components/launch27/actions/get-policy/get-policy.mjs (1)
  • response (29-32)
components/launch27/actions/list-services/list-services.mjs (1)
  • response (18-20)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: pnpm publish
  • GitHub Check: Verify TypeScript components
  • GitHub Check: Lint Code Base
  • GitHub Check: Publish TypeScript components
🔇 Additional comments (10)
components/launch27/package.json (1)

3-3: LGTM! Version bump is appropriate.

The version increment from 0.6.0 to 0.7.0 correctly reflects the addition of new actions and API methods.

components/launch27/actions/list-services/list-services.mjs (2)

1-26: LGTM! Well-structured action with proper annotations.

The action correctly implements read-only hints and follows the standard Pipedream action pattern. The summary message properly handles singular/plural cases.


18-24: Verify the response structure from the API.

The code assumes listServices returns an array directly with a .length property. Please confirm that the Launch27 API endpoint /booking/services returns an array at the top level rather than nested within a data property.

#!/bin/bash
# Description: Check how _makeRequest returns data and if other list methods handle response structure similarly

# Search for other usages of list methods to understand response structure patterns
rg -n -A5 -B2 'listFrequencies|listServices' --type=js

# Check if there are any response.data accesses in the app file
rg -n 'response\.data' components/launch27/
components/launch27/launch27.app.mjs (4)

1-1: LGTM! Correct import for HTTP requests.

The axios import from @pipedream/platform is the proper way to make authenticated API calls in Pipedream components.


6-21: LGTM! Proper use of optional chaining for safe array operations.

The frequencyId propDefinition correctly uses optional chaining (frequencies?.map()) and provides an empty array fallback, ensuring the options function won't throw if listFrequencies returns null or undefined.


23-36: LGTM! Clean OAuth token authentication implementation.

The _baseUrl() and _makeRequest() methods properly construct authenticated requests using the OAuth access token. The use of spread operators allows individual methods to override defaults as needed.


37-75: LGTM! Consistent API method implementations.

All five methods follow a consistent pattern:

  • Explicitly specify HTTP method (GET or POST)
  • Use the shared _makeRequest helper
  • Properly forward options via spread operator
  • Extract path parameters (type, frequencyId) before spreading opts

This design allows callers to pass additional options (like data, params) which will be forwarded to axios.

components/launch27/actions/get-policy/get-policy.mjs (1)

1-36: LGTM! Clean action implementation with appropriate annotations.

The action correctly:

  • Specifies read-only hints for a GET operation
  • Provides clear policy type options
  • Includes a descriptive summary message with the policy type
  • Links to API documentation
components/launch27/actions/get-booking-spots/get-booking-spots.mjs (1)

1-55: LGTM! Well-documented action with clear prop descriptions.

The action provides:

  • Detailed description of the mode parameter explaining the difference between "new" and "reschedule" policies
  • Clear date format specification (YYYY-MM-DD)
  • Optional grid parameter that will be automatically excluded from the request if undefined (per Pipedream's axios implementation)
  • Appropriate read-only annotations for a data retrieval operation
components/launch27/actions/get-next-booking-date/get-next-booking-date.mjs (1)

1-39: LGTM! Correct use of propDefinition and appropriate date format.

The action properly:

  • References the frequencyId propDefinition from the app module for dynamic options
  • Specifies the timestamp format (YYYY-MM-DDTHH:MM:SS) which is appropriate for calculating next recurring dates
  • Uses read-only annotations for a data retrieval operation
  • Links to API documentation

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Collaborator

@GTFalcao GTFalcao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@vunguyenhung
Copy link
Collaborator

Hi everyone, all test cases are passed! Ready for release!

Test reports

@michelle0927 michelle0927 merged commit 6e9034e into master Dec 17, 2025
9 checks passed
@michelle0927 michelle0927 deleted the issue-13253 branch December 17, 2025 15:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Components] launch27

4 participants