import * as core from "@terrascript/core";

export interface IncrementalPullConfigArgs extends core.SchemaArgs {
  datetimeTypeFieldName?: string | core.StringOut;
}

export class IncrementalPullConfig extends core.Schema<IncrementalPullConfigArgs> {
  @core.attr(String)
  public datetimeTypeFieldName?: string | core.StringOut;
}

export interface S3InputFormatConfigArgs extends core.SchemaArgs {
  s3InputFileType?: string | core.StringOut;
}

export class S3InputFormatConfig extends core.Schema<S3InputFormatConfigArgs> {
  @core.attr(String)
  public s3InputFileType?: string | core.StringOut;
}

export interface SourceConnectorPropertiesS3Args extends core.SchemaArgs {
  bucketName: string | core.StringOut;

  bucketPrefix?: string | core.StringOut;

  s3InputFormatConfig?: S3InputFormatConfig;
}

export class SourceConnectorPropertiesS3 extends core.Schema<SourceConnectorPropertiesS3Args> {
  @core.attr(String)
  public bucketName!: string | core.StringOut;

  @core.attr(String)
  public bucketPrefix?: string | core.StringOut;

  @core.attr(S3InputFormatConfig)
  public s3InputFormatConfig?: S3InputFormatConfig;
}

export interface VeevaArgs extends core.SchemaArgs {
  documentType?: string | core.StringOut;

  includeAllVersions?: boolean | core.BooleanOut;

  includeRenditions?: boolean | core.BooleanOut;

  includeSourceFiles?: boolean | core.BooleanOut;

  object: string | core.StringOut;
}

export class Veeva extends core.Schema<VeevaArgs> {
  @core.attr(String)
  public documentType?: string | core.StringOut;

  @core.attr(Boolean)
  public includeAllVersions?: boolean | core.BooleanOut;

  @core.attr(Boolean)
  public includeRenditions?: boolean | core.BooleanOut;

  @core.attr(Boolean)
  public includeSourceFiles?: boolean | core.BooleanOut;

  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface AmplitudeArgs extends core.SchemaArgs {
  object: string | core.StringOut;
}

export class Amplitude extends core.Schema<AmplitudeArgs> {
  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface DatadogArgs extends core.SchemaArgs {
  object: string | core.StringOut;
}

export class Datadog extends core.Schema<DatadogArgs> {
  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface SourceConnectorPropertiesMarketoArgs extends core.SchemaArgs {
  object: string | core.StringOut;
}

export class SourceConnectorPropertiesMarketo extends core.Schema<SourceConnectorPropertiesMarketoArgs> {
  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface GoogleAnalyticsArgs extends core.SchemaArgs {
  object: string | core.StringOut;
}

export class GoogleAnalytics extends core.Schema<GoogleAnalyticsArgs> {
  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface SourceConnectorPropertiesSalesforceArgs
  extends core.SchemaArgs {
  enableDynamicFieldUpdate?: boolean | core.BooleanOut;

  includeDeletedRecords?: boolean | core.BooleanOut;

  object: string | core.StringOut;
}

export class SourceConnectorPropertiesSalesforce extends core.Schema<SourceConnectorPropertiesSalesforceArgs> {
  @core.attr(Boolean)
  public enableDynamicFieldUpdate?: boolean | core.BooleanOut;

