-
Notifications
You must be signed in to change notification settings - Fork 3
feat(connectors): allow skipping OAuth with Esc key #217
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
🚀 Package Preview Available!Install this PR's preview build with npm: npm i @base44-preview/cli@0.0.31-pr.217.a8a828cPrefer not to change any import paths? Install using npm alias so your code still imports npm i "base44@npm:@base44-preview/cli@0.0.31-pr.217.a8a828c"Or add it to your {
"dependencies": {
"base44": "npm:@base44-preview/cli@0.0.31-pr.217.a8a828c"
}
}
Preview published to npm registry — try new features instantly! |
7bfb43f to
7b418ac
Compare
e304a12 to
3d50451
Compare
kfirstri
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I commented this in the parent PR #189
the entire pWaitFor should not be in the core/ folder.. and in this PR there's now also spinners and more stuff which core/ packages should not be familiar with.
3fc2e0c to
ec69f63
Compare
99b7274 to
21ed8d3
Compare
|
README check ran. 5 issue(s) found and applied: Added missing |
c04ffd5 to
bdb1198
Compare
|
README check ran. 10 issues found:
README.md has been updated in this branch. |
|
README check ran. 3 issues found and applied: (1) Added missing |
bdb1198 to
bd6d0a4
Compare
|
README check ran. 3 issue(s) found and applied: (1) Added missing |
src/cli/commands/connectors/push.ts
Outdated
| interval: POLL_INTERVAL_MS, | ||
| timeout: POLL_TIMEOUT_MS, | ||
| }, | ||
| ).catch((err) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why not use try/catch/finally
kfirstri
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
small changes
Add connector resource module supporting 12 OAuth providers: googlecalendar, googledrive, gmail, googlesheets, googledocs, googleslides, slack, notion, salesforce, hubspot, linkedin, tiktok. - Zod discriminated union schema with type discriminator per provider - JSDoc links to official OAuth scope documentation for each provider - JSONC file reading with validation (filename must match type field) - API response schemas for upstream connector state - Unit tests with fixtures for valid, invalid, and mismatched connectors Part of: #184 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat(connectors): implement push logic for syncing connectors Add pushConnectors function that: - Syncs all local connectors via /sync endpoint - Removes upstream-only connectors not in local config - Returns typed results (synced, removed, needs_oauth, error) Includes unit tests covering all scenarios. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(connectors): add OAuth flow handling with browser redirect and polling (#192) * feat(connectors): add OAuth flow handling with browser redirect and polling Add runOAuthFlow function that: - Opens OAuth redirect URL in browser - Polls getOAuthStatus until ACTIVE or FAILED - Returns PENDING on timeout (5 minutes) Uses p-wait-for TimeoutError for robust timeout detection. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * connectors: base44 connectors push (#194) * final connector work sofi 1 * scopes --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Change provider field from closed enum to flexible union that accepts both known providers (googlecalendar, notion, slack, etc.) and any arbitrary provider string. This enables users to configure custom OAuth providers without waiting for first-class Base44 support. Schema changes: - Add GenericConnectorSchema for arbitrary provider types - Update ConnectorResourceSchema to union of specific + generic schemas - Update IntegrationTypeSchema to accept known enum OR any non-empty string - Only reject empty strings Test coverage: - Verify known providers continue to work - Verify arbitrary providers are accepted - Verify empty strings are rejected - All 137 tests passing Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Override process.exit temporarily during the spinner to intercept Ctrl+C/Escape (which clack's block() converts to process.exit(0)), letting users skip individual connector authorizations instead of killing the entire process. Adds SKIPPED status to the summary. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
066105c to
53c7c7d
Compare
|
README check ran. 6 issue(s) found: 1) Missing |
Note
Description
This PR adds the ability to skip individual OAuth connector authorizations during the
connectors pushflow by pressing the Esc key. Previously, users had to wait for authorization to complete or timeout, or kill the entire process. Now when authorizing multiple connectors, users can skip specific connectors without interrupting the entire push operation. Skipped connectors are tracked and reported separately in the summary output.Related Issue
Part of #184 (connectors feature implementation)
Type of Change
Changes Made
runOAuthFlowWithSkip()function to handle OAuth flows with Esc key skip capabilityOAuthFlowStatustype extendingConnectorOAuthStatuswith "SKIPPED" stateprocess.exitoverride to intercept Esc/Ctrl+C key presses during OAuth flowprintSummary()to track and display skipped connectors as warningsrunTask()with directspinner()usage for more control over exit handlingPOLL_INTERVAL_MS,POLL_TIMEOUT_MS) for OAuth status checksprocess.exitoverride mechanismTesting
npm test)Checklist
Additional Notes
Technical implementation: Clack's
block()function (used byspinner()) puts stdin in raw mode where Esc/Ctrl+C triggersprocess.exit(0)directly instead of emitting SIGINT. To implement skip functionality, we temporarily overrideprocess.exitduring the OAuth flow to set askippedflag instead of killing the process. The override is restored in afinallyblock to ensure normal exit behavior is preserved after each connector's authorization attempt.Review fixes: Added inline comment documenting the
process.exitoverride, wrapped OAuth flow in try/catch/finally for better error handling.🤖 Generated by Claude | 2026-02-12 22:15 UTC