Chrome Extension Permissions Utilities (manifest V3)

PHOTO EMBED

Mon Jul 11 2022 18:47:28 GMT+0000 (Coordinated Universal Time)

Saved by @Explosion #javascript #extension #chrome

const permissions = {
   async add(permission = [], origins = []){
      if (!origins?.length){origins = undefined};
      if (typeof permission === "string"){permission = [permission]};
      return new Promise((r, reject) => {
         chrome.permissions.request(
            {permissions: permission, origins},
            (granted) => {
               if (!granted){
                  reject("Permission not granted");
               } else {
                  r();
               }
            }
         )
      })
   },
   async remove(permission = [], origins = []){
      if (!origins?.length){origins = undefined};
      if (typeof permission === "string"){permission = [permission]};
      return new Promise((r, reject) => {
         chrome.permissions.remove(
            {permissions: permission, origins},
            (removed) => {
               if (!removed){
                  reject("Permission not removed");
               } else {
                  r();
               }
            }
         )
      })
   },
   async with(permission = [], origins = [], func){
      if (!origins?.length){origins = undefined};
      if (typeof permission === "string"){permission = [permission]};
      await new Promise((r, reject) => {
         chrome.permissions.request(
            {permissions: permission, origins},
            (granted) => {
               if (!granted){
                  reject("Permission not granted");
               } else {
                  r();
               }
            }
         )
      });
      let out = await func();
      await new Promise((r, reject) => {
         chrome.permissions.remove(
            {permissions: permission, origins},
            (removed) => {
               if (!removed){
                  reject("Permission not removed");
               } else {
                  r();
               }
            }
         )
      })
      return out;
   },
}
content_copyCOPY

https://gist.github.com/Explosion-Scratch/4e868a4a55da531b6715c9461cea88a2