PageSourceSearch

https://mcatlas.org/viewer/service-worker.js

js mcatlas.org collected 2026-10-02 11:37:42 UTC 3,079 bytes, 112 lines download raw bytes

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.