Socket
Socket
Sign inDemoInstall

mappersmith

Package Overview
Dependencies
Maintainers
1
Versions
120
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mappersmith - npm Package Compare versions

Comparing version 2.26.1 to 2.27.0

72

client-builder.js

@@ -71,36 +71,56 @@ "use strict";

var gatewayConfigs = this.manifest.gatewayConfigs;
var requestPhaseExecutionFailed = false;
var requestPhaseFailureContext = {
middleware: null,
returnedInvalidRequest: false,
abortExecution: false
};
var chainRequestPhase = function chainRequestPhase(requestPromise, middleware) {
return requestPromise.then(function (request) {
return middleware.request(request);
}).catch(function (e) {
if (requestPhaseExecutionFailed) {
throw e;
}
var getInitialRequest = function getInitialRequest() {
return _this3.Promise.resolve(initialRequest);
};
requestPhaseExecutionFailed = true;
var error = new Error("[Mappersmith] middleware \"".concat(middleware.__name, "\" failed in the request phase: ").concat(e.message));
error.stack = e.stack;
throw error;
}).then(function (request) {
if (request instanceof _request.default) {
return request;
}
var chainRequestPhase = function chainRequestPhase(next, middleware) {
return function () {
var abort = function abort(error) {
requestPhaseFailureContext.abortExecution = true;
throw error;
};
requestPhaseExecutionFailed = true;
return _this3.Promise.resolve().then(function () {
return middleware.prepareRequest(next, abort);
}).then(function (request) {
if (request instanceof _request.default) {
return request;
}
var typeValue = _typeof(request);
requestPhaseFailureContext.returnedInvalidRequest = true;
var prettyType = typeValue === 'object' || typeValue === 'function' ? request.name || typeValue : typeValue;
throw new Error("[Mappersmith] middleware \"".concat(middleware.__name, "\" should return \"Request\" but returned \"").concat(prettyType, "\""));
}).then(function (request) {
return _this3.Promise.resolve(request);
});
var typeValue = _typeof(request);
var prettyType = typeValue === 'object' || typeValue === 'function' ? request.name || typeValue : typeValue;
throw new Error("[Mappersmith] middleware \"".concat(middleware.__name, "\" should return \"Request\" but returned \"").concat(prettyType, "\""));
}).catch(function (e) {
requestPhaseFailureContext.middleware = middleware.__name;
throw e;
});
};
};
var prepareRequest = middleware.reduce(chainRequestPhase, getInitialRequest);
var executions = 0;
var executeMiddlewareStack = function executeMiddlewareStack() {
return middleware.reduce(chainRequestPhase, _this3.Promise.resolve(initialRequest)).then(function (finalRequest) {
return prepareRequest().catch(function (e) {
var returnedInvalidRequest = requestPhaseFailureContext.returnedInvalidRequest,
abortExecution = requestPhaseFailureContext.abortExecution,
middleware = requestPhaseFailureContext.middleware;
if (returnedInvalidRequest || abortExecution) {
throw e;
}
var error = new Error("[Mappersmith] middleware \"".concat(middleware, "\" failed in the request phase: ").concat(e.message));
error.stack = e.stack;
throw error;
}).then(function (finalRequest) {
executions++;

@@ -112,5 +132,7 @@

var renew = executeMiddlewareStack;
var chainResponsePhase = function chainResponsePhase(next, middleware) {
return function () {
return middleware.response(next, executeMiddlewareStack);
return middleware.response(next, renew);
};

@@ -117,0 +139,0 @@ };

@@ -38,3 +38,9 @@ "use strict";

callMock: function callMock(httpMethod) {
this.dispatchResponse((0, _test.lookupResponse)(this.request));
var _this = this;
return (0, _test.lookupResponseAsync)(this.request).then(function (request) {
return _this.dispatchResponse(request);
}).catch(function (e) {
return _this.dispatchClientError(e.message, e);
});
}

@@ -41,0 +47,0 @@ });

@@ -109,7 +109,16 @@ "use strict";

__name: middlewareFactory.name || middlewareFactory.toString(),
request: function request(_request) {
return _request;
},
response: function response(next) {
return next();
},
/**
* @since 2.27.0
* Replaced the request method
*/
prepareRequest: function prepareRequest(next) {
var _this3 = this;
return this.request ? next().then(function (req) {
return _this3.request(req);
}) : next();
}

@@ -116,0 +125,0 @@ }, middlewareFactory((0, _utils.assign)(args, {

@@ -16,3 +16,3 @@ "use strict";

/* global VERSION */
var version = "2.26.1";
var version = "2.27.0";
exports.version = version;

@@ -19,0 +19,0 @@ var configs = {

@@ -26,9 +26,10 @@ "use strict";

return {
request: function request(_request) {
var auth = _request.auth();
return !auth // Keep the override
? _request.enhance({
auth: (0, _utils.assign)({}, authConfig)
}) : _request;
prepareRequest: function prepareRequest(next) {
return next().then(function (request) {
var auth = request.auth();
return !auth // Keep the override
? request.enhance({
auth: (0, _utils.assign)({}, authConfig)
}) : request;
});
}

@@ -35,0 +36,0 @@ };

@@ -25,10 +25,12 @@ "use strict";

return {
request: function request(_request) {
if (typeof document === 'undefined') {
return _request;
}
prepareRequest: function prepareRequest(next) {
return next().then(function (request) {
if (typeof document === 'undefined') {
return request;
}
var csrf = getCookie();
return !csrf ? _request : _request.enhance({
headers: _defineProperty({}, headerName, csrf)
var csrf = getCookie();
return !csrf ? request : request.enhance({
headers: _defineProperty({}, headerName, csrf)
});
});

@@ -35,0 +37,0 @@ }

@@ -13,7 +13,9 @@ "use strict";

return {
request: function request(_request) {
return _request.enhance({
headers: {
'X-Started-At': Date.now()
}
prepareRequest: function prepareRequest(next) {
return next().then(function (request) {
return request.enhance({
headers: {
'X-Started-At': Date.now()
}
});
});

@@ -20,0 +22,0 @@ },

@@ -21,15 +21,17 @@ "use strict";

return {
request: function request(_request) {
try {
if (_request.body()) {
return _request.enhance({
headers: {
'content-type': CONTENT_TYPE_JSON
},
body: JSON.stringify(_request.body())
});
}
} catch (e) {}
prepareRequest: function prepareRequest(next) {
return next().then(function (request) {
try {
if (request.body()) {
return request.enhance({
headers: {
'content-type': CONTENT_TYPE_JSON
},
body: JSON.stringify(request.body())
});
}
} catch (e) {}
return _request;
return request;
});
}

@@ -36,0 +38,0 @@ };

@@ -63,4 +63,6 @@ "use strict";

return {
request: function request(_request) {
return log(_request);
prepareRequest: function prepareRequest(next) {
return next().then(function (request) {
return log(request);
});
},

@@ -67,0 +69,0 @@ response: function response(next) {

@@ -23,9 +23,10 @@ "use strict";

return {
request: function request(_request) {
var timeout = _request.timeout();
return !timeout // Keep the override
? _request.enhance({
timeout: timeoutValue
}) : _request;
prepareRequest: function prepareRequest(next) {
return next().then(function (request) {
var timeout = request.timeout();
return !timeout // Keep the override
? request.enhance({
timeout: timeoutValue
}) : request;
});
}

@@ -32,0 +33,0 @@ };

@@ -41,2 +41,3 @@ "use strict";

this.asyncFinalRequest = null;
this.pendingMiddlewareExecution = true;
}

@@ -111,2 +112,3 @@

_this.asyncFinalRequest = finalRequest;
_this.pendingMiddlewareExecution = false;
return _this.toMockRequest().assertObject();

@@ -120,2 +122,4 @@ });

assertObject: function assertObject() {
// The middleware "prepareRequest" phase is always async, so the middleware
// stack will never run when assertObject is used
return this.toMockRequest().assertObject();

@@ -128,4 +132,2 @@ },

toMockRequest: function toMockRequest() {
var _this2 = this;
var finalRequest = this.asyncFinalRequest ? this.asyncFinalRequest : this.createRequest();

@@ -137,20 +139,5 @@ var assertObject = this.mockRequest ? this.mockRequest.assertObject() : new _mockAssert.default([]);

if (!this.mockRequest) {
var params = finalRequest.params();
var hasParamMatchers = Object.keys(params).find(function (key) {
return typeof params[key] === 'function';
});
var urlMatcher = function urlMatcher(requestUrl, requestParams) {
var expandedParams = _this2.expandParams(params, requestParams);
var testRequest = finalRequest.enhance({
params: expandedParams
});
return testRequest.url() === requestUrl;
};
var url = hasParamMatchers ? urlMatcher : finalRequest.url();
this.mockRequest = new _mockRequest.default(this.id, {
method: finalRequest.method(),
url: url,
url: this.generateUrlMatcher(finalRequest),
body: finalRequest.body(),

@@ -173,2 +160,43 @@ response: {

*/
generateUrlMatcher: function generateUrlMatcher(finalRequest) {
var _this2 = this;
var params = finalRequest.params();
var hasParamMatchers = Object.keys(params).find(function (key) {
return typeof params[key] === 'function';
});
var urlMatcher = function urlMatcher(requestUrl, requestParams) {
var expandedParams = _this2.expandParams(params, requestParams);
var testRequest = finalRequest.enhance({
params: expandedParams
});
return testRequest.url() === requestUrl;
};
return hasParamMatchers ? urlMatcher : finalRequest.url();
},
/**
* @private
*/
executeMiddlewareStack: function executeMiddlewareStack() {
var _this3 = this;
return this.createAsyncRequest().then(function (finalRequest) {
_this3.asyncFinalRequest = finalRequest;
if (_this3.mockRequest) {
var urlMatcher = _this3.generateUrlMatcher(finalRequest);
_this3.mockRequest.url = urlMatcher;
_this3.pendingMiddlewareExecution = false;
}
});
},
/**
* @private
*/
expandParams: function expandParams(mockParams, requestParams) {

@@ -215,7 +243,19 @@ return Object.keys(mockParams).reduce(function (obj, key) {

});
return middleware.reduce(function (requestPromise, middleware) {
return requestPromise.then(function (request) {
return middleware.request(request);
});
}, _mappersmith.configs.Promise.resolve(initialRequest));
var abort = function abort(error) {
throw error;
};
var getInitialRequest = function getInitialRequest() {
return _mappersmith.configs.Promise.resolve(initialRequest);
};
var prepareRequest = middleware.reduce(function (next, middleware) {
return function () {
return _mappersmith.configs.Promise.resolve().then(function () {
return middleware.prepareRequest(next, abort);
});
};
}, getInitialRequest);
return prepareRequest();
}

@@ -222,0 +262,0 @@ };

{
"name": "mappersmith",
"version": "2.26.1",
"version": "2.27.0",
"description": "It is a lightweight rest client for node.js and the browser",

@@ -5,0 +5,0 @@ "author": "Tulio Ornelas <ornelas.tulio@gmail.com>",

@@ -350,2 +350,4 @@ [![npm version](https://badge.fury.io/js/mappersmith.svg)](http://badge.fury.io/js/mappersmith)

__NOTE__: Since version `2.27.0` a new method was introduced: `prepareRequest`. This method aims to replace the `request` method in future versions of mappersmith, it has a similar signature as the `response` method and it is always async. All previous middleware are backward compatible, the default implementation of `prepareRequest` will call the `request` method if it exists. The `prepareRequest` method receives a function which returns a `Promise` resolving the [Request](https://github.com/tulios/mappersmith/blob/master/src/request.js). This function must return a `Promise` resolving the request. The method `enhance` can be used to generate a new request based on the previous one.
The `response` method receives a function which returns a `Promise` resolving the [Response](https://github.com/tulios/mappersmith/blob/master/src/response.js). This function must return a `Promise` resolving the Response. The method `enhance` can be used to generate a new response based on the previous one.

@@ -373,2 +375,20 @@

__NOTE:__ If you are running mappersmith `2.27.0` or greater use the following instead:
```javascript
const MyMiddleware = () => ({
prepareRequest(next) {
return next().then(request => request.enhance({
headers: { 'x-special-request': '->' }
}))
},
response(next) {
return next().then((response) => response.enhance({
headers: { 'x-special-response': '<-' }
}))
}
})
```
The middleware can be configured using the key `middleware` in the manifest, example:

@@ -417,3 +437,21 @@

The response phase can optionally receive a function called "renew". This function can be used to rerun the
__NOTE 2__: If you are using mappersmith `2.27.0` or greater take a look at `prepareRequest`, which is always async.
The `prepareRequest` phase can optionally receive a function called "abort". This function can be used to abort the middleware execution early-on and throw a custom error to the user.
Example:
```javascript
const MyMiddleware = () => {
prepareRequest(next, abort) {
return next().then(request =>
request.header('x-special')
? response
: abort(new Error('"x-special" must be set!'))
)
}
}
```
The `response` phase can optionally receive a function called "renew". This function can be used to rerun the
middleware stack. This feature is useful in some scenarios, for example, automatically refreshing an expired access token.

@@ -420,0 +458,0 @@ Example:

@@ -6,3 +6,3 @@ "use strict";

});
exports.m = exports.lookupResponse = exports.clear = exports.uninstall = exports.install = exports.mockRequest = exports.mockClient = void 0;
exports.m = exports.lookupResponse = exports.lookupResponseAsync = exports.clear = exports.uninstall = exports.install = exports.mockRequest = exports.mockClient = void 0;

@@ -21,2 +21,6 @@ var _mockRequest = _interopRequireDefault(require("./mocks/mock-request"));

function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
var store = [];

@@ -97,4 +101,7 @@ var ids = 1;

/**
* Similar to "lookupResponse" but it also runs the request/prepareRequest phase of the middleware
* stack
*
* @param {Request} request
* @return {Response}
* @return {Promise<Response>}
* @throws Will throw an error if it doesn't find a mock to match the given request

@@ -106,2 +113,66 @@ */

var lookupResponseAsync =
/*#__PURE__*/
function () {
var _ref = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee2(request) {
var mocksPendingMiddlewareExecution;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
mocksPendingMiddlewareExecution = store.filter(function (mock) {
return mock.pendingMiddlewareExecution;
});
_context2.next = 3;
return _index.configs.Promise.all(mocksPendingMiddlewareExecution.map(
/*#__PURE__*/
function () {
var _ref2 = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee(mock) {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
return _context.abrupt("return", mock.executeMiddlewareStack());
case 1:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function (_x2) {
return _ref2.apply(this, arguments);
};
}()));
case 3:
return _context2.abrupt("return", lookupResponse(request));
case 4:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
return function lookupResponseAsync(_x) {
return _ref.apply(this, arguments);
};
}();
/**
* @param {Request} request
* @return {Response}
* @throws Will throw an error if it doesn't find a mock to match the given request
*/
exports.lookupResponseAsync = lookupResponseAsync;
var lookupResponse = function lookupResponse(request) {

@@ -108,0 +179,0 @@ var mocks = store.map(function (mock) {

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc