diff --git a/lms/templates/widgets/segment-io.html b/lms/templates/widgets/segment-io.html index 5f8da23000e8..49a9394acb44 100644 --- a/lms/templates/widgets/segment-io.html +++ b/lms/templates/widgets/segment-io.html @@ -9,18 +9,48 @@ !function(){ var originalAPI = '${settings.SEGMENT_ORIGINAL_API}'; var replicateAPI = '${settings.SEGMENT_REPLICATE_API}'; - function replaceFetchResourceForSegmentSite(resource){ - if (resource.substr(0, originalAPI.length) === originalAPI) { - resource = replicateAPI + resource.substr(originalAPI.length); + function replaceFetchResourceForSegmentSite(resource) { + // Helper function to replace the URL + function replaceUrl(url) { + if (url.substr(0, originalAPI.length) === originalAPI) { + return replicateAPI + url.substr(originalAPI.length); + } + return url; + } + + // Check if resource is a string (a URL) + if (typeof resource === 'string') { + return replaceUrl(resource); + } else if (resource instanceof Request) { + // If resource is a Request object, create a new Request with a replaced URL + const newUrl = replaceUrl(resource.url); + return new Request(newUrl, { + method: resource.method, + headers: resource.headers, + body: resource.body, + mode: resource.mode, + credentials: resource.credentials, + cache: resource.cache, + redirect: resource.redirect, + referrer: resource.referrer, + integrity: resource.integrity, + keepalive: resource.keepalive, + signal: resource.signal + }); + } else if (resource instanceof URL) { + // If resource is a URL object, convert it to a string and replace the URL + return replaceUrl(resource.href); + } else { + // If it's neither a string nor a Request object, log a warning or handle as needed + console.warn('replaceFetchResourceForSegmentSite was called with an unexpected argument type:', typeof resource, resource); + return resource; } - return resource; } - const { fetch: originalFetch } = window; + // Override the fetch function to use the replaceFetchResourceForSegmentSite function + const originalFetch = window.fetch; window.fetch = async (...args) => { - let [resource, config ] = args; - resource = replaceFetchResourceForSegmentSite(resource); - const response = await originalFetch(resource, config); - return response; + args[0] = replaceFetchResourceForSegmentSite(args[0]); + return originalFetch.apply(window, args); }; }();