protocol

s3_protocol

S3-compatible client facade predicates.

Availability:
logtalk_load(s3(loader))
Author: Paulo Moura
Version: 1:0:0
Date: 2026-07-13
Compilation flags:
static
Dependencies:
(none)
Remarks:
(none)
Inherited public predicates:
(none)

Public predicates

list_buckets/2

Lists accessible buckets.

Compilation flags:
static
Template:
list_buckets(Buckets,Options)
Mode and number of proofs:
list_buckets(-compound,+list(compound)) - one_or_error
Exceptions:
Options is a variable:
instantiation_error
Options is neither a variable nor a list:
type_error(list,Options)
An element Option of the list Options is a variable:
instantiation_error
An element Option of the list Options is neither a variable nor a compound term:
type_error(compound,Option)
An element Option of the list Options is a compound term but not a valid option:
domain_error(option,Option)
Options contains an invalid S3 client option:
domain_error(s3_client_option,Option)
Credentials are missing or invalid:
domain_error(s3_credentials,missing)
The S3 service returned a non-success status or malformed XML body:
domain_error(s3_http_status,Status)
Remarks:
  • Option credentials/1: Required access credentials as credentials(access_key_id(AccessKeyId), secret_access_key(SecretAccessKey)).

  • Option session_token/1: Optional session token for temporary credentials.

  • Option region/1: AWS region to use when endpoint/1 is absent. Defaults to us-east-1.

  • Option endpoint/1: Optional custom S3-compatible endpoint URL.

  • Option addressing_style/1: Endpoint addressing style, either virtual_hosted or path. Defaults to virtual_hosted.

  • Option headers/1: Optional extra normalized HTTP request headers.

  • Option version/1: HTTP protocol version as http(Major, Minor). Defaults to http(1,1).

  • Option properties/1: Optional extra normalized HTTP request properties.

  • Option connection_options/1: Optional transport-specific HTTP client options.

  • Option payload_hash_mode/1: Payload signing mode, either signed or unsigned. Defaults to signed.

  • Option request_time/1: Optional explicit local request time as date_time(Year, Month, Day, Hours, Minutes, Seconds).

  • Option utc_offset_seconds/1: UTC offset used to derive the signing time from the local clock. Defaults to 0.

  • Option amz_date/1: Optional explicit AWS SigV4 timestamp overriding any derived request time.


head_bucket/3

Returns response metadata for a bucket.

Compilation flags:
static
Template:
head_bucket(Bucket,Metadata,Options)
Mode and number of proofs:
head_bucket(+atom,-compound,+list(compound)) - one_or_error
Exceptions:
Bucket is a variable:
instantiation_error
Bucket is neither a variable nor an atom:
type_error(atom,Bucket)
Bucket is an atom but not a valid S3 bucket:
domain_error(s3_bucket,Bucket)
Options is a variable:
instantiation_error
Options is neither a variable nor a list:
type_error(list,Options)
An element Option of the list Options is a variable:
instantiation_error
An element Option of the list Options is neither a variable nor a compound term:
type_error(compound,Option)
An element Option of the list Options is a compound term but not a valid option:
domain_error(option,Option)
Options contains an invalid S3 client option:
domain_error(s3_client_option,Option)
The S3 service returned a non-success status:
domain_error(s3_http_status,Status)
Remarks:
  • Options: Supported options are the standard S3 request options: credentials(access_key_id(AccessKeyId), secret_access_key(SecretAccessKey)), optional session_token(Token), region(Region), optional custom endpoint(URL), addressing_style(virtual_hosted|path), optional headers(Headers), version(http(Major, Minor)), optional properties(Properties), optional connection_options(ConnectionOptions), payload_hash_mode(signed|unsigned), optional request_time(date_time(...)), utc_offset_seconds(OffsetSeconds), and optional explicit amz_date(AmzDate).


list_objects_v2/4

Lists bucket objects using the ListObjectsV2 API.

