#ifndef __indy__wallet__included__
#define __indy__wallet__included__
#ifdef __cplusplus
extern "C" {
#endif
/// Registers custom wallet implementation.
///
/// It allows library user to provide custom wallet implementation.
///
/// #Params
/// command_handle: Command handle to map callback to caller context.
/// xtype: Wallet type name.
/// create: WalletType create operation handler
/// open: WalletType open operation handler
/// set: Wallet set operation handler
/// get: Wallet get operation handler
/// get_not_expired: Wallet get_not_expired operation handler
/// list: Wallet list operation handler
/// close: Wallet close operation handler
/// delete: WalletType delete operation handler
/// free: Handler that allows to de-allocate strings allocated in caller code
///
/// #Returns
/// Error code
extern indy_error_t indy_register_wallet_type(indy_handle_t command_handle,
const char* xtype,
indy_error_t (*createFn)(const char* name,
const char* config,
const char* credentials),
indy_error_t (*openFn)(const char* name,
const char* config,
const char* runtime_config,
const char* credentials,
indy_handle_t* handle),
indy_error_t (*setFn)(indy_handle_t handle,
const char* key,
const char* value),
indy_error_t (*getFn)(indy_handle_t handle,
const char* key,
const char *const *value_ptr),
indy_error_t (*getNotExiredFn)(indy_handle_t handle,
const char* key,
const char *const *value_ptr),
indy_error_t (*listFn)(indy_handle_t handle,
const char* key,
const char *const *values_json_ptr),
indy_error_t (*closeFn)(indy_handle_t handle),
indy_error_t (*deleteFn)(const char* name,
const char* config,
const char* credentials),
indy_error_t (*freeFn)(indy_handle_t handle, const char* str)
);
/// Creates a new secure wallet with the given unique name.
///
/// #Params
/// pool_name: Name of the pool that corresponds to this wallet.
/// name: Name of the wallet.
/// xtype(optional): Type of the wallet. Defaults to 'default'.
/// Custom types can be registered with indy_register_wallet_type call.
/// config(optional): Wallet configuration json. List of supported keys are defined by wallet type.
/// if NULL, then default config will be used.
/// credentials(optional): Wallet credentials json. List of supported keys are defined by wallet type.
/// if NULL, then default config will be used.
///
/// #Returns
/// Error code
///
/// #Errors
/// Common*
/// Wallet*
extern indy_error_t indy_create_wallet(indy_handle_t command_handle,
const char* pool_name,
const char* name,
const char* xtype,
const char* config,
const char* credentials,
void (*fn)(indy_handle_t xcommand_handle, indy_error_t err)
);
/// Opens the wallet with specific name.
///
/// Wallet with corresponded name must be previously created with indy_create_wallet method.
/// It is impossible to open wallet with the same name more than once.
///
/// #Params
/// name: Name of the wallet.
/// runtime_config (optional): Runtime wallet configuration json. if NULL, then default runtime_config will be used. Example:
/// {
/// "freshnessTime": string (optional), Amount of minutes to consider wallet value as fresh. Defaults to 24*60.
/// ... List of additional supported keys are defined by wallet type.
/// }
/// credentials(optional): Wallet credentials json. List of supported keys are defined by wallet type.
/// if NULL, then default credentials will be used.
///
/// #Returns
/// Handle to opened wallet to use in methods that require wallet access.
///
/// #Errors
/// Common*
/// Wallet*
extern indy_error_t indy_open_wallet(indy_handle_t command_handle,
const char* name,
const char* runtime_config,
const char* credentials,
void (*fn)(indy_handle_t xcommand_handle, indy_error_t err, indy_handle_t handle)
);
/// Closes opened wallet and frees allocated resources.
///
/// #Params
/// handle: wallet handle returned by indy_open_wallet.
///
/// #Returns
/// Error code
///
/// #Errors
/// Common*
/// Wallet*
extern indy_error_t indy_close_wallet(indy_handle_t command_handle,
indy_handle_t handle,
void (*fn)(indy_handle_t xcommand_handle, indy_error_t err)
);
/// Deletes created wallet.
///
/// #Params
/// name: Name of the wallet to delete.
/// credentials(optional): Wallet credentials json. List of supported keys are defined by wallet type.
/// if NULL, then default credentials will be used.
///
/// #Returns
/// Error code
///
/// #Errors
/// Common*
/// Wallet*
extern indy_error_t indy_delete_wallet(indy_handle_t command_handle,
const char* name,
const char* credentials,
void (*fn)(indy_handle_t xcommand_handle, indy_error_t err)
);
#ifdef __cplusplus
}
#endif
#endif