-// { arguments, errorMessage }
-function retryTransactionWrapper (functionToRetry, options, finalCallback) {
- const args = options.arguments ? options.arguments : []
+function retryTransactionWrapper <T, A> (
+ functionToRetry: (arg1: A) => Promise<T> | Bluebird<T>,
+ arg1: A
+): Promise<T>
+
+function retryTransactionWrapper <T> (
+ functionToRetry: () => Promise<T> | Bluebird<T>
+): Promise<T>
+
+function retryTransactionWrapper <T> (
+ functionToRetry: (...args: any[]) => Promise<T> | Bluebird<T>,
+ ...args: any[]
+): Promise<T> {
+ return transactionRetryer<T>(callback => {
+ functionToRetry.apply(null, args)
+ .then((result: T) => callback(null, result))
+ .catch(err => callback(err))
+ })
+ .catch(err => {
+ logger.error(`Cannot execute ${functionToRetry.name} with many retries.`, { err })
+ throw err
+ })
+}