  @core.attr(Boolean)
  public includeDeletedRecords?: boolean | core.BooleanOut;

  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface DynatraceArgs extends core.SchemaArgs {
  object: string | core.StringOut;
}

export class Dynatrace extends core.Schema<DynatraceArgs> {
  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface ServiceNowArgs extends core.SchemaArgs {
  object: string | core.StringOut;
}

export class ServiceNow extends core.Schema<ServiceNowArgs> {
  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface SlackArgs extends core.SchemaArgs {
  object: string | core.StringOut;
}

export class Slack extends core.Schema<SlackArgs> {
  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface SourceConnectorPropertiesZendeskArgs extends core.SchemaArgs {
  object: string | core.StringOut;
}

export class SourceConnectorPropertiesZendesk extends core.Schema<SourceConnectorPropertiesZendeskArgs> {
  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface InforNexusArgs extends core.SchemaArgs {
  object: string | core.StringOut;
}

export class InforNexus extends core.Schema<InforNexusArgs> {
  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface SourceConnectorPropertiesSapoDataArgs extends core.SchemaArgs {
  object: string | core.StringOut;
}

export class SourceConnectorPropertiesSapoData extends core.Schema<SourceConnectorPropertiesSapoDataArgs> {
  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface SingularArgs extends core.SchemaArgs {
  object: string | core.StringOut;
}

export class Singular extends core.Schema<SingularArgs> {
  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface TrendmicroArgs extends core.SchemaArgs {
  object: string | core.StringOut;
}

export class Trendmicro extends core.Schema<TrendmicroArgs> {
  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface SourceConnectorPropertiesCustomConnectorArgs
  extends core.SchemaArgs {
  customProperties?: core.Map<string, string> | core.MapOut<core.StringOut>;

  entityName: string | core.StringOut;
}

export class SourceConnectorPropertiesCustomConnector extends core.Schema<SourceConnectorPropertiesCustomConnectorArgs> {
  @core.attr(String, { kind: "map" })
  public customProperties?:
    | core.Map<string, string>
    | core.MapOut<core.StringOut>;

  @core.attr(String)
  public entityName!: string | core.StringOut;
}

export interface SourceConnectorPropertiesArgs extends core.SchemaArgs {
  amplitude?: Amplitude;

  customConnector?: SourceConnectorPropertiesCustomConnector;

  datadog?: Datadog;

  dynatrace?: Dynatrace;

  googleAnalytics?: GoogleAnalytics;

  inforNexus?: InforNexus;

  marketo?: SourceConnectorPropertiesMarketo;

  s3?: SourceConnectorPropertiesS3;

  salesforce?: SourceConnectorPropertiesSalesforce;

  sapoData?: SourceConnectorPropertiesSapoData;

  serviceNow?: ServiceNow;

  singular?: Singular;

  slack?: Slack;

  trendmicro?: Trendmicro;

  veeva?: Veeva;

  zendesk?: SourceConnectorPropertiesZendesk;
}

export class SourceConnectorProperties extends core.Schema<SourceConnectorPropertiesArgs> {
  @core.attr(Amplitude)
  public amplitude?: Amplitude;

  @core.attr(SourceConnectorPropertiesCustomConnector)
  public customConnector?: SourceConnectorPropertiesCustomConnector;

  @core.attr(Datadog)
  public datadog?: Datadog;

  @core.attr(Dynatrace)
  public dynatrace?: Dynatrace;

  @core.attr(GoogleAnalytics)
  public googleAnalytics?: GoogleAnalytics;

  @core.attr(InforNexus)
  public inforNexus?: InforNexus;

  @core.attr(SourceConnectorPropertiesMarketo)
  public marketo?: SourceConnectorPropertiesMarketo;

  @core.attr(SourceConnectorPropertiesS3)
  public s3?: SourceConnectorPropertiesS3;

  @core.attr(SourceConnectorPropertiesSalesforce)
  public salesforce?: SourceConnectorPropertiesSalesforce;

  @core.attr(SourceConnectorPropertiesSapoData)
  public sapoData?: SourceConnectorPropertiesSapoData;

  @core.attr(ServiceNow)
  public serviceNow?: ServiceNow;

  @core.attr(Singular)
  public singular?: Singular;

  @core.attr(Slack)
  public slack?: Slack;

  @core.attr(Trendmicro)
  public trendmicro?: Trendmicro;

  @core.attr(Veeva)
  public veeva?: Veeva;

  @core.attr(SourceConnectorPropertiesZendesk)
  public zendesk?: SourceConnectorPropertiesZendesk;
}

export interface SourceFlowConfigArgs extends core.SchemaArgs {
  apiVersion?: string | core.StringOut;

  connectorProfileName?: string | core.StringOut;

  connectorType: string | core.StringOut;

  incrementalPullConfig?: IncrementalPullConfig;

  sourceConnectorProperties: SourceConnectorProperties;
}

export class SourceFlowConfig extends core.Schema<SourceFlowConfigArgs> {
  @core.attr(String)
  public apiVersion?: string | core.StringOut;

  @core.attr(String)
  public connectorProfileName?: string | core.StringOut;

  @core.attr(String)
  public connectorType!: string | core.StringOut;

  @core.attr(IncrementalPullConfig)
  public incrementalPullConfig?: IncrementalPullConfig;

