// ==UserScript== // @name Email Generator // @version 0.1 // @description Type in "/email in a text or textarea field and it will update it with a randomly generated username that goes through a relay. // @author You // @grant none // @include * // ==/UserScript== (function() { const tmClickAudio = new Audio('data:audio/wav;charset=utf-8;base64,UklGRrgEAABXQVZFZm10IBAAAAABAAEAIlYAACJWAAABAAgAZGF0YZQEAAB+fHp9dnOKeIeYTnh+eX1+yJfCt5KDVmptnJqxu6qUd4R4Xo11c7puf3ZwhGuGfHV6b1RoYmd4f4Fxc2NkX2lhXGlqX2RyZXh1hYqLlI6ViYKDhYeHhoyEh4uCiIGHioyRjZCSj4qLiIyKiYuIjo2Lj46Jh4aEhoSDg4OCgH5/fHd6fH1/goOBgoOAgIB+fX9/f4B+fn99fX19fHp5eHh5enl7fX5/f3+Af39+f4CAf319fX17fH5/gICBgoGBgYKCgYGCgoGAgICBgYCAgICBgH9+fn19foCAgICAgICAgIB/gX+AgYCAgYKCgYCAf4CAgICDgoCCgIGAfYGAgIKAgYB/gH5/gH+AgH6Af319fn5+fn6Af4B/gIOAgIKBgYCAgICAgIGCgoGAgYCAgYGDg4KBgYB+fH1/foCAgYCAgH1+fn1+fn+Afn9+foB+f4CAgIB/gICAgoGBgIB/gICCgoGCgYGBgICAgIKBgYKBgYGAgIB/f31+fX1/fX9/fn16eXp6en1+f3+AgH59fn9/f4CAgYGBgoGBg4SEg4KCgYGAgICAgICAf39/fn5/f39/f35+f318foCAf39/gH59fn+AgIGCgICAgICAgICAgYGBgICAgICAgH+AgYCAgICAgICAgH+AgICAgICAgICAgICBgICCgoGChIKAgICAgICBg4GBgoGAgICAgICAgICAgH5+f3+AgIB/gICAf3+Af39/gIB/f4CAf4CDgYKFhIB/gXh7gn2Ch4CAgoKEgH6AgIWBf4CAgICDgH+Bg4OAgYGCg4KBgYCAgICBgH+Af35+fX+Af35/fnx8fn5+foB+e3x8eXl7fn+AgoCAf36CgoaAipZ1hoJ+e3qOcJB8fI13g3+GgH92fn1/g4CKhId7f3h3fnx9fIOAf4CBfoB9fH98gYCChIKChIGDgX+CgoaEgoCAgH+Bf359f4GDg4B/fn6AgYGCg4GAgYB/fX+BgYWGgn98gIKDgX97eoCEhoR+fX19f357e3yAhIJ9e3t9foCDgoGEg4CAgoKAgIGBhIWEgYCAgoOCgoCAgIKDgYCAgICCg4KAgICCgoKCgYGBgoGAf39/gICAf35+fX5/f35/gH9+f3+AgYGAgICAgYB/gIGCgH6AgYCAgIWGg4V/g4mAd3Z9enx8fX+AgYBsgKaNfnxpPHikUHy2kGWdqSZcmlh7vouMu2eBgT5SVVGCoJPguJOlZ1lXdYObs7WklZxuZGZcY2yAjpCHm4hqdWdng4KHm5KMko15b3NwbHqJfoGOfXBwbG1wdoCAg4iIgXp5c3V4eX6Bf4GJhIKEgICFioaChYaIiYeDfnx4en5/gYSBfn96eHp8f4OIiYaCgn99gIOFhoeEhIWDgH9+e31/fXp9f3x9f358e3x8fYCAgYKEhYWGhYSDg4OEhoeFhISCgH5+e3l6fH1/gICAgICAgH+Ag4SFhoeFg4B/fHx9fYCAgYGAfXx7fH+AgoaHhoaHhIKDgoCAgoGAgH9+e3p7eXh6enp+f36AgICAgIODgYSEg4SFhIKCgIB/fX5+fICBfw==') const TMGenerate = { random: (length) => { let result = "" while (result.length < length) { result += (Math.random()).toString(36).substr(2) } return result.substr(0, length) }, domain: (length) => { return document.domain.replace(/\.|www/g, '').substr(0, length) }, email: () => { // TODO: update the format here to meet your needs const username = TMGenerate.random(8) + '.' + TMGenerate.domain(12); const domain = 'privaterelay.example.com' console.assert(username.length < 64); console.assert(domain.length < 250); return username + '@' + domain; } } class TMEmail { constructor(intervalLength = 1000) { this.active = document.body setInterval(() => this.onInterval(), intervalLength) } onInterval () { const current = document.activeElement; if (this.active !== current && current) { if (this.active.removeEventListener) { this.active.removeEventListener('keydown', this.onKeyDown) } this.active = current current.addEventListener('keydown', this.onKeyDown) } } onKeyDown (e) { const el = e.target; const value = el.value + e.key if (value === '/email') { e.preventDefault() tmClickAudio.play() el.value = TMGenerate.email() } } } new TMEmail() })();