├── .gitignore ├── LICENSE ├── README.md ├── data ├── bottombar.js └── urls.json ├── index.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | *.xpi 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Someguy123 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HiddenEverywhere 2 | 3 | ### A Firefox add-on to help Tor users find hidden services for ClearNet sites they use every day. 4 | 5 | Often, I tell people of [Facebook's hidden service](http://arstechnica.com/security/2014/10/facebook-offers-hidden-service-to-tor-users/) only to hear they didn't know. It's been around since 2014, offering Tor users additional security, compared to the Clearnet. 6 | 7 | The most recent encounter with someone who actively used Tor for their daily activities had me think, "what if Firefox could tell you when a site you're using has a hidden service, even if you're stuck behind a Cloudflare Captcha?". 8 | 9 | And thus, this extension was born. When you visit a site such as [LiteVault.net](https://www.litevault.net) or Facebook.com, the extension will inform you that you should be using the hidden service, with a direct link to it. 10 | 11 | ![Screenshot](https://i.imgur.com/g2UNL3c.png) 12 | 13 | For your privacy, this extension makes NO HTTP REQUESTS, and it does not log your requests in any form. The extension checks against a local text file, containing a list of websites and their verified hidden services. 14 | 15 | 16 | Install 17 | ======= 18 | If you're just wanting to use the extension, you can grab the release from here: 19 | 20 | [Mozilla Add-ons](https://addons.mozilla.org/en-US/firefox/addon/hiddeneverywhere/) 21 | 22 | [Github Release Download Link](https://github.com/Someguy123/HiddenEverywhere/releases) 23 | 24 | If you're wanting to develop this extension, simply `git clone` the repo and: 25 | 26 | npm install -g jpm # if you haven't already got JPM (firefox extension development) 27 | jpm run # builds and runs the extension in a new Firefox profile 28 | 29 | # if you want the XPI file to handle yourself 30 | jpm xpi 31 | 32 | New Domains 33 | =========== 34 | 35 | To add a new domain, simply fork the repo, add it to `data/urls.json` at the bottom of the list, and submit a pull request. It will be added ASAP. 36 | 37 | We use a simple JSON format, which is easy to modify. 38 | 39 | We only support the EXACT and WILDCARD matches in the [URL Pattern](https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/util_match-pattern) 40 | 41 | License 42 | ======= 43 | This extension is released under the MIT License, see LICENSE for more information. 44 | 45 | Donations 46 | ===== 47 | If this donation has helped you out, please donate! 48 | 49 | BTC: 17PPTHmS8N34KYKdDc4Gn1psabteGS8EE3 50 | 51 | LTC: LNWEjx3DKSAWKX5fkWfCwa2tWSQeo7ZmnR 52 | 53 | 54 | -------------------------------------------------------------------------------- /data/bottombar.js: -------------------------------------------------------------------------------- 1 | // {TITLE} is the name of the service 2 | var bar_text = "Good news! {TITLE} has a hidden service. Simply click the link (new tab): "; 3 | 4 | function showBar() { 5 | var bar = document.createElement("div"); 6 | bar.id = "hiddenservicebar"; 7 | 8 | // generate the sanitized hidden service link 9 | var hsLink = document.createElement("a"); 10 | hsLink.href = "http://" + self.options.hidden; 11 | hsLink.textContent = self.options.hidden; 12 | hsLink.target = "_BLANK"; 13 | hsLink.style.color = "#3cd81e"; 14 | 15 | // generate the "close" link on the right of the bar 16 | var closeLink = document.createElement("a"); 17 | closeLink.href = "#"; 18 | closeLink.addEventListener("click", function(e) { 19 | document.getElementById('hiddenservicebar').remove(); 20 | }); 21 | closeLink.style.textAlign = "right"; 22 | closeLink.style.float = "right"; 23 | closeLink.textContent = "Close"; 24 | 25 | var replaced = bar_text.replace(/\{TITLE\}/g, self.options.title); 26 | 27 | // add the text to the bar 28 | var bar_p = document.createElement("p"); 29 | bar_p.style.color = "rgb(221, 221, 221)"; 30 | bar_p.appendChild(document.createTextNode(replaced)); 31 | // append the sanitized links to the text 32 | bar_p.appendChild(hsLink); 33 | bar_p.appendChild(closeLink); 34 | // now attach the paragraph to the main div 35 | bar.appendChild(bar_p); 36 | 37 | // style the bar 38 | bar.style.backgroundColor = "rgb(95, 51, 180)"; 39 | bar.style.fontFamily = '"Lucida Grande",Verdana,Arial,Helvetica,sans-serif'; 40 | // we don't fill the page just because 41 | // sometimes the close button goes offscreen 42 | // so let's center it instead... 43 | bar.style.width = "90%"; 44 | bar.style.position = "fixed"; 45 | bar.style.height = "35px"; 46 | bar.style.padding = "5px"; 47 | bar.style.borderRadius = "0 0 10px 10px"; 48 | bar.style.MozBorderRadius = "0 0 10px 10px"; 49 | bar.style.top = "0"; 50 | // center bar 51 | bar.style.left = "5vw"; 52 | // yes we need a zIndex this crazy, because cloudflare also loves 53 | // to use a crazy zIndex that we have to compete with, or the bar 54 | // won't show up 55 | bar.style.zIndex = 9999999999; 56 | // now inject it at the beginning of the document 57 | document.body.insertBefore(bar,document.body.children[0]); 58 | } 59 | 60 | showBar(); 61 | -------------------------------------------------------------------------------- /data/urls.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "match": "*.8ch.net", 4 | "title": "8Chan", 5 | "onion": "oxwugzccvk3dk6tj.onion" 6 | }, 7 | { 8 | "match": "*.ahmia.fi", 9 | "title": "Ahmia", 10 | "onion": "msydqstlz2kzerdg.onion" 11 | }, 12 | { 13 | "match": "chaoswebs.net/anonblog/", 14 | "title": "AnonBlog", 15 | "onion": "oqgxnwyrufcvgu2o.onion" 16 | }, 17 | { 18 | "match": "atlas.torproject.org", 19 | "title": "Atlas", 20 | "onion": "52g5y5karruvc7bz.onion" 21 | }, 22 | { 23 | "match": "*.bestblog.de", 24 | "title": "BestBlog", 25 | "onion": "tpq5sxk5cgdf35uq.onion" 26 | }, 27 | { 28 | "match": "*.blockchain.info", 29 | "title": "Blockchain.info", 30 | "onion": "blockchainbdgpzk.onion" 31 | }, 32 | { 33 | "match": "bridges.torproject.org", 34 | "title": "TOR Bridges", 35 | "onion": "z5tfsnikzulwicxs.onion" 36 | }, 37 | { 38 | "match": "*.btdigg.org", 39 | "title": "BTDigg", 40 | "onion": "btdigg63cdjmmmqj.onion" 41 | }, 42 | { 43 | "match": "*.chloe.re", 44 | "title": "Chloe", 45 | "onion": "chloenlpvlemmmmd.onion" 46 | }, 47 | { 48 | "match": "cloud.torproject.org", 49 | "title": "TOR Cloud", 50 | "onion": "icxe4yp32mq6gm6n.onion" 51 | }, 52 | { 53 | "match": "cock.li", 54 | "title": "CockLi", 55 | "onion": "wwwcocklicdexedh.onion" 56 | }, 57 | { 58 | "match": "mail.cock.li", 59 | "title": "CockliWebMail", 60 | "onion": "cockmailwwfvrtqj.onion" 61 | }, 62 | { 63 | "match": "www.cock.li", 64 | "title": "CockLiWWW", 65 | "onion": "wwwcocklicdexedh.onion" 66 | }, 67 | { 68 | "match": "collector.torproject.org", 69 | "title": "TOR Collector", 70 | "onion": "qigcb4g4xxbh5ho6.onion" 71 | }, 72 | { 73 | "match": "consensus-health.torproject.org", 74 | "title": "TOR ConensusHealth", 75 | "onion": "tgnv2pssfumdedyw.onion" 76 | }, 77 | { 78 | "match": "*.deepdotweb.com", 79 | "title": "DeepDotWeb", 80 | "onion": "deepdot35wvmeyd5.onion" 81 | }, 82 | { 83 | "match": "*.demonoid.pw", 84 | "title": "Demonoid", 85 | "onion": "demonhkzoijsvvui.onion:8080" 86 | }, 87 | { 88 | "match": "*.duckduckgo.com", 89 | "title": "DuckDuckGo", 90 | "onion": "3g2upl4pq6kufc4m.onion" 91 | }, 92 | { 93 | "match": "extra.torproject.org", 94 | "title": "ExtraTor", 95 | "onion": "rqef5a5mebgq46y5.onion" 96 | }, 97 | { 98 | "match": "*.facebook.com", 99 | "title": "Facebook", 100 | "onion": "facebookcorewwwi.onion" 101 | }, 102 | { 103 | "match": "*.freedom.press", 104 | "title": "Freedom of the Press Foundation", 105 | "onion": "freepress3xxs3hk.onion" 106 | }, 107 | { 108 | "match": "gettor.torproject.org", 109 | "title": "GetTor", 110 | "onion": "tngjm3owsslo3wgo.onion" 111 | }, 112 | { 113 | "match": "*.go-beyond.org", 114 | "title": "GoBeyond", 115 | "onion": "potatooezyf2aql6.onion" 116 | }, 117 | { 118 | "match": "*.guerrillamail.com", 119 | "title": "GuerrillaMail", 120 | "onion": "grrmailb3fxpjbwm.onion" 121 | }, 122 | { 123 | "match": "*.idope.se", 124 | "title": "iDope", 125 | "onion": "gv6zipaqcoaau4qe.onion" 126 | }, 127 | { 128 | "match": "*.keybase.io", 129 | "title": "Keybase", 130 | "onion": "fncuwbiisyh6ak3i.onion" 131 | }, 132 | { 133 | "match": "*.litevault.net", 134 | "title": "LiteVault", 135 | "onion": "vaultu7dxw5bbg37.onion" 136 | }, 137 | { 138 | "match": "www.nytimes.com", 139 | "title": "The New York Times", 140 | "onion": "https://www.nytimes3xbfgragh.onion/" 141 | }, 142 | { 143 | "match": "mascherari.press", 144 | "title": "mascherari.press", 145 | "onion": "7tm2lzezyjwtpn2s.onion" 146 | }, 147 | { 148 | "match": "*.obscuredfiles.com", 149 | "title": "ObscuredFiles", 150 | "onion": "obscuredtzevzthp.onion" 151 | }, 152 | { 153 | "match": "*.onion-router.net", 154 | "title": "OnionRouter", 155 | "onion": "hzmun3rnnxjhkyhg.onion" 156 | }, 157 | { 158 | "match": "ooni.torproject.org", 159 | "title": "Ooni", 160 | "onion": "fqnqc7zix2wblwex.onion" 161 | }, 162 | { 163 | "match": "*.parckwart.de", 164 | "title": "Parckwart", 165 | "onion": "parckwartvo7fskp.onion" 166 | }, 167 | { 168 | "match": "*.popcorntimece.ch", 169 | "title": "PopcornTimeCE", 170 | "onion": "5mbvonaxe5irufze.onion" 171 | }, 172 | { 173 | "match": "*.privacyinternational.org", 174 | "title": "PrivacyInternational", 175 | "onion": "privacyintyqcroe.onion" 176 | }, 177 | { 178 | "match": "*.propublica.org", 179 | "title": "Propublica", 180 | "onion": "propub3r6espa33w.onion" 181 | }, 182 | { 183 | "match": "black.riseup.net", 184 | "title": "RiseupBlack", 185 | "onion": "cwoiopiifrlzcuos.onion" 186 | }, 187 | { 188 | "match": "labs.riseup.net", 189 | "title": "RiseupLabs", 190 | "onion": "yfm6sdhnfbulplsw.onion" 191 | }, 192 | { 193 | "match": "lists.riseup.net", 194 | "title": "RiseupLists", 195 | "onion": "xpgylzydxykgdqyg.onion" 196 | }, 197 | { 198 | "match": "mail.riseup.net", 199 | "title": "RiseupMail", 200 | "onion": "zsolxunfmbfuq7wf.onion" 201 | }, 202 | { 203 | "match": "*.netzpolitik.org", 204 | "title": "Netzpolitik", 205 | "onion": "p6dpm4ozk6d2pxqa.onion" 206 | }, 207 | { 208 | "match": "*.mail2tor.com", 209 | "title": "Mail2Tor", 210 | "onion": "mail2tor2zyjdctd.onion" 211 | }, 212 | { 213 | "match": "*.vfemail.net", 214 | "title": "VFEmail", 215 | "onion": "344c6kbnjnljjzlz.onion" 216 | }, 217 | { 218 | "match": "*.bitmessage.ch", 219 | "title": "BitmessageMailGateway", 220 | "onion": "bitmailendavkbec.onion" 221 | }, 222 | { 223 | "match": "*.autistici.org", 224 | "title": "Autistici/Inventati", 225 | "onion": "wi7qkxyrdpu5cmvr.onion" 226 | }, 227 | { 228 | "match": "share.riseup.net", 229 | "title": "RiseupShare", 230 | "onion": "6zc6sejeho3fwrd4.onion" 231 | }, 232 | { 233 | "match": "*.sarahjamielewis.com", 234 | "title": "SarahJamieLewis", 235 | "onion": "vdfmtrtpneosarah.onion" 236 | }, 237 | { 238 | "match": "*.secushare.org", 239 | "title": "Secushare", 240 | "onion": "secushare.cheettyiapsyciew.onion" 241 | }, 242 | { 243 | "match": "*.sci-hub.ac", 244 | "title": "Sci-Hub", 245 | "onion": "scihub22266oqcxt.onion" 246 | }, 247 | { 248 | "match": "*.sci-hub.bz", 249 | "title": "Sci-Hub", 250 | "onion": "scihub22266oqcxt.onion" 251 | }, 252 | { 253 | "match": "*.sci-hub.cc", 254 | "title": "Sci-Hub", 255 | "onion": "scihub22266oqcxt.onion" 256 | }, 257 | { 258 | "match": "*.smsprivacy.org", 259 | "title": "SMS Privacy", 260 | "onion": "smspriv6fynj23u6.onion" 261 | }, 262 | { 263 | "match": "*.swehack.org", 264 | "title": "swehack", 265 | "onion": "swehackmzys2gpmb.onion" 266 | }, 267 | { 268 | "match": "tb-manual.torproject.org", 269 | "title": "TbManual", 270 | "onion": "dgvdmophvhunawds.onion" 271 | }, 272 | { 273 | "match": "*.thepiratebay.org", 274 | "title": "ThePirateBay", 275 | "onion": "uj3wazyk5u4hnvtk.onion" 276 | }, 277 | { 278 | "match": "*.thepiratebay.se", 279 | "title": "ThePirateBay", 280 | "onion": "uj3wazyk5u4hnvtk.onion" 281 | }, 282 | { 283 | "match": "compass.torproject.org", 284 | "title": "Tor Compass", 285 | "onion": "lwygejoa6fm26eef.onion" 286 | }, 287 | { 288 | "match": "deb.torproject.org", 289 | "title": "TorDeb", 290 | "onion": "sdscoq7snqtznauu.onion" 291 | }, 292 | { 293 | "match": "dist.torproject.org", 294 | "title": "TorDist", 295 | "onion": "rqef5a5mebgq46y5.onion" 296 | }, 297 | { 298 | "match": "help.torproject.org", 299 | "title": "TorHelp", 300 | "onion": "54nujbl4qohb5qdp.onion" 301 | }, 302 | { 303 | "match": "gitweb.torproject.org", 304 | "title": "Tor Gitweb", 305 | "onion": "jqs44zhtxl2uo6gk.onion" 306 | }, 307 | { 308 | "match": "jenkins.torproject.org", 309 | "title": "Jenkins", 310 | "onion": "f7lqb5oicvsahone.onion" 311 | }, 312 | { 313 | "match": "metrics.torproject.org", 314 | "title": "Tor Metrics", 315 | "onion": "rougmnvswfsmd4dq.onion" 316 | }, 317 | { 318 | "match": "onion.torproject.org", 319 | "title": "TorOnionList", 320 | "onion": "yz7lpwfhhzcdyc5y.onion" 321 | }, 322 | { 323 | "match": "www.torproject.org", 324 | "title": "TorProject", 325 | "onion": "expyuzz4wqqyqhjn.onion" 326 | }, 327 | { 328 | "match": "research.torproject.org", 329 | "title": "TorResearch", 330 | "onion": "wcgqzqyfi7a6iu62.onion" 331 | }, 332 | { 333 | "match": "www-staging.torproject.org", 334 | "title": "Tor Staging", 335 | "onion": "krkzagd5yo4bvypt.onion" 336 | }, 337 | { 338 | "match": "stem.torproject.org", 339 | "title": "Tor Stem", 340 | "onion": "vt5hknv6sblkgf22.onion" 341 | }, 342 | { 343 | "match": "trac.torproject.org", 344 | "title": "Tor Bug Tracker & Wiki", 345 | "onion": "ea5faa5po25cf7fb.onion" 346 | }, 347 | { 348 | "match": "torrentproject.se", 349 | "title": "TorrentProject", 350 | "onion": "x4torrentjjjjuxy.onion" 351 | }, 352 | { 353 | "match": "torrentz2.eu", 354 | "title": "Torrentz2", 355 | "onion": "torrentzwealmisr.onion" 356 | }, 357 | { 358 | "match": "*.transfer.sh", 359 | "title": "TransferSH", 360 | "onion": "jxm5d6emw5rknovg.onion" 361 | }, 362 | { 363 | "match": "build.voidlinux.eu", 364 | "title": "VoidLinux Builds", 365 | "onion": "s7y2awkwau4nbdpu.onion" 366 | }, 367 | { 368 | "match": "repo.voidlinux.eu", 369 | "title": "VoidLinux Repo", 370 | "onion": "fd6dqrupy3af4xwb.onion" 371 | }, 372 | { 373 | "match": "we.riseup.net", 374 | "title": "WeRiseup", 375 | "onion": "7lvd7fa5yfbdqaii.onion" 376 | }, 377 | { 378 | "match": "*.whonix.org", 379 | "title": "Whonix", 380 | "onion": "kkkkkkkkkk63ava6.onion" 381 | }, 382 | { 383 | "match": "z.cash", 384 | "title": "Zcash", 385 | "onion": "zcashph5mxqjjby2.onion" 386 | }, 387 | { 388 | "match": "*.qubes-os.org", 389 | "title": "Qubes OS", 390 | "onion": "qubesos4rrrrz6n4.onion" 391 | }, 392 | { 393 | "match": "mail.protonmail.com", 394 | "title": "ProtonMail", 395 | "onion": "protonirockerxow.onion" 396 | }, 397 | { 398 | "match": "*.endchan.xyz", 399 | "title": "Endchan", 400 | "onion": "s6424n4x4bsmqs27.onion" 401 | }, 402 | { 403 | "match": "reddit.com", 404 | "title": "Reddit", 405 | "onion": "redditmoongroogs.onion" 406 | }, 407 | { 408 | "match": "tinfoil.press", 409 | "title": "Tinfoil", 410 | "onion": "v245twftq76pls6n.onion" 411 | }, 412 | { 413 | "match": "cryptome.org", 414 | "title": "Cryptome", 415 | "onion": "h2am5w5ufhvdifrs.onion" 416 | }, 417 | { 418 | "match": "cryptoparty.is", 419 | "title": "CryptoParty.is", 420 | "onion": "crypty22ijtotell.onion" 421 | }, 422 | { 423 | "match": "archive.org", 424 | "title": "Internet Archive", 425 | "onion": "archivecrfip2lpi.onion" 426 | }, 427 | { 428 | "match": "scryptmail.com", 429 | "title": "SCRYPTmail", 430 | "onion": "scryptmaildniwm6.onion" 431 | }, 432 | { 433 | "match": "securityinabox.org", 434 | "title": "Security-in-a-box", 435 | "onion": "bpo4ybbs2apk4sk4.onion" 436 | }, 437 | { 438 | "match": "devuan.org", 439 | "title": "Devuan", 440 | "onion": "devuanzuwu3xoqwp.onion" 441 | }, 442 | { 443 | "match": "heads.dyne.org", 444 | "title": "heads ::: the libre privacy distro", 445 | "onion": "fz474h2o46o2u7xj.onion" 446 | }, 447 | { 448 | "match": "elude.in", 449 | "title": "Elude", 450 | "onion": "eludemaillhqfkh5.onion" 451 | }, 452 | { 453 | "match": "confidantmail.org", 454 | "title": "Confidant Mail", 455 | "onion": "cwu7eglxcabwttzf.onion" 456 | }, 457 | { 458 | "match": "securejabber.me", 459 | "title": "Securejabber.me", 460 | "onion": "giyvshdnojeivkom.onion" 461 | }, 462 | { 463 | "match": "onionshare.org", 464 | "title": "OnionShare", 465 | "onion": "elx57ue5uyfplgva.onion" 466 | }, 467 | { 468 | "match": "secmail.pro", 469 | "title": "SecMail Pro", 470 | "onion": "secmailw453j7piv.onion" 471 | }, 472 | { 473 | "match": "mailbit.io", 474 | "title": "Mailbit io", 475 | "onion": "oxicsiwet42jw4h4.onion" 476 | }, 477 | { 478 | "match": "paranoid.email", 479 | "title": "@PARANOID", 480 | "onion": "paranoid2ezdphvm.onion" 481 | }, 482 | { 483 | "match": "searx.me", 484 | "title": "SearX", 485 | "onion": "ulrn6sryqaifefld.onion" 486 | }, 487 | { 488 | "match": "creep.im", 489 | "title": "Creep.im", 490 | "onion": "https://creep7nissfumwyx.onion/" 491 | } 492 | ] 493 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var self = require("sdk/self"); 2 | 3 | var pageMod = require("sdk/page-mod"); 4 | 5 | // Load URL data from a flat txt file 6 | var urls = self.data.load('urls.json'); 7 | urls = JSON.parse(urls); 8 | 9 | for(var url_index in urls) { 10 | var url = urls[url_index], 11 | //split_url = url.trim().split(' '), 12 | match = url.match, 13 | title = url.title, 14 | hidden = url.onion; 15 | 16 | // if there's no wildcard, or protocol, then add http and https 17 | if(match.indexOf("*") == -1 && match.indexOf("://") == -1) { 18 | match = new RegExp("http(s?)://"+match+"(?:/.*)?"); 19 | } 20 | // debugging 21 | console.log("Line:", url); 22 | console.log("Match:", match); 23 | 24 | pageMod.PageMod({ 25 | include: match, 26 | contentScriptFile: self.data.url("bottombar.js"), 27 | contentScriptOptions: {hidden: hidden, title: title, match:match} 28 | }); 29 | } 30 | 31 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "HiddenEverywhere", 3 | "name": "hiddeneverywhere", 4 | "version": "0.2.9", 5 | "description": "An add-on to help Tor users find hidden services for ClearNet sites they use every day", 6 | "main": "index.js", 7 | "author": "Someguy123", 8 | "engines": { 9 | "firefox": ">=38.0a1", 10 | "fennec": ">=38.0a1" 11 | }, 12 | "license": "MIT", 13 | "keywords": [ 14 | "jetpack" 15 | ], 16 | "permissions": {"private-browsing": true} 17 | } 18 | --------------------------------------------------------------------------------