/**
 * This file is autogenerated.
 *
 * Generated by scripts/line-bot-client-generator/main.mjs
 * Do not edit this file directly.
 */

import type { Readable } from "node:stream";

import type * as Types from "./types.js";

import type * as insight from "./insight/api.js";

import type * as liff from "./liff/api.js";

import type * as manageAudience from "./manage-audience/api.js";

import type * as messagingApi from "./messaging-api/api.js";

import type * as moduleOperation from "./module/api.js";

import type * as moduleAttach from "./module-attach/api.js";

import type * as shop from "./shop/api.js";

export interface LineBotClientDelegates {
  readonly insight: insight.InsightClient;
  readonly liff: liff.LiffClient;
  readonly manageAudience: manageAudience.ManageAudienceClient;
  readonly manageAudienceBlob: manageAudience.ManageAudienceBlobClient;
  readonly messagingApi: messagingApi.MessagingApiClient;
  readonly messagingApiBlob: messagingApi.MessagingApiBlobClient;
  readonly lineModule: moduleOperation.LineModuleClient;
  readonly lineModuleAttach: moduleAttach.LineModuleAttachClient;
  readonly shop: shop.ShopClient;
}

export abstract class LineBotClientBase {
  protected abstract readonly clients: LineBotClientDelegates;

  /**
   * Retrieves the demographic attributes for a LINE Official Account\'s friends.You can only retrieve information about friends for LINE Official Accounts created by users in Japan (JP), Thailand (TH), Taiwan (TW) and Indonesia (ID).
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-demographic"> Documentation</a>
   */
  public async getFriendsDemographics(): Promise<insight.GetFriendsDemographicsResponse> {
    return this.clients.insight.getFriendsDemographics();
  }

  /**
   * Retrieves the demographic attributes for a LINE Official Account\'s friends.You can only retrieve information about friends for LINE Official Accounts created by users in Japan (JP), Thailand (TH), Taiwan (TW) and Indonesia (ID). .
   * This method includes HttpInfo object to return additional information.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-demographic"> Documentation</a>
   */
  public async getFriendsDemographicsWithHttpInfo(): Promise<
    Types.ApiResponseType<insight.GetFriendsDemographicsResponse>
  > {
    return this.clients.insight.getFriendsDemographicsWithHttpInfo();
  }

  /**
   * Returns statistics about how users interact with narrowcast messages or broadcast messages sent from your LINE Official Account.
   * @summary Get user interaction statistics
   * @param requestId Request ID of a narrowcast message or broadcast message. Each Messaging API request has a request ID.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-message-event">Get user interaction statistics Documentation</a>
   */
  public async getMessageEvent(
    requestId: string,
  ): Promise<insight.GetMessageEventResponse> {
    return this.clients.insight.getMessageEvent(requestId);
  }

  /**
   * Returns statistics about how users interact with narrowcast messages or broadcast messages sent from your LINE Official Account. .
   * This method includes HttpInfo object to return additional information.
   * @summary Get user interaction statistics
   * @param requestId Request ID of a narrowcast message or broadcast message. Each Messaging API request has a request ID.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-message-event">Get user interaction statistics Documentation</a>
   */
  public async getMessageEventWithHttpInfo(
    requestId: string,
  ): Promise<Types.ApiResponseType<insight.GetMessageEventResponse>> {
    return this.clients.insight.getMessageEventWithHttpInfo(requestId);
  }

  /**
   * Returns the number of users who have added the LINE Official Account on or before a specified date.
   * @summary Get number of followers
   * @param date Date for which to retrieve the number of followers.  Format: yyyyMMdd (e.g. 20191231) Timezone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-followers">Get number of followers Documentation</a>
   */
  public async getNumberOfFollowers(
    date?: string,
  ): Promise<insight.GetNumberOfFollowersResponse> {
    return this.clients.insight.getNumberOfFollowers(date);
  }

  /**
   * Returns the number of users who have added the LINE Official Account on or before a specified date. .
   * This method includes HttpInfo object to return additional information.
   * @summary Get number of followers
   * @param date Date for which to retrieve the number of followers.  Format: yyyyMMdd (e.g. 20191231) Timezone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-followers">Get number of followers Documentation</a>
   */
  public async getNumberOfFollowersWithHttpInfo(
    date?: string,
  ): Promise<Types.ApiResponseType<insight.GetNumberOfFollowersResponse>> {
    return this.clients.insight.getNumberOfFollowersWithHttpInfo(date);
  }

  /**
   * Returns the number of messages sent from LINE Official Account on a specified day.
   * @summary Get number of message deliveries
   * @param date Date for which to retrieve number of sent messages. - Format: yyyyMMdd (e.g. 20191231) - Timezone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-delivery-messages">Get number of message deliveries Documentation</a>
   */
  public async getNumberOfMessageDeliveries(
    date: string,
  ): Promise<insight.GetNumberOfMessageDeliveriesResponse> {
    return this.clients.insight.getNumberOfMessageDeliveries(date);
  }

  /**
   * Returns the number of messages sent from LINE Official Account on a specified day. .
   * This method includes HttpInfo object to return additional information.
   * @summary Get number of message deliveries
   * @param date Date for which to retrieve number of sent messages. - Format: yyyyMMdd (e.g. 20191231) - Timezone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-delivery-messages">Get number of message deliveries Documentation</a>
   */
  public async getNumberOfMessageDeliveriesWithHttpInfo(
    date: string,
  ): Promise<
    Types.ApiResponseType<insight.GetNumberOfMessageDeliveriesResponse>
  > {
    return this.clients.insight.getNumberOfMessageDeliveriesWithHttpInfo(date);
  }

  /**
   * You can check the per-unit statistics of how users interact with push messages and multicast messages sent from your LINE Official Account.
   * @param customAggregationUnit Name of aggregation unit specified when sending the message. Case-sensitive. For example, `Promotion_a` and `Promotion_A` are regarded as different unit names.
   * @param from Start date of aggregation period.  Format: yyyyMMdd (e.g. 20210301) Time zone: UTC+9
   * @param to End date of aggregation period. The end date can be specified for up to 30 days later. For example, if the start date is 20210301, the latest end date is 20210331.  Format: yyyyMMdd (e.g. 20210301) Time zone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-statistics-per-unit"> Documentation</a>
   */
  public async getStatisticsPerUnit(
    customAggregationUnit: string,
    from: string,
    to: string,
  ): Promise<insight.GetStatisticsPerUnitResponse> {
    return this.clients.insight.getStatisticsPerUnit(
      customAggregationUnit,
      from,
      to,
    );
  }

  /**
   * You can check the per-unit statistics of how users interact with push messages and multicast messages sent from your LINE Official Account. .
   * This method includes HttpInfo object to return additional information.
   * @param customAggregationUnit Name of aggregation unit specified when sending the message. Case-sensitive. For example, `Promotion_a` and `Promotion_A` are regarded as different unit names.
   * @param from Start date of aggregation period.  Format: yyyyMMdd (e.g. 20210301) Time zone: UTC+9
   * @param to End date of aggregation period. The end date can be specified for up to 30 days later. For example, if the start date is 20210301, the latest end date is 20210331.  Format: yyyyMMdd (e.g. 20210301) Time zone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-statistics-per-unit"> Documentation</a>
   */
  public async getStatisticsPerUnitWithHttpInfo(
    customAggregationUnit: string,
    from: string,
    to: string,
  ): Promise<Types.ApiResponseType<insight.GetStatisticsPerUnitResponse>> {
    return this.clients.insight.getStatisticsPerUnitWithHttpInfo(
      customAggregationUnit,
      from,
      to,
    );
  }

  /**
   * Adding the LIFF app to a channel
   * @summary Create LIFF app
   * @param addLiffAppRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#add-liff-app">Create LIFF app Documentation</a>
   */
  public async addLIFFApp(
    addLiffAppRequest: liff.AddLiffAppRequest,
  ): Promise<liff.AddLiffAppResponse> {
    return this.clients.liff.addLIFFApp(addLiffAppRequest);
  }

  /**
   * Adding the LIFF app to a channel.
   * This method includes HttpInfo object to return additional information.
   * @summary Create LIFF app
   * @param addLiffAppRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#add-liff-app">Create LIFF app Documentation</a>
   */
  public async addLIFFAppWithHttpInfo(
    addLiffAppRequest: liff.AddLiffAppRequest,
  ): Promise<Types.ApiResponseType<liff.AddLiffAppResponse>> {
    return this.clients.liff.addLIFFAppWithHttpInfo(addLiffAppRequest);
  }

  /**
   * Deletes a LIFF app from a channel.
   * @summary Delete LIFF app from a channel
   * @param liffId ID of the LIFF app to be updated
   *
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#delete-liff-app">Delete LIFF app from a channel Documentation</a>
   */
  public async deleteLIFFApp(
    liffId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.liff.deleteLIFFApp(liffId);
  }

  /**
   * Deletes a LIFF app from a channel. .
   * This method includes HttpInfo object to return additional information.
   * @summary Delete LIFF app from a channel
   * @param liffId ID of the LIFF app to be updated
   *
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#delete-liff-app">Delete LIFF app from a channel Documentation</a>
   */
  public async deleteLIFFAppWithHttpInfo(
    liffId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.liff.deleteLIFFAppWithHttpInfo(liffId);
  }

  /**
   * Gets information on all the LIFF apps added to the channel.
   * @summary Get all LIFF apps
   *
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#get-all-liff-apps">Get all LIFF apps Documentation</a>
   */
  public async getAllLIFFApps(): Promise<liff.GetAllLiffAppsResponse> {
    return this.clients.liff.getAllLIFFApps();
  }

  /**
   * Gets information on all the LIFF apps added to the channel..
   * This method includes HttpInfo object to return additional information.
   * @summary Get all LIFF apps
   *
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#get-all-liff-apps">Get all LIFF apps Documentation</a>
   */
  public async getAllLIFFAppsWithHttpInfo(): Promise<
    Types.ApiResponseType<liff.GetAllLiffAppsResponse>
  > {
    return this.clients.liff.getAllLIFFAppsWithHttpInfo();
  }

  /**
   * Update LIFF app settings
   * @summary Update LIFF app from a channel
   * @param liffId ID of the LIFF app to be updated
   * @param updateLiffAppRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#update-liff-app">Update LIFF app from a channel Documentation</a>
   */
  public async updateLIFFApp(
    liffId: string,
    updateLiffAppRequest: liff.UpdateLiffAppRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.liff.updateLIFFApp(liffId, updateLiffAppRequest);
  }

  /**
   * Update LIFF app settings.
   * This method includes HttpInfo object to return additional information.
   * @summary Update LIFF app from a channel
   * @param liffId ID of the LIFF app to be updated
   * @param updateLiffAppRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#update-liff-app">Update LIFF app from a channel Documentation</a>
   */
  public async updateLIFFAppWithHttpInfo(
    liffId: string,
    updateLiffAppRequest: liff.UpdateLiffAppRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.liff.updateLIFFAppWithHttpInfo(
      liffId,
      updateLiffAppRequest,
    );
  }

  /**
   * Add user IDs or Identifiers for Advertisers (IFAs) to an audience for uploading user IDs (by JSON)
   * @param addAudienceToAudienceGroupRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#update-upload-audience-group"> Documentation</a>
   */
  public async addAudienceToAudienceGroup(
    addAudienceToAudienceGroupRequest: manageAudience.AddAudienceToAudienceGroupRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.manageAudience.addAudienceToAudienceGroup(
      addAudienceToAudienceGroupRequest,
    );
  }

  /**
   * Add user IDs or Identifiers for Advertisers (IFAs) to an audience for uploading user IDs (by JSON).
   * This method includes HttpInfo object to return additional information.
   * @param addAudienceToAudienceGroupRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#update-upload-audience-group"> Documentation</a>
   */
  public async addAudienceToAudienceGroupWithHttpInfo(
    addAudienceToAudienceGroupRequest: manageAudience.AddAudienceToAudienceGroupRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.manageAudience.addAudienceToAudienceGroupWithHttpInfo(
      addAudienceToAudienceGroupRequest,
    );
  }

