/// <inheritdoc />
        public async Task <Bucket> MergeBucketIds(Bucket bucket, HttpResponseMessage response, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            if (!response.Headers.TryGetValues(RateLimitBucketHeader, out var headerValues))
            {
                logger.LogWarning($"Response did not have {RateLimitBucketHeader} header.");
                return(bucket);
            }

            var remoteId = headerValues.First();

            if (bucket.RemoteId != null)
            {
                bucket.RemoteId = remoteId;
                return(bucket);
            }

            var existingBucket = await repository.FindByRemoteIdAndMajorParameters(remoteId, bucket.MajorParameters, cancellationToken);

            if (existingBucket == null)
            {
                bucket.RemoteId = remoteId;
                return(bucket);
            }

            await repository.Remove(bucket, cancellationToken);

            existingBucket.Endpoints |= bucket.Endpoints;
            return(existingBucket);
        }