OAuth
OAuthManager, provider configuration, connection status, and OAuth events.
The SDK supports connecting third-party data providers via OAuth 2.0 flows using ASWebAuthenticationSession.
Setup
Configure OAuth before use:
sdk.configureOAuth(callbackURLScheme: "myapp")Then connect providers through BioSDKClient:
try await sdk.connectOAuthProvider(
"provider-slug",
xuserId: userId,
presentationContextProvider: self
)OAuthManager
Manages OAuth provider connections. Access via sdk.oauth (available after calling configureOAuth).
@MainActor
public final class OAuthManager: NSObject, ObservableObjectProperties
| Property | Type | Description |
|---|---|---|
callbackURLScheme | String | URL scheme for OAuth callbacks |
connectionStatuses | [String: OAuthConnectionStatus] | Status per provider slug (@Published) |
availableProviders | [OAuthProviderConfig] | Providers configured for the organization (@Published) |
Events
public var events: AnyPublisher<OAuthEvent, Never> { get }Connection Management
// Start an OAuth flow for a provider
public func connectProvider(
_ provider: String,
xuserId: String,
presentationContextProvider: ASWebAuthenticationPresentationContextProviding
) async throws
// Disconnect a provider
public func disconnectProvider(_ provider: String)
// Check if a provider is connected
public func isConnected(_ provider: String) -> BoolStatus Refresh
// Refresh connection statuses from the backend
public func refreshConnectionStatuses(
organizationId: Int,
xuserId: String
) async throws
// Refresh the list of available providers
public func refreshAvailableProviders() async throwsOAuthProvider
Represents a third-party data provider.
public struct OAuthProvider: Equatable, Hashable {
public let slug: String
public let displayName: String
public init(slug: String, displayName: String)
}Built-in Providers
Pre-configured OAuth provider integrations are available as part of the AnyBio Enterprise plan. Contact us to learn more about enabling third-party data provider connections for your organization.
OAuthConnectionStatus
Connection state for a provider.
public enum OAuthConnectionStatus: Equatable {
case notConnected
case connecting
case connected
case failed(Error)
}OAuthEvent
Events emitted during OAuth flows.
public enum OAuthEvent: Equatable {
case connectionStarted(provider: String)
case connectionSucceeded(provider: String)
case connectionFailed(provider: String, error: String)
case connectionCancelled(provider: String)
}Example:
sdk.oauth?.events.sink { event in
switch event {
case .connectionSucceeded(let provider):
print("\(provider) connected successfully")
case .connectionFailed(let provider, let error):
print("\(provider) failed: \(error)")
case .connectionCancelled(let provider):
print("\(provider) cancelled by user")
default:
break
}
}OAuthProviderConfig
Server-side provider configuration returned from the bootstrap API.
public struct OAuthProviderConfig: Codable, Equatable, Identifiable {
public let id: Int
public let organizationId: Int
public let providerConfigId: Int
public let clientId: String
public let enabled: Bool
public let providerSlug: String
public let providerName: String
public var asProvider: OAuthProvider { get }
}OAuthToken
Token information for a connected provider.
public struct OAuthToken: Codable, Equatable {
public let id: Int
public let oauthProviderId: Int
public let xuserId: String
public let tokenType: String?
public let expiresAt: String?
public let scope: String?
public let providerUserId: String?
public let providerUsername: String?
public let isActive: Bool
public let createdAt: String
public let updatedAt: String
public let lastSyncAt: String?
public let providerSlug: String
public let providerName: String
}OAuthError
Errors that can occur during OAuth operations.
public enum OAuthError: Error, LocalizedError {
case invalidURL
case apiError(String)
case authenticationSessionFailed(Error)
case userCancelled
case invalidResponse
case missingAuthorizationURL
case unauthorized
case providerNotFound(String)
case serverError(Int)
}| Case | Description |
|---|---|
.invalidURL | Malformed OAuth URL |
.apiError(String) | Backend API returned an error |
.authenticationSessionFailed(Error) | ASWebAuthenticationSession failed |
.userCancelled | User dismissed the auth dialog |
.invalidResponse | Unexpected response format |
.missingAuthorizationURL | No authorization URL returned |
.unauthorized | Authentication required |
.providerNotFound(String) | Provider slug not recognized |
.serverError(Int) | Backend returned an HTTP error |