Compilation flags:
static
Template:
list_objects_v2(Bucket,Request,Listing,Options)
Mode and number of proofs:
list_objects_v2(+atom,+compound,-compound,+list(compound)) - one_or_error
Exceptions:
Bucket is a variable:
instantiation_error
Request is a variable:
instantiation_error
An element Option of the request option list is a variable:
instantiation_error
Bucket is neither a variable nor an atom:
type_error(atom,Bucket)
An element Option of the request option list is neither a variable nor a compound term:
type_error(compound,Option)
Bucket is an atom but not a valid S3 bucket:
domain_error(s3_bucket,Bucket)
Request is not a valid ListObjectsV2 request term or option list:
domain_error(s3_list_objects_request,Request)
An element Option of the request option list is a compound term but not a valid ListObjectsV2 request option:
domain_error(s3_list_objects_request_option,Option)
Options is a variable:
instantiation_error
Options is neither a variable nor a list:
type_error(list,Options)
An element Option of the list Options is a variable:
instantiation_error
An element Option of the list Options is neither a variable nor a compound term:
type_error(compound,Option)
An element Option of the list Options is a compound term but not a valid option:
domain_error(option,Option)
Options contains an invalid S3 client option:
domain_error(s3_client_option,Option)
The S3 service returned a non-success status or malformed XML body:
domain_error(s3_http_status,Status)
Remarks:
  • Options: Options accepts the standard S3 request options: credentials(access_key_id(AccessKeyId), secret_access_key(SecretAccessKey)), optional session_token(Token), region(Region), optional custom endpoint(URL), addressing_style(virtual_hosted|path), optional headers(Headers), version(http(Major, Minor)), optional properties(Properties), optional connection_options(ConnectionOptions), payload_hash_mode(signed|unsigned), optional request_time(date_time(...)), utc_offset_seconds(OffsetSeconds), and optional explicit amz_date(AmzDate). The Request argument carries the ListObjectsV2-specific request options.


head_object/4

Returns response metadata for an object.

Compilation flags:
static
Template:
head_object(Bucket,Key,Metadata,Options)
Mode and number of proofs:
head_object(+atom,+atom,-compound,+list(compound)) - one_or_error
Exceptions:
Bucket is a variable:
instantiation_error
Key is a variable:
instantiation_error
Bucket is neither a variable nor an atom:
type_error(atom,Bucket)
Key is neither a variable nor an atom:
type_error(atom,Key)
Bucket is an atom but not a valid S3 bucket:
domain_error(s3_bucket,Bucket)
Options is a variable:
instantiation_error
Options is neither a variable nor a list:
type_error(list,Options)
An element Option of the list Options is a variable:
instantiation_error
An element Option of the list Options is neither a variable nor a compound term:
type_error(compound,Option)
An element Option of the list Options is a compound term but not a valid option:
domain_error(option,Option)
Options contains an invalid S3 client option:
domain_error(s3_client_option,Option)
The S3 service returned a non-success status:
domain_error(s3_http_status,Status)
Remarks:
  • Options: Supported options are the standard S3 request options: credentials(access_key_id(AccessKeyId), secret_access_key(SecretAccessKey)), optional session_token(Token), region(Region), optional custom endpoint(URL), addressing_style(virtual_hosted|path), optional headers(Headers), version(http(Major, Minor)), optional properties(Properties), optional connection_options(ConnectionOptions), payload_hash_mode(signed|unsigned), optional request_time(date_time(...)), utc_offset_seconds(OffsetSeconds), and optional explicit amz_date(AmzDate).


get_object/5

Fetches an object into a local file path and returns its response metadata as a separate argument.

