@botocrat/telegram
Version:
Simple, light-weight Telegram Bot Client for Node.js.
47 lines (42 loc) • 1.34 kB
JavaScript
const FormData = require('form-data')
const { handleError, catchTelegramError, catchException } = require('./error')
const handleResponse = (request, debug) =>
(...params) =>
request(...params)
.then((e) => e.result)
.catch((err) =>
err.json
? err.json().then(catchTelegramError(params))
: catchException(err, params)
)
.catch(handleError(debug))
const handleFormData = (request, interceptor) =>
(method, params, formData = false) => {
// client can be interfered by defining interceptor callback.
if (interceptor) {
const result = interceptor(method, params, formData)
if(result instanceof Promise) return result
}
if (formData) {
const form = new FormData()
Object.entries(params).forEach((i) => form.append(i[0], i[1]))
return request(method, form, form.getHeaders())
}
return request(method, params)
}
const attachInterceptor = (interceptor, next) =>
interceptor
? (...params) => {
const handle = interceptor(...params)
return handle instanceof Promise
? handle
: next(...params)
}
: next
module.exports = (url, debug, interceptor) =>
attachInterceptor(
interceptor,
handleResponse(
handleFormData( require('bent')(url, 'json', 'POST') ),
debug)
)