  /**
   * Create audience for uploading user IDs (by JSON)
   * @param createAudienceGroupRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-upload-audience-group"> Documentation</a>
   */
  public async createAudienceGroup(
    createAudienceGroupRequest: manageAudience.CreateAudienceGroupRequest,
  ): Promise<manageAudience.CreateAudienceGroupResponse> {
    return this.clients.manageAudience.createAudienceGroup(
      createAudienceGroupRequest,
    );
  }

  /**
   * Create audience for uploading user IDs (by JSON).
   * This method includes HttpInfo object to return additional information.
   * @param createAudienceGroupRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-upload-audience-group"> Documentation</a>
   */
  public async createAudienceGroupWithHttpInfo(
    createAudienceGroupRequest: manageAudience.CreateAudienceGroupRequest,
  ): Promise<
    Types.ApiResponseType<manageAudience.CreateAudienceGroupResponse>
  > {
    return this.clients.manageAudience.createAudienceGroupWithHttpInfo(
      createAudienceGroupRequest,
    );
  }

  /**
   * Create audience for click-based retargeting
   * @param createClickBasedAudienceGroupRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-click-audience-group"> Documentation</a>
   */
  public async createClickBasedAudienceGroup(
    createClickBasedAudienceGroupRequest: manageAudience.CreateClickBasedAudienceGroupRequest,
  ): Promise<manageAudience.CreateClickBasedAudienceGroupResponse> {
    return this.clients.manageAudience.createClickBasedAudienceGroup(
      createClickBasedAudienceGroupRequest,
    );
  }

  /**
   * Create audience for click-based retargeting.
   * This method includes HttpInfo object to return additional information.
   * @param createClickBasedAudienceGroupRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-click-audience-group"> Documentation</a>
   */
  public async createClickBasedAudienceGroupWithHttpInfo(
    createClickBasedAudienceGroupRequest: manageAudience.CreateClickBasedAudienceGroupRequest,
  ): Promise<
    Types.ApiResponseType<manageAudience.CreateClickBasedAudienceGroupResponse>
  > {
    return this.clients.manageAudience.createClickBasedAudienceGroupWithHttpInfo(
      createClickBasedAudienceGroupRequest,
    );
  }

  /**
   * Create audience for impression-based retargeting
   * @param createImpBasedAudienceGroupRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-imp-audience-group"> Documentation</a>
   */
  public async createImpBasedAudienceGroup(
    createImpBasedAudienceGroupRequest: manageAudience.CreateImpBasedAudienceGroupRequest,
  ): Promise<manageAudience.CreateImpBasedAudienceGroupResponse> {
    return this.clients.manageAudience.createImpBasedAudienceGroup(
      createImpBasedAudienceGroupRequest,
    );
  }

  /**
   * Create audience for impression-based retargeting.
   * This method includes HttpInfo object to return additional information.
   * @param createImpBasedAudienceGroupRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-imp-audience-group"> Documentation</a>
   */
  public async createImpBasedAudienceGroupWithHttpInfo(
    createImpBasedAudienceGroupRequest: manageAudience.CreateImpBasedAudienceGroupRequest,
  ): Promise<
    Types.ApiResponseType<manageAudience.CreateImpBasedAudienceGroupResponse>
  > {
    return this.clients.manageAudience.createImpBasedAudienceGroupWithHttpInfo(
      createImpBasedAudienceGroupRequest,
    );
  }

  /**
   * Delete audience
   * @param audienceGroupId The audience ID.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#delete-audience-group"> Documentation</a>
   */
  public async deleteAudienceGroup(
    audienceGroupId: number,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.manageAudience.deleteAudienceGroup(audienceGroupId);
  }

  /**
   * Delete audience.
   * This method includes HttpInfo object to return additional information.
   * @param audienceGroupId The audience ID.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#delete-audience-group"> Documentation</a>
   */
  public async deleteAudienceGroupWithHttpInfo(
    audienceGroupId: number,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.manageAudience.deleteAudienceGroupWithHttpInfo(
      audienceGroupId,
    );
  }

  /**
   * Gets audience data.
   * @param audienceGroupId The audience ID.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-audience-group"> Documentation</a>
   */
  public async getAudienceData(
    audienceGroupId: number,
  ): Promise<manageAudience.GetAudienceDataResponse> {
    return this.clients.manageAudience.getAudienceData(audienceGroupId);
  }

  /**
   * Gets audience data..
   * This method includes HttpInfo object to return additional information.
   * @param audienceGroupId The audience ID.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-audience-group"> Documentation</a>
   */
  public async getAudienceDataWithHttpInfo(
    audienceGroupId: number,
  ): Promise<Types.ApiResponseType<manageAudience.GetAudienceDataResponse>> {
    return this.clients.manageAudience.getAudienceDataWithHttpInfo(
      audienceGroupId,
    );
  }

  /**
   * Gets data for more than one audience.
   * @param page The page to return when getting (paginated) results. Must be 1 or higher.
   * @param description The name of the audience(s) to return. You can search for partial matches. This is case-insensitive, meaning AUDIENCE and audience are considered identical. If omitted, the name of the audience(s) will not be used as a search criterion.
   * @param status The status of the audience(s) to return. If omitted, the status of the audience(s) will not be used as a search criterion.
   * @param size The number of audiences per page. Default: 20 Max: 40
   * @param includesExternalPublicGroups true (default): Get public audiences created in all channels linked to the same bot. false: Get audiences created in the same channel.
   * @param createRoute How the audience was created. If omitted, all audiences are included.  `OA_MANAGER`: Return only audiences created with LINE Official Account Manager (opens new window). `MESSAGING_API`: Return only audiences created with Messaging API.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-audience-groups"> Documentation</a>
   */
  public async getAudienceGroups(
    page: number,
    description?: string,
    status?: manageAudience.AudienceGroupStatus,
    size?: number,
    includesExternalPublicGroups?: boolean,
    createRoute?: manageAudience.AudienceGroupCreateRoute,
  ): Promise<manageAudience.GetAudienceGroupsResponse> {
    return this.clients.manageAudience.getAudienceGroups(
      page,
      description,
      status,
      size,
      includesExternalPublicGroups,
      createRoute,
    );
  }

  /**
   * Gets data for more than one audience..
   * This method includes HttpInfo object to return additional information.
   * @param page The page to return when getting (paginated) results. Must be 1 or higher.
   * @param description The name of the audience(s) to return. You can search for partial matches. This is case-insensitive, meaning AUDIENCE and audience are considered identical. If omitted, the name of the audience(s) will not be used as a search criterion.
   * @param status The status of the audience(s) to return. If omitted, the status of the audience(s) will not be used as a search criterion.
   * @param size The number of audiences per page. Default: 20 Max: 40
   * @param includesExternalPublicGroups true (default): Get public audiences created in all channels linked to the same bot. false: Get audiences created in the same channel.
   * @param createRoute How the audience was created. If omitted, all audiences are included.  `OA_MANAGER`: Return only audiences created with LINE Official Account Manager (opens new window). `MESSAGING_API`: Return only audiences created with Messaging API.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-audience-groups"> Documentation</a>
   */
  public async getAudienceGroupsWithHttpInfo(
    page: number,
    description?: string,
    status?: manageAudience.AudienceGroupStatus,
    size?: number,
    includesExternalPublicGroups?: boolean,
    createRoute?: manageAudience.AudienceGroupCreateRoute,
  ): Promise<Types.ApiResponseType<manageAudience.GetAudienceGroupsResponse>> {
    return this.clients.manageAudience.getAudienceGroupsWithHttpInfo(
      page,
      description,
      status,
      size,
      includesExternalPublicGroups,
      createRoute,
    );
  }

  /**
   * Gets audience data.
   * @param audienceGroupId The audience ID.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-shared-audience"> Documentation</a>
   */
  public async getSharedAudienceData(
    audienceGroupId: number,
  ): Promise<manageAudience.GetSharedAudienceDataResponse> {
    return this.clients.manageAudience.getSharedAudienceData(audienceGroupId);
  }

  /**
   * Gets audience data..
   * This method includes HttpInfo object to return additional information.
   * @param audienceGroupId The audience ID.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-shared-audience"> Documentation</a>
   */
  public async getSharedAudienceDataWithHttpInfo(
    audienceGroupId: number,
  ): Promise<
    Types.ApiResponseType<manageAudience.GetSharedAudienceDataResponse>
  > {
    return this.clients.manageAudience.getSharedAudienceDataWithHttpInfo(
      audienceGroupId,
    );
  }

  /**
   * Gets data for more than one audience, including those shared by the Business Manager.
   * @param page The page to return when getting (paginated) results. Must be 1 or higher.
   * @param description The name of the audience(s) to return. You can search for partial matches. This is case-insensitive, meaning AUDIENCE and audience are considered identical. If omitted, the name of the audience(s) will not be used as a search criterion.
   * @param status The status of the audience(s) to return. If omitted, the status of the audience(s) will not be used as a search criterion.
   * @param size The number of audiences per page. Default: 20 Max: 40
   * @param createRoute How the audience was created. If omitted, all audiences are included.  `OA_MANAGER`: Return only audiences created with LINE Official Account Manager (opens new window). `MESSAGING_API`: Return only audiences created with Messaging API.
   * @param includesOwnedAudienceGroups true: Include audienceGroups owned by LINE Official Account Manager false: Respond only audienceGroups shared by Business Manager
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-shared-audience-list"> Documentation</a>
   */
  public async getSharedAudienceGroups(
    page: number,
    description?: string,
    status?: manageAudience.AudienceGroupStatus,
    size?: number,
    createRoute?: manageAudience.AudienceGroupCreateRoute,
    includesOwnedAudienceGroups?: boolean,
  ): Promise<manageAudience.GetSharedAudienceGroupsResponse> {
    return this.clients.manageAudience.getSharedAudienceGroups(
      page,
      description,
      status,
      size,
      createRoute,
      includesOwnedAudienceGroups,
    );
  }

  /**
   * Gets data for more than one audience, including those shared by the Business Manager..
   * This method includes HttpInfo object to return additional information.
   * @param page The page to return when getting (paginated) results. Must be 1 or higher.
   * @param description The name of the audience(s) to return. You can search for partial matches. This is case-insensitive, meaning AUDIENCE and audience are considered identical. If omitted, the name of the audience(s) will not be used as a search criterion.
   * @param status The status of the audience(s) to return. If omitted, the status of the audience(s) will not be used as a search criterion.
   * @param size The number of audiences per page. Default: 20 Max: 40
   * @param createRoute How the audience was created. If omitted, all audiences are included.  `OA_MANAGER`: Return only audiences created with LINE Official Account Manager (opens new window). `MESSAGING_API`: Return only audiences created with Messaging API.
   * @param includesOwnedAudienceGroups true: Include audienceGroups owned by LINE Official Account Manager false: Respond only audienceGroups shared by Business Manager
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-shared-audience-list"> Documentation</a>
   */
  public async getSharedAudienceGroupsWithHttpInfo(
    page: number,
    description?: string,
    status?: manageAudience.AudienceGroupStatus,
    size?: number,
    createRoute?: manageAudience.AudienceGroupCreateRoute,
    includesOwnedAudienceGroups?: boolean,
  ): Promise<
    Types.ApiResponseType<manageAudience.GetSharedAudienceGroupsResponse>
  > {
    return this.clients.manageAudience.getSharedAudienceGroupsWithHttpInfo(
      page,
      description,
      status,
      size,
      createRoute,
      includesOwnedAudienceGroups,
    );
  }

  /**
   * Renames an existing audience.
   * @param audienceGroupId The audience ID.
   * @param updateAudienceGroupDescriptionRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#set-description-audience-group"> Documentation</a>
   */
  public async updateAudienceGroupDescription(
    audienceGroupId: number,
    updateAudienceGroupDescriptionRequest: manageAudience.UpdateAudienceGroupDescriptionRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.manageAudience.updateAudienceGroupDescription(
      audienceGroupId,
      updateAudienceGroupDescriptionRequest,
    );
  }

