/**
 * @class
 * Initializes a new instance of the CrashGroup class.
 * @constructor
 * @member {string} crashGroupId
 * @member {string} displayId
 * @member {string} appVersion
 * @member {string} build
 * @member {string} status Possible values include: 'open', 'closed', 'ignored'
 * @member {number} count
 * @member {number} [impactedUsers]
 * @member {date} firstOccurrence
 * @member {date} lastOccurrence
 * @member {string} [exception]
 * @member {string} crashReason
 * @member {object} [reasonFrame]
 * @member {string} [reasonFrame.className] name of the class
 * @member {string} [reasonFrame.method] name of the method
 * @member {boolean} [reasonFrame.classMethod] is a class method
 * @member {string} [reasonFrame.file] name of the file
 * @member {number} [reasonFrame.line] line number
 * @member {boolean} [reasonFrame.appCode] this line isn't from any framework
 * @member {string} [reasonFrame.frameworkName] Name of the framework
 * @member {string} [reasonFrame.codeFormatted] Formatted frame string
 * @member {string} [reasonFrame.codeRaw] Unformatted Frame string
 * @member {string} [reasonFrame.language] programming language of the frame.
 * Possible values include: 'JavaScript', 'CSharp', 'Objective-C',
 * 'Objective-Cpp', 'Cpp', 'C', 'Swift', 'Java', 'Unknown'
 * @member {string} [reasonFrame.methodParams] parameters of the frames method
 * @member {string} [reasonFrame.exceptionType] Exception type.
 * @member {string} [reasonFrame.osExceptionType] OS exception type. (aka.
 * SIGNAL)
 * @member {boolean} fatal Crash or handled exception
 * @member {string} annotation
 */
export interface CrashGroup {
  crashGroupId: string;
  displayId: string;
  appVersion: string;
  build: string;
  status: string;
  count: number;
  impactedUsers?: number;
  firstOccurrence: Date;
  lastOccurrence: Date;
  exception?: string;
  crashReason: string;
  reasonFrame?: ReasonStackFrame;
  fatal: boolean;
  annotation: string;
}


/**
 * @class
 * Initializes a new instance of the CrashGroupsContainer class.
 * @constructor
 * @member {boolean} limitedResultSet
 * @member {string} [continuationToken] Cassandra request continuation token.
 * The token is used for pagination.
 * @member {array} crashGroups
 */
export interface CrashGroupsContainer {
  limitedResultSet: boolean;
  continuationToken?: string;
  crashGroups: CrashGroup[];
}


/**
 * @class
 * Initializes a new instance of the CrashGroupChange class.
 * @constructor
 * @member {object} [status]
 * @member {string} [annotation]
 */
export interface CrashGroupChange {
  status?: any;
  annotation?: string;
}


/**
 * @class
 * Initializes a new instance of the CrashDetails class.
 * @constructor
 * @member {string} [carrierCountry] Carrier country code (for mobile devices).
 * @member {string} [carrierName] Carrier name (for mobile devices).
 * @member {string} locale Language code (example: en_US).
 * @member {string} [osBuild] OS build code (example: LMY47X).
 * @member {boolean} rooted Whether the device where the crash occurred is
 * rooted or jailbroken
 * @member {string} screenSize Screen size of the device in pixels (example:
 * 640x480).
 * @member {date} [appStartTimestamp] Application launch timestamp (example:
 * 1985-04-12T23:20:50.52Z).
 */
export interface CrashDetails {
  carrierCountry?: string;
  carrierName?: string;
  locale: string;
  osBuild?: string;
  rooted: boolean;
  screenSize: string;
  appStartTimestamp?: Date;
}


/**
 * @class
 * Initializes a new instance of the Crash class.
 * @constructor
 * @member {object} [details]
 * @member {string} [details.carrierCountry] Carrier country code (for mobile
 * devices).
 * @member {string} [details.carrierName] Carrier name (for mobile devices).
 * @member {string} [details.locale] Language code (example: en_US).
 * @member {string} [details.osBuild] OS build code (example: LMY47X).
 * @member {boolean} [details.rooted] Whether the device where the crash
 * occurred is rooted or jailbroken
 * @member {string} [details.screenSize] Screen size of the device in pixels
 * (example: 640x480).
 * @member {date} [details.appStartTimestamp] Application launch timestamp
 * (example: 1985-04-12T23:20:50.52Z).
 * @member {string} crashId
 * @member {string} [displayId]
 * @member {date} timestamp
 * @member {string} version
 * @member {string} build
 * @member {string} device
 * @member {string} [deviceName]
 * @member {string} osVersion
 * @member {string} [osType]
 * @member {object} [stacktrace]
 * @member {string} [stacktrace.title]
 * @member {string} [stacktrace.reason]
 * @member {array} [stacktrace.threads]
 * @member {object} [stacktrace.exception]
 * @member {string} [stacktrace.exception.reason] Reason of the exception
 * @member {string} [stacktrace.exception.type] Type of the exception
 * (NSSomethingException, NullPointerException)
 * @member {array} [stacktrace.exception.frames] frames of the excetpion
 * @member {boolean} [stacktrace.exception.relevant] relevant exception
 * (crashed)
 * @member {array} [stacktrace.exception.innerExceptions]
 * @member {string} [stacktrace.exception.platform] SDK/Platform this thread is
 * beeing generated from. Possible values include: 'ios', 'android', 'xamarin',
 * 'react-native', 'ndk', 'unity', 'other'
 * @member {string} userName
 * @member {string} [userEmail]
 */
export interface Crash {
  details?: CrashDetails;
  crashId: string;
  displayId?: string;
  timestamp: Date;
  version: string;
  build: string;
  device: string;
  deviceName?: string;
  osVersion: string;
  osType?: string;
  stacktrace?: Stacktrace;
  userName: string;
  userEmail?: string;
}


/**
 * @class
 * Initializes a new instance of the HockeyAppCrashForwardingInfo class.
 * @constructor
 * @member {boolean} forwardingEnabled
 */
export interface HockeyAppCrashForwardingInfo {
  forwardingEnabled: boolean;
}


/**
 * @class
 * Initializes a new instance of the HockeyAppCrashForwardingChange class.
 * @constructor
 * @member {boolean} [enableForwarding]
 */
export interface HockeyAppCrashForwardingChange {
  enableForwarding?: boolean;
}


/**
 * @class
 * Initializes a new instance of the AlertingCrashGroup class.
 * @constructor
 * @member {string} [url]
 * @member {string} [appDisplayName]
 * @member {string} [appPlatform] SDK/Platform this thread is beeing generated
 * from. Possible values include: 'ios', 'android', 'xamarin', 'react-native',
 * 'ndk', 'unity', 'other'
 * @member {string} [appVersion]
 * @member {string} [id]
 * @member {string} [name]
 * @member {string} [reason]
 * @member {array} [stackTrace]
 */
export interface AlertingCrashGroup {
  url?: string;
  appDisplayName?: string;
  appPlatform?: string;
  appVersion?: string;
  id?: string;
  name?: string;
  reason?: string;
  stackTrace?: string[];
}


/**
 * @class
 * Initializes a new instance of the MissingSymbol class.
 * @constructor
 * missing symbol
 *
 * @member {string} symbolId symbol id
 * @member {string} name symbol name
 * @member {string} [platform] symbol plarform
 * @member {string} status symbol status. Possible values include: 'missing',
 * 'ignored', 'available'
 */
export interface MissingSymbol {
  symbolId: string;
  name: string;
  platform?: string;
  status: string;
}


/**
 * @class
 * Initializes a new instance of the CrashLocation class.
 * @constructor
 * crash location information
 *
 * @member {string} account azure account
 * @member {string} container blob container
 * @member {string} blob blob name
 */
export interface CrashLocation {
  account: string;
  container: string;
  blob: string;
}


/**
 * @class
 * Initializes a new instance of the ParkedCrash class.
 * @constructor
 * parked crash
 *
 * @member {string} appId application id
 * @member {string} appVer application version
 * @member {string} appBuild application build
 * @member {array} missingSymbols list of missing symbols
 * @member {string} crashId id of the crash
 * @member {string} sdkPlatform platform of the sdk that sent crash
 * @member {string} [sdkWrapper] name of the sdk wrapper that sent crash
 * @member {object} location crash location
 * @member {string} [location.account] azure account
 * @member {string} [location.container] blob container
 * @member {string} [location.blob] blob name
 */
export interface ParkedCrash {
  appId: string;
  appVer: string;
  appBuild: string;
  missingSymbols: MissingSymbol[];
  crashId: string;
  sdkPlatform: string;
  sdkWrapper?: string;
  location: CrashLocation;
}


/**
 * @class
 * Initializes a new instance of the SymbolUpdateInfo class.
 * @constructor
 * symbol update message
 *
 * @member {string} symbolId UUID of the symbol
 * @member {string} appId application id
 * @member {string} status symbol upload status. Possible values include:
 * 'missing', 'ignored', 'available'
 */
export interface SymbolUpdateInfo {
  symbolId: string;
  appId: string;
  status: string;
}


/**
 * @class
 * Initializes a new instance of the MissingSymbolCrashGroup class.
 * @constructor
 * missing symbol crash group object
 *
 * @member {string} symbolGroupId id of the symbol group
 * @member {number} [crashCount] number of crashes that belong to this group
 * @member {string} appId application id
 * @member {string} appVer application version
 * @member {string} appBuild application build
 * @member {date} lastModified last update date for the group
 * @member {array} missingSymbols list of missing symbols
 * @member {string} status group status. Possible values include: 'active',
 * 'pending', 'closed'
 */
export interface MissingSymbolCrashGroup {
  symbolGroupId: string;
  crashCount?: number;
  appId: string;
  appVer: string;
  appBuild: string;
  lastModified: Date;
  missingSymbols: MissingSymbol[];
  status: string;
}


/**
 * @class
 * Initializes a new instance of the MissingSymbolCrashGroupsResponse class.
 * @constructor
 * grouped by missing symbols crashes response object
 *
 * @member {number} totalCrashCount total number of cashes for all the groups
 * @member {array} groups list of crash groups formed by missing symbols
 * combination
 */
export interface MissingSymbolCrashGroupsResponse {
  totalCrashCount: number;
  groups: MissingSymbolCrashGroup[];
}


/**
 * @class
 * Initializes a new instance of the MissingSymbolCrashGroupsInfoResponse class.
 * @constructor
 * missing symbol groups
 *
 * @member {number} totalCrashCount total number of crashes for all missing
 * symbol groups
 */
export interface MissingSymbolCrashGroupsInfoResponse {
  totalCrashCount: number;
}


/**
 * @class
 * Initializes a new instance of the FailureResponse class.
 * @constructor
 * failure response object
 *
 * @member {string} code
 * @member {string} message
 */
export interface FailureResponse {
  code: string;
  message: string;
}


/**
 * @class
 * Initializes a new instance of the CrashingAppDetail class.
 * @constructor
 * @member {string} [appId] application identifier
 * @member {string} [appVersion] application version
 * @member {string} [crashGroupId] crash group identifier
 */
export interface CrashingAppDetail {
  appId?: string;
  appVersion?: string;
  crashGroupId?: string;
}


/**
 * @class
 * Initializes a new instance of the ActiveCrashingAppDetails class.
 * @constructor
 * @member {string} [nextLink]
 * @member {array} [appsWithCrashes] details of the apps with crashes
 */
export interface ActiveCrashingAppDetails {
  nextLink?: string;
  appsWithCrashes?: CrashingAppDetail[];
}


/**
 * @class
 * Initializes a new instance of the LogTraceDefinition class.
 * @constructor
 * @member {string} appSecret
 * @member {string} [installId]
 * @member {date} [expiration]
 */
export interface LogTraceDefinition {
  appSecret: string;
  installId?: string;
  expiration?: Date;
}