Compilation flags:
static
Template:
get_object(Bucket,Key,File,Properties,Options)
Mode and number of proofs:
get_object(+atom,+atom,+atom,-compound,+list(compound)) - one_or_error
Exceptions:
Bucket is a variable:
instantiation_error
Key is a variable:
instantiation_error
File is a variable:
instantiation_error
Bucket is neither a variable nor an atom:
type_error(atom,Bucket)
Key is neither a variable nor an atom:
type_error(atom,Key)
File is neither a variable nor an atom:
type_error(atom,File)
Bucket is an atom but not a valid S3 bucket:
domain_error(s3_bucket,Bucket)
File exists but is not a writable file:
domain_error(file([],[write]),File)
The directory Directory exists but is not writable:
domain_error(directory([write]),Directory)
The directory Directory does not exist:
existence_error(directory,Directory)
Options is a variable:
instantiation_error
Options is neither a variable nor a list:
type_error(list,Options)
An element Option of the list Options is a variable:
instantiation_error
An element Option of the list Options is neither a variable nor a compound term:
type_error(compound,Option)
An element Option of the list Options is a compound term but not a valid option:
domain_error(option,Option)
Options contains an invalid S3 client option:
domain_error(s3_client_option,Option)
The S3 service returned a non-success status:
domain_error(s3_http_status,Status)
Remarks:
  • Options: Supported options are: credentials(access_key_id(AccessKeyId), secret_access_key(SecretAccessKey)) for access credentials; session_token(Token) for temporary credentials; region(Region) for the AWS region, defaulting to us-east-1 when endpoint/1 is absent; endpoint(URL) for a custom S3-compatible endpoint; addressing_style(virtual_hosted|path) for endpoint addressing, defaulting to virtual_hosted; headers(Headers) for extra normalized request headers; version(http(Major, Minor)) for the HTTP protocol version, defaulting to http(1,1); properties(Properties) for extra normalized HTTP request properties; connection_options(ConnectionOptions) for transport-specific HTTP client options; payload_hash_mode(signed|unsigned) for payload signing, defaulting to signed; request_time(date_time(...)) for an explicit local request time; utc_offset_seconds(OffsetSeconds) for deriving UTC from the local clock, defaulting to 0; and amz_date(AmzDate) for an explicit AWS SigV4 timestamp overriding time derivation.


put_object/6

Uploads a local file path and returns the object ETag and response metadata as separate arguments.

Compilation flags:
static
Template:
put_object(Bucket,Key,File,ETag,Properties,Options)
Mode and number of proofs:
put_object(+atom,+atom,+atom,-atom,-compound,+list(compound)) - one_or_error
Exceptions:
Bucket is a variable:
instantiation_error
Key is a variable:
instantiation_error
File is a variable:
instantiation_error
Bucket is neither a variable nor an atom:
type_error(atom,Bucket)
Key is neither a variable nor an atom:
type_error(atom,Key)
File is neither a variable nor an atom:
type_error(atom,File)
Bucket is an atom but not a valid S3 bucket:
domain_error(s3_bucket,Bucket)
File exists but is not a readable file:
domain_error(file([],[read]),File)
The file File does not exist:
existence_error(file,File)
Options is a variable:
instantiation_error
Options is neither a variable nor a list:
type_error(list,Options)
An element Option of the list Options is a variable:
instantiation_error
An element Option of the list Options is neither a variable nor a compound term:
type_error(compound,Option)
An element Option of the list Options is a compound term but not a valid option:
domain_error(option,Option)
Options contains an invalid S3 client option:
domain_error(s3_client_option,Option)
The S3 service returned a non-success status:
domain_error(s3_http_status,Status)
Remarks:
  • Options: Supported options are the standard S3 request options: credentials(access_key_id(AccessKeyId), secret_access_key(SecretAccessKey)), optional session_token(Token), region(Region), optional custom endpoint(URL), addressing_style(virtual_hosted|path), optional headers(Headers), version(http(Major, Minor)), optional properties(Properties), optional connection_options(ConnectionOptions), payload_hash_mode(signed|unsigned), optional request_time(date_time(...)), utc_offset_seconds(OffsetSeconds), and optional explicit amz_date(AmzDate).


delete_object/4

Deletes an object, returning delete_result(Properties).

