1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import { assert, makeError } from "./errors.js";
- export function createGetUrl(options) {
- async function getUrl(req, _signal) {
- assert(_signal == null || !_signal.cancelled, "request cancelled before sending", "CANCELLED");
- const protocol = req.url.split(":")[0].toLowerCase();
- assert(protocol === "http" || protocol === "https", `unsupported protocol ${protocol}`, "UNSUPPORTED_OPERATION", {
- info: { protocol },
- operation: "request"
- });
- assert(protocol === "https" || !req.credentials || req.allowInsecureAuthentication, "insecure authorized connections unsupported", "UNSUPPORTED_OPERATION", {
- operation: "request"
- });
- let error = null;
- const controller = new AbortController();
- const timer = setTimeout(() => {
- error = makeError("request timeout", "TIMEOUT");
- controller.abort();
- }, req.timeout);
- if (_signal) {
- _signal.addListener(() => {
- error = makeError("request cancelled", "CANCELLED");
- controller.abort();
- });
- }
- const init = {
- method: req.method,
- headers: new Headers(Array.from(req)),
- body: req.body || undefined,
- signal: controller.signal
- };
- let resp;
- try {
- resp = await fetch(req.url, init);
- }
- catch (_error) {
- clearTimeout(timer);
- if (error) {
- throw error;
- }
- throw _error;
- }
- clearTimeout(timer);
- const headers = {};
- resp.headers.forEach((value, key) => {
- headers[key.toLowerCase()] = value;
- });
- const respBody = await resp.arrayBuffer();
- const body = (respBody == null) ? null : new Uint8Array(respBody);
- return {
- statusCode: resp.status,
- statusMessage: resp.statusText,
- headers, body
- };
- }
- return getUrl;
- }
- // @TODO: remove in v7; provided for backwards compat
- const defaultGetUrl = createGetUrl({});
- export async function getUrl(req, _signal) {
- return defaultGetUrl(req, _signal);
- }
- //# sourceMappingURL=geturl-browser.js.map
|