  @core.attr(SourceConnectorProperties)
  public sourceConnectorProperties!: SourceConnectorProperties;
}

export interface ConnectorOperatorArgs extends core.SchemaArgs {
  amplitude?: string | core.StringOut;

  customConnector?: string | core.StringOut;

  datadog?: string | core.StringOut;

  dynatrace?: string | core.StringOut;

  googleAnalytics?: string | core.StringOut;

  inforNexus?: string | core.StringOut;

  marketo?: string | core.StringOut;

  s3?: string | core.StringOut;

  salesforce?: string | core.StringOut;

  sapoData?: string | core.StringOut;

  serviceNow?: string | core.StringOut;

  singular?: string | core.StringOut;

  slack?: string | core.StringOut;

  trendmicro?: string | core.StringOut;

  veeva?: string | core.StringOut;

  zendesk?: string | core.StringOut;
}

export class ConnectorOperator extends core.Schema<ConnectorOperatorArgs> {
  @core.attr(String)
  public amplitude?: string | core.StringOut;

  @core.attr(String)
  public customConnector?: string | core.StringOut;

  @core.attr(String)
  public datadog?: string | core.StringOut;

  @core.attr(String)
  public dynatrace?: string | core.StringOut;

  @core.attr(String)
  public googleAnalytics?: string | core.StringOut;

  @core.attr(String)
  public inforNexus?: string | core.StringOut;

  @core.attr(String)
  public marketo?: string | core.StringOut;

  @core.attr(String)
  public s3?: string | core.StringOut;

  @core.attr(String)
  public salesforce?: string | core.StringOut;

  @core.attr(String)
  public sapoData?: string | core.StringOut;

  @core.attr(String)
  public serviceNow?: string | core.StringOut;

  @core.attr(String)
  public singular?: string | core.StringOut;

  @core.attr(String)
  public slack?: string | core.StringOut;

  @core.attr(String)
  public trendmicro?: string | core.StringOut;

  @core.attr(String)
  public veeva?: string | core.StringOut;

  @core.attr(String)
  public zendesk?: string | core.StringOut;
}

export interface TaskArgs extends core.SchemaArgs {
  connectorOperator?:
    | core.Array<ConnectorOperator>
    | core.ArrayOut<ConnectorOperator>;

  destinationField?: string | core.StringOut;

  sourceFields: core.Array<string> | core.ArrayOut<core.StringOut>;

  taskProperties?: core.Map<string, string> | core.MapOut<core.StringOut>;

  taskType: string | core.StringOut;
}

export class Task extends core.Schema<TaskArgs> {
  @core.attr(ConnectorOperator, { kind: "array" })
  public connectorOperator?:
    | core.Array<ConnectorOperator>
    | core.ArrayOut<ConnectorOperator>;

  @core.attr(String)
  public destinationField?: string | core.StringOut;

  @core.attr(String, { kind: "array" })
  public sourceFields!: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String, { kind: "map" })
  public taskProperties?:
    | core.Map<string, string>
    | core.MapOut<core.StringOut>;

  @core.attr(String)
  public taskType!: string | core.StringOut;
}

export interface LookoutMetricsArgs extends core.SchemaArgs {}

export class LookoutMetrics extends core.Schema<LookoutMetricsArgs> {}

export interface CustomerProfilesArgs extends core.SchemaArgs {
  domainName: string | core.StringOut;

  objectTypeName?: string | core.StringOut;
}

export class CustomerProfiles extends core.Schema<CustomerProfilesArgs> {
  @core.attr(String)
  public domainName!: string | core.StringOut;

  @core.attr(String)
  public objectTypeName?: string | core.StringOut;
}

export interface ErrorHandlingConfigArgs extends core.SchemaArgs {
  bucketName?: string | core.StringOut;

  bucketPrefix?: string | core.StringOut;

  failOnFirstDestinationError?: boolean | core.BooleanOut;
}

export class ErrorHandlingConfig extends core.Schema<ErrorHandlingConfigArgs> {
  @core.attr(String)
  public bucketName?: string | core.StringOut;

  @core.attr(String)
  public bucketPrefix?: string | core.StringOut;

  @core.attr(Boolean)
  public failOnFirstDestinationError?: boolean | core.BooleanOut;
}

export interface SnowflakeArgs extends core.SchemaArgs {
  bucketPrefix?: string | core.StringOut;