Compilation flags:
static
Template:
delete_object(Bucket,Key,Result,Options)
Mode and number of proofs:
delete_object(+atom,+atom,-compound,+list(compound)) - one_or_error
Exceptions:
Bucket is a variable:
instantiation_error
Key is a variable:
instantiation_error
Bucket is neither a variable nor an atom:
type_error(atom,Bucket)
Key is neither a variable nor an atom:
type_error(atom,Key)
Bucket is an atom but not a valid S3 bucket:
domain_error(s3_bucket,Bucket)
Options is a variable:
instantiation_error
Options is neither a variable nor a list:
type_error(list,Options)
An element Option of the list Options is a variable:
instantiation_error
An element Option of the list Options is neither a variable nor a compound term:
type_error(compound,Option)
An element Option of the list Options is a compound term but not a valid option:
domain_error(option,Option)
Options contains an invalid S3 client option:
domain_error(s3_client_option,Option)
The S3 service returned a non-success status:
domain_error(s3_http_status,Status)
Remarks:
  • Options: Supported options are the standard S3 request options: credentials(access_key_id(AccessKeyId), secret_access_key(SecretAccessKey)), optional session_token(Token), region(Region), optional custom endpoint(URL), addressing_style(virtual_hosted|path), optional headers(Headers), version(http(Major, Minor)), optional properties(Properties), optional connection_options(ConnectionOptions), payload_hash_mode(signed|unsigned), optional request_time(date_time(...)), utc_offset_seconds(OffsetSeconds), and optional explicit amz_date(AmzDate).


copy_object/5

Copies an object from a source bucket/key into the destination bucket/key, returning copy_result(ETag, Properties).

Compilation flags:
static
Template:
copy_object(Source,Bucket,Key,Result,Options)
Mode and number of proofs:
copy_object(+compound,+atom,+atom,-compound,+list(compound)) - one_or_error
Exceptions:
Source is a variable:
instantiation_error
Bucket is a variable:
instantiation_error
Key is a variable:
instantiation_error
The version identifier in Source is a variable:
instantiation_error
Source is neither a variable nor a compound term:
type_error(compound,Source)
Bucket is neither a variable nor an atom:
type_error(atom,Bucket)
Key is neither a variable nor an atom:
type_error(atom,Key)
The version identifier in Source is neither a variable nor an atom:
type_error(atom,VersionId)
Source is a compound term but not a valid copy source term:
domain_error(s3_copy_source,Source)
Bucket is an atom but not a valid S3 bucket:
domain_error(s3_bucket,Bucket)
The version identifier in Source is an atom but not a valid version identifier:
domain_error(s3_version_id,VersionId)
Options is a variable:
instantiation_error
Options is neither a variable nor a list:
type_error(list,Options)
An element Option of the list Options is a variable:
instantiation_error
An element Option of the list Options is neither a variable nor a compound term:
type_error(compound,Option)
An element Option of the list Options is a compound term but not a valid option:
domain_error(option,Option)
Options contains an invalid S3 client option:
domain_error(s3_client_option,Option)
The S3 service returned a non-success status or malformed XML body:
domain_error(s3_http_status,Status)
Remarks:
  • Options: Supported options are the standard S3 request options: credentials(access_key_id(AccessKeyId), secret_access_key(SecretAccessKey)), optional session_token(Token), region(Region), optional custom endpoint(URL), addressing_style(virtual_hosted|path), optional headers(Headers), version(http(Major, Minor)), optional properties(Properties), optional connection_options(ConnectionOptions), payload_hash_mode(signed|unsigned), optional request_time(date_time(...)), utc_offset_seconds(OffsetSeconds), and optional explicit amz_date(AmzDate).


presigned_get_object/4

Generates a presigned URL for downloading an object with an external HTTP client.