/**
 * @class
 * Initializes a new instance of the Device class.
 * @constructor
 * Device characteristics.
 *
 * @member {string} sdkName Name of the SDK. Consists of the name of the SDK
 * and the platform, e.g. "appcenter.ios", "hockeysdk.android".
 * @member {string} sdkVersion Version of the SDK in semver format, e.g.
 * "1.2.0" or "0.12.3-alpha.1".
 * @member {string} [wrapperSdkVersion] Version of the wrapper SDK in semver
 * format. When the SDK is embedding another base SDK (for example
 * Xamarin.Android wraps Android), the Xamarin specific version is populated
 * into this field while sdkVersion refers to the original Android SDK.
 * @member {string} [wrapperSdkName] Name of the wrapper SDK. Consists of the
 * name of the SDK and the wrapper platform, e.g. "appcenter.xamarin",
 * "hockeysdk.cordova".
 * @member {string} [model] Device model (example: iPad2,3).
 * @member {string} [oemName] Device manufacturer (example: HTC).
 * @member {string} osName OS name (example: iOS). The following OS names are
 * standardized (non-exclusive): Android, iOS, macOS, tvOS, Windows.
 * @member {string} osVersion OS version (example: 9.3.0).
 * @member {string} [osBuild] OS build code (example: LMY47X).
 * @member {number} [osApiLevel] API level when applicable like in Android
 * (example: 15).
 * @member {string} locale Language code (example: en_US).
 * @member {number} timeZoneOffset The offset in minutes from UTC for the
 * device time zone, including daylight savings time.
 * @member {string} [screenSize] Screen size of the device in pixels (example:
 * 640x480).
 * @member {string} appVersion Application version name, e.g. 1.1.0
 * @member {string} [carrierName] Carrier name (for mobile devices).
 * @member {string} [carrierCode] Carrier country code (for mobile devices).
 * @member {string} [carrierCountry] Carrier country.
 * @member {string} appBuild The app's build number, e.g. 42.
 * @member {string} [appNamespace] The bundle identifier, package identifier,
 * or namespace, depending on what the individual plattforms use,  .e.g
 * com.microsoft.example.
 * @member {string} [liveUpdateReleaseLabel] Label that is used to identify
 * application code 'version' released via Live Update beacon running on device
 * @member {string} [liveUpdateDeploymentKey] Identifier of environment that
 * current application release belongs to, deployment key then maps to
 * environment like Production, Staging.
 * @member {string} [liveUpdatePackageHash] Hash of all files (ReactNative or
 * Cordova) deployed to device via LiveUpdate beacon. Helps identify the
 * Release version on device or need to download updates in future.
 * @member {string} [wrapperRuntimeVersion] Version of the wrapper technology
 * framework (Xamarin runtime version or ReactNative or Cordova etc...). See
 * wrapper_sdk_name to see if this version refers to Xamarin or ReactNative or
 * other.
 */
export interface Device {
  sdkName: string;
  sdkVersion: string;
  wrapperSdkVersion?: string;
  wrapperSdkName?: string;
  model?: string;
  oemName?: string;
  osName: string;
  osVersion: string;
  osBuild?: string;
  osApiLevel?: number;
  locale: string;
  timeZoneOffset: number;
  screenSize?: string;
  appVersion: string;
  carrierName?: string;
  carrierCode?: string;
  carrierCountry?: string;
  appBuild: string;
  appNamespace?: string;
  liveUpdateReleaseLabel?: string;
  liveUpdateDeploymentKey?: string;
  liveUpdatePackageHash?: string;
  wrapperRuntimeVersion?: string;
}


/**
 * @class
 * Initializes a new instance of the Log class.
 * @constructor
 * @member {date} timestamp Log creation timestamp.
 * @member {uuid} installId Install ID.
 * @member {object} device
 * @member {string} [device.sdkName] Name of the SDK. Consists of the name of
 * the SDK and the platform, e.g. "appcenter.ios", "hockeysdk.android".
 * @member {string} [device.sdkVersion] Version of the SDK in semver format,
 * e.g. "1.2.0" or "0.12.3-alpha.1".
 * @member {string} [device.wrapperSdkVersion] Version of the wrapper SDK in
 * semver format. When the SDK is embedding another base SDK (for example
 * Xamarin.Android wraps Android), the Xamarin specific version is populated
 * into this field while sdkVersion refers to the original Android SDK.
 * @member {string} [device.wrapperSdkName] Name of the wrapper SDK. Consists
 * of the name of the SDK and the wrapper platform, e.g. "appcenter.xamarin",
 * "hockeysdk.cordova".
 * @member {string} [device.model] Device model (example: iPad2,3).
 * @member {string} [device.oemName] Device manufacturer (example: HTC).
 * @member {string} [device.osName] OS name (example: iOS). The following OS
 * names are standardized (non-exclusive): Android, iOS, macOS, tvOS, Windows.
 * @member {string} [device.osVersion] OS version (example: 9.3.0).
 * @member {string} [device.osBuild] OS build code (example: LMY47X).
 * @member {number} [device.osApiLevel] API level when applicable like in
 * Android (example: 15).
 * @member {string} [device.locale] Language code (example: en_US).
 * @member {number} [device.timeZoneOffset] The offset in minutes from UTC for
 * the device time zone, including daylight savings time.
 * @member {string} [device.screenSize] Screen size of the device in pixels
 * (example: 640x480).
 * @member {string} [device.appVersion] Application version name, e.g. 1.1.0
 * @member {string} [device.carrierName] Carrier name (for mobile devices).
 * @member {string} [device.carrierCode] Carrier country code (for mobile
 * devices).
 * @member {string} [device.carrierCountry] Carrier country.
 * @member {string} [device.appBuild] The app's build number, e.g. 42.
 * @member {string} [device.appNamespace] The bundle identifier, package
 * identifier, or namespace, depending on what the individual plattforms use,
 * .e.g com.microsoft.example.
 * @member {string} [device.liveUpdateReleaseLabel] Label that is used to
 * identify application code 'version' released via Live Update beacon running
 * on device
 * @member {string} [device.liveUpdateDeploymentKey] Identifier of environment
 * that current application release belongs to, deployment key then maps to
 * environment like Production, Staging.
 * @member {string} [device.liveUpdatePackageHash] Hash of all files
 * (ReactNative or Cordova) deployed to device via LiveUpdate beacon. Helps
 * identify the Release version on device or need to download updates in
 * future.
 * @member {string} [device.wrapperRuntimeVersion] Version of the wrapper
 * technology framework (Xamarin runtime version or ReactNative or Cordova
 * etc...). See wrapper_sdk_name to see if this version refers to Xamarin or
 * ReactNative or other.
 * @member {string} type Polymorphic Discriminator
 */
export interface Log {
  timestamp: Date;
  installId: string;
  device: Device;
  type: string;
}


/**
 * @class
 * Initializes a new instance of the LogContainer class.
 * @constructor
 * @member {boolean} [exceededMaxLimit] indicates if the number of available
 * logs are more than the max allowed return limit(100).
 * @member {date} [lastReceivedLogTimestamp] the timestamp of the last log
 * received. This value can be used as the start time parameter in the
 * consecutive API call.
 * @member {array} logs the list of logs
 */
export interface LogContainer {
  exceededMaxLimit?: boolean;
  lastReceivedLogTimestamp?: Date;
  logs: Log[];
}


/**
 * @class
 * Initializes a new instance of the GenericLog class.
 * @constructor
 * Generic log.
 *
 * @member {string} type Log type.
 * . Possible values include: 'event', 'page', 'start_session', 'error',
 * 'push_installation', 'start_service', 'custom_properties'
 * @member {date} timestamp Log creation timestamp.
 * @member {uuid} installId Install ID.
 * @member {uuid} [sessionId] Session ID.
 * @member {string} [eventId] Event ID.
 * @member {string} [eventName] Event name.
 * @member {string} [messageId] Message ID.
 * @member {object} [properties] event specific properties.
 * @member {object} device
 * @member {string} [device.sdkName] Name of the SDK. Consists of the name of
 * the SDK and the platform, e.g. "appcenter.ios", "hockeysdk.android".
 * @member {string} [device.sdkVersion] Version of the SDK in semver format,
 * e.g. "1.2.0" or "0.12.3-alpha.1".
 * @member {string} [device.wrapperSdkVersion] Version of the wrapper SDK in
 * semver format. When the SDK is embedding another base SDK (for example
 * Xamarin.Android wraps Android), the Xamarin specific version is populated
 * into this field while sdkVersion refers to the original Android SDK.
 * @member {string} [device.wrapperSdkName] Name of the wrapper SDK. Consists
 * of the name of the SDK and the wrapper platform, e.g. "appcenter.xamarin",
 * "hockeysdk.cordova".
 * @member {string} [device.model] Device model (example: iPad2,3).
 * @member {string} [device.oemName] Device manufacturer (example: HTC).
 * @member {string} [device.osName] OS name (example: iOS). The following OS
 * names are standardized (non-exclusive): Android, iOS, macOS, tvOS, Windows.
 * @member {string} [device.osVersion] OS version (example: 9.3.0).
 * @member {string} [device.osBuild] OS build code (example: LMY47X).
 * @member {number} [device.osApiLevel] API level when applicable like in
 * Android (example: 15).
 * @member {string} [device.locale] Language code (example: en_US).
 * @member {number} [device.timeZoneOffset] The offset in minutes from UTC for
 * the device time zone, including daylight savings time.
 * @member {string} [device.screenSize] Screen size of the device in pixels
 * (example: 640x480).
 * @member {string} [device.appVersion] Application version name, e.g. 1.1.0
 * @member {string} [device.carrierName] Carrier name (for mobile devices).
 * @member {string} [device.carrierCode] Carrier country code (for mobile
 * devices).
 * @member {string} [device.carrierCountry] Carrier country.
 * @member {string} [device.appBuild] The app's build number, e.g. 42.
 * @member {string} [device.appNamespace] The bundle identifier, package
 * identifier, or namespace, depending on what the individual plattforms use,
 * .e.g com.microsoft.example.
 * @member {string} [device.liveUpdateReleaseLabel] Label that is used to
 * identify application code 'version' released via Live Update beacon running
 * on device
 * @member {string} [device.liveUpdateDeploymentKey] Identifier of environment
 * that current application release belongs to, deployment key then maps to
 * environment like Production, Staging.
 * @member {string} [device.liveUpdatePackageHash] Hash of all files
 * (ReactNative or Cordova) deployed to device via LiveUpdate beacon. Helps
 * identify the Release version on device or need to download updates in
 * future.
 * @member {string} [device.wrapperRuntimeVersion] Version of the wrapper
 * technology framework (Xamarin runtime version or ReactNative or Cordova
 * etc...). See wrapper_sdk_name to see if this version refers to Xamarin or
 * ReactNative or other.
 */
export interface GenericLog {
  type: string;
  timestamp: Date;
  installId: string;
  sessionId?: string;
  eventId?: string;
  eventName?: string;
  messageId?: string;
  properties?: { [propertyName: string]: string };
  device: Device;
}


/**
 * @class
 * Initializes a new instance of the GenericLogContainer class.
 * @constructor
 * @member {boolean} [exceededMaxLimit] indicates if the number of available
 * logs are more than the max allowed return limit(100).
 * @member {date} [lastReceivedLogTimestamp] the timestamp of the last log
 * received. This value can be used as the start time parameter in the
 * consecutive API call.
 * @member {array} logs the list of logs
 */
export interface GenericLogContainer {
  exceededMaxLimit?: boolean;
  lastReceivedLogTimestamp?: Date;
  logs: GenericLog[];
}


/**
 * @class
 * Initializes a new instance of the LogWithProperties class.
 * @constructor
 * @member {object} [properties] Additional key/value pair parameters.
 */
export interface LogWithProperties extends Log {
  properties?: { [propertyName: string]: string };
}


/**
 * @class
 * Initializes a new instance of the StartSessionLog class.
 * @constructor
 * Required explicit begin session log (a marker event for analytics service).
 *
 * @member {uuid} sessionId Session ID.
 */
export interface StartSessionLog extends Log {
  sessionId: string;
}


/**
 * @class
 * Initializes a new instance of the HanledErrorLog class.
 * @constructor
 * Required explicit begin session log (a marker event for analytics service).
 *
 * @member {uuid} errorId Error ID.
 */
export interface HanledErrorLog extends Log {
  errorId: string;
}


/**
 * @class
 * Initializes a new instance of the StartServiceLog class.
 * @constructor
 * Describe a AppCenter.Start API call from the SDK.
 *
 * @member {array} [services] The list of services of the AppCenter Start API
 * call.
 */
