Skip to content

feat(rippling): add Rippling HR integration with 19 tools#3764

Merged
waleedlatif1 merged 6 commits intostagingfrom
waleedlatif1/add-rippling
Mar 25, 2026
Merged

feat(rippling): add Rippling HR integration with 19 tools#3764
waleedlatif1 merged 6 commits intostagingfrom
waleedlatif1/add-rippling

Conversation

@waleedlatif1
Copy link
Collaborator

Summary

  • Add Rippling integration with 19 API tools (employees, departments, teams, levels, work locations, company info, leave management, groups, candidates)
  • Block config with operation dropdown, conditional fields, advanced mode for pagination/filters
  • API key auth via Bearer token against Rippling Base API
  • Offset-based pagination for list endpoints, cursor-based for company activity
  • Auto-generated docs with manual content section

Type of Change

  • New feature

Testing

Tested manually

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel
Copy link

vercel bot commented Mar 25, 2026

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
docs Skipped Skipped Mar 25, 2026 6:30pm

Request Review

@cursor
Copy link

cursor bot commented Mar 25, 2026

PR Summary

Medium Risk
Adds a sizable new API-key based integration that makes authenticated requests to many Rippling endpoints; risk is mainly around request/response mapping, pagination behavior, and handling of user-provided JSON inputs (e.g., users).

Overview
Adds a new Rippling HR integration across docs and the Sim app, including a new RipplingBlock with an operation dropdown, conditional inputs (IDs, pagination, filters), and API key auth.

Registers 19 new Rippling tools in the tool registry (employees/org data, leave, groups, candidates, company activity), each issuing Bearer-token requests to Rippling’s API and transforming responses into typed outputs.

Updates UI/icon infrastructure to include RipplingIcon, adds Rippling to integrations metadata (integrations.json) and docs navigation (tools/meta.json), and refreshes Quiver docs output fields to document multi-file generation.

Written by Cursor Bugbot for commit 6ed19dd. Configure here.

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Mar 25, 2026

Greptile Summary

This PR adds a Rippling HR integration with 19 API tools covering employee management, leave workflows, organizational data (departments, teams, levels, work locations), group management, candidate onboarding, and company activity. The integration follows the established block-per-integration pattern with a single RipplingBlock that routes to the appropriate tool based on an operation dropdown, uses API key auth via Bearer token, and handles both offset-based and cursor-based pagination correctly.

Key implementation details:

  • All previously reviewed issues have been resolved: JSON.parse guard with clear error message, offset=0 not dropped, candidateStartDate/startDate collision fixed, operation removed from mapped payload, action validated before URL construction, and empty-body PUT guard added.
  • All 19 tool configs correctly use visibility: 'user-only' for the apiKey param in line with the credential visibility convention.
  • Pagination guards uniformly use != null (not truthiness) so offset = 0 is forwarded correctly.
  • totalCount descriptions are updated to "on this page" for paginated tools and kept as "Total number returned" for non-paginated tools (list_leave_requests, list_leave_types).
  • The groupVersion field used by update_group for optimistic concurrency is defined as a sub-block and correctly mapped, but is absent from the block's inputs declaration — this prevents it from being wired from an upstream block output (e.g. piping the version from a create_group response into a subsequent update_group call).

Confidence Score: 5/5

  • Safe to merge — all previously flagged issues are resolved and the one remaining note is a non-blocking input wiring convenience gap.
  • The PR addresses every concern from prior review rounds. All 19 tools follow consistent, correct patterns: proper auth headers, != null pagination guards, validated actions, error-surfacing guards, and accurate type definitions. The only outstanding item (groupVersion missing from inputs) is a minor ergonomic gap that doesn't break any existing functionality.
  • No files require special attention.

Important Files Changed