  /**
   * Renames an existing audience..
   * This method includes HttpInfo object to return additional information.
   * @param audienceGroupId The audience ID.
   * @param updateAudienceGroupDescriptionRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#set-description-audience-group"> Documentation</a>
   */
  public async updateAudienceGroupDescriptionWithHttpInfo(
    audienceGroupId: number,
    updateAudienceGroupDescriptionRequest: manageAudience.UpdateAudienceGroupDescriptionRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.manageAudience.updateAudienceGroupDescriptionWithHttpInfo(
      audienceGroupId,
      updateAudienceGroupDescriptionRequest,
    );
  }

  /**
   * Add user IDs or Identifiers for Advertisers (IFAs) to an audience for uploading user IDs (by file).
   * @param file A text file with one user ID or IFA entered per line. Specify text/plain as Content-Type. Max file number: 1 Max number: 1,500,000
   * @param audienceGroupId The audience ID.
   * @param uploadDescription The description to register with the job
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#update-upload-audience-group-by-file"> Documentation</a>
   */
  public async addUserIdsToAudience(
    file: Blob,
    audienceGroupId?: number,
    uploadDescription?: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.manageAudienceBlob.addUserIdsToAudience(
      file,
      audienceGroupId,
      uploadDescription,
    );
  }

  /**
   * Add user IDs or Identifiers for Advertisers (IFAs) to an audience for uploading user IDs (by file)..
   * This method includes HttpInfo object to return additional information.
   * @param file A text file with one user ID or IFA entered per line. Specify text/plain as Content-Type. Max file number: 1 Max number: 1,500,000
   * @param audienceGroupId The audience ID.
   * @param uploadDescription The description to register with the job
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#update-upload-audience-group-by-file"> Documentation</a>
   */
  public async addUserIdsToAudienceWithHttpInfo(
    file: Blob,
    audienceGroupId?: number,
    uploadDescription?: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.manageAudienceBlob.addUserIdsToAudienceWithHttpInfo(
      file,
      audienceGroupId,
      uploadDescription,
    );
  }

  /**
   * Create audience for uploading user IDs (by file).
   * @param file A text file with one user ID or IFA entered per line. Specify text/plain as Content-Type. Max file number: 1 Max number: 1,500,000
   * @param description The audience\\\'s name. This is case-insensitive, meaning AUDIENCE and audience are considered identical. Max character limit: 120
   * @param isIfaAudience To specify recipients by IFAs: set `true`. To specify recipients by user IDs: set `false` or omit isIfaAudience property.
   * @param uploadDescription The description to register for the job (in `jobs[].description`).
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-upload-audience-group-by-file"> Documentation</a>
   */
  public async createAudienceForUploadingUserIds(
    file: Blob,
    description?: string,
    isIfaAudience?: boolean,
    uploadDescription?: string,
  ): Promise<manageAudience.CreateAudienceGroupResponse> {
    return this.clients.manageAudienceBlob.createAudienceForUploadingUserIds(
      file,
      description,
      isIfaAudience,
      uploadDescription,
    );
  }

  /**
   * Create audience for uploading user IDs (by file)..
   * This method includes HttpInfo object to return additional information.
   * @param file A text file with one user ID or IFA entered per line. Specify text/plain as Content-Type. Max file number: 1 Max number: 1,500,000
   * @param description The audience\\\'s name. This is case-insensitive, meaning AUDIENCE and audience are considered identical. Max character limit: 120
   * @param isIfaAudience To specify recipients by IFAs: set `true`. To specify recipients by user IDs: set `false` or omit isIfaAudience property.
   * @param uploadDescription The description to register for the job (in `jobs[].description`).
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-upload-audience-group-by-file"> Documentation</a>
   */
  public async createAudienceForUploadingUserIdsWithHttpInfo(
    file: Blob,
    description?: string,
    isIfaAudience?: boolean,
    uploadDescription?: string,
  ): Promise<
    Types.ApiResponseType<manageAudience.CreateAudienceGroupResponse>
  > {
    return this.clients.manageAudienceBlob.createAudienceForUploadingUserIdsWithHttpInfo(
      file,
      description,
      isIfaAudience,
      uploadDescription,
    );
  }

  /**
   * Sends a message to multiple users at any time.
   * @param broadcastRequest
   * @param xLineRetryKey Retry key. Specifies the UUID in hexadecimal format (e.g., `123e4567-e89b-12d3-a456-426614174000`) generated by any method. The retry key isn\'t generated by LINE. Each developer must generate their own retry key.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-broadcast-message"> Documentation</a>
   */
  public async broadcast(
    broadcastRequest: messagingApi.BroadcastRequest,
    xLineRetryKey?: string,
  ): Promise<object> {
    return this.clients.messagingApi.broadcast(broadcastRequest, xLineRetryKey);
  }

  /**
   * Sends a message to multiple users at any time..
   * This method includes HttpInfo object to return additional information.
   * @param broadcastRequest
   * @param xLineRetryKey Retry key. Specifies the UUID in hexadecimal format (e.g., `123e4567-e89b-12d3-a456-426614174000`) generated by any method. The retry key isn\'t generated by LINE. Each developer must generate their own retry key.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-broadcast-message"> Documentation</a>
   */
  public async broadcastWithHttpInfo(
    broadcastRequest: messagingApi.BroadcastRequest,
    xLineRetryKey?: string,
  ): Promise<Types.ApiResponseType<object>> {
    return this.clients.messagingApi.broadcastWithHttpInfo(
      broadcastRequest,
      xLineRetryKey,
    );
  }

