Skip to content

Conversation

@luancazarine
Copy link
Collaborator

@luancazarine luancazarine commented Feb 13, 2025

Resolves #15147.

Summary by CodeRabbit

  • New Features

    • Introduced OneLogin integration with actions to create, update, and revoke user sessions.
    • Added event sources for OneLogin to emit new user, directory sync, and custom event notifications.
    • Included utility functions and constants for OneLogin configuration and event handling.
  • Bug Fixes

    • Standardized file formatting by adding missing newline characters to various component files.
  • Chores

    • Updated package dependencies and version for OneLogin integration.
    • Added sample event data for testing OneLogin event sources.

@luancazarine luancazarine added the ai-assisted Content generated by AI, with human refinement and modification label Feb 13, 2025
@vercel
Copy link

vercel bot commented Feb 13, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

3 Skipped Deployments
Name Status Preview Comments Updated (UTC)
docs-v2 ⬜️ Ignored (Inspect) Visit Preview Jul 23, 2025 1:59pm
pipedream-docs ⬜️ Ignored (Inspect) Jul 23, 2025 1:59pm
pipedream-docs-redirect-do-not-edit ⬜️ Ignored (Inspect) Jul 23, 2025 1:59pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 13, 2025

Walkthrough

This update introduces a comprehensive OneLogin integration, adding new actions for creating, updating, and revoking user sessions, as well as several event-based sources for polling user, event, and directory sync changes. Supporting modules for constants and utilities are included, alongside extensive enhancements to the OneLogin app component. Numerous unrelated app files receive only a trailing newline addition.

Changes

Files / Groups Change Summary
components/onelogin/onelogin.app.mjs Major rewrite: adds full prop definitions, async option loaders, API helpers, user/event management, pagination
components/onelogin/actions/create-user/create-user.mjs
components/onelogin/actions/update-user/update-user.mjs
components/onelogin/actions/revoke-user-sessions/revoke-user-sessions.mjs
New actions: create user, update user, revoke user sessions in OneLogin
components/onelogin/common/constants.mjs
components/onelogin/common/utils.mjs
New modules: constants for options/enums; utility functions for parsing and formatting
components/onelogin/sources/common/base.mjs New base polling source for OneLogin events with last-date tracking and emit logic
components/onelogin/sources/new-user/new-user.mjs
components/onelogin/sources/new-directory-sync-event/new-directory-sync-event.mjs
components/onelogin/sources/new-event/new-event.mjs
New event sources: user created, directory sync, generic event, all extend common base
components/onelogin/sources/new-user/test-event.mjs
components/onelogin/sources/new-directory-sync-event/test-event.mjs
components/onelogin/sources/new-event/test-event.mjs
New test event data for each new source
components/onelogin/package.json Bump version to 0.1.0, add @pipedream/platform dependency
components/agentql/agentql.app.mjs
components/airpinpoint/airpinpoint.app.mjs
components/api_labz/api_labz.app.mjs
components/arlo/arlo.app.mjs
components/autotask_psa/autotask_psa.app.mjs
components/botx/botx.app.mjs
components/classmarker/classmarker.app.mjs
components/consulta_unica/consulta_unica.app.mjs
components/currents_api/currents_api.app.mjs
components/dappier/dappier.app.mjs
components/docker_engine/docker_engine.app.mjs
components/dungeon_fighter_online/dungeon_fighter_online.app.mjs
components/emailverify_io/emailverify_io.app.mjs
components/enginemailer/enginemailer.app.mjs
components/extracta_ai/extracta_ai.app.mjs
components/formatting/formatting.app.mjs
components/getty_images/getty_images.app.mjs
components/google_identity/google_identity.app.mjs
components/google_marketplace/google_marketplace.app.mjs
components/goqr_me/goqr_me.app.mjs
components/greenhouse_job_board_api/greenhouse_job_board_api.app.mjs
components/helpdesk/helpdesk.app.mjs
components/kraken_io/kraken_io.app.mjs
components/leverly/leverly.app.mjs
components/livespace/livespace.app.mjs
components/mailrelay/mailrelay.app.mjs
components/mailsoftly/mailsoftly.app.mjs
components/microsoft_dataverse/microsoft_dataverse.app.mjs
components/microsoft_teams_events/microsoft_teams_events.app.mjs
components/microsoft_word/microsoft_word.app.mjs
components/mindstudio/mindstudio.app.mjs
components/minerstat/minerstat.app.mjs
components/miyn/miyn.app.mjs
components/mollie/mollie.app.mjs
components/netcore/netcore.app.mjs
components/nutrient_document_web_services_api/nutrient_document_web_services_api.app.mjs
components/outline/outline.app.mjs
components/persanaai/persanaai.app.mjs
components/planday/planday.app.mjs
components/provesource/provesource.app.mjs
components/rewiser/rewiser.app.mjs
components/rize/rize.app.mjs
components/runsignup/runsignup.app.mjs
components/swarmnode/swarmnode.app.mjs
components/systeme_io/systeme_io.app.mjs
components/tailscale/tailscale.app.mjs
components/test_apps_for_switching_appslug_009/test_apps_for_switching_appslug_009.app.mjs
components/verifiedemail/verifiedemail.app.mjs
components/vlm_run/vlm_run.app.mjs
components/wafrow/wafrow.app.mjs
components/woodelivery/woodelivery.app.mjs
components/yepcode/yepcode.app.mjs
components/zoho_fms/zoho_fms.app.mjs
Add trailing newline to end of file (no logic changes)

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Action
    participant OneLoginApp
    participant OneLoginAPI

    User->>Action: Trigger (e.g., Create User)
    Action->>OneLoginApp: Call createUser/updateUser/revokeUserSessions
    OneLoginApp->>OneLoginAPI: REST API Request (POST/PUT)
    OneLoginAPI-->>OneLoginApp: API Response
    OneLoginApp-->>Action: Return result
    Action-->>User: Output summary and data