Filename Overview
apps/sim/blocks/blocks/rippling.ts Core block config with operation routing, conditional subBlocks, and params mapper. All previously flagged issues are resolved; only minor omission is groupVersion missing from inputs.
apps/sim/tools/rippling/update_group.ts PUT group endpoint with correct URL encoding, empty-body guard, and proper optional field handling. Previously flagged empty-body issue is fixed.
apps/sim/tools/rippling/process_leave_request.ts Leave request approval/decline tool with action validation guard fixed in latest commit. URL encoding applied correctly to both leaveRequestId and action.
apps/sim/tools/rippling/push_candidate.ts ATS candidate push tool with correct required/optional body construction and clean response mapping.
apps/sim/tools/rippling/create_group.ts Group creation tool with correct POST body, optional users array handling, and proper error surfacing.
apps/sim/tools/rippling/list_employees.ts Employee listing tool with correct != null pagination guards and updated totalCount description to "on this page". Solid implementation.
apps/sim/tools/rippling/get_company_activity.ts Company activity tool with cursor-based pagination, dual response envelope handling (array or results object), and correct nextCursor extraction.
apps/sim/tools/rippling/types.ts Comprehensive type definitions for all 19 tool parameter/response pairs. Nullable fields correctly typed with `
apps/sim/tools/rippling/list_leave_requests.ts Non-paginated leave request listing with date range and status filters. Correct truthiness guards for optional query params.
apps/sim/tools/rippling/list_employees_with_terminated.ts Uses /employees/include_terminated endpoint path to fetch active + terminated employees, with the same pagination pattern as list_employees.

Sequence Diagram

sequenceDiagram
    participant W as Workflow
    participant B as RipplingBlock
    participant R as Rippling API

    W->>B: params (operation, apiKey, ...)
    B->>B: tool = rippling_${operation}
    B->>B: map params → tool payload

    alt List operations (employees, depts, teams, …)
        B->>R: GET /platform/api/{resource}?limit=&offset=
        R-->>B: Array or { results: [] }
        B-->>W: { items[], totalCount }
    else Single-resource GET (get_employee, get_company, …)
        B->>R: GET /platform/api/{resource}/{id}
        R-->>B: Single object
        B-->>W: Flat fields (id, name, email, …)
    else process_leave_request
        B->>B: validate action ∈ {approve, decline}
        B->>R: POST /leave_requests/{id}/process?action=
        R-->>B: Updated leave request
        B-->>W: { id, status, requestedBy, … }
    else create_group / update_group
        B->>B: build body (guard empty PUT)
        B->>R: POST/PUT /platform/api/groups[/{id}]
        R-->>B: Group object
        B-->>W: { id, name, spokeId, users, version }
    else push_candidate
        B->>R: POST /ats_candidates/push_candidate
        R-->>B: Candidate object
        B-->>W: { id, firstName, lastName, email, status }
    else get_company_activity
        B->>R: GET /company_activity?startDate=&endDate=&next=
        R-->>B: { results: [], next: cursor }
        B-->>W: { events[], totalCount, nextCursor }
    end
Loading

Reviews (5): Last reviewed commit: "fix(rippling): add input validation for ..." | Re-trigger Greptile

- Fix lint:check import ordering in icon-mapping.ts
- Build clean params object instead of spreading all UI fields to API
- Add try/catch around JSON.parse for users field
- Use != null guard for limit/offset to not drop 0 values
- Add missing tags to block config and integrations.json
@waleedlatif1
Copy link
Collaborator Author

@greptile

@waleedlatif1
Copy link
Collaborator Author

@cursor review

…scriptions

- Guard startDate/endDate with operation check to prevent candidateStartDate
  from clobbering date filters on leave/activity operations
- Update totalCount output descriptions on paginated tools to clarify it
  reflects page size, not total record count
@waleedlatif1
Copy link
Collaborator Author

@greptile

@waleedlatif1
Copy link
Collaborator Author

@cursor review

@waleedlatif1
Copy link
Collaborator Author

@greptile

@waleedlatif1
Copy link
Collaborator Author

@cursor review

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

@waleedlatif1
Copy link
Collaborator Author

@greptile

@waleedlatif1
Copy link
Collaborator Author

@cursor review

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

@waleedlatif1 waleedlatif1 merged commit 2691c12 into staging Mar 25, 2026
12 checks passed
@waleedlatif1 waleedlatif1 deleted the waleedlatif1/add-rippling branch March 25, 2026 19:02
Sg312 pushed a commit that referenced this pull request Mar 25, 2026
* feat(rippling): add Rippling HR integration with 19 tools

* fix(rippling): address PR review feedback

- Fix lint:check import ordering in icon-mapping.ts
- Build clean params object instead of spreading all UI fields to API
- Add try/catch around JSON.parse for users field
- Use != null guard for limit/offset to not drop 0 values
- Add missing tags to block config and integrations.json

* fix(rippling): guard startDate by operation and clarify totalCount descriptions

- Guard startDate/endDate with operation check to prevent candidateStartDate
  from clobbering date filters on leave/activity operations
- Update totalCount output descriptions on paginated tools to clarify it
  reflects page size, not total record count

* fix(rippling): use null-safe guard for groupVersion param

* fix(rippling): remove operation field from tool params payload

* fix(rippling): add input validation for action param and empty group update body
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.

1 participant