runCodeMieSsoCliFlow function
Runs the CodeMie SSO login: starts the callback server, opens (or prints) the organization's login URL, waits for the token, and decodes it into CodeMieSsoCredentials. Returns null on cancel/timeout/failure.
Implementation
Future<CodeMieSsoCredentials?> runCodeMieSsoCliFlow({
required String codeMieUrl,
required void Function(String) onStatus,
Future<bool> Function(String) openBrowserFn = openBrowser,
}) async {
final server = CodeMieSsoCallbackServer();
final port = await server.start();
final ssoUrl = buildCodeMieSsoUrl(codeMieUrl, port);
onStatus('listening for the CodeMie SSO callback on port $port');
if (await openBrowserFn(ssoUrl)) {
onStatus('browser opened; complete the CodeMie sign-in');
} else {
onStatus('could not open browser automatically');
onStatus('open this URL manually: $ssoUrl');
}
final token = await server.waitForToken();
if (token == null) {
onStatus('no SSO callback received (timeout or cancelled)');
return null;
}
try {
final cookies = decodeCodeMieSsoToken(token);
final credentials = CodeMieSsoCredentials(
cookies: cookies,
apiUrl: codeMieApiBase(codeMieUrl),
expiresAt: deriveCodeMieExpiresAt(cookies),
);
if (credentials.authToken.isEmpty) {
onStatus('CodeMie SSO callback carried no cookies');
return null;
}
onStatus('CodeMie authorized');
return credentials;
} on FormatException catch (error) {
onStatus('CodeMie SSO failed: ${error.message}');
return null;
}
}