Compilation flags:
static
Template:
presigned_get_object(Bucket,Key,URL,Options)
Mode and number of proofs:
presigned_get_object(+atom,+atom,-atom,+list(compound)) - one_or_error
Exceptions:
Bucket is a variable:
instantiation_error
Key is a variable:
instantiation_error
Bucket is neither a variable nor an atom:
type_error(atom,Bucket)
Key is neither a variable nor an atom:
type_error(atom,Key)
Bucket is an atom but not a valid S3 bucket:
domain_error(s3_bucket,Bucket)
Options is a variable:
instantiation_error
Options is neither a variable nor a list:
type_error(list,Options)
An element Option of the list Options is a variable:
instantiation_error
An element Option of the list Options is neither a variable nor a compound term:
type_error(compound,Option)
An element Option of the list Options is a compound term but not a valid option:
domain_error(option,Option)
Options contains an invalid S3 client option:
domain_error(s3_client_option,Option)
Credentials are missing or invalid:
domain_error(s3_credentials,missing)
The expiration is invalid or outside the AWS SigV4 range:
domain_error(s3_presign_expires,Expires)
The payload hash is missing, invalid, or incompatible with unsigned mode:
domain_error(s3_presign_payload_hash,Hash)
Remarks:
  • Option credentials/1: Required access credentials as credentials(access_key_id(AccessKeyId), secret_access_key(SecretAccessKey)).

  • Option session_token/1: Optional session token for temporary credentials.

  • Option region/1: AWS region to use when endpoint/1 is absent. Defaults to us-east-1.

  • Option endpoint/1: Optional custom S3-compatible endpoint URL.

  • Option addressing_style/1: Endpoint addressing style, either virtual_hosted or path. Defaults to virtual_hosted.

  • Option headers/1: Optional extra normalized request headers. When present they are signed into the URL and must be reproduced by the eventual caller.

  • Option payload_hash_mode/1: Presigned URLs default to payload_hash_mode(unsigned). Use signed together with payload_hash/1 to sign a precomputed payload hash.

  • Option payload_hash/1: Precomputed hexadecimal SHA-256 payload hash required when payload_hash_mode(signed) is selected.

  • Option request_time/1: Optional explicit local request time as date_time(Year, Month, Day, Hours, Minutes, Seconds).

  • Option utc_offset_seconds/1: UTC offset used to derive the signing time from the local clock. Defaults to 0.

  • Option amz_date/1: Optional explicit AWS SigV4 timestamp overriding any derived request time.

  • Option expires/1: Presigned URL lifetime in seconds. Defaults to 900 and must not exceed 604800.


presigned_put_object/4

Generates a presigned URL for uploading an object with an external HTTP client.

Compilation flags:
static
Template:
presigned_put_object(Bucket,Key,URL,Options)
Mode and number of proofs:
presigned_put_object(+atom,+atom,-atom,+list(compound)) - one_or_error
Exceptions:
Bucket is a variable:
instantiation_error
Key is a variable:
instantiation_error
Bucket is neither a variable nor an atom:
type_error(atom,Bucket)
Key is neither a variable nor an atom:
type_error(atom,Key)
Bucket is an atom but not a valid S3 bucket:
domain_error(s3_bucket,Bucket)
Options is a variable:
instantiation_error
Options is neither a variable nor a list:
type_error(list,Options)
An element Option of the list Options is a variable:
instantiation_error
An element Option of the list Options is neither a variable nor a compound term:
type_error(compound,Option)
An element Option of the list Options is a compound term but not a valid option:
domain_error(option,Option)
Options contains an invalid S3 client option:
domain_error(s3_client_option,Option)
Credentials are missing or invalid:
domain_error(s3_credentials,missing)
The expiration is invalid or outside the AWS SigV4 range:
domain_error(s3_presign_expires,Expires)
The payload hash is missing, invalid, or incompatible with unsigned mode:
domain_error(s3_presign_payload_hash,Hash)
Remarks:
  • Option credentials/1: Required access credentials as credentials(access_key_id(AccessKeyId), secret_access_key(SecretAccessKey)).

  • Option session_token/1: Optional session token for temporary credentials.

  • Option region/1: AWS region to use when endpoint/1 is absent. Defaults to us-east-1.

  • Option endpoint/1: Optional custom S3-compatible endpoint URL.

  • Option addressing_style/1: Endpoint addressing style, either virtual_hosted or path. Defaults to virtual_hosted.

  • Option headers/1: Optional extra normalized request headers. When present they are signed into the URL and must be reproduced by the eventual caller.

  • Option payload_hash_mode/1: Presigned URLs default to payload_hash_mode(unsigned). Use signed together with payload_hash/1 to sign a precomputed payload hash.

  • Option payload_hash/1: Precomputed hexadecimal SHA-256 payload hash required when payload_hash_mode(signed) is selected.

  • Option request_time/1: Optional explicit local request time as date_time(Year, Month, Day, Hours, Minutes, Seconds).

  • Option utc_offset_seconds/1: UTC offset used to derive the signing time from the local clock. Defaults to 0.

  • Option amz_date/1: Optional explicit AWS SigV4 timestamp overriding any derived request time.

  • Option expires/1: Presigned URL lifetime in seconds. Defaults to 900 and must not exceed 604800.


