Skip to content

OAuth provider client and dashboard #792

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

Open
wants to merge 14 commits into
base: dev
Choose a base branch
from

Conversation

fomalhautb
Copy link
Contributor

@fomalhautb fomalhautb commented Jul 23, 2025


Important

Enhances OAuth provider management with CRUD operations, UI components, and schema updates across client and server interfaces.

  • Behavior:
    • Adds provider_config_id to OAuth provider CRUD operations in crud.tsx and page-client.tsx.
    • Introduces OAuthProviderDialog and OAuthProvidersSection components in page-client.tsx for managing OAuth providers.
    • Updates e2e tests in oauth-providers.test.ts to include provider_config_id.
  • Interfaces:
    • Adds OAuthProviderCrud to client-interface.ts and server-interface.ts for CRUD operations.
    • Updates StackClientInterface and StackServerInterface to handle OAuth provider operations.
  • Schemas:
    • Adds oauthProviderProviderConfigIdSchema to schema-fields.ts.
    • Updates oauth-providers.ts to include provider_config_id in schemas.
  • Misc:
    • Updates client-app-impl.ts and server-app-impl.ts to integrate OAuth provider management.
    • Adds OAuthProvider and ServerOAuthProvider types to users/index.ts.
    • Updates server-app.ts and index.ts to export new types and functions.

This description was created by Ellipsis for 4a540dd. You can customize this summary. It will automatically update as commits are pushed.

Summary by CodeRabbit

  • New Features

    • Added user interface for managing OAuth providers linked to a user, including viewing, adding, editing, and deleting providers.
    • Introduced support for managing OAuth providers in both client and server app implementations, with new methods and hooks for listing, retrieving, updating, and deleting OAuth providers.
    • Extended user and server user objects with OAuth provider management capabilities and related TypeScript types.
  • Improvements

    • OAuth provider data now includes the provider configuration identifier for greater clarity.
    • Enhanced error handling for known issues when updating OAuth provider settings.
  • Bug Fixes

    • Updated test cases to verify the presence of provider configuration identifiers in OAuth provider responses.
  • Documentation

    • Added and updated TypeScript types and interfaces to reflect new OAuth provider management features.

Copy link

vercel bot commented Jul 23, 2025

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

Name Status Preview Comments Updated (UTC)
stack-backend ✅ Ready (Inspect) Visit Preview 💬 Add feedback Aug 1, 2025 11:52am
stack-dashboard ✅ Ready (Inspect) Visit Preview 💬 Add feedback Aug 1, 2025 11:52am
stack-demo ✅ Ready (Inspect) Visit Preview 💬 Add feedback Aug 1, 2025 11:52am
stack-docs ✅ Ready (Inspect) Visit Preview 💬 Add feedback Aug 1, 2025 11:52am

Copy link

recurseml bot commented Jul 23, 2025

😱 Found 4 issues. Time to roll up your sleeves! 😱

🗒️ View all ignored comments in this repo
  • The constraint 'TokenStoreType extends string' is too restrictive. It should likely be 'TokenStoreType extends string | object' to match the condition check in line 113 where TokenStoreType is checked against {}
  • Return type mismatch - the interface declares useUsers() returning ServerUser[] but the Team interface that this extends declares useUsers() returning TeamUser[]
  • There is a syntax error in the super constructor call due to the ellipsis operator used incorrectly. Objects aren't being merged correctly. This syntax usage can lead to runtime errors when trying to pass the merged object to 'super()'. Verify that the intended alterations to the object occur before or outside of the super() call if needed.
  • Throwing an error when no active span is found is too aggressive. The log function should gracefully fallback to console.log or another logging mechanism when there's no active span, since not all execution contexts will have an active span. This makes the code less resilient and could break functionality in non-traced environments.

📚 Relevant Docs

  • Function sets backendContext with a new configuration but doesn't pass 'defaultProjectKeys'. Since defaultProjectKeys is required in the type definition and cannot be updated (throws error if tried to set), this will cause a type error.
  • The schema is using array syntax for pick() which is incorrect for Yup schemas. The pick() method in Yup expects individual arguments, not an array. Should be changed to: emailConfigSchema.pick('type', 'host', 'port', 'username', 'sender_name', 'sender_email')

📚 Relevant Docs

  • Creating a refresh token with current timestamp as expiration means it expires immediately. Should set a future date for token expiration.
  • The 'tools' object is initialized as an empty object, even though 'tools' is presumably expected to contain tool definitions. This could cause the server capabilities to lack necessary tool configurations, thus potentially impacting functionalities that depend on certain tool setups.