Loading
sequenceDiagram
    participant Source
    participant OneLoginApp
    participant OneLoginAPI
    participant User

    Source->>OneLoginApp: Fetch events (with lastDate)
    OneLoginApp->>OneLoginAPI: GET /events
    OneLoginAPI-->>OneLoginApp: Event data
    OneLoginApp-->>Source: Return events
    Source->>User: Emit new events (with summary)
    Source->>Source: Update lastDate in DB
Loading

Estimated code review effort

4 (~90 minutes)

Suggested reviewers

  • jcortes

Poem

A hop, a leap, a OneLogin feat—
New users, events, and actions to greet!
With sources that poll and helpers that parse,
This rabbit’s code is robust and sparse.
Now with newlines tidy and clean,
The integration’s the best you’ve seen!
🐇✨

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

components/onelogin/common/utils.mjs

Oops! Something went wrong! :(

ESLint: 8.57.1

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'jsonc-eslint-parser' imported from /eslint.config.mjs
at Object.getPackageJSONURL (node:internal/modules/package_json_reader:255:9)
at packageResolve (node:internal/modules/esm/resolve:767:81)
at moduleResolve (node:internal/modules/esm/resolve:853:18)
at defaultResolve (node:internal/modules/esm/resolve:983:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:801:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:725:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:708:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:309:38)
at #link (node:internal/modules/esm/module_job:202:49)

components/onelogin/sources/new-event/test-event.mjs

Oops! Something went wrong! :(

ESLint: 8.57.1

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'jsonc-eslint-parser' imported from /eslint.config.mjs
at Object.getPackageJSONURL (node:internal/modules/package_json_reader:255:9)
at packageResolve (node:internal/modules/esm/resolve:767:81)
at moduleResolve (node:internal/modules/esm/resolve:853:18)
at defaultResolve (node:internal/modules/esm/resolve:983:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:801:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:725:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:708:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:309:38)
at #link (node:internal/modules/esm/module_job:202:49)

components/onelogin/onelogin.app.mjs

Oops! Something went wrong! :(

ESLint: 8.57.1

Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'jsonc-eslint-parser' imported from /eslint.config.mjs
at Object.getPackageJSONURL (node:internal/modules/package_json_reader:255:9)
at packageResolve (node:internal/modules/esm/resolve:767:81)
at moduleResolve (node:internal/modules/esm/resolve:853:18)
at defaultResolve (node:internal/modules/esm/resolve:983:11)
at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:801:12)
at #cachedDefaultResolve (node:internal/modules/esm/loader:725:25)
at ModuleLoader.resolve (node:internal/modules/esm/loader:708:38)
at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:309:38)
at #link (node:internal/modules/esm/module_job:202:49)

  • 1 others

📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4844cc4 and 53da41b.

📒 Files selected for processing (4)
  • components/onelogin/common/utils.mjs (1 hunks)
  • components/onelogin/onelogin.app.mjs (1 hunks)
  • components/onelogin/sources/new-event/new-event.mjs (1 hunks)
  • components/onelogin/sources/new-event/test-event.mjs (1 hunks)
🧠 Learnings (2)
components/onelogin/sources/new-event/new-event.mjs (5)

Learnt from: GTFalcao
PR: #14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In components/the_magic_drip/sources/common.mjs, when processing items in getAndProcessData, savedIds is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.

Learnt from: GTFalcao
PR: #15376
File: components/monday/sources/name-updated/name-updated.mjs:6-6
Timestamp: 2025-01-23T03:55:15.166Z
Learning: Source names in Monday.com components don't need to start with "New" if they emit events for updated items (e.g., "Name Updated", "Column Value Updated") rather than new items. This follows the component guidelines exception where the "New" prefix is only required when emits are limited to new items.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-10-08T15:33:38.240Z
Learning: The common-webhook-methods.mjs object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like generateWebhookMeta and getEventType to enforce implementation in subclasses.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-07-24T02:06:47.016Z
Learning: The common-webhook-methods.mjs object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like generateWebhookMeta and getEventType to enforce implementation in subclasses.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common.mjs:97-98
Timestamp: 2024-07-24T02:05:59.531Z
Learning: The processTimerEvent method in the components/salesforce_rest_api/sources/common.mjs file is intentionally left unimplemented to enforce that subclasses must implement this method, similar to an abstract class in object-oriented programming.

components/onelogin/onelogin.app.mjs (4)

Learnt from: GTFalcao
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.

Learnt from: LucBerge
PR: #14080
File: components/nocodb/nocodb.app.mjs:133-133
Timestamp: 2024-10-08T15:33:38.240Z
Learning: When implementing pagination with an offset, incrementing args.params.offset within the loop ensures correct tracking of the offset, particularly when a maximum count limit (max) is used.

Learnt from: LucBerge
PR: #14080
File: components/nocodb/nocodb.app.mjs:133-133
Timestamp: 2024-09-25T16:13:11.505Z
Learning: When implementing pagination with an offset, incrementing args.params.offset within the loop ensures correct tracking of the offset, particularly when a maximum count limit (max) is used.

Learnt from: GTFalcao
PR: #15436
File: components/printful/printful.app.mjs:55-63
Timestamp: 2025-01-29T22:59:38.825Z
Learning: Console.log statements should be removed before merging PRs to maintain code quality and prevent potential security risks from exposing sensitive information in logs.

✅ Files skipped from review due to trivial changes (1)
  • components/onelogin/sources/new-event/test-event.mjs
🧰 Additional context used
🧠 Learnings (2)
components/onelogin/sources/new-event/new-event.mjs (5)

Learnt from: GTFalcao
PR: #14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In components/the_magic_drip/sources/common.mjs, when processing items in getAndProcessData, savedIds is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.

Learnt from: GTFalcao
PR: #15376
File: components/monday/sources/name-updated/name-updated.mjs:6-6
Timestamp: 2025-01-23T03:55:15.166Z
Learning: Source names in Monday.com components don't need to start with "New" if they emit events for updated items (e.g., "Name Updated", "Column Value Updated") rather than new items. This follows the component guidelines exception where the "New" prefix is only required when emits are limited to new items.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-10-08T15:33:38.240Z
Learning: The common-webhook-methods.mjs object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like generateWebhookMeta and getEventType to enforce implementation in subclasses.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-07-24T02:06:47.016Z
Learning: The common-webhook-methods.mjs object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like generateWebhookMeta and getEventType to enforce implementation in subclasses.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common.mjs:97-98
Timestamp: 2024-07-24T02:05:59.531Z
Learning: The processTimerEvent method in the components/salesforce_rest_api/sources/common.mjs file is intentionally left unimplemented to enforce that subclasses must implement this method, similar to an abstract class in object-oriented programming.

components/onelogin/onelogin.app.mjs (4)

Learnt from: GTFalcao
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.

Learnt from: LucBerge
PR: #14080
File: components/nocodb/nocodb.app.mjs:133-133
Timestamp: 2024-10-08T15:33:38.240Z
Learning: When implementing pagination with an offset, incrementing args.params.offset within the loop ensures correct tracking of the offset, particularly when a maximum count limit (max) is used.

Learnt from: LucBerge
PR: #14080
File: components/nocodb/nocodb.app.mjs:133-133
Timestamp: 2024-09-25T16:13:11.505Z
Learning: When implementing pagination with an offset, incrementing args.params.offset within the loop ensures correct tracking of the offset, particularly when a maximum count limit (max) is used.

Learnt from: GTFalcao
PR: #15436
File: components/printful/printful.app.mjs:55-63
Timestamp: 2025-01-29T22:59:38.825Z
Learning: Console.log statements should be removed before merging PRs to maintain code quality and prevent potential security risks from exposing sensitive information in logs.

⏰ 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: Lint Code Base
  • GitHub Check: Verify TypeScript components
  • GitHub Check: pnpm publish
  • GitHub Check: Publish TypeScript components
🔇 Additional comments (5)
components/onelogin/sources/new-event/new-event.mjs (1)

1-32: Well-structured source component following Pipedream patterns.

The component correctly extends the common base, implements required methods, and follows naming conventions. The use of withLabel: true for the eventType prop is good practice for providing user-friendly dropdown options.

components/onelogin/common/utils.mjs (2)

1-24: Robust JSON parsing utility with proper error handling.

The parseObject function handles various input types gracefully with appropriate fallbacks. The try-catch blocks prevent errors from malformed JSON, and the type checking ensures correct behavior for different data structures.


26-30: Add unit tests for edge‐case inputs in snakeCaseToTitleCase

The regex in snakeCaseToTitleCase covers most typical snake_case inputs, but its behavior on corner cases isn’t verified. Please add unit tests (or manual smoke tests) for:

  • Empty string ("")
  • Single underscore ("_") and multiple underscores ("__", "multiple___underscores")
  • Leading ("_leading_underscore") and trailing underscores ("trailing_underscore_")
  • All-uppercase input ("UPPER_CASE")
  • Mixed-case strings ("mixed_Case_String")

Confirm that each transforms into the expected Title Case output (e.g. "" → "", "_leading_underscore" → "Leading Underscore", etc.).

components/onelogin/onelogin.app.mjs (2)

13-249: Comprehensive propDefinitions with good API integration.

The extensive propDefinitions provide thorough coverage of OneLogin user properties with appropriate types, labels, and descriptions. The async options methods for dropdowns are well-implemented with proper data mapping.


252-314: Well-structured API methods with proper authentication.

The helper methods _baseUrl(), _headers(), and _makeRequest() provide a clean foundation for API interactions. The specific API methods are properly implemented with appropriate HTTP methods and paths.

✨ Finishing Touches
  • 📝 Generate Docstrings

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Sources
 - New User Created
 - New Login Attempt
 - New Directory Sync

Actions
 - Create User
 - Update User
 - Revoke User Session
@luancazarine luancazarine marked this pull request as ready for review July 21, 2025 20:40
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: 5

🔭 Outside diff range comments (2)
components/mailrelay/mailrelay.app.mjs (1)

7-9: Avoid logging authentication secrets to stdout.

console.log(Object.keys(this.$auth)) will surface every key present in the connected account payload. These keys frequently include tokens or IDs that are considered secrets. Printing them can inadvertently leak credentials into build logs or monitoring systems.

Consider returning the key list, masking sensitive values, or removing this helper entirely:

-  authKeys() {
-    console.log(Object.keys(this.$auth));
-  },
+  /**
+   * Safely expose the names of authentication keys without logging
+   * sensitive values to the console.
+   */
+  authKeys() {
+    return Object.keys(this.$auth);
+  },
components/tailscale/tailscale.app.mjs (1)

7-9: Avoid logging authentication secrets to stdout

console.log(Object.keys(this.$auth)) prints the names of all auth-related keys to the process output, which can leak sensitive information in build logs or monitoring tools. Return or otherwise handle the data instead of logging it.

     authKeys() {
-      console.log(Object.keys(this.$auth));
+      // Don’t log secrets – return them to the caller if needed.
+      return Object.keys(this.$auth);
     },
🧹 Nitpick comments (13)
components/helpdesk/helpdesk.app.mjs (1)

6-9: Consider removing console logging in production.

authKeys() prints the keys of the OAuth payload. While it doesn’t expose secrets, it can still reveal internal field names. Recommend guarding this behind a debug flag or removing it before production use.

components/rize/rize.app.mjs (1)

7-9: Avoid logging authentication data to console

Even though you only log the property names, the presence of console.log(Object.keys(this.$auth)) can still leak information in production logs and invites accidental expansion to full objects. Consider removing or shielding this call behind a debug flag.

components/docker_engine/docker_engine.app.mjs (1)

6-9: Avoid logging authentication metadata in production

authKeys() prints Object.keys(this.$auth) to stdout. Even though it logs only key names (not values), this can still leak information about the structure of connected-account credentials when run in production logs.

-    authKeys() {
-      console.log(Object.keys(this.$auth));
-    },
+    authKeys() {
+      if (process.env.NODE_ENV === "development") {
+        // Safe to log during local debugging only
+        console.debug("[docker_engine] $auth keys:", Object.keys(this.$auth));
+      }
+    },

Consider gating the log behind a debug flag or removing it entirely.

components/vlm_run/vlm_run.app.mjs (1)

7-9: Prefer removing or gating raw console.log of auth metadata
Even though only key names are emitted, logging authentication structure in production can clutter logs and expose integration details. Consider returning the array or using a debug-level logger behind an env flag instead.

components/kraken_io/kraken_io.app.mjs (1)

7-9: Prefer framework logger over console.log

Direct console.log statements bypass Pipedream’s logging facilities, making the output harder to trace and filter. Replace with this.$logger.info (or remove entirely and return the value) to stay consistent with other components.

-      console.log(Object.keys(this.$auth));
+      this.$logger.info(Object.keys(this.$auth));
components/onelogin/common/utils.mjs (1)

1-24: Consider renaming the function for better clarity.

The function logic is solid with appropriate error handling, but the name parseObject could be misleading since it primarily parses JSON strings into objects rather than parsing existing objects. Consider renaming to parseJSONSafely or parseJSON for better clarity.

-export const parseObject = (obj) => {
+export const parseJSON = (obj) => {
components/onelogin/sources/new-login-attempt/test-event.mjs (1)

1-37: Consider using more generic test data.

The test event contains what appears to be real IP addresses (98.80.221.195) and client IDs. For test fixtures, consider using clearly fake/example data to avoid any potential data exposure concerns.

-  "ipaddr":"98.80.221.195",
+  "ipaddr":"192.0.2.1",
-  "client_id":"1e87e84576a77d999e89e3ba110df9461decc2b1564bb1b9aa3e05fcbafb5918",
+  "client_id":"example-client-id-for-testing-purposes-only",
-  "user_name":"Username",
+  "user_name":"test-user",
components/onelogin/sources/common/base.mjs (3)

35-42: Avoid unnecessary array mutation and improve memory efficiency.

The code collects all paginated results into an array before processing. Consider processing events as they arrive to improve memory efficiency, especially for large result sets.

-      let responseArray = [];
-      for await (const item of response) {
-        responseArray.push(item);
-      }
-
-      if (responseArray.length) {
-        this._setLastDate(responseArray[0].created_at);
-      }
+      const events = [];
+      let latestDate = null;
+      
+      for await (const item of response) {
+        if (!latestDate) {
+          latestDate = item.created_at;
+        }
+        events.unshift(item); // Add to beginning for chronological order
+      }
+
+      if (latestDate) {
+        this._setLastDate(latestDate);
+      }

44-44: Avoid mutating the array with reverse().

Using reverse() mutates the original array. Since you're building the array yourself, consider inserting in the correct order from the start.

-      for (const item of responseArray.reverse()) {
+      for (const item of events) { // If using the refactor above

55-55: Make the initial event limit configurable.

The magic number 25 for initial events could be made configurable to allow different components to specify their preferred initial load size.

+    getInitialEventLimit() {
+      return 25;
+    },
     async deploy() {
-      await this.emitEvent(25);
+      await this.emitEvent(this.getInitialEventLimit());
     },
components/onelogin/sources/new-login-attempt/new-login-attempt.mjs (1)

14-16: Consider importing event types from constants.

The event type 111 could be imported from the constants file to improve maintainability and avoid magic numbers.

+import { EVENT_TYPES } from "../../common/constants.mjs";
+
 // ... 
     getEventType() {
-      return 111;
+      return EVENT_TYPES.LOGIN_ATTEMPT; // Assuming this constant exists
     },
components/onelogin/sources/new-directory-sync-event/new-directory-sync-event.mjs (1)

14-16: Consider importing event types from constants.

Similar to the login attempt source, the event type 117 could be imported from the constants file for better maintainability.

+import { EVENT_TYPES } from "../../common/constants.mjs";
+
 // ...
     getEventType() {
-      return 117;
+      return EVENT_TYPES.DIRECTORY_SYNC; // Assuming this constant exists
     },
components/onelogin/common/constants.mjs (1)

1-21: Consider consistent structure for option arrays

PASSWORD_ALGORITHM_OPTIONS uses a simple string array while other options like MAPPINGS_OPTIONS use objects with label/value. Consider using a consistent structure across all options for better maintainability.

-export const PASSWORD_ALGORITHM_OPTIONS = [
-  "salt+sha256",
-  "sha256+salt",
-  "bcrypt",
-];
+export const PASSWORD_ALGORITHM_OPTIONS = [
+  {
+    label: "Salt + SHA256",
+    value: "salt+sha256",
+  },
+  {
+    label: "SHA256 + Salt",
+    value: "sha256+salt",
+  },
+  {
+    label: "BCrypt",
+    value: "bcrypt",
+  },
+];
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d45031e and 4844cc4.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (67)
  • components/agentql/agentql.app.mjs (1 hunks)
  • components/airpinpoint/airpinpoint.app.mjs (1 hunks)
  • components/api_labz/api_labz.app.mjs (1 hunks)
  • components/arlo/arlo.app.mjs (1 hunks)
  • components/autotask_psa/autotask_psa.app.mjs (1 hunks)
  • components/botx/botx.app.mjs (1 hunks)
  • components/classmarker/classmarker.app.mjs (1 hunks)
  • components/consulta_unica/consulta_unica.app.mjs (1 hunks)
  • components/currents_api/currents_api.app.mjs (1 hunks)
  • components/dappier/dappier.app.mjs (1 hunks)
  • components/docker_engine/docker_engine.app.mjs (1 hunks)
  • components/dungeon_fighter_online/dungeon_fighter_online.app.mjs (1 hunks)
  • components/emailverify_io/emailverify_io.app.mjs (1 hunks)
  • components/enginemailer/enginemailer.app.mjs (1 hunks)
  • components/extracta_ai/extracta_ai.app.mjs (1 hunks)
  • components/formatting/formatting.app.mjs (1 hunks)
  • components/getty_images/getty_images.app.mjs (1 hunks)
  • components/google_identity/google_identity.app.mjs (1 hunks)
  • components/google_marketplace/google_marketplace.app.mjs (1 hunks)
  • components/goqr_me/goqr_me.app.mjs (1 hunks)
  • components/greenhouse_job_board_api/greenhouse_job_board_api.app.mjs (1 hunks)
  • components/helpdesk/helpdesk.app.mjs (1 hunks)
  • components/kraken_io/kraken_io.app.mjs (1 hunks)
  • components/leverly/leverly.app.mjs (1 hunks)
  • components/livespace/livespace.app.mjs (1 hunks)
  • components/mailrelay/mailrelay.app.mjs (1 hunks)
  • components/mailsoftly/mailsoftly.app.mjs (1 hunks)
  • components/microsoft_dataverse/microsoft_dataverse.app.mjs (1 hunks)
  • components/microsoft_teams_events/microsoft_teams_events.app.mjs (1 hunks)
  • components/microsoft_word/microsoft_word.app.mjs (1 hunks)
  • components/mindstudio/mindstudio.app.mjs (1 hunks)
  • components/minerstat/minerstat.app.mjs (1 hunks)
  • components/miyn/miyn.app.mjs (1 hunks)
  • components/mollie/mollie.app.mjs (1 hunks)
  • components/netcore/netcore.app.mjs (1 hunks)
  • components/nutrient_document_web_services_api/nutrient_document_web_services_api.app.mjs (1 hunks)
  • components/onelogin/actions/create-user/create-user.mjs (1 hunks)
  • components/onelogin/actions/revoke-user-sessions/revoke-user-sessions.mjs (1 hunks)
  • components/onelogin/actions/update-user/update-user.mjs (1 hunks)
  • components/onelogin/common/constants.mjs (1 hunks)
  • components/onelogin/common/utils.mjs (1 hunks)
  • components/onelogin/onelogin.app.mjs (1 hunks)
  • components/onelogin/package.json (2 hunks)
  • components/onelogin/sources/common/base.mjs (1 hunks)
  • components/onelogin/sources/new-directory-sync-event/new-directory-sync-event.mjs (1 hunks)
  • components/onelogin/sources/new-directory-sync-event/test-event.mjs (1 hunks)
  • components/onelogin/sources/new-login-attempt/new-login-attempt.mjs (1 hunks)
  • components/onelogin/sources/new-login-attempt/test-event.mjs (1 hunks)
  • components/onelogin/sources/new-user/new-user.mjs (1 hunks)
  • components/onelogin/sources/new-user/test-event.mjs (1 hunks)
  • components/outline/outline.app.mjs (1 hunks)
  • components/persanaai/persanaai.app.mjs (1 hunks)
  • components/planday/planday.app.mjs (1 hunks)
  • components/provesource/provesource.app.mjs (1 hunks)
  • components/rewiser/rewiser.app.mjs (1 hunks)
  • components/rize/rize.app.mjs (1 hunks)
  • components/runsignup/runsignup.app.mjs (1 hunks)
  • components/swarmnode/swarmnode.app.mjs (1 hunks)
  • components/systeme_io/systeme_io.app.mjs (1 hunks)
  • components/tailscale/tailscale.app.mjs (1 hunks)
  • components/test_apps_for_switching_appslug_009/test_apps_for_switching_appslug_009.app.mjs (1 hunks)
  • components/verifiedemail/verifiedemail.app.mjs (1 hunks)
  • components/vlm_run/vlm_run.app.mjs (1 hunks)
  • components/wafrow/wafrow.app.mjs (1 hunks)
  • components/woodelivery/woodelivery.app.mjs (1 hunks)
  • components/yepcode/yepcode.app.mjs (1 hunks)
  • components/zoho_fms/zoho_fms.app.mjs (1 hunks)
🧰 Additional context used
🧠 Learnings (13)
components/microsoft_teams_events/microsoft_teams_events.app.mjs (1)

Learnt from: GTFalcao
PR: #15376
File: components/monday/sources/name-updated/name-updated.mjs:6-6
Timestamp: 2025-01-23T03:55:15.166Z
Learning: Source names in Monday.com components don't need to start with "New" if they emit events for updated items (e.g., "Name Updated", "Column Value Updated") rather than new items. This follows the component guidelines exception where the "New" prefix is only required when emits are limited to new items.

components/onelogin/package.json (1)

Learnt from: jcortes
PR: #14935
File: components/sailpoint/package.json:15-18
Timestamp: 2024-12-12T19:23:09.039Z
Learning: When developing Pipedream components, do not add built-in Node.js modules like fs to package.json dependencies, as they are native modules provided by the Node.js runtime.

components/onelogin/sources/new-directory-sync-event/test-event.mjs (1)

Learnt from: GTFalcao
PR: #14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In components/the_magic_drip/sources/common.mjs, when processing items in getAndProcessData, savedIds is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.

components/onelogin/sources/new-user/new-user.mjs (4)

Learnt from: GTFalcao
PR: #15376
File: components/monday/sources/name-updated/name-updated.mjs:6-6
Timestamp: 2025-01-23T03:55:15.166Z
Learning: Source names in Monday.com components don't need to start with "New" if they emit events for updated items (e.g., "Name Updated", "Column Value Updated") rather than new items. This follows the component guidelines exception where the "New" prefix is only required when emits are limited to new items.

Learnt from: GTFalcao
PR: #14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In components/the_magic_drip/sources/common.mjs, when processing items in getAndProcessData, savedIds is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-10-08T15:33:38.240Z
Learning: The common-webhook-methods.mjs object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like generateWebhookMeta and getEventType to enforce implementation in subclasses.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-07-24T02:06:47.016Z
Learning: The common-webhook-methods.mjs object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like generateWebhookMeta and getEventType to enforce implementation in subclasses.

components/onelogin/sources/new-user/test-event.mjs (3)

Learnt from: GTFalcao
PR: #14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In components/the_magic_drip/sources/common.mjs, when processing items in getAndProcessData, savedIds is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-10-08T15:33:38.240Z
Learning: The common-webhook-methods.mjs object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like generateWebhookMeta and getEventType to enforce implementation in subclasses.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-07-24T02:06:47.016Z
Learning: The common-webhook-methods.mjs object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like generateWebhookMeta and getEventType to enforce implementation in subclasses.

components/onelogin/sources/new-login-attempt/test-event.mjs (1)

Learnt from: GTFalcao
PR: #14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In components/the_magic_drip/sources/common.mjs, when processing items in getAndProcessData, savedIds is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.

components/onelogin/actions/create-user/create-user.mjs (3)

Learnt from: jcortes
PR: #14467
File: components/gainsight_px/actions/create-account/create-account.mjs:4-6
Timestamp: 2024-10-30T15:24:39.294Z
Learning: In components/gainsight_px/actions/create-account/create-account.mjs, the action name should be "Create Account" instead of "Create Memory".

Learnt from: GTFalcao
PR: #12731
File: components/hackerone/actions/get-members/get-members.mjs:3-28
Timestamp: 2024-07-04T18:11:59.822Z
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.

Learnt from: GTFalcao
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.

components/onelogin/common/constants.mjs (1)

Learnt from: GTFalcao
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.

components/onelogin/actions/update-user/update-user.mjs (2)

Learnt from: GTFalcao
PR: #12731
File: components/hackerone/actions/get-members/get-members.mjs:3-28
Timestamp: 2024-07-04T18:11:59.822Z
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.

Learnt from: GTFalcao
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.

components/onelogin/sources/new-directory-sync-event/new-directory-sync-event.mjs (5)

Learnt from: GTFalcao
PR: #14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In components/the_magic_drip/sources/common.mjs, when processing items in getAndProcessData, savedIds is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.

Learnt from: GTFalcao
PR: #15376
File: components/monday/sources/name-updated/name-updated.mjs:6-6
Timestamp: 2025-01-23T03:55:15.166Z
Learning: Source names in Monday.com components don't need to start with "New" if they emit events for updated items (e.g., "Name Updated", "Column Value Updated") rather than new items. This follows the component guidelines exception where the "New" prefix is only required when emits are limited to new items.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-10-08T15:33:38.240Z
Learning: The common-webhook-methods.mjs object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like generateWebhookMeta and getEventType to enforce implementation in subclasses.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-07-24T02:06:47.016Z
Learning: The common-webhook-methods.mjs object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like generateWebhookMeta and getEventType to enforce implementation in subclasses.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common.mjs:97-98
Timestamp: 2024-07-24T02:05:59.531Z
Learning: The processTimerEvent method in the components/salesforce_rest_api/sources/common.mjs file is intentionally left unimplemented to enforce that subclasses must implement this method, similar to an abstract class in object-oriented programming.

components/onelogin/sources/new-login-attempt/new-login-attempt.mjs (4)

Learnt from: GTFalcao
PR: #15376
File: components/monday/sources/name-updated/name-updated.mjs:6-6
Timestamp: 2025-01-23T03:55:15.166Z
Learning: Source names in Monday.com components don't need to start with "New" if they emit events for updated items (e.g., "Name Updated", "Column Value Updated") rather than new items. This follows the component guidelines exception where the "New" prefix is only required when emits are limited to new items.

Learnt from: GTFalcao
PR: #14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In components/the_magic_drip/sources/common.mjs, when processing items in getAndProcessData, savedIds is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-10-08T15:33:38.240Z
Learning: The common-webhook-methods.mjs object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like generateWebhookMeta and getEventType to enforce implementation in subclasses.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common-webhook-methods.mjs:1-71
Timestamp: 2024-07-24T02:06:47.016Z
Learning: The common-webhook-methods.mjs object is designed to be extended, similar to an abstract class, and intentionally does not implement certain methods like generateWebhookMeta and getEventType to enforce implementation in subclasses.

components/onelogin/sources/common/base.mjs (2)

Learnt from: GTFalcao
PR: #14265
File: components/the_magic_drip/sources/common.mjs:35-43
Timestamp: 2024-10-10T19:18:27.998Z
Learning: In components/the_magic_drip/sources/common.mjs, when processing items in getAndProcessData, savedIds is intentionally updated with IDs of both emitted and non-emitted items to avoid emitting retroactive events upon first deployment and ensure only new events are emitted as they occur.

Learnt from: GTFalcao
PR: #12697
File: components/salesforce_rest_api/sources/common.mjs:97-98
Timestamp: 2024-07-24T02:05:59.531Z
Learning: The processTimerEvent method in the components/salesforce_rest_api/sources/common.mjs file is intentionally left unimplemented to enforce that subclasses must implement this method, similar to an abstract class in object-oriented programming.

components/onelogin/onelogin.app.mjs (1)

Learnt from: GTFalcao
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.

🧬 Code Graph Analysis (2)
components/onelogin/actions/revoke-user-sessions/revoke-user-sessions.mjs (3)
components/onelogin/actions/update-user/update-user.mjs (1)
  • response (241-279)
components/onelogin/actions/create-user/create-user.mjs (1)
  • response (238-275)
components/onelogin/sources/common/base.mjs (1)
  • response (25-33)
components/onelogin/onelogin.app.mjs (1)
components/onelogin/common/constants.mjs (8)
  • PASSWORD_ALGORITHM_OPTIONS (16-20)
  • PASSWORD_ALGORITHM_OPTIONS (16-20)
  • STATE_OPTIONS (22-39)
  • STATE_OPTIONS (22-39)
  • STATUS_OPTIONS (41-74)
  • STATUS_OPTIONS (41-74)
  • MAPPINGS_OPTIONS (1-14)
  • MAPPINGS_OPTIONS (1-14)
🔇 Additional comments (65)
components/google_marketplace/google_marketplace.app.mjs (1)

11-12: No functional impact — newline addition is fine
Nothing to address.

components/goqr_me/goqr_me.app.mjs (1)

11-12: File-ending newline looks good

Adding a trailing newline keeps the file POSIX-compliant and aligns with the repo’s formatting conventions.

components/verifiedemail/verifiedemail.app.mjs (1)

11-12: Consistent trailing newline – looks good

Adding the final newline aligns the file with POSIX and repo formatting conventions.

components/microsoft_word/microsoft_word.app.mjs (1)

11-12: Trailing newline added – conforms to POSIX and repo style
No functional impact. Good housekeeping change.

components/extracta_ai/extracta_ai.app.mjs (1)

11-12: No functional impact – trailing newline is fine

The added newline keeps file-termination consistent with the rest of the codebase. No other concerns.

components/minerstat/minerstat.app.mjs (1)

11-11: Consistent EOF newline added – LGTM

Adding a trailing newline aligns with POSIX conventions and keeps the file consistent with editor defaults across the repo. No functional impact.

components/zoho_fms/zoho_fms.app.mjs (1)

11-12: Consistent EOF newline addition looks good

Adding a trailing newline keeps the file POSIX-compliant and aligns with the repo-wide formatting update. No further action required.

components/dungeon_fighter_online/dungeon_fighter_online.app.mjs (1)

11-12: Consistent formatting – trailing newline added

The added newline aligns the file with common POSIX and linting conventions. No functional impact.

components/provesource/provesource.app.mjs (1)

11-11: Consistent EOF newline – good for POSIX tooling
Adding a terminating newline keeps the file POSIX-friendly and consistent with other components. No additional concerns.

components/microsoft_dataverse/microsoft_dataverse.app.mjs (1)

11-12: No functional changes – newline addition aligns with POSIX style
Adding a trailing newline is a harmless formatting improvement and brings the file in line with common tooling expectations.

components/enginemailer/enginemailer.app.mjs (1)

11-12: Stylistic newline addition LGTM

Trailing newline brings the file in line with POSIX/editor tooling expectations. No functional impact observed.

components/woodelivery/woodelivery.app.mjs (1)

11-12: Trailing newline added – all good

Adding a trailing newline keeps the file POSIX-compliant and aligns with editor/CI formatting rules. No further action needed.

components/mindstudio/mindstudio.app.mjs (1)

11-12: Add trailing newline – LGTM

Adding a trailing newline adheres to POSIX and repository formatting conventions. No functional impact.

components/classmarker/classmarker.app.mjs (1)

11-12: Good call adding a trailing newline
Ensures POSIX-compliant EOF and keeps diff noise down in future edits.

components/systeme_io/systeme_io.app.mjs (1)

11-12: Consistent EOF newline — looks good

The added trailing newline brings the file in line with POSIX and repo formatting conventions. No functional impact observed.

components/netcore/netcore.app.mjs (1)

11-12: Add EOF newline – good housekeeping

The added trailing newline meets POSIX and many linter requirements; no functional impact.

components/nutrient_document_web_services_api/nutrient_document_web_services_api.app.mjs (1)

11-12: LGTM – only a trailing-newline addition

This change just standardizes the file ending, improving POSIX compliance and preventing needless diff noise. Nothing else to flag.

components/helpdesk/helpdesk.app.mjs (1)

11-12: Trailing newline addition is fine.

Nothing else changes, and the file now respects the typical POSIX convention of ending with a newline.

components/dappier/dappier.app.mjs (1)

11-12: Formatting improvement acknowledged

The added trailing newline complies with POSIX and most style-guide recommendations. No functional impact—good to keep the file consistent with the rest of the codebase.

components/rewiser/rewiser.app.mjs (1)

11-12: No functional impact — newline addition standardizes formatting

Only a trailing newline was added. Conforms to common formatting conventions. 👍

components/mailrelay/mailrelay.app.mjs (1)

11-12: Trailing newline addition acknowledged.

The EOF-newline addition aligns with POSIX conventions and avoids certain tooling warnings. No further action required.

components/rize/rize.app.mjs (1)

11-12: Trailing newline looks good

The sole change introduces a POSIX-style trailing newline, improving consistency with the rest of the codebase.

components/microsoft_teams_events/microsoft_teams_events.app.mjs (1)

11-12: Trailing newline keeps POSIX-style file termination consistent
No functional impact, but it aligns with repo formatting conventions.

components/tailscale/tailscale.app.mjs (1)

11-12: Trailing newline addition looks good

Adding the newline complies with POSIX text-file conventions and linters. No further action needed.

components/docker_engine/docker_engine.app.mjs (1)

11-12: Trailing newline addition — no issues found

The only change is the insertion of a newline at EOF, which brings the file in line with POSIX style and causes no functional side-effects.

components/vlm_run/vlm_run.app.mjs (1)

11-12: Trailing newline addition is fine
Adds a POSIX-friendly newline without changing behavior.

components/google_identity/google_identity.app.mjs (1)

11-11: EOL newline addition improves POSIX compliance

Adding a trailing newline is a harmless formatting fix that aligns the file with POSIX and editor conventions. No functional impact—looks good.

components/kraken_io/kraken_io.app.mjs (1)

11-12: Newline finalizer inserted – LGTM

Adding a trailing newline keeps the file POSIX-friendly and consistent with the rest of the codebase. No functional impact.

components/miyn/miyn.app.mjs (1)

11-12: File now properly terminated with a newline – looks good.

No functional impact, but this keeps tooling happy and avoids EOF diff noise.

components/botx/botx.app.mjs (1)

11-12: Trailing newline added – accepted.

Consistent formatting across the codebase; nothing else to address here.

components/autotask_psa/autotask_psa.app.mjs (1)

11-12: EOF newline addition verified.

Change is purely cosmetic and aligns with POSIX text-file conventions.

components/livespace/livespace.app.mjs (1)

11-12: Newline at end of file – OK.

Maintains consistent formatting; no further action required.

components/planday/planday.app.mjs (1)

11-12: Formatting tweak approved.

Trailing newline adds consistency; no code logic affected.

components/test_apps_for_switching_appslug_009/test_apps_for_switching_appslug_009.app.mjs (1)

11-11: Formatting-only change looks good

Only a trailing newline was added. No functional impact.

components/persanaai/persanaai.app.mjs (1)

11-11: Formatting-only change looks good

Trailing newline addition is harmless and improves POSIX compliance.

components/formatting/formatting.app.mjs (1)

11-11: Consistent newline – OK

No logic modified; change aligns with project formatting conventions.

components/consulta_unica/consulta_unica.app.mjs (1)

11-11: LGTM – newline only

Pure formatting; safe to merge.

components/outline/outline.app.mjs (1)

11-11: Whitespace tweak approved

Adds final newline; no further feedback.

components/arlo/arlo.app.mjs (1)

11-12: Trailing newline added – formatting aligned with POSIX convention
No logic affected; change improves diff hygiene.

components/swarmnode/swarmnode.app.mjs (1)

11-12: Trailing newline added – formatting aligned with POSIX convention
No functional impact.

components/airpinpoint/airpinpoint.app.mjs (1)

11-12: Trailing newline added – formatting aligned with POSIX convention
Looks good.

components/wafrow/wafrow.app.mjs (1)

11-12: Trailing newline added – formatting aligned with POSIX convention
Change is purely cosmetic.

components/yepcode/yepcode.app.mjs (1)

11-12: Trailing newline added – formatting aligned with POSIX convention
All good here.

components/mailsoftly/mailsoftly.app.mjs (1)

11-12: Consistent trailing newline – looks good

Adds the missing EOF newline for POSIX compliance; no functional impact.

components/runsignup/runsignup.app.mjs (1)

11-12: Consistent trailing newline – looks good

Same formatting tweak as other components; keeps style uniform.

components/currents_api/currents_api.app.mjs (1)

11-12: Consistent trailing newline – looks good

No logic touched, just formatting.

components/greenhouse_job_board_api/greenhouse_job_board_api.app.mjs (1)

11-12: Consistent trailing newline – looks good

Keeps file formatting standards aligned.

components/agentql/agentql.app.mjs (1)

11-12: Consistent trailing newline – looks good

Matches formatting across the codebase; no further action required.

components/leverly/leverly.app.mjs (1)

11-12: Trailing newline addition is fine

Pure formatting; no functional impact.

components/api_labz/api_labz.app.mjs (1)

11-12: Consistent EOF newline – looks good

Keeps formatting uniform across components.

components/getty_images/getty_images.app.mjs (1)

11-12: Whitespace-only change approved

No runtime behavior affected.

components/mollie/mollie.app.mjs (1)

11-12: EOF newline added – OK

Maintains POSIX-style file ending; nothing else changed.

components/emailverify_io/emailverify_io.app.mjs (1)

11-12: Formatting alignment confirmed

Single newline addition; safe to merge.

components/onelogin/package.json (1)

3-17: LGTM! Version bump and dependency addition are appropriate.

The version bump to 0.1.0 correctly reflects the addition of new functionality, and the @pipedream/platform dependency is properly added to support the OneLogin integration components.

components/onelogin/sources/new-directory-sync-event/test-event.mjs (1)

1-37: LGTM! Comprehensive test event structure.

The test event object provides a complete representation of a OneLogin directory sync event with appropriate field coverage. The event_type_id: 117 correctly identifies directory sync events, and the structure aligns with OneLogin's API format.

components/onelogin/sources/new-user/new-user.mjs (1)

4-22: LGTM! Well-structured source component following Pipedream conventions.

The component properly extends the common base, implements required methods (getEventType and getSummary), and follows naming conventions with "New" prefix for sources that emit only new items. The event type ID 13 correctly identifies user creation events.

components/onelogin/sources/new-user/test-event.mjs (1)

1-37: LGTM! Appropriate test event for user creation.

The test event object correctly represents a OneLogin user creation event with event_type_id: 13 matching the source component's expectations. The structure includes all relevant fields and provides realistic test data for validation.

components/onelogin/actions/create-user/create-user.mjs (3)

1-3: Imports look good

The imports are appropriate and follow the expected structure for Pipedream components.


5-232: Well-structured props using propDefinitions

The props are well-organized and leverage propDefinitions from the app component for consistency. The custom label for managerUserId appropriately distinguishes it from the regular userId prop.


233-280: Robust implementation with proper validation and data transformation

The implementation correctly:

  • Validates required fields (email or username)
  • Handles optional fields with appropriate conversions (parseInt for state/status)
  • Maps property names to match API expectations (camelCase to snake_case)
  • Provides a clear success message following best practices
components/onelogin/actions/update-user/update-user.mjs (2)

1-239: Well-structured update action

The update action appropriately:

  • Requires userId as a mandatory field
  • Provides context-specific descriptions for username and email fields
  • Maintains consistency with the create action structure

240-284: Clean update implementation

The update logic correctly handles partial updates with all optional fields and properly references the user ID in the success message.

components/onelogin/common/constants.mjs (1)

41-74: Confirm handling of status value “6” in STATUS_OPTIONS

The OneLogin API documentation doesn’t document a user status “6,” yet our constants array jumps from "5" to "7". Please verify whether:

  • Status 6 is ever returned by your OneLogin tenant (it may be an internal or deprecated value).
  • You need to add a mapping entry for "6", or handle it via a generic “Unknown”/fallback option.
  • If this is truly undocumented, reach out to OneLogin support or your org’s administrator for the authoritative meaning of status 6.

Once clarified, update components/onelogin/common/constants.mjs accordingly to either include the missing entry or ensure unknown statuses render gracefully.

components/onelogin/onelogin.app.mjs (2)

1-7: Clean imports

Imports are well-organized and appropriate for the component's needs.


231-288: Well-structured API methods

The API methods follow a clean, consistent pattern with proper abstraction through the _makeRequest helper.

michelle0927
michelle0927 previously approved these changes Jul 21, 2025
Copy link
Collaborator

@michelle0927 michelle0927 left a comment

Choose a reason for hiding this comment

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

LGTM!

- Introduced a new event source for emitting events in OneLogin.
- Added event type selection with dynamic options based on available event types.
- Refactored API paths in the OneLogin app to remove redundant '/api' prefix.
- Implemented a utility function to convert snake_case to Title Case for better display of event types.
@luancazarine luancazarine merged commit d9ea0d2 into master Jul 24, 2025
11 checks passed
@luancazarine luancazarine deleted the issue-15147 branch July 24, 2025 16:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-assisted Content generated by AI, with human refinement and modification

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Components] onelogin

3 participants