func upload()

in Sources/Confidence/RemoteConfidenceClient.swift [35:97]


    func upload(events: [NetworkEvent]) async throws -> Bool {
        let timeString = Date.backport.nowISOString
        let request = PublishEventRequest(
            events: events.map { event in NetworkEvent(
                eventDefinition: "eventDefinitions/\(event.eventDefinition)",
                payload: event.payload,
                eventTime: event.eventTime)
            },
            clientSecret: options.credentials.getSecret(),
            sendTime: timeString,
            sdk: Sdk(id: metadata.name, version: metadata.version)
        )
        do {
            let result: HttpClientResult<PublishEventResponse> =
            try await self.httpClient.post(path: ":publish", data: request)
            switch result {
            case .success(let successData):
                let status = successData.response.statusCode
                let indecesWithError = successData.decodedData?.errors.map { error in
                    error.index
                } ?? []
                let successEventNames = events.enumerated()
                    // Filter only events in batch that have no error reported from backend
                    .filter { index, _ in
                        return !(indecesWithError.contains(index))
                    }
                    .map { _, event in
                        event.eventDefinition
                    }
                switch status {
                case 200:
                    // clean up in case of success
                    debugLogger?.logMessage(
                        message: "Event upload: HTTP status 200. Events: \(successEventNames.joined(separator: ","))",
                        isWarning: false
                    )
                    return true
                case 429:
                    // we shouldn't clean up for rate limiting
                    debugLogger?.logMessage(
                        message: "Event upload: HTTP status 429",
                        isWarning: true
                    )
                    return false
                case 400...499:
                    // if batch couldn't be processed, we should clean it up
                    debugLogger?.logMessage(
                        message: "Event upload: couldn't process batch",
                        isWarning: true
                    )
                    return true
                default:
                    debugLogger?.logMessage(
                        message: "Event upload error. Status code \(status)",
                        isWarning: true
                    )
                    return false
                }
            case .failure(let errorData):
                throw handleError(error: errorData)
            }
        }
    }