📚 Relevant Docs

  • 'STACK_SECRET_SERVER_KEY' is potentially being included in every request header without checking its existence again here. Although it's checked during initialization, this could lead to security issues as it's exposed in all communications where the header is logged or captured.

📚 Relevant Docs

  • When adding 'use client' directive at the beginning, it doesn't check if file.text already contains the 'use client' directive. This could lead to duplicate 'use client' directives if the file already has one.

📚 Relevant Docs

⚠️ Only 5 files were analyzed due to processing limits.

Need help? Join our Discord for support!
https://discord.gg/qEjHQk64Z9

@fomalhautb fomalhautb marked this pull request as ready for review July 23, 2025 23:46
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

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

Greptile Summary

I cannot provide a technical review for this pull request because no changed files were provided in the context. The PR is titled "OAuth provider client and dashboard" which suggests it involves OAuth provider functionality and dashboard components, but without access to the actual code changes, I cannot analyze what specific modifications were made, how they integrate with the existing codebase, or their technical implementation.

To provide an accurate review, I would need to see the modified files, including any changes to OAuth provider configurations, dashboard components, API endpoints, database schemas, or related functionality.

Confidence score: 0/5

• Cannot assess safety as no code changes are visible
• Score reflects inability to review due to missing file contents rather than code quality issues
• All files would need attention since none are visible for review

No files reviewed, no comments

Edit Code Review Bot Settings | Greptile

@fomalhautb fomalhautb assigned N2D4 and unassigned fomalhautb Jul 24, 2025
@fomalhautb fomalhautb requested a review from N2D4 July 24, 2025 00:10
Copy link
Contributor

coderabbitai bot commented Jul 26, 2025

Walkthrough

The changes introduce comprehensive support for managing OAuth providers across backend, shared interfaces, server and client app implementations, and dashboard UI. This includes CRUD API enhancements, schema updates, new TypeScript types, caching and hook-based access patterns, UI dialogs for management, and corresponding test and type updates.

Changes

Files / Areas Change Summary
apps/backend/src/app/api/latest/oauth-providers/crud.tsx Added provider_config_id to returned objects in CRUD handlers for OAuth providers.
apps/e2e/tests/backend/endpoints/api/v1/oauth-providers.test.ts Updated test snapshots to expect provider_config_id in OAuth provider responses.
apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx Added OAuth provider management section: dialogs, table UI, CRUD actions, validation, and error handling for user detail page.
packages/stack-shared/src/interface/client-interface.ts
.../server-interface.ts
Refactored OAuth provider CRUD methods to use shared types, updated signatures, added update method, and removed conditional request logic.
packages/stack-shared/src/interface/crud/oauth-providers.ts
.../schema-fields.ts
Added provider_config_id field and schema for OAuth providers; updated client read schema accordingly.
packages/template/src/lib/stack-app/apps/implementations/client-app-impl.ts Added caching, methods, and hooks for OAuth provider management in client app implementation.
packages/template/src/lib/stack-app/apps/implementations/server-app-impl.ts Added caching, methods, and hooks for OAuth provider management in server app implementation; added create method and error handling.
packages/template/src/lib/stack-app/apps/interfaces/server-app.ts Extended server app interface with createOAuthProvider method and related types.
packages/template/src/lib/stack-app/index.ts Exported new types: OAuthProvider and ServerOAuthProvider.
packages/template/src/lib/stack-app/users/index.ts Added OAuthProvider and ServerOAuthProvider types; extended user types with OAuth provider management methods and hooks.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant DashboardUI
    participant ClientApp
    participant BackendAPI
    participant ServerApp

    User->>DashboardUI: Open user detail page
    DashboardUI->>ClientApp: Fetch user & OAuth providers
    ClientApp->>BackendAPI: listOAuthProviders(userId)
    BackendAPI->>ServerApp: listServerOAuthProviders(userId)
    ServerApp-->>BackendAPI: OAuth providers list
    BackendAPI-->>ClientApp: OAuth providers list
    ClientApp-->>DashboardUI: OAuth providers list
    DashboardUI->>User: Display OAuth providers table

    User->>DashboardUI: Add/Edit/Delete OAuth provider
    DashboardUI->>ClientApp: create/update/delete OAuth provider
    ClientApp->>BackendAPI: Corresponding CRUD API call
    BackendAPI->>ServerApp: Corresponding server CRUD method
    ServerApp-->>BackendAPI: Result or error
    BackendAPI-->>ClientApp: Result or error
    ClientApp-->>DashboardUI: Update UI / Show toast
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~40 minutes