  errorHandlingConfig?: ErrorHandlingConfig;

  intermediateBucketName: string | core.StringOut;

  object: string | core.StringOut;
}

export class Snowflake extends core.Schema<SnowflakeArgs> {
  @core.attr(String)
  public bucketPrefix?: string | core.StringOut;

  @core.attr(ErrorHandlingConfig)
  public errorHandlingConfig?: ErrorHandlingConfig;

  @core.attr(String)
  public intermediateBucketName!: string | core.StringOut;

  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface AggregationConfigArgs extends core.SchemaArgs {
  aggregationType?: string | core.StringOut;
}

export class AggregationConfig extends core.Schema<AggregationConfigArgs> {
  @core.attr(String)
  public aggregationType?: string | core.StringOut;
}

export interface UpsolverS3OutputFormatConfigPrefixConfigArgs
  extends core.SchemaArgs {
  prefixFormat?: string | core.StringOut;

  prefixType: string | core.StringOut;
}

export class UpsolverS3OutputFormatConfigPrefixConfig extends core.Schema<UpsolverS3OutputFormatConfigPrefixConfigArgs> {
  @core.attr(String)
  public prefixFormat?: string | core.StringOut;

  @core.attr(String)
  public prefixType!: string | core.StringOut;
}

export interface UpsolverS3OutputFormatConfigArgs extends core.SchemaArgs {
  aggregationConfig?: AggregationConfig;

  fileType?: string | core.StringOut;

  prefixConfig: UpsolverS3OutputFormatConfigPrefixConfig;
}

export class UpsolverS3OutputFormatConfig extends core.Schema<UpsolverS3OutputFormatConfigArgs> {
  @core.attr(AggregationConfig)
  public aggregationConfig?: AggregationConfig;

  @core.attr(String)
  public fileType?: string | core.StringOut;

  @core.attr(UpsolverS3OutputFormatConfigPrefixConfig)
  public prefixConfig!: UpsolverS3OutputFormatConfigPrefixConfig;
}

export interface UpsolverArgs extends core.SchemaArgs {
  bucketName: string | core.StringOut;

  bucketPrefix?: string | core.StringOut;

  s3OutputFormatConfig: UpsolverS3OutputFormatConfig;
}

export class Upsolver extends core.Schema<UpsolverArgs> {
  @core.attr(String)
  public bucketName!: string | core.StringOut;

  @core.attr(String)
  public bucketPrefix?: string | core.StringOut;

  @core.attr(UpsolverS3OutputFormatConfig)
  public s3OutputFormatConfig!: UpsolverS3OutputFormatConfig;
}

export interface EventBridgeArgs extends core.SchemaArgs {
  errorHandlingConfig?: ErrorHandlingConfig;

  object: string | core.StringOut;
}

export class EventBridge extends core.Schema<EventBridgeArgs> {
  @core.attr(ErrorHandlingConfig)
  public errorHandlingConfig?: ErrorHandlingConfig;

  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface DestinationConnectorPropertiesMarketoArgs
  extends core.SchemaArgs {
  errorHandlingConfig?: ErrorHandlingConfig;

  object: string | core.StringOut;
}

export class DestinationConnectorPropertiesMarketo extends core.Schema<DestinationConnectorPropertiesMarketoArgs> {
  @core.attr(ErrorHandlingConfig)
  public errorHandlingConfig?: ErrorHandlingConfig;

  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface RedshiftArgs extends core.SchemaArgs {
  bucketPrefix?: string | core.StringOut;

  errorHandlingConfig?: ErrorHandlingConfig;

  intermediateBucketName: string | core.StringOut;

  object: string | core.StringOut;
}

export class Redshift extends core.Schema<RedshiftArgs> {
  @core.attr(String)
  public bucketPrefix?: string | core.StringOut;

  @core.attr(ErrorHandlingConfig)
  public errorHandlingConfig?: ErrorHandlingConfig;

  @core.attr(String)
  public intermediateBucketName!: string | core.StringOut;

  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface DestinationConnectorPropertiesS3S3OutputFormatConfigPrefixConfigArgs
  extends core.SchemaArgs {
  prefixFormat?: string | core.StringOut;

  prefixType?: string | core.StringOut;
}

export class DestinationConnectorPropertiesS3S3OutputFormatConfigPrefixConfig extends core.Schema<DestinationConnectorPropertiesS3S3OutputFormatConfigPrefixConfigArgs> {
  @core.attr(String)
  public prefixFormat?: string | core.StringOut;