export interface StartServiceLog extends Log {
  services?: string[];
}


/**
 * @class
 * Initializes a new instance of the CustomProperty class.
 * @constructor
 * @member {string} name
 * @member {string} type Polymorphic Discriminator
 */
export interface CustomProperty {
  name: string;
  type: string;
}


/**
 * @class
 * Initializes a new instance of the CustomPropertyLog class.
 * @constructor
 * Set or remove custom properties.
 *
 * @member {array} [properties] Custom property changes.
 */
export interface CustomPropertyLog extends Log {
  properties?: CustomProperty[];
}


/**
 * @class
 * Initializes a new instance of the StringProperty class.
 * @constructor
 * String property.
 *
 * @member {string} value String property value.
 */
export interface StringProperty extends CustomProperty {
  value: string;
}


/**
 * @class
 * Initializes a new instance of the NumberProperty class.
 * @constructor
 * Number property.
 *
 * @member {number} value Number property value.
 */
export interface NumberProperty extends CustomProperty {
  value: number;
}


/**
 * @class
 * Initializes a new instance of the BooleanProperty class.
 * @constructor
 * Boolean property.
 *
 * @member {boolean} value Boolean property value.
 */
export interface BooleanProperty extends CustomProperty {
  value: boolean;
}


/**
 * @class
 * Initializes a new instance of the DateTimeProperty class.
 * @constructor
 * Date and time property.
 *
 * @member {date} value Date time property value.
 */
export interface DateTimeProperty extends CustomProperty {
  value: Date;
}


/**
 * @class
 * Initializes a new instance of the ClearProperty class.
 * @constructor
 * Clear an existing property.
 *
 */
export interface ClearProperty extends CustomProperty {
}


/**
 * @class
 * Initializes a new instance of the PageLog class.
 * @constructor
 * Page view log (as in screens or activities).
 *
 * @member {uuid} sessionId Session ID.
 * @member {string} name Name of the page.
 */
export interface PageLog extends LogWithProperties {
  sessionId: string;
  name: string;
}


/**
 * @class
 * Initializes a new instance of the EventLog class.
 * @constructor
 * Event log.
 *
 * @member {uuid} sessionId Session ID.
 * @member {uuid} id Unique identifier for this event.
 * @member {string} name Name of the event.
 */
export interface EventLog extends LogWithProperties {
  sessionId: string;
  id: string;
  name: string;
}


/**
 * @class
 * Initializes a new instance of the PushInstallationLog class.
 * @constructor
 * Push installation Information.
 *
 * @member {string} pushToken The PNS handle for this installation.
 */
export interface PushInstallationLog extends Log {
  pushToken: string;
}


/**
 * @class
 * Initializes a new instance of the ErrorLog class.
 * @constructor
 * Error log.
 *
 * @member {uuid} sessionId Session ID.
 * @member {uuid} id Error identifier.
 * @member {number} [appLaunchToffset] Corresponds to the number of
 * milliseconds elapsed between the time the error occurred and the app was
 * launched.
 */
export interface ErrorLog extends Log {
  sessionId: string;
  id: string;
  appLaunchToffset?: number;
}


/**
 * @class
 * Initializes a new instance of the AudienceSummary class.
 * @constructor
 * Audience definition.
 *
 * @member {string} [name] Audience name.
 * @member {string} [description] Audience description.
 * @member {number} [estimatedCount] Estimated audience size.
 * @member {string} [definition] Audience definition in OData format.
 * @member {string} [state] Audience state. Possible values include:
 * 'Calculating', 'Ready', 'Disabled'
 */
export interface AudienceSummary {
  name?: string;
  description?: string;
  estimatedCount?: number;
  definition?: string;
  state?: string;
}


/**
 * @class
 * Initializes a new instance of the AudienceListResult class.
 * @constructor
 * List of audiences.
 *
 * @member {array} values List of audiences.
 * @member {string} [nextLink]
 */
export interface AudienceListResult {
  values: AudienceSummary[];
  nextLink?: string;
}


/**
 * @class
 * Initializes a new instance of the Audience class.
 * @constructor
 * Audience with details.
 *
 * @member {boolean} [enabled] Default value: true .
 * @member {object} [customProperties] Custom properties used in the
 * definition.
 * @member {number} [estimatedTotalCount] Estimated total audience size.
 * @member {date} [timestamp] Date the audience was last refreshed.
 */
export interface Audience extends AudienceSummary {
  enabled?: boolean;
  customProperties?: { [propertyName: string]: string };
  estimatedTotalCount?: number;
  timestamp?: Date;
}


/**
 * @class
 * Initializes a new instance of the AudienceTestResult class.
 * @constructor
 * Audience test result.
 *
 * @member {string} [definition] Audience definition in OData format.
 * @member {object} [customProperties] Custom properties used in the
 * definition.
 * @member {number} [estimatedCount] Estimated audience size.
 * @member {number} [estimatedTotalCount] Estimated total audience size.
 */
export interface AudienceTestResult {
  definition?: string;
  customProperties?: { [propertyName: string]: string };
  estimatedCount?: number;
  estimatedTotalCount?: number;
}


/**
 * @class
 * Initializes a new instance of the AudienceDefinition class.
 * @constructor
 * Audience definition.
 *
 * @member {string} [description] Audience description.
 * @member {string} definition Audience definition in OData format.
 * @member {boolean} [enabled] Default value: true .
 * @member {object} [customProperties] Custom properties used in the
 * definition.
 */
export interface AudienceDefinition {
  description?: string;
  definition: string;
  enabled?: boolean;
  customProperties?: { [propertyName: string]: string };
}


/**
 * @class
 * Initializes a new instance of the AudienceBlobResult class.
 * @constructor
 * Audience definition.
 *
 * @member {string} [url] Location of the audience blob.
 */
export interface AudienceBlobResult {
  url?: string;
}


/**
 * @class
 * Initializes a new instance of the AudienceDevicePropertiesListResult class.
 * @constructor
 * List of device properties.
 *
 * @member {object} values List of device properties.
 */
export interface AudienceDevicePropertiesListResult {
  values: { [propertyName: string]: string };
}


/**
 * @class
 * Initializes a new instance of the AudienceDevicePropertyValuesListResult class.
 * @constructor
 * List of device property values.
 *
 * @member {array} values List of device property values.
 */
export interface AudienceDevicePropertyValuesListResult {
  values: string[];
}


/**
 * @class
 * Initializes a new instance of the DateTimeCounts class.
 * @constructor
 * @member {string} [datetime] the ISO 8601 datetime
 * @member {number} [count] count of the object
 */
export interface DateTimeCounts {
  datetime?: string;
  count?: number;
}


/**
 * @class
 * Initializes a new instance of the CrashCounts class.
 * @constructor
 * @member {number} [count] total crash count
 * @member {array} [crashes] the total crash count for day
 */
export interface CrashCounts {
  count?: number;
  crashes?: DateTimeCounts[];
}


/**
 * @class
 * Initializes a new instance of the ErrorCounts class.
 * @constructor
 * @member {number} [count] total error count
 * @member {array} [errors] the total error count for day
 */
export interface ErrorCounts {
  count?: number;
  errors?: DateTimeCounts[];
}


/**
 * @class
 * Initializes a new instance of the ActiveDeviceCounts class.
 * @constructor
 * @member {array} [daily] the active device count for each interval
 * @member {array} [weekly] the active device count for each interval with a
 * week's retention
 * @member {array} [monthly] the active device count for each interval with a
 * month's retention
 */
export interface ActiveDeviceCounts {
  daily?: DateTimeCounts[];
  weekly?: DateTimeCounts[];
  monthly?: DateTimeCounts[];
}


/**
 * @class
 * Initializes a new instance of the Place class.
 * @constructor
 * The place code and the count
 *
 * @member {string} [code] the place code
 * @member {number} [count] the count of the this place
 * @member {number} [previousCount] the count of previous time range of the
 * place
 */
export interface Place {
  code?: string;
  count?: number;
  previousCount?: number;
}


/**
 * @class
 * Initializes a new instance of the Places class.
 * @constructor
 * Places and count during the time range in descending order
 *
 * @member {number} [total]
 * @member {array} [places]
 */
export interface Places {
  total?: number;
  places?: Place[];
}


/**
 * @class
 * Initializes a new instance of the ErrorError class.
 * @constructor
 * @member {number} [code] The status code return by the API. It can be 400 or
 * 403 or 500.
 * @member {string} [message] The reason for the request failed
 */
export interface ErrorError {
  code?: number;
  message?: string;
}


/**
 * @class
 * Initializes a new instance of the ErrorModel class.
 * @constructor
 * Error
 *
 * @member {object} [error]
 * @member {number} [error.code] The status code return by the API. It can be
 * 400 or 403 or 500.
 * @member {string} [error.message] The reason for the request failed
 */
export interface ErrorModel {
  error?: ErrorError;
}


/**
 * @class
 * Initializes a new instance of the SessionDurationsDistributionDistributionItem class.
 * @constructor
 * @member {string} [bucket] the bucket name
 * @member {number} [count] the count of sessions in current bucket
 */
export interface SessionDurationsDistributionDistributionItem {
  bucket?: string;
  count?: number;
}


/**
 * @class
 * Initializes a new instance of the SessionDurationsDistribution class.
 * @constructor
 * @member {array} [distribution] the count of sessions in these buckets
 * @member {string} [previousAverageDuration] the previous average session
 * duration for previous time range
 * @member {string} [averageDuration] the average session duration for current
 * time range
 */
export interface SessionDurationsDistribution {
  distribution?: SessionDurationsDistributionDistributionItem[];
  previousAverageDuration?: string;
  averageDuration?: string;
}


/**
 * @class
 * Initializes a new instance of the Version class.
 * @constructor
 * @member {string} [version] version
 * @member {number} [count] version count
 * @member {number} [previousCount] the count of previous time range of the
 * version
 */
export interface Version {
  version?: string;
  count?: number;
  previousCount?: number;
}


/**
 * @class
 * Initializes a new instance of the Versions class.
 * @constructor
 * @member {array} [versions] list of version count
 * @member {number} [total] the total count of versions
 */
export interface Versions {
  versions?: Version[];
  total?: number;
}


/**
 * @class
 * Initializes a new instance of the SessionsPerDeviceSessionsPerUserItem class.
 * @constructor
 * @member {string} [datetime] the ISO 8601 datetime
 * @member {number} [count] count
 */
export interface SessionsPerDeviceSessionsPerUserItem {
  datetime?: string;
  count?: number;
}


/**
 * @class
 * Initializes a new instance of the SessionsPerDevice class.
 * @constructor
 * @member {number} [averageSessionsPerUser] average seesion per user
 * @member {number} [previousAverageSessionsPerUser] previous average session
 * per user
 * @member {number} [totalCount] total session per device count
 * @member {number} [previousTotalCount] previous total count
 * @member {array} [sessionsPerUser] the session count for each interval per
 * device
 */
export interface SessionsPerDevice {
  averageSessionsPerUser?: number;
  previousAverageSessionsPerUser?: number;
  totalCount?: number;
  previousTotalCount?: number;
  sessionsPerUser?: SessionsPerDeviceSessionsPerUserItem[];
}


/**
 * @class
 * Initializes a new instance of the Model class.
 * @constructor
 * @member {string} [modelName] model's name
 * @member {number} [count] count current of model
 * @member {number} [previousCount] count of previous model
 */
export interface Model {
  modelName?: string;
  count?: number;
  previousCount?: number;
}


/**
 * @class
 * Initializes a new instance of the AnalyticsModels class.
 * @constructor
 * @member {number} [total]
 * @member {array} [modelsProperty]
 */
export interface AnalyticsModels {
  total?: number;
  modelsProperty?: Model[];
}


/**
 * @class
 * Initializes a new instance of the Language class.
 * @constructor
 * @member {string} [languageName] language's name
 * @member {number} [count] count current of language
 * @member {number} [previousCount] count of previous lanugage
 */
export interface Language {
  languageName?: string;
  count?: number;
  previousCount?: number;
}


/**
 * @class
 * Initializes a new instance of the Languages class.
 * @constructor
 * @member {number} [total]
 * @member {array} [languages]
 */