Poem

🐇
OAuth bunnies hop with glee,
New providers for all to see!
Dialogs pop and tables grow,
Caches fresh with every flow.
With CRUD and hooks, the stack’s complete—
Hopping forward, code so neat!
🥕

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.


📜 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 52a49f4 and e6d6f88.

📒 Files selected for processing (1)
  • apps/backend/src/app/api/latest/oauth-providers/crud.tsx (4 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/backend/src/app/api/latest/oauth-providers/crud.tsx
⏰ 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). (9)
  • GitHub Check: restart-dev-and-test
  • GitHub Check: docker
  • GitHub Check: all-good
  • GitHub Check: build (22.x)
  • GitHub Check: docker
  • GitHub Check: lint_and_build (latest)
  • GitHub Check: build (22.x)
  • GitHub Check: setup-tests
  • GitHub Check: Security Check
✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch oauth-providers-dashboard

🪧 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 generate unit tests to generate unit tests for 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.

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: 0

🔭 Outside diff range comments (2)
packages/stack-shared/src/interface/client-interface.ts (1)

739-739: Fix inconsistent return type in deleteOAuthProvider

The method signature indicates it returns Promise<void> but the implementation returns await response.json(). For a delete operation, it should either return void or the method signature should be updated to match the actual return type.

Apply this fix to make the implementation consistent with the signature:

-    return await response.json();
+    // Delete operations typically don't return data

Or update the method signature if a response is actually needed:

