wretch
Version:
A tiny wrapper built around fetch with an intuitive syntax.
46 lines • 1.46 kB
JavaScript
function utf8ToBase64(input) {
const utf8Bytes = new TextEncoder().encode(input);
return btoa(String.fromCharCode(...utf8Bytes));
}
const makeBasicAuthMiddleware = () => next => (url, opts) => {
let parsedUrl;
try {
parsedUrl = new URL(url);
}
catch (_a) {
parsedUrl = null;
}
if ((parsedUrl === null || parsedUrl === void 0 ? void 0 : parsedUrl.username) || (parsedUrl === null || parsedUrl === void 0 ? void 0 : parsedUrl.password)) {
const basicAuthBase64 = utf8ToBase64(`${decodeURIComponent(parsedUrl.username)}:${decodeURIComponent(parsedUrl.password)}`);
opts.headers = {
...opts.headers,
Authorization: `Basic ${basicAuthBase64}`,
};
parsedUrl.username = "";
parsedUrl.password = "";
url = parsedUrl.toString();
}
return next(url, opts);
};
/**
* Adds the ability to use basic auth with the `Authorization` header.
*
* ```js
* import BasicAuthAddon from "wretch/addons/basicAuth"
*
* wretch().addon(BasicAuthAddon)
* ```
*/
const basicAuth = {
beforeRequest(wretch) {
return wretch.middlewares([makeBasicAuthMiddleware()]);
},
wretch: {
basicAuth(username, password) {
const basicAuthBase64 = utf8ToBase64(`${username}:${password}`);
return this.auth(`Basic ${basicAuthBase64}`);
},
},
};
export default basicAuth;
//# sourceMappingURL=basicAuth.js.map