  @core.attr(String)
  public prefixType?: string | core.StringOut;
}

export interface DestinationConnectorPropertiesS3S3OutputFormatConfigArgs
  extends core.SchemaArgs {
  aggregationConfig?: AggregationConfig;

  fileType?: string | core.StringOut;

  prefixConfig?: DestinationConnectorPropertiesS3S3OutputFormatConfigPrefixConfig;
}

export class DestinationConnectorPropertiesS3S3OutputFormatConfig extends core.Schema<DestinationConnectorPropertiesS3S3OutputFormatConfigArgs> {
  @core.attr(AggregationConfig)
  public aggregationConfig?: AggregationConfig;

  @core.attr(String)
  public fileType?: string | core.StringOut;

  @core.attr(DestinationConnectorPropertiesS3S3OutputFormatConfigPrefixConfig)
  public prefixConfig?: DestinationConnectorPropertiesS3S3OutputFormatConfigPrefixConfig;
}

export interface DestinationConnectorPropertiesS3Args extends core.SchemaArgs {
  bucketName: string | core.StringOut;

  bucketPrefix?: string | core.StringOut;

  s3OutputFormatConfig?: DestinationConnectorPropertiesS3S3OutputFormatConfig;
}

export class DestinationConnectorPropertiesS3 extends core.Schema<DestinationConnectorPropertiesS3Args> {
  @core.attr(String)
  public bucketName!: string | core.StringOut;

  @core.attr(String)
  public bucketPrefix?: string | core.StringOut;

  @core.attr(DestinationConnectorPropertiesS3S3OutputFormatConfig)
  public s3OutputFormatConfig?: DestinationConnectorPropertiesS3S3OutputFormatConfig;
}

export interface DestinationConnectorPropertiesCustomConnectorArgs
  extends core.SchemaArgs {
  customProperties?: core.Map<string, string> | core.MapOut<core.StringOut>;

  entityName: string | core.StringOut;

  errorHandlingConfig?: ErrorHandlingConfig;

  idFieldNames?: core.Array<string> | core.ArrayOut<core.StringOut>;

  writeOperationType?: string | core.StringOut;
}

export class DestinationConnectorPropertiesCustomConnector extends core.Schema<DestinationConnectorPropertiesCustomConnectorArgs> {
  @core.attr(String, { kind: "map" })
  public customProperties?:
    | core.Map<string, string>
    | core.MapOut<core.StringOut>;

  @core.attr(String)
  public entityName!: string | core.StringOut;

  @core.attr(ErrorHandlingConfig)
  public errorHandlingConfig?: ErrorHandlingConfig;

  @core.attr(String, { kind: "array" })
  public idFieldNames?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String)
  public writeOperationType?: string | core.StringOut;
}

export interface HoneycodeArgs extends core.SchemaArgs {
  errorHandlingConfig?: ErrorHandlingConfig;

  object: string | core.StringOut;
}

export class Honeycode extends core.Schema<HoneycodeArgs> {
  @core.attr(ErrorHandlingConfig)
  public errorHandlingConfig?: ErrorHandlingConfig;

  @core.attr(String)
  public object!: string | core.StringOut;
}

export interface DestinationConnectorPropertiesSalesforceArgs
  extends core.SchemaArgs {
  errorHandlingConfig?: ErrorHandlingConfig;

  idFieldNames?: core.Array<string> | core.ArrayOut<core.StringOut>;

  object: string | core.StringOut;

  writeOperationType?: string | core.StringOut;
}

export class DestinationConnectorPropertiesSalesforce extends core.Schema<DestinationConnectorPropertiesSalesforceArgs> {
  @core.attr(ErrorHandlingConfig)
  public errorHandlingConfig?: ErrorHandlingConfig;

  @core.attr(String, { kind: "array" })
  public idFieldNames?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String)
  public object!: string | core.StringOut;

  @core.attr(String)
  public writeOperationType?: string | core.StringOut;
}

export interface SuccessResponseHandlingConfigArgs extends core.SchemaArgs {
  bucketName?: string | core.StringOut;

  bucketPrefix?: string | core.StringOut;
}

export class SuccessResponseHandlingConfig extends core.Schema<SuccessResponseHandlingConfigArgs> {
  @core.attr(String)
  public bucketName?: string | core.StringOut;