- ): Promise<void> {
+ ): Promise<any> {
packages/stack-shared/src/interface/server-interface.ts (1)

750-762: Fix return statement inconsistency!

The method signature indicates Promise<void> but line 761 returns await response.json(). For a void return type, the implementation should not return any value.

Apply this fix:

  async deleteServerOAuthProvider(
    userId: string,
    providerId: string,
  ): Promise<void> {
-   const response = await this.sendServerRequest(
+   await this.sendServerRequest(
      urlString`/oauth-providers/${userId}/${providerId}`,
      {
        method: "DELETE",
      },
      null,
    );
-   return await response.json();
  }
♻️ Duplicate comments (1)
packages/template/src/lib/stack-app/apps/implementations/client-app-impl.ts (1)

828-838: Violation of API naming convention: Using camelCase parameters in API interfaces

According to the naming convention rule, parameters used in API communication should use snake_case. The parameters 'allowSignIn' and 'allowConnectedAccounts' should be 'allow_sign_in' and 'allow_connected_accounts' for consistency with HTTP API naming conventions.

🧹 Nitpick comments (3)
packages/template/src/lib/stack-app/index.ts (1)

54-58: Minor nitpick: Unnecessary export reordering

The reordering of permission-related exports doesn't appear to serve a functional purpose and could make the git history less clear.

apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx (2)

1113-1113: Use template literal for compound key

For better readability and consistency with modern JavaScript practices.

-                <TableRow key={provider.id + '-' + provider.accountId}>
+                <TableRow key={`${provider.id}-${provider.accountId}`}>

1231-1232: Replace empty div spacer with proper flex gap

The empty div appears to be used as a spacer. Consider using the parent's flex gap or adding a specific spacing class for better maintainability.

         <ContactChannelsSection user={user} />
         <OAuthProvidersSection user={user} />
-        <div />
         <MetadataSection user={user} />

If additional spacing is needed between OAuthProvidersSection and MetadataSection, consider adjusting the parent's gap-6 class or adding margin to the MetadataSection component.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 2334884 and f63e54e.

📒 Files selected for processing (12)
  • apps/backend/src/app/api/latest/oauth-providers/crud.tsx (4 hunks)
  • apps/dashboard/src/app/(main)/(protected)/projects/[projectId]/users/[userId]/page-client.tsx (3 hunks)
  • apps/e2e/tests/backend/endpoints/api/v1/oauth-providers.test.ts (11 hunks)
  • packages/stack-shared/src/interface/client-interface.ts (3 hunks)
  • packages/stack-shared/src/interface/crud/oauth-providers.ts (2 hunks)
  • packages/stack-shared/src/interface/server-interface.ts (5 hunks)
  • packages/stack-shared/src/schema-fields.ts (1 hunks)
  • packages/template/src/lib/stack-app/apps/implementations/client-app-impl.ts (5 hunks)
  • packages/template/src/lib/stack-app/apps/implementations/server-app-impl.ts (6 hunks)
  • packages/template/src/lib/stack-app/apps/interfaces/server-app.ts (2 hunks)
  • packages/template/src/lib/stack-app/index.ts (2 hunks)
  • packages/template/src/lib/stack-app/users/index.ts (3 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (4)
packages/stack-shared/src/interface/crud/oauth-providers.ts (1)
packages/stack-shared/src/schema-fields.ts (1)
  • oauthProviderProviderConfigIdSchema (504-504)
packages/stack-shared/src/interface/server-interface.ts (1)
packages/stack-shared/src/interface/crud/oauth-providers.ts (1)
  • OAuthProviderCrud (86-86)
packages/stack-shared/src/interface/client-interface.ts (3)
packages/stack-shared/src/sessions.ts (1)
  • InternalSession (51-212)
packages/stack-shared/src/interface/crud/oauth-providers.ts (1)
  • OAuthProviderCrud (86-86)
packages/stack-shared/src/utils/objects.tsx (1)
  • filterUndefined (368-370)
packages/template/src/lib/stack-app/apps/implementations/server-app-impl.ts (5)
packages/template/src/lib/stack-app/apps/implementations/common.ts (2)
  • createCache (22-27)
  • useAsyncCache (145-190)
packages/stack-shared/src/interface/crud/oauth-providers.ts (1)
  • OAuthProviderCrud (86-86)
packages/stack-shared/src/known-errors.tsx (2)
  • KnownErrors (1395-1397)
  • KnownErrors (1399-1508)
packages/stack-shared/src/utils/results.tsx (1)
  • error (36-41)
packages/template/src/lib/stack-app/users/index.ts (1)
  • ServerOAuthProvider (33-45)
⏰ 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). (9)
  • GitHub Check: all-good
  • GitHub Check: build (22.x)
  • GitHub Check: restart-dev-and-test
  • GitHub Check: lint_and_build (latest)
  • GitHub Check: build (22.x)
  • GitHub Check: setup-tests
  • GitHub Check: docker
  • GitHub Check: docker
  • GitHub Check: Security Check
🔇 Additional comments (24)
packages/stack-shared/src/schema-fields.ts (1)

504-504: Clean schema field addition

The new oauthProviderProviderConfigIdSchema follows the established patterns in this file with appropriate Yup validation, OpenAPI metadata, and clear documentation.

packages/stack-shared/src/interface/crud/oauth-providers.ts (1)

8-8: Schema integration is consistent across the stack

The addition of provider_config_id to both the import (line 8) and client read schema (line 20) is correct and consistent with the broader implementation. The backend CRUD handlers in apps/backend/src/app/api/latest/oauth-providers/crud.tsx return this field in all relevant operations (onCreate, onRead, onList, onUpdate), and the E2E tests validate its presence in API responses.

Also applies to: 20-20

apps/e2e/tests/backend/endpoints/api/v1/oauth-providers.test.ts (1)

49-49: Comprehensive test coverage for provider_config_id field

The test updates consistently validate the presence of provider_config_id across all OAuth provider CRUD operations (create, read, list, update). This ensures the new field is properly returned by the API in all scenarios and maintains test coverage for the enhanced OAuth provider functionality.

Also applies to: 93-93, 141-141, 405-405, 531-531, 541-541, 569-569, 597-597, 660-660, 683-683, 881-881

apps/backend/src/app/api/latest/oauth-providers/crud.tsx (1)

157-157: Clean implementation of provider_config_id in CRUD responses

The addition of provider_config_id to all OAuth provider CRUD operation responses is well-implemented:

  • Read/List/Update operations correctly use the existing oauthAccount.configOAuthProviderId
  • Create operation appropriately uses the input data.provider_config_id
  • Consistent field structure across all operations ensures API coherence

Also applies to: 197-197, 308-308, 404-404

packages/template/src/lib/stack-app/index.ts (1)

99-100: Appropriate addition of OAuth provider type exports

The new OAuthProvider and ServerOAuthProvider type exports correctly expose the OAuth provider functionality to consumers of the Stack template library, completing the OAuth provider management feature integration.

packages/template/src/lib/stack-app/apps/interfaces/server-app.ts (2)

1-2: LGTM: Import additions are appropriate

The new imports for KnownErrors, Result, and ServerOAuthProvider are correctly added and necessary for the new createOAuthProvider method.

Also applies to: 5-5


52-59: Well-designed OAuth provider creation method

The createOAuthProvider method follows established patterns in the interface with:

  • Comprehensive parameter set covering all necessary OAuth provider fields
  • Proper Result-based error handling with specific error type for account ID conflicts
  • Consistent async method signature
  • Appropriate return type using ServerOAuthProvider
packages/template/src/lib/stack-app/users/index.ts (3)

19-45: Well-structured OAuth provider type definitions

The OAuthProvider and ServerOAuthProvider types are properly designed with:

  • Appropriate readonly properties for immutable data
  • Consistent field naming and types across both variants
  • Logical difference in accountId optionality (optional for client, required for server)
  • Proper Result-based error handling in update methods with specific error types
  • Clean async method signatures for update and delete operations

252-256: Consistent OAuth provider methods in UserExtra

The new OAuth provider methods follow the established patterns in the codebase:

  • Proper React-like hook naming with use prefix
  • Consistent async/sync method pairing (listOAuthProviders/useOAuthProviders)
  • Appropriate null handling for single item access methods
  • Clean separation between list and individual item operations

351-355: Proper server-side OAuth provider methods

The ServerBaseUser OAuth provider methods correctly mirror the client-side methods while returning appropriate ServerOAuthProvider types:

  • Consistent method naming and signatures with UserExtra
  • Proper server type returns instead of client types
  • Maintains the established server vs client pattern throughout the codebase
  • Complete CRUD access for server-side OAuth provider management
packages/stack-shared/src/interface/client-interface.ts (3)

20-20: Necessary import addition

The OAuthProviderCrud import is properly added and required for the OAuth provider method type definitions.


677-677: Improved consistency in OAuth provider methods

The OAuth provider methods now consistently:

  • Require InternalSession parameter for proper authentication
  • Use sendClientRequest for uniform request handling
  • Follow established patterns with other authenticated methods in the interface

Also applies to: 713-713, 730-730


689-707: Well-typed OAuth provider update method

The updateOAuthProvider method properly uses OAuthProviderCrud['Client'] types for both input data and return value, ensuring type safety and consistency with the CRUD interface.

packages/template/src/lib/stack-app/apps/implementations/server-app-impl.ts (7)

4-4: LGTM!

The import for OAuthProviderCrud follows the established pattern and is properly organized with other CRUD imports.


28-28: Import looks good!

The addition of ServerOAuthProvider to the imports is consistent with the OAuth provider management feature being implemented.


158-162: Cache implementation follows established patterns!

The _serverOAuthProvidersCache is properly implemented using the standard cache pattern with correct typing and parameter handling.


233-269: Well-structured OAuth provider conversion method!

The _serverOAuthProviderFromCrud method correctly implements:

  • Proper mapping of all CRUD properties
  • Error handling for known errors using Result pattern
  • Cache refresh after mutations
  • Type-safe async methods matching the ServerOAuthProvider interface

602-624: OAuth provider user methods implemented correctly!

The implementation properly follows established patterns:

  • React hooks are appropriately platform-guarded
  • useMemo optimization for React hooks
  • Consistent list/get/use method patterns
  • Proper cache usage and data transformation

1025-1025: Cache refresh properly integrated!

Adding OAuth providers cache refresh to _refreshUsers ensures data consistency when user data is refreshed.


1029-1055: Robust OAuth provider creation method!

The createOAuthProvider implementation includes:

  • Comprehensive parameter validation through TypeScript types
  • Proper error handling for known errors using Result pattern
  • Cache refresh for data consistency
  • Correct parameter mapping to API snake_case format
packages/stack-shared/src/interface/server-interface.ts (4)

15-15: Import properly added!

The OAuthProviderCrud import follows the established pattern for CRUD type imports.


696-711: Type refactoring improves consistency!

The method now uses centralized CRUD types, which improves maintainability and type safety.


714-729: CRUD type updates are consistent!

The listServerOAuthProviders method properly uses the centralized CRUD types for its return value.


731-748: Update method types properly refactored!

The updateServerOAuthProvider method now uses centralized CRUD types for both parameters and return values.

Copy link
Contributor

@N2D4 N2D4 left a comment

Choose a reason for hiding this comment

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

Can you add some E2E tests for the client functions?

@N2D4 N2D4 assigned fomalhautb and unassigned N2D4 Jul 31, 2025
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.

2 participants