CreateIndex

enum_DataType := [ "float32" ]
enum_DistanceMetric := [ "euclidean", "cosine" ]

valid {
    input.Body.vectorBucketName == STRING
    input.Body.vectorBucketArn == STRING
    input.Body.indexName == STRING
    input.Body.dataType == enum_DataType[_]
    input.Body.dimension == INTEGER
    input.Body.distanceMetric == enum_DistanceMetric[_]
    input.Body.metadataConfiguration.nonFilterableMetadataKeys[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateVectorBucket

enum_SseType := [ "AES256", "aws:kms" ]

valid {
    input.Body.vectorBucketName == STRING
    input.Body.encryptionConfiguration.sseType == enum_SseType[_]
    input.Body.encryptionConfiguration.kmsKeyArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteIndex

valid {
    input.Body.vectorBucketName == STRING
    input.Body.indexName == STRING
    input.Body.indexArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteVectorBucket

valid {
    input.Body.vectorBucketName == STRING
    input.Body.vectorBucketArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteVectorBucketPolicy

valid {
    input.Body.vectorBucketName == STRING
    input.Body.vectorBucketArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteVectors

valid {
    input.Body.vectorBucketName == STRING
    input.Body.indexName == STRING
    input.Body.indexArn == STRING
    input.Body.keys[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetIndex

valid {
    input.Body.vectorBucketName == STRING
    input.Body.indexName == STRING
    input.Body.indexArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetVectorBucket

valid {
    input.Body.vectorBucketName == STRING
    input.Body.vectorBucketArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetVectorBucketPolicy

valid {
    input.Body.vectorBucketName == STRING
    input.Body.vectorBucketArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetVectors

valid {
    input.Body.vectorBucketName == STRING
    input.Body.indexName == STRING
    input.Body.indexArn == STRING
    input.Body.keys[_] == STRING
    input.Body.returnData == BOOLEAN
    input.Body.returnMetadata == BOOLEAN
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListIndexes

valid {
    input.Body.vectorBucketName == STRING
    input.Body.vectorBucketArn == STRING
    input.Body.maxResults == INTEGER
    input.Body.nextToken == STRING
    input.Body.prefix == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListVectorBuckets

valid {
    input.Body.maxResults == INTEGER
    input.Body.nextToken == STRING
    input.Body.prefix == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListVectors

valid {
    input.Body.vectorBucketName == STRING
    input.Body.indexName == STRING
    input.Body.indexArn == STRING
    input.Body.maxResults == INTEGER
    input.Body.nextToken == STRING
    input.Body.segmentCount == INTEGER
    input.Body.segmentIndex == INTEGER
    input.Body.returnData == BOOLEAN
    input.Body.returnMetadata == BOOLEAN
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

PutVectorBucketPolicy

valid {
    input.Body.vectorBucketName == STRING
    input.Body.vectorBucketArn == STRING
    input.Body.policy == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

PutVectors

valid {
    input.Body.vectorBucketName == STRING
    input.Body.indexName == STRING
    input.Body.indexArn == STRING
    input.Body.vectors[_].key == STRING
    input.Body.vectors[_].data.float32[_] == FLOAT
    input.Body.vectors[_].metadata == {}
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

QueryVectors

valid {
    input.Body.vectorBucketName == STRING
    input.Body.indexName == STRING
    input.Body.indexArn == STRING
    input.Body.topK == INTEGER
    input.Body.queryVector.float32[_] == FLOAT
    input.Body.filter == {}
    input.Body.returnMetadata == BOOLEAN
    input.Body.returnDistance == BOOLEAN
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}