type awsShards
  @generate(
    query: { get: false, query: true, aggregate: false }
    mutation: { add: false, delete: false }
    subscription: false
  ) {
  shardId: String! @search(by: [hash, regexp])
  parentShardId: String @search(by: [hash, regexp])
  adjacentParentShardId: String @search(by: [hash, regexp])
  hashKeyRangeStarting: String! @search(by: [hash, regexp])
  hashKeyRangeEnding: String! @search(by: [hash, regexp])
  sequenceNumberRangeStaring: String! @search(by: [hash, regexp])
  sequenceNumberRangeEnding: String @search(by: [hash, regexp])
}

type awsShardLevelMetrics
  @generate(
    query: { get: false, query: true, aggregate: false }
    mutation: { add: false, delete: false }
    subscription: false
  ) {
  shardLevelMetrics: [String] @search(by: [hash])
}

type awsKinesisStream implements awsBaseService @key(fields: "arn") {
  streamName: String @search(by: [hash, regexp])
  streamStatus: String @search(by: [hash, regexp])
  shards: [awsShards]
  retentionPeriodHours: Int @search
  enhancedMonitoring: [awsShardLevelMetrics]
  encryptionType: String @search(by: [hash, regexp])
  keyId: String @search(by: [hash, regexp])
  kinesisFirehose: [awsKinesisFirehose] @hasInverse(field: kinesisStream) #change to plural
}
