settingsFor method

Future<JournifyAPISettings?> settingsFor(
  1. String writeKey
)

Implementation

Future<JournifyAPISettings?> settingsFor(String writeKey) async {
  final settingsURL = _url(
      _analytics.target!.state.configuration.state.cdnHost,
      "/$writeKey.json");

  final urlRequest = _configuredRequest(settingsURL, "GET");

  try {
    final response = await urlRequest.send();

    if (response.statusCode > 300) {
      reportInternalError(NetworkUnexpectedHTTPCode(response.statusCode),
          analytics: _analytics.target);
      return null;
    }

    // Read the response stream to bytes
    final data = await response.stream.toBytes();
    // Decode the bytes to a UTF-8 string
    final responseBody = utf8.decode(data);

    // Parse the JSON
    const decoder = JsonDecoder();
    final jsonMap = decoder.convert(responseBody) as Map<String, dynamic>;

    final settingsJournify = JournifySettingsResponse.fromJson(jsonMap);

    final settingsJournifyIntegrations =
        settingsJournify.syncs.fold<Map<String, dynamic>>(
      {},
      (acc, sync) => {...acc, sync['destination_app']: sync},
    );

    return JournifyAPISettings(settingsJournifyIntegrations);
  } catch (error) {
    reportInternalError(NetworkUnknown(error.toString()),
        analytics: _analytics.target);

    return null;
  }
}