connect method
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!;
}