subscribeToolEvents method

Future<Stream<ToolLifecycleEventDto>> subscribeToolEvents({
  1. String? daemonApiKey,
  2. String? hostToken,
  3. bool snapshot = true,
})

GET /tools/events?snapshot=1

Implementation

Future<Stream<ToolLifecycleEventDto>> subscribeToolEvents({
  String? daemonApiKey,
  String? hostToken,
  bool snapshot = true,
}) => _guardApi(() async {
  if ((daemonApiKey == null || daemonApiKey.isEmpty) &&
      (hostToken == null || hostToken.isEmpty)) {
    throw ArgumentError('daemonApiKey or hostToken is required');
  }
  final sseStream = await toolSse.request(
    '/events',
    queryParameters: {'snapshot': snapshot ? '1' : '0'},
    method: 'GET',
    headers: {
      if (daemonApiKey != null && daemonApiKey.isNotEmpty)
        TOOL_API_KEY_HEADER: daemonApiKey,
      if (hostToken != null && hostToken.isNotEmpty)
        HOST_MANAGEMENT_TOKEN_HEADER: hostToken,
    },
  );

  return sseStream.transform(
    StreamTransformer<String, ToolLifecycleEventDto>.fromHandlers(
      handleData: (chunk, sink) {
        SseClient.parse(chunk, (event, data) {
          if (event == 'ready') return;
          if (event == ToolLifecycleEventType.SNAPSHOT ||
              event == ToolLifecycleEventType.READY ||
              event == ToolLifecycleEventType.DRAINING ||
              event == ToolLifecycleEventType.UNAVAILABLE ||
              event == ToolLifecycleEventType.REMOVED) {
            sink.add(ToolLifecycleEventDto.fromJson(data));
          }
        });
      },
    ),
  );
});