  @core.attr(String)
  public bucketPrefix?: string | core.StringOut;
}

export interface DestinationConnectorPropertiesSapoDataArgs
  extends core.SchemaArgs {
  errorHandlingConfig?: ErrorHandlingConfig;

  idFieldNames?: core.Array<string> | core.ArrayOut<core.StringOut>;

  objectPath: string | core.StringOut;

  successResponseHandlingConfig?: SuccessResponseHandlingConfig;

  writeOperationType?: string | core.StringOut;
}

export class DestinationConnectorPropertiesSapoData extends core.Schema<DestinationConnectorPropertiesSapoDataArgs> {
  @core.attr(ErrorHandlingConfig)
  public errorHandlingConfig?: ErrorHandlingConfig;

  @core.attr(String, { kind: "array" })
  public idFieldNames?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String)
  public objectPath!: string | core.StringOut;

  @core.attr(SuccessResponseHandlingConfig)
  public successResponseHandlingConfig?: SuccessResponseHandlingConfig;

  @core.attr(String)
  public writeOperationType?: string | core.StringOut;
}

export interface DestinationConnectorPropertiesZendeskArgs
  extends core.SchemaArgs {
  errorHandlingConfig?: ErrorHandlingConfig;

  idFieldNames?: core.Array<string> | core.ArrayOut<core.StringOut>;

  object: string | core.StringOut;

  writeOperationType?: string | core.StringOut;
}

export class DestinationConnectorPropertiesZendesk extends core.Schema<DestinationConnectorPropertiesZendeskArgs> {
  @core.attr(ErrorHandlingConfig)
  public errorHandlingConfig?: ErrorHandlingConfig;

  @core.attr(String, { kind: "array" })
  public idFieldNames?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String)
  public object!: string | core.StringOut;

  @core.attr(String)
  public writeOperationType?: string | core.StringOut;
}

export interface DestinationConnectorPropertiesArgs extends core.SchemaArgs {
  customConnector?: DestinationConnectorPropertiesCustomConnector;

  customerProfiles?: CustomerProfiles;

  eventBridge?: EventBridge;

  honeycode?: Honeycode;

  lookoutMetrics?: LookoutMetrics;

  marketo?: DestinationConnectorPropertiesMarketo;

  redshift?: Redshift;

  s3?: DestinationConnectorPropertiesS3;

  salesforce?: DestinationConnectorPropertiesSalesforce;

  sapoData?: DestinationConnectorPropertiesSapoData;

  snowflake?: Snowflake;

  upsolver?: Upsolver;

  zendesk?: DestinationConnectorPropertiesZendesk;
}

export class DestinationConnectorProperties extends core.Schema<DestinationConnectorPropertiesArgs> {
  @core.attr(DestinationConnectorPropertiesCustomConnector)
  public customConnector?: DestinationConnectorPropertiesCustomConnector;

  @core.attr(CustomerProfiles)
  public customerProfiles?: CustomerProfiles;

  @core.attr(EventBridge)
  public eventBridge?: EventBridge;

  @core.attr(Honeycode)
  public honeycode?: Honeycode;

  @core.attr(LookoutMetrics)
  public lookoutMetrics?: LookoutMetrics;

  @core.attr(DestinationConnectorPropertiesMarketo)
  public marketo?: DestinationConnectorPropertiesMarketo;

  @core.attr(Redshift)
  public redshift?: Redshift;

  @core.attr(DestinationConnectorPropertiesS3)
  public s3?: DestinationConnectorPropertiesS3;

  @core.attr(DestinationConnectorPropertiesSalesforce)
  public salesforce?: DestinationConnectorPropertiesSalesforce;

  @core.attr(DestinationConnectorPropertiesSapoData)
  public sapoData?: DestinationConnectorPropertiesSapoData;

  @core.attr(Snowflake)
  public snowflake?: Snowflake;

  @core.attr(Upsolver)
  public upsolver?: Upsolver;

  @core.attr(DestinationConnectorPropertiesZendesk)
  public zendesk?: DestinationConnectorPropertiesZendesk;
}

export interface DestinationFlowConfigArgs extends core.SchemaArgs {
  apiVersion?: string | core.StringOut;

  connectorProfileName?: string | core.StringOut;