presigned_post_object/4

Generates a presigned URL for a POST request to an object with an external HTTP client.

Compilation flags:
static
Template:
presigned_post_object(Bucket,Key,URL,Options)
Mode and number of proofs:
presigned_post_object(+atom,+atom,-atom,+list(compound)) - one_or_error
Exceptions:
Bucket is a variable:
instantiation_error
Key is a variable:
instantiation_error
Bucket is neither a variable nor an atom:
type_error(atom,Bucket)
Key is neither a variable nor an atom:
type_error(atom,Key)
Bucket is an atom but not a valid S3 bucket:
domain_error(s3_bucket,Bucket)
Options is a variable:
instantiation_error
Options is neither a variable nor a list:
type_error(list,Options)
An element Option of the list Options is a variable:
instantiation_error
An element Option of the list Options is neither a variable nor a compound term:
type_error(compound,Option)
An element Option of the list Options is a compound term but not a valid option:
domain_error(option,Option)
Options contains an invalid S3 client option:
domain_error(s3_client_option,Option)
Credentials are missing or invalid:
domain_error(s3_credentials,missing)
The expiration is invalid or outside the AWS SigV4 range:
domain_error(s3_presign_expires,Expires)
The payload hash is missing, invalid, or incompatible with unsigned mode:
domain_error(s3_presign_payload_hash,Hash)
Remarks:
  • Option credentials/1: Required access credentials as credentials(access_key_id(AccessKeyId), secret_access_key(SecretAccessKey)).

  • Option session_token/1: Optional session token for temporary credentials.

  • Option region/1: AWS region to use when endpoint/1 is absent. Defaults to us-east-1.

  • Option endpoint/1: Optional custom S3-compatible endpoint URL.

  • Option addressing_style/1: Endpoint addressing style, either virtual_hosted or path. Defaults to virtual_hosted.

  • Option headers/1: Optional extra normalized request headers. When present they are signed into the URL and must be reproduced by the eventual caller.

  • Option payload_hash_mode/1: Presigned URLs default to payload_hash_mode(unsigned). Use signed together with payload_hash/1 to sign a precomputed payload hash.

  • Option payload_hash/1: Precomputed hexadecimal SHA-256 payload hash required when payload_hash_mode(signed) is selected.

  • Option request_time/1: Optional explicit local request time as date_time(Year, Month, Day, Hours, Minutes, Seconds).

  • Option utc_offset_seconds/1: UTC offset used to derive the signing time from the local clock. Defaults to 0.

  • Option amz_date/1: Optional explicit AWS SigV4 timestamp overriding any derived request time.

  • Option expires/1: Presigned URL lifetime in seconds. Defaults to 900 and must not exceed 604800.


Protected predicates

(none)

Private predicates

(none)

Operators

(none)