export interface Languages {
  total?: number;
  languages?: Language[];
}


/**
 * @class
 * Initializes a new instance of the OS class.
 * @constructor
 * @member {string} [osName] OS name
 * @member {number} [count] count current of OS
 * @member {number} [previousCount] count of previous OS
 */
export interface OS {
  osName?: string;
  count?: number;
  previousCount?: number;
}


/**
 * @class
 * Initializes a new instance of the OSes class.
 * @constructor
 * @member {number} [total]
 * @member {array} [oses]
 */
export interface OSes {
  total?: number;
  oses?: OS[];
}


/**
 * @class
 * Initializes a new instance of the DateTimeDecimalCounts class.
 * @constructor
 * @member {string} [datetime] the ISO 8601 datetime
 * @member {number} [count] decimal count of the object
 */
export interface DateTimeDecimalCounts {
  datetime?: string;
  count?: number;
}


/**
 * @class
 * Initializes a new instance of the AvailableVersions class.
 * @constructor
 * @member {array} [versions] List of available versions.
 * @member {number} [totalCount] The full number of versions across all pages.
 */
export interface AvailableVersions {
  versions?: string[];
  totalCount?: number;
}


/**
 * @class
 * Initializes a new instance of the DateTimePercentages class.
 * @constructor
 * @member {string} [datetime] the ISO 8601 datetime
 * @member {number} [percentage] percentage of the object
 */
export interface DateTimePercentages {
  datetime?: string;
  percentage?: number;
}


/**
 * @class
 * Initializes a new instance of the CrashFreeDevicePercentages class.
 * @constructor
 * @member {number} [averagePercentage] Average percentage
 * @member {array} [dailyPercentages] The crash-free percentage per day.
 */
export interface CrashFreeDevicePercentages {
  averagePercentage?: number;
  dailyPercentages?: DateTimePercentages[];
}


/**
 * @class
 * Initializes a new instance of the Modules class.
 * @constructor
 * @member {object} [modules]
 */
export interface Modules {
  modules?: { [propertyName: string]: { [propertyName: string]: boolean } };
}


/**
 * @class
 * Initializes a new instance of the CrashOverall class.
 * @constructor
 * @member {number} [crashCount]
 * @member {number} [deviceCount]
 */
export interface CrashOverall {
  crashCount?: number;
  deviceCount?: number;
}


/**
 * @class
 * Initializes a new instance of the CrashesOverallItem class.
 * @constructor
 * @member {string} [crashGroupId]
 * @member {string} [appVersion]
 * @member {object} [overall]
 * @member {number} [overall.crashCount]
 * @member {number} [overall.deviceCount]
 */
export interface CrashesOverallItem {
  crashGroupId?: string;
  appVersion?: string;
  overall?: CrashOverall;
}


/**
 * @class
 * Initializes a new instance of the CrashGroupModel class.
 * @constructor
 * @member {string} [modelName] model's name
 * @member {number} [crashCount] count of model
 */
export interface CrashGroupModel {
  modelName?: string;
  crashCount?: number;
}


/**
 * @class
 * Initializes a new instance of the CrashGroupModels class.
 * @constructor
 * @member {number} [crashCount]
 * @member {array} [modelsProperty]
 */
export interface CrashGroupModels {
  crashCount?: number;
  modelsProperty?: CrashGroupModel[];
}


/**
 * @class
 * Initializes a new instance of the ErrorGroupState class.
 * @constructor
 * @member {string} state Possible values include: 'open', 'closed', 'ignored'
 */
export interface ErrorGroupState {
  state: string;
}


/**
 * @class
 * Initializes a new instance of the ErrorGroupListItem class.
 * @constructor
 * @member {string} errorGroupId
 * @member {string} appVersion
 * @member {number} count
 * @member {number} deviceCount
 * @member {date} lastOccurrence
 * @member {string} [exceptionType]
 * @member {string} [exceptionMessage]
 */
export interface ErrorGroupListItem extends ErrorGroupState {
  errorGroupId: string;
  appVersion: string;
  count: number;
  deviceCount: number;
  lastOccurrence: Date;
  exceptionType?: string;
  exceptionMessage?: string;
}


/**
 * @class
 * Initializes a new instance of the ErrorGroups class.
 * @constructor
 * @member {string} [nextLink]
 * @member {array} [errorGroups]
 */
export interface ErrorGroups {
  nextLink?: string;
  errorGroups?: ErrorGroupListItem[];
}


/**
 * @class
 * Initializes a new instance of the HandledErrorReasonFrame class.
 * @constructor
 * @member {string} [className] name of the class
 * @member {string} [method] name of the method
 * @member {boolean} [classMethod] is a class method
 * @member {string} [file] name of the file
 * @member {number} [line] line number
 * @member {boolean} [appCode] this line isn't from any framework
 * @member {string} [frameworkName] Name of the framework
 * @member {string} [codeFormatted] Formatted frame string
 * @member {string} [codeRaw] Unformatted Frame string
 * @member {string} [language] programming language of the frame. Possible
 * values include: 'JavaScript', 'CSharp', 'Objective-C', 'Objective-Cpp',
 * 'Cpp', 'C', 'Swift', 'Java', 'Unknown'
 * @member {string} [methodParams] parameters of the frames method
 * @member {string} [exceptionType] Exception type.
 * @member {string} [osExceptionType] OS exception type. (aka. SIGNAL)
 */
export interface HandledErrorReasonFrame {
  className?: string;
  method?: string;
  classMethod?: boolean;
  file?: string;
  line?: number;
  appCode?: boolean;
  frameworkName?: string;
  codeFormatted?: string;
  codeRaw?: string;
  language?: string;
  methodParams?: string;
  exceptionType?: string;
  osExceptionType?: string;
}


/**
 * @class
 * Initializes a new instance of the ErrorGroup class.
 * @constructor
 * @member {string} errorGroupId
 * @member {string} appVersion
 * @member {number} count
 * @member {number} deviceCount
 * @member {date} firstOccurrence
 * @member {date} lastOccurrence
 * @member {string} [exceptionType]
 * @member {string} [exceptionMessage]
 * @member {string} [exceptionFile]
 * @member {string} [exceptionLine]
 * @member {array} [reasonFrames]
 */
export interface ErrorGroup extends ErrorGroupState {
  errorGroupId: string;
  appVersion: string;
  count: number;
  deviceCount: number;
  firstOccurrence: Date;
  lastOccurrence: Date;
  exceptionType?: string;
  exceptionMessage?: string;
  exceptionFile?: string;
  exceptionLine?: string;
  reasonFrames?: HandledErrorReasonFrame[];
}


/**
 * @class
 * Initializes a new instance of the ErrorDownloadLink class.
 * @constructor
 * @member {string} link
 */
export interface ErrorDownloadLink {
  link: string;
}


/**
 * @class
 * Initializes a new instance of the ErrorFreeDevicePercentages class.
 * @constructor
 * @member {number} [averagePercentage] Average percentage
 * @member {array} [dailyPercentages] The error-free percentage per day.
 */
export interface ErrorFreeDevicePercentages {
  averagePercentage?: number;
  dailyPercentages?: DateTimePercentages[];
}


/**
 * @class
 * Initializes a new instance of the HandledError class.
 * @constructor
 * @member {string} [errorId]
 * @member {date} [timestamp]
 * @member {string} [deviceName]
 * @member {string} [osVersion]
 * @member {string} [osType]
 * @member {string} [country]
 * @member {string} [language]
 */
export interface HandledError {
  errorId?: string;
  timestamp?: Date;
  deviceName?: string;
  osVersion?: string;
  osType?: string;
  country?: string;
  language?: string;
}


/**
 * @class
 * Initializes a new instance of the HandledErrors class.
 * @constructor
 * @member {string} [nextLink]
 * @member {array} [errors] Errors list.
 */
export interface HandledErrors {
  nextLink?: string;
  errors?: HandledError[];
}


/**
 * @class
 * Initializes a new instance of the HandledErrorDetails class.
 * @constructor
 * @member {string} [name]
 * @member {array} [reasonFrames]
 * @member {object} [properties]
 */
export interface HandledErrorDetails extends HandledError {
  name?: string;
  reasonFrames?: HandledErrorReasonFrame[];
  properties?: { [propertyName: string]: string };
}


/**
 * @class
 * Initializes a new instance of the ErrorGroupModel class.
 * @constructor
 * @member {string} [modelName] model name
 * @member {string} [modelCode] model code
 * @member {number} [errorCount] count of errors in a model
 */
export interface ErrorGroupModel {
  modelName?: string;
  modelCode?: string;
  errorCount?: number;
}


/**
 * @class
 * Initializes a new instance of the ErrorGroupModels class.
 * @constructor
 * @member {number} [errorCount]
 * @member {array} [modelsProperty]
 */
export interface ErrorGroupModels {
  errorCount?: number;
  modelsProperty?: ErrorGroupModel[];
}


/**
 * @class
 * Initializes a new instance of the ErrorGroupOperatingSystem class.
 * @constructor
 * @member {string} [operatingSystemName] OS name
 * @member {number} [errorCount] count of OS
 */
export interface ErrorGroupOperatingSystem {
  operatingSystemName?: string;
  errorCount?: number;
}


/**
 * @class
 * Initializes a new instance of the ErrorGroupOperatingSystems class.
 * @constructor
 * @member {number} [errorCount]
 * @member {array} [operatingSystems]
 */
export interface ErrorGroupOperatingSystems {
  errorCount?: number;
  operatingSystems?: ErrorGroupOperatingSystem[];
}


/**
 * @class
 * Initializes a new instance of the CrashGroupOperatingSystem class.
 * @constructor
 * @member {string} [operatingSystemName] OS name
 * @member {number} [crashCount] count of OS
 */
export interface CrashGroupOperatingSystem {
  operatingSystemName?: string;
  crashCount?: number;
}


/**
 * @class
 * Initializes a new instance of the CrashGroupOperatingSystems class.
 * @constructor
 * @member {number} [crashCount]
 * @member {array} [operatingSystems]
 */
export interface CrashGroupOperatingSystems {
  crashCount?: number;
  operatingSystems?: CrashGroupOperatingSystem[];
}


/**
 * @class
 * Initializes a new instance of the CrashGroupPlace class.
 * @constructor
 * @member {string} [placeName] Place name
 * @member {number} [crashCount] count of places
 */
export interface CrashGroupPlace {
  placeName?: string;
  crashCount?: number;
}


/**
 * @class
 * Initializes a new instance of the CrashGroupPlaces class.
 * @constructor
 * @member {number} [crashCount]
 * @member {array} [places]
 */
export interface CrashGroupPlaces {
  crashCount?: number;
  places?: CrashGroupPlace[];
}


/**
 * @class
 * Initializes a new instance of the CrashGroupLanguage class.
 * @constructor
 * @member {string} [languageName] language name
 * @member {number} [crashCount] count of languages
 */
export interface CrashGroupLanguage {
  languageName?: string;
  crashCount?: number;
}


/**
 * @class
 * Initializes a new instance of the CrashGroupLanguages class.
 * @constructor
 * @member {number} [crashCount]
 * @member {array} [languages]
 */
export interface CrashGroupLanguages {
  crashCount?: number;
  languages?: CrashGroupLanguage[];
}


/**
 * @class
 * Initializes a new instance of the CrashGroupCarrier class.
 * @constructor
 * @member {string} [carrierName] carrier name
 * @member {number} [crashCount] crash count of carrier
 */
export interface CrashGroupCarrier {
  carrierName?: string;
  crashCount?: number;
}


/**
 * @class
 * Initializes a new instance of the CrashGroupCarriers class.
 * @constructor
 * @member {number} [crashCount]
 * @member {array} [carriers]
 */
export interface CrashGroupCarriers {
  crashCount?: number;
  carriers?: CrashGroupCarrier[];
}


/**
 * @class
 * Initializes a new instance of the CrashGroupAndVersion class.
 * @constructor
 * @member {string} [crashGroupId]
 * @member {string} [appVersion]
 */
export interface CrashGroupAndVersion {
  crashGroupId?: string;
  appVersion?: string;
}


