Skip to content

Sidetracker - new components#20051

Merged
GTFalcao merged 5 commits intomasterfrom
issue-13404
Feb 18, 2026
Merged

Sidetracker - new components#20051
GTFalcao merged 5 commits intomasterfrom
issue-13404

Conversation

@michelle0927
Copy link
Collaborator

@michelle0927 michelle0927 commented Feb 16, 2026

Resolves #13404

Summary by CodeRabbit

  • New Features
    • Added Sidetracker actions: retrieve lists, get a row, add a row, and list sessions for a domain
    • Added a "New List Created" event trigger (polling source) and a reusable polling base for sources
    • Expanded Sidetracker integration: full API client with list/row/session endpoints and pagination
  • Chores
    • Utility to parse/normalize JSON-like input
    • Component version bumped and package metadata updated

@vercel
Copy link

vercel bot commented Feb 16, 2026

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
pipedream-docs-redirect-do-not-edit Ignored Ignored Feb 17, 2026 6:46pm

Request Review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 16, 2026

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Walkthrough

Adds a Sidetracker integration: API client and utils, four new actions, a reusable polling base, a source emitting new-list-created events, and package/version updates.

Changes

Cohort / File(s) Summary
Actions — CRUD & sessions
components/sidetracker/actions/add-row-to-list/add-row-to-list.mjs, components/sidetracker/actions/get-list/get-list.mjs, components/sidetracker/actions/get-row-from-list/get-row-from-list.mjs, components/sidetracker/actions/list-sessions-for-domain/list-sessions-for-domain.mjs
Adds four action modules: add-row-to-list (builds dynamic per-column props, merges parsed JSON with per-column inputs, calls addRowToList), get-list and get-row-from-list (fetch by IDs), and list-sessions-for-domain (calls listSessions with pagination).
App client & propDefinitions
components/sidetracker/sidetracker.app.mjs
Implements a Sidetracker API client (_baseUrl, _makeRequest, getList, getRow, listLists, listSessions, addRowToList, paginate) and adds an async listId propDefinition (options from listLists). Replaces prior authKeys/debug flow.
Utilities
components/sidetracker/common/utils.mjs
Adds parseObject(obj) utility to recursively parse JSON strings within objects/arrays, returning {} for falsy input and preserving nested structure (mutates nested object values in-place).
Polling base & source
components/sidetracker/sources/common/base-polling.mjs, components/sidetracker/sources/new-list-created/new-list-created.mjs
Adds a reusable polling base with DB-tracked lastTs, paginate integration, abstract getResourceFn/generateMeta hooks, deploy/run behavior; adds new-list-created source that extends the base to emit list creation events using listLists.
Package metadata
components/sidetracker/package.json
Bumped version 0.0.1 → 0.1.0 and added dependency @pipedream/platform: ^3.2.5.

Sequence Diagrams

sequenceDiagram
    actor Client
    participant Action as "Action (add/get/list)"
    participant App as "sidetracker.app"
    participant API as "Sidetracker API"

    Client->>Action: Trigger action with props (e.g., listId, data)
    Action->>Action: parseObject / merge per-column props
    Action->>App: call addRowToList|getList|getRow|listSessions
    App->>App: _makeRequest() (auth, build request)
    App->>API: HTTP request
    API-->>App: Response
    App-->>Action: Return API response
    Action->>Client: Export summary and return response
Loading
sequenceDiagram
    participant Timer
    participant Source as "new-list-created Source"
    participant DB as "DB (lastTs)"
    participant App as "sidetracker.app"
    participant API as "Sidetracker API"

    Timer->>Source: Trigger polling interval
    Source->>DB: _getLastTs()
    Source->>App: paginate(fn=listLists, params)
    App->>API: Fetch paginated lists
    API-->>App: Return pages
    App-->>Source: Yield items
    Source->>Source: filter items by created_at > lastTs
    Source->>DB: _setLastTs(maxTs)
    loop For each filtered item
        Source->>Source: generateMeta(item)
        Source->>Source: $emit(item, meta)
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Suggested reviewers

  • jcortes
