%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE! %% See https://github.com/aws-beam/aws-codegen for more details. %% @doc Amazon Cognito Sync %% %% Amazon Cognito Sync provides an AWS service and client library that enable %% cross-device syncing of application-related user data. High-level client %% libraries are available for both iOS and Android. You can use these %% libraries to persist data locally so that it's available even if the %% device is offline. Developer credentials don't need to be stored on the %% mobile device to access the service. You can use Amazon Cognito to obtain %% a normalized user ID and credentials. User data is persisted in a dataset %% that can store up to 1 MB of key-value pairs, and you can have up to 20 %% datasets per user identity. %% %% With Amazon Cognito Sync, the data stored for each identity is accessible %% only to credentials assigned to that identity. In order to use the Cognito %% Sync service, you need to make API calls using credentials retrieved with %% Amazon %% Cognito Identity service. %% %% If you want to use Cognito Sync in an Android or iOS application, you will %% probably want to make API calls via the AWS Mobile SDK. To learn more, see %% the Developer %% Guide for Android and the Developer %% Guide for iOS. -module(aws_cognito_sync). -export([bulk_publish/3, bulk_publish/4, delete_dataset/5, delete_dataset/6, describe_dataset/4, describe_dataset/5, describe_identity_pool_usage/2, describe_identity_pool_usage/3, describe_identity_usage/3, describe_identity_usage/4, get_bulk_publish_details/3, get_bulk_publish_details/4, get_cognito_events/2, get_cognito_events/3, get_identity_pool_configuration/2, get_identity_pool_configuration/3, list_datasets/3, list_datasets/4, list_identity_pool_usage/1, list_identity_pool_usage/2, list_records/4, list_records/5, register_device/4, register_device/5, set_cognito_events/3, set_cognito_events/4, set_identity_pool_configuration/3, set_identity_pool_configuration/4, subscribe_to_dataset/6, subscribe_to_dataset/7, unsubscribe_from_dataset/6, unsubscribe_from_dataset/7, update_records/5, update_records/6]). -include_lib("hackney/include/hackney_lib.hrl"). %%==================================================================== %% API %%==================================================================== %% @doc Initiates a bulk publish of all existing datasets for an Identity %% Pool to the configured stream. Customers are limited to one successful %% bulk publish per 24 hours. Bulk publish is an asynchronous request, %% customers can see the status of the request via the GetBulkPublishDetails %% operation. %% %% This API can only be called with developer credentials. You cannot call %% this API with the temporary user credentials provided by Cognito Identity. bulk_publish(Client, IdentityPoolId, Input) -> bulk_publish(Client, IdentityPoolId, Input, []). bulk_publish(Client, IdentityPoolId, Input0, Options) -> Method = post, Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/bulkpublish"], SuccessStatusCode = 200, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Deletes the specific dataset. The dataset will be deleted %% permanently, and the action can't be undone. Datasets that this dataset %% was merged with will no longer report the merge. Any subsequent operation %% on this dataset will result in a ResourceNotFoundException. %% %% This API can be called with temporary user credentials provided by Cognito %% Identity or with developer credentials. delete_dataset(Client, DatasetName, IdentityId, IdentityPoolId, Input) -> delete_dataset(Client, DatasetName, IdentityId, IdentityPoolId, Input, []). delete_dataset(Client, DatasetName, IdentityId, IdentityPoolId, Input0, Options) -> Method = delete, Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/identities/", http_uri:encode(IdentityId), "/datasets/", http_uri:encode(DatasetName), ""], SuccessStatusCode = 200, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Gets meta data about a dataset by identity and dataset name. With %% Amazon Cognito Sync, each identity has access only to its own data. Thus, %% the credentials used to make this API call need to have access to the %% identity data. %% %% This API can be called with temporary user credentials provided by Cognito %% Identity or with developer credentials. You should use Cognito Identity %% credentials to make this API call. describe_dataset(Client, DatasetName, IdentityId, IdentityPoolId) when is_map(Client) -> describe_dataset(Client, DatasetName, IdentityId, IdentityPoolId, []). describe_dataset(Client, DatasetName, IdentityId, IdentityPoolId, Options) when is_map(Client), is_list(Options) -> Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/identities/", http_uri:encode(IdentityId), "/datasets/", http_uri:encode(DatasetName), ""], SuccessStatusCode = 200, Headers = [], request(Client, get, Path, Headers, undefined, Options, SuccessStatusCode). %% @doc Gets usage details (for example, data storage) about a particular %% identity pool. %% %% This API can only be called with developer credentials. You cannot call %% this API with the temporary user credentials provided by Cognito Identity. describe_identity_pool_usage(Client, IdentityPoolId) when is_map(Client) -> describe_identity_pool_usage(Client, IdentityPoolId, []). describe_identity_pool_usage(Client, IdentityPoolId, Options) when is_map(Client), is_list(Options) -> Path = ["/identitypools/", http_uri:encode(IdentityPoolId), ""], SuccessStatusCode = 200, Headers = [], request(Client, get, Path, Headers, undefined, Options, SuccessStatusCode). %% @doc Gets usage information for an identity, including number of datasets %% and data usage. %% %% This API can be called with temporary user credentials provided by Cognito %% Identity or with developer credentials. describe_identity_usage(Client, IdentityId, IdentityPoolId) when is_map(Client) -> describe_identity_usage(Client, IdentityId, IdentityPoolId, []). describe_identity_usage(Client, IdentityId, IdentityPoolId, Options) when is_map(Client), is_list(Options) -> Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/identities/", http_uri:encode(IdentityId), ""], SuccessStatusCode = 200, Headers = [], request(Client, get, Path, Headers, undefined, Options, SuccessStatusCode). %% @doc Get the status of the last BulkPublish operation for an identity %% pool. %% %% This API can only be called with developer credentials. You cannot call %% this API with the temporary user credentials provided by Cognito Identity. get_bulk_publish_details(Client, IdentityPoolId, Input) -> get_bulk_publish_details(Client, IdentityPoolId, Input, []). get_bulk_publish_details(Client, IdentityPoolId, Input0, Options) -> Method = post, Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/getBulkPublishDetails"], SuccessStatusCode = 200, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Gets the events and the corresponding Lambda functions associated %% with an identity pool. %% %% This API can only be called with developer credentials. You cannot call %% this API with the temporary user credentials provided by Cognito Identity. get_cognito_events(Client, IdentityPoolId) when is_map(Client) -> get_cognito_events(Client, IdentityPoolId, []). get_cognito_events(Client, IdentityPoolId, Options) when is_map(Client), is_list(Options) -> Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/events"], SuccessStatusCode = 200, Headers = [], request(Client, get, Path, Headers, undefined, Options, SuccessStatusCode). %% @doc Gets the configuration settings of an identity pool. %% %% This API can only be called with developer credentials. You cannot call %% this API with the temporary user credentials provided by Cognito Identity. get_identity_pool_configuration(Client, IdentityPoolId) when is_map(Client) -> get_identity_pool_configuration(Client, IdentityPoolId, []). get_identity_pool_configuration(Client, IdentityPoolId, Options) when is_map(Client), is_list(Options) -> Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/configuration"], SuccessStatusCode = 200, Headers = [], request(Client, get, Path, Headers, undefined, Options, SuccessStatusCode). %% @doc Lists datasets for an identity. With Amazon Cognito Sync, each %% identity has access only to its own data. Thus, the credentials used to %% make this API call need to have access to the identity data. %% %% ListDatasets can be called with temporary user credentials provided by %% Cognito Identity or with developer credentials. You should use the Cognito %% Identity credentials to make this API call. list_datasets(Client, IdentityId, IdentityPoolId) when is_map(Client) -> list_datasets(Client, IdentityId, IdentityPoolId, []). list_datasets(Client, IdentityId, IdentityPoolId, Options) when is_map(Client), is_list(Options) -> Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/identities/", http_uri:encode(IdentityId), "/datasets"], SuccessStatusCode = 200, Headers = [], request(Client, get, Path, Headers, undefined, Options, SuccessStatusCode). %% @doc Gets a list of identity pools registered with Cognito. %% %% ListIdentityPoolUsage can only be called with developer credentials. You %% cannot make this API call with the temporary user credentials provided by %% Cognito Identity. list_identity_pool_usage(Client) when is_map(Client) -> list_identity_pool_usage(Client, []). list_identity_pool_usage(Client, Options) when is_map(Client), is_list(Options) -> Path = ["/identitypools"], SuccessStatusCode = 200, Headers = [], request(Client, get, Path, Headers, undefined, Options, SuccessStatusCode). %% @doc Gets paginated records, optionally changed after a particular sync %% count for a dataset and identity. With Amazon Cognito Sync, each identity %% has access only to its own data. Thus, the credentials used to make this %% API call need to have access to the identity data. %% %% ListRecords can be called with temporary user credentials provided by %% Cognito Identity or with developer credentials. You should use Cognito %% Identity credentials to make this API call. list_records(Client, DatasetName, IdentityId, IdentityPoolId) when is_map(Client) -> list_records(Client, DatasetName, IdentityId, IdentityPoolId, []). list_records(Client, DatasetName, IdentityId, IdentityPoolId, Options) when is_map(Client), is_list(Options) -> Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/identities/", http_uri:encode(IdentityId), "/datasets/", http_uri:encode(DatasetName), "/records"], SuccessStatusCode = 200, Headers = [], request(Client, get, Path, Headers, undefined, Options, SuccessStatusCode). %% @doc Registers a device to receive push sync notifications. %% %% This API can only be called with temporary credentials provided by Cognito %% Identity. You cannot call this API with developer credentials. register_device(Client, IdentityId, IdentityPoolId, Input) -> register_device(Client, IdentityId, IdentityPoolId, Input, []). register_device(Client, IdentityId, IdentityPoolId, Input0, Options) -> Method = post, Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/identity/", http_uri:encode(IdentityId), "/device"], SuccessStatusCode = 200, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Sets the AWS Lambda function for a given event type for an identity %% pool. This request only updates the key/value pair specified. Other %% key/values pairs are not updated. To remove a key value pair, pass a empty %% value for the particular key. %% %% This API can only be called with developer credentials. You cannot call %% this API with the temporary user credentials provided by Cognito Identity. set_cognito_events(Client, IdentityPoolId, Input) -> set_cognito_events(Client, IdentityPoolId, Input, []). set_cognito_events(Client, IdentityPoolId, Input0, Options) -> Method = post, Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/events"], SuccessStatusCode = 200, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Sets the necessary configuration for push sync. %% %% This API can only be called with developer credentials. You cannot call %% this API with the temporary user credentials provided by Cognito Identity. set_identity_pool_configuration(Client, IdentityPoolId, Input) -> set_identity_pool_configuration(Client, IdentityPoolId, Input, []). set_identity_pool_configuration(Client, IdentityPoolId, Input0, Options) -> Method = post, Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/configuration"], SuccessStatusCode = 200, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Subscribes to receive notifications when a dataset is modified by %% another device. %% %% This API can only be called with temporary credentials provided by Cognito %% Identity. You cannot call this API with developer credentials. subscribe_to_dataset(Client, DatasetName, DeviceId, IdentityId, IdentityPoolId, Input) -> subscribe_to_dataset(Client, DatasetName, DeviceId, IdentityId, IdentityPoolId, Input, []). subscribe_to_dataset(Client, DatasetName, DeviceId, IdentityId, IdentityPoolId, Input0, Options) -> Method = post, Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/identities/", http_uri:encode(IdentityId), "/datasets/", http_uri:encode(DatasetName), "/subscriptions/", http_uri:encode(DeviceId), ""], SuccessStatusCode = 200, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Unsubscribes from receiving notifications when a dataset is modified %% by another device. %% %% This API can only be called with temporary credentials provided by Cognito %% Identity. You cannot call this API with developer credentials. unsubscribe_from_dataset(Client, DatasetName, DeviceId, IdentityId, IdentityPoolId, Input) -> unsubscribe_from_dataset(Client, DatasetName, DeviceId, IdentityId, IdentityPoolId, Input, []). unsubscribe_from_dataset(Client, DatasetName, DeviceId, IdentityId, IdentityPoolId, Input0, Options) -> Method = delete, Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/identities/", http_uri:encode(IdentityId), "/datasets/", http_uri:encode(DatasetName), "/subscriptions/", http_uri:encode(DeviceId), ""], SuccessStatusCode = 200, Headers = [], Input = Input0, request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %% @doc Posts updates to records and adds and deletes records for a dataset %% and user. %% %% The sync count in the record patch is your last known sync count for that %% record. The server will reject an UpdateRecords request with a %% ResourceConflictException if you try to patch a record with a new value %% but a stale sync count. %% %% For example, if the sync count on the server is 5 for a key called %% highScore and you try and submit a new highScore with sync count of 4, the %% request will be rejected. To obtain the current sync count for a record, %% call ListRecords. On a successful update of the record, the response %% returns the new sync count for that record. You should present that sync %% count the next time you try to update that same record. When the record %% does not exist, specify the sync count as 0. %% %% This API can be called with temporary user credentials provided by Cognito %% Identity or with developer credentials. update_records(Client, DatasetName, IdentityId, IdentityPoolId, Input) -> update_records(Client, DatasetName, IdentityId, IdentityPoolId, Input, []). update_records(Client, DatasetName, IdentityId, IdentityPoolId, Input0, Options) -> Method = post, Path = ["/identitypools/", http_uri:encode(IdentityPoolId), "/identities/", http_uri:encode(IdentityId), "/datasets/", http_uri:encode(DatasetName), ""], SuccessStatusCode = 200, HeadersMapping = [ {"x-amz-Client-Context", "ClientContext"} ], {Headers, Input} = aws_request:build_headers(HeadersMapping, Input0), request(Client, Method, Path, Headers, Input, Options, SuccessStatusCode). %%==================================================================== %% Internal functions %%==================================================================== -spec request(aws_client:aws_client(), atom(), iolist(), list(), map() | undefined, list(), pos_integer() | undefined) -> {ok, Result, {integer(), list(), hackney:client()}} | {error, Error, {integer(), list(), hackney:client()}} | {error, term()} when Result :: map() | undefined, Error :: {binary(), binary()}. request(Client, Method, Path, Headers0, Input, Options, SuccessStatusCode) -> Client1 = Client#{service => <<"cognito-sync">>}, Host = get_host(<<"cognito-sync">>, Client1), URL = get_url(Host, Path, Client1), Headers1 = [ {<<"Host">>, Host}, {<<"Content-Type">>, <<"application/x-amz-json-1.1">>} | Headers0 ], Payload = encode_payload(Input), MethodBin = aws_request:method_to_binary(Method), SignedHeaders = aws_request:sign_request(Client1, MethodBin, URL, Headers1, Payload), Response = hackney:request(Method, URL, SignedHeaders, Payload, Options), handle_response(Response, SuccessStatusCode). handle_response({ok, StatusCode, ResponseHeaders, Client}, SuccessStatusCode) when StatusCode =:= 200; StatusCode =:= 202; StatusCode =:= 204; StatusCode =:= SuccessStatusCode -> case hackney:body(Client) of {ok, <<>>} when StatusCode =:= 200; StatusCode =:= SuccessStatusCode -> {ok, undefined, {StatusCode, ResponseHeaders, Client}}; {ok, Body} -> Result = jsx:decode(Body, [return_maps]), {ok, Result, {StatusCode, ResponseHeaders, Client}} end; handle_response({ok, StatusCode, ResponseHeaders, Client}, _) -> {ok, Body} = hackney:body(Client), Error = jsx:decode(Body, [return_maps]), Reason1 = maps:get(<<"message">>, Error, undefined), Reason2 = maps:get(<<"Message">>, Error, Reason1), {error, Reason2, {StatusCode, ResponseHeaders, Client}}; handle_response({error, Reason}, _) -> {error, Reason}. get_host(_EndpointPrefix, #{region := <<"local">>}) -> <<"localhost">>; get_host(EndpointPrefix, #{region := Region, endpoint := Endpoint}) -> aws_util:binary_join([EndpointPrefix, <<".">>, Region, <<".">>, Endpoint], <<"">>). get_url(Host, Path0, Client) -> Proto = maps:get(proto, Client), Path = erlang:iolist_to_binary(Path0), Port = maps:get(port, Client), aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, Path], <<"">>). -spec encode_payload(undefined | map()) -> binary(). encode_payload(undefined) -> <<>>; encode_payload(Input) -> jsx:encode(Input).