/**
 * @class
 * Initializes a new instance of the CrashGroupContainer class.
 * @constructor
 * @member {array} crashGroups
 */
export interface CrashGroupContainer {
  crashGroups: CrashGroupAndVersion[];
}


/**
 * @class
 * Initializes a new instance of the Event class.
 * @constructor
 * @member {string} [id]
 * @member {string} [name]
 * @member {number} [deviceCount]
 * @member {number} [previousDeviceCount] the device count of previous time
 * range of the event
 * @member {number} [count]
 * @member {number} [previousCount] the event count of previous time range of
 * the event
 * @member {number} [countPerDevice]
 * @member {number} [countPerSession]
 */
export interface Event {
  id?: string;
  name?: string;
  deviceCount?: number;
  previousDeviceCount?: number;
  count?: number;
  previousCount?: number;
  countPerDevice?: number;
  countPerSession?: number;
}


/**
 * @class
 * Initializes a new instance of the Events class.
 * @constructor
 * @member {array} [events]
 * @member {number} [total] the total count of events
 * @member {number} [totalDevices] the active device over this period
 */
export interface Events {
  events?: Event[];
  total?: number;
  totalDevices?: number;
}


/**
 * @class
 * Initializes a new instance of the EventCount class.
 * @constructor
 * @member {number} [totalCount]
 * @member {number} [previousTotalCount]
 * @member {array} [count]
 */
export interface EventCount {
  totalCount?: number;
  previousTotalCount?: number;
  count?: DateTimeCounts[];
}


/**
 * @class
 * Initializes a new instance of the EventDeviceCount class.
 * @constructor
 * @member {number} [totalDevices]
 * @member {number} [totalDevicesWithEvent]
 * @member {number} [previousTotalDevicesWithEvent]
 * @member {array} [devicesCount]
 */
export interface EventDeviceCount {
  totalDevices?: number;
  totalDevicesWithEvent?: number;
  previousTotalDevicesWithEvent?: number;
  devicesCount?: DateTimeCounts[];
}


/**
 * @class
 * Initializes a new instance of the EventCountPerDevice class.
 * @constructor
 * @member {number} [avgCountPerDevice]
 * @member {number} [previousAvgCountPerDevice]
 * @member {array} [countPerDevice]
 */
export interface EventCountPerDevice {
  avgCountPerDevice?: number;
  previousAvgCountPerDevice?: number;
  countPerDevice?: DateTimeDecimalCounts[];
}


/**
 * @class
 * Initializes a new instance of the EventCountPerSession class.
 * @constructor
 * @member {number} [avgCountPerSession]
 * @member {number} [previousAvgCountPerSession]
 * @member {array} [countPerSession]
 */
export interface EventCountPerSession {
  avgCountPerSession?: number;
  previousAvgCountPerSession?: number;
  countPerSession?: DateTimeDecimalCounts[];
}


/**
 * @class
 * Initializes a new instance of the EventProperties class.
 * @constructor
 * Event properties during the time range
 *
 * @member {array} [eventProperties]
 */
export interface EventProperties {
  eventProperties?: string[];
}


/**
 * @class
 * Initializes a new instance of the EventPropertyValue class.
 * @constructor
 * An event property value with counts
 *
 * @member {string} [name] The event property value name
 * @member {number} [count] The count of the the event property value
 * @member {number} [previousCount] The count of previous time range of the
 * event property value
 */
export interface EventPropertyValue {
  name?: string;
  count?: number;
  previousCount?: number;
}


/**
 * @class
 * Initializes a new instance of the EventPropertyValues class.
 * @constructor
 * Event property value counts during the time range in descending order
 *
 * @member {number} [total] The total property value counts
 * @member {array} [values] The event property values
 */
export interface EventPropertyValues {
  total?: number;
  values?: EventPropertyValue[];
}


/**
 * @class
 * Initializes a new instance of the Release class.
 * @constructor
 * @member {string} release Release Id.
 */
export interface Release {
  release: string;
}


/**
 * @class
 * Initializes a new instance of the ReleaseWithDistributionGroup class.
 * @constructor
 * @member {string} [distributionGroup] Distribution group Id.
 */
export interface ReleaseWithDistributionGroup extends Release {
  distributionGroup?: string;
}


/**
 * @class
 * Initializes a new instance of the ReleaseWithDistributionGroupAndUserId class.
 * @constructor
 * @member {uuid} [userId] Unique user Id.  Will generate a new user Id if not
 * provided.
 */
export interface ReleaseWithDistributionGroupAndUserId extends ReleaseWithDistributionGroup {
  userId?: string;
}


/**
 * @class
 * Initializes a new instance of the NotifyReleasesContainer class.
 * @constructor
 * @member {array} releases
 */
export interface NotifyReleasesContainer {
  releases: ReleaseWithDistributionGroupAndUserId[];
}


/**
 * @class
 * Initializes a new instance of the DeleteReleasesContainer class.
 * @constructor
 * @member {array} releases
 */
export interface DeleteReleasesContainer {
  releases: Release[];
}


/**
 * @class
 * Initializes a new instance of the GetReleasesContainer class.
 * @constructor
 * @member {array} releases
 */
export interface GetReleasesContainer {
  releases: ReleaseWithDistributionGroup[];
}


/**
 * @class
 * Initializes a new instance of the FilterReleasesContainer class.
 * @constructor
 * @member {array} [releases]
 */
export interface FilterReleasesContainer {
  releases?: Release[];
}


/**
 * @class
 * Initializes a new instance of the FilterVersionsContainerVersionsItem class.
 * @constructor
 * @member {string} version App version
 * @member {string} build App build number
 */
export interface FilterVersionsContainerVersionsItem {
  version: string;
  build: string;
}


/**
 * @class
 * Initializes a new instance of the FilterVersionsContainer class.
 * @constructor
 * @member {array} [versions]
 */
export interface FilterVersionsContainer {
  versions?: FilterVersionsContainerVersionsItem[];
}


/**
 * @class
 * Initializes a new instance of the ReleaseCount class.
 * @constructor
 * @member {string} releaseId
 * @member {string} [distributionGroup] Distribution group queried.
 * @member {number} uniqueCount Count of unique downloads against user id.
 * @member {number} totalCount Total count of downloads.
 */
export interface ReleaseCount {
  releaseId: string;
  distributionGroup?: string;
  uniqueCount: number;
  totalCount: number;
}


/**
 * @class
 * Initializes a new instance of the ReleaseCounts class.
 * @constructor
 * @member {number} [total]
 * @member {array} counts
 */
export interface ReleaseCounts {
  total?: number;
  counts: ReleaseCount[];
}


/**
 * @class
 * Initializes a new instance of the DailySession class.
 * @constructor
 * @member {string} [datetime] the ISO 8601 datetime
 * @member {number} [count]
 */
export interface DailySession {
  datetime?: string;
  count?: number;
}


/**
 * @class
 * Initializes a new instance of the ReleaseDailySessions class.
 * @constructor
 * @member {number} [totalSessionCounts]
 * @member {number} [avgSessionsPerDay]
 * @member {array} [sessions] Sessions per day
 */
export interface ReleaseDailySessions {
  totalSessionCounts?: number;
  avgSessionsPerDay?: number;
  sessions?: DailySession[];
}


/**
 * @class
 * Initializes a new instance of the DateTimeDownloadReleaseCount class.
 * @constructor
 * @member {string} [datetime] the ISO 8601 datetime
 * @member {number} [total]
 * @member {number} [unique]
 */
export interface DateTimeDownloadReleaseCount {
  datetime?: string;
  total?: number;
  unique?: number;
}


/**
 * @class
 * Initializes a new instance of the DateTimeDownloadReleaseCounts class.
 * @constructor
 * @member {number} [total]
 * @member {number} [unique]
 * @member {array} [counts] Release Counts per day
 */
export interface DateTimeDownloadReleaseCounts {
  total?: number;
  unique?: number;
  counts?: DateTimeDownloadReleaseCount[];
}


/**
 * @class
 * Initializes a new instance of the LogFlowDevice class.
 * @constructor
 * Device characteristics.
 *
 * @member {string} sdkName Name of the SDK. Consists of the name of the SDK
 * and the platform, e.g. "appcenter.ios", "hockeysdk.android".
 * @member {string} sdkVersion Version of the SDK in semver format, e.g.
 * "1.2.0" or "0.12.3-alpha.1".
 * @member {string} [wrapperSdkVersion] Version of the wrapper SDK in semver
 * format. When the SDK is embedding another base SDK (for example
 * Xamarin.Android wraps Android), the Xamarin specific version is populated
 * into this field while sdkVersion refers to the original Android SDK.
 * @member {string} [wrapperSdkName] Name of the wrapper SDK. Consists of the
 * name of the SDK and the wrapper platform, e.g. "appcenter.xamarin",
 * "hockeysdk.cordova".
 * @member {string} [model] Device model (example: iPad2,3).
 * @member {string} [oemName] Device manufacturer (example: HTC).
 * @member {string} osName OS name (example: iOS). The following OS names are
 * standardized (non-exclusive): Android, iOS, macOS, tvOS, Windows.
 * @member {string} osVersion OS version (example: 9.3.0).
 * @member {string} [osBuild] OS build code (example: LMY47X).
 * @member {number} [osApiLevel] API level when applicable like in Android
 * (example: 15).
 * @member {string} locale Language code (example: en_US).
 * @member {number} timeZoneOffset The offset in minutes from UTC for the
 * device time zone, including daylight savings time.
 * @member {string} [screenSize] Screen size of the device in pixels (example:
 * 640x480).
 * @member {string} appVersion Application version name, e.g. 1.1.0
 * @member {string} [carrierName] Carrier name (for mobile devices).
 * @member {string} [carrierCode] Carrier country code (for mobile devices).
 * @member {string} [carrierCountry] Carrier country.
 * @member {string} appBuild The app's build number, e.g. 42.
 * @member {string} [appNamespace] The bundle identifier, package identifier,
 * or namespace, depending on what the individual plattforms use,  .e.g
 * com.microsoft.example.
 * @member {string} [liveUpdateReleaseLabel] Label that is used to identify
 * application code 'version' released via Live Update beacon running on device
 * @member {string} [liveUpdateDeploymentKey] Identifier of environment that
 * current application release belongs to, deployment key then maps to
 * environment like Production, Staging.
 * @member {string} [liveUpdatePackageHash] Hash of all files (ReactNative or
 * Cordova) deployed to device via LiveUpdate beacon. Helps identify the
 * Release version on device or need to download updates in future.
 * @member {string} [wrapperRuntimeVersion] Version of the wrapper technology
 * framework (Xamarin runtime version or ReactNative or Cordova etc...). See
 * wrapper_sdk_name to see if this version refers to Xamarin or ReactNative or
 * other.
 */
export interface LogFlowDevice {
  sdkName: string;
  sdkVersion: string;
  wrapperSdkVersion?: string;
  wrapperSdkName?: string;
  model?: string;
  oemName?: string;
  osName: string;
  osVersion: string;
  osBuild?: string;
  osApiLevel?: number;
  locale: string;
  timeZoneOffset: number;
  screenSize?: string;
  appVersion: string;
  carrierName?: string;
  carrierCode?: string;
  carrierCountry?: string;
  appBuild: string;
  appNamespace?: string;
  liveUpdateReleaseLabel?: string;
  liveUpdateDeploymentKey?: string;
  liveUpdatePackageHash?: string;
  wrapperRuntimeVersion?: string;
}


