AnyBio
API Reference

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, ObservableObject

Properties

PropertyTypeDescription
callbackURLSchemeStringURL 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) -> Bool

Status 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 throws

OAuthProvider

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)
}
CaseDescription
.invalidURLMalformed OAuth URL
.apiError(String)Backend API returned an error
.authenticationSessionFailed(Error)ASWebAuthenticationSession failed
.userCancelledUser dismissed the auth dialog
.invalidResponseUnexpected response format
.missingAuthorizationURLNo authorization URL returned
.unauthorizedAuthentication required
.providerNotFound(String)Provider slug not recognized
.serverError(Int)Backend returned an HTTP error

On this page