🚥 Pre-merge checks | ✅ 4 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description references linked issue #13404 but lacks details on what components are added, their functionality, or how they address the issue requirements as specified in the template. Expand the description to include a WHY section explaining the purpose, and provide details about the new components being added (polling source, actions, and supporting infrastructure).
Merge Conflict Detection ⚠️ Warning ❌ Merge conflicts detected (49 files):

⚔️ components/sidetracker/package.json (content)
⚔️ components/sidetracker/sidetracker.app.mjs (content)
⚔️ components/slack/actions/add-emoji-reaction/add-emoji-reaction.mjs (content)
⚔️ components/slack/actions/approve-workflow/approve-workflow.mjs (content)
⚔️ components/slack/actions/archive-channel/archive-channel.mjs (content)
⚔️ components/slack/actions/create-channel/create-channel.mjs (content)
⚔️ components/slack/actions/create-reminder/create-reminder.mjs (content)
⚔️ components/slack/actions/delete-file/delete-file.mjs (content)
⚔️ components/slack/actions/delete-message/delete-message.mjs (content)
⚔️ components/slack/actions/find-message/find-message.mjs (content)
⚔️ components/slack/actions/find-user-by-email/find-user-by-email.mjs (content)
⚔️ components/slack/actions/get-current-user/get-current-user.mjs (content)
⚔️ components/slack/actions/get-file/get-file.mjs (content)
⚔️ components/slack/actions/invite-user-to-channel/invite-user-to-channel.mjs (content)
⚔️ components/slack/actions/kick-user/kick-user.mjs (content)
⚔️ components/slack/actions/list-channels/list-channels.mjs (content)
⚔️ components/slack/actions/list-files/list-files.mjs (content)
⚔️ components/slack/actions/list-group-members/list-group-members.mjs (content)
⚔️ components/slack/actions/list-members-in-channel/list-members-in-channel.mjs (content)
⚔️ components/slack/actions/list-messages/list-messages.mjs (content)
⚔️ components/slack/actions/list-replies/list-replies.mjs (content)
⚔️ components/slack/actions/list-users/list-users.mjs (content)
⚔️ components/slack/actions/reply-to-a-message/reply-to-a-message.mjs (content)
⚔️ components/slack/actions/send-block-kit-message/send-block-kit-message.mjs (content)
⚔️ components/slack/actions/send-large-message/send-large-message.mjs (content)
⚔️ components/slack/actions/send-message-advanced/send-message-advanced.mjs (content)
⚔️ components/slack/actions/send-message-to-channel/send-message-to-channel.mjs (content)
⚔️ components/slack/actions/send-message-to-user-or-group/send-message-to-user-or-group.mjs (content)
⚔️ components/slack/actions/send-message/send-message.mjs (content)
⚔️ components/slack/actions/set-channel-description/set-channel-description.mjs (content)
⚔️ components/slack/actions/set-channel-topic/set-channel-topic.mjs (content)
⚔️ components/slack/actions/set-status/set-status.mjs (content)
⚔️ components/slack/actions/update-group-members/update-group-members.mjs (content)
⚔️ components/slack/actions/update-message/update-message.mjs (content)
⚔️ components/slack/actions/update-profile/update-profile.mjs (content)
⚔️ components/slack/actions/upload-file/upload-file.mjs (content)
⚔️ components/slack/actions/verify-slack-signature/verify-slack-signature.mjs (content)
⚔️ components/slack/package.json (content)
⚔️ components/slack/slack.app.mjs (content)
⚔️ components/slack/sources/new-channel-created/new-channel-created.mjs (content)
⚔️ components/slack/sources/new-direct-message/new-direct-message.mjs (content)
⚔️ components/slack/sources/new-interaction-event-received/new-interaction-event-received.mjs (content)
⚔️ components/slack/sources/new-keyword-mention/new-keyword-mention.mjs (content)
⚔️ components/slack/sources/new-message-in-channels/new-message-in-channels.mjs (content)
⚔️ components/slack/sources/new-reaction-added/new-reaction-added.mjs (content)
⚔️ components/slack/sources/new-saved-message/new-saved-message.mjs (content)
⚔️ components/slack/sources/new-user-added/new-user-added.mjs (content)
⚔️ components/slack/sources/new-user-mention/new-user-mention.mjs (content)
⚔️ pnpm-lock.yaml (content)

