Actual logic in service-worker is attaching below.
For me static rule is defined in rules.json but besides that I am not able to call any func of service-worker.js Where current func is not working anymore.. "//chrome.webRequest.onBeforeRequest.addListener(beforeRequestHandler, requestFilter, ['blocking']);
//chrome.webRequest.onBeforeSendHeaders.addListener(beforeSendHeadersHandler, requestFilter, extraInfoSpec);
"
I want to update my rules through service-worker itself and I am also blocked in that case where I tried to define
'In manifest file's declarativeNetRequest portion file SW instead of rules.json' It says it is not valid.
'use strict';
const BLUE_URL_PREFIX = "";
const CHARLES_PROXY_BASE_URL = "";
const DIAGNOSTICS_VERSION_REGEX = ;
const GREEN_URL_PREFIX = "";
const GROUP_PREFIX_REGEX = ;
const INTEGRATION_BASE_URL = "";
const LOCALHOST_BASE_URL = "";
const PRODUCTION_BASE_URL = "";
const REQUEST_FILTER_URLS = [""];
const STAGING_BASE_URL = "";
const SPEED_PLATFORM_INTEGRATION_URL = "";
const API_GW_INTEGRATION_URL = "";
const API_GW_STAGING_URL = "";
const API_GW_PRODUCTION_URL = "";
const POM_PLATFORM_INTEGRATION_URL = "";
const POM_PLATFORM_STAGING_URL = "";
const POM_PLATFORM_PRODUCTION_URL = "";
const ENV_BASE_URLS = {
"local": [LOCALHOST_BASE_URL, CHARLES_PROXY_BASE_URL],
"integration": [INTEGRATION_BASE_URL, SPEED_PLATFORM_INTEGRATION_URL, API_GW_INTEGRATION_URL, POM_PLATFORM_INTEGRATION_URL],
"staging": [STAGING_BASE_URL, API_GW_STAGING_URL, API_GW_INTEGRATION_URL, POM_PLATFORM_STAGING_URL],
"production": [PRODUCTION_BASE_URL, API_GW_PRODUCTION_URL, POM_PLATFORM_PRODUCTION_URL]
};
const TOKEN_BASE_URLS = [CHARLES_PROXY_BASE_URL, LOCALHOST_BASE_URL, INTEGRATION_BASE_URL, STAGING_BASE_URL, PRODUCTION_BASE_URL, SPEED_PLATFORM_INTEGRATION_URL, API_GW_INTEGRATION_URL, API_GW_STAGING_URL, API_GW_PRODUCTION_URL, POM_PLATFORM_INTEGRATION_URL, POM_PLATFORM_STAGING_URL, POM_PLATFORM_PRODUCTION_URL];
const URL_PREFIXES = {
"blue": BLUE_URL_PREFIX,
"green": GREEN_URL_PREFIX
};
let beforeRequestHandler = function(details) {
let url = details.url;
// Do not redirect if this extension is disabled
if (!getExtensionEnabled()) {
return;
}
// Do not redirect for local requests
if (ENV_BASE_URLS["local"].includes(getBaseUrlFromUrl(url))) {
return;
}
// Do not redirect if the targeted Orc env is not selected
if (!isUrlInScope(details.url.toLowerCase(), false)) {
return;
}
// Do not redirect if a server group is not selected
let serverGroupSelection = getServerGroupSelection();
if (serverGroupSelection === "none") {
return;
}
// Do not redirect if a server group prefix is already specified in the
// URL, this can be from someone manually prepending "smartinet-g" OR
// from a previous invocation of this method. This condition therefore
// avoids an infinite redirect.
if (url.match(GROUP_PREFIX_REGEX)) {
return;
}
// Redirect the request, prepending the proper server group
let parsedUrl = new URL(url);
parsedUrl.pathname = URL_PREFIXES[serverGroupSelection] + parsedUrl.pathname;
return getRedirectUrl(parsedUrl.href);
};
let beforeSendHeadersHandler = function(details) {
let requestHeaders = details.requestHeaders;
if (!getExtensionEnabled()) { // getExtensionEnabled from common.js
return getRequestHeaders(requestHeaders);
}
let url = details.url.toLowerCase();
if (!isUrlInScope(details.url, true)) {
return getRequestHeaders(requestHeaders);
}
let token = getTokenFromRequestUrl(url);
if (token) {
addAuthorizationHeaderToRequestHeaders(requestHeaders, token)
}
let idToken = getIdTokenFromRequestUrl(url);
if (idToken) {
addIdentityHeaderToRequestHeaders(requestHeaders, idToken);
}
if (getHALMode()) {
addAcceptHeaderToRequestHeaders(requestHeaders, "application/hal+json");
}
return getRequestHeaders(requestHeaders);
};
function addAuthorizationHeaderToRequestHeaders(requestHeaders, token) {
requestHeaders.push({
name: "Authorization",
value: `Bearer ${token}`
});
}
function addIdentityHeaderToRequestHeaders(requestHeaders, idToken) {
requestHeaders.push({
name: "X-Id-Token",
value: idToken
});
}
function addAcceptHeaderToRequestHeaders(requestHeaders, value) {
requestHeaders.push({
name: "Accept",
value: value
});
}
function getRedirectUrl(url) {
return {
redirectUrl: url
};
}
function getRequestHeaders(requestHeaders) {
return {
requestHeaders: requestHeaders
};
}
function getTokenFromRequestUrl(url) {
let baseUrl = getBaseUrlFromUrl(url);
let activeToken = (localStorage.getItem("activeTab") || defaultTab).replace("Tab", "");
if (TOKEN_BASE_URLS.includes(baseUrl)) {
return getToken(activeToken) || null; // getToken from common.js
}
return null;
}
function getIdTokenFromRequestUrl(url) {
let baseUrl = getBaseUrlFromUrl(url);
let activeToken = (localStorage.getItem("activeTab") || defaultTab).replace("Tab", "");
if (TOKEN_BASE_URLS.includes(baseUrl)) {
return getIdToken(activeToken) || null;
}
return null;
}
function getBaseUrlFromUrl(url) {
let parsedUrl = new URL(url);
return parsedUrl.protocol + "//" + parsedUrl.host + "/";
}
function isUrlInScope(url, checkForDiagnosticsVersion) {
let siteSelections = getSiteSelection(); //getSiteSelection from common.js
if (siteSelections == null) {
return false;
}
for (let i = 0; i < siteSelections.length; i++) {
let siteSelection = siteSelections[i].toLowerCase();
let siteSelectionUrls = ENV_BASE_URLS[siteSelection];
if (siteSelectionUrls.includes(getBaseUrlFromUrl(url))) {
if (!checkForDiagnosticsVersion) {
return true;
}
// The diagnostics & version endpoints use different auth; Don't include the header
return !url.match(DIAGNOSTICS_VERSION_REGEX);
}
}
return false;
}
let requestFilter = {
// Limiting request scope to Xfinity or localhost
urls: REQUEST_FILTER_URLS
};
let extraInfoSpec = ['requestHeaders', 'blocking'];
chrome.webRequest.onBeforeRequest.addListener(beforeRequestHandler, requestFilter, ['blocking']);
chrome.webRequest.onBeforeSendHeaders.addListener(
function(details)
{
let requestHeaders = details.requestHeaders;
if (!getExtensionEnabled()) { // getExtensionEnabled from common.js
return getRequestHeaders(requestHeaders);
}
let url = details.url.toLowerCase();
if (!isUrlInScope(details.url, true)) {
return getRequestHeaders(requestHeaders);
}
let token = getTokenFromRequestUrl(url);
details.requestHeaders.push(
if (token) {
{
"name": "Authorization",
"value": `Bearer ${token}`
}
}
);
return requestHeaders;
}, requestFilter, extraInfoSpec);
//chrome.webRequest.onBeforeRequest.addListener(beforeRequestHandler, requestFilter, ['blocking']);
//chrome.webRequest.onBeforeSendHeaders.addListener(beforeSendHeadersHandler, requestFilter, extraInfoSpec);