-import replay = require('request-replay')
-import request = require('request')
+import * as replay from 'request-replay'
+import * as request from 'request'
+import * as Promise from 'bluebird'
import {
RETRY_REQUESTS,
REMOTE_SCHEME,
CONFIG
} from '../initializers'
+import { PodInstance } from '../models'
+import { PodSignature } from '../../shared'
import { sign } from './peertube-crypto'
-function makeRetryRequest (params, callback) {
- replay(
- request(params, callback),
- {
- retries: RETRY_REQUESTS,
- factor: 3,
- maxTimeout: Infinity,
- errorCodes: [ 'EADDRINFO', 'ETIMEDOUT', 'ECONNRESET', 'ESOCKETTIMEDOUT', 'ENOTFOUND', 'ECONNREFUSED' ]
- }
- )
+type MakeRetryRequestParams = {
+ url: string,
+ method: 'GET'|'POST',
+ json: Object
+}
+function makeRetryRequest (params: MakeRetryRequestParams) {
+ return new Promise<{ response: request.RequestResponse, body: any }>((res, rej) => {
+ replay(
+ request(params, (err, response, body) => err ? rej(err) : res({ response, body })),
+ {
+ retries: RETRY_REQUESTS,
+ factor: 3,
+ maxTimeout: Infinity,
+ errorCodes: [ 'EADDRINFO', 'ETIMEDOUT', 'ECONNRESET', 'ESOCKETTIMEDOUT', 'ENOTFOUND', 'ECONNREFUSED' ]
+ }
+ )
+ })
}
-function makeSecureRequest (params, callback) {
- const requestParams = {
- url: REMOTE_SCHEME.HTTP + '://' + params.toPod.host + params.path,
- json: {}
- }
+type MakeSecureRequestParams = {
+ method: 'GET'|'POST'
+ toPod: PodInstance
+ path: string
+ data?: Object
+}
+function makeSecureRequest (params: MakeSecureRequestParams) {
+ return new Promise<{ response: request.RequestResponse, body: any }>((res, rej) => {
+ const requestParams: {
+ url: string,
+ json: {
+ signature: PodSignature,
+ data: any
+ }
+ } = {
+ url: REMOTE_SCHEME.HTTP + '://' + params.toPod.host + params.path,
+ json: {
+ signature: null,
+ data: null
+ }
+ }
- if (params.method !== 'POST') {
- return callback(new Error('Cannot make a secure request with a non POST method.'))
- }
+ if (params.method !== 'POST') {
+ return rej(new Error('Cannot make a secure request with a non POST method.'))
+ }
- // Add signature if it is specified in the params
- if (params.sign === true) {
const host = CONFIG.WEBSERVER.HOST
let dataToSign
dataToSign = host
}
- requestParams.json['signature'] = {
- host, // Which host we pretend to be
- signature: sign(dataToSign)
- }
- }
+ sign(dataToSign).then(signature => {
+ requestParams.json.signature = {
+ host, // Which host we pretend to be
+ signature
+ }
- // If there are data informations
- if (params.data) {
- requestParams.json['data'] = params.data
- }
+ // If there are data informations
+ if (params.data) {
+ requestParams.json.data = params.data
+ }
- request.post(requestParams, callback)
+ request.post(requestParams, (err, response, body) => err ? rej(err) : res({ response, body }))
+ })
+ })
}
// ---------------------------------------------------------------------------