These conflicts must be resolved before merging into master.
Resolve conflicts locally and push changes to this branch.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Sidetracker - new components' accurately reflects the main change: introduction of new Sidetracker integration components including actions and sources.
Linked Issues check ✅ Passed The PR successfully implements all required Sidetracker components from issue #13404: new-list-created source, add-row-to-list, list-sessions-for-domain, get-list, and get-row-in-list (named get-row-from-list) actions with proper required and optional props.
Out of Scope Changes check ✅ Passed All changes are directly related to implementing the Sidetracker integration. Supporting infrastructure changes (base-polling, utils, app client) are necessary and scoped to enable the required components.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch issue-13404

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
Contributor

@coderabbitai coderabbitai bot left a 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

🤖 Fix all issues with AI agents
Verify each finding against the current code and only fix it if needed.


In `@components/sidetracker/actions/add-row-to-list/add-row-to-list.mjs`:
- Around line 34-43: Guard against missing or non-iterable columns returned from
this.sidetracker.getList by checking that the response.columns is an array (or
truthy iterable) before iterating; if it's absent or not an array, treat it as
an empty array to avoid the TypeError in the for...of loop that populates props
(the symbols to adjust are this.sidetracker.getList, columns, and props).

In `@components/sidetracker/sidetracker.app.mjs`:
- Line 88: Remove the accidental double semicolon in the variable declaration
for hasMore and count (the line containing "let hasMore, count = 0;;"); edit the
declaration in sidetracker.app.mjs so it ends with a single semicolon (ensure
the symbol names hasMore and count remain unchanged and the statement stays "let
hasMore, count = 0;").

In `@components/sidetracker/sources/new-list-created/new-list-created.mjs`:
- Around line 13-14: getResourceFn currently returns an unbound reference to
this.sidetracker.listLists which loses its this context when called by paginate
and causes listLists to error on this._makeRequest; update getResourceFn to
return a bound function—either an arrow wrapper that calls
this.sidetracker.listLists(params) or use .bind(this.sidetracker) so that
listLists retains its sidetracker context when invoked by paginate.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
Verify each finding against the current code and only fix it if needed.


In `@components/sidetracker/sidetracker.app.mjs`:
- Around line 98-103: The generator loop yields results and attempts to stop
with "return count;", but generator return values are not visible to "for
await...of" consumers; change the termination to a bare "return;" (or "break;"
if you prefer to exit the loop without returning a value) in the for‑loop that
yields results so the code doesn't imply the count is propagated (look for the
async generator that iterates "for (const result of results)" and replace
"return count;" with "return;").

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
Verify each finding against the current code and only fix it if needed.


In `@components/sidetracker/sidetracker.app.mjs`:
- Around line 80-106: The paginate generator is currently overwriting
caller-supplied params (specifically page_size) by spreading params then
hard-setting page: 1 and page_size: 100; change this so only page is forced to 1
while allowing callers to override page_size—e.g., build params so params = {
...params, page: 1 } and set a default page_size when absent (use
params.page_size ?? 100 or equivalent) before calling fn; update references to
params.page_size and params.page accordingly in paginate to respect caller
overrides.

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!

@pipedream-component-development
Copy link
Collaborator

@GTFalcao GTFalcao merged commit 08241a0 into master Feb 18, 2026
9 checks passed
@GTFalcao GTFalcao deleted the issue-13404 branch February 18, 2026 17:55
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] sidetracker

3 participants