  connectorType: string | core.StringOut;

  destinationConnectorProperties: DestinationConnectorProperties;
}

export class DestinationFlowConfig extends core.Schema<DestinationFlowConfigArgs> {
  @core.attr(String)
  public apiVersion?: string | core.StringOut;

  @core.attr(String)
  public connectorProfileName?: string | core.StringOut;

  @core.attr(String)
  public connectorType!: string | core.StringOut;

  @core.attr(DestinationConnectorProperties)
  public destinationConnectorProperties!: DestinationConnectorProperties;
}

export interface ScheduledArgs extends core.SchemaArgs {
  dataPullMode?: string | core.StringOut;

  firstExecutionFrom?: string | core.StringOut;

  scheduleEndTime?: string | core.StringOut;

  scheduleExpression: string | core.StringOut;

  scheduleOffset?: number | core.NumberOut;

  scheduleStartTime?: string | core.StringOut;

  timezone?: string | core.StringOut;
}

export class Scheduled extends core.Schema<ScheduledArgs> {
  @core.attr(String)
  public dataPullMode?: string | core.StringOut;

  @core.attr(String)
  public firstExecutionFrom?: string | core.StringOut;

  @core.attr(String)
  public scheduleEndTime?: string | core.StringOut;

  @core.attr(String)
  public scheduleExpression!: string | core.StringOut;

  @core.attr(Number)
  public scheduleOffset?: number | core.NumberOut;

  @core.attr(String)
  public scheduleStartTime?: string | core.StringOut;

  @core.attr(String)
  public timezone?: string | core.StringOut;
}

export interface TriggerPropertiesArgs extends core.SchemaArgs {
  scheduled?: Scheduled;
}

export class TriggerProperties extends core.Schema<TriggerPropertiesArgs> {
  @core.attr(Scheduled)
  public scheduled?: Scheduled;
}

export interface TriggerConfigArgs extends core.SchemaArgs {
  triggerProperties?: TriggerProperties;

  triggerType: string | core.StringOut;
}

export class TriggerConfig extends core.Schema<TriggerConfigArgs> {
  @core.attr(TriggerProperties, { computed: true })
  public triggerProperties?: TriggerProperties;

  @core.attr(String)
  public triggerType!: string | core.StringOut;
}

export interface FlowArgs extends core.ResourceArgs {
  description?: string | core.StringOut;

  destinationFlowConfig:
    | core.Array<DestinationFlowConfig>
    | core.ArrayOut<DestinationFlowConfig>;

  kmsArn?: string | core.StringOut;

  name: string | core.StringOut;

  sourceFlowConfig: SourceFlowConfig;

  tags?: core.Map<string, string> | core.MapOut<core.StringOut>;

  tagsAll?: core.Map<string, string> | core.MapOut<core.StringOut>;

  task: core.Array<Task> | core.ArrayOut<Task>;

  triggerConfig: TriggerConfig;
}

export class Flow extends core.Resource<FlowArgs> {
  @core.attr(String, { computed: true })
  public arn!: string | core.StringOut;

  @core.attr(String)
  public description?: string | core.StringOut;

  @core.attr(DestinationFlowConfig, { kind: "array" })
  public destinationFlowConfig!:
    | core.Array<DestinationFlowConfig>
    | core.ArrayOut<DestinationFlowConfig>;

  @core.attr(String, { computed: true })
  public id!: string | core.StringOut;

  @core.attr(String, { computed: true })
  public kmsArn?: string | core.StringOut;

  @core.attr(String)
  public name!: string | core.StringOut;

  @core.attr(SourceFlowConfig)
  public sourceFlowConfig!: SourceFlowConfig;

  @core.attr(String, { kind: "map" })
  public tags?: core.Map<string, string> | core.MapOut<core.StringOut>;

  @core.attr(String, { computed: true, kind: "map" })
  public tagsAll?: core.Map<string, string> | core.MapOut<core.StringOut>;

  @core.attr(Task, { kind: "array" })
  public task!: core.Array<Task> | core.ArrayOut<Task>;

  @core.attr(TriggerConfig)
  public triggerConfig!: TriggerConfig;

  constructor(name: string, args?: FlowArgs) {
    super(name, "aws_appflow_flow", args);
  }

  public override getNamespace(): string {
    return "aws_appflow";
  }
}
