/* tslint:disable */
/* eslint-disable */
/**
 * AskNews API
 * AskNews API [![status](https://status.asknews.app/api/badge/2/status?style=for-the-badge)](https://status.asknews.app/status/prod)
 *
 * The version of the OpenAPI document: 0.24.66
 * Contact: contact@emergentmethods.ai
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


import * as runtime from '../runtime';
import type {
  AbcAPIErrorModel100,
  AbcAPIErrorModel101,
  AbcAPIErrorModel102,
  AbcAPIErrorModel103,
  AbcAPIErrorModel104,
  AbcAPIErrorModel105,
  AbcAPIErrorModel106,
  AbcAPIErrorModel107,
  AbcAPIErrorModel108,
  AbcAPIErrorModel61,
  AbcAPIErrorModel62,
  AbcAPIErrorModel63,
  AbcAPIErrorModel64,
  AbcAPIErrorModel65,
  AbcAPIErrorModel66,
  AbcAPIErrorModel67,
  AbcAPIErrorModel68,
  AbcAPIErrorModel69,
  AbcAPIErrorModel70,
  AbcAPIErrorModel71,
  AbcAPIErrorModel72,
  AbcAPIErrorModel73,
  AbcAPIErrorModel74,
  AbcAPIErrorModel75,
  AbcAPIErrorModel76,
  AbcAPIErrorModel77,
  AbcAPIErrorModel78,
  AbcAPIErrorModel79,
  AbcAPIErrorModel80,
  AbcAPIErrorModel81,
  AbcAPIErrorModel82,
  AbcAPIErrorModel83,
  AbcAPIErrorModel84,
  AbcAPIErrorModel85,
  AbcAPIErrorModel86,
  AbcAPIErrorModel87,
  AbcAPIErrorModel88,
  AbcAPIErrorModel89,
  AbcAPIErrorModel90,
  AbcAPIErrorModel91,
  AbcAPIErrorModel92,
  AbcAPIErrorModel93,
  AbcAPIErrorModel94,
  AbcAPIErrorModel95,
  AbcAPIErrorModel96,
  AbcAPIErrorModel97,
  AbcAPIErrorModel98,
  AbcAPIErrorModel99,
  AsknewsApiErrorsAPIErrorModel,
  CountResponse,
  DomainHitsSurfaceResponse,
  DomainHitsSurfaceTimeWindowResponse,
  DomainQueriesResponse,
  HitShareResponse,
  PaginatedResponseReadDomainResponse,
  ReadDomainResponse,
  TopNArticlesByHitsResponse,
  TopNArticlesForDomainResponse,
  TopNArticlesTimeseriesResponse,
  TopNDomainsByHitsResponse,
  UpdateDomainRequest,
  ValidationErrorModel,
} from '../models/index';
import {
    AbcAPIErrorModel100FromJSON,
    AbcAPIErrorModel100ToJSON,
    AbcAPIErrorModel101FromJSON,
    AbcAPIErrorModel101ToJSON,
    AbcAPIErrorModel102FromJSON,
    AbcAPIErrorModel102ToJSON,
    AbcAPIErrorModel103FromJSON,
    AbcAPIErrorModel103ToJSON,
    AbcAPIErrorModel104FromJSON,
    AbcAPIErrorModel104ToJSON,
    AbcAPIErrorModel105FromJSON,
    AbcAPIErrorModel105ToJSON,
    AbcAPIErrorModel106FromJSON,
    AbcAPIErrorModel106ToJSON,
    AbcAPIErrorModel107FromJSON,
    AbcAPIErrorModel107ToJSON,
    AbcAPIErrorModel108FromJSON,
    AbcAPIErrorModel108ToJSON,
    AbcAPIErrorModel61FromJSON,
    AbcAPIErrorModel61ToJSON,
    AbcAPIErrorModel62FromJSON,
    AbcAPIErrorModel62ToJSON,
    AbcAPIErrorModel63FromJSON,
    AbcAPIErrorModel63ToJSON,
    AbcAPIErrorModel64FromJSON,
    AbcAPIErrorModel64ToJSON,
    AbcAPIErrorModel65FromJSON,
    AbcAPIErrorModel65ToJSON,
    AbcAPIErrorModel66FromJSON,
    AbcAPIErrorModel66ToJSON,
    AbcAPIErrorModel67FromJSON,
    AbcAPIErrorModel67ToJSON,
    AbcAPIErrorModel68FromJSON,
    AbcAPIErrorModel68ToJSON,
    AbcAPIErrorModel69FromJSON,
    AbcAPIErrorModel69ToJSON,
    AbcAPIErrorModel70FromJSON,
    AbcAPIErrorModel70ToJSON,
    AbcAPIErrorModel71FromJSON,
    AbcAPIErrorModel71ToJSON,
    AbcAPIErrorModel72FromJSON,
    AbcAPIErrorModel72ToJSON,
    AbcAPIErrorModel73FromJSON,
    AbcAPIErrorModel73ToJSON,
    AbcAPIErrorModel74FromJSON,
    AbcAPIErrorModel74ToJSON,
    AbcAPIErrorModel75FromJSON,
    AbcAPIErrorModel75ToJSON,
    AbcAPIErrorModel76FromJSON,
    AbcAPIErrorModel76ToJSON,
    AbcAPIErrorModel77FromJSON,
    AbcAPIErrorModel77ToJSON,
    AbcAPIErrorModel78FromJSON,
    AbcAPIErrorModel78ToJSON,
    AbcAPIErrorModel79FromJSON,
    AbcAPIErrorModel79ToJSON,
    AbcAPIErrorModel80FromJSON,
    AbcAPIErrorModel80ToJSON,
    AbcAPIErrorModel81FromJSON,
    AbcAPIErrorModel81ToJSON,
    AbcAPIErrorModel82FromJSON,
    AbcAPIErrorModel82ToJSON,
    AbcAPIErrorModel83FromJSON,
    AbcAPIErrorModel83ToJSON,
    AbcAPIErrorModel84FromJSON,
    AbcAPIErrorModel84ToJSON,
    AbcAPIErrorModel85FromJSON,
    AbcAPIErrorModel85ToJSON,
    AbcAPIErrorModel86FromJSON,
    AbcAPIErrorModel86ToJSON,
    AbcAPIErrorModel87FromJSON,
    AbcAPIErrorModel87ToJSON,
    AbcAPIErrorModel88FromJSON,
    AbcAPIErrorModel88ToJSON,
    AbcAPIErrorModel89FromJSON,
    AbcAPIErrorModel89ToJSON,
    AbcAPIErrorModel90FromJSON,
    AbcAPIErrorModel90ToJSON,
    AbcAPIErrorModel91FromJSON,
    AbcAPIErrorModel91ToJSON,
    AbcAPIErrorModel92FromJSON,
    AbcAPIErrorModel92ToJSON,
    AbcAPIErrorModel93FromJSON,
    AbcAPIErrorModel93ToJSON,
    AbcAPIErrorModel94FromJSON,
    AbcAPIErrorModel94ToJSON,
    AbcAPIErrorModel95FromJSON,
    AbcAPIErrorModel95ToJSON,
    AbcAPIErrorModel96FromJSON,
    AbcAPIErrorModel96ToJSON,
    AbcAPIErrorModel97FromJSON,
    AbcAPIErrorModel97ToJSON,
    AbcAPIErrorModel98FromJSON,
    AbcAPIErrorModel98ToJSON,
    AbcAPIErrorModel99FromJSON,
    AbcAPIErrorModel99ToJSON,
    AsknewsApiErrorsAPIErrorModelFromJSON,
    AsknewsApiErrorsAPIErrorModelToJSON,
    CountResponseFromJSON,
    CountResponseToJSON,
    DomainHitsSurfaceResponseFromJSON,
    DomainHitsSurfaceResponseToJSON,
    DomainHitsSurfaceTimeWindowResponseFromJSON,
    DomainHitsSurfaceTimeWindowResponseToJSON,
    DomainQueriesResponseFromJSON,
    DomainQueriesResponseToJSON,
    HitShareResponseFromJSON,
    HitShareResponseToJSON,
    PaginatedResponseReadDomainResponseFromJSON,
    PaginatedResponseReadDomainResponseToJSON,
    ReadDomainResponseFromJSON,
    ReadDomainResponseToJSON,
    TopNArticlesByHitsResponseFromJSON,
    TopNArticlesByHitsResponseToJSON,
    TopNArticlesForDomainResponseFromJSON,
    TopNArticlesForDomainResponseToJSON,
    TopNArticlesTimeseriesResponseFromJSON,
    TopNArticlesTimeseriesResponseToJSON,
    TopNDomainsByHitsResponseFromJSON,
    TopNDomainsByHitsResponseToJSON,
    UpdateDomainRequestFromJSON,
    UpdateDomainRequestToJSON,
    ValidationErrorModelFromJSON,
    ValidationErrorModelToJSON,
} from '../models/index';

export interface DomainHitShareRequest {
    domainNames: Array<string>;
    startDate?: number;
    endDate?: number;
    isPublisher?: boolean;
}

export interface FindDomainsRequest {
    page?: number;
    perPage?: number;
    names?: Array<string>;
    isTollbit?: boolean;
    publisher?: boolean;
}

export interface GetArticleHitsRequest {
    domainName: string;
    startDate?: number;
    endDate?: number;
}

export interface GetDomainRequest {
    name: string;
}

export interface GetDomainHitsSurfaceRequest {
    domainNames: Array<string>;
    year: number;
    month: number;
}

export interface GetDomainHitsSurfaceTimewindowRequest {
    domainNames: Array<string>;
    year: number;
    month: number;
}

export interface GetDomainQueriesRequest {
    domainNames: Array<string>;
    limit?: number;
    startDate?: number;
    endDate?: number;
}

export interface TopNArticlesByHitsRequest {
    limit?: number;
    startDate?: number;
    endDate?: number;
    domainNames?: Array<string>;
}

export interface TopNArticlesForDomainTimeseriesRequest {
    domainName: string;
    limit?: number;
    startDate?: number;
    endDate?: number;
}

export interface TopNArticlesForDomainsRequest {
    domainNames: Array<string>;
    limit?: number;
    startDate?: number;
    endDate?: number;
}

export interface TopNDomainsByHitsRequest {
    limit?: number;
    startDate?: number;
    endDate?: number;
    names?: Array<string>;
}

export interface UpdateDomainOperationRequest {
    name: string;
    updateDomainRequest: UpdateDomainRequest;
}

/**
 * 
 */
