send method

Future<Response> send({
  1. required AwsRequestType type,
  2. String? service,
  3. List<String> signedHeaders = const [],
  4. Map<String, String> headers = defaultHeaders,
  5. String jsonBody = '',
  6. String queryPath = '/',
  7. Map<String, String>? queryString,
  8. List<MapEntry<String, String>>? queryStringPairs,
  9. bool hashedPayloadIsUnsigned = false,
  10. bool useNonS3DoubleEncodedCanonicalPath = false,
  11. Duration? timeout,
  12. String? endpoint,
})

Builds, signs, and sends aws http requests.

type: request type GET, POST, PUT, etc

service: aws service you are sending request to

signedHeaders: extra header names (lowercase) to include in the signature.

Always signed: host, x-amz-date. Content-Type is signed when present on the merged request headers (defaults supply application/x-amz-json-1.1 unless overridden).

headers: any required headers. Any non-default headers included in the signedHeaders must be added here.

jsonBody: the body of the request, formatted as json

queryPath: the aws query path

queryString: the url query string as a Map

timeout: overrides constructor request timeout

endpoint: custom hostname override. Defaults to constructor value, then '{service}.{region}.amazonaws.com' when null.

Implementation

Future<Response> send({
  required AwsRequestType type,
  String? service,
  List<String> signedHeaders = const [],
  Map<String, String> headers = defaultHeaders,
  String jsonBody = '',
  String queryPath = '/',
  Map<String, String>? queryString,
  List<MapEntry<String, String>>? queryStringPairs,
  bool hashedPayloadIsUnsigned = false,
  bool useNonS3DoubleEncodedCanonicalPath = false,
  Duration? timeout,
  String? endpoint,
}) async {
  validateRequest(service ?? this.service);
  return AwsHttpRequest.send(
    awsAccessKey: awsAccessKey,
    awsSecretKey: awsSecretKey,
    region: region,
    type: type,
    service: service ?? this.service!,
    signedHeaders: signedHeaders,
    headers: headers,
    jsonBody: jsonBody,
    canonicalUri: queryPath,
    canonicalQuery: queryString,
    canonicalQueryPairs: queryStringPairs,
    hashedPayloadIsUnsigned: hashedPayloadIsUnsigned,
    useNonS3DoubleEncodedCanonicalPath: useNonS3DoubleEncodedCanonicalPath,
    timeout: timeout ?? this.timeout,
    endpoint: endpoint ?? this.endpoint,
  );
}