serviceWorker.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const CHATGPT_NEXT_WEB_CACHE = "chatgpt-next-web-cache";
  2. const CHATGPT_NEXT_WEB_FILE_CACHE = "chatgpt-next-web-file";
  3. let a="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";let nanoid=(e=21)=>{let t="",r=crypto.getRandomValues(new Uint8Array(e));for(let n=0;n<e;n++)t+=a[63&r[n]];return t};
  4. self.addEventListener("activate", function (event) {
  5. console.log("ServiceWorker activated.");
  6. });
  7. self.addEventListener("install", function (event) {
  8. self.skipWaiting(); // enable new version
  9. event.waitUntil(
  10. caches.open(CHATGPT_NEXT_WEB_CACHE).then(function (cache) {
  11. return cache.addAll([]);
  12. }),
  13. );
  14. });
  15. async function upload(request, url) {
  16. const formData = await request.formData()
  17. const file = formData.getAll('file')[0]
  18. let ext = file.name.split('.').pop()
  19. if (ext === 'blob') {
  20. ext = file.type.split('/').pop()
  21. }
  22. const fileUrl = `${url.origin}/api/cache/${nanoid()}.${ext}`
  23. // console.debug('file', file, fileUrl, request)
  24. const cache = await caches.open(CHATGPT_NEXT_WEB_FILE_CACHE)
  25. await cache.put(new Request(fileUrl), new Response(file, {
  26. headers: {
  27. 'content-type': file.type,
  28. 'content-length': file.size,
  29. 'cache-control': 'no-cache', // file already store in disk
  30. 'server': 'ServiceWorker',
  31. }
  32. }))
  33. return Response.json({ code: 0, data: fileUrl })
  34. }
  35. async function remove(request, url) {
  36. const cache = await caches.open(CHATGPT_NEXT_WEB_FILE_CACHE)
  37. const res = await cache.delete(request.url)
  38. return Response.json({ code: 0 })
  39. }
  40. self.addEventListener("fetch", (e) => {
  41. const url = new URL(e.request.url);
  42. if (/^\/api\/cache/.test(url.pathname)) {
  43. if ('GET' == e.request.method) {
  44. e.respondWith(caches.match(e.request))
  45. }
  46. if ('POST' == e.request.method) {
  47. e.respondWith(upload(e.request, url))
  48. }
  49. if ('DELETE' == e.request.method) {
  50. e.respondWith(remove(e.request, url))
  51. }
  52. }
  53. });