/**
 * @class
 * Initializes a new instance of the LogFlowLog class.
 * @constructor
 * @member {date} timestamp Log creation timestamp.
 * @member {uuid} installId Install ID.
 * @member {object} device
 * @member {string} [device.sdkName] Name of the SDK. Consists of the name of
 * the SDK and the platform, e.g. "appcenter.ios", "hockeysdk.android".
 * @member {string} [device.sdkVersion] Version of the SDK in semver format,
 * e.g. "1.2.0" or "0.12.3-alpha.1".
 * @member {string} [device.wrapperSdkVersion] Version of the wrapper SDK in
 * semver format. When the SDK is embedding another base SDK (for example
 * Xamarin.Android wraps Android), the Xamarin specific version is populated
 * into this field while sdkVersion refers to the original Android SDK.
 * @member {string} [device.wrapperSdkName] Name of the wrapper SDK. Consists
 * of the name of the SDK and the wrapper platform, e.g. "appcenter.xamarin",
 * "hockeysdk.cordova".
 * @member {string} [device.model] Device model (example: iPad2,3).
 * @member {string} [device.oemName] Device manufacturer (example: HTC).
 * @member {string} [device.osName] OS name (example: iOS). The following OS
 * names are standardized (non-exclusive): Android, iOS, macOS, tvOS, Windows.
 * @member {string} [device.osVersion] OS version (example: 9.3.0).
 * @member {string} [device.osBuild] OS build code (example: LMY47X).
 * @member {number} [device.osApiLevel] API level when applicable like in
 * Android (example: 15).
 * @member {string} [device.locale] Language code (example: en_US).
 * @member {number} [device.timeZoneOffset] The offset in minutes from UTC for
 * the device time zone, including daylight savings time.
 * @member {string} [device.screenSize] Screen size of the device in pixels
 * (example: 640x480).
 * @member {string} [device.appVersion] Application version name, e.g. 1.1.0
 * @member {string} [device.carrierName] Carrier name (for mobile devices).
 * @member {string} [device.carrierCode] Carrier country code (for mobile
 * devices).
 * @member {string} [device.carrierCountry] Carrier country.
 * @member {string} [device.appBuild] The app's build number, e.g. 42.
 * @member {string} [device.appNamespace] The bundle identifier, package
 * identifier, or namespace, depending on what the individual plattforms use,
 * .e.g com.microsoft.example.
 * @member {string} [device.liveUpdateReleaseLabel] Label that is used to
 * identify application code 'version' released via Live Update beacon running
 * on device
 * @member {string} [device.liveUpdateDeploymentKey] Identifier of environment
 * that current application release belongs to, deployment key then maps to
 * environment like Production, Staging.
 * @member {string} [device.liveUpdatePackageHash] Hash of all files
 * (ReactNative or Cordova) deployed to device via LiveUpdate beacon. Helps
 * identify the Release version on device or need to download updates in
 * future.
 * @member {string} [device.wrapperRuntimeVersion] Version of the wrapper
 * technology framework (Xamarin runtime version or ReactNative or Cordova
 * etc...). See wrapper_sdk_name to see if this version refers to Xamarin or
 * ReactNative or other.
 * @member {string} type Polymorphic Discriminator
 */
export interface LogFlowLog {
  timestamp: Date;
  installId: string;
  device: LogFlowDevice;
  type: string;
}


/**
 * @class
 * Initializes a new instance of the LogFlowLogContainer class.
 * @constructor
 * @member {boolean} [exceededMaxLimit] indicates if the number of available
 * logs are more than the max allowed return limit(100).
 * @member {date} [lastReceivedLogTimestamp] the timestamp of the last log
 * received. This value can be used as the start time parameter in the
 * consecutive API call.
 * @member {array} logs the list of logs
 */
export interface LogFlowLogContainer {
  exceededMaxLimit?: boolean;
  lastReceivedLogTimestamp?: Date;
  logs: LogFlowLog[];
}


/**
 * @class
 * Initializes a new instance of the LogFlowGenericLog class.
 * @constructor
 * Generic log.
 *
 * @member {string} type Log type.
 * . Possible values include: 'event', 'page', 'start_session', 'error',
 * 'push_installation', 'start_service', 'custom_properties'
 * @member {date} timestamp Log creation timestamp.
 * @member {uuid} installId Install ID.
 * @member {uuid} [sessionId] Session ID.
 * @member {string} [eventId] Event ID.
 * @member {string} [eventName] Event name.
 * @member {string} [messageId] Message ID.
 * @member {object} [properties] event specific properties.
 * @member {object} device
 * @member {string} [device.sdkName] Name of the SDK. Consists of the name of
 * the SDK and the platform, e.g. "appcenter.ios", "hockeysdk.android".
 * @member {string} [device.sdkVersion] Version of the SDK in semver format,
 * e.g. "1.2.0" or "0.12.3-alpha.1".
 * @member {string} [device.wrapperSdkVersion] Version of the wrapper SDK in
 * semver format. When the SDK is embedding another base SDK (for example
 * Xamarin.Android wraps Android), the Xamarin specific version is populated
 * into this field while sdkVersion refers to the original Android SDK.
 * @member {string} [device.wrapperSdkName] Name of the wrapper SDK. Consists
 * of the name of the SDK and the wrapper platform, e.g. "appcenter.xamarin",
 * "hockeysdk.cordova".
 * @member {string} [device.model] Device model (example: iPad2,3).
 * @member {string} [device.oemName] Device manufacturer (example: HTC).
 * @member {string} [device.osName] OS name (example: iOS). The following OS
 * names are standardized (non-exclusive): Android, iOS, macOS, tvOS, Windows.
 * @member {string} [device.osVersion] OS version (example: 9.3.0).
 * @member {string} [device.osBuild] OS build code (example: LMY47X).
 * @member {number} [device.osApiLevel] API level when applicable like in
 * Android (example: 15).
 * @member {string} [device.locale] Language code (example: en_US).
 * @member {number} [device.timeZoneOffset] The offset in minutes from UTC for
 * the device time zone, including daylight savings time.
 * @member {string} [device.screenSize] Screen size of the device in pixels
 * (example: 640x480).
 * @member {string} [device.appVersion] Application version name, e.g. 1.1.0
 * @member {string} [device.carrierName] Carrier name (for mobile devices).
 * @member {string} [device.carrierCode] Carrier country code (for mobile
 * devices).
 * @member {string} [device.carrierCountry] Carrier country.
 * @member {string} [device.appBuild] The app's build number, e.g. 42.
 * @member {string} [device.appNamespace] The bundle identifier, package
 * identifier, or namespace, depending on what the individual plattforms use,
 * .e.g com.microsoft.example.
 * @member {string} [device.liveUpdateReleaseLabel] Label that is used to
 * identify application code 'version' released via Live Update beacon running
 * on device
 * @member {string} [device.liveUpdateDeploymentKey] Identifier of environment
 * that current application release belongs to, deployment key then maps to
 * environment like Production, Staging.
 * @member {string} [device.liveUpdatePackageHash] Hash of all files
 * (ReactNative or Cordova) deployed to device via LiveUpdate beacon. Helps
 * identify the Release version on device or need to download updates in
 * future.
 * @member {string} [device.wrapperRuntimeVersion] Version of the wrapper
 * technology framework (Xamarin runtime version or ReactNative or Cordova
 * etc...). See wrapper_sdk_name to see if this version refers to Xamarin or
 * ReactNative or other.
 */
export interface LogFlowGenericLog {
  type: string;
  timestamp: Date;
  installId: string;
  sessionId?: string;
  eventId?: string;
  eventName?: string;
  messageId?: string;
  properties?: { [propertyName: string]: string };
  device: LogFlowDevice;
}


/**
 * @class
 * Initializes a new instance of the LogFlowGenericLogContainer class.
 * @constructor
 * @member {boolean} [exceededMaxLimit] indicates if the number of available
 * logs are more than the max allowed return limit(100).
 * @member {date} [lastReceivedLogTimestamp] the timestamp of the last log
 * received. This value can be used as the start time parameter in the
 * consecutive API call.
 * @member {array} logs the list of logs
 */
export interface LogFlowGenericLogContainer {
  exceededMaxLimit?: boolean;
  lastReceivedLogTimestamp?: Date;
  logs: LogFlowGenericLog[];
}


/**
 * @class
 * Initializes a new instance of the LogFlowLogWithProperties class.
 * @constructor
 * @member {object} [properties] Additional key/value pair parameters.
 */
export interface LogFlowLogWithProperties extends LogFlowLog {
  properties?: { [propertyName: string]: string };
}


/**
 * @class
 * Initializes a new instance of the LogFlowStartSessionLog class.
 * @constructor
 * Required explicit begin session log (a marker event for analytics service).
 *
 * @member {uuid} sessionId Session ID.
 */
export interface LogFlowStartSessionLog extends LogFlowLog {
  sessionId: string;
}


/**
 * @class
 * Initializes a new instance of the LogFlowStartServiceLog class.
 * @constructor
 * Describe a AppCenter.Start API call from the SDK.
 *
 * @member {array} [services] The list of services of the AppCenter Start API
 * call.
 */
export interface LogFlowStartServiceLog extends LogFlowLog {
  services?: string[];
}


/**
 * @class
 * Initializes a new instance of the LogFlowCustomProperty class.
 * @constructor
 * @member {string} name
 * @member {string} type Polymorphic Discriminator
 */
export interface LogFlowCustomProperty {
  name: string;
  type: string;
}


/**
 * @class
 * Initializes a new instance of the LogFlowCustomPropertyLog class.
 * @constructor
 * Set or remove custom properties.
 *
 * @member {array} [properties] Custom property changes.
 */
export interface LogFlowCustomPropertyLog extends LogFlowLog {
  properties?: LogFlowCustomProperty[];
}


/**
 * @class
 * Initializes a new instance of the LogFlowStringProperty class.
 * @constructor
 * String property.
 *
 * @member {string} value String property value.
 */
export interface LogFlowStringProperty extends LogFlowCustomProperty {
  value: string;
}


/**
 * @class
 * Initializes a new instance of the LogFlowNumberProperty class.
 * @constructor
 * Number property.
 *
 * @member {number} value Number property value.
 */
export interface LogFlowNumberProperty extends LogFlowCustomProperty {
  value: number;
}


/**
 * @class
 * Initializes a new instance of the LogFlowBooleanProperty class.
 * @constructor
 * Boolean property.
 *
 * @member {boolean} value Boolean property value.
 */
export interface LogFlowBooleanProperty extends LogFlowCustomProperty {
  value: boolean;
}


/**
 * @class
 * Initializes a new instance of the LogFlowDateTimeProperty class.
 * @constructor
 * Date and time property.
 *
 * @member {date} value Date time property value.
 */
export interface LogFlowDateTimeProperty extends LogFlowCustomProperty {
  value: Date;
}


/**
 * @class
 * Initializes a new instance of the LogFlowClearProperty class.
 * @constructor
 * Clear an existing property.
 *
 */
export interface LogFlowClearProperty extends LogFlowCustomProperty {
}


/**
 * @class
 * Initializes a new instance of the LogFlowPageLog class.
 * @constructor
 * Page view log (as in screens or activities).
 *
 * @member {uuid} sessionId Session ID.
 * @member {string} name Name of the page.
 */
export interface LogFlowPageLog extends LogFlowLogWithProperties {
  sessionId: string;
  name: string;
}


/**
 * @class
 * Initializes a new instance of the LogFlowEventLog class.
 * @constructor
 * Event log.
 *
 * @member {uuid} sessionId Session ID.
 * @member {uuid} id Unique identifier for this event.
 * @member {string} name Name of the event.
 */
export interface LogFlowEventLog extends LogFlowLogWithProperties {
  sessionId: string;
  id: string;
  name: string;
}


/**
 * @class
 * Initializes a new instance of the LogFlowPushInstallationLog class.
 * @constructor
 * Push installation Information.
 *
 * @member {string} pushToken The PNS handle for this installation.
 */
export interface LogFlowPushInstallationLog extends LogFlowLog {
  pushToken: string;
}


/**
 * @class
 * Initializes a new instance of the LogFlowErrorLog class.
 * @constructor
 * Error log.
 *
 * @member {uuid} sessionId Session ID.
 * @member {uuid} id Error identifier.
 * @member {number} [appLaunchToffset] Corresponds to the number of
 * milliseconds elapsed between the time the error occurred and the app was
 * launched.
 */
export interface LogFlowErrorLog extends LogFlowLog {
  sessionId: string;
  id: string;
  appLaunchToffset?: number;
}


/**
 * @class
 * Initializes a new instance of the NotificationTarget class.
 * @constructor
 * Generic notification target.
 *
 * @member {string} type Polymorphic Discriminator
 */
