connect method

Future<Principal> connect({
  1. required String hubUri,
  2. required String principal,
  3. required String token,
})

Connects to hubUri and authenticates as principal with token.

hubUri may omit the scheme (defaults to wss://). Throws an AppError on failure; the client is torn down so the caller can retry cleanly.

Implementation

Future<Principal> connect({
  required String hubUri,
  required String principal,
  required String token,
}) async {
  final uri = normalizeHubUri(hubUri);
  _intentionalClose = false;
  final client = ClientRuntime(
    ClientConfig(
      hubUri: uri,
      credentials: TokenCredentialProvider(
        principal: principal,
        token: token,
      ),
      connectionFactory: connectionFactory,
      onDisconnected: _handleDisconnect,
    ),
  );
  try {
    await client.connect();
  } on Object catch (e) {
    await client.close();
    throw AppError.from(e);
  }
  _client = client;
  _principal = client.principal;
  _hubUri = uri;
  return client.principal!;
}