PageSourceSearch

https://testzone.smartkeeda.com/service-workers/sw.js

js smartkeeda.com collected 2026-09-24 10:39:10 UTC 4,856 bytes, 173 lines download raw bytes

1const DB_NAME = 'data-store';
2const DB_VERSION = 1;
3let db;
4
5// Open IndexedDB
6function openDatabase() {
7  return new Promise((resolve, reject) => {
8    const request = indexedDB.open(DB_NAME, DB_VERSION);
9
10    request.onupgradeneeded = function(event) {
11      db = event.target.result;
12    };
13
14    request.onsuccess = function(event) {
15      db = event.target.result;
16      // console.log('Database opened successfully');
17      resolve(db);
18    };
19
20    request.onerror = function(event) {
21      console.error('Database error:', event.target.errorCode);
22      reject(event.target.errorCode);
23    };
24  });
25}
26
27// Function to get data from IndexedDB
28async function getData(id) {
29  await openDatabase();
30
31  return new Promise((resolve, reject) => {
32    const transaction = db.transaction(['sync-data']);
33    const objectStore = transaction.objectStore('sync-data');
34
35    const request = objectStore.get(id);
36
37    request.onsuccess = function(event) {
38      if (event.target.result) {
39        // console.log('Data retrieved:', event.target.result);
40        resolve(event.target.result);
41      } else {
42        // console.log('No data found for ID:', id);
43        resolve(null);
44      }
45    };
46
47    request.onerror = function(event) {
48      console.error('Error retrieving data:', event.target.errorCode);
49      reject(event.target.errorCode);
50    };
51  });
52}
53
54
55
56// Function to delete data from IndexedDB
57async function deleteData(id) {
58  await openDatabase();
59
60  return new Promise((resolve, reject) => {
61    const transaction = db.transaction(['sync-data'], 'readwrite');
62    const objectStore = transaction.objectStore('sync-data');
63
64    const request = objectStore.delete(id);
65
66    request.onsuccess = function() {
67      // console.log('Data deleted successfully for ID:', id);
68      resolve();
69    };
70
71    request.onerror = function(event) {
72      // console.error('Error deleting data:', event.target.errorCode);
73      reject(event.target.errorCode);
74    };
75  });
76}
77
78function saveToServer(dataToSubmit, apiURL, dataKey){
79  // console.log('Data to be sent:', dataToSubmit);
80  const deviceId = dataToSubmit.deviceId;
81  const groupId = dataToSubmit.groupId;
82  const token = dataToSubmit.token;
83  const data = dataToSubmit.data;
84
85  fetch(apiURL, {
86    method: 'POST',
87    headers: { 
88      'Content-Type': 'application/json',
89      'Authorization': `Bearer ${token}`,
90      'GroupId': groupId,
91      'Platform': 'Web',
92      'AppName': 'SmartkeedaWeb',
93      'AppVersion': '198',
94      'DeviceId': deviceId
95    },
96    body: JSON.stringify(data),
97  }).then((response) => {
98    if (response.ok) {
99      console.log('Data synced successfully');
100      return deleteData(dataKey);
101    } else {
102      // console.error('Data sync failed');
103    }
104  }).then(() => {
105    // console.log("data cleared from indexdb");
106  }).catch(error => {
107    console.log(error);
108  })
109}
110
111// Example of using getData in a sync event
112self.addEventListener('sync', async (event) => {
113  if (event.tag === 'sync-data') {
114    event.waitUntil(
115      (async () => {
116        const apiURL = 'https://testzone.smartkeeda.com/api/Testzone/SubmitTest';
117        const dataKey = 'dataKey';
118
119        const retryMeth = async (count) => {
120          if (count > 0) {
121            const dataToSubmit = await getData(dataKey);
122    
123            if (dataToSubmit) {
124                saveToServer(dataToSubmit, apiURL, dataKey);
125                // the saveToServer call
126                // console.log("Data successfully saved to server.");
127            } else {
128                console.log("No data to submit, retrying...");
129                setTimeout(async () => { 
130                    await retryMeth(count - 1); // Await the recursive call
131                }, 2000);
132            }
133          } else {
134            console.log("All retry attempts exhausted.");
135          }
136      };
137      
138      await retryMeth(3);
139      })()
140    );
141  }
142  else if (event.tag === 'sync-revise-data') {
143    event.waitUntil(
144      (async () => {
145        const apiURL = 'https://testzone.smartkeeda.com/api/Testzone/Retake/SubmitTest';
146        const dataKey = 'reviseDataKey';
147
148        const retryMeth = async (count) => {
149          if (count > 0) {
150            const dataToSubmit = await getData(dataKey);
151    
152            if (dataToSubmit) {
153                saveToServer(dataToSubmit, apiURL, dataKey); 
154                // the saveToServer call
155                // console.log("Data successfully saved to server.");
156            } else {
157                console.log("No data to submit, retrying...");
158                setTimeout(async () => { 
159                    await retryMeth(count - 1); 
160                    // Await the recursive call
161                }, 2000);
162            }
163          } else {
164            console.log("All retry attempts exhausted.");
165          }
166      };
167      
168      await retryMeth(3);
169      })()
170    );
171  }
172});
173

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.