1var credential = null; 2var isTryGetCredential = true; 3var tryHandle; 4self.addEventListener('fetch', function(event) { 5 var req = event.request; 6 if(req.method === 'GET' && /\/sharing\/rest\/content\/items\/(.+)\/resources\/wabwidget/.test(req.url)){ 7 if(!credential){ 8 event.respondWith(new Promise(function(resolve, reject){ 9 var intervalHandle = setInterval(function(){ 10 if(!credential){ 11 !tryHandle && tryGetCredential(); 12 return 13 } 14 clearInterval(intervalHandle) 15 16 resolve(fetch(appendCredentialToRequest(credential, event.request))) 17 }, 200) 18 })) 19 }else{ 20 event.respondWith(fetch(appendCredentialToRequest(credential, event.request))); 21 return; 22 } 23 } 24 return; 25}); 26 27self.addEventListener('activate', event => { 28 clients.claim(); 29 !tryHandle && tryGetCredential() 30}); 31 32self.addEventListener('message', (event) => { 33 let message = event.data; 34 if (message.type === 'to_sw_credential') { 35 credential = message.credential; 36 }else if(message.type === 'to_sw_no_credential'){ 37 isTryGetCredential = false; 38 }else if(message.type === 'to_sw_register_success'){ 39 clients.claim(); 40 } 41}); 42 43function appendCredentialToRequest(credential, req){ 44 if(credential && isDomainMatch(req.url, credential.server)){ 45 return new Request(appendToken(req.url)); 46 }else{ 47 return req; 48 } 49} 50 51function tryGetCredential(){ 52 if(credential || !isTryGetCredential){ 53 if(tryHandle){ 54 clearTimeout(tryHandle)
55 tryHandle = null 56 } 57 return 58 } 59 60 postMessage({ 61 type: 'to_window_get_credential' 62 }) 63 64 tryHandle = setTimeout(tryGetCredential, 500) 65} 66 67function isDomainMatch(reqUrl, credentialUrl){ 68 if((/\.maps\.arcgis\.com/.test(reqUrl) || /www\.arcgis\.com/.test(reqUrl)) && 69 (/\.maps\.arcgis\.com/.test(credentialUrl) || /www\.arcgis\.com/.test(credentialUrl))){ 70 return true; 71 } 72 if((/\.mapsdevext\.arcgis\.com/.test(reqUrl) || /devext\.arcgis\.com/.test(reqUrl)) && 73 (/\.mapsdevext\.arcgis\.com/.test(credentialUrl) || /devext\.arcgis\.com/.test(credentialUrl))){ 74 return true; 75 } 76 if((/\.mapsqa\.arcgis\.com/.test(reqUrl) || /qaext\.arcgis\.com/.test(reqUrl)) && 77 (/\.mapsqa\.arcgis\.com/.test(credentialUrl) || /qaext\.arcgis\.com/.test(credentialUrl))){ 78 return true; 79 } 80 81 return reqUrl.indexOf(credentialUrl) > -1; 82} 83 84function appendToken(url){ 85 if(url.indexOf('?') < 0){ 86 return url + '?token=' + credential.token; 87 } 88 89 var query = url.split('?')[1]; 90 var pairs = query.split('&'); 91 var hasToken = false; 92 for(var i = 0; i < pairs.length; i++){ 93 var splits = decodeURIComponent(pairs[i]).split('='); 94 if(splits[0] === 'token'){ 95 hasToken = true; 96 } 97 } 98 99 if(!hasToken){ 100 return url + '&token=' + credential.token; 101 } 102 return url; 103} 104 105function postMessage(message){ 106 clients.matchAll().then(clients => { 107 clients.forEach(client => { 108 client.postMessage(message) 109 }) 110 }) 111} 112
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.