getNetworkActivityFilteredRaw method

Future<Query$GetNetworkActivityFiltered$transfers?> getNetworkActivityFilteredRaw({
  1. int number = 20,
  2. String? cursor,
  3. required Input$TransferFilter whereFilter,
})

Raw GraphQL method for server-side filtered network activity

Implementation

Future<Query$GetNetworkActivityFiltered$transfers?>
getNetworkActivityFilteredRaw({
  int number = 20,
  String? cursor,
  required Input$TransferFilter whereFilter,
}) async {
  final variables = Variables$Query$GetNetworkActivityFiltered(
    first: number,
    after: cursor,
    filter: whereFilter,
  );
  final options = QueryOptions(
    document: documentNodeQueryGetNetworkActivityFiltered,
    variables: variables.toJson(),
    fetchPolicy: FetchPolicy.networkOnly,
  );

  try {
    final result = await query(options);
    if (result.hasException) {
      SquidClientManager.checkAndHandleSchemaError(result.exception);
      log.e(
        'Failed to get filtered network activity on ${Networks.squidEndpoint}: ${result.exception.toString()}',
      );
      return null;
    }
    if (result.data == null) {
      return null;
    }

    // Handle empty results where startCursor/endCursor are null (GraphQL type issue)
    final transfers = result.data!['transfers'] as Map<String, dynamic>?;
    final edges = transfers?['edges'] as List<dynamic>? ?? [];

    if (edges.isEmpty) {
      // Create empty response manually to avoid null cursor type casting issues
      return Query$GetNetworkActivityFiltered$transfers(
        edges: [],
        pageInfo: Query$GetNetworkActivityFiltered$transfers$pageInfo(
          startCursor: '',
          endCursor: '',
          hasNextPage: false,
        ),
      );
    }

    try {
      final parsedResult = Query$GetNetworkActivityFiltered.fromJson(
        result.data!,
      );
      return parsedResult.transfers;
    } catch (parseError) {
      rethrow;
    }
  } catch (e) {
    log.e('Failed to get filtered network activity on ${Networks.squidEndpoint}: $e');
    return null;
  }
}