  /**
   * Cancel default rich menu
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#cancel-default-rich-menu"> Documentation</a>
   */
  public async cancelDefaultRichMenu(): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.cancelDefaultRichMenu();
  }

  /**
   * Cancel default rich menu.
   * This method includes HttpInfo object to return additional information.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#cancel-default-rich-menu"> Documentation</a>
   */
  public async cancelDefaultRichMenuWithHttpInfo(): Promise<
    Types.ApiResponseType<Types.MessageAPIResponseBase>
  > {
    return this.clients.messagingApi.cancelDefaultRichMenuWithHttpInfo();
  }

  /**
   * Close coupon
   * @param couponId
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#discontinue-coupon"> Documentation</a>
   */
  public async closeCoupon(
    couponId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.closeCoupon(couponId);
  }

  /**
   * Close coupon.
   * This method includes HttpInfo object to return additional information.
   * @param couponId
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#discontinue-coupon"> Documentation</a>
   */
  public async closeCouponWithHttpInfo(
    couponId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.closeCouponWithHttpInfo(couponId);
  }

  /**
   * Create a new coupon. Define coupon details such as type, title, and validity period.
   * @param couponCreateRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-coupon"> Documentation</a>
   */
  public async createCoupon(
    couponCreateRequest?: messagingApi.CouponCreateRequest,
  ): Promise<messagingApi.CouponCreateResponse> {
    return this.clients.messagingApi.createCoupon(couponCreateRequest);
  }

  /**
   * Create a new coupon. Define coupon details such as type, title, and validity period..
   * This method includes HttpInfo object to return additional information.
   * @param couponCreateRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-coupon"> Documentation</a>
   */
  public async createCouponWithHttpInfo(
    couponCreateRequest?: messagingApi.CouponCreateRequest,
  ): Promise<Types.ApiResponseType<messagingApi.CouponCreateResponse>> {
    return this.clients.messagingApi.createCouponWithHttpInfo(
      couponCreateRequest,
    );
  }

  /**
   * Create rich menu
   * @param richMenuRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-rich-menu"> Documentation</a>
   */
  public async createRichMenu(
    richMenuRequest: messagingApi.RichMenuRequest,
  ): Promise<messagingApi.RichMenuIdResponse> {
    return this.clients.messagingApi.createRichMenu(richMenuRequest);
  }

  /**
   * Create rich menu.
   * This method includes HttpInfo object to return additional information.
   * @param richMenuRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-rich-menu"> Documentation</a>
   */
  public async createRichMenuWithHttpInfo(
    richMenuRequest: messagingApi.RichMenuRequest,
  ): Promise<Types.ApiResponseType<messagingApi.RichMenuIdResponse>> {
    return this.clients.messagingApi.createRichMenuWithHttpInfo(
      richMenuRequest,
    );
  }

  /**
   * Create rich menu alias
   * @param createRichMenuAliasRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-rich-menu-alias"> Documentation</a>
   */
  public async createRichMenuAlias(
    createRichMenuAliasRequest: messagingApi.CreateRichMenuAliasRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.createRichMenuAlias(
      createRichMenuAliasRequest,
    );
  }

  /**
   * Create rich menu alias.
   * This method includes HttpInfo object to return additional information.
   * @param createRichMenuAliasRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-rich-menu-alias"> Documentation</a>
   */
  public async createRichMenuAliasWithHttpInfo(
    createRichMenuAliasRequest: messagingApi.CreateRichMenuAliasRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.createRichMenuAliasWithHttpInfo(
      createRichMenuAliasRequest,
    );
  }

  /**
   * Deletes a rich menu.
   * @param richMenuId ID of a rich menu
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#delete-rich-menu"> Documentation</a>
   */
  public async deleteRichMenu(
    richMenuId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.deleteRichMenu(richMenuId);
  }

  /**
   * Deletes a rich menu..
   * This method includes HttpInfo object to return additional information.
   * @param richMenuId ID of a rich menu
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#delete-rich-menu"> Documentation</a>
   */
  public async deleteRichMenuWithHttpInfo(
    richMenuId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.deleteRichMenuWithHttpInfo(richMenuId);
  }

  /**
   * Delete rich menu alias
   * @param richMenuAliasId Rich menu alias ID that you want to delete.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#delete-rich-menu-alias"> Documentation</a>
   */
  public async deleteRichMenuAlias(
    richMenuAliasId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.deleteRichMenuAlias(richMenuAliasId);
  }

  /**
   * Delete rich menu alias.
   * This method includes HttpInfo object to return additional information.
   * @param richMenuAliasId Rich menu alias ID that you want to delete.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#delete-rich-menu-alias"> Documentation</a>
   */
  public async deleteRichMenuAliasWithHttpInfo(
    richMenuAliasId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.deleteRichMenuAliasWithHttpInfo(
      richMenuAliasId,
    );
  }

  /**
   * Get name list of units used this month
   * @param limit The maximum number of aggregation units you can get per request.
   * @param start Value of the continuation token found in the next property of the JSON object returned in the response. If you can\'t get all the aggregation units in one request, include this parameter to get the remaining array.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-name-list-of-units-used-this-month"> Documentation</a>
   */
  public async getAggregationUnitNameList(
    limit?: string,
    start?: string,
  ): Promise<messagingApi.GetAggregationUnitNameListResponse> {
    return this.clients.messagingApi.getAggregationUnitNameList(limit, start);
  }

  /**
   * Get name list of units used this month.
   * This method includes HttpInfo object to return additional information.
   * @param limit The maximum number of aggregation units you can get per request.
   * @param start Value of the continuation token found in the next property of the JSON object returned in the response. If you can\'t get all the aggregation units in one request, include this parameter to get the remaining array.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-name-list-of-units-used-this-month"> Documentation</a>
   */
  public async getAggregationUnitNameListWithHttpInfo(
    limit?: string,
    start?: string,
  ): Promise<
    Types.ApiResponseType<messagingApi.GetAggregationUnitNameListResponse>
  > {
    return this.clients.messagingApi.getAggregationUnitNameListWithHttpInfo(
      limit,
      start,
    );
  }

  /**
   * Get number of units used this month
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-units-used-this-month"> Documentation</a>
   */
  public async getAggregationUnitUsage(): Promise<messagingApi.GetAggregationUnitUsageResponse> {
    return this.clients.messagingApi.getAggregationUnitUsage();
  }

  /**
   * Get number of units used this month.
   * This method includes HttpInfo object to return additional information.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-units-used-this-month"> Documentation</a>
   */
  public async getAggregationUnitUsageWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.GetAggregationUnitUsageResponse>
  > {
    return this.clients.messagingApi.getAggregationUnitUsageWithHttpInfo();
  }

  /**
   * Get bot info
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-bot-info"> Documentation</a>
   */
  public async getBotInfo(): Promise<messagingApi.BotInfoResponse> {
    return this.clients.messagingApi.getBotInfo();
  }

  /**
   * Get bot info.
   * This method includes HttpInfo object to return additional information.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-bot-info"> Documentation</a>
   */
  public async getBotInfoWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.BotInfoResponse>
  > {
    return this.clients.messagingApi.getBotInfoWithHttpInfo();
  }

  /**
   * Get coupon detail
   * @param couponId
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-coupon"> Documentation</a>
   */
  public async getCouponDetail(
    couponId: string,
  ): Promise<messagingApi.CouponResponse> {
    return this.clients.messagingApi.getCouponDetail(couponId);
  }

  /**
   * Get coupon detail.
   * This method includes HttpInfo object to return additional information.
   * @param couponId
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-coupon"> Documentation</a>
   */
  public async getCouponDetailWithHttpInfo(
    couponId: string,
  ): Promise<Types.ApiResponseType<messagingApi.CouponResponse>> {
    return this.clients.messagingApi.getCouponDetailWithHttpInfo(couponId);
  }

  /**
   * Gets the ID of the default rich menu set with the Messaging API.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-default-rich-menu-id"> Documentation</a>
   */
  public async getDefaultRichMenuId(): Promise<messagingApi.RichMenuIdResponse> {
    return this.clients.messagingApi.getDefaultRichMenuId();
  }

  /**
   * Gets the ID of the default rich menu set with the Messaging API..
   * This method includes HttpInfo object to return additional information.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-default-rich-menu-id"> Documentation</a>
   */
  public async getDefaultRichMenuIdWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.RichMenuIdResponse>
  > {
    return this.clients.messagingApi.getDefaultRichMenuIdWithHttpInfo();
  }

  /**
   * Get a list of users who added your LINE Official Account as a friend
   * @param start Value of the continuation token found in the next property of the JSON object returned in the response. Include this parameter to get the next array of user IDs.
   * @param limit The maximum number of user IDs to retrieve in a single request.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-follower-ids"> Documentation</a>
   */
  public async getFollowers(
    start?: string,
    limit?: number,
  ): Promise<messagingApi.GetFollowersResponse> {
    return this.clients.messagingApi.getFollowers(start, limit);
  }

  /**
   * Get a list of users who added your LINE Official Account as a friend.
   * This method includes HttpInfo object to return additional information.
   * @param start Value of the continuation token found in the next property of the JSON object returned in the response. Include this parameter to get the next array of user IDs.
   * @param limit The maximum number of user IDs to retrieve in a single request.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-follower-ids"> Documentation</a>
   */
  public async getFollowersWithHttpInfo(
    start?: string,
    limit?: number,
  ): Promise<Types.ApiResponseType<messagingApi.GetFollowersResponse>> {
    return this.clients.messagingApi.getFollowersWithHttpInfo(start, limit);
  }

  /**
   * Get number of users in a group chat
   * @param groupId Group ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-members-group-count"> Documentation</a>
   */
  public async getGroupMemberCount(
    groupId: string,
  ): Promise<messagingApi.GroupMemberCountResponse> {
    return this.clients.messagingApi.getGroupMemberCount(groupId);
  }

  /**
   * Get number of users in a group chat.
   * This method includes HttpInfo object to return additional information.
   * @param groupId Group ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-members-group-count"> Documentation</a>
   */
  public async getGroupMemberCountWithHttpInfo(
    groupId: string,
  ): Promise<Types.ApiResponseType<messagingApi.GroupMemberCountResponse>> {
    return this.clients.messagingApi.getGroupMemberCountWithHttpInfo(groupId);
  }

  /**
   * Get group chat member profile
   * @param groupId Group ID
   * @param userId User ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-group-member-profile"> Documentation</a>
   */
  public async getGroupMemberProfile(
    groupId: string,
    userId: string,
  ): Promise<messagingApi.GroupUserProfileResponse> {
    return this.clients.messagingApi.getGroupMemberProfile(groupId, userId);
  }

  /**
   * Get group chat member profile.
   * This method includes HttpInfo object to return additional information.
   * @param groupId Group ID
   * @param userId User ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-group-member-profile"> Documentation</a>
   */
  public async getGroupMemberProfileWithHttpInfo(
    groupId: string,
    userId: string,
  ): Promise<Types.ApiResponseType<messagingApi.GroupUserProfileResponse>> {
    return this.clients.messagingApi.getGroupMemberProfileWithHttpInfo(
      groupId,
      userId,
    );
  }

  /**
   * Get group chat member user IDs
   * @param groupId Group ID
   * @param start Value of the continuation token found in the `next` property of the JSON object returned in the response. Include this parameter to get the next array of user IDs for the members of the group.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-group-member-user-ids"> Documentation</a>
   */
  public async getGroupMembersIds(
    groupId: string,
    start?: string,
  ): Promise<messagingApi.MembersIdsResponse> {
    return this.clients.messagingApi.getGroupMembersIds(groupId, start);
  }

  /**
   * Get group chat member user IDs.
   * This method includes HttpInfo object to return additional information.
   * @param groupId Group ID
   * @param start Value of the continuation token found in the `next` property of the JSON object returned in the response. Include this parameter to get the next array of user IDs for the members of the group.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-group-member-user-ids"> Documentation</a>
   */
  public async getGroupMembersIdsWithHttpInfo(
    groupId: string,
    start?: string,
  ): Promise<Types.ApiResponseType<messagingApi.MembersIdsResponse>> {
    return this.clients.messagingApi.getGroupMembersIdsWithHttpInfo(
      groupId,
      start,
    );
  }

  /**
   * Get group chat summary
   * @param groupId Group ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-group-summary"> Documentation</a>
   */
  public async getGroupSummary(
    groupId: string,
  ): Promise<messagingApi.GroupSummaryResponse> {
    return this.clients.messagingApi.getGroupSummary(groupId);
  }

  /**
   * Get group chat summary.
   * This method includes HttpInfo object to return additional information.
   * @param groupId Group ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-group-summary"> Documentation</a>
   */
  public async getGroupSummaryWithHttpInfo(
    groupId: string,
  ): Promise<Types.ApiResponseType<messagingApi.GroupSummaryResponse>> {
    return this.clients.messagingApi.getGroupSummaryWithHttpInfo(groupId);
  }

  /**
   * Get a list of user IDs who joined the membership.
   * @param membershipId Membership plan ID.
   * @param start A continuation token to get next remaining membership user IDs. Returned only when there are remaining user IDs that weren\'t returned in the userIds property in the previous request. The continuation token expires in 24 hours (86,400 seconds).
   * @param limit The max number of items to return for this API call. The value is set to 300 by default, but the max acceptable value is 1000.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-membership-user-ids"> Documentation</a>
   */
  public async getJoinedMembershipUsers(
    membershipId: number,
    start?: string,
    limit?: number,
  ): Promise<messagingApi.GetJoinedMembershipUsersResponse> {
    return this.clients.messagingApi.getJoinedMembershipUsers(
      membershipId,
      start,
      limit,
    );
  }

  /**
   * Get a list of user IDs who joined the membership..
   * This method includes HttpInfo object to return additional information.
   * @param membershipId Membership plan ID.
   * @param start A continuation token to get next remaining membership user IDs. Returned only when there are remaining user IDs that weren\'t returned in the userIds property in the previous request. The continuation token expires in 24 hours (86,400 seconds).
   * @param limit The max number of items to return for this API call. The value is set to 300 by default, but the max acceptable value is 1000.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-membership-user-ids"> Documentation</a>
   */
  public async getJoinedMembershipUsersWithHttpInfo(
    membershipId: number,
    start?: string,
    limit?: number,
  ): Promise<
    Types.ApiResponseType<messagingApi.GetJoinedMembershipUsersResponse>
  > {
    return this.clients.messagingApi.getJoinedMembershipUsersWithHttpInfo(
      membershipId,
      start,
      limit,
    );
  }

  /**
   * Get a list of memberships.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-membership-plans"> Documentation</a>
   */
  public async getMembershipList(): Promise<messagingApi.MembershipListResponse> {
    return this.clients.messagingApi.getMembershipList();
  }

  /**
   * Get a list of memberships..
   * This method includes HttpInfo object to return additional information.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-membership-plans"> Documentation</a>
   */
  public async getMembershipListWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.MembershipListResponse>
  > {
    return this.clients.messagingApi.getMembershipListWithHttpInfo();
  }

  /**
   * Get a user\'s membership subscription.
   * @param userId User ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-a-users-membership-subscription-status"> Documentation</a>
   */
  public async getMembershipSubscription(
    userId: string,
  ): Promise<messagingApi.GetMembershipSubscriptionResponse> {
    return this.clients.messagingApi.getMembershipSubscription(userId);
  }

  /**
   * Get a user\'s membership subscription..
   * This method includes HttpInfo object to return additional information.
   * @param userId User ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-a-users-membership-subscription-status"> Documentation</a>
   */
  public async getMembershipSubscriptionWithHttpInfo(
    userId: string,
  ): Promise<
    Types.ApiResponseType<messagingApi.GetMembershipSubscriptionResponse>
  > {
    return this.clients.messagingApi.getMembershipSubscriptionWithHttpInfo(
      userId,
    );
  }

  /**
   * Gets the target limit for sending messages in the current month. The total number of the free messages and the additional messages is returned.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-quota"> Documentation</a>
   */
  public async getMessageQuota(): Promise<messagingApi.MessageQuotaResponse> {
    return this.clients.messagingApi.getMessageQuota();
  }

  /**
   * Gets the target limit for sending messages in the current month. The total number of the free messages and the additional messages is returned..
   * This method includes HttpInfo object to return additional information.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-quota"> Documentation</a>
   */
  public async getMessageQuotaWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.MessageQuotaResponse>
  > {
    return this.clients.messagingApi.getMessageQuotaWithHttpInfo();
  }

  /**
   * Gets the number of messages sent in the current month.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-consumption"> Documentation</a>
   */
  public async getMessageQuotaConsumption(): Promise<messagingApi.QuotaConsumptionResponse> {
    return this.clients.messagingApi.getMessageQuotaConsumption();
  }

  /**
   * Gets the number of messages sent in the current month..
   * This method includes HttpInfo object to return additional information.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-consumption"> Documentation</a>
   */
  public async getMessageQuotaConsumptionWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.QuotaConsumptionResponse>
  > {
    return this.clients.messagingApi.getMessageQuotaConsumptionWithHttpInfo();
  }

  /**
   * Gets the status of a narrowcast message.
   * @param requestId The narrowcast message\'s request ID. Each Messaging API request has a request ID.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-narrowcast-progress-status"> Documentation</a>
   */
  public async getNarrowcastProgress(
    requestId: string,
  ): Promise<messagingApi.NarrowcastProgressResponse> {
    return this.clients.messagingApi.getNarrowcastProgress(requestId);
  }

  /**
   * Gets the status of a narrowcast message..
   * This method includes HttpInfo object to return additional information.
   * @param requestId The narrowcast message\'s request ID. Each Messaging API request has a request ID.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-narrowcast-progress-status"> Documentation</a>
   */
  public async getNarrowcastProgressWithHttpInfo(
    requestId: string,
  ): Promise<Types.ApiResponseType<messagingApi.NarrowcastProgressResponse>> {
    return this.clients.messagingApi.getNarrowcastProgressWithHttpInfo(
      requestId,
    );
  }

  /**
   * Get number of sent broadcast messages
   * @param date Date the messages were sent  Format: yyyyMMdd (e.g. 20191231) Timezone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-broadcast-messages"> Documentation</a>
   */
  public async getNumberOfSentBroadcastMessages(
    date: string,
  ): Promise<messagingApi.NumberOfMessagesResponse> {
    return this.clients.messagingApi.getNumberOfSentBroadcastMessages(date);
  }

  /**
   * Get number of sent broadcast messages.
   * This method includes HttpInfo object to return additional information.
   * @param date Date the messages were sent  Format: yyyyMMdd (e.g. 20191231) Timezone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-broadcast-messages"> Documentation</a>
   */
  public async getNumberOfSentBroadcastMessagesWithHttpInfo(
    date: string,
  ): Promise<Types.ApiResponseType<messagingApi.NumberOfMessagesResponse>> {
    return this.clients.messagingApi.getNumberOfSentBroadcastMessagesWithHttpInfo(
      date,
    );
  }

  /**
   * Get number of sent multicast messages
   * @param date Date the messages were sent  Format: `yyyyMMdd` (e.g. `20191231`) Timezone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-multicast-messages"> Documentation</a>
   */
  public async getNumberOfSentMulticastMessages(
    date: string,
  ): Promise<messagingApi.NumberOfMessagesResponse> {
    return this.clients.messagingApi.getNumberOfSentMulticastMessages(date);
  }

  /**
   * Get number of sent multicast messages.
   * This method includes HttpInfo object to return additional information.
   * @param date Date the messages were sent  Format: `yyyyMMdd` (e.g. `20191231`) Timezone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-multicast-messages"> Documentation</a>
   */
  public async getNumberOfSentMulticastMessagesWithHttpInfo(
    date: string,
  ): Promise<Types.ApiResponseType<messagingApi.NumberOfMessagesResponse>> {
    return this.clients.messagingApi.getNumberOfSentMulticastMessagesWithHttpInfo(
      date,
    );
  }

  /**
   * Get number of sent push messages
   * @param date Date the messages were sent  Format: `yyyyMMdd` (e.g. `20191231`) Timezone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-push-messages"> Documentation</a>
   */
  public async getNumberOfSentPushMessages(
    date: string,
  ): Promise<messagingApi.NumberOfMessagesResponse> {
    return this.clients.messagingApi.getNumberOfSentPushMessages(date);
  }

  /**
   * Get number of sent push messages.
   * This method includes HttpInfo object to return additional information.
   * @param date Date the messages were sent  Format: `yyyyMMdd` (e.g. `20191231`) Timezone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-push-messages"> Documentation</a>
   */
  public async getNumberOfSentPushMessagesWithHttpInfo(
    date: string,
  ): Promise<Types.ApiResponseType<messagingApi.NumberOfMessagesResponse>> {
    return this.clients.messagingApi.getNumberOfSentPushMessagesWithHttpInfo(
      date,
    );
  }

  /**
   * Get number of sent reply messages
   * @param date Date the messages were sent  Format: `yyyyMMdd` (e.g. `20191231`) Timezone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-reply-messages"> Documentation</a>
   */
  public async getNumberOfSentReplyMessages(
    date: string,
  ): Promise<messagingApi.NumberOfMessagesResponse> {
    return this.clients.messagingApi.getNumberOfSentReplyMessages(date);
  }

  /**
   * Get number of sent reply messages.
   * This method includes HttpInfo object to return additional information.
   * @param date Date the messages were sent  Format: `yyyyMMdd` (e.g. `20191231`) Timezone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-reply-messages"> Documentation</a>
   */
  public async getNumberOfSentReplyMessagesWithHttpInfo(
    date: string,
  ): Promise<Types.ApiResponseType<messagingApi.NumberOfMessagesResponse>> {
    return this.clients.messagingApi.getNumberOfSentReplyMessagesWithHttpInfo(
      date,
    );
  }

  /**
   * Get number of sent LINE notification messages
   * @param date Date the message was sent  Format: `yyyyMMdd` (Example:`20211231`) Time zone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#get-number-of-sent-line-notification-messages"> Documentation</a>
   */
  public async getPNPMessageStatistics(
    date: string,
  ): Promise<messagingApi.NumberOfMessagesResponse> {
    return this.clients.messagingApi.getPNPMessageStatistics(date);
  }

  /**
   * Get number of sent LINE notification messages　.
   * This method includes HttpInfo object to return additional information.
   * @param date Date the message was sent  Format: `yyyyMMdd` (Example:`20211231`) Time zone: UTC+9
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#get-number-of-sent-line-notification-messages"> Documentation</a>
   */
  public async getPNPMessageStatisticsWithHttpInfo(
    date: string,
  ): Promise<Types.ApiResponseType<messagingApi.NumberOfMessagesResponse>> {
    return this.clients.messagingApi.getPNPMessageStatisticsWithHttpInfo(date);
  }

  /**
   * Get profile
   * @param userId User ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-profile"> Documentation</a>
   */
  public async getProfile(
    userId: string,
  ): Promise<messagingApi.UserProfileResponse> {
    return this.clients.messagingApi.getProfile(userId);
  }

  /**
   * Get profile.
   * This method includes HttpInfo object to return additional information.
   * @param userId User ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-profile"> Documentation</a>
   */
  public async getProfileWithHttpInfo(
    userId: string,
  ): Promise<Types.ApiResponseType<messagingApi.UserProfileResponse>> {
    return this.clients.messagingApi.getProfileWithHttpInfo(userId);
  }

  /**
   * Gets a rich menu via a rich menu ID.
   * @param richMenuId ID of a rich menu
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu"> Documentation</a>
   */
  public async getRichMenu(
    richMenuId: string,
  ): Promise<messagingApi.RichMenuResponse> {
    return this.clients.messagingApi.getRichMenu(richMenuId);
  }

  /**
   * Gets a rich menu via a rich menu ID..
   * This method includes HttpInfo object to return additional information.
   * @param richMenuId ID of a rich menu
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu"> Documentation</a>
   */
  public async getRichMenuWithHttpInfo(
    richMenuId: string,
  ): Promise<Types.ApiResponseType<messagingApi.RichMenuResponse>> {
    return this.clients.messagingApi.getRichMenuWithHttpInfo(richMenuId);
  }

  /**
   * Get rich menu alias information
   * @param richMenuAliasId The rich menu alias ID whose information you want to obtain.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-alias-by-id"> Documentation</a>
   */
  public async getRichMenuAlias(
    richMenuAliasId: string,
  ): Promise<messagingApi.RichMenuAliasResponse> {
    return this.clients.messagingApi.getRichMenuAlias(richMenuAliasId);
  }

  /**
   * Get rich menu alias information.
   * This method includes HttpInfo object to return additional information.
   * @param richMenuAliasId The rich menu alias ID whose information you want to obtain.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-alias-by-id"> Documentation</a>
   */
  public async getRichMenuAliasWithHttpInfo(
    richMenuAliasId: string,
  ): Promise<Types.ApiResponseType<messagingApi.RichMenuAliasResponse>> {
    return this.clients.messagingApi.getRichMenuAliasWithHttpInfo(
      richMenuAliasId,
    );
  }

  /**
   * Get list of rich menu alias
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-alias-list"> Documentation</a>
   */
  public async getRichMenuAliasList(): Promise<messagingApi.RichMenuAliasListResponse> {
    return this.clients.messagingApi.getRichMenuAliasList();
  }

  /**
   * Get list of rich menu alias.
   * This method includes HttpInfo object to return additional information.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-alias-list"> Documentation</a>
   */
  public async getRichMenuAliasListWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.RichMenuAliasListResponse>
  > {
    return this.clients.messagingApi.getRichMenuAliasListWithHttpInfo();
  }

  /**
   * Get the status of Replace or unlink a linked rich menus in batches.
   * @param requestId A request ID used to batch control the rich menu linked to the user. Each Messaging API request has a request ID.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-batch-control-rich-menus-progress-status"> Documentation</a>
   */
  public async getRichMenuBatchProgress(
    requestId: string,
  ): Promise<messagingApi.RichMenuBatchProgressResponse> {
    return this.clients.messagingApi.getRichMenuBatchProgress(requestId);
  }

  /**
   * Get the status of Replace or unlink a linked rich menus in batches..
   * This method includes HttpInfo object to return additional information.
   * @param requestId A request ID used to batch control the rich menu linked to the user. Each Messaging API request has a request ID.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-batch-control-rich-menus-progress-status"> Documentation</a>
   */
  public async getRichMenuBatchProgressWithHttpInfo(
    requestId: string,
  ): Promise<
    Types.ApiResponseType<messagingApi.RichMenuBatchProgressResponse>
  > {
    return this.clients.messagingApi.getRichMenuBatchProgressWithHttpInfo(
      requestId,
    );
  }

  /**
   * Get rich menu ID of user
   * @param userId User ID. Found in the `source` object of webhook event objects. Do not use the LINE ID used in LINE.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-id-of-user"> Documentation</a>
   */
  public async getRichMenuIdOfUser(
    userId: string,
  ): Promise<messagingApi.RichMenuIdResponse> {
    return this.clients.messagingApi.getRichMenuIdOfUser(userId);
  }

  /**
   * Get rich menu ID of user.
   * This method includes HttpInfo object to return additional information.
   * @param userId User ID. Found in the `source` object of webhook event objects. Do not use the LINE ID used in LINE.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-id-of-user"> Documentation</a>
   */
  public async getRichMenuIdOfUserWithHttpInfo(
    userId: string,
  ): Promise<Types.ApiResponseType<messagingApi.RichMenuIdResponse>> {
    return this.clients.messagingApi.getRichMenuIdOfUserWithHttpInfo(userId);
  }

  /**
   * Get rich menu list
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-list"> Documentation</a>
   */
  public async getRichMenuList(): Promise<messagingApi.RichMenuListResponse> {
    return this.clients.messagingApi.getRichMenuList();
  }

  /**
   * Get rich menu list.
   * This method includes HttpInfo object to return additional information.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-list"> Documentation</a>
   */
  public async getRichMenuListWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.RichMenuListResponse>
  > {
    return this.clients.messagingApi.getRichMenuListWithHttpInfo();
  }

  /**
   * Get number of users in a multi-person chat
   * @param roomId Room ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-members-room-count"> Documentation</a>
   */
  public async getRoomMemberCount(
    roomId: string,
  ): Promise<messagingApi.RoomMemberCountResponse> {
    return this.clients.messagingApi.getRoomMemberCount(roomId);
  }

  /**
   * Get number of users in a multi-person chat.
   * This method includes HttpInfo object to return additional information.
   * @param roomId Room ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-members-room-count"> Documentation</a>
   */
  public async getRoomMemberCountWithHttpInfo(
    roomId: string,
  ): Promise<Types.ApiResponseType<messagingApi.RoomMemberCountResponse>> {
    return this.clients.messagingApi.getRoomMemberCountWithHttpInfo(roomId);
  }

  /**
   * Get multi-person chat member profile
   * @param roomId Room ID
   * @param userId User ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-room-member-profile"> Documentation</a>
   */
  public async getRoomMemberProfile(
    roomId: string,
    userId: string,
  ): Promise<messagingApi.RoomUserProfileResponse> {
    return this.clients.messagingApi.getRoomMemberProfile(roomId, userId);
  }

  /**
   * Get multi-person chat member profile.
   * This method includes HttpInfo object to return additional information.
   * @param roomId Room ID
   * @param userId User ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-room-member-profile"> Documentation</a>
   */
  public async getRoomMemberProfileWithHttpInfo(
    roomId: string,
    userId: string,
  ): Promise<Types.ApiResponseType<messagingApi.RoomUserProfileResponse>> {
    return this.clients.messagingApi.getRoomMemberProfileWithHttpInfo(
      roomId,
      userId,
    );
  }

  /**
   * Get multi-person chat member user IDs
   * @param roomId Room ID
   * @param start Value of the continuation token found in the `next` property of the JSON object returned in the response. Include this parameter to get the next array of user IDs for the members of the group.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-room-member-user-ids"> Documentation</a>
   */
  public async getRoomMembersIds(
    roomId: string,
    start?: string,
  ): Promise<messagingApi.MembersIdsResponse> {
    return this.clients.messagingApi.getRoomMembersIds(roomId, start);
  }

  /**
   * Get multi-person chat member user IDs.
   * This method includes HttpInfo object to return additional information.
   * @param roomId Room ID
   * @param start Value of the continuation token found in the `next` property of the JSON object returned in the response. Include this parameter to get the next array of user IDs for the members of the group.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-room-member-user-ids"> Documentation</a>
   */
  public async getRoomMembersIdsWithHttpInfo(
    roomId: string,
    start?: string,
  ): Promise<Types.ApiResponseType<messagingApi.MembersIdsResponse>> {
    return this.clients.messagingApi.getRoomMembersIdsWithHttpInfo(
      roomId,
      start,
    );
  }

  /**
   * Get webhook endpoint information
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-webhook-endpoint-information"> Documentation</a>
   */
  public async getWebhookEndpoint(): Promise<messagingApi.GetWebhookEndpointResponse> {
    return this.clients.messagingApi.getWebhookEndpoint();
  }

  /**
   * Get webhook endpoint information.
   * This method includes HttpInfo object to return additional information.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-webhook-endpoint-information"> Documentation</a>
   */
  public async getWebhookEndpointWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.GetWebhookEndpointResponse>
  > {
    return this.clients.messagingApi.getWebhookEndpointWithHttpInfo();
  }

  /**
   * Issue link token
   * @param userId User ID for the LINE account to be linked. Found in the `source` object of account link event objects. Do not use the LINE ID used in LINE.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#issue-link-token"> Documentation</a>
   */
  public async issueLinkToken(
    userId: string,
  ): Promise<messagingApi.IssueLinkTokenResponse> {
    return this.clients.messagingApi.issueLinkToken(userId);
  }

  /**
   * Issue link token.
   * This method includes HttpInfo object to return additional information.
   * @param userId User ID for the LINE account to be linked. Found in the `source` object of account link event objects. Do not use the LINE ID used in LINE.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#issue-link-token"> Documentation</a>
   */
  public async issueLinkTokenWithHttpInfo(
    userId: string,
  ): Promise<Types.ApiResponseType<messagingApi.IssueLinkTokenResponse>> {
    return this.clients.messagingApi.issueLinkTokenWithHttpInfo(userId);
  }

  /**
   * Leave group chat
   * @param groupId Group ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#leave-group"> Documentation</a>
   */
  public async leaveGroup(
    groupId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.leaveGroup(groupId);
  }

  /**
   * Leave group chat.
   * This method includes HttpInfo object to return additional information.
   * @param groupId Group ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#leave-group"> Documentation</a>
   */
  public async leaveGroupWithHttpInfo(
    groupId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.leaveGroupWithHttpInfo(groupId);
  }

  /**
   * Leave multi-person chat
   * @param roomId Room ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#leave-room"> Documentation</a>
   */
  public async leaveRoom(
    roomId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.leaveRoom(roomId);
  }

  /**
   * Leave multi-person chat.
   * This method includes HttpInfo object to return additional information.
   * @param roomId Room ID
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#leave-room"> Documentation</a>
   */
  public async leaveRoomWithHttpInfo(
    roomId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.leaveRoomWithHttpInfo(roomId);
  }

  /**
   * Link rich menu to user.
   * @param userId User ID. Found in the `source` object of webhook event objects. Do not use the LINE ID used in LINE.
   * @param richMenuId ID of a rich menu
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#link-rich-menu-to-user"> Documentation</a>
   */
  public async linkRichMenuIdToUser(
    userId: string,
    richMenuId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.linkRichMenuIdToUser(userId, richMenuId);
  }

  /**
   * Link rich menu to user..
   * This method includes HttpInfo object to return additional information.
   * @param userId User ID. Found in the `source` object of webhook event objects. Do not use the LINE ID used in LINE.
   * @param richMenuId ID of a rich menu
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#link-rich-menu-to-user"> Documentation</a>
   */
  public async linkRichMenuIdToUserWithHttpInfo(
    userId: string,
    richMenuId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.linkRichMenuIdToUserWithHttpInfo(
      userId,
      richMenuId,
    );
  }

  /**
   * Link rich menu to multiple users
   * @param richMenuBulkLinkRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#link-rich-menu-to-users"> Documentation</a>
   */
  public async linkRichMenuIdToUsers(
    richMenuBulkLinkRequest: messagingApi.RichMenuBulkLinkRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.linkRichMenuIdToUsers(
      richMenuBulkLinkRequest,
    );
  }

  /**
   * Link rich menu to multiple users.
   * This method includes HttpInfo object to return additional information.
   * @param richMenuBulkLinkRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#link-rich-menu-to-users"> Documentation</a>
   */
  public async linkRichMenuIdToUsersWithHttpInfo(
    richMenuBulkLinkRequest: messagingApi.RichMenuBulkLinkRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.linkRichMenuIdToUsersWithHttpInfo(
      richMenuBulkLinkRequest,
    );
  }

  /**
   * Get a paginated list of coupons.
   * @param status Filter coupons by their status.
   * @param start Pagination token to retrieve the next page of results.
   * @param limit Maximum number of coupons to return per request.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-coupons-list"> Documentation</a>
   */
  public async listCoupon(
    status?: Set<"DRAFT" | "RUNNING" | "CLOSED">,
    start?: string,
    limit?: number,
  ): Promise<messagingApi.MessagingApiPagerCouponListResponse> {
    return this.clients.messagingApi.listCoupon(status, start, limit);
  }

  /**
   * Get a paginated list of coupons..
   * This method includes HttpInfo object to return additional information.
   * @param status Filter coupons by their status.
   * @param start Pagination token to retrieve the next page of results.
   * @param limit Maximum number of coupons to return per request.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-coupons-list"> Documentation</a>
   */
  public async listCouponWithHttpInfo(
    status?: Set<"DRAFT" | "RUNNING" | "CLOSED">,
    start?: string,
    limit?: number,
  ): Promise<
    Types.ApiResponseType<messagingApi.MessagingApiPagerCouponListResponse>
  > {
    return this.clients.messagingApi.listCouponWithHttpInfo(
      status,
      start,
      limit,
    );
  }

  /**
   * Mark messages from users as read
   * @param markMessagesAsReadRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#mark-messages-from-users-as-read"> Documentation</a>
   */
  public async markMessagesAsRead(
    markMessagesAsReadRequest: messagingApi.MarkMessagesAsReadRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.markMessagesAsRead(
      markMessagesAsReadRequest,
    );
  }

  /**
   * Mark messages from users as read.
   * This method includes HttpInfo object to return additional information.
   * @param markMessagesAsReadRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#mark-messages-from-users-as-read"> Documentation</a>
   */
  public async markMessagesAsReadWithHttpInfo(
    markMessagesAsReadRequest: messagingApi.MarkMessagesAsReadRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.markMessagesAsReadWithHttpInfo(
      markMessagesAsReadRequest,
    );
  }

  /**
   * Mark messages from users as read by token
   * @param markMessagesAsReadByTokenRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#mark-as-read"> Documentation</a>
   */
  public async markMessagesAsReadByToken(
    markMessagesAsReadByTokenRequest: messagingApi.MarkMessagesAsReadByTokenRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.markMessagesAsReadByToken(
      markMessagesAsReadByTokenRequest,
    );
  }

  /**
   * Mark messages from users as read by token.
   * This method includes HttpInfo object to return additional information.
   * @param markMessagesAsReadByTokenRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#mark-as-read"> Documentation</a>
   */
  public async markMessagesAsReadByTokenWithHttpInfo(
    markMessagesAsReadByTokenRequest: messagingApi.MarkMessagesAsReadByTokenRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.markMessagesAsReadByTokenWithHttpInfo(
      markMessagesAsReadByTokenRequest,
    );
  }

  /**
   * An API that efficiently sends the same message to multiple user IDs. You can\'t send messages to group chats or multi-person chats.
   * @param multicastRequest
   * @param xLineRetryKey Retry key. Specifies the UUID in hexadecimal format (e.g., `123e4567-e89b-12d3-a456-426614174000`) generated by any method. The retry key isn\'t generated by LINE. Each developer must generate their own retry key.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-multicast-message"> Documentation</a>
   */
  public async multicast(
    multicastRequest: messagingApi.MulticastRequest,
    xLineRetryKey?: string,
  ): Promise<object> {
    return this.clients.messagingApi.multicast(multicastRequest, xLineRetryKey);
  }

  /**
   * An API that efficiently sends the same message to multiple user IDs. You can\'t send messages to group chats or multi-person chats..
   * This method includes HttpInfo object to return additional information.
   * @param multicastRequest
   * @param xLineRetryKey Retry key. Specifies the UUID in hexadecimal format (e.g., `123e4567-e89b-12d3-a456-426614174000`) generated by any method. The retry key isn\'t generated by LINE. Each developer must generate their own retry key.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-multicast-message"> Documentation</a>
   */
  public async multicastWithHttpInfo(
    multicastRequest: messagingApi.MulticastRequest,
    xLineRetryKey?: string,
  ): Promise<Types.ApiResponseType<object>> {
    return this.clients.messagingApi.multicastWithHttpInfo(
      multicastRequest,
      xLineRetryKey,
    );
  }

  /**
   * Send narrowcast message
   * @param narrowcastRequest
   * @param xLineRetryKey Retry key. Specifies the UUID in hexadecimal format (e.g., `123e4567-e89b-12d3-a456-426614174000`) generated by any method. The retry key isn\'t generated by LINE. Each developer must generate their own retry key.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-narrowcast-message"> Documentation</a>
   */
  public async narrowcast(
    narrowcastRequest: messagingApi.NarrowcastRequest,
    xLineRetryKey?: string,
  ): Promise<object> {
    return this.clients.messagingApi.narrowcast(
      narrowcastRequest,
      xLineRetryKey,
    );
  }

  /**
   * Send narrowcast message.
   * This method includes HttpInfo object to return additional information.
   * @param narrowcastRequest
   * @param xLineRetryKey Retry key. Specifies the UUID in hexadecimal format (e.g., `123e4567-e89b-12d3-a456-426614174000`) generated by any method. The retry key isn\'t generated by LINE. Each developer must generate their own retry key.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-narrowcast-message"> Documentation</a>
   */
  public async narrowcastWithHttpInfo(
    narrowcastRequest: messagingApi.NarrowcastRequest,
    xLineRetryKey?: string,
  ): Promise<Types.ApiResponseType<object>> {
    return this.clients.messagingApi.narrowcastWithHttpInfo(
      narrowcastRequest,
      xLineRetryKey,
    );
  }

  /**
   * Sends a message to a user, group chat, or multi-person chat at any time.
   * @param pushMessageRequest
   * @param xLineRetryKey Retry key. Specifies the UUID in hexadecimal format (e.g., `123e4567-e89b-12d3-a456-426614174000`) generated by any method. The retry key isn\'t generated by LINE. Each developer must generate their own retry key.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-push-message"> Documentation</a>
   */
  public async pushMessage(
    pushMessageRequest: messagingApi.PushMessageRequest,
    xLineRetryKey?: string,
  ): Promise<messagingApi.PushMessageResponse> {
    return this.clients.messagingApi.pushMessage(
      pushMessageRequest,
      xLineRetryKey,
    );
  }

  /**
   * Sends a message to a user, group chat, or multi-person chat at any time..
   * This method includes HttpInfo object to return additional information.
   * @param pushMessageRequest
   * @param xLineRetryKey Retry key. Specifies the UUID in hexadecimal format (e.g., `123e4567-e89b-12d3-a456-426614174000`) generated by any method. The retry key isn\'t generated by LINE. Each developer must generate their own retry key.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-push-message"> Documentation</a>
   */
  public async pushMessageWithHttpInfo(
    pushMessageRequest: messagingApi.PushMessageRequest,
    xLineRetryKey?: string,
  ): Promise<Types.ApiResponseType<messagingApi.PushMessageResponse>> {
    return this.clients.messagingApi.pushMessageWithHttpInfo(
      pushMessageRequest,
      xLineRetryKey,
    );
  }

  /**
   * Send LINE notification message
   * @param pnpMessagesRequest
   * @param xLineDeliveryTag String returned in the delivery.data property of the delivery completion event via Webhook.
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#send-line-notification-message"> Documentation</a>
   */
  public async pushMessagesByPhone(
    pnpMessagesRequest: messagingApi.PnpMessagesRequest,
    xLineDeliveryTag?: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.pushMessagesByPhone(
      pnpMessagesRequest,
      xLineDeliveryTag,
    );
  }

  /**
   * Send LINE notification message.
   * This method includes HttpInfo object to return additional information.
   * @param pnpMessagesRequest
   * @param xLineDeliveryTag String returned in the delivery.data property of the delivery completion event via Webhook.
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#send-line-notification-message"> Documentation</a>
   */
  public async pushMessagesByPhoneWithHttpInfo(
    pnpMessagesRequest: messagingApi.PnpMessagesRequest,
    xLineDeliveryTag?: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.pushMessagesByPhoneWithHttpInfo(
      pnpMessagesRequest,
      xLineDeliveryTag,
    );
  }

  /**
   * Send reply message
   * @param replyMessageRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-reply-message"> Documentation</a>
   */
  public async replyMessage(
    replyMessageRequest: messagingApi.ReplyMessageRequest,
  ): Promise<messagingApi.ReplyMessageResponse> {
    return this.clients.messagingApi.replyMessage(replyMessageRequest);
  }

  /**
   * Send reply message.
   * This method includes HttpInfo object to return additional information.
   * @param replyMessageRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-reply-message"> Documentation</a>
   */
  public async replyMessageWithHttpInfo(
    replyMessageRequest: messagingApi.ReplyMessageRequest,
  ): Promise<Types.ApiResponseType<messagingApi.ReplyMessageResponse>> {
    return this.clients.messagingApi.replyMessageWithHttpInfo(
      replyMessageRequest,
    );
  }

  /**
   * You can use this endpoint to batch control the rich menu linked to the users using the endpoint such as Link rich menu to user. The following operations are available:  1. Replace a rich menu with another rich menu for all users linked to a specific rich menu 2. Unlink a rich menu for all users linked to a specific rich menu 3. Unlink a rich menu for all users linked the rich menu
   * @param richMenuBatchRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#batch-control-rich-menus-of-users"> Documentation</a>
   */
  public async richMenuBatch(
    richMenuBatchRequest: messagingApi.RichMenuBatchRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.richMenuBatch(richMenuBatchRequest);
  }

  /**
   * You can use this endpoint to batch control the rich menu linked to the users using the endpoint such as Link rich menu to user. The following operations are available:  1. Replace a rich menu with another rich menu for all users linked to a specific rich menu 2. Unlink a rich menu for all users linked to a specific rich menu 3. Unlink a rich menu for all users linked the rich menu .
   * This method includes HttpInfo object to return additional information.
   * @param richMenuBatchRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#batch-control-rich-menus-of-users"> Documentation</a>
   */
  public async richMenuBatchWithHttpInfo(
    richMenuBatchRequest: messagingApi.RichMenuBatchRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.richMenuBatchWithHttpInfo(
      richMenuBatchRequest,
    );
  }

  /**
   * Set default rich menu
   * @param richMenuId ID of a rich menu
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#set-default-rich-menu"> Documentation</a>
   */
  public async setDefaultRichMenu(
    richMenuId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.setDefaultRichMenu(richMenuId);
  }

  /**
   * Set default rich menu.
   * This method includes HttpInfo object to return additional information.
   * @param richMenuId ID of a rich menu
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#set-default-rich-menu"> Documentation</a>
   */
  public async setDefaultRichMenuWithHttpInfo(
    richMenuId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.setDefaultRichMenuWithHttpInfo(richMenuId);
  }

  /**
   * Set webhook endpoint URL
   * @param setWebhookEndpointRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#set-webhook-endpoint-url"> Documentation</a>
   */
  public async setWebhookEndpoint(
    setWebhookEndpointRequest: messagingApi.SetWebhookEndpointRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.setWebhookEndpoint(
      setWebhookEndpointRequest,
    );
  }

  /**
   * Set webhook endpoint URL.
   * This method includes HttpInfo object to return additional information.
   * @param setWebhookEndpointRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#set-webhook-endpoint-url"> Documentation</a>
   */
  public async setWebhookEndpointWithHttpInfo(
    setWebhookEndpointRequest: messagingApi.SetWebhookEndpointRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.setWebhookEndpointWithHttpInfo(
      setWebhookEndpointRequest,
    );
  }

  /**
   * Display a loading animation in one-on-one chats between users and LINE Official Accounts.
   * @param showLoadingAnimationRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#display-a-loading-indicator"> Documentation</a>
   */
  public async showLoadingAnimation(
    showLoadingAnimationRequest: messagingApi.ShowLoadingAnimationRequest,
  ): Promise<object> {
    return this.clients.messagingApi.showLoadingAnimation(
      showLoadingAnimationRequest,
    );
  }

  /**
   * Display a loading animation in one-on-one chats between users and LINE Official Accounts..
   * This method includes HttpInfo object to return additional information.
   * @param showLoadingAnimationRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#display-a-loading-indicator"> Documentation</a>
   */
  public async showLoadingAnimationWithHttpInfo(
    showLoadingAnimationRequest: messagingApi.ShowLoadingAnimationRequest,
  ): Promise<Types.ApiResponseType<object>> {
    return this.clients.messagingApi.showLoadingAnimationWithHttpInfo(
      showLoadingAnimationRequest,
    );
  }

  /**
   * Test webhook endpoint
   * @param testWebhookEndpointRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#test-webhook-endpoint"> Documentation</a>
   */
  public async testWebhookEndpoint(
    testWebhookEndpointRequest?: messagingApi.TestWebhookEndpointRequest,
  ): Promise<messagingApi.TestWebhookEndpointResponse> {
    return this.clients.messagingApi.testWebhookEndpoint(
      testWebhookEndpointRequest,
    );
  }

  /**
   * Test webhook endpoint.
   * This method includes HttpInfo object to return additional information.
   * @param testWebhookEndpointRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#test-webhook-endpoint"> Documentation</a>
   */
  public async testWebhookEndpointWithHttpInfo(
    testWebhookEndpointRequest?: messagingApi.TestWebhookEndpointRequest,
  ): Promise<Types.ApiResponseType<messagingApi.TestWebhookEndpointResponse>> {
    return this.clients.messagingApi.testWebhookEndpointWithHttpInfo(
      testWebhookEndpointRequest,
    );
  }

  /**
   * Unlink rich menu from user
   * @param userId User ID. Found in the `source` object of webhook event objects. Do not use the LINE ID used in LINE.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#unlink-rich-menu-from-user"> Documentation</a>
   */
  public async unlinkRichMenuIdFromUser(
    userId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.unlinkRichMenuIdFromUser(userId);
  }

  /**
   * Unlink rich menu from user.
   * This method includes HttpInfo object to return additional information.
   * @param userId User ID. Found in the `source` object of webhook event objects. Do not use the LINE ID used in LINE.
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#unlink-rich-menu-from-user"> Documentation</a>
   */
  public async unlinkRichMenuIdFromUserWithHttpInfo(
    userId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.unlinkRichMenuIdFromUserWithHttpInfo(
      userId,
    );
  }

  /**
   * Unlink rich menus from multiple users
   * @param richMenuBulkUnlinkRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#unlink-rich-menu-from-users"> Documentation</a>
   */
  public async unlinkRichMenuIdFromUsers(
    richMenuBulkUnlinkRequest: messagingApi.RichMenuBulkUnlinkRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.unlinkRichMenuIdFromUsers(
      richMenuBulkUnlinkRequest,
    );
  }

  /**
   * Unlink rich menus from multiple users.
   * This method includes HttpInfo object to return additional information.
   * @param richMenuBulkUnlinkRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#unlink-rich-menu-from-users"> Documentation</a>
   */
  public async unlinkRichMenuIdFromUsersWithHttpInfo(
    richMenuBulkUnlinkRequest: messagingApi.RichMenuBulkUnlinkRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.unlinkRichMenuIdFromUsersWithHttpInfo(
      richMenuBulkUnlinkRequest,
    );
  }

  /**
   * Update rich menu alias
   * @param richMenuAliasId The rich menu alias ID you want to update.
   * @param updateRichMenuAliasRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#update-rich-menu-alias"> Documentation</a>
   */
  public async updateRichMenuAlias(
    richMenuAliasId: string,
    updateRichMenuAliasRequest: messagingApi.UpdateRichMenuAliasRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.updateRichMenuAlias(
      richMenuAliasId,
      updateRichMenuAliasRequest,
    );
  }

  /**
   * Update rich menu alias.
   * This method includes HttpInfo object to return additional information.
   * @param richMenuAliasId The rich menu alias ID you want to update.
   * @param updateRichMenuAliasRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#update-rich-menu-alias"> Documentation</a>
   */
  public async updateRichMenuAliasWithHttpInfo(
    richMenuAliasId: string,
    updateRichMenuAliasRequest: messagingApi.UpdateRichMenuAliasRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.updateRichMenuAliasWithHttpInfo(
      richMenuAliasId,
      updateRichMenuAliasRequest,
    );
  }

  /**
   * Validate message objects of a broadcast message
   * @param validateMessageRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-broadcast-message"> Documentation</a>
   */
  public async validateBroadcast(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validateBroadcast(validateMessageRequest);
  }

  /**
   * Validate message objects of a broadcast message.
   * This method includes HttpInfo object to return additional information.
   * @param validateMessageRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-broadcast-message"> Documentation</a>
   */
  public async validateBroadcastWithHttpInfo(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.validateBroadcastWithHttpInfo(
      validateMessageRequest,
    );
  }

  /**
   * Validate message objects of a multicast message
   * @param validateMessageRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-multicast-message"> Documentation</a>
   */
  public async validateMulticast(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validateMulticast(validateMessageRequest);
  }

  /**
   * Validate message objects of a multicast message.
   * This method includes HttpInfo object to return additional information.
   * @param validateMessageRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-multicast-message"> Documentation</a>
   */
  public async validateMulticastWithHttpInfo(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.validateMulticastWithHttpInfo(
      validateMessageRequest,
    );
  }

  /**
   * Validate message objects of a narrowcast message
   * @param validateMessageRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-narrowcast-message"> Documentation</a>
   */
  public async validateNarrowcast(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validateNarrowcast(validateMessageRequest);
  }

  /**
   * Validate message objects of a narrowcast message.
   * This method includes HttpInfo object to return additional information.
   * @param validateMessageRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-narrowcast-message"> Documentation</a>
   */
  public async validateNarrowcastWithHttpInfo(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.validateNarrowcastWithHttpInfo(
      validateMessageRequest,
    );
  }

  /**
   * Validate message objects of a push message
   * @param validateMessageRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-push-message"> Documentation</a>
   */
  public async validatePush(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validatePush(validateMessageRequest);
  }

  /**
   * Validate message objects of a push message.
   * This method includes HttpInfo object to return additional information.
   * @param validateMessageRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-push-message"> Documentation</a>
   */
  public async validatePushWithHttpInfo(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.validatePushWithHttpInfo(
      validateMessageRequest,
    );
  }

  /**
   * Validate message objects of a reply message
   * @param validateMessageRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-reply-message"> Documentation</a>
   */
  public async validateReply(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validateReply(validateMessageRequest);
  }

  /**
   * Validate message objects of a reply message.
   * This method includes HttpInfo object to return additional information.
   * @param validateMessageRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-reply-message"> Documentation</a>
   */
  public async validateReplyWithHttpInfo(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.validateReplyWithHttpInfo(
      validateMessageRequest,
    );
  }

  /**
   * Validate a request body of the Replace or unlink the linked rich menus in batches endpoint.
   * @param richMenuBatchRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-batch-control-rich-menus-request"> Documentation</a>
   */
  public async validateRichMenuBatchRequest(
    richMenuBatchRequest: messagingApi.RichMenuBatchRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validateRichMenuBatchRequest(
      richMenuBatchRequest,
    );
  }

  /**
   * Validate a request body of the Replace or unlink the linked rich menus in batches endpoint..
   * This method includes HttpInfo object to return additional information.
   * @param richMenuBatchRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-batch-control-rich-menus-request"> Documentation</a>
   */
  public async validateRichMenuBatchRequestWithHttpInfo(
    richMenuBatchRequest: messagingApi.RichMenuBatchRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.validateRichMenuBatchRequestWithHttpInfo(
      richMenuBatchRequest,
    );
  }

  /**
   * Validate rich menu object
   * @param richMenuRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-rich-menu-object"> Documentation</a>
   */
  public async validateRichMenuObject(
    richMenuRequest: messagingApi.RichMenuRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validateRichMenuObject(richMenuRequest);
  }

  /**
   * Validate rich menu object.
   * This method includes HttpInfo object to return additional information.
   * @param richMenuRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-rich-menu-object"> Documentation</a>
   */
  public async validateRichMenuObjectWithHttpInfo(
    richMenuRequest: messagingApi.RichMenuRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.validateRichMenuObjectWithHttpInfo(
      richMenuRequest,
    );
  }

  /**
   * Download image, video, and audio data sent from users.
   * @param messageId Message ID of video or audio
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-content"> Documentation</a>
   */
  public async getMessageContent(messageId: string): Promise<Readable> {
    return this.clients.messagingApiBlob.getMessageContent(messageId);
  }

  /**
   * Download image, video, and audio data sent from users..
   * This method includes HttpInfo object to return additional information.
   * @param messageId Message ID of video or audio
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-content"> Documentation</a>
   */
  public async getMessageContentWithHttpInfo(
    messageId: string,
  ): Promise<Types.ApiResponseType<Readable>> {
    return this.clients.messagingApiBlob.getMessageContentWithHttpInfo(
      messageId,
    );
  }

  /**
   * Get a preview image of the image or video
   * @param messageId Message ID of image or video
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-image-or-video-preview"> Documentation</a>
   */
  public async getMessageContentPreview(messageId: string): Promise<Readable> {
    return this.clients.messagingApiBlob.getMessageContentPreview(messageId);
  }

  /**
   * Get a preview image of the image or video.
   * This method includes HttpInfo object to return additional information.
   * @param messageId Message ID of image or video
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-image-or-video-preview"> Documentation</a>
   */
  public async getMessageContentPreviewWithHttpInfo(
    messageId: string,
  ): Promise<Types.ApiResponseType<Readable>> {
    return this.clients.messagingApiBlob.getMessageContentPreviewWithHttpInfo(
      messageId,
    );
  }

  /**
   * Verify the preparation status of a video or audio for getting
   * @param messageId Message ID of video or audio
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#verify-video-or-audio-preparation-status"> Documentation</a>
   */
  public async getMessageContentTranscodingByMessageId(
    messageId: string,
  ): Promise<messagingApi.GetMessageContentTranscodingResponse> {
    return this.clients.messagingApiBlob.getMessageContentTranscodingByMessageId(
      messageId,
    );
  }

  /**
   * Verify the preparation status of a video or audio for getting.
   * This method includes HttpInfo object to return additional information.
   * @param messageId Message ID of video or audio
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#verify-video-or-audio-preparation-status"> Documentation</a>
   */
  public async getMessageContentTranscodingByMessageIdWithHttpInfo(
    messageId: string,
  ): Promise<
    Types.ApiResponseType<messagingApi.GetMessageContentTranscodingResponse>
  > {
    return this.clients.messagingApiBlob.getMessageContentTranscodingByMessageIdWithHttpInfo(
      messageId,
    );
  }

  /**
   * Download rich menu image.
   * @param richMenuId ID of the rich menu with the image to be downloaded
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#download-rich-menu-image"> Documentation</a>
   */
  public async getRichMenuImage(richMenuId: string): Promise<Readable> {
    return this.clients.messagingApiBlob.getRichMenuImage(richMenuId);
  }

  /**
   * Download rich menu image..
   * This method includes HttpInfo object to return additional information.
   * @param richMenuId ID of the rich menu with the image to be downloaded
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#download-rich-menu-image"> Documentation</a>
   */
  public async getRichMenuImageWithHttpInfo(
    richMenuId: string,
  ): Promise<Types.ApiResponseType<Readable>> {
    return this.clients.messagingApiBlob.getRichMenuImageWithHttpInfo(
      richMenuId,
    );
  }

  /**
   * Upload rich menu image
   * @param richMenuId The ID of the rich menu to attach the image to
   * @param body
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#upload-rich-menu-image"> Documentation</a>
   */
  public async setRichMenuImage(
    richMenuId: string,
    body?: Blob,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApiBlob.setRichMenuImage(richMenuId, body);
  }

  /**
   * Upload rich menu image.
   * This method includes HttpInfo object to return additional information.
   * @param richMenuId The ID of the rich menu to attach the image to
   * @param body
   *
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#upload-rich-menu-image"> Documentation</a>
   */
  public async setRichMenuImageWithHttpInfo(
    richMenuId: string,
    body?: Blob,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApiBlob.setRichMenuImageWithHttpInfo(
      richMenuId,
      body,
    );
  }

  /**
   * If the Standby Channel wants to take the initiative (Chat Control), it calls the Acquire Control API. The channel that was previously an Active Channel will automatically switch to a Standby Channel.
   * @param chatId The `userId`, `roomId`, or `groupId`
   * @param acquireChatControlRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#acquire-control-api"> Documentation</a>
   */
  public async acquireChatControl(
    chatId: string,
    acquireChatControlRequest?: moduleOperation.AcquireChatControlRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.lineModule.acquireChatControl(
      chatId,
      acquireChatControlRequest,
    );
  }

  /**
   * If the Standby Channel wants to take the initiative (Chat Control), it calls the Acquire Control API. The channel that was previously an Active Channel will automatically switch to a Standby Channel. .
   * This method includes HttpInfo object to return additional information.
   * @param chatId The `userId`, `roomId`, or `groupId`
   * @param acquireChatControlRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#acquire-control-api"> Documentation</a>
   */
  public async acquireChatControlWithHttpInfo(
    chatId: string,
    acquireChatControlRequest?: moduleOperation.AcquireChatControlRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.lineModule.acquireChatControlWithHttpInfo(
      chatId,
      acquireChatControlRequest,
    );
  }

  /**
   * The module channel admin calls the Detach API to detach the module channel from a LINE Official Account.
   * @param detachModuleRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#unlink-detach-module-channel-by-operation-mc-admin"> Documentation</a>
   */
  public async detachModule(
    detachModuleRequest?: moduleOperation.DetachModuleRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.lineModule.detachModule(detachModuleRequest);
  }

  /**
   * The module channel admin calls the Detach API to detach the module channel from a LINE Official Account..
   * This method includes HttpInfo object to return additional information.
   * @param detachModuleRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#unlink-detach-module-channel-by-operation-mc-admin"> Documentation</a>
   */
  public async detachModuleWithHttpInfo(
    detachModuleRequest?: moduleOperation.DetachModuleRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.lineModule.detachModuleWithHttpInfo(
      detachModuleRequest,
    );
  }

  /**
   * Gets a list of basic information about the bots of multiple LINE Official Accounts that have attached module channels.
   * @param start Value of the continuation token found in the next property of the JSON object returned in the response. If you can\'t get all basic information about the bots in one request, include this parameter to get the remaining array.
   * @param limit Specify the maximum number of bots that you get basic information from. The default value is 100. Max value: 100
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#get-multiple-bot-info-api"> Documentation</a>
   */
  public async getModules(
    start?: string,
    limit?: number,
  ): Promise<moduleOperation.GetModulesResponse> {
    return this.clients.lineModule.getModules(start, limit);
  }

  /**
   * Gets a list of basic information about the bots of multiple LINE Official Accounts that have attached module channels..
   * This method includes HttpInfo object to return additional information.
   * @param start Value of the continuation token found in the next property of the JSON object returned in the response. If you can\'t get all basic information about the bots in one request, include this parameter to get the remaining array.
   * @param limit Specify the maximum number of bots that you get basic information from. The default value is 100. Max value: 100
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#get-multiple-bot-info-api"> Documentation</a>
   */
  public async getModulesWithHttpInfo(
    start?: string,
    limit?: number,
  ): Promise<Types.ApiResponseType<moduleOperation.GetModulesResponse>> {
    return this.clients.lineModule.getModulesWithHttpInfo(start, limit);
  }

  /**
   * To return the initiative (Chat Control) of Active Channel to Primary Channel, call the Release Control API.
   * @param chatId The `userId`, `roomId`, or `groupId`
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#release-control-api"> Documentation</a>
   */
  public async releaseChatControl(
    chatId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.lineModule.releaseChatControl(chatId);
  }

  /**
   * To return the initiative (Chat Control) of Active Channel to Primary Channel, call the Release Control API. .
   * This method includes HttpInfo object to return additional information.
   * @param chatId The `userId`, `roomId`, or `groupId`
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#release-control-api"> Documentation</a>
   */
  public async releaseChatControlWithHttpInfo(
    chatId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.lineModule.releaseChatControlWithHttpInfo(chatId);
  }

  /**
   * Attach by operation of the module channel provider
   * @param grantType authorization_code
   * @param code Authorization code received from the LINE Platform.
   * @param redirectUri Specify the redirect_uri specified in the URL for authentication and authorization.
   * @param codeVerifier Specify when using PKCE (Proof Key for Code Exchange) defined in the OAuth 2.0 extension specification as a countermeasure against authorization code interception attacks.
   * @param clientId Instead of using Authorization header, you can use this parameter to specify the channel ID of the module channel. You can find the channel ID of the module channel in the LINE Developers Console.
   * @param clientSecret Instead of using Authorization header, you can use this parameter to specify the channel secret of the module channel. You can find the channel secret of the module channel in the LINE Developers Console.
   * @param region If you specified a value for region in the URL for authentication and authorization, specify the same value.
   * @param basicSearchId If you specified a value for basic_search_id in the URL for authentication and authorization, specify the same value.
   * @param scope If you specified a value for scope in the URL for authentication and authorization, specify the same value.
   * @param brandType If you specified a value for brand_type in the URL for authentication and authorization, specify the same value.
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#link-attach-by-operation-module-channel-provider"> Documentation</a>
   */
  public async attachModule(
    grantType: string,
    code: string,
    redirectUri: string,
    codeVerifier?: string,
    clientId?: string,
    clientSecret?: string,
    region?: string,
    basicSearchId?: string,
    scope?: string,
    brandType?: string,
  ): Promise<moduleAttach.AttachModuleResponse> {
    return this.clients.lineModuleAttach.attachModule(
      grantType,
      code,
      redirectUri,
      codeVerifier,
      clientId,
      clientSecret,
      region,
      basicSearchId,
      scope,
      brandType,
    );
  }

  /**
   * Attach by operation of the module channel provider.
   * This method includes HttpInfo object to return additional information.
   * @param grantType authorization_code
   * @param code Authorization code received from the LINE Platform.
   * @param redirectUri Specify the redirect_uri specified in the URL for authentication and authorization.
   * @param codeVerifier Specify when using PKCE (Proof Key for Code Exchange) defined in the OAuth 2.0 extension specification as a countermeasure against authorization code interception attacks.
   * @param clientId Instead of using Authorization header, you can use this parameter to specify the channel ID of the module channel. You can find the channel ID of the module channel in the LINE Developers Console.
   * @param clientSecret Instead of using Authorization header, you can use this parameter to specify the channel secret of the module channel. You can find the channel secret of the module channel in the LINE Developers Console.
   * @param region If you specified a value for region in the URL for authentication and authorization, specify the same value.
   * @param basicSearchId If you specified a value for basic_search_id in the URL for authentication and authorization, specify the same value.
   * @param scope If you specified a value for scope in the URL for authentication and authorization, specify the same value.
   * @param brandType If you specified a value for brand_type in the URL for authentication and authorization, specify the same value.
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#link-attach-by-operation-module-channel-provider"> Documentation</a>
   */
  public async attachModuleWithHttpInfo(
    grantType: string,
    code: string,
    redirectUri: string,
    codeVerifier?: string,
    clientId?: string,
    clientSecret?: string,
    region?: string,
    basicSearchId?: string,
    scope?: string,
    brandType?: string,
  ): Promise<Types.ApiResponseType<moduleAttach.AttachModuleResponse>> {
    return this.clients.lineModuleAttach.attachModuleWithHttpInfo(
      grantType,
      code,
      redirectUri,
      codeVerifier,
      clientId,
      clientSecret,
      region,
      basicSearchId,
      scope,
      brandType,
    );
  }

  /**
   * Sends a mission sticker.
   * @param missionStickerRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#send-mission-stickers-v3"> Documentation</a>
   */
  public async missionStickerV3(
    missionStickerRequest: shop.MissionStickerRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.shop.missionStickerV3(missionStickerRequest);
  }

  /**
   * Sends a mission sticker..
   * This method includes HttpInfo object to return additional information.
   * @param missionStickerRequest
   *
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#send-mission-stickers-v3"> Documentation</a>
   */
  public async missionStickerV3WithHttpInfo(
    missionStickerRequest: shop.MissionStickerRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.shop.missionStickerV3WithHttpInfo(
      missionStickerRequest,
    );
  }
}
