diff --git a/request-promise/request-promise-tests.ts b/request-promise/request-promise-tests.ts
index 8c7840ad41..28596f18d4 100644
--- a/request-promise/request-promise-tests.ts
+++ b/request-promise/request-promise-tests.ts
@@ -1,13 +1,13 @@
///
import rp = require('request-promise');
-import nodeRequest = require('request');
+import errors = require('request-promise/errors');
rp('http://www.google.com')
.then(console.dir)
.catch(console.error);
-var options: nodeRequest.Options = {
+var options: rp.Options = {
uri : 'http://posttestserver.com/post.php',
method : 'POST',
json: true,
@@ -18,7 +18,39 @@ rp(options)
.then(console.dir)
.catch(console.error);
-// --> Displays length of response from server after post
+rp('http://google.com').finally(() => {});
+
+// This works:
+rp('http://google.com').then(console.dir);
+rp('http://google.com').catch(console.error);
+rp('http://google.com').then(console.dir, console.error);
+
+// This works as well since additional methods are only used AFTER the FIRST call in the chain:
+rp('http://google.com').then(console.dir).spread(console.dir);
+rp('http://google.com').catch(console.error).error(console.error);
+
+// Use .promise() in these cases:
+rp('http://google.com').promise().bind(this).then(console.dir);
+
+rp({ uri: 'http://google.com', resolveWithFullResponse: true }).then((response) => {});
+rp({ uri: 'http://google.com', simple: false }).catch((reason) => {});
+
+rp({
+ uri: 'http://google.com',
+ transform: (body: any, response: http.IncomingMessage, resolveWithFullResponse: boolean): any => {
+ throw new Error('Transform failed!');
+ }
+}).catch(errors.StatusCodeError, (reason: errors.StatusCodeError) => {
+ // The server responded with a status codes other than 2xx.
+ // Check reason.statusCode
+}).catch(errors.RequestError, (reason: errors.RequestError) => {
+ // The request failed due to technical reasons.
+ // reason.cause is the Error object Request would pass into a callback.
+}).catch(errors.TransformError, (reason: errors.TransformError) => {
+ console.log(reason.cause.message); // => Transform failed!
+ // reason.response is the original response for which the transform operation failed
+});
+
//Defaults tests
(() => {
@@ -46,7 +78,7 @@ rp(options)
console.log("DELETE succeeded with status %d", response.statusCode);
})
.catch(console.error);
-
+
//The following examples from https://github.com/request/request
import fs = require('fs');
import http = require('http');
@@ -71,14 +103,14 @@ request
console.log(response.headers['content-type']); // 'image/png'
})
.pipe(request.put('http://mysite.com/img.png'));
-
+
request
.get('http://mysite.com/doodle.png')
.on('error', function(err: any) {
console.log(err);
})
.pipe(fs.createWriteStream('doodle.png'));
-
+
http.createServer(function (req, resp) {
if (req.url === '/doodle.png') {
if (req.method === 'PUT') {
@@ -98,7 +130,7 @@ http.createServer(function (req, resp) {
});
var resp: http.ServerResponse;
-var req: nodeRequest.Request;
+var req: rp.RequestPromise;
req.pipe(request('http://mysite.com/doodle.png')).pipe(resp);
var r = request;
@@ -192,7 +224,7 @@ request({
}
console.log('Upload successful! Server responded with:', body);
});
-
+
request.get('http://some.server.com/').auth('username', 'password', false);
// or
request.get('http://some.server.com/', {
@@ -282,8 +314,8 @@ request.post({url:url, oauth:oauth}, function (e, r, body) {
, token_secret: perm_data.oauth_token_secret
};
var url = 'https://api.twitter.com/1.1/users/show.json';
- var query = {
- screen_name: perm_data.screen_name,
+ var query = {
+ screen_name: perm_data.screen_name,
user_id: perm_data.user_id
};
request.get({url:url, oauth:oauth, qs:query, json:true}, function (e, r, user) {
@@ -370,7 +402,7 @@ request({
}
}
});
-
+
//requests using baseRequest() will set the 'x-token' header
var baseRequest = request.defaults({
headers: {'x-token': 'my-token'}
@@ -420,7 +452,7 @@ var rand = Math.floor(Math.random()*100000000).toString();
}
}
);
-
+
request(
{ method: 'GET'
, uri: 'http://www.google.com'
@@ -442,7 +474,7 @@ request(
console.log('received ' + data.length + ' bytes of compressed data')
})
});
-
+
var requestWithJar = request.defaults({jar: true})
requestWithJar('http://www.google.com', function () {
requestWithJar('http://images.google.com');
diff --git a/request-promise/request-promise.d.ts b/request-promise/request-promise.d.ts
index 7c96689f56..a9d6cae855 100644
--- a/request-promise/request-promise.d.ts
+++ b/request-promise/request-promise.d.ts
@@ -1,33 +1,84 @@
-// Type definitions for request-promise v0.4.2
-// Project: https://www.npmjs.com/package/request-promise
-// Definitions by: Christopher Glantschnig , Joe Skeen
+// Type definitions for request-promise v3.0.0
+// Project: https://github.com/request/request-promise
+// Definitions by: Christopher Glantschnig , Joe Skeen , Aya Morisawa
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
-// Change [0]: 2015/08/20 - Aya Morisawa
-
///
///
declare module 'request-promise' {
import request = require('request');
import http = require('http');
-
- interface RequestPromise extends request.Request {
- then(onfulfilled?: (value: any) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise;
- then(onfulfilled?: (value: any) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise;
- catch(onrejected?: (reason: any) => any | PromiseLike): Promise;
- catch(onrejected?: (reason: any) => void): Promise;
- finally(handler: () => PromiseLike): Promise;
- finally(handler: () => TResult): Promise;
- promise(): Promise;
+ import errors = require('request-promise/errors');
+
+ namespace requestPromise {
+ interface RequestPromise extends request.Request {
+ then(onfulfilled?: (value: any) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise;
+ then(onfulfilled?: (value: any) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise;
+ catch(onrejected?: (reason: any) => any | PromiseLike): Promise;
+ catch(onrejected?: (reason: any) => void): Promise;
+ catch(type: errors.RequestErrorConstructor, onrejected?: (reason: errors.RequestError) => void): Promise;
+ catch(type: errors.StatusCodeErrorConstructor, onrejected?: (reason: errors.StatusCodeError) => void): Promise;
+ catch(type: errors.TransformErrorConstructor, onrejected?: (reason: errors.TransformError) => void): Promise;
+ finally(handler: () => PromiseLike): Promise;
+ finally(handler: () => TResult): Promise;
+ promise(): Promise;
+ }
+
+ interface RequestPromiseOptions extends request.CoreOptions {
+ simple?: boolean;
+ transform?: (body: any, response: http.IncomingMessage, resolveWithFullResponse?: boolean) => any;
+ resolveWithFullResponse?: boolean;
+ }
+
+ export type OptionsWithUri = request.UriOptions & RequestPromiseOptions;
+ export type OptionsWithUrl = request.UrlOptions & RequestPromiseOptions;
+ export type Options = OptionsWithUri | OptionsWithUrl;
}
-
- interface RequestPromiseOptions extends request.CoreOptions {
- simple?: boolean;
- transform?: (body: any, response: http.IncomingMessage) => any;
- resolveWithFullResponse?: boolean;
- }
-
- var requestPromise: request.RequestAPI;
+
+ var requestPromise: request.RequestAPI;
export = requestPromise;
}
+declare module 'request-promise/errors' {
+ import rp = require('request-promise');
+ import http = require('http');
+
+ export interface RequestError extends Error {
+ cause: any;
+ error: any;
+ options: rp.Options;
+ response: http.IncomingMessage;
+ }
+ export interface RequestErrorConstructor {
+ new (cause: any, options: rp.Options, response: http.IncomingMessage): RequestError;
+ (cause: any, options: rp.Options, response: http.IncomingMessage): RequestError;
+ prototype: RequestError;
+ }
+ export const RequestError: RequestErrorConstructor;
+
+ export interface StatusCodeError extends Error {
+ statusCode: number;
+ error: any;
+ options: rp.Options;
+ response: http.IncomingMessage;
+ }
+ export interface StatusCodeErrorConstructor extends Error {
+ new (statusCode: number, body: any, options: rp.Options, response: http.IncomingMessage): StatusCodeError;
+ (statusCode: number, body: any, options: rp.Options, response: http.IncomingMessage): StatusCodeError;
+ prototype: StatusCodeError;
+ }
+ export const StatusCodeError: StatusCodeErrorConstructor;
+
+ export interface TransformError extends Error {
+ cause: any;
+ error: any;
+ options: rp.Options;
+ response: http.IncomingMessage;
+ }
+ export interface TransformErrorConstructor extends Error {
+ new (cause: any, options: rp.Options, response: http.IncomingMessage): TransformError;
+ (cause: any, options: rp.Options, response: http.IncomingMessage): TransformError;
+ prototype: TransformError;
+ }
+ export const TransformError: TransformErrorConstructor;
+}