/**
 * 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).
   * Calls `GET https://api.line.me/v2/bot/insight/demographic`.
   * To inspect the HTTP status code or response headers, use {@link getFriendsDemographicsWithHttpInfo}.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-demographic">LINE Developers 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).
   * Calls `GET https://api.line.me/v2/bot/insight/demographic`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-demographic">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/insight/message/event`.
   * To inspect the HTTP status code or response headers, use {@link getMessageEventWithHttpInfo}.
   * @summary Get user interaction statistics
   * @param requestId Request ID of a narrowcast message or broadcast message. Each Messaging API request has a request ID.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-message-event">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/insight/message/event`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @summary Get user interaction statistics
   * @param requestId Request ID of a narrowcast message or broadcast message. Each Messaging API request has a request ID.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-message-event">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/insight/followers`.
   * To inspect the HTTP status code or response headers, use {@link getNumberOfFollowersWithHttpInfo}.
   * @summary Get number of followers
   * @param date Date for which to retrieve the number of followers.  Format: yyyyMMdd (e.g. 20191231) Timezone: UTC+9
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-followers">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/insight/followers`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @summary Get number of followers
   * @param date Date for which to retrieve the number of followers.  Format: yyyyMMdd (e.g. 20191231) Timezone: UTC+9
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-followers">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/insight/message/delivery`.
   * To inspect the HTTP status code or response headers, use {@link getNumberOfMessageDeliveriesWithHttpInfo}.
   * @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
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-delivery-messages">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/insight/message/delivery`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-delivery-messages">LINE Developers documentation</a>
   */
  public async getNumberOfMessageDeliveriesWithHttpInfo(
    date: string,
  ): Promise<
    Types.ApiResponseType<insight.GetNumberOfMessageDeliveriesResponse>
  > {
    return this.clients.insight.getNumberOfMessageDeliveriesWithHttpInfo(date);
  }

  /**
   * Gets rich menu statistics broken down by day for the specified period, for a rich menu created via the Messaging API. Returns the daily impression count for the whole rich menu and the daily click count for each tappable area. When the total number of unique clicks during the period is below the privacy threshold, only `richMenuId` is returned and the other fields are omitted.
   * Calls `GET https://api.line.me/v2/bot/insight/richmenu/{richMenuId}/daily`.
   * To inspect the HTTP status code or response headers, use {@link getRichMenuInsightDailyWithHttpInfo}.
   * @summary Get rich menu insight daily
   * @param richMenuId ID of the rich menu created via the Messaging API.
   * @param from Start date of the aggregation period (inclusive). Must be within the most recent 3 years.  Format: yyyyMMdd (e.g. 20260213) Time zone: UTC+9
   * @param to End date of the aggregation period (inclusive). The end date can be specified for up to 99 days after the start date.  Format: yyyyMMdd (e.g. 20260215) Time zone: UTC+9
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-insight-daily">LINE Developers documentation</a>
   */
  public async getRichMenuInsightDaily(
    richMenuId: string,
    from: string,
    to: string,
  ): Promise<insight.GetRichMenuInsightDailyResponse> {
    return this.clients.insight.getRichMenuInsightDaily(richMenuId, from, to);
  }

  /**
   * Gets rich menu statistics broken down by day for the specified period, for a rich menu created via the Messaging API. Returns the daily impression count for the whole rich menu and the daily click count for each tappable area. When the total number of unique clicks during the period is below the privacy threshold, only `richMenuId` is returned and the other fields are omitted.
   * Calls `GET https://api.line.me/v2/bot/insight/richmenu/{richMenuId}/daily`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @summary Get rich menu insight daily
   * @param richMenuId ID of the rich menu created via the Messaging API.
   * @param from Start date of the aggregation period (inclusive). Must be within the most recent 3 years.  Format: yyyyMMdd (e.g. 20260213) Time zone: UTC+9
   * @param to End date of the aggregation period (inclusive). The end date can be specified for up to 99 days after the start date.  Format: yyyyMMdd (e.g. 20260215) Time zone: UTC+9
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-insight-daily">LINE Developers documentation</a>
   */
  public async getRichMenuInsightDailyWithHttpInfo(
    richMenuId: string,
    from: string,
    to: string,
  ): Promise<Types.ApiResponseType<insight.GetRichMenuInsightDailyResponse>> {
    return this.clients.insight.getRichMenuInsightDailyWithHttpInfo(
      richMenuId,
      from,
      to,
    );
  }

  /**
   * Gets a summary of rich menu statistics for the specified period, for a rich menu created via the Messaging API. Returns the total impression count for the whole rich menu and the click count for each tappable area, aggregated over the entire period as a single result. When the total number of unique clicks during the period is below the privacy threshold, only `richMenuId` is returned and the other fields are omitted.
   * Calls `GET https://api.line.me/v2/bot/insight/richmenu/{richMenuId}/summary`.
   * To inspect the HTTP status code or response headers, use {@link getRichMenuInsightSummaryWithHttpInfo}.
   * @summary Get rich menu insight summary
   * @param richMenuId ID of the rich menu created via the Messaging API.
   * @param from Start date of the aggregation period (inclusive). Must be within the most recent 3 years.  Format: yyyyMMdd (e.g. 20260213) Time zone: UTC+9
   * @param to End date of the aggregation period (inclusive). The end date can be specified for up to 396 days after the start date.  Format: yyyyMMdd (e.g. 20260215) Time zone: UTC+9
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-insight-summary">LINE Developers documentation</a>
   */
  public async getRichMenuInsightSummary(
    richMenuId: string,
    from: string,
    to: string,
  ): Promise<insight.GetRichMenuInsightSummaryResponse> {
    return this.clients.insight.getRichMenuInsightSummary(richMenuId, from, to);
  }

  /**
   * Gets a summary of rich menu statistics for the specified period, for a rich menu created via the Messaging API. Returns the total impression count for the whole rich menu and the click count for each tappable area, aggregated over the entire period as a single result. When the total number of unique clicks during the period is below the privacy threshold, only `richMenuId` is returned and the other fields are omitted.
   * Calls `GET https://api.line.me/v2/bot/insight/richmenu/{richMenuId}/summary`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @summary Get rich menu insight summary
   * @param richMenuId ID of the rich menu created via the Messaging API.
   * @param from Start date of the aggregation period (inclusive). Must be within the most recent 3 years.  Format: yyyyMMdd (e.g. 20260213) Time zone: UTC+9
   * @param to End date of the aggregation period (inclusive). The end date can be specified for up to 396 days after the start date.  Format: yyyyMMdd (e.g. 20260215) Time zone: UTC+9
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-insight-summary">LINE Developers documentation</a>
   */
  public async getRichMenuInsightSummaryWithHttpInfo(
    richMenuId: string,
    from: string,
    to: string,
  ): Promise<Types.ApiResponseType<insight.GetRichMenuInsightSummaryResponse>> {
    return this.clients.insight.getRichMenuInsightSummaryWithHttpInfo(
      richMenuId,
      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.
   * Calls `GET https://api.line.me/v2/bot/insight/message/event/aggregation`.
   * To inspect the HTTP status code or response headers, use {@link getStatisticsPerUnitWithHttpInfo}.
   * @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
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-statistics-per-unit">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/insight/message/event/aggregation`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-statistics-per-unit">LINE Developers 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
   * Calls `POST https://api.line.me/liff/v1/apps`.
   * To inspect the HTTP status code or response headers, use {@link addLIFFAppWithHttpInfo}.
   * @summary Create LIFF app
   * @param addLiffAppRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#add-liff-app">LINE Developers documentation</a>
   */
  public async addLIFFApp(
    addLiffAppRequest: liff.AddLiffAppRequest,
  ): Promise<liff.AddLiffAppResponse> {
    return this.clients.liff.addLIFFApp(addLiffAppRequest);
  }

  /**
   * Adding the LIFF app to a channel
   * Calls `POST https://api.line.me/liff/v1/apps`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @summary Create LIFF app
   * @param addLiffAppRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#add-liff-app">LINE Developers 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.
   * Calls `DELETE https://api.line.me/liff/v1/apps/{liffId}`.
   * To inspect the HTTP status code or response headers, use {@link deleteLIFFAppWithHttpInfo}.
   * @summary Delete LIFF app from a channel
   * @param liffId ID of the LIFF app to be updated
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#delete-liff-app">LINE Developers documentation</a>
   */
  public async deleteLIFFApp(
    liffId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.liff.deleteLIFFApp(liffId);
  }

  /**
   * Deletes a LIFF app from a channel.
   * Calls `DELETE https://api.line.me/liff/v1/apps/{liffId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @summary Delete LIFF app from a channel
   * @param liffId ID of the LIFF app to be updated
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#delete-liff-app">LINE Developers 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.
   * Calls `GET https://api.line.me/liff/v1/apps`.
   * To inspect the HTTP status code or response headers, use {@link getAllLIFFAppsWithHttpInfo}.
   * @summary Get all LIFF apps
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#get-all-liff-apps">LINE Developers documentation</a>
   */
  public async getAllLIFFApps(): Promise<liff.GetAllLiffAppsResponse> {
    return this.clients.liff.getAllLIFFApps();
  }

  /**
   * Gets information on all the LIFF apps added to the channel.
   * Calls `GET https://api.line.me/liff/v1/apps`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @summary Get all LIFF apps
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#get-all-liff-apps">LINE Developers documentation</a>
   */
  public async getAllLIFFAppsWithHttpInfo(): Promise<
    Types.ApiResponseType<liff.GetAllLiffAppsResponse>
  > {
    return this.clients.liff.getAllLIFFAppsWithHttpInfo();
  }

  /**
   * Update LIFF app settings
   * Calls `PUT https://api.line.me/liff/v1/apps/{liffId}`.
   * To inspect the HTTP status code or response headers, use {@link updateLIFFAppWithHttpInfo}.
   * @summary Update LIFF app from a channel
   * @param liffId ID of the LIFF app to be updated
   * @param updateLiffAppRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#update-liff-app">LINE Developers documentation</a>
   */
  public async updateLIFFApp(
    liffId: string,
    updateLiffAppRequest: liff.UpdateLiffAppRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.liff.updateLIFFApp(liffId, updateLiffAppRequest);
  }

  /**
   * Update LIFF app settings
   * Calls `PUT https://api.line.me/liff/v1/apps/{liffId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @summary Update LIFF app from a channel
   * @param liffId ID of the LIFF app to be updated
   * @param updateLiffAppRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/liff-server/#update-liff-app">LINE Developers 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)
   * Calls `PUT https://api.line.me/v2/bot/audienceGroup/upload`.
   * To inspect the HTTP status code or response headers, use {@link addAudienceToAudienceGroupWithHttpInfo}.
   * @param addAudienceToAudienceGroupRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#update-upload-audience-group">LINE Developers 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)
   * Calls `PUT https://api.line.me/v2/bot/audienceGroup/upload`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param addAudienceToAudienceGroupRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#update-upload-audience-group">LINE Developers 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)
   * Calls `POST https://api.line.me/v2/bot/audienceGroup/upload`.
   * To inspect the HTTP status code or response headers, use {@link createAudienceGroupWithHttpInfo}.
   * @param createAudienceGroupRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-upload-audience-group">LINE Developers 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)
   * Calls `POST https://api.line.me/v2/bot/audienceGroup/upload`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param createAudienceGroupRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-upload-audience-group">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/audienceGroup/click`.
   * To inspect the HTTP status code or response headers, use {@link createClickBasedAudienceGroupWithHttpInfo}.
   * @param createClickBasedAudienceGroupRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-click-audience-group">LINE Developers documentation</a>
   */
  public async createClickBasedAudienceGroup(
    createClickBasedAudienceGroupRequest: manageAudience.CreateClickBasedAudienceGroupRequest,
  ): Promise<manageAudience.CreateClickBasedAudienceGroupResponse> {
    return this.clients.manageAudience.createClickBasedAudienceGroup(
      createClickBasedAudienceGroupRequest,
    );
  }

  /**
   * Create audience for click-based retargeting
   * Calls `POST https://api.line.me/v2/bot/audienceGroup/click`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param createClickBasedAudienceGroupRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-click-audience-group">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/audienceGroup/imp`.
   * To inspect the HTTP status code or response headers, use {@link createImpBasedAudienceGroupWithHttpInfo}.
   * @param createImpBasedAudienceGroupRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-imp-audience-group">LINE Developers documentation</a>
   */
  public async createImpBasedAudienceGroup(
    createImpBasedAudienceGroupRequest: manageAudience.CreateImpBasedAudienceGroupRequest,
  ): Promise<manageAudience.CreateImpBasedAudienceGroupResponse> {
    return this.clients.manageAudience.createImpBasedAudienceGroup(
      createImpBasedAudienceGroupRequest,
    );
  }

  /**
   * Create audience for impression-based retargeting
   * Calls `POST https://api.line.me/v2/bot/audienceGroup/imp`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param createImpBasedAudienceGroupRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-imp-audience-group">LINE Developers documentation</a>
   */
  public async createImpBasedAudienceGroupWithHttpInfo(
    createImpBasedAudienceGroupRequest: manageAudience.CreateImpBasedAudienceGroupRequest,
  ): Promise<
    Types.ApiResponseType<manageAudience.CreateImpBasedAudienceGroupResponse>
  > {
    return this.clients.manageAudience.createImpBasedAudienceGroupWithHttpInfo(
      createImpBasedAudienceGroupRequest,
    );
  }

  /**
   * Delete audience
   * Calls `DELETE https://api.line.me/v2/bot/audienceGroup/{audienceGroupId}`.
   * To inspect the HTTP status code or response headers, use {@link deleteAudienceGroupWithHttpInfo}.
   * @param audienceGroupId The audience ID.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#delete-audience-group">LINE Developers documentation</a>
   */
  public async deleteAudienceGroup(
    audienceGroupId: number,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.manageAudience.deleteAudienceGroup(audienceGroupId);
  }

  /**
   * Delete audience
   * Calls `DELETE https://api.line.me/v2/bot/audienceGroup/{audienceGroupId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param audienceGroupId The audience ID.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#delete-audience-group">LINE Developers documentation</a>
   */
  public async deleteAudienceGroupWithHttpInfo(
    audienceGroupId: number,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.manageAudience.deleteAudienceGroupWithHttpInfo(
      audienceGroupId,
    );
  }

  /**
   * Gets audience data.
   * Calls `GET https://api.line.me/v2/bot/audienceGroup/{audienceGroupId}`.
   * To inspect the HTTP status code or response headers, use {@link getAudienceDataWithHttpInfo}.
   * @param audienceGroupId The audience ID.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-audience-group">LINE Developers documentation</a>
   */
  public async getAudienceData(
    audienceGroupId: number,
  ): Promise<manageAudience.GetAudienceDataResponse> {
    return this.clients.manageAudience.getAudienceData(audienceGroupId);
  }

  /**
   * Gets audience data.
   * Calls `GET https://api.line.me/v2/bot/audienceGroup/{audienceGroupId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param audienceGroupId The audience ID.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-audience-group">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/audienceGroup/list`.
   * To inspect the HTTP status code or response headers, use {@link getAudienceGroupsWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-audience-groups">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/audienceGroup/list`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-audience-groups">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/audienceGroup/shared/{audienceGroupId}`.
   * To inspect the HTTP status code or response headers, use {@link getSharedAudienceDataWithHttpInfo}.
   * @param audienceGroupId The audience ID.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-shared-audience">LINE Developers documentation</a>
   */
  public async getSharedAudienceData(
    audienceGroupId: number,
  ): Promise<manageAudience.GetSharedAudienceDataResponse> {
    return this.clients.manageAudience.getSharedAudienceData(audienceGroupId);
  }

  /**
   * Gets audience data.
   * Calls `GET https://api.line.me/v2/bot/audienceGroup/shared/{audienceGroupId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param audienceGroupId The audience ID.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-shared-audience">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/audienceGroup/shared/list`.
   * To inspect the HTTP status code or response headers, use {@link getSharedAudienceGroupsWithHttpInfo}.
   * @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
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-shared-audience-list">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/audienceGroup/shared/list`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-shared-audience-list">LINE Developers 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.
   * Calls `PUT https://api.line.me/v2/bot/audienceGroup/{audienceGroupId}/updateDescription`.
   * To inspect the HTTP status code or response headers, use {@link updateAudienceGroupDescriptionWithHttpInfo}.
   * @param audienceGroupId The audience ID.
   * @param updateAudienceGroupDescriptionRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#set-description-audience-group">LINE Developers documentation</a>
   */
  public async updateAudienceGroupDescription(
    audienceGroupId: number,
    updateAudienceGroupDescriptionRequest: manageAudience.UpdateAudienceGroupDescriptionRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.manageAudience.updateAudienceGroupDescription(
      audienceGroupId,
      updateAudienceGroupDescriptionRequest,
    );
  }

  /**
   * Renames an existing audience.
   * Calls `PUT https://api.line.me/v2/bot/audienceGroup/{audienceGroupId}/updateDescription`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param audienceGroupId The audience ID.
   * @param updateAudienceGroupDescriptionRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#set-description-audience-group">LINE Developers 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).
   * Calls `PUT https://api-data.line.me/v2/bot/audienceGroup/upload/byFile`.
   * To inspect the HTTP status code or response headers, use {@link addUserIdsToAudienceWithHttpInfo}.
   * @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
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#update-upload-audience-group-by-file">LINE Developers 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).
   * Calls `PUT https://api-data.line.me/v2/bot/audienceGroup/upload/byFile`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#update-upload-audience-group-by-file">LINE Developers 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).
   * Calls `POST https://api-data.line.me/v2/bot/audienceGroup/upload/byFile`.
   * To inspect the HTTP status code or response headers, use {@link createAudienceForUploadingUserIdsWithHttpInfo}.
   * @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`).
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-upload-audience-group-by-file">LINE Developers 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).
   * Calls `POST https://api-data.line.me/v2/bot/audienceGroup/upload/byFile`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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`).
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-upload-audience-group-by-file">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/message/broadcast`.
   * To inspect the HTTP status code or response headers, use {@link broadcastWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-broadcast-message">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/message/broadcast`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-broadcast-message">LINE Developers 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
   * Calls `DELETE https://api.line.me/v2/bot/user/all/richmenu`.
   * To inspect the HTTP status code or response headers, use {@link cancelDefaultRichMenuWithHttpInfo}.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#cancel-default-rich-menu">LINE Developers documentation</a>
   */
  public async cancelDefaultRichMenu(): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.cancelDefaultRichMenu();
  }

  /**
   * Cancel default rich menu
   * Calls `DELETE https://api.line.me/v2/bot/user/all/richmenu`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#cancel-default-rich-menu">LINE Developers documentation</a>
   */
  public async cancelDefaultRichMenuWithHttpInfo(): Promise<
    Types.ApiResponseType<Types.MessageAPIResponseBase>
  > {
    return this.clients.messagingApi.cancelDefaultRichMenuWithHttpInfo();
  }

  /**
   * Close coupon
   * Calls `PUT https://api.line.me/v2/bot/coupon/{couponId}/close`.
   * To inspect the HTTP status code or response headers, use {@link closeCouponWithHttpInfo}.
   * @param couponId
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#discontinue-coupon">LINE Developers documentation</a>
   */
  public async closeCoupon(
    couponId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.closeCoupon(couponId);
  }

  /**
   * Close coupon
   * Calls `PUT https://api.line.me/v2/bot/coupon/{couponId}/close`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param couponId
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#discontinue-coupon">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/coupon`.
   * To inspect the HTTP status code or response headers, use {@link createCouponWithHttpInfo}.
   * @param couponCreateRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-coupon">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/coupon`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param couponCreateRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-coupon">LINE Developers documentation</a>
   */
  public async createCouponWithHttpInfo(
    couponCreateRequest?: messagingApi.CouponCreateRequest,
  ): Promise<Types.ApiResponseType<messagingApi.CouponCreateResponse>> {
    return this.clients.messagingApi.createCouponWithHttpInfo(
      couponCreateRequest,
    );
  }

  /**
   * Create rich menu
   * Calls `POST https://api.line.me/v2/bot/richmenu`.
   * To inspect the HTTP status code or response headers, use {@link createRichMenuWithHttpInfo}.
   * @param richMenuRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-rich-menu">LINE Developers documentation</a>
   */
  public async createRichMenu(
    richMenuRequest: messagingApi.RichMenuRequest,
  ): Promise<messagingApi.RichMenuIdResponse> {
    return this.clients.messagingApi.createRichMenu(richMenuRequest);
  }

  /**
   * Create rich menu
   * Calls `POST https://api.line.me/v2/bot/richmenu`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-rich-menu">LINE Developers documentation</a>
   */
  public async createRichMenuWithHttpInfo(
    richMenuRequest: messagingApi.RichMenuRequest,
  ): Promise<Types.ApiResponseType<messagingApi.RichMenuIdResponse>> {
    return this.clients.messagingApi.createRichMenuWithHttpInfo(
      richMenuRequest,
    );
  }

  /**
   * Create rich menu alias
   * Calls `POST https://api.line.me/v2/bot/richmenu/alias`.
   * To inspect the HTTP status code or response headers, use {@link createRichMenuAliasWithHttpInfo}.
   * @param createRichMenuAliasRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-rich-menu-alias">LINE Developers documentation</a>
   */
  public async createRichMenuAlias(
    createRichMenuAliasRequest: messagingApi.CreateRichMenuAliasRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.createRichMenuAlias(
      createRichMenuAliasRequest,
    );
  }

  /**
   * Create rich menu alias
   * Calls `POST https://api.line.me/v2/bot/richmenu/alias`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param createRichMenuAliasRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#create-rich-menu-alias">LINE Developers documentation</a>
   */
  public async createRichMenuAliasWithHttpInfo(
    createRichMenuAliasRequest: messagingApi.CreateRichMenuAliasRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.createRichMenuAliasWithHttpInfo(
      createRichMenuAliasRequest,
    );
  }

  /**
   * Deletes a rich menu.
   * Calls `DELETE https://api.line.me/v2/bot/richmenu/{richMenuId}`.
   * To inspect the HTTP status code or response headers, use {@link deleteRichMenuWithHttpInfo}.
   * @param richMenuId ID of a rich menu
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#delete-rich-menu">LINE Developers documentation</a>
   */
  public async deleteRichMenu(
    richMenuId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.deleteRichMenu(richMenuId);
  }

  /**
   * Deletes a rich menu.
   * Calls `DELETE https://api.line.me/v2/bot/richmenu/{richMenuId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuId ID of a rich menu
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#delete-rich-menu">LINE Developers documentation</a>
   */
  public async deleteRichMenuWithHttpInfo(
    richMenuId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.deleteRichMenuWithHttpInfo(richMenuId);
  }

  /**
   * Delete rich menu alias
   * Calls `DELETE https://api.line.me/v2/bot/richmenu/alias/{richMenuAliasId}`.
   * To inspect the HTTP status code or response headers, use {@link deleteRichMenuAliasWithHttpInfo}.
   * @param richMenuAliasId Rich menu alias ID that you want to delete.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#delete-rich-menu-alias">LINE Developers documentation</a>
   */
  public async deleteRichMenuAlias(
    richMenuAliasId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.deleteRichMenuAlias(richMenuAliasId);
  }

  /**
   * Delete rich menu alias
   * Calls `DELETE https://api.line.me/v2/bot/richmenu/alias/{richMenuAliasId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuAliasId Rich menu alias ID that you want to delete.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#delete-rich-menu-alias">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/message/aggregation/list`.
   * To inspect the HTTP status code or response headers, use {@link getAggregationUnitNameListWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-name-list-of-units-used-this-month">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/message/aggregation/list`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-name-list-of-units-used-this-month">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/message/aggregation/info`.
   * To inspect the HTTP status code or response headers, use {@link getAggregationUnitUsageWithHttpInfo}.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-units-used-this-month">LINE Developers documentation</a>
   */
  public async getAggregationUnitUsage(): Promise<messagingApi.GetAggregationUnitUsageResponse> {
    return this.clients.messagingApi.getAggregationUnitUsage();
  }

  /**
   * Get number of units used this month
   * Calls `GET https://api.line.me/v2/bot/message/aggregation/info`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-units-used-this-month">LINE Developers documentation</a>
   */
  public async getAggregationUnitUsageWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.GetAggregationUnitUsageResponse>
  > {
    return this.clients.messagingApi.getAggregationUnitUsageWithHttpInfo();
  }

  /**
   * Get bot info
   * Calls `GET https://api.line.me/v2/bot/info`.
   * To inspect the HTTP status code or response headers, use {@link getBotInfoWithHttpInfo}.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-bot-info">LINE Developers documentation</a>
   */
  public async getBotInfo(): Promise<messagingApi.BotInfoResponse> {
    return this.clients.messagingApi.getBotInfo();
  }

  /**
   * Get bot info
   * Calls `GET https://api.line.me/v2/bot/info`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-bot-info">LINE Developers documentation</a>
   */
  public async getBotInfoWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.BotInfoResponse>
  > {
    return this.clients.messagingApi.getBotInfoWithHttpInfo();
  }

  /**
   * Get coupon detail
   * Calls `GET https://api.line.me/v2/bot/coupon/{couponId}`.
   * To inspect the HTTP status code or response headers, use {@link getCouponDetailWithHttpInfo}.
   * @param couponId
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-coupon">LINE Developers documentation</a>
   */
  public async getCouponDetail(
    couponId: string,
  ): Promise<messagingApi.CouponResponse> {
    return this.clients.messagingApi.getCouponDetail(couponId);
  }

  /**
   * Get coupon detail
   * Calls `GET https://api.line.me/v2/bot/coupon/{couponId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param couponId
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-coupon">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/user/all/richmenu`.
   * To inspect the HTTP status code or response headers, use {@link getDefaultRichMenuIdWithHttpInfo}.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-default-rich-menu-id">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/user/all/richmenu`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-default-rich-menu-id">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/followers/ids`.
   * To inspect the HTTP status code or response headers, use {@link getFollowersWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-follower-ids">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/followers/ids`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-follower-ids">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/group/{groupId}/members/count`.
   * To inspect the HTTP status code or response headers, use {@link getGroupMemberCountWithHttpInfo}.
   * @param groupId Group ID
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-members-group-count">LINE Developers documentation</a>
   */
  public async getGroupMemberCount(
    groupId: string,
  ): Promise<messagingApi.GroupMemberCountResponse> {
    return this.clients.messagingApi.getGroupMemberCount(groupId);
  }

  /**
   * Get number of users in a group chat
   * Calls `GET https://api.line.me/v2/bot/group/{groupId}/members/count`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param groupId Group ID
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-members-group-count">LINE Developers documentation</a>
   */
  public async getGroupMemberCountWithHttpInfo(
    groupId: string,
  ): Promise<Types.ApiResponseType<messagingApi.GroupMemberCountResponse>> {
    return this.clients.messagingApi.getGroupMemberCountWithHttpInfo(groupId);
  }

  /**
   * Get group chat member profile
   * Calls `GET https://api.line.me/v2/bot/group/{groupId}/member/{userId}`.
   * To inspect the HTTP status code or response headers, use {@link getGroupMemberProfileWithHttpInfo}.
   * @param groupId Group ID
   * @param userId User ID
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-group-member-profile">LINE Developers documentation</a>
   */
  public async getGroupMemberProfile(
    groupId: string,
    userId: string,
  ): Promise<messagingApi.GroupUserProfileResponse> {
    return this.clients.messagingApi.getGroupMemberProfile(groupId, userId);
  }

  /**
   * Get group chat member profile
   * Calls `GET https://api.line.me/v2/bot/group/{groupId}/member/{userId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param groupId Group ID
   * @param userId User ID
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-group-member-profile">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/group/{groupId}/members/ids`.
   * To inspect the HTTP status code or response headers, use {@link getGroupMembersIdsWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-group-member-user-ids">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/group/{groupId}/members/ids`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-group-member-user-ids">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/group/{groupId}/summary`.
   * To inspect the HTTP status code or response headers, use {@link getGroupSummaryWithHttpInfo}.
   * @param groupId Group ID
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-group-summary">LINE Developers documentation</a>
   */
  public async getGroupSummary(
    groupId: string,
  ): Promise<messagingApi.GroupSummaryResponse> {
    return this.clients.messagingApi.getGroupSummary(groupId);
  }

  /**
   * Get group chat summary
   * Calls `GET https://api.line.me/v2/bot/group/{groupId}/summary`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param groupId Group ID
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-group-summary">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/membership/{membershipId}/users/ids`.
   * To inspect the HTTP status code or response headers, use {@link getJoinedMembershipUsersWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-membership-user-ids">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/membership/{membershipId}/users/ids`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-membership-user-ids">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/membership/list`.
   * To inspect the HTTP status code or response headers, use {@link getMembershipListWithHttpInfo}.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-membership-plans">LINE Developers documentation</a>
   */
  public async getMembershipList(): Promise<messagingApi.MembershipListResponse> {
    return this.clients.messagingApi.getMembershipList();
  }

  /**
   * Get a list of memberships.
   * Calls `GET https://api.line.me/v2/bot/membership/list`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-membership-plans">LINE Developers documentation</a>
   */
  public async getMembershipListWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.MembershipListResponse>
  > {
    return this.clients.messagingApi.getMembershipListWithHttpInfo();
  }

  /**
   * Get a user's membership subscription.
   * Calls `GET https://api.line.me/v2/bot/membership/subscription/{userId}`.
   * To inspect the HTTP status code or response headers, use {@link getMembershipSubscriptionWithHttpInfo}.
   * @param userId User ID
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-a-users-membership-subscription-status">LINE Developers documentation</a>
   */
  public async getMembershipSubscription(
    userId: string,
  ): Promise<messagingApi.GetMembershipSubscriptionResponse> {
    return this.clients.messagingApi.getMembershipSubscription(userId);
  }

  /**
   * Get a user's membership subscription.
   * Calls `GET https://api.line.me/v2/bot/membership/subscription/{userId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param userId User ID
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-a-users-membership-subscription-status">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/message/quota`.
   * To inspect the HTTP status code or response headers, use {@link getMessageQuotaWithHttpInfo}.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-quota">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/message/quota`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-quota">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/message/quota/consumption`.
   * To inspect the HTTP status code or response headers, use {@link getMessageQuotaConsumptionWithHttpInfo}.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-consumption">LINE Developers documentation</a>
   */
  public async getMessageQuotaConsumption(): Promise<messagingApi.QuotaConsumptionResponse> {
    return this.clients.messagingApi.getMessageQuotaConsumption();
  }

  /**
   * Gets the number of messages sent in the current month.
   * Calls `GET https://api.line.me/v2/bot/message/quota/consumption`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-consumption">LINE Developers documentation</a>
   */
  public async getMessageQuotaConsumptionWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.QuotaConsumptionResponse>
  > {
    return this.clients.messagingApi.getMessageQuotaConsumptionWithHttpInfo();
  }

  /**
   * Gets the status of a narrowcast message.
   * Calls `GET https://api.line.me/v2/bot/message/progress/narrowcast`.
   * To inspect the HTTP status code or response headers, use {@link getNarrowcastProgressWithHttpInfo}.
   * @param requestId The narrowcast message's request ID. Each Messaging API request has a request ID.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-narrowcast-progress-status">LINE Developers documentation</a>
   */
  public async getNarrowcastProgress(
    requestId: string,
  ): Promise<messagingApi.NarrowcastProgressResponse> {
    return this.clients.messagingApi.getNarrowcastProgress(requestId);
  }

  /**
   * Gets the status of a narrowcast message.
   * Calls `GET https://api.line.me/v2/bot/message/progress/narrowcast`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param requestId The narrowcast message's request ID. Each Messaging API request has a request ID.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-narrowcast-progress-status">LINE Developers documentation</a>
   */
  public async getNarrowcastProgressWithHttpInfo(
    requestId: string,
  ): Promise<Types.ApiResponseType<messagingApi.NarrowcastProgressResponse>> {
    return this.clients.messagingApi.getNarrowcastProgressWithHttpInfo(
      requestId,
    );
  }

  /**
   * Get number of sent broadcast messages
   * Calls `GET https://api.line.me/v2/bot/message/delivery/broadcast`.
   * To inspect the HTTP status code or response headers, use {@link getNumberOfSentBroadcastMessagesWithHttpInfo}.
   * @param date Date the messages were sent  Format: yyyyMMdd (e.g. 20191231) Timezone: UTC+9
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-broadcast-messages">LINE Developers documentation</a>
   */
  public async getNumberOfSentBroadcastMessages(
    date: string,
  ): Promise<messagingApi.NumberOfMessagesResponse> {
    return this.clients.messagingApi.getNumberOfSentBroadcastMessages(date);
  }

  /**
   * Get number of sent broadcast messages
   * Calls `GET https://api.line.me/v2/bot/message/delivery/broadcast`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param date Date the messages were sent  Format: yyyyMMdd (e.g. 20191231) Timezone: UTC+9
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-broadcast-messages">LINE Developers documentation</a>
   */
  public async getNumberOfSentBroadcastMessagesWithHttpInfo(
    date: string,
  ): Promise<Types.ApiResponseType<messagingApi.NumberOfMessagesResponse>> {
    return this.clients.messagingApi.getNumberOfSentBroadcastMessagesWithHttpInfo(
      date,
    );
  }

  /**
   * Get number of sent multicast messages
   * Calls `GET https://api.line.me/v2/bot/message/delivery/multicast`.
   * To inspect the HTTP status code or response headers, use {@link getNumberOfSentMulticastMessagesWithHttpInfo}.
   * @param date Date the messages were sent  Format: `yyyyMMdd` (e.g. `20191231`) Timezone: UTC+9
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-multicast-messages">LINE Developers documentation</a>
   */
  public async getNumberOfSentMulticastMessages(
    date: string,
  ): Promise<messagingApi.NumberOfMessagesResponse> {
    return this.clients.messagingApi.getNumberOfSentMulticastMessages(date);
  }

  /**
   * Get number of sent multicast messages
   * Calls `GET https://api.line.me/v2/bot/message/delivery/multicast`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param date Date the messages were sent  Format: `yyyyMMdd` (e.g. `20191231`) Timezone: UTC+9
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-multicast-messages">LINE Developers documentation</a>
   */
  public async getNumberOfSentMulticastMessagesWithHttpInfo(
    date: string,
  ): Promise<Types.ApiResponseType<messagingApi.NumberOfMessagesResponse>> {
    return this.clients.messagingApi.getNumberOfSentMulticastMessagesWithHttpInfo(
      date,
    );
  }

  /**
   * Get number of sent push messages
   * Calls `GET https://api.line.me/v2/bot/message/delivery/push`.
   * To inspect the HTTP status code or response headers, use {@link getNumberOfSentPushMessagesWithHttpInfo}.
   * @param date Date the messages were sent  Format: `yyyyMMdd` (e.g. `20191231`) Timezone: UTC+9
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-push-messages">LINE Developers documentation</a>
   */
  public async getNumberOfSentPushMessages(
    date: string,
  ): Promise<messagingApi.NumberOfMessagesResponse> {
    return this.clients.messagingApi.getNumberOfSentPushMessages(date);
  }

  /**
   * Get number of sent push messages
   * Calls `GET https://api.line.me/v2/bot/message/delivery/push`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param date Date the messages were sent  Format: `yyyyMMdd` (e.g. `20191231`) Timezone: UTC+9
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-push-messages">LINE Developers documentation</a>
   */
  public async getNumberOfSentPushMessagesWithHttpInfo(
    date: string,
  ): Promise<Types.ApiResponseType<messagingApi.NumberOfMessagesResponse>> {
    return this.clients.messagingApi.getNumberOfSentPushMessagesWithHttpInfo(
      date,
    );
  }

  /**
   * Get number of sent reply messages
   * Calls `GET https://api.line.me/v2/bot/message/delivery/reply`.
   * To inspect the HTTP status code or response headers, use {@link getNumberOfSentReplyMessagesWithHttpInfo}.
   * @param date Date the messages were sent  Format: `yyyyMMdd` (e.g. `20191231`) Timezone: UTC+9
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-reply-messages">LINE Developers documentation</a>
   */
  public async getNumberOfSentReplyMessages(
    date: string,
  ): Promise<messagingApi.NumberOfMessagesResponse> {
    return this.clients.messagingApi.getNumberOfSentReplyMessages(date);
  }

  /**
   * Get number of sent reply messages
   * Calls `GET https://api.line.me/v2/bot/message/delivery/reply`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param date Date the messages were sent  Format: `yyyyMMdd` (e.g. `20191231`) Timezone: UTC+9
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-number-of-reply-messages">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/message/delivery/pnp`.
   * To inspect the HTTP status code or response headers, use {@link getPNPMessageStatisticsWithHttpInfo}.
   * @param date Date the message was sent  Format: `yyyyMMdd` (Example:`20211231`) Time zone: UTC+9
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#get-number-of-sent-line-notification-messages">LINE Developers documentation</a>
   */
  public async getPNPMessageStatistics(
    date: string,
  ): Promise<messagingApi.NumberOfMessagesResponse> {
    return this.clients.messagingApi.getPNPMessageStatistics(date);
  }

  /**
   * Get number of sent LINE notification messages
   * Calls `GET https://api.line.me/v2/bot/message/delivery/pnp`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param date Date the message was sent  Format: `yyyyMMdd` (Example:`20211231`) Time zone: UTC+9
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#get-number-of-sent-line-notification-messages">LINE Developers documentation</a>
   */
  public async getPNPMessageStatisticsWithHttpInfo(
    date: string,
  ): Promise<Types.ApiResponseType<messagingApi.NumberOfMessagesResponse>> {
    return this.clients.messagingApi.getPNPMessageStatisticsWithHttpInfo(date);
  }

  /**
   * Get profile
   * Calls `GET https://api.line.me/v2/bot/profile/{userId}`.
   * To inspect the HTTP status code or response headers, use {@link getProfileWithHttpInfo}.
   * @param userId User ID
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-profile">LINE Developers documentation</a>
   */
  public async getProfile(
    userId: string,
  ): Promise<messagingApi.UserProfileResponse> {
    return this.clients.messagingApi.getProfile(userId);
  }

  /**
   * Get profile
   * Calls `GET https://api.line.me/v2/bot/profile/{userId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param userId User ID
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-profile">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/richmenu/{richMenuId}`.
   * To inspect the HTTP status code or response headers, use {@link getRichMenuWithHttpInfo}.
   * @param richMenuId ID of a rich menu
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/richmenu/{richMenuId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuId ID of a rich menu
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu">LINE Developers documentation</a>
   */
  public async getRichMenuWithHttpInfo(
    richMenuId: string,
  ): Promise<Types.ApiResponseType<messagingApi.RichMenuResponse>> {
    return this.clients.messagingApi.getRichMenuWithHttpInfo(richMenuId);
  }

  /**
   * Get rich menu alias information
   * Calls `GET https://api.line.me/v2/bot/richmenu/alias/{richMenuAliasId}`.
   * To inspect the HTTP status code or response headers, use {@link getRichMenuAliasWithHttpInfo}.
   * @param richMenuAliasId The rich menu alias ID whose information you want to obtain.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-alias-by-id">LINE Developers documentation</a>
   */
  public async getRichMenuAlias(
    richMenuAliasId: string,
  ): Promise<messagingApi.RichMenuAliasResponse> {
    return this.clients.messagingApi.getRichMenuAlias(richMenuAliasId);
  }

  /**
   * Get rich menu alias information
   * Calls `GET https://api.line.me/v2/bot/richmenu/alias/{richMenuAliasId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuAliasId The rich menu alias ID whose information you want to obtain.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-alias-by-id">LINE Developers documentation</a>
   */
  public async getRichMenuAliasWithHttpInfo(
    richMenuAliasId: string,
  ): Promise<Types.ApiResponseType<messagingApi.RichMenuAliasResponse>> {
    return this.clients.messagingApi.getRichMenuAliasWithHttpInfo(
      richMenuAliasId,
    );
  }

  /**
   * Get list of rich menu alias
   * Calls `GET https://api.line.me/v2/bot/richmenu/alias/list`.
   * To inspect the HTTP status code or response headers, use {@link getRichMenuAliasListWithHttpInfo}.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-alias-list">LINE Developers documentation</a>
   */
  public async getRichMenuAliasList(): Promise<messagingApi.RichMenuAliasListResponse> {
    return this.clients.messagingApi.getRichMenuAliasList();
  }

  /**
   * Get list of rich menu alias
   * Calls `GET https://api.line.me/v2/bot/richmenu/alias/list`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-alias-list">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/richmenu/progress/batch`.
   * To inspect the HTTP status code or response headers, use {@link getRichMenuBatchProgressWithHttpInfo}.
   * @param requestId A request ID used to batch control the rich menu linked to the user. Each Messaging API request has a request ID.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-batch-control-rich-menus-progress-status">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/richmenu/progress/batch`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param requestId A request ID used to batch control the rich menu linked to the user. Each Messaging API request has a request ID.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-batch-control-rich-menus-progress-status">LINE Developers documentation</a>
   */
  public async getRichMenuBatchProgressWithHttpInfo(
    requestId: string,
  ): Promise<
    Types.ApiResponseType<messagingApi.RichMenuBatchProgressResponse>
  > {
    return this.clients.messagingApi.getRichMenuBatchProgressWithHttpInfo(
      requestId,
    );
  }

  /**
   * Get rich menu ID of user
   * Calls `GET https://api.line.me/v2/bot/user/{userId}/richmenu`.
   * To inspect the HTTP status code or response headers, use {@link getRichMenuIdOfUserWithHttpInfo}.
   * @param userId User ID. Found in the `source` object of webhook event objects. Do not use the LINE ID used in LINE.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-id-of-user">LINE Developers documentation</a>
   */
  public async getRichMenuIdOfUser(
    userId: string,
  ): Promise<messagingApi.RichMenuIdResponse> {
    return this.clients.messagingApi.getRichMenuIdOfUser(userId);
  }

  /**
   * Get rich menu ID of user
   * Calls `GET https://api.line.me/v2/bot/user/{userId}/richmenu`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param userId User ID. Found in the `source` object of webhook event objects. Do not use the LINE ID used in LINE.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-id-of-user">LINE Developers documentation</a>
   */
  public async getRichMenuIdOfUserWithHttpInfo(
    userId: string,
  ): Promise<Types.ApiResponseType<messagingApi.RichMenuIdResponse>> {
    return this.clients.messagingApi.getRichMenuIdOfUserWithHttpInfo(userId);
  }

  /**
   * Get rich menu list
   * Calls `GET https://api.line.me/v2/bot/richmenu/list`.
   * To inspect the HTTP status code or response headers, use {@link getRichMenuListWithHttpInfo}.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-list">LINE Developers documentation</a>
   */
  public async getRichMenuList(): Promise<messagingApi.RichMenuListResponse> {
    return this.clients.messagingApi.getRichMenuList();
  }

  /**
   * Get rich menu list
   * Calls `GET https://api.line.me/v2/bot/richmenu/list`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-rich-menu-list">LINE Developers documentation</a>
   */
  public async getRichMenuListWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.RichMenuListResponse>
  > {
    return this.clients.messagingApi.getRichMenuListWithHttpInfo();
  }

  /**
   * Get number of users in a multi-person chat
   * Calls `GET https://api.line.me/v2/bot/room/{roomId}/members/count`.
   * To inspect the HTTP status code or response headers, use {@link getRoomMemberCountWithHttpInfo}.
   * @param roomId Room ID
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-members-room-count">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/room/{roomId}/members/count`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param roomId Room ID
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-members-room-count">LINE Developers documentation</a>
   */
  public async getRoomMemberCountWithHttpInfo(
    roomId: string,
  ): Promise<Types.ApiResponseType<messagingApi.RoomMemberCountResponse>> {
    return this.clients.messagingApi.getRoomMemberCountWithHttpInfo(roomId);
  }

  /**
   * Get multi-person chat member profile
   * Calls `GET https://api.line.me/v2/bot/room/{roomId}/member/{userId}`.
   * To inspect the HTTP status code or response headers, use {@link getRoomMemberProfileWithHttpInfo}.
   * @param roomId Room ID
   * @param userId User ID
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-room-member-profile">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/room/{roomId}/member/{userId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param roomId Room ID
   * @param userId User ID
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-room-member-profile">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/room/{roomId}/members/ids`.
   * To inspect the HTTP status code or response headers, use {@link getRoomMembersIdsWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-room-member-user-ids">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/room/{roomId}/members/ids`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-room-member-user-ids">LINE Developers 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
   * Calls `GET https://api.line.me/v2/bot/channel/webhook/endpoint`.
   * To inspect the HTTP status code or response headers, use {@link getWebhookEndpointWithHttpInfo}.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-webhook-endpoint-information">LINE Developers documentation</a>
   */
  public async getWebhookEndpoint(): Promise<messagingApi.GetWebhookEndpointResponse> {
    return this.clients.messagingApi.getWebhookEndpoint();
  }

  /**
   * Get webhook endpoint information
   * Calls `GET https://api.line.me/v2/bot/channel/webhook/endpoint`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-webhook-endpoint-information">LINE Developers documentation</a>
   */
  public async getWebhookEndpointWithHttpInfo(): Promise<
    Types.ApiResponseType<messagingApi.GetWebhookEndpointResponse>
  > {
    return this.clients.messagingApi.getWebhookEndpointWithHttpInfo();
  }

  /**
   * Issue link token
   * Calls `POST https://api.line.me/v2/bot/user/{userId}/linkToken`.
   * To inspect the HTTP status code or response headers, use {@link issueLinkTokenWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#issue-link-token">LINE Developers documentation</a>
   */
  public async issueLinkToken(
    userId: string,
  ): Promise<messagingApi.IssueLinkTokenResponse> {
    return this.clients.messagingApi.issueLinkToken(userId);
  }

  /**
   * Issue link token
   * Calls `POST https://api.line.me/v2/bot/user/{userId}/linkToken`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#issue-link-token">LINE Developers documentation</a>
   */
  public async issueLinkTokenWithHttpInfo(
    userId: string,
  ): Promise<Types.ApiResponseType<messagingApi.IssueLinkTokenResponse>> {
    return this.clients.messagingApi.issueLinkTokenWithHttpInfo(userId);
  }

  /**
   * Leave group chat
   * Calls `POST https://api.line.me/v2/bot/group/{groupId}/leave`.
   * To inspect the HTTP status code or response headers, use {@link leaveGroupWithHttpInfo}.
   * @param groupId Group ID
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#leave-group">LINE Developers documentation</a>
   */
  public async leaveGroup(
    groupId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.leaveGroup(groupId);
  }

  /**
   * Leave group chat
   * Calls `POST https://api.line.me/v2/bot/group/{groupId}/leave`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param groupId Group ID
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#leave-group">LINE Developers documentation</a>
   */
  public async leaveGroupWithHttpInfo(
    groupId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.leaveGroupWithHttpInfo(groupId);
  }

  /**
   * Leave multi-person chat
   * Calls `POST https://api.line.me/v2/bot/room/{roomId}/leave`.
   * To inspect the HTTP status code or response headers, use {@link leaveRoomWithHttpInfo}.
   * @param roomId Room ID
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#leave-room">LINE Developers documentation</a>
   */
  public async leaveRoom(
    roomId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.leaveRoom(roomId);
  }

  /**
   * Leave multi-person chat
   * Calls `POST https://api.line.me/v2/bot/room/{roomId}/leave`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param roomId Room ID
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#leave-room">LINE Developers documentation</a>
   */
  public async leaveRoomWithHttpInfo(
    roomId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.leaveRoomWithHttpInfo(roomId);
  }

  /**
   * Link rich menu to user.
   * Calls `POST https://api.line.me/v2/bot/user/{userId}/richmenu/{richMenuId}`.
   * To inspect the HTTP status code or response headers, use {@link linkRichMenuIdToUserWithHttpInfo}.
   * @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
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#link-rich-menu-to-user">LINE Developers documentation</a>
   */
  public async linkRichMenuIdToUser(
    userId: string,
    richMenuId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.linkRichMenuIdToUser(userId, richMenuId);
  }

  /**
   * Link rich menu to user.
   * Calls `POST https://api.line.me/v2/bot/user/{userId}/richmenu/{richMenuId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#link-rich-menu-to-user">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/richmenu/bulk/link`.
   * To inspect the HTTP status code or response headers, use {@link linkRichMenuIdToUsersWithHttpInfo}.
   * @param richMenuBulkLinkRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#link-rich-menu-to-users">LINE Developers documentation</a>
   */
  public async linkRichMenuIdToUsers(
    richMenuBulkLinkRequest: messagingApi.RichMenuBulkLinkRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.linkRichMenuIdToUsers(
      richMenuBulkLinkRequest,
    );
  }

  /**
   * Link rich menu to multiple users
   * Calls `POST https://api.line.me/v2/bot/richmenu/bulk/link`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuBulkLinkRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#link-rich-menu-to-users">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/coupon`.
   * To inspect the HTTP status code or response headers, use {@link listCouponWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-coupons-list">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/coupon`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-coupons-list">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/message/markAsRead`.
   * To inspect the HTTP status code or response headers, use {@link markMessagesAsReadWithHttpInfo}.
   * @param markMessagesAsReadRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#mark-messages-from-users-as-read">LINE Developers documentation</a>
   */
  public async markMessagesAsRead(
    markMessagesAsReadRequest: messagingApi.MarkMessagesAsReadRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.markMessagesAsRead(
      markMessagesAsReadRequest,
    );
  }

  /**
   * Mark messages from users as read
   * Calls `POST https://api.line.me/v2/bot/message/markAsRead`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param markMessagesAsReadRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#mark-messages-from-users-as-read">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/chat/markAsRead`.
   * To inspect the HTTP status code or response headers, use {@link markMessagesAsReadByTokenWithHttpInfo}.
   * @param markMessagesAsReadByTokenRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#mark-as-read">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/chat/markAsRead`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param markMessagesAsReadByTokenRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#mark-as-read">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/message/multicast`.
   * To inspect the HTTP status code or response headers, use {@link multicastWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-multicast-message">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/message/multicast`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-multicast-message">LINE Developers documentation</a>
   */
  public async multicastWithHttpInfo(
    multicastRequest: messagingApi.MulticastRequest,
    xLineRetryKey?: string,
  ): Promise<Types.ApiResponseType<object>> {
    return this.clients.messagingApi.multicastWithHttpInfo(
      multicastRequest,
      xLineRetryKey,
    );
  }

  /**
   * Send narrowcast message
   * Calls `POST https://api.line.me/v2/bot/message/narrowcast`.
   * To inspect the HTTP status code or response headers, use {@link narrowcastWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-narrowcast-message">LINE Developers documentation</a>
   */
  public async narrowcast(
    narrowcastRequest: messagingApi.NarrowcastRequest,
    xLineRetryKey?: string,
  ): Promise<object> {
    return this.clients.messagingApi.narrowcast(
      narrowcastRequest,
      xLineRetryKey,
    );
  }

  /**
   * Send narrowcast message
   * Calls `POST https://api.line.me/v2/bot/message/narrowcast`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-narrowcast-message">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/message/push`.
   * To inspect the HTTP status code or response headers, use {@link pushMessageWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-push-message">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/message/push`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-push-message">LINE Developers 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
   * Calls `POST https://api.line.me/bot/pnp/push`.
   * To inspect the HTTP status code or response headers, use {@link pushMessagesByPhoneWithHttpInfo}.
   * @param pnpMessagesRequest
   * @param xLineDeliveryTag String returned in the delivery.data property of the delivery completion event via Webhook.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#send-line-notification-message">LINE Developers documentation</a>
   */
  public async pushMessagesByPhone(
    pnpMessagesRequest: messagingApi.PnpMessagesRequest,
    xLineDeliveryTag?: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.pushMessagesByPhone(
      pnpMessagesRequest,
      xLineDeliveryTag,
    );
  }

  /**
   * Send LINE notification message
   * Calls `POST https://api.line.me/bot/pnp/push`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param pnpMessagesRequest
   * @param xLineDeliveryTag String returned in the delivery.data property of the delivery completion event via Webhook.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#send-line-notification-message">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/message/reply`.
   * To inspect the HTTP status code or response headers, use {@link replyMessageWithHttpInfo}.
   * @param replyMessageRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-reply-message">LINE Developers documentation</a>
   */
  public async replyMessage(
    replyMessageRequest: messagingApi.ReplyMessageRequest,
  ): Promise<messagingApi.ReplyMessageResponse> {
    return this.clients.messagingApi.replyMessage(replyMessageRequest);
  }

  /**
   * Send reply message
   * Calls `POST https://api.line.me/v2/bot/message/reply`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param replyMessageRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#send-reply-message">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/richmenu/batch`.
   * To inspect the HTTP status code or response headers, use {@link richMenuBatchWithHttpInfo}.
   * @param richMenuBatchRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#batch-control-rich-menus-of-users">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/richmenu/batch`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuBatchRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#batch-control-rich-menus-of-users">LINE Developers documentation</a>
   */
  public async richMenuBatchWithHttpInfo(
    richMenuBatchRequest: messagingApi.RichMenuBatchRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.richMenuBatchWithHttpInfo(
      richMenuBatchRequest,
    );
  }

  /**
   * Set default rich menu
   * Calls `POST https://api.line.me/v2/bot/user/all/richmenu/{richMenuId}`.
   * To inspect the HTTP status code or response headers, use {@link setDefaultRichMenuWithHttpInfo}.
   * @param richMenuId ID of a rich menu
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#set-default-rich-menu">LINE Developers documentation</a>
   */
  public async setDefaultRichMenu(
    richMenuId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.setDefaultRichMenu(richMenuId);
  }

  /**
   * Set default rich menu
   * Calls `POST https://api.line.me/v2/bot/user/all/richmenu/{richMenuId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuId ID of a rich menu
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#set-default-rich-menu">LINE Developers documentation</a>
   */
  public async setDefaultRichMenuWithHttpInfo(
    richMenuId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.setDefaultRichMenuWithHttpInfo(richMenuId);
  }

  /**
   * Set webhook endpoint URL
   * Calls `PUT https://api.line.me/v2/bot/channel/webhook/endpoint`.
   * To inspect the HTTP status code or response headers, use {@link setWebhookEndpointWithHttpInfo}.
   * @param setWebhookEndpointRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#set-webhook-endpoint-url">LINE Developers documentation</a>
   */
  public async setWebhookEndpoint(
    setWebhookEndpointRequest: messagingApi.SetWebhookEndpointRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.setWebhookEndpoint(
      setWebhookEndpointRequest,
    );
  }

  /**
   * Set webhook endpoint URL
   * Calls `PUT https://api.line.me/v2/bot/channel/webhook/endpoint`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param setWebhookEndpointRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#set-webhook-endpoint-url">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/chat/loading/start`.
   * To inspect the HTTP status code or response headers, use {@link showLoadingAnimationWithHttpInfo}.
   * @param showLoadingAnimationRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#display-a-loading-indicator">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/chat/loading/start`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param showLoadingAnimationRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#display-a-loading-indicator">LINE Developers documentation</a>
   */
  public async showLoadingAnimationWithHttpInfo(
    showLoadingAnimationRequest: messagingApi.ShowLoadingAnimationRequest,
  ): Promise<Types.ApiResponseType<object>> {
    return this.clients.messagingApi.showLoadingAnimationWithHttpInfo(
      showLoadingAnimationRequest,
    );
  }

  /**
   * Test webhook endpoint
   * Calls `POST https://api.line.me/v2/bot/channel/webhook/test`.
   * To inspect the HTTP status code or response headers, use {@link testWebhookEndpointWithHttpInfo}.
   * @param testWebhookEndpointRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#test-webhook-endpoint">LINE Developers documentation</a>
   */
  public async testWebhookEndpoint(
    testWebhookEndpointRequest?: messagingApi.TestWebhookEndpointRequest,
  ): Promise<messagingApi.TestWebhookEndpointResponse> {
    return this.clients.messagingApi.testWebhookEndpoint(
      testWebhookEndpointRequest,
    );
  }

  /**
   * Test webhook endpoint
   * Calls `POST https://api.line.me/v2/bot/channel/webhook/test`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param testWebhookEndpointRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#test-webhook-endpoint">LINE Developers documentation</a>
   */
  public async testWebhookEndpointWithHttpInfo(
    testWebhookEndpointRequest?: messagingApi.TestWebhookEndpointRequest,
  ): Promise<Types.ApiResponseType<messagingApi.TestWebhookEndpointResponse>> {
    return this.clients.messagingApi.testWebhookEndpointWithHttpInfo(
      testWebhookEndpointRequest,
    );
  }

  /**
   * Unlink rich menu from user
   * Calls `DELETE https://api.line.me/v2/bot/user/{userId}/richmenu`.
   * To inspect the HTTP status code or response headers, use {@link unlinkRichMenuIdFromUserWithHttpInfo}.
   * @param userId User ID. Found in the `source` object of webhook event objects. Do not use the LINE ID used in LINE.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#unlink-rich-menu-from-user">LINE Developers documentation</a>
   */
  public async unlinkRichMenuIdFromUser(
    userId: string,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.unlinkRichMenuIdFromUser(userId);
  }

  /**
   * Unlink rich menu from user
   * Calls `DELETE https://api.line.me/v2/bot/user/{userId}/richmenu`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param userId User ID. Found in the `source` object of webhook event objects. Do not use the LINE ID used in LINE.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#unlink-rich-menu-from-user">LINE Developers documentation</a>
   */
  public async unlinkRichMenuIdFromUserWithHttpInfo(
    userId: string,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.unlinkRichMenuIdFromUserWithHttpInfo(
      userId,
    );
  }

  /**
   * Unlink rich menus from multiple users
   * Calls `POST https://api.line.me/v2/bot/richmenu/bulk/unlink`.
   * To inspect the HTTP status code or response headers, use {@link unlinkRichMenuIdFromUsersWithHttpInfo}.
   * @param richMenuBulkUnlinkRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#unlink-rich-menu-from-users">LINE Developers documentation</a>
   */
  public async unlinkRichMenuIdFromUsers(
    richMenuBulkUnlinkRequest: messagingApi.RichMenuBulkUnlinkRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.unlinkRichMenuIdFromUsers(
      richMenuBulkUnlinkRequest,
    );
  }

  /**
   * Unlink rich menus from multiple users
   * Calls `POST https://api.line.me/v2/bot/richmenu/bulk/unlink`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuBulkUnlinkRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#unlink-rich-menu-from-users">LINE Developers documentation</a>
   */
  public async unlinkRichMenuIdFromUsersWithHttpInfo(
    richMenuBulkUnlinkRequest: messagingApi.RichMenuBulkUnlinkRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.unlinkRichMenuIdFromUsersWithHttpInfo(
      richMenuBulkUnlinkRequest,
    );
  }

  /**
   * Update rich menu alias
   * Calls `POST https://api.line.me/v2/bot/richmenu/alias/{richMenuAliasId}`.
   * To inspect the HTTP status code or response headers, use {@link updateRichMenuAliasWithHttpInfo}.
   * @param richMenuAliasId The rich menu alias ID you want to update.
   * @param updateRichMenuAliasRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#update-rich-menu-alias">LINE Developers documentation</a>
   */
  public async updateRichMenuAlias(
    richMenuAliasId: string,
    updateRichMenuAliasRequest: messagingApi.UpdateRichMenuAliasRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.updateRichMenuAlias(
      richMenuAliasId,
      updateRichMenuAliasRequest,
    );
  }

  /**
   * Update rich menu alias
   * Calls `POST https://api.line.me/v2/bot/richmenu/alias/{richMenuAliasId}`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuAliasId The rich menu alias ID you want to update.
   * @param updateRichMenuAliasRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#update-rich-menu-alias">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/message/validate/broadcast`.
   * To inspect the HTTP status code or response headers, use {@link validateBroadcastWithHttpInfo}.
   * @param validateMessageRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-broadcast-message">LINE Developers documentation</a>
   */
  public async validateBroadcast(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validateBroadcast(validateMessageRequest);
  }

  /**
   * Validate message objects of a broadcast message
   * Calls `POST https://api.line.me/v2/bot/message/validate/broadcast`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param validateMessageRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-broadcast-message">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/message/validate/multicast`.
   * To inspect the HTTP status code or response headers, use {@link validateMulticastWithHttpInfo}.
   * @param validateMessageRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-multicast-message">LINE Developers documentation</a>
   */
  public async validateMulticast(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validateMulticast(validateMessageRequest);
  }

  /**
   * Validate message objects of a multicast message
   * Calls `POST https://api.line.me/v2/bot/message/validate/multicast`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param validateMessageRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-multicast-message">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/message/validate/narrowcast`.
   * To inspect the HTTP status code or response headers, use {@link validateNarrowcastWithHttpInfo}.
   * @param validateMessageRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-narrowcast-message">LINE Developers documentation</a>
   */
  public async validateNarrowcast(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validateNarrowcast(validateMessageRequest);
  }

  /**
   * Validate message objects of a narrowcast message
   * Calls `POST https://api.line.me/v2/bot/message/validate/narrowcast`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param validateMessageRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-narrowcast-message">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/message/validate/push`.
   * To inspect the HTTP status code or response headers, use {@link validatePushWithHttpInfo}.
   * @param validateMessageRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-push-message">LINE Developers documentation</a>
   */
  public async validatePush(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validatePush(validateMessageRequest);
  }

  /**
   * Validate message objects of a push message
   * Calls `POST https://api.line.me/v2/bot/message/validate/push`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param validateMessageRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-push-message">LINE Developers 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
   * Calls `POST https://api.line.me/v2/bot/message/validate/reply`.
   * To inspect the HTTP status code or response headers, use {@link validateReplyWithHttpInfo}.
   * @param validateMessageRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-reply-message">LINE Developers documentation</a>
   */
  public async validateReply(
    validateMessageRequest: messagingApi.ValidateMessageRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validateReply(validateMessageRequest);
  }

  /**
   * Validate message objects of a reply message
   * Calls `POST https://api.line.me/v2/bot/message/validate/reply`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param validateMessageRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-message-objects-of-reply-message">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/richmenu/validate/batch`.
   * To inspect the HTTP status code or response headers, use {@link validateRichMenuBatchRequestWithHttpInfo}.
   * @param richMenuBatchRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-batch-control-rich-menus-request">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/richmenu/validate/batch`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuBatchRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-batch-control-rich-menus-request">LINE Developers documentation</a>
   */
  public async validateRichMenuBatchRequestWithHttpInfo(
    richMenuBatchRequest: messagingApi.RichMenuBatchRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.messagingApi.validateRichMenuBatchRequestWithHttpInfo(
      richMenuBatchRequest,
    );
  }

  /**
   * Validate rich menu object
   * Calls `POST https://api.line.me/v2/bot/richmenu/validate`.
   * To inspect the HTTP status code or response headers, use {@link validateRichMenuObjectWithHttpInfo}.
   * @param richMenuRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-rich-menu-object">LINE Developers documentation</a>
   */
  public async validateRichMenuObject(
    richMenuRequest: messagingApi.RichMenuRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApi.validateRichMenuObject(richMenuRequest);
  }

  /**
   * Validate rich menu object
   * Calls `POST https://api.line.me/v2/bot/richmenu/validate`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#validate-rich-menu-object">LINE Developers 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.
   * Calls `GET https://api-data.line.me/v2/bot/message/{messageId}/content`.
   * To inspect the HTTP status code or response headers, use {@link getMessageContentWithHttpInfo}.
   * @param messageId Message ID of video or audio
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-content">LINE Developers documentation</a>
   */
  public async getMessageContent(messageId: string): Promise<Readable> {
    return this.clients.messagingApiBlob.getMessageContent(messageId);
  }

  /**
   * Download image, video, and audio data sent from users.
   * Calls `GET https://api-data.line.me/v2/bot/message/{messageId}/content`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param messageId Message ID of video or audio
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-content">LINE Developers 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
   * Calls `GET https://api-data.line.me/v2/bot/message/{messageId}/content/preview`.
   * To inspect the HTTP status code or response headers, use {@link getMessageContentPreviewWithHttpInfo}.
   * @param messageId Message ID of image or video
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-image-or-video-preview">LINE Developers documentation</a>
   */
  public async getMessageContentPreview(messageId: string): Promise<Readable> {
    return this.clients.messagingApiBlob.getMessageContentPreview(messageId);
  }

  /**
   * Get a preview image of the image or video
   * Calls `GET https://api-data.line.me/v2/bot/message/{messageId}/content/preview`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param messageId Message ID of image or video
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#get-image-or-video-preview">LINE Developers 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
   * Calls `GET https://api-data.line.me/v2/bot/message/{messageId}/content/transcoding`.
   * To inspect the HTTP status code or response headers, use {@link getMessageContentTranscodingByMessageIdWithHttpInfo}.
   * @param messageId Message ID of video or audio
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#verify-video-or-audio-preparation-status">LINE Developers 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
   * Calls `GET https://api-data.line.me/v2/bot/message/{messageId}/content/transcoding`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param messageId Message ID of video or audio
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#verify-video-or-audio-preparation-status">LINE Developers documentation</a>
   */
  public async getMessageContentTranscodingByMessageIdWithHttpInfo(
    messageId: string,
  ): Promise<
    Types.ApiResponseType<messagingApi.GetMessageContentTranscodingResponse>
  > {
    return this.clients.messagingApiBlob.getMessageContentTranscodingByMessageIdWithHttpInfo(
      messageId,
    );
  }

  /**
   * Download rich menu image.
   * Calls `GET https://api-data.line.me/v2/bot/richmenu/{richMenuId}/content`.
   * To inspect the HTTP status code or response headers, use {@link getRichMenuImageWithHttpInfo}.
   * @param richMenuId ID of the rich menu with the image to be downloaded
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#download-rich-menu-image">LINE Developers documentation</a>
   */
  public async getRichMenuImage(richMenuId: string): Promise<Readable> {
    return this.clients.messagingApiBlob.getRichMenuImage(richMenuId);
  }

  /**
   * Download rich menu image.
   * Calls `GET https://api-data.line.me/v2/bot/richmenu/{richMenuId}/content`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuId ID of the rich menu with the image to be downloaded
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#download-rich-menu-image">LINE Developers documentation</a>
   */
  public async getRichMenuImageWithHttpInfo(
    richMenuId: string,
  ): Promise<Types.ApiResponseType<Readable>> {
    return this.clients.messagingApiBlob.getRichMenuImageWithHttpInfo(
      richMenuId,
    );
  }

  /**
   * Upload rich menu image
   * Calls `POST https://api-data.line.me/v2/bot/richmenu/{richMenuId}/content`.
   * To inspect the HTTP status code or response headers, use {@link setRichMenuImageWithHttpInfo}.
   * @param richMenuId The ID of the rich menu to attach the image to
   * @param body
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#upload-rich-menu-image">LINE Developers documentation</a>
   */
  public async setRichMenuImage(
    richMenuId: string,
    body: Blob,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.messagingApiBlob.setRichMenuImage(richMenuId, body);
  }

  /**
   * Upload rich menu image
   * Calls `POST https://api-data.line.me/v2/bot/richmenu/{richMenuId}/content`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param richMenuId The ID of the rich menu to attach the image to
   * @param body
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/messaging-api/#upload-rich-menu-image">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/chat/{chatId}/control/acquire`.
   * To inspect the HTTP status code or response headers, use {@link acquireChatControlWithHttpInfo}.
   * @param chatId The `userId`, `roomId`, or `groupId`
   * @param acquireChatControlRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#acquire-control-api">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/chat/{chatId}/control/acquire`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param chatId The `userId`, `roomId`, or `groupId`
   * @param acquireChatControlRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#acquire-control-api">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/channel/detach`.
   * To inspect the HTTP status code or response headers, use {@link detachModuleWithHttpInfo}.
   * @param detachModuleRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#unlink-detach-module-channel-by-operation-mc-admin">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/channel/detach`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param detachModuleRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#unlink-detach-module-channel-by-operation-mc-admin">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/list`.
   * To inspect the HTTP status code or response headers, use {@link getModulesWithHttpInfo}.
   * @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
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#get-multiple-bot-info-api">LINE Developers 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.
   * Calls `GET https://api.line.me/v2/bot/list`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#get-multiple-bot-info-api">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/chat/{chatId}/control/release`.
   * To inspect the HTTP status code or response headers, use {@link releaseChatControlWithHttpInfo}.
   * @param chatId The `userId`, `roomId`, or `groupId`
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#release-control-api">LINE Developers 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.
   * Calls `POST https://api.line.me/v2/bot/chat/{chatId}/control/release`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param chatId The `userId`, `roomId`, or `groupId`
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#release-control-api">LINE Developers 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
   * Calls `POST https://manager.line.biz/module/auth/v1/token`.
   * To inspect the HTTP status code or response headers, use {@link attachModuleWithHttpInfo}.
   * @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.
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#link-attach-by-operation-module-channel-provider">LINE Developers 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
   * Calls `POST https://manager.line.biz/module/auth/v1/token`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @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.
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#link-attach-by-operation-module-channel-provider">LINE Developers 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.
   * Calls `POST https://api.line.me/shop/v3/mission`.
   * To inspect the HTTP status code or response headers, use {@link missionStickerV3WithHttpInfo}.
   * @param missionStickerRequest
   * @returns A promise resolving to the response body.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#send-mission-stickers-v3">LINE Developers documentation</a>
   */
  public async missionStickerV3(
    missionStickerRequest: shop.MissionStickerRequest,
  ): Promise<Types.MessageAPIResponseBase> {
    return this.clients.shop.missionStickerV3(missionStickerRequest);
  }

  /**
   * Sends a mission sticker.
   * Calls `POST https://api.line.me/shop/v3/mission`.
   * This method returns the response body together with the underlying `httpResponse`.
   * @param missionStickerRequest
   * @returns A promise resolving to the response body together with the underlying `httpResponse`.
   * @see <a href="https://developers.line.biz/en/reference/partner-docs/#send-mission-stickers-v3">LINE Developers documentation</a>
   */
  public async missionStickerV3WithHttpInfo(
    missionStickerRequest: shop.MissionStickerRequest,
  ): Promise<Types.ApiResponseType<Types.MessageAPIResponseBase>> {
    return this.clients.shop.missionStickerV3WithHttpInfo(
      missionStickerRequest,
    );
  }
}
