rstify-ask
Version:
Restify is a comprehensive npm package that streamlines and enhances the handling of HTTP requests in JavaScript applications.
516 lines (510 loc) • 22.6 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.RestifyHeaders = exports.RestifyError = exports.HttpStatusCode = exports.CanceledError = exports.CancelToken = exports.Cancel = void 0;
exports.formToJSON = formToJSON;
exports.getAdapter = getAdapter;
exports.isCancel = isCancel;
exports.isRestifyError = isRestifyError;
exports.mergeConfig = mergeConfig;
exports.spread = spread;
exports.toFormData = toFormData;
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
function _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _isNativeFunction(fn) { try { return Function.toString.call(fn).indexOf("[native code]") !== -1; } catch (e) { return typeof fn === "function"; } }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Cancel = exports.Cancel = /*#__PURE__*/_createClass(function Cancel(message) {
_classCallCheck(this, Cancel);
this.message = message;
});
var CancelToken = exports.CancelToken = /*#__PURE__*/function () {
function CancelToken(executor) {
var _this = this;
_classCallCheck(this, CancelToken);
var cancel;
this.promise = new Promise(function (resolve, reject) {
cancel = function cancel() {
reject(new Cancel('Operation canceled by the user.'));
};
executor(cancel);
});
this.throwIfRequested = function () {
if (_this.reason) {
throw _this.reason;
}
};
}
_createClass(CancelToken, null, [{
key: "source",
value: function source() {
var cancel;
var token = new CancelToken(function (c) {
cancel = c;
});
return {
token: token,
cancel: cancel
};
}
}]);
return CancelToken;
}();
var CanceledError = exports.CanceledError = /*#__PURE__*/function (_Error) {
_inherits(CanceledError, _Error);
function CanceledError(message) {
var _this2;
_classCallCheck(this, CanceledError);
_this2 = _callSuper(this, CanceledError, [message]);
_this2.name = 'CanceledError';
return _this2;
}
return _createClass(CanceledError);
}( /*#__PURE__*/_wrapNativeSuper(Error));
var RestifyError = exports.RestifyError = /*#__PURE__*/function (_Error2) {
_inherits(RestifyError, _Error2);
function RestifyError(message, config, code, request, response) {
var _this3;
_classCallCheck(this, RestifyError);
_this3 = _callSuper(this, RestifyError, [message]);
_this3.name = 'RestifyError';
_this3.config = config;
_this3.code = code;
_this3.request = request;
_this3.response = response;
return _this3;
}
return _createClass(RestifyError);
}( /*#__PURE__*/_wrapNativeSuper(Error));
var HttpStatusCode = exports.HttpStatusCode = /*#__PURE__*/_createClass(function HttpStatusCode() {
_classCallCheck(this, HttpStatusCode);
});
_defineProperty(HttpStatusCode, "OK", 200);
_defineProperty(HttpStatusCode, "CREATED", 201);
_defineProperty(HttpStatusCode, "ACCEPTED", 202);
_defineProperty(HttpStatusCode, "NO_CONTENT", 204);
_defineProperty(HttpStatusCode, "MOVED_PERMANENTLY", 301);
_defineProperty(HttpStatusCode, "FOUND", 302);
_defineProperty(HttpStatusCode, "SEE_OTHER", 303);
_defineProperty(HttpStatusCode, "NOT_MODIFIED", 304);
_defineProperty(HttpStatusCode, "TEMPORARY_REDIRECT", 307);
_defineProperty(HttpStatusCode, "PERMANENT_REDIRECT", 308);
_defineProperty(HttpStatusCode, "BAD_REQUEST", 400);
_defineProperty(HttpStatusCode, "UNAUTHORIZED", 401);
_defineProperty(HttpStatusCode, "FORBIDDEN", 403);
_defineProperty(HttpStatusCode, "NOT_FOUND", 404);
_defineProperty(HttpStatusCode, "METHOD_NOT_ALLOWED", 405);
_defineProperty(HttpStatusCode, "CONFLICT", 409);
_defineProperty(HttpStatusCode, "GONE", 410);
_defineProperty(HttpStatusCode, "PRECONDITION_FAILED", 412);
_defineProperty(HttpStatusCode, "UNPROCESSABLE_ENTITY", 422);
_defineProperty(HttpStatusCode, "INTERNAL_SERVER_ERROR", 500);
_defineProperty(HttpStatusCode, "NOT_IMPLEMENTED", 501);
_defineProperty(HttpStatusCode, "BAD_GATEWAY", 502);
_defineProperty(HttpStatusCode, "SERVICE_UNAVAILABLE", 503);
_defineProperty(HttpStatusCode, "GATEWAY_TIMEOUT", 504);
var RestifyHeaders = exports.RestifyHeaders = /*#__PURE__*/_createClass(function RestifyHeaders() {
_classCallCheck(this, RestifyHeaders);
});
// Common headers
_defineProperty(RestifyHeaders, "ACCEPT", 'Accept');
_defineProperty(RestifyHeaders, "ACCEPT_CHARSET", 'Accept-Charset');
_defineProperty(RestifyHeaders, "ACCEPT_ENCODING", 'Accept-Encoding');
_defineProperty(RestifyHeaders, "ACCEPT_LANGUAGE", 'Accept-Language');
_defineProperty(RestifyHeaders, "AUTHORIZATION", 'Authorization');
_defineProperty(RestifyHeaders, "CACHE_CONTROL", 'Cache-Control');
_defineProperty(RestifyHeaders, "CONTENT_TYPE", 'Content-Type');
_defineProperty(RestifyHeaders, "USER_AGENT", 'User-Agent');
// Content type headers
_defineProperty(RestifyHeaders, "CONTENT_TYPE_JSON", 'application/json');
_defineProperty(RestifyHeaders, "CONTENT_TYPE_FORM_URLENCODED", 'application/x-www-form-urlencoded');
_defineProperty(RestifyHeaders, "CONTENT_TYPE_XML", 'application/xml');
_defineProperty(RestifyHeaders, "CONTENT_TYPE_TEXT", 'text/plain');
_defineProperty(RestifyHeaders, "CONTENT_TYPE_HTML", 'text/html');
_defineProperty(RestifyHeaders, "CONTENT_TYPE_MULTIPART", 'multipart/form-data');
// Caching headers
_defineProperty(RestifyHeaders, "ETAG", 'ETag');
_defineProperty(RestifyHeaders, "IF_MATCH", 'If-Match');
_defineProperty(RestifyHeaders, "IF_NONE_MATCH", 'If-None-Match');
_defineProperty(RestifyHeaders, "IF_MODIFIED_SINCE", 'If-Modified-Since');
_defineProperty(RestifyHeaders, "IF_UNMODIFIED_SINCE", 'If-Unmodified-Since');
// Authentication headers
_defineProperty(RestifyHeaders, "WWW_AUTHENTICATE", 'WWW-Authenticate');
// CORS headers
_defineProperty(RestifyHeaders, "ACCESS_CONTROL_ALLOW_ORIGIN", 'Access-Control-Allow-Origin');
_defineProperty(RestifyHeaders, "ACCESS_CONTROL_ALLOW_METHODS", 'Access-Control-Allow-Methods');
_defineProperty(RestifyHeaders, "ACCESS_CONTROL_ALLOW_HEADERS", 'Access-Control-Allow-Headers');
_defineProperty(RestifyHeaders, "ACCESS_CONTROL_MAX_AGE", 'Access-Control-Max-Age');
_defineProperty(RestifyHeaders, "ACCESS_CONTROL_EXPOSE_HEADERS", 'Access-Control-Expose-Headers');
_defineProperty(RestifyHeaders, "ACCESS_CONTROL_ALLOW_CREDENTIALS", 'Access-Control-Allow-Credentials');
// Security headers
_defineProperty(RestifyHeaders, "STRICT_TRANSPORT_SECURITY", 'Strict-Transport-Security');
_defineProperty(RestifyHeaders, "CONTENT_SECURITY_POLICY", 'Content-Security-Policy');
_defineProperty(RestifyHeaders, "X_CONTENT_TYPE_OPTIONS", 'X-Content-Type-Options');
_defineProperty(RestifyHeaders, "X_FRAME_OPTIONS", 'X-Frame-Options');
_defineProperty(RestifyHeaders, "X_XSS_PROTECTION", 'X-XSS-Protection');
// Cookies and session headers
_defineProperty(RestifyHeaders, "SET_COOKIE", 'Set-Cookie');
_defineProperty(RestifyHeaders, "COOKIE", 'Cookie');
// Compression headers
_defineProperty(RestifyHeaders, "CONTENT_ENCODING", 'Content-Encoding');
_defineProperty(RestifyHeaders, "CONTENT_DECODING", 'Content-Decoding');
// Custom headers
_defineProperty(RestifyHeaders, "X_CUSTOM_HEADER", 'X-Custom-Header');
function isCancel(value) {
try {
return value instanceof Cancel;
} catch (error) {
console.log(error);
}
}
function isRestifyError(value) {
try {
return value instanceof RestifyError;
} catch (error) {
console.log(error);
}
}
function spread(callback) {
try {
return function wrap(arr) {
return callback.apply(null, arr);
};
} catch (error) {
console.log(error);
}
}
function toFormData(obj) {
try {
var formData = new FormData();
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
formData.append(key, obj[key]);
}
}
return formData;
} catch (error) {
console.log(error);
}
}
function formToJSON(formData) {
try {
var jsonObject = {};
formData === null || formData === void 0 || formData.forEach(function (value, key) {
// Check if the key already exists in the object
if (jsonObject.hasOwnProperty(key)) {
// If it's an array, push the new value
if (!Array.isArray(jsonObject[key])) {
jsonObject[key] = [jsonObject[key]];
}
jsonObject[key].push(value);
} else {
// If the key doesn't exist, create a new key-value pair
jsonObject[key] = value;
}
});
return JSON.stringify(jsonObject);
} catch (error) {
console.log(error);
}
}
function getAdapter(config) {
try {
// If running in a browser environment
if (typeof window !== 'undefined' && window.fetch) {
return function (resolve, reject) {
var method = config.method,
url = config.url,
headers = config.headers,
data = config.data,
cancelToken = config.cancelToken;
var options = {
method: method,
headers: _objectSpread(_objectSpread({}, headers), {}, {
'Content-Type': 'application/json'
}),
body: JSON.stringify(data)
};
if (cancelToken) {
cancelToken.promise.then(function (reason) {
reject(reason);
});
}
fetch(url, options).then(function (response) {
// Check if the response has a JSON content type
var contentType = response.headers.get('content-type');
var isJsonResponse = contentType && contentType.includes('application/json');
return isJsonResponse ? response.json() // Parse JSON response
: response.text(); // Otherwise, treat as text
}).then(function (responseData) {
// Resolve with parsed data
resolve({
status: responseData.status || 200,
data: responseData
});
})["catch"](function (error) {
// Enhance error logging
console.error('Fetch error:', error);
reject(error);
});
};
}
// If the environment is not recognized
throw new Error('Restify does not support the current environment');
} catch (error) {
console.log(error);
}
}
function mergeConfig(config1, config2) {
// Create a new object to hold the merged configuration
var mergedConfig = Object.assign({}, config1);
// Iterate through config2 and add or overwrite properties in mergedConfig
for (var key in config2) {
if (config2.hasOwnProperty(key)) {
// Special handling for headers, merging them instead of overwriting
if (key === 'headers' && config1.headers && _typeof(config1.headers) === 'object') {
mergedConfig.headers = Object.assign({}, config1.headers, config2.headers);
} else if (key === 'params' && config1.params && _typeof(config1.params) === 'object') {
// Merge params instead of overwriting
mergedConfig.params = Object.assign({}, config1.params, config2.params);
} else {
mergedConfig[key] = config2[key];
}
}
}
return mergedConfig;
}
function restify(config) {
try {
return new Promise(function (resolve, reject) {
var adapter = getAdapter(config);
var cancelToken = config.cancelToken;
if (cancelToken) {
cancelToken.promise.then(function (reason) {
reject(reason);
});
}
adapter(resolve, reject);
});
} catch (error) {
console.log(error);
}
}
var Restify = /*#__PURE__*/function () {
function Restify() {
_classCallCheck(this, Restify);
}
_createClass(Restify, null, [{
key: "request",
value: function request(config) {
return restify(config);
}
}, {
key: "get",
value: function get(url, config) {
return restify(mergeConfig(config, {
method: 'GET',
url: url
}));
}
}, {
key: "delete",
value: function _delete(url, config) {
return restify(mergeConfig(config, {
method: 'DELETE',
url: url
}));
}
}, {
key: "head",
value: function head(url, config) {
return restify(mergeConfig(config, {
method: 'HEAD',
url: url
}));
}
}, {
key: "options",
value: function options(url, config) {
return restify(mergeConfig(config, {
method: 'OPTIONS',
url: url
}));
}
}, {
key: "post",
value: function post(url, data, config) {
return restify(mergeConfig(config, {
method: 'POST',
url: url,
data: data
}));
}
}, {
key: "put",
value: function put(url, data, config) {
return restify(mergeConfig(config, {
method: 'PUT',
url: url,
data: data
}));
}
}, {
key: "patch",
value: function patch(url, data, config) {
return restify(mergeConfig(config, {
method: 'PATCH',
url: url,
data: data
}));
}
}, {
key: "postForm",
value: function postForm(url, data, config) {
var formData = toFormData(data);
return restify(mergeConfig(config, {
method: 'POST',
url: url,
data: formData
}));
}
}, {
key: "putForm",
value: function putForm(url, data, config) {
var formData = toFormData(data);
return restify(mergeConfig(config, {
method: 'PUT',
url: url,
data: formData
}));
}
}, {
key: "patchForm",
value: function patchForm(url, data, config) {
var formData = toFormData(data);
return restify(mergeConfig(config, {
method: 'PATCH',
url: url,
data: formData
}));
}
// Added a new method to handle dynamic authorization
}, {
key: "withAuthorization",
value: function withAuthorization(authorizationToken) {
return {
get: function get(url) {
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return Restify.get(url, mergeConfig(config, {
headers: {
Authorization: authorizationToken
}
}));
},
"delete": function _delete(url) {
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return Restify["delete"](url, mergeConfig(config, {
headers: {
Authorization: authorizationToken
}
}));
},
head: function head(url) {
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return Restify.head(url, mergeConfig(config, {
headers: {
Authorization: authorizationToken
}
}));
},
options: function options(url) {
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return Restify.options(url, mergeConfig(config, {
headers: {
Authorization: authorizationToken
}
}));
},
post: function post(url, data) {
var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
return Restify.post(url, data, mergeConfig(config, {
headers: {
Authorization: authorizationToken
}
}));
},
put: function put(url, data) {
var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
return Restify.put(url, data, mergeConfig(config, {
headers: {
Authorization: authorizationToken
}
}));
},
patch: function patch(url, data) {
var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
return Restify.patch(url, data, mergeConfig(config, {
headers: {
Authorization: authorizationToken
}
}));
},
postForm: function postForm(url, data) {
var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
return Restify.postForm(url, data, mergeConfig(config, {
headers: {
Authorization: authorizationToken
}
}));
},
putForm: function putForm(url, data) {
var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
return Restify.putForm(url, data, mergeConfig(config, {
headers: {
Authorization: authorizationToken
}
}));
},
patchForm: function patchForm(url, data) {
var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
return Restify.patchForm(url, data, mergeConfig(config, {
headers: {
Authorization: authorizationToken
}
}));
}
};
}
}]);
return Restify;
}(); // Exporting individual components
restify.Cancel = Cancel;
restify.CancelToken = CancelToken;
restify.CanceledError = CanceledError;
restify.RestifyError = RestifyError;
restify.HttpStatusCode = HttpStatusCode;
restify.RestifyHeaders = RestifyHeaders;
restify.isCancel = isCancel;
restify.isRestifyError = isRestifyError;
restify.spread = spread;
restify.toFormData = toFormData;
restify.formToJSON = formToJSON;
restify.getAdapter = getAdapter;
restify.mergeConfig = mergeConfig;
// Exporting individual components
var _default = exports["default"] = Restify;
;