export interface NotificationTarget {
  type: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationOverviewResult class.
 * @constructor
 * Notification statistics
 *
 * @member {string} notificationId Notification id.
 * @member {string} [name] Notification name
 * @member {object} [notificationTarget]
 * @member {string} [notificationTarget.type] Polymorphic Discriminator
 * @member {date} [sendTime] Notification send time
 * @member {number} [pnsSendFailure] Number of the notifications failed to send
 * to the push provider.
 * @member {number} [pnsSendSuccess] Number of the notifications successfully
 * sent to push the provider.
 * @member {string} state State of the notification. Possible values include:
 * 'Cancelled', 'Completed', 'Enqueued', 'Processing', 'Unknown'
 */
export interface NotificationOverviewResult {
  notificationId: string;
  name?: string;
  notificationTarget?: NotificationTarget;
  sendTime?: Date;
  pnsSendFailure?: number;
  pnsSendSuccess?: number;
  state: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationsListResult class.
 * @constructor
 * List of notifications
 *
 * @member {array} values
 * @member {number} [total] the total count of notifications
 * @member {string} [nextLink]
 */
export interface NotificationsListResult {
  values: NotificationOverviewResult[];
  total?: number;
  nextLink?: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationContent class.
 * @constructor
 * Notification definition object
 *
 * @member {string} name Notification name
 * @member {string} [title] Notification title
 * @member {string} body Notification body
 * @member {object} [customData] Notification custom data(priority, expiration,
 * etc.)
 */
export interface NotificationContent {
  name: string;
  title?: string;
  body: string;
  customData?: { [propertyName: string]: string };
}


/**
 * @class
 * Initializes a new instance of the NotificationFailureOutcomeCount class.
 * @constructor
 * Notification failure outcome count
 *
 * @member {string} [failureReason] The reason of the notification failure
 * @member {number} [count] count of this type of failure
 */
export interface NotificationFailureOutcomeCount {
  failureReason?: string;
  count?: number;
}


/**
 * @class
 * Initializes a new instance of the NotificationDetailsResult class.
 * @constructor
 * Notification statistics
 *
 * @member {object} notificationContent
 * @member {string} [notificationContent.name] Notification name
 * @member {string} [notificationContent.title] Notification title
 * @member {string} [notificationContent.body] Notification body
 * @member {object} [notificationContent.customData] Notification custom
 * data(priority, expiration, etc.)
 * @member {array} [failureOutcomes] Failture outcome counts
 */
export interface NotificationDetailsResult extends NotificationOverviewResult {
  notificationContent: NotificationContent;
  failureOutcomes?: NotificationFailureOutcomeCount[];
}


/**
 * @class
 * Initializes a new instance of the NotificationIdList class.
 * @constructor
 * List of notification Ids
 *
 * @member {array} values List of notification Ids.
 */
export interface NotificationIdList {
  values: string[];
}


/**
 * @class
 * Initializes a new instance of the NotificationDefinition class.
 * @constructor
 * Notification definition object
 *
 * @member {object} [notificationTarget]
 * @member {string} [notificationTarget.type] Polymorphic Discriminator
 * @member {object} notificationContent
 * @member {string} [notificationContent.name] Notification name
 * @member {string} [notificationContent.title] Notification title
 * @member {string} [notificationContent.body] Notification body
 * @member {object} [notificationContent.customData] Notification custom
 * data(priority, expiration, etc.)
 */
export interface NotificationDefinition {
  notificationTarget?: NotificationTarget;
  notificationContent: NotificationContent;
}


/**
 * @class
 * Initializes a new instance of the NotificationSendSucceededResult class.
 * @constructor
 * Notification send succeeded.
 *
 * @member {string} notificationId The unique notification identifier.
 */
export interface NotificationSendSucceededResult {
  notificationId: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationTargetAudiences class.
 * @constructor
 * Notification target audiences.
 *
 * @member {array} audiences List of target audiences.
 */
export interface NotificationTargetAudiences extends NotificationTarget {
  audiences: string[];
}


/**
 * @class
 * Initializes a new instance of the NotificationTargetDevices class.
 * @constructor
 * Notification target devices. If null, all devices will be
 * targeted(broadcast).
 *
 * @member {array} devices List of target devices.
 */
export interface NotificationTargetDevices extends NotificationTarget {
  devices: string[];
}


/**
 * @class
 * Initializes a new instance of the NotificationConfig class.
 * @constructor
 * Generic notification configuration.
 *
 * @member {string} type Polymorphic Discriminator
 */
export interface NotificationConfig {
  type: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationConfigApple class.
 * @constructor
 * Apple notification certificate configuration.
 *
 * @member {string} endpointType Possible values include: 'production',
 * 'sandbox'
 * @member {string} certEncoded Base64 encoded certificate string.
 * @member {string} certFilename Certificate file name
 * @member {string} certKey Certificate password
 */
export interface NotificationConfigApple extends NotificationConfig {
  endpointType: string;
  certEncoded: string;
  certFilename: string;
  certKey: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationConfigAppleToken class.
 * @constructor
 * Apple notification auth token configuration.
 *
 * @member {string} keyId A 10-character key identifier (kid).
 * @member {string} id Application ID.
 * @member {string} prefix Application prefix.
 * @member {string} token Provider Authentication Token.
 * @member {string} endpointType Possible values include: 'production',
 * 'sandbox'
 */
export interface NotificationConfigAppleToken extends NotificationConfig {
  keyId: string;
  id: string;
  prefix: string;
  token: string;
  endpointType: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationConfigGoogle class.
 * @constructor
 * Google notification configuration.
 *
 * @member {string} googleApiKey GCM API key.
 */
export interface NotificationConfigGoogle extends NotificationConfig {
  googleApiKey: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationConfigWindows class.
 * @constructor
 * WNS notification configuration.
 *
 * @member {string} packageSid Package security identifier (SID).
 * @member {string} secretKey Secret key.
 */
export interface NotificationConfigWindows extends NotificationConfig {
  packageSid: string;
  secretKey: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationConfigResult class.
 * @constructor
 * Generic notification configuration result.
 *
 * @member {string} type Polymorphic Discriminator
 */
export interface NotificationConfigResult {
  type: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationConfigAppleResult class.
 * @constructor
 * Apple notification certificate configuration result.
 *
 * @member {string} endpointType Possible values include: 'production',
 * 'sandbox'
 * @member {date} certExpiration Certificate expiration date.
 * @member {string} certFilename Certificate file name
 */
export interface NotificationConfigAppleResult extends NotificationConfigResult {
  endpointType: string;
  certExpiration: Date;
  certFilename: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationConfigAppleTokenResult class.
 * @constructor
 * Apple notification auth token configuration result.
 *
 * @member {string} keyId A 10-character key identifier (kid).
 * @member {string} id Application ID.
 * @member {string} prefix Application Prefix.
 * @member {string} endpointType Possible values include: 'production',
 * 'sandbox'
 */
export interface NotificationConfigAppleTokenResult extends NotificationConfigResult {
  keyId: string;
  id: string;
  prefix: string;
  endpointType: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationConfigGoogleResult class.
 * @constructor
 * Google notification configuration result.
 *
 * @member {string} googleApiKey GCM API key.
 */
export interface NotificationConfigGoogleResult extends NotificationConfigResult {
  googleApiKey: string;
}


/**
 * @class
 * Initializes a new instance of the NotificationConfigWindowsResult class.
 * @constructor
 * WNS notification configuration result.
 *
 * @member {string} packageSid Package security identifier (SID).
 * @member {string} [secretKey] windows push configuration secret key.
 */
export interface NotificationConfigWindowsResult extends NotificationConfigResult {
  packageSid: string;
  secretKey?: string;
}


/**
 * @class
 * Initializes a new instance of the ExportConfiguration class.
 * @constructor
 * Export configuration
 *
 * @member {string} [resourceName] The resource name on azure
 * @member {string} [resourceGroup] The resource group name on azure
 * @member {string} type Polymorphic Discriminator
 */
export interface ExportConfiguration {
  resourceName?: string;
  resourceGroup?: string;
  type: string;
}


/**
 * @class
 * Initializes a new instance of the ExportConfigurationBlobStorageConnectionString class.
 * @constructor
 * Configuration for export to Blob Storage with customer provided connection
 * string
 *
 * @member {string} connectionString Connection string for blob storage account
 */
export interface ExportConfigurationBlobStorageConnectionString extends ExportConfiguration {
  connectionString: string;
}


/**
 * @class
 * Initializes a new instance of the ExportConfigurationAppInsightsKey class.
 * @constructor
 * Configuration for export to Application Insights resource with customer
 * provided intrumentation key
 *
 * @member {string} instrumentationKey Instrumentation key for Application
 * Insights resource
 */
export interface ExportConfigurationAppInsightsKey extends ExportConfiguration {
  instrumentationKey: string;
}


/**
 * @class
 * Initializes a new instance of the ExportConfigurationBlobStorageLinkedSubscription class.
 * @constructor
 * Configuration for export to Blob Storage with customer linked subscription.
 *
 * @member {string} subscriptionId Id of customer subscription linked in App
 * Center
 */
export interface ExportConfigurationBlobStorageLinkedSubscription extends ExportConfiguration {
  subscriptionId: string;
}


/**
 * @class
 * Initializes a new instance of the ExportConfigurationAppInsightsLinkedSubscription class.
 * @constructor
 * Configuration for export to Application Insights resource with customer
 * linked subscription.
 *
 * @member {string} subscriptionId Id of customer subscription linked in App
 * Center
 */
export interface ExportConfigurationAppInsightsLinkedSubscription extends ExportConfiguration {
  subscriptionId: string;
}


/**
 * @class
 * Initializes a new instance of the ExportConfigurationResult class.
 * @constructor
 * Export configuration result
 *
 * @member {string} id Export configuration id
 * @member {string} exportType Target resource type of export configuration.
 * Possible values include: 'BlobStorage', 'AppInsights'
 * @member {string} creationTime Creation time in ISO 8601 format
 * @member {string} [lastRunTime] Latest time in ISO 8601 format when export
 * completed successfully
 * @member {string} state State of the export job. Possible values include:
 * 'Enabled', 'Disabled', 'Pending', 'Deleted', 'Invalid'
 * @member {string} [stateInfo] Additional information about export
 * configuration state
 * @member {string} [resourceGroup] resource group for the storage account/App
 * Insights resource
 * @member {string} [resourceName] Storage accout or Appinsights resource name
 * @member {object} [exportConfiguration]
 * @member {string} [exportConfiguration.resourceName] The resource name on
 * azure
 * @member {string} [exportConfiguration.resourceGroup] The resource group name
 * on azure
 * @member {string} [exportConfiguration.type] Polymorphic Discriminator
 */
export interface ExportConfigurationResult {
  id: string;
  exportType: string;
  creationTime: string;
  lastRunTime?: string;
  state: string;
  stateInfo?: string;
  resourceGroup?: string;
  resourceName?: string;
  exportConfiguration?: ExportConfiguration;
}


/**
 * @class
 * Initializes a new instance of the ExportConfigurationListResult class.
 * @constructor
 * List of export configurations
 *
 * @member {array} values
 * @member {number} [total] the total count of exports
 * @member {string} [nextLink]
 */
export interface ExportConfigurationListResult {
  values: ExportConfigurationResult[];
  total?: number;
  nextLink?: string;
}


/**
 * @class
 * Initializes a new instance of the DeviceConfigurationImage class.
 * @constructor
 * @member {string} [full]
 * @member {string} [thumb]
 */
export interface DeviceConfigurationImage {
  full?: string;
  thumb?: string;
}


/**
 * @class
 * Initializes a new instance of the DeviceDimensions class.
 * @constructor
 * Physical device dimensions
 *
 * @member {object} [depth]
 * @member {object} [height]
 * @member {object} [width]
 */
export interface DeviceDimensions {
  depth?: any;
  height?: any;
  width?: any;
}


/**
 * @class
 * Initializes a new instance of the DeviceResolution class.
 * @constructor
 * Device screen resolution
 *
 * @member {string} [height]
 * @member {string} [width]
 * @member {string} [ppi]
 */
export interface DeviceResolution {
  height?: string;
  width?: string;
  ppi?: string;
}


/**
 * @class
 * Initializes a new instance of the DeviceScreenSize class.
 * @constructor
 * Physical device screen dimensions
 *
 * @member {string} [cm]
 * @member {string} [inProperty]
 */
export interface DeviceScreenSize {
  cm?: string;
  inProperty?: string;
}


/**
 * @class
 * Initializes a new instance of the DeviceCpu class.
 * @constructor
 * CPU data for device
 *
 * @member {string} [frequency]
 * @member {string} [core]
 */
export interface DeviceCpu {
  frequency?: string;
  core?: string;
}


/**
 * @class
 * Initializes a new instance of the DeviceMemory class.
 * @constructor
 * Memory data for device
 *
 * @member {string} [formattedSize]
 */
export interface DeviceMemory {
  formattedSize?: string;
}


/**
 * @class
 * Initializes a new instance of the DeviceFrameDefinition class.
 * @constructor
 * @member {number} [width]
 * @member {number} [height]
 * @member {string} [frameUrl]
 * @member {array} [screen]
 */
export interface DeviceFrameDefinition {
  width?: number;
  height?: number;
  frameUrl?: string;
  screen?: number[];
}


/**
 * @class
 * Initializes a new instance of the DeviceFrame class.
 * @constructor
 * @member {object} [grid]
 * @member {number} [grid.width]
 * @member {number} [grid.height]
 * @member {string} [grid.frameUrl]
 * @member {array} [grid.screen]
 * @member {object} [full]
 * @member {number} [full.width]
 * @member {number} [full.height]
 * @member {string} [full.frameUrl]
 * @member {array} [full.screen]
 */
export interface DeviceFrame {
  grid?: DeviceFrameDefinition;
  full?: DeviceFrameDefinition;
}


/**
 * @class
 * Initializes a new instance of the DeviceModel class.
 * @constructor
 * @member {string} [name]
 * @member {string} [manufacturer]
 * @member {string} [model]
 * @member {string} [platform]
 * @member {object} [dimensions]
 * @member {object} [dimensions.depth]
 * @member {object} [dimensions.height]
 * @member {object} [dimensions.width]
 * @member {object} [resolution]
 * @member {string} [resolution.height]
 * @member {string} [resolution.width]
 * @member {string} [resolution.ppi]
 * @member {string} [releaseDate]
 * @member {string} [formFactor]
 * @member {object} [screenSize]
 * @member {string} [screenSize.cm]
 * @member {string} [screenSize.inProperty]
 * @member {object} [cpu]
 * @member {string} [cpu.frequency]
 * @member {string} [cpu.core]
 * @member {object} [memory]
 * @member {string} [memory.formattedSize]
 * @member {number} [screenRotation]
 * @member {object} [deviceFrame]
 * @member {object} [deviceFrame.grid]
 * @member {number} [deviceFrame.grid.width]
 * @member {number} [deviceFrame.grid.height]
 * @member {string} [deviceFrame.grid.frameUrl]
 * @member {array} [deviceFrame.grid.screen]
 * @member {object} [deviceFrame.full]
 * @member {number} [deviceFrame.full.width]
 * @member {number} [deviceFrame.full.height]
 * @member {string} [deviceFrame.full.frameUrl]
 * @member {array} [deviceFrame.full.screen]
 * @member {number} [availabilityCount]
 */
export interface DeviceModel {
  name?: string;
  manufacturer?: string;
  model?: string;
  platform?: string;
  dimensions?: DeviceDimensions;
  resolution?: DeviceResolution;
  releaseDate?: string;
  formFactor?: string;
  screenSize?: DeviceScreenSize;
  cpu?: DeviceCpu;
  memory?: DeviceMemory;
  screenRotation?: number;
  deviceFrame?: DeviceFrame;
  availabilityCount?: number;
}


/**
 * @class
 * Initializes a new instance of the DeviceConfiguration class.
 * @constructor
 * @member {string} [name] The name of the device model and OS version
 * @member {uuid} [id] The unique id of the device configuration
 * @member {number} [tier] The tier
 * @member {object} [image]
 * @member {string} [image.full]
 * @member {string} [image.thumb]
 * @member {object} [model]
 * @member {string} [model.name]
 * @member {string} [model.manufacturer]
 * @member {string} [model.model]
 * @member {string} [model.platform]
 * @member {object} [model.dimensions]
 * @member {object} [model.dimensions.depth]
 * @member {object} [model.dimensions.height]
 * @member {object} [model.dimensions.width]
 * @member {object} [model.resolution]
 * @member {string} [model.resolution.height]
 * @member {string} [model.resolution.width]
 * @member {string} [model.resolution.ppi]
 * @member {string} [model.releaseDate]
 * @member {string} [model.formFactor]
 * @member {object} [model.screenSize]
 * @member {string} [model.screenSize.cm]
 * @member {string} [model.screenSize.inProperty]
 * @member {object} [model.cpu]
 * @member {string} [model.cpu.frequency]
 * @member {string} [model.cpu.core]
 * @member {object} [model.memory]
 * @member {string} [model.memory.formattedSize]
 * @member {number} [model.screenRotation]
 * @member {object} [model.deviceFrame]
 * @member {object} [model.deviceFrame.grid]
 * @member {number} [model.deviceFrame.grid.width]
 * @member {number} [model.deviceFrame.grid.height]
 * @member {string} [model.deviceFrame.grid.frameUrl]
 * @member {array} [model.deviceFrame.grid.screen]
 * @member {object} [model.deviceFrame.full]
 * @member {number} [model.deviceFrame.full.width]
 * @member {number} [model.deviceFrame.full.height]
 * @member {string} [model.deviceFrame.full.frameUrl]
 * @member {array} [model.deviceFrame.full.screen]
 * @member {number} [model.availabilityCount]
 * @member {string} [os]
 * @member {string} [osName]
 * @member {number} [marketShare]
 */
export interface DeviceConfiguration {
  name?: string;
  id?: string;
  tier?: number;
  image?: DeviceConfigurationImage;
  model?: DeviceModel;
  os?: string;
  osName?: string;
  marketShare?: number;
}


/**
 * @class
 * Initializes a new instance of the DeviceSetConfigurationImage class.
 * @constructor
 * @member {string} [thumb]
 */
export interface DeviceSetConfigurationImage {
  thumb?: string;
}


/**
 * @class
 * Initializes a new instance of the DeviceSetModel class.
 * @constructor
 * @member {string} [name]
 * @member {string} [manufacturer]
 * @member {string} [releaseDate]
 * @member {string} [formFactor]
 */
export interface DeviceSetModel {
  name?: string;
  manufacturer?: string;
  releaseDate?: string;
  formFactor?: string;
}


/**
 * @class
 * Initializes a new instance of the DeviceSetConfiguration class.
 * @constructor
 * @member {uuid} [id] The unique id of the device configuration
 * @member {object} [image]
 * @member {string} [image.thumb]
 * @member {object} [model]
 * @member {string} [model.name]
 * @member {string} [model.manufacturer]
 * @member {string} [model.releaseDate]
 * @member {string} [model.formFactor]
 * @member {string} [os]
 * @member {string} [osName]
 */
export interface DeviceSetConfiguration {
  id?: string;
  image?: DeviceSetConfigurationImage;
  model?: DeviceSetModel;
  os?: string;
  osName?: string;
}


/**
 * @class
 * Initializes a new instance of the TestRunStatistics class.
 * @constructor
 * @summary Test Run Statistics
 *
 * Summary single test run on Xamarin Test Cloud
 *
 * @member {number} [devices] Number of devices running the test
 * @member {number} [devicesFinished] Number of finished devices
 * @member {number} [devicesFailed] Number of failed devices
 * @member {number} [total] Number of tests in total
 * @member {number} [passed] Number of passed tests
 * @member {number} [failed] Number of failed tests
 * @member {number} [skipped] Number of skipped tests
 * @member {number} [peakMemory] The max amount of MB used during the test run
 * @member {number} [totalDeviceMinutes] The number of minutes of device time
 * the test has been runnign
 */
export interface TestRunStatistics {
  devices?: number;
  devicesFinished?: number;
  devicesFailed?: number;
  total?: number;
  passed?: number;
  failed?: number;
  skipped?: number;
  peakMemory?: number;
  totalDeviceMinutes?: number;
}


/**
 * @class
 * Initializes a new instance of the TestRun class.
 * @constructor
 * @summary Test Run
 *
 * Summary single test run on Xamarin Test Cloud
 *
 * @member {uuid} [id] The unique id of the test upload
 * @member {string} [date] The date and time the test was uploaded
 * @member {string} [appVersion] The compiled version of the app binary
 * @member {string} [testSeries] The name of the test series with which this
 * test upload is associated
 * @member {string} [platform] The device platform targeted by the test.
 * Possible values are 'ios' or 'android'
 * @member {string} [runStatus] The current status of the test run, in relation
 * to the various phases
 * @member {string} [resultStatus] The passed/failed state
 * @member {string} [state] Deprecated. Use runStatus instead.
 * @member {string} [status] Deprecated. Use resultStatus instead.
 * @member {string} [description] Human readable explanation of the current
 * test status
 * @member {object} [stats]
 * @member {number} [stats.devices] Number of devices running the test
 * @member {number} [stats.devicesFinished] Number of finished devices
 * @member {number} [stats.devicesFailed] Number of failed devices
 * @member {number} [stats.total] Number of tests in total
 * @member {number} [stats.passed] Number of passed tests
 * @member {number} [stats.failed] Number of failed tests
 * @member {number} [stats.skipped] Number of skipped tests
 * @member {number} [stats.peakMemory] The max amount of MB used during the
 * test run
 * @member {number} [stats.totalDeviceMinutes] The number of minutes of device
 * time the test has been runnign
 * @member {string} [testType] The name of the test framework used to run this
 * test
 * @member {string} [uploadedBy] The name of the user who uploaded the test
 */
export interface TestRun {
  id?: string;
  date?: string;
  appVersion?: string;
  testSeries?: string;
  platform?: string;
  runStatus?: string;
  resultStatus?: string;
  state?: string;
  status?: string;
  description?: string;
  stats?: TestRunStatistics;
  testType?: string;
  uploadedBy?: string;
}


/**
 * @class
 * Initializes a new instance of the TestRunSummary class.
 * @constructor
 * @summary Test Run Summary
 *
 * Most important information about a test run.
 *
 * @member {string} [date] Date of the test run.
 * @member {string} [statusDescription] Human-readable status of the test run.
 * @member {number} [failed] Number of failed tests
 * @member {number} [passed] Number of passed tests
 * @member {boolean} [completed] Tells whether the test run has completed
 */
export interface TestRunSummary {
  date?: string;
  statusDescription?: string;
  failed?: number;
  passed?: number;
  completed?: boolean;
}


/**
 * @class
 * Initializes a new instance of the TestSeries class.
 * @constructor
 * @summary Test Series
 *
 * Summary of a single test series
 *
 * @member {string} slug Unique, human-readable identifier of the test series
 * @member {string} name Name of the test series
 * @member {string} [mostRecentActivity] Date of the latest test run that used
 * this test series
 * @member {array} [testRuns] Most recent test runs
 */
export interface TestSeries {
  slug: string;
  name: string;
  mostRecentActivity?: string;
  testRuns?: TestRunSummary[];
}


/**
 * @class
 * Initializes a new instance of the TestSeriesName class.
 * @constructor
 * @summary Name of the test series
 *
 * @member {string} name Name of the new test series
 */
export interface TestSeriesName {
  name: string;
}


/**
 * @class
 * Initializes a new instance of the DeviceList class.
 * @constructor
 * @summary Device List
 *
 * A list of device IDs
 *
 * @member {array} devices
 */
export interface DeviceList {
  devices: string[];
}


/**
 * @class
 * Initializes a new instance of the DeviceSelection class.
 * @constructor
 * @summary Device Selection
 *
 * Short ID for a list of device IDs
 *
 * @member {string} shortId Identifier of the device selection
 */
export interface DeviceSelection {
  shortId: string;
}


/**
 * @class
 * Initializes a new instance of the DeviceSetUpdate class.
 * @constructor
 * @summary Device Set update information
 *
 * The name of the device set and the list of device IDs
 *
 * @member {array} devices List of device IDs
 * @member {string} name The name of the device set
 */
export interface DeviceSetUpdate {
  devices: string[];
  name: string;
}