/**
 *   Wechaty Chatbot SDK - https://github.com/wechaty/wechaty
 *
 *   @copyright 2016 Huan LI (李卓桓) <https://github.com/huan>, and
 *                   Wechaty Contributors <https://github.com/wechaty>.
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 */
import {
  ContactImpl,
  ContactInterface,
  ContactConstructor,
}                           from './contact.js'
import {
  ContactSelfImpl,
  ContactSelfInterface,
  ContactSelfConstructor,
}                           from './contact-self.js'
import {
  FavoriteImpl,
  FavoriteInterface,
  FavoriteConstructor,
}                           from './favorite.js'
import {
  FriendshipImpl,
  FriendshipInterface,
  FriendshipConstructor,
}                           from './friendship.js'
import {
  ImageImpl,
  ImageInterface,
  ImageConstructor,
}                           from './image.js'
import {
  LocationImpl,
  LocationInterface,
  LocationConstructor,
}                           from './location.js'
import {
  MessageImpl,
  MessageInterface,
  MessageConstructor,
}                           from './message.js'
import {
  MiniProgramImpl,
  MiniProgramInterface,
  MiniProgramConstructor,
}                           from './mini-program.js'
import {
  MomentImpl,
  MomentInterface,
  MomentConstructor,
}                           from './moment.js'
import {
  MoneyImpl,
  MoneyInterface,
  MoneyConstructor,
}                           from './money.js'
import {
  PostImpl,
  PostInterface,
  PostConstructor,
}                           from './post.js'
import {
  RoomImpl,
  RoomInterface,
  RoomConstructor,
}                           from './room.js'
import {
  RoomInvitationImpl,
  RoomInvitationInterface,
  RoomInvitationConstructor,
}                           from './room-invitation.js'
import {
  TagImpl,
  TagInterface,
  TagConstructor,
}                           from './tag.js'
import {
  TagGroupImpl,
  TagGroupInterface,
  TagGroupConstructor,
}                           from './tag-group.js'
import {
  UrlLinkImpl,
  UrlLinkInterface,
  UrlLinkConstructor,
}                           from './url-link.js'
import {
  DelayImpl,
  DelayInterface,
  DelayConstructor,
}                           from './delay.js'
import {
  ChannelImpl,
  ChannelInterface,
  ChannelConstructor,
}                           from './channel.js'
import {
  ChannelCardImpl,
  ChannelCardInterface,
  ChannelCardConstructor,
}                           from './channel-card.js'
import {
  ConsultCardImpl,
  ConsultCardInterface,
  ConsultCardConstructor,
}                           from './consult-card.js'
import {
  PremiumOnlineAppointmentCardImpl,
  PremiumOnlineAppointmentCardInterface,
  PremiumOnlineAppointmentCardConstructor,
}                           from './premium-online-appointment-card.js'
import {
  CallRecordImpl,
  CallRecordInterface,
  CallRecordConstructor,
}                           from './call.js'
import {
  ChatHistoryImpl,
  ChatHistoryInterface,
  ChatHistoryConstructor,
}                           from './chat-history.js'
import {
  WecomImpl,
  WecomInterface,
  WecomConstructor,
}                           from './wecom.js'
import {
  DouyinOneClickPhoneCollectionImpl,
  DouyinOneClickPhoneCollectionInterface,
  DouyinOneClickPhoneCollectionConstructor,
}                           from './douyin-one-click-phone-collection.js'
import {
  ImSpecificImpl,
  ImSpecificInterface,
  ImSpecificConstructor,
}                           from './im-specific.js'
import {
  WxxdProductImpl,
  WxxdProductInterface,
  WxxdProductConstructor,
}                           from './wxxd-product.js'
import {
  WxxdOrderImpl,
  WxxdOrderInterface,
  WxxdOrderConstructor,
}                           from './wxxd-order.js'

import { wechatifyUserModule } from '../user-mixins/wechatify.js'

export type {
  ContactInterface,
  ContactSelfInterface,
  FavoriteInterface,
  FriendshipInterface,
  ImageInterface,
  LocationInterface,
  MessageInterface,
  MiniProgramInterface,
  MomentInterface,
  MoneyInterface,
  PostInterface,
  RoomInterface,
  RoomInvitationInterface,
  TagInterface,
  TagGroupInterface,
  DelayInterface,
  UrlLinkInterface,
  ChannelInterface,
  ChannelCardInterface,
  ConsultCardInterface,
  PremiumOnlineAppointmentCardInterface,
  CallRecordInterface,
  ChatHistoryInterface,
  WecomInterface,
  DouyinOneClickPhoneCollectionInterface,
  ImSpecificInterface,
  WxxdProductInterface,
  WxxdOrderInterface,
}

export type {
  ContactConstructor,
  ContactSelfConstructor,
  FavoriteConstructor,
  FriendshipConstructor,
  ImageConstructor,
  LocationConstructor,
  MessageConstructor,
  MiniProgramConstructor,
  MomentConstructor,
  MoneyConstructor,
  PostConstructor,
  RoomConstructor,
  RoomInvitationConstructor,
  DelayConstructor,
  TagConstructor,
  TagGroupConstructor,
  UrlLinkConstructor,
  ChannelConstructor,
  ChannelCardConstructor,
  ConsultCardConstructor,
  PremiumOnlineAppointmentCardConstructor,
  CallRecordConstructor,
  ChatHistoryConstructor,
  WecomConstructor,
  DouyinOneClickPhoneCollectionConstructor,
  ImSpecificConstructor,
  WxxdProductConstructor,
  WxxdOrderConstructor,
}

export {
  wechatifyUserModule,

  ContactImpl,
  ContactSelfImpl,
  FavoriteImpl,
  FriendshipImpl,
  ImageImpl,
  LocationImpl,
  MessageImpl,
  MiniProgramImpl,
  MomentImpl,
  MoneyImpl,
  PostImpl,
  RoomImpl,
  RoomInvitationImpl,
  DelayImpl,
  TagImpl,
  TagGroupImpl,
  UrlLinkImpl,
  ChannelImpl,
  ChannelCardImpl,
  ConsultCardImpl,
  PremiumOnlineAppointmentCardImpl,
  CallRecordImpl,
  ChatHistoryImpl,
  WecomImpl,
  DouyinOneClickPhoneCollectionImpl,
  ImSpecificImpl,
  WxxdProductImpl,
  WxxdOrderImpl,
}