export class DistributionApi extends runtime.BaseAPI {

    /**
     * Get the hit share for a list of domains in a time period.
     * Get the hit share for a list of domains in a time period
     */
    async domainHitShareRaw(requestParameters: DomainHitShareRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<HitShareResponse> > {
        if (requestParameters['domainNames'] == null) {
            throw new runtime.RequiredError(
                'domainNames',
                'Required parameter "domainNames" was null or undefined when calling domainHitShare().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['domainNames'] != null) {
            queryParameters['domain_names'] = requestParameters['domainNames'];
        }

        if (requestParameters['startDate'] != null) {
            queryParameters['start_date'] = requestParameters['startDate'];
        }

        if (requestParameters['endDate'] != null) {
            queryParameters['end_date'] = requestParameters['endDate'];
        }

        if (requestParameters['isPublisher'] != null) {
            queryParameters['is_publisher'] = requestParameters['isPublisher'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/v1/distribution/stats/hit_share`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);


        return new runtime.JSONApiResponse(response, (jsonValue) => HitShareResponseFromJSON(jsonValue));
    }

    /**
     * Get the hit share for a list of domains in a time period.
     * Get the hit share for a list of domains in a time period
     */
    async domainHitShare(requestParameters: DomainHitShareRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<HitShareResponse> {
        const response = await this.domainHitShareRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Find domains with optional filters.
     * Find domains
     */
    async findDomainsRaw(requestParameters: FindDomainsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<PaginatedResponseReadDomainResponse> > {
        const queryParameters: any = {};

        if (requestParameters['page'] != null) {
            queryParameters['page'] = requestParameters['page'];
        }

        if (requestParameters['perPage'] != null) {
            queryParameters['per_page'] = requestParameters['perPage'];
        }

        if (requestParameters['names'] != null) {
            queryParameters['names'] = requestParameters['names'];
        }

        if (requestParameters['isTollbit'] != null) {
            queryParameters['is_tollbit'] = requestParameters['isTollbit'];
        }

        if (requestParameters['publisher'] != null) {
            queryParameters['publisher'] = requestParameters['publisher'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/v1/distribution/domains`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);


        return new runtime.JSONApiResponse(response, (jsonValue) => PaginatedResponseReadDomainResponseFromJSON(jsonValue));
    }

    /**
     * Find domains with optional filters.
     * Find domains
     */
    async findDomains(requestParameters: FindDomainsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<PaginatedResponseReadDomainResponse> {
        const response = await this.findDomainsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get the number of hits for articles in a specific domain.
     * Get article hits
     */
    async getArticleHitsRaw(requestParameters: GetArticleHitsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<CountResponse> > {
        if (requestParameters['domainName'] == null) {
            throw new runtime.RequiredError(
                'domainName',
                'Required parameter "domainName" was null or undefined when calling getArticleHits().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['domainName'] != null) {
            queryParameters['domain_name'] = requestParameters['domainName'];
        }

        if (requestParameters['startDate'] != null) {
            queryParameters['start_date'] = requestParameters['startDate'];
        }

        if (requestParameters['endDate'] != null) {
            queryParameters['end_date'] = requestParameters['endDate'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/v1/distribution/stats/count`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);


        return new runtime.JSONApiResponse(response, (jsonValue) => CountResponseFromJSON(jsonValue));
    }

    /**
     * Get the number of hits for articles in a specific domain.
     * Get article hits
     */
    async getArticleHits(requestParameters: GetArticleHitsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<CountResponse> {
        const response = await this.getArticleHitsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get a domain.
     * Get a domain by name
     */
    async getDomainRaw(requestParameters: GetDomainRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ReadDomainResponse> > {
        if (requestParameters['name'] == null) {
            throw new runtime.RequiredError(
                'name',
                'Required parameter "name" was null or undefined when calling getDomain().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/v1/distribution/domains/{name}`.replace(`{${"name"}}`, encodeURIComponent(String(requestParameters['name']))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);


        return new runtime.JSONApiResponse(response, (jsonValue) => ReadDomainResponseFromJSON(jsonValue));
    }

    /**
     * Get a domain.
     * Get a domain by name
     */
    async getDomain(requestParameters: GetDomainRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ReadDomainResponse> {
        const response = await this.getDomainRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get total hits and surfaced articles for domains.
     * Get total hits and surfaced articles for domains
     */
    async getDomainHitsSurfaceRaw(requestParameters: GetDomainHitsSurfaceRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<DomainHitsSurfaceResponse> > {
        if (requestParameters['domainNames'] == null) {
            throw new runtime.RequiredError(
                'domainNames',
                'Required parameter "domainNames" was null or undefined when calling getDomainHitsSurface().'
            );
        }

        if (requestParameters['year'] == null) {
            throw new runtime.RequiredError(
                'year',
                'Required parameter "year" was null or undefined when calling getDomainHitsSurface().'
            );
        }

        if (requestParameters['month'] == null) {
            throw new runtime.RequiredError(
                'month',
                'Required parameter "month" was null or undefined when calling getDomainHitsSurface().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['domainNames'] != null) {
            queryParameters['domain_names'] = requestParameters['domainNames'];
        }

        if (requestParameters['year'] != null) {
            queryParameters['year'] = requestParameters['year'];
        }

        if (requestParameters['month'] != null) {
            queryParameters['month'] = requestParameters['month'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/v1/distribution/articles/domain_hits_surface`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);


        return new runtime.JSONApiResponse(response, (jsonValue) => DomainHitsSurfaceResponseFromJSON(jsonValue));
    }

    /**
     * Get total hits and surfaced articles for domains.
     * Get total hits and surfaced articles for domains
     */
    async getDomainHitsSurface(requestParameters: GetDomainHitsSurfaceRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<DomainHitsSurfaceResponse> {
        const response = await this.getDomainHitsSurfaceRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get hits and surfaced articles per day for domains.
     * Get hits and surfaced articles per day for domains
     */
    async getDomainHitsSurfaceTimewindowRaw(requestParameters: GetDomainHitsSurfaceTimewindowRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<DomainHitsSurfaceTimeWindowResponse> > {
        if (requestParameters['domainNames'] == null) {
            throw new runtime.RequiredError(
                'domainNames',
                'Required parameter "domainNames" was null or undefined when calling getDomainHitsSurfaceTimewindow().'
            );
        }

        if (requestParameters['year'] == null) {
            throw new runtime.RequiredError(
                'year',
                'Required parameter "year" was null or undefined when calling getDomainHitsSurfaceTimewindow().'
            );
        }

        if (requestParameters['month'] == null) {
            throw new runtime.RequiredError(
                'month',
                'Required parameter "month" was null or undefined when calling getDomainHitsSurfaceTimewindow().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['domainNames'] != null) {
            queryParameters['domain_names'] = requestParameters['domainNames'];
        }

        if (requestParameters['year'] != null) {
            queryParameters['year'] = requestParameters['year'];
        }

        if (requestParameters['month'] != null) {
            queryParameters['month'] = requestParameters['month'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/v1/distribution/articles/domain_hits_surface_timewindow`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);


        return new runtime.JSONApiResponse(response, (jsonValue) => DomainHitsSurfaceTimeWindowResponseFromJSON(jsonValue));
    }

    /**
     * Get hits and surfaced articles per day for domains.
     * Get hits and surfaced articles per day for domains
     */
    async getDomainHitsSurfaceTimewindow(requestParameters: GetDomainHitsSurfaceTimewindowRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<DomainHitsSurfaceTimeWindowResponse> {
        const response = await this.getDomainHitsSurfaceTimewindowRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get article hits.
     * Get queries that surfaced domain articles
     */
    async getDomainQueriesRaw(requestParameters: GetDomainQueriesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<DomainQueriesResponse> > {
        if (requestParameters['domainNames'] == null) {
            throw new runtime.RequiredError(
                'domainNames',
                'Required parameter "domainNames" was null or undefined when calling getDomainQueries().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['domainNames'] != null) {
            queryParameters['domain_names'] = requestParameters['domainNames'];
        }

        if (requestParameters['limit'] != null) {
            queryParameters['limit'] = requestParameters['limit'];
        }

        if (requestParameters['startDate'] != null) {
            queryParameters['start_date'] = requestParameters['startDate'];
        }

        if (requestParameters['endDate'] != null) {
            queryParameters['end_date'] = requestParameters['endDate'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/v1/distribution/articles/domain_queries`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);


        return new runtime.JSONApiResponse(response, (jsonValue) => DomainQueriesResponseFromJSON(jsonValue));
    }

    /**
     * Get article hits.
     * Get queries that surfaced domain articles
     */
    async getDomainQueries(requestParameters: GetDomainQueriesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<DomainQueriesResponse> {
        const response = await this.getDomainQueriesRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get the top N articles by hits.
     * Get the top N articles by hits
     */
    async topNArticlesByHitsRaw(requestParameters: TopNArticlesByHitsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<TopNArticlesByHitsResponse> > {
        const queryParameters: any = {};

        if (requestParameters['limit'] != null) {
            queryParameters['limit'] = requestParameters['limit'];
        }

        if (requestParameters['startDate'] != null) {
            queryParameters['start_date'] = requestParameters['startDate'];
        }

        if (requestParameters['endDate'] != null) {
            queryParameters['end_date'] = requestParameters['endDate'];
        }

        if (requestParameters['domainNames'] != null) {
            queryParameters['domain_names'] = requestParameters['domainNames'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/v1/distribution/articles/top_n`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);


        return new runtime.JSONApiResponse(response, (jsonValue) => TopNArticlesByHitsResponseFromJSON(jsonValue));
    }

    /**
     * Get the top N articles by hits.
     * Get the top N articles by hits
     */
    async topNArticlesByHits(requestParameters: TopNArticlesByHitsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<TopNArticlesByHitsResponse> {
        const response = await this.topNArticlesByHitsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get the top N domain articles by hits with daily breakdown.
     * Get the top N articles by hits for domain with daily breakdown
     */
    async topNArticlesForDomainTimeseriesRaw(requestParameters: TopNArticlesForDomainTimeseriesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<TopNArticlesTimeseriesResponse> > {
        if (requestParameters['domainName'] == null) {
            throw new runtime.RequiredError(
                'domainName',
                'Required parameter "domainName" was null or undefined when calling topNArticlesForDomainTimeseries().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['domainName'] != null) {
            queryParameters['domain_name'] = requestParameters['domainName'];
        }

        if (requestParameters['limit'] != null) {
            queryParameters['limit'] = requestParameters['limit'];
        }

        if (requestParameters['startDate'] != null) {
            queryParameters['start_date'] = requestParameters['startDate'];
        }

        if (requestParameters['endDate'] != null) {
            queryParameters['end_date'] = requestParameters['endDate'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/v1/distribution/articles/top_n_for_domain_timeseries`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);


        return new runtime.JSONApiResponse(response, (jsonValue) => TopNArticlesTimeseriesResponseFromJSON(jsonValue));
    }

    /**
     * Get the top N domain articles by hits with daily breakdown.
     * Get the top N articles by hits for domain with daily breakdown
     */
    async topNArticlesForDomainTimeseries(requestParameters: TopNArticlesForDomainTimeseriesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<TopNArticlesTimeseriesResponse> {
        const response = await this.topNArticlesForDomainTimeseriesRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get the top N domain articles by hits.
     * Get the top N articles by hits for domains
     */
    async topNArticlesForDomainsRaw(requestParameters: TopNArticlesForDomainsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<TopNArticlesForDomainResponse> > {
        if (requestParameters['domainNames'] == null) {
            throw new runtime.RequiredError(
                'domainNames',
                'Required parameter "domainNames" was null or undefined when calling topNArticlesForDomains().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['domainNames'] != null) {
            queryParameters['domain_names'] = requestParameters['domainNames'];
        }

        if (requestParameters['limit'] != null) {
            queryParameters['limit'] = requestParameters['limit'];
        }

        if (requestParameters['startDate'] != null) {
            queryParameters['start_date'] = requestParameters['startDate'];
        }

        if (requestParameters['endDate'] != null) {
            queryParameters['end_date'] = requestParameters['endDate'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/v1/distribution/articles/top_n_for_domains`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);


        return new runtime.JSONApiResponse(response, (jsonValue) => TopNArticlesForDomainResponseFromJSON(jsonValue));
    }

    /**
     * Get the top N domain articles by hits.
     * Get the top N articles by hits for domains
     */
    async topNArticlesForDomains(requestParameters: TopNArticlesForDomainsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<TopNArticlesForDomainResponse> {
        const response = await this.topNArticlesForDomainsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get the top N domains by hits.
     * Get the top N domains by hits
     */
    async topNDomainsByHitsRaw(requestParameters: TopNDomainsByHitsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<TopNDomainsByHitsResponse> > {
        const queryParameters: any = {};

        if (requestParameters['limit'] != null) {
            queryParameters['limit'] = requestParameters['limit'];
        }

        if (requestParameters['startDate'] != null) {
            queryParameters['start_date'] = requestParameters['startDate'];
        }

        if (requestParameters['endDate'] != null) {
            queryParameters['end_date'] = requestParameters['endDate'];
        }

        if (requestParameters['names'] != null) {
            queryParameters['names'] = requestParameters['names'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        const response = await this.request({
            path: `/v1/distribution/domains/top_n`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);


        return new runtime.JSONApiResponse(response, (jsonValue) => TopNDomainsByHitsResponseFromJSON(jsonValue));
    }

    /**
     * Get the top N domains by hits.
     * Get the top N domains by hits
     */
    async topNDomainsByHits(requestParameters: TopNDomainsByHitsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<TopNDomainsByHitsResponse> {
        const response = await this.topNDomainsByHitsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Update an existing domain.
     * Update an existing domain
     */
    async updateDomainRaw(requestParameters: UpdateDomainOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ReadDomainResponse>  | runtime.StreamApiResponse> {
        if (requestParameters['name'] == null) {
            throw new runtime.RequiredError(
                'name',
                'Required parameter "name" was null or undefined when calling updateDomain().'
            );
        }

        if (requestParameters['updateDomainRequest'] == null) {
            throw new runtime.RequiredError(
                'updateDomainRequest',
                'Required parameter "updateDomainRequest" was null or undefined when calling updateDomain().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json';

        const response = await this.request({
            path: `/v1/distribution/domains/{name}`.replace(`{${"name"}}`, encodeURIComponent(String(requestParameters['name']))),
            method: 'PUT',
            headers: headerParameters,
            query: queryParameters,
            body: UpdateDomainRequestToJSON(requestParameters['updateDomainRequest']),
        }, initOverrides);

        if ('updateDomainRequest' in requestParameters && requestParameters['updateDomainRequest'] != null && 'stream' in requestParameters['updateDomainRequest'] && requestParameters['updateDomainRequest']['stream'] === true) {
            return new runtime.StreamApiResponse(response);
        }

        return new runtime.JSONApiResponse(response, (jsonValue) => ReadDomainResponseFromJSON(jsonValue));
    }

    /**
     * Update an existing domain.
     * Update an existing domain
     */
    async updateDomain(requestParameters: UpdateDomainOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ReadDomainResponse | ReadableStream<any>> {
        const response = await this.updateDomainRaw(requestParameters, initOverrides);
        return await response.value();
    }

}
