aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package.json4
-rw-r--r--scripts/add-crowdin-contributors.ts1014
-rw-r--r--src/api/apiBase.ts10
-rw-r--r--src/api/server/ServerApi.ts6
-rw-r--r--src/api/utils/auth.ts10
-rw-r--r--src/components/auth/Invite.js8
-rw-r--r--src/components/auth/Locked.js20
-rw-r--r--src/components/auth/Password.js24
-rw-r--r--src/components/auth/Welcome.jsx7
-rw-r--r--src/components/services/content/ServiceView.js38
-rw-r--r--src/components/settings/account/AccountDashboard.js2
-rw-r--r--src/components/settings/recipes/RecipesDashboard.jsx4
-rw-r--r--src/components/settings/services/EditServiceForm.js4
-rw-r--r--src/components/ui/ColorPickerInput.tsx15
-rw-r--r--src/components/ui/FullscreenLoader/index.js2
-rw-r--r--src/components/ui/loader/index.tsx4
-rw-r--r--src/components/ui/select/index.tsx4
-rw-r--r--src/components/ui/textarea/index.tsx4
-rw-r--r--src/components/ui/wrapper/index.tsx4
-rw-r--r--src/containers/auth/LoginScreen.tsx5
-rw-r--r--src/containers/auth/SignupScreen.tsx5
-rw-r--r--src/electron/ipc-api/autoUpdate.ts2
-rw-r--r--src/electron/ipc-api/languageDetect.ts4
-rw-r--r--src/electron/ipc-api/localServer.ts7
-rw-r--r--src/electron/ipc-api/sessionStorage.ts4
-rw-r--r--src/electron/windowUtils.ts5
-rw-r--r--src/features/basicAuth/mainIpcHandler.ts4
-rw-r--r--src/features/publishDebugInfo/Component.js20
-rw-r--r--src/features/publishDebugInfo/index.ts4
-rw-r--r--src/features/quickSwitch/index.ts4
-rw-r--r--src/features/serviceProxy/index.ts4
-rw-r--r--src/features/todos/preload.ts4
-rw-r--r--src/features/workspaces/actions.ts2
-rw-r--r--src/features/workspaces/api.ts4
-rw-r--r--src/features/workspaces/components/EditWorkspaceForm.js5
-rw-r--r--src/features/workspaces/store.js4
-rw-r--r--src/helpers/array-helpers.ts8
-rw-r--r--src/helpers/url-helpers.ts7
-rw-r--r--src/helpers/validation-helpers.ts2
-rw-r--r--src/i18n/translations.ts2
-rw-r--r--src/internal-server/app/Controllers/Http/RecipeController.js12
-rw-r--r--src/internal-server/app/Controllers/Http/ServiceController.js8
-rw-r--r--src/internal-server/app/Controllers/Http/StaticController.js8
-rw-r--r--src/internal-server/app/ImageHelper.js9
-rw-r--r--src/internal-server/start.ts17
-rw-r--r--src/internal-server/start/routes.js12
-rw-r--r--src/jsUtils.ts2
-rw-r--r--src/lib/Tray.js10
-rw-r--r--src/preload-safe-debug.ts12
-rw-r--r--src/stores/SettingsStore.ts1
-rw-r--r--src/webview/dialogTitle.ts4
-rw-r--r--test/helpers/update-helpers.test.ts5
52 files changed, 1226 insertions, 164 deletions
diff --git a/package.json b/package.json
index 185bea0a2..7de866dbc 100644
--- a/package.json
+++ b/package.json
@@ -26,8 +26,8 @@
26 "dev": "cross-env NODE_ENV=development gulp dev", 26 "dev": "cross-env NODE_ENV=development gulp dev",
27 "test": "jest", 27 "test": "jest",
28 "test:watch": "jest --watch", 28 "test:watch": "jest --watch",
29 "lint": "eslint \"{src,test,scripts}/**/*.{js,jsx,ts,tsx}\" --quiet", 29 "lint": "npx eslint \"{src,test,scripts}/**/*.{js,jsx,ts,tsx}\"",
30 "lint:fix": "npm run lint -- --fix", 30 "lint:fix": "npx eslint --fix \"{src,test,scripts}/**/*.{js,jsx,ts,tsx}\"",
31 "extract": "formatjs extract \"src/**/*.{js,jsx,ts,tsx}\" --out-file temp.json --flatten --id-interpolation-pattern '[sha512:contenthash:base64:6]' --preserve-whitespace", 31 "extract": "formatjs extract \"src/**/*.{js,jsx,ts,tsx}\" --out-file temp.json --flatten --id-interpolation-pattern '[sha512:contenthash:base64:6]' --preserve-whitespace",
32 "compile": "formatjs compile \"temp.json\" --out-file src/i18n/locales/en-US.json", 32 "compile": "formatjs compile \"temp.json\" --out-file src/i18n/locales/en-US.json",
33 "manage-translations": "npm run extract && npm run compile && rimraf temp.json", 33 "manage-translations": "npm run extract && npm run compile && rimraf temp.json",
diff --git a/scripts/add-crowdin-contributors.ts b/scripts/add-crowdin-contributors.ts
index 7c1a364cb..d6f36b06d 100644
--- a/scripts/add-crowdin-contributors.ts
+++ b/scripts/add-crowdin-contributors.ts
@@ -54,12 +54,1014 @@ console.log(JSON.stringify(members));
54 * Please check if the generated data is ok and no data is lost. 54 * Please check if the generated data is ok and no data is lost.
55*/ 55*/
56const list: any[] = [ 56const list: any[] = [
57 {"name":"vantezzen_","login":"vantezzen_","avatar_url":"https://www.gravatar.com/avatar/378102e0ed444ba441ebc2748bba97cc"},{"name":"Makazzz","login":"Makazzz","avatar_url":"https://www.gravatar.com/avatar/c41a64846c4ffb3516a721c533d91edb"},{"name":"kytwb","login":"kytwb","avatar_url":"https://www.gravatar.com/avatar/acfa8cdc7dc7408f88d72e9c8e33bfe8"},{"name":"Nikita Bibanaev","login":"nicky18013","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13468928/small/2b31e7ac19645d950a79b33ffd5721b8.png"},{"name":"Tatjana1998","login":"Tatjana1998","avatar_url":"https://www.gravatar.com/avatar/ade202a04fcbb2c177e4f1d9936af29e"},{"name":"Ali M. Shiple","login":"Ali_Shiple","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/12895436/small/00917d09ca1b4b6d8e0ef36af07ecf6b.jpg"},{"name":"Koen","login":"keunes","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13018172/small/829115c606347b10218f34c637a2100c.png"},{"name":"tinect","login":"tinect","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/12521988/small/56c2041645746af9e51dd28782b828c3.jpeg"},{"name":"elviseras","login":"elviseras","avatar_url":"https://www.gravatar.com/avatar/25c2cf0d8cb4a4141e71c3b8a2e9324f"},{"name":"Leandro Gehlen","login":"leandrogehlen","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14099621/small/1d9503523839c310dbce0af3c226e894.jpeg"},{"name":"Matthieu42","login":"Matthieu42","avatar_url":"https://www.gravatar.com/avatar/735217ccccf11ba97573deee517ddb19"},{"name":"zutt","login":"zutt","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13320003/small/50fdf9f8c7e54a446925bd79696ea625.JPG"},{"name":"Wonsup Yoon","login":"Pusnow","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13514833/small/65f0b45587cc7e34f2827830cd324b16.jpeg"},{"name":"J370","login":"J370","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14141203/small/7b12b5db419d8796450221c2eaaf6003.png"},{"name":"n0emis","login":"n0emis","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14150321/small/941bf09bd6c413d91d780f948f4359a9.png"},{"name":"ChTBoner","login":"ChTBoner","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13273153/small/a810886febf5199cfa1c98644444dea7.jpeg"},{"name":"127oo1","login":"127oo1","avatar_url":"https://www.gravatar.com/avatar/060c722be11da16ae31902e9c98326b2"},{"name":"Johan Engstrand","login":"johanengstrand","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14152801/small/fd395f120efca971ca9b34c57fd02cca.png"},{"name":"peq42_","login":"peq42","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14155811/small/b62a94dde7ec29948ec6a6af9fd24b1d.png"},{"name":"mazzo98","login":"mazzo98","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/12864917/small/69799b5fd7be2f67282715d5cdfd4ae1.png"},{"name":"Pumbinha","login":"karlinhos","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14161139/small/96450eb44c22b3141ab4401e547109b8.png"},{"name":"AndiLeni","login":"AndiLeni","avatar_url":"https://www.gravatar.com/avatar/4bd0da860de38afa735425ce2d4e10b5"},{"name":"SMile61","login":"SMile61","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14177585/small/1bb4f6ba39bff3df8f579e61460ce016.png"},{"name":"Edilson Alzemand Sigmaringa Junior","login":"Alzemand","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14184269/small/f5e68247f01988ae7951a282f0fd4d06.jpeg"},{"name":"Bruno Almada","login":"brunofalmada","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14200540/small/f6f1addceeeabc02488f9b08520a902f.jpeg"},{"name":"MAT-OUT","login":"MAT-OUT","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14201550/small/68dd2402bf2879bc3ca312d627710400.png"},{"name":"tristanplouz","login":"tristanplouz","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13811893/small/e2a4758c57fddfdf85d23ec59d0c28a7.png"},{"name":"Catarino Gonçalo","login":"Catarino","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14208802/small/07287eb2de671257ca3d6bb4ba1cca67.jpeg"},{"name":"paprika-naught-tiffin-flyspeck","login":"paprika-naught-tiffin-flyspeck","avatar_url":"https://www.gravatar.com/avatar/8671ebe7a7164dfa7624fbdbff69ed96"},{"name":"Abderrahim Tantaoui","login":"abdoutanta","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14213908/small/5b2fc8166f8a0a2b7313fbf49ee5b6b6.jpeg"}, 57 {
58 {"name":"xrup","login":"xrup","avatar_url":"https://www.gravatar.com/avatar/9e65aa6d4db623146ec4c571db081a6d"},{"name":"Serhiy Dmytryshyn","login":"dies","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/1/small/e84bcdf6c084ffd52527931f988fb410.png"},{"name":"Patrick Valle","login":"patrickvalle","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14217484/small/8b73f313ee79fe33625e819cdac86551.jpg"},{"name":"2bdelghafour","login":"2bdelghafour","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14219410/small/31ff20f60d352fb46e314f3c180a77b0.jpeg"},{"name":"daedgoco","login":"daedgoco","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14233276/small/8823401d22f9ae6865925e4f20eb15e1.png"},{"name":"Adrià Solé","login":"adria.soce","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14234338/small/6dc05d89e672bd624e9e37253f852b77.jpeg"},{"name":"Enderson Menezes","login":"endersonmenezes","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14234572/small/384477b34fae0a3f98f386cc658b9494.jpeg"},{"name":"ali","login":"Ali-Alqazwini","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14236770/small/328f8ae5f996f60bb2c174a9f8f808ec.jpeg"},{"name":"Marton Nagy","login":"martonnagy","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14243516/small/54af6111fd1260698f1b6d187245e074.jpeg"},{"name":"Edson Manuel Carballo Vera","login":"edsonmanuelcarballovera","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14244460/small/28a9b867da8e2b92904d79348cb39a55.jpeg"},{"name":"alby.grassi","login":"xelio_91_","avatar_url":"https://www.gravatar.com/avatar/47a0291b35c0031ad0fee6b7cf717728"},{"name":"Vasilis Moschopoulos","login":"mos.vasilis","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14266920/small/47c551cf2f468d43a4449a74d8134cc0.jpg"},{"name":"crystyanalencar","login":"crystyanalencar","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14289028/small/288f15e47856de74b8fdda14ed8d9b69.png"},{"name":"larsmagnusherland","login":"larsmagnusherland","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13219280/small/424b39a9b0f10a08f63eb1aaea1ba180.png"},{"name":"GPMartins","login":"GPMartins","avatar_url":"https://www.gravatar.com/avatar/b0d3d14cd9dddfbde33ebbb8ec93b997"},{"name":"Michelangelo Amoruso Manzari","login":"MosciolaroMike","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14312004/small/06d41030406626131151993d08164756.jpeg"},{"name":"Nicoló Castellini","login":"nicolo.castellini","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14315116/small/e28f5f575b7cac2e62ad38dbeefa287d.jpeg"},{"name":"Valentin","login":"ValleBL","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14316376/small/10e3598076d2bc111c4377633cf5a77c.jpeg"},{"name":"Joshua","login":"Jashnok","avatar_url":"https://www.gravatar.com/avatar/f9d8eedb517530409b8dd9415b29ae74"},{"name":"Muletto Honor","login":"mulettohonor","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14320218/small/31446d0a50fe681a174dcfce6ccb863b.jpg"},{"name":"Xavier Cho","login":"mysticfall","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14325066/small/ea4c81f6e5a2320d077679986808e618.jpeg"},{"name":"borntzal","login":"borntzal","avatar_url":"https://www.gravatar.com/avatar/b9fe7367a9c911e427a22f5214732e4d"},{"name":"Norbert Kőhegyi","login":"mahoganypinewood","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14342206/small/3de2d02f113a1950869a38970ce550db.jpg"},{"name":"Edgars","login":"eandersons","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13356613/small/d25f02bc7a75913ce9a11d3c61be6477.png"},{"name":"César Noguerol","login":"cnoguerol","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14371498/small/77c91c1552d0303285eee49a7233bb2a.jpeg"},{"name":"JinSang Park","login":"pjs21s","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14377502/small/f64299e436a34afa05cab3827a0c8b11.jpeg"},{"name":"Tiago Carreira","login":"tcarreira","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14378030/small/e3cf7bb00b6a1711dab58c59ea04cee3.jpeg"},{"name":"Huan Tran","login":"huantrg","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14394210/small/ac7208150dfb9196ce6a494390bdfa51.jpeg"},{"name":"maximax","login":"maximax","avatar_url":"https://www.gravatar.com/avatar/a537523faffbbf55a0f39471143c3264"},{"name":"João Inácio (birobirobiro)","login":"birobirobiro) (birobirobiro","avatar_url":"https://www.gravatar.com/avatar/2ea06a80ecd7e4a34acfa43cfa01fa25"}, 58 name: 'vantezzen_',
59 {"name":"Mads Marquart","login":"madsmtm","avatar_url":"https://www.gravatar.com/avatar/6530353d838d771ace9f240d0085a197"},{"name":"Jan Hohner","login":"janhohner","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13631076/small/9d576fac4ca3c354e809db5f831af1b8.jpeg"},{"name":"Peter L.","login":"pludi","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14038315/small/22f4df26f65181a7d3a9de773d11315d.png"},{"name":"Alberto González","login":"algonrey","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14446576/small/e2423064f8b64e4d91eb1d26d1c9e3ed.png"},{"name":"mganovelli","login":"mganovelli","avatar_url":"https://www.gravatar.com/avatar/73572bf6ada06e0a31902a679231d339"},{"name":"Dvir M","login":"dvirmalka","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14451536/small/e724aa43f781c935e408be99e679fe5e.jpg"},{"name":"Daniel Brandobur","login":"Emilio_D","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14452294/small/13b5c161612a2f366078b563e9f5e08b.png"},{"name":"totoderek","login":"totoyeah","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14465378/small/234131e24d58cb37ca87aea532d3d347.png"},{"name":"Kevin Cabrera","login":"kev.cabrerar","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14471950/small/383c6a879a45001c36228e17e2d81090.png"},{"name":"Hugo Santos","login":"hugosantosmobile","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14477058/small/e8a048695e4de818fdf1e3e1326d14c4.png"},{"name":"Søren Berg Glasius","login":"sbglasius","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14480260/small/9643f9f295172a5a9959209eee3999bd.png"},{"name":"mustbedreaming","login":"mustbedreaming","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14482836/small/32bf7ac73042f53cb9b7c82c57023ddb.png"},{"name":"Germain Carré","login":"Carsso","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/12353537/small/d9567780a35d1e674cf47a69c301b0c4.png"},{"name":"Dominik Bullo","login":"dominikbullo","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14494704/small/1debb3d67c6ad7d7f45f0b7a38eb21a7.jpeg"},{"name":"Gonzalo Pérez","login":"gonperezramirez","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14504898/small/4f20dd9bbc823c78568eb6f1cfb2aeb9.jpeg"},{"name":"Carlescampins","login":"Carlescampins","avatar_url":"https://www.gravatar.com/avatar/b84ccc92d132102110b7aec628f47b6a"},{"name":"Cristiano Verondini","login":"cverond","avatar_url":"https://www.gravatar.com/avatar/70e4384a871e45743f26bdcc21303c56"},{"name":"אליה הלל","login":"eliyahillel","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14367648/small/834d1cf668a6ca97b2c66093019b5991.jpeg"},{"name":"Samuel Francois Köhler","login":"sfkmk","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14541090/small/f0a810349778c46b7572301340b471e8.jpeg"},{"name":"Bartel","login":"Letrab","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14544608/small/91c226dbb12aa1067e294cd5c4332ae1.png"},{"name":"Alexandre Martins","login":"alexmartins","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14544796/small/e3c922101c1ceb7c7a6b7bd165a15d98.jpeg"},{"name":"Jari Myrskykari","login":"jartsa","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14080739/small/6dadf0a40522a0e918f746f2b32e6c27.jpg"},{"name":"Uğurcan Sayan","login":"ugurcansayan","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13023570/small/96cfec0b4d18e4b26b59dfeeaa369cf6.jpg"},{"name":"Alex","login":"nasmi3","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14563170/small/072d3aadc3866c16ed1a5b5082e81f26.png"},{"name":"Nikola Mitić","login":"n-mitic","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14588102/small/5f8b6b73c8d583e6b424607470c09cb7.jpeg"},{"name":"fawkulce","login":"fawkulce","avatar_url":"https://www.gravatar.com/avatar/9004e98cd5e707875b3dd9268214a664"},{"name":"Glenac","login":"Glenac","avatar_url":"https://www.gravatar.com/avatar/080652c67697630c9885a1157ad8a360"},{"name":"Victorious","login":"victoriousnathan55","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14319626/small/120632761f7821f4cbfdac046086b6e7.jpeg"},{"name":"Raoul Molai","login":"raoul-m","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13238611/small/2906ff4c9e8704be8cb86d1b1cb124b1.jpg"},{"name":"Nathanaël","login":"nathanaelhoun","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14628456/small/7c0f5919fba56edfddf08bf715039f75.jpeg"}, 59 login: 'vantezzen_',
60 {"name":"Laurentiu Radu","login":"radulaurentiu","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14631958/small/c3a0112e9eb596f0a54cdebf5d99b82a.jpg"},{"name":"GiacomoGuaresi","login":"GiacomoGuaresi","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14659702/small/12e79e3fc332762058ee525a95b72447.jpeg"},{"name":"Hung Nguyen","login":"cohedz","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14664150/small/18ae8a7eaa36ba6202fa43eedd84b8d2.jpg"},{"name":"Facundo Saravia","login":"facundo_ingenia","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14672204/small/eaf2caaff3d2851fabb3d74f76d0542e.png"},{"name":"Lefebvre Saboya","login":"llsaboya","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14682462/small/ee313d9b222ea3d1f10bd337d6cb6fce.jpeg"},{"name":"beez276","login":"beez276","avatar_url":"https://www.gravatar.com/avatar/4a5e7e0b13e365d0783e480ddff338fc"},{"name":"namu","login":"namu","avatar_url":"https://www.gravatar.com/avatar/ddf44bc1e0a05ca46fa9b81f1f916f15"},{"name":"Kaue Lima","login":"kauelima","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13054953/small/3319b5f15e0452b664f94e632d51276e.jpeg"},{"name":"AlexDep","login":"AlexDep","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14705362/small/ba978b0356a94767dc79441c70aee964.png"},{"name":"Nguyễn Tấn Lợi","login":"tanloibdp","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14736534/small/42b4da2ca619a6517adbb38bc60c7e5c.jpeg"},{"name":"Alex Widén","login":"vovven","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14748884/small/9829dddc625adca8d20e9687f40f009e.jpeg"},{"name":"amin_tado","login":"amin_tado","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/12875002/small/fea4dcbf0c1e15743c467d0e152e43d9.jpg"},{"name":"Rintan","login":"Rintan","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/12710633/small/bd1081c95585021cb9862a5f9d1756ec.png"},{"name":"Nesswit","login":"rishubil","avatar_url":"https://www.gravatar.com/avatar/4943e03e0f0cf28d12fbc98064b3f244"},{"name":"Elia De Togni","login":"AmazingClaymore","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14812758/small/a9f623f45c833c7ba7f04cf2962f3793.png"},{"name":"zkm3f","login":"zkm3f","avatar_url":"https://www.gravatar.com/avatar/2c79623d62d2bb36b31883abd5b08a12"},{"name":"Sebastian Jasiński","login":"PrinceNorris","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13962625/small/552e23414407b34f8f67db5ea49a5604.png"},{"name":"MoaufmKlo","login":"MoaufmKlo","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13720247/small/e01249ad9a091fda233cfaec0774c1fc.png"},{"name":"Marcos Orso","login":"marcosorso","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14830692/small/0550fa339b76765dd8b200afabd43b0a.jpeg"},{"name":"Nice Brown","login":"popdisk","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14844316/small/5a12669ef15f26b6c53a5d5afe38a6b3.jpeg"},{"name":"Loremed","login":"Loremed","avatar_url":"https://www.gravatar.com/avatar/76d86c860fa5bdc1694ff9c7dc9778fb"},{"name":"yarinShapira","login":"yarinShapira","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14845706/small/abf9ec9309f40dfcb01eae2c8fca02fb.png"},{"name":"Christopher Coss","login":"Kissadere","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/12721969/small/8feaec1d16dd268e5ec29204a6e1d080.jpg"},{"name":"Buğra Çağlar","login":"portakalimsi","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13990869/small/a4e0b16904126d8e0d014d952f4bc1b6.jpeg"},{"name":"sobeitnow0","login":"sobeitnow0","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14738292/small/727b33d7bd2ca021cf85b788c6cee9d1.jpeg"},{"name":"Muhammad Zahiruddin","login":"dinzahir99","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/12732934/small/cae45ad9864def2074b1e3c35efce683.png"},{"name":"Aninus Partikler","login":"aninuscsalas","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14358620/small/7f3849dd7ea25ac874fac1986810e329.png"},{"name":"Wellington Melo","login":"wellingtonsmelo.android","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14888906/small/8d128e54285cac52c0e50e53d4691c82.jpeg"},{"name":"miangou","login":"miangou","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14891930/small/78e766643ac488bebc490ecf4677c0c9.jpeg"},{"name":"Store","login":"HelaBasa","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13976107/small/ab4177e8d90665d4603e548488d15c68.jpg"}, 60 avatar_url:
61 {"name":"technowhizz","login":"technowhizz","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14897978/small/2d2a416e423758dd52a3dd0f657fdf0c.jpeg"},{"name":"Trần Lê Quốc Huy","login":"LucasMasrider","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14613056/small/090933fb64948358fa226ad830de2b21.jpg"},{"name":"Maciej Błędkowski","login":"mble","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14273256/small/7df80579990a9d9e3cf672d04b372297.jpeg"},{"name":"d3ward","login":"d3ward","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13781643/small/bf617deeeba0d2efafef223ddb1c3c03.png"},{"name":"Vijay Raghavan Aravamudhan","login":"vraravam","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14890780/small/8a0a5ed688ff21711a832f39ac0481b6.jpeg"},{"name":"Markus Hatvan","login":"mhatvan","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14921973/small/98e0bce9af5f4d851630831d866262d2.jpeg"},{"name":"amyaan","login":"amyaan","avatar_url":"https://www.gravatar.com/avatar/eac6ef8c854035fa9af245f866da0a42"},{"name":"Fred William Torno Junior","login":"fredwilliamtjr","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14932371/small/e694cada2c8fd7924162e1badcc6af3f.png"},{"name":"José Luis Bandala Pérez","login":"luis449bp","avatar_url":"https://www.gravatar.com/avatar/e7dbf284ff40c3c32845e1b95d257c61"},{"name":"gurbii","login":"gurbii","avatar_url":"https://www.gravatar.com/avatar/bedbdd12dbf6df0abed084a7f6efe772"},{"name":"Luiz Henrique","login":"13luizhenrique","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13926183/small/d20b071be813e20efa3a121bc2658989.png"},{"name":"Clément Biron","login":"clementbiron","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14951127/small/a95b2d3ff6d1b64bf0d75d561e025ec6.png"},{"name":"ttxsyqz","login":"ttxsyqz","avatar_url":"https://www.gravatar.com/avatar/8913ba1176abfc32fa2021a8ec683511"},{"name":"Janne Salmi","login":"BluePantherFIN","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14958709/small/f32c96756fb16350385ea3dee38626f7.jpeg"},{"name":"TheRedLadybug62","login":"TheRedLadybug62","avatar_url":"https://www.gravatar.com/avatar/4b1fdb0a13f1bdf2bbfda46e9d78f2d0"},{"name":"曹恩逢","login":"SiderealArt","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/12960382/small/efd52e2c41be32bfd52569ac15d228b7.jpg"},{"name":"Martin Jakobsson","login":"jakobsson0","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14965633/small/6195809f0df9712fd7d4248d33cc846c.png"},{"name":"Guus","login":"Guus","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/12495264/small/eb334ff402b0b9bf49493bfce968399d.png"},{"name":"peterpacket","login":"peterpacket","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14970427/small/da8ab2c6b80d2c06a3b9094e53b94db9.jpeg"},{"name":"ogghi","login":"ogghi","avatar_url":"https://www.gravatar.com/avatar/59e381507a01e1c8cf58d2521260c0e1"},{"name":"Vladimir Studinsky","login":"studinsky","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13280232/small/4dd03819450e266c9b42a7eff880f9dc.jpg"},{"name":"János Benjamin Antal","login":"antaljanosbenjamin","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14982759/small/174144d1761e4b9f8e50353b4dbca8d1.jpeg"},{"name":"Oğuzhan K","login":"oguzhankara34","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14989979/small/a404ab91595a7c5cf02854477ac4c559.jpeg"},{"name":"Ben Naylor","login":"b_n","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14999083/small/00ae25b0d879d7578ca2d3c8c9a0c038.jpeg"},{"name":"Martin Bernát","login":"martinbernat","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15000137/small/d6b368ed785d157f6e2105c64a7fe37b.png"},{"name":"Ignacio Castro","login":"ignaciocastro","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14239666/small/ac376ab1a3f35722ab4a153b26ee881a.jpeg"},{"name":"Niklas Lagström","login":"lagstrom","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15030387/small/329d60a44b8deba42c825e2dc1a9e7a0.jpeg"},{"name":"Greivin Cordoncillo Romero","login":"jatatox","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15031761/small/6482c4317b9aa45d3e61ef82eb77b48a.jpeg"},{"name":"Ovidiu Gherman","login":"gherman.ovidiu.ionut","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15031877/small/2ccf7f461f67f226b58260e459802848.jpeg"},{"name":"Eryk Lewandowski","login":"erykosky","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15041515/small/43f0bd10f84bf785654f3412f2215df9.png"}, 61 'https://www.gravatar.com/avatar/378102e0ed444ba441ebc2748bba97cc',
62 {"name":"방현수","login":"natas999","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14401308/small/e0d6f0cdc5114be795273e5b690f0896.jpeg"},{"name":"MyUncleSam","login":"MyUncleSam","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15046019/small/d48a41a2a7e2d205dbe3316cd834dfb6.jpeg"},{"name":"Vladyslav Samotoi","login":"mcwladkoe","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/12996072/small/be802e915089a812d93e676674c9454f.png"},{"name":"Vyacheslav Malashin","login":"vyacheslav_malashin","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15062315/small/397445945985e829703b1fe3e4f4ccf4.JPG"},{"name":"Chatos Kuntakinte","login":"chatoskuntakinte","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15062523/small/acb7763df860ca67fe30dbafcf9e31e0.png"},{"name":"Juha Köpman","login":"e0f","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14443460/small/fda983d878c8cd64f9224d2c27a2a56c.jpg"},{"name":"AiOO","login":"AiOO","avatar_url":"https://www.gravatar.com/avatar/f39fe4e7e61f4aea84e369b5f9d9c2f6"},{"name":"Ibra AF","login":"musyawaroh123","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13583172/small/f3e47a6f884ad97a5a8d354f0fe5a853.jpg"},{"name":"Rebecca Wendhausen","login":"bekwendhausen","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15085045/small/3afbce411d873055baca51f69d3bfd8c.png"},{"name":"David Astillero Pérez","login":"dastillero","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14935695/small/abf96cf0a2ccb90f0ffbd7ffad4bf6f0.jpeg"},{"name":"mscythe","login":"mscythe","avatar_url":"https://www.gravatar.com/avatar/f5c7d39046e60be1692b03d09624a49e"},{"name":"Jean-Pierre MÉRESSE","login":"Jipem","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15101883/small/56a810446c7f1b7bfd566825bdf38f97.png"},{"name":"咸粽子","login":"XianZongzi","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/13898579/small/a62e017825193da284eb84b7a318f6b7_default.png"},{"name":"Barkın Arga","login":"barkinarga","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/12813629/small/44d528df52ccd5972d167835ace78078.jpg"},{"name":"Santiago","login":"Droidnius","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/14790068/small/2d824af4ac6a1f41f82b24020409ae44.jpg"},{"name":"Kentai Radiquum","login":"Radiquum","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15166222/small/bb762aa8ef3fcac773487ef3ef8708ce.jpeg"},{"name":"Mehmet Can","login":"bymcs","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15166456/small/c4d6a35eb95112121b167386c044967d.png"},{"name":"banhetom","login":"banhetom","avatar_url":"https://crowdin-static.downloads.crowdin.com/avatar/15203804/small/b8dbe2bfd68c749f7965f39ede727882.png"} 62 },
63 {
64 name: 'Makazzz',
65 login: 'Makazzz',
66 avatar_url:
67 'https://www.gravatar.com/avatar/c41a64846c4ffb3516a721c533d91edb',
68 },
69 {
70 name: 'kytwb',
71 login: 'kytwb',
72 avatar_url:
73 'https://www.gravatar.com/avatar/acfa8cdc7dc7408f88d72e9c8e33bfe8',
74 },
75 {
76 name: 'Nikita Bibanaev',
77 login: 'nicky18013',
78 avatar_url:
79 'https://crowdin-static.downloads.crowdin.com/avatar/13468928/small/2b31e7ac19645d950a79b33ffd5721b8.png',
80 },
81 {
82 name: 'Tatjana1998',
83 login: 'Tatjana1998',
84 avatar_url:
85 'https://www.gravatar.com/avatar/ade202a04fcbb2c177e4f1d9936af29e',
86 },
87 {
88 name: 'Ali M. Shiple',
89 login: 'Ali_Shiple',
90 avatar_url:
91 'https://crowdin-static.downloads.crowdin.com/avatar/12895436/small/00917d09ca1b4b6d8e0ef36af07ecf6b.jpg',
92 },
93 {
94 name: 'Koen',
95 login: 'keunes',
96 avatar_url:
97 'https://crowdin-static.downloads.crowdin.com/avatar/13018172/small/829115c606347b10218f34c637a2100c.png',
98 },
99 {
100 name: 'tinect',
101 login: 'tinect',
102 avatar_url:
103 'https://crowdin-static.downloads.crowdin.com/avatar/12521988/small/56c2041645746af9e51dd28782b828c3.jpeg',
104 },
105 {
106 name: 'elviseras',
107 login: 'elviseras',
108 avatar_url:
109 'https://www.gravatar.com/avatar/25c2cf0d8cb4a4141e71c3b8a2e9324f',
110 },
111 {
112 name: 'Leandro Gehlen',
113 login: 'leandrogehlen',
114 avatar_url:
115 'https://crowdin-static.downloads.crowdin.com/avatar/14099621/small/1d9503523839c310dbce0af3c226e894.jpeg',
116 },
117 {
118 name: 'Matthieu42',
119 login: 'Matthieu42',
120 avatar_url:
121 'https://www.gravatar.com/avatar/735217ccccf11ba97573deee517ddb19',
122 },
123 {
124 name: 'zutt',
125 login: 'zutt',
126 avatar_url:
127 'https://crowdin-static.downloads.crowdin.com/avatar/13320003/small/50fdf9f8c7e54a446925bd79696ea625.JPG',
128 },
129 {
130 name: 'Wonsup Yoon',
131 login: 'Pusnow',
132 avatar_url:
133 'https://crowdin-static.downloads.crowdin.com/avatar/13514833/small/65f0b45587cc7e34f2827830cd324b16.jpeg',
134 },
135 {
136 name: 'J370',
137 login: 'J370',
138 avatar_url:
139 'https://crowdin-static.downloads.crowdin.com/avatar/14141203/small/7b12b5db419d8796450221c2eaaf6003.png',
140 },
141 {
142 name: 'n0emis',
143 login: 'n0emis',
144 avatar_url:
145 'https://crowdin-static.downloads.crowdin.com/avatar/14150321/small/941bf09bd6c413d91d780f948f4359a9.png',
146 },
147 {
148 name: 'ChTBoner',
149 login: 'ChTBoner',
150 avatar_url:
151 'https://crowdin-static.downloads.crowdin.com/avatar/13273153/small/a810886febf5199cfa1c98644444dea7.jpeg',
152 },
153 {
154 name: '127oo1',
155 login: '127oo1',
156 avatar_url:
157 'https://www.gravatar.com/avatar/060c722be11da16ae31902e9c98326b2',
158 },
159 {
160 name: 'Johan Engstrand',
161 login: 'johanengstrand',
162 avatar_url:
163 'https://crowdin-static.downloads.crowdin.com/avatar/14152801/small/fd395f120efca971ca9b34c57fd02cca.png',
164 },
165 {
166 name: 'peq42_',
167 login: 'peq42',
168 avatar_url:
169 'https://crowdin-static.downloads.crowdin.com/avatar/14155811/small/b62a94dde7ec29948ec6a6af9fd24b1d.png',
170 },
171 {
172 name: 'mazzo98',
173 login: 'mazzo98',
174 avatar_url:
175 'https://crowdin-static.downloads.crowdin.com/avatar/12864917/small/69799b5fd7be2f67282715d5cdfd4ae1.png',
176 },
177 {
178 name: 'Pumbinha',
179 login: 'karlinhos',
180 avatar_url:
181 'https://crowdin-static.downloads.crowdin.com/avatar/14161139/small/96450eb44c22b3141ab4401e547109b8.png',
182 },
183 {
184 name: 'AndiLeni',
185 login: 'AndiLeni',
186 avatar_url:
187 'https://www.gravatar.com/avatar/4bd0da860de38afa735425ce2d4e10b5',
188 },
189 {
190 name: 'SMile61',
191 login: 'SMile61',
192 avatar_url:
193 'https://crowdin-static.downloads.crowdin.com/avatar/14177585/small/1bb4f6ba39bff3df8f579e61460ce016.png',
194 },
195 {
196 name: 'Edilson Alzemand Sigmaringa Junior',
197 login: 'Alzemand',
198 avatar_url:
199 'https://crowdin-static.downloads.crowdin.com/avatar/14184269/small/f5e68247f01988ae7951a282f0fd4d06.jpeg',
200 },
201 {
202 name: 'Bruno Almada',
203 login: 'brunofalmada',
204 avatar_url:
205 'https://crowdin-static.downloads.crowdin.com/avatar/14200540/small/f6f1addceeeabc02488f9b08520a902f.jpeg',
206 },
207 {
208 name: 'MAT-OUT',
209 login: 'MAT-OUT',
210 avatar_url:
211 'https://crowdin-static.downloads.crowdin.com/avatar/14201550/small/68dd2402bf2879bc3ca312d627710400.png',
212 },
213 {
214 name: 'tristanplouz',
215 login: 'tristanplouz',
216 avatar_url:
217 'https://crowdin-static.downloads.crowdin.com/avatar/13811893/small/e2a4758c57fddfdf85d23ec59d0c28a7.png',
218 },
219 {
220 name: 'Catarino Gonçalo',
221 login: 'Catarino',
222 avatar_url:
223 'https://crowdin-static.downloads.crowdin.com/avatar/14208802/small/07287eb2de671257ca3d6bb4ba1cca67.jpeg',
224 },
225 {
226 name: 'paprika-naught-tiffin-flyspeck',
227 login: 'paprika-naught-tiffin-flyspeck',
228 avatar_url:
229 'https://www.gravatar.com/avatar/8671ebe7a7164dfa7624fbdbff69ed96',
230 },
231 {
232 name: 'Abderrahim Tantaoui',
233 login: 'abdoutanta',
234 avatar_url:
235 'https://crowdin-static.downloads.crowdin.com/avatar/14213908/small/5b2fc8166f8a0a2b7313fbf49ee5b6b6.jpeg',
236 },
237 {
238 name: 'xrup',
239 login: 'xrup',
240 avatar_url:
241 'https://www.gravatar.com/avatar/9e65aa6d4db623146ec4c571db081a6d',
242 },
243 {
244 name: 'Serhiy Dmytryshyn',
245 login: 'dies',
246 avatar_url:
247 'https://crowdin-static.downloads.crowdin.com/avatar/1/small/e84bcdf6c084ffd52527931f988fb410.png',
248 },
249 {
250 name: 'Patrick Valle',
251 login: 'patrickvalle',
252 avatar_url:
253 'https://crowdin-static.downloads.crowdin.com/avatar/14217484/small/8b73f313ee79fe33625e819cdac86551.jpg',
254 },
255 {
256 name: '2bdelghafour',
257 login: '2bdelghafour',
258 avatar_url:
259 'https://crowdin-static.downloads.crowdin.com/avatar/14219410/small/31ff20f60d352fb46e314f3c180a77b0.jpeg',
260 },
261 {
262 name: 'daedgoco',
263 login: 'daedgoco',
264 avatar_url:
265 'https://crowdin-static.downloads.crowdin.com/avatar/14233276/small/8823401d22f9ae6865925e4f20eb15e1.png',
266 },
267 {
268 name: 'Adrià Solé',
269 login: 'adria.soce',
270 avatar_url:
271 'https://crowdin-static.downloads.crowdin.com/avatar/14234338/small/6dc05d89e672bd624e9e37253f852b77.jpeg',
272 },
273 {
274 name: 'Enderson Menezes',
275 login: 'endersonmenezes',
276 avatar_url:
277 'https://crowdin-static.downloads.crowdin.com/avatar/14234572/small/384477b34fae0a3f98f386cc658b9494.jpeg',
278 },
279 {
280 name: 'ali',
281 login: 'Ali-Alqazwini',
282 avatar_url:
283 'https://crowdin-static.downloads.crowdin.com/avatar/14236770/small/328f8ae5f996f60bb2c174a9f8f808ec.jpeg',
284 },
285 {
286 name: 'Marton Nagy',
287 login: 'martonnagy',
288 avatar_url:
289 'https://crowdin-static.downloads.crowdin.com/avatar/14243516/small/54af6111fd1260698f1b6d187245e074.jpeg',
290 },
291 {
292 name: 'Edson Manuel Carballo Vera',
293 login: 'edsonmanuelcarballovera',
294 avatar_url:
295 'https://crowdin-static.downloads.crowdin.com/avatar/14244460/small/28a9b867da8e2b92904d79348cb39a55.jpeg',
296 },
297 {
298 name: 'alby.grassi',
299 login: 'xelio_91_',
300 avatar_url:
301 'https://www.gravatar.com/avatar/47a0291b35c0031ad0fee6b7cf717728',
302 },
303 {
304 name: 'Vasilis Moschopoulos',
305 login: 'mos.vasilis',
306 avatar_url:
307 'https://crowdin-static.downloads.crowdin.com/avatar/14266920/small/47c551cf2f468d43a4449a74d8134cc0.jpg',
308 },
309 {
310 name: 'crystyanalencar',
311 login: 'crystyanalencar',
312 avatar_url:
313 'https://crowdin-static.downloads.crowdin.com/avatar/14289028/small/288f15e47856de74b8fdda14ed8d9b69.png',
314 },
315 {
316 name: 'larsmagnusherland',
317 login: 'larsmagnusherland',
318 avatar_url:
319 'https://crowdin-static.downloads.crowdin.com/avatar/13219280/small/424b39a9b0f10a08f63eb1aaea1ba180.png',
320 },
321 {
322 name: 'GPMartins',
323 login: 'GPMartins',
324 avatar_url:
325 'https://www.gravatar.com/avatar/b0d3d14cd9dddfbde33ebbb8ec93b997',
326 },
327 {
328 name: 'Michelangelo Amoruso Manzari',
329 login: 'MosciolaroMike',
330 avatar_url:
331 'https://crowdin-static.downloads.crowdin.com/avatar/14312004/small/06d41030406626131151993d08164756.jpeg',
332 },
333 {
334 name: 'Nicoló Castellini',
335 login: 'nicolo.castellini',
336 avatar_url:
337 'https://crowdin-static.downloads.crowdin.com/avatar/14315116/small/e28f5f575b7cac2e62ad38dbeefa287d.jpeg',
338 },
339 {
340 name: 'Valentin',
341 login: 'ValleBL',
342 avatar_url:
343 'https://crowdin-static.downloads.crowdin.com/avatar/14316376/small/10e3598076d2bc111c4377633cf5a77c.jpeg',
344 },
345 {
346 name: 'Joshua',
347 login: 'Jashnok',
348 avatar_url:
349 'https://www.gravatar.com/avatar/f9d8eedb517530409b8dd9415b29ae74',
350 },
351 {
352 name: 'Muletto Honor',
353 login: 'mulettohonor',
354 avatar_url:
355 'https://crowdin-static.downloads.crowdin.com/avatar/14320218/small/31446d0a50fe681a174dcfce6ccb863b.jpg',
356 },
357 {
358 name: 'Xavier Cho',
359 login: 'mysticfall',
360 avatar_url:
361 'https://crowdin-static.downloads.crowdin.com/avatar/14325066/small/ea4c81f6e5a2320d077679986808e618.jpeg',
362 },
363 {
364 name: 'borntzal',
365 login: 'borntzal',
366 avatar_url:
367 'https://www.gravatar.com/avatar/b9fe7367a9c911e427a22f5214732e4d',
368 },
369 {
370 name: 'Norbert Kőhegyi',
371 login: 'mahoganypinewood',
372 avatar_url:
373 'https://crowdin-static.downloads.crowdin.com/avatar/14342206/small/3de2d02f113a1950869a38970ce550db.jpg',
374 },
375 {
376 name: 'Edgars',
377 login: 'eandersons',
378 avatar_url:
379 'https://crowdin-static.downloads.crowdin.com/avatar/13356613/small/d25f02bc7a75913ce9a11d3c61be6477.png',
380 },
381 {
382 name: 'César Noguerol',
383 login: 'cnoguerol',
384 avatar_url:
385 'https://crowdin-static.downloads.crowdin.com/avatar/14371498/small/77c91c1552d0303285eee49a7233bb2a.jpeg',
386 },
387 {
388 name: 'JinSang Park',
389 login: 'pjs21s',
390 avatar_url:
391 'https://crowdin-static.downloads.crowdin.com/avatar/14377502/small/f64299e436a34afa05cab3827a0c8b11.jpeg',
392 },
393 {
394 name: 'Tiago Carreira',
395 login: 'tcarreira',
396 avatar_url:
397 'https://crowdin-static.downloads.crowdin.com/avatar/14378030/small/e3cf7bb00b6a1711dab58c59ea04cee3.jpeg',
398 },
399 {
400 name: 'Huan Tran',
401 login: 'huantrg',
402 avatar_url:
403 'https://crowdin-static.downloads.crowdin.com/avatar/14394210/small/ac7208150dfb9196ce6a494390bdfa51.jpeg',
404 },
405 {
406 name: 'maximax',
407 login: 'maximax',
408 avatar_url:
409 'https://www.gravatar.com/avatar/a537523faffbbf55a0f39471143c3264',
410 },
411 {
412 name: 'João Inácio (birobirobiro)',
413 login: 'birobirobiro) (birobirobiro',
414 avatar_url:
415 'https://www.gravatar.com/avatar/2ea06a80ecd7e4a34acfa43cfa01fa25',
416 },
417 {
418 name: 'Mads Marquart',
419 login: 'madsmtm',
420 avatar_url:
421 'https://www.gravatar.com/avatar/6530353d838d771ace9f240d0085a197',
422 },
423 {
424 name: 'Jan Hohner',
425 login: 'janhohner',
426 avatar_url:
427 'https://crowdin-static.downloads.crowdin.com/avatar/13631076/small/9d576fac4ca3c354e809db5f831af1b8.jpeg',
428 },
429 {
430 name: 'Peter L.',
431 login: 'pludi',
432 avatar_url:
433 'https://crowdin-static.downloads.crowdin.com/avatar/14038315/small/22f4df26f65181a7d3a9de773d11315d.png',
434 },
435 {
436 name: 'Alberto González',
437 login: 'algonrey',
438 avatar_url:
439 'https://crowdin-static.downloads.crowdin.com/avatar/14446576/small/e2423064f8b64e4d91eb1d26d1c9e3ed.png',
440 },
441 {
442 name: 'mganovelli',
443 login: 'mganovelli',
444 avatar_url:
445 'https://www.gravatar.com/avatar/73572bf6ada06e0a31902a679231d339',
446 },
447 {
448 name: 'Dvir M',
449 login: 'dvirmalka',
450 avatar_url:
451 'https://crowdin-static.downloads.crowdin.com/avatar/14451536/small/e724aa43f781c935e408be99e679fe5e.jpg',
452 },
453 {
454 name: 'Daniel Brandobur',
455 login: 'Emilio_D',
456 avatar_url:
457 'https://crowdin-static.downloads.crowdin.com/avatar/14452294/small/13b5c161612a2f366078b563e9f5e08b.png',
458 },
459 {
460 name: 'totoderek',
461 login: 'totoyeah',
462 avatar_url:
463 'https://crowdin-static.downloads.crowdin.com/avatar/14465378/small/234131e24d58cb37ca87aea532d3d347.png',
464 },
465 {
466 name: 'Kevin Cabrera',
467 login: 'kev.cabrerar',
468 avatar_url:
469 'https://crowdin-static.downloads.crowdin.com/avatar/14471950/small/383c6a879a45001c36228e17e2d81090.png',
470 },
471 {
472 name: 'Hugo Santos',
473 login: 'hugosantosmobile',
474 avatar_url:
475 'https://crowdin-static.downloads.crowdin.com/avatar/14477058/small/e8a048695e4de818fdf1e3e1326d14c4.png',
476 },
477 {
478 name: 'Søren Berg Glasius',
479 login: 'sbglasius',
480 avatar_url:
481 'https://crowdin-static.downloads.crowdin.com/avatar/14480260/small/9643f9f295172a5a9959209eee3999bd.png',
482 },
483 {
484 name: 'mustbedreaming',
485 login: 'mustbedreaming',
486 avatar_url:
487 'https://crowdin-static.downloads.crowdin.com/avatar/14482836/small/32bf7ac73042f53cb9b7c82c57023ddb.png',
488 },
489 {
490 name: 'Germain Carré',
491 login: 'Carsso',
492 avatar_url:
493 'https://crowdin-static.downloads.crowdin.com/avatar/12353537/small/d9567780a35d1e674cf47a69c301b0c4.png',
494 },
495 {
496 name: 'Dominik Bullo',
497 login: 'dominikbullo',
498 avatar_url:
499 'https://crowdin-static.downloads.crowdin.com/avatar/14494704/small/1debb3d67c6ad7d7f45f0b7a38eb21a7.jpeg',
500 },
501 {
502 name: 'Gonzalo Pérez',
503 login: 'gonperezramirez',
504 avatar_url:
505 'https://crowdin-static.downloads.crowdin.com/avatar/14504898/small/4f20dd9bbc823c78568eb6f1cfb2aeb9.jpeg',
506 },
507 {
508 name: 'Carlescampins',
509 login: 'Carlescampins',
510 avatar_url:
511 'https://www.gravatar.com/avatar/b84ccc92d132102110b7aec628f47b6a',
512 },
513 {
514 name: 'Cristiano Verondini',
515 login: 'cverond',
516 avatar_url:
517 'https://www.gravatar.com/avatar/70e4384a871e45743f26bdcc21303c56',
518 },
519 {
520 name: 'אליה הלל',
521 login: 'eliyahillel',
522 avatar_url:
523 'https://crowdin-static.downloads.crowdin.com/avatar/14367648/small/834d1cf668a6ca97b2c66093019b5991.jpeg',
524 },
525 {
526 name: 'Samuel Francois Köhler',
527 login: 'sfkmk',
528 avatar_url:
529 'https://crowdin-static.downloads.crowdin.com/avatar/14541090/small/f0a810349778c46b7572301340b471e8.jpeg',
530 },
531 {
532 name: 'Bartel',
533 login: 'Letrab',
534 avatar_url:
535 'https://crowdin-static.downloads.crowdin.com/avatar/14544608/small/91c226dbb12aa1067e294cd5c4332ae1.png',
536 },
537 {
538 name: 'Alexandre Martins',
539 login: 'alexmartins',
540 avatar_url:
541 'https://crowdin-static.downloads.crowdin.com/avatar/14544796/small/e3c922101c1ceb7c7a6b7bd165a15d98.jpeg',
542 },
543 {
544 name: 'Jari Myrskykari',
545 login: 'jartsa',
546 avatar_url:
547 'https://crowdin-static.downloads.crowdin.com/avatar/14080739/small/6dadf0a40522a0e918f746f2b32e6c27.jpg',
548 },
549 {
550 name: 'Uğurcan Sayan',
551 login: 'ugurcansayan',
552 avatar_url:
553 'https://crowdin-static.downloads.crowdin.com/avatar/13023570/small/96cfec0b4d18e4b26b59dfeeaa369cf6.jpg',
554 },
555 {
556 name: 'Alex',
557 login: 'nasmi3',
558 avatar_url:
559 'https://crowdin-static.downloads.crowdin.com/avatar/14563170/small/072d3aadc3866c16ed1a5b5082e81f26.png',
560 },
561 {
562 name: 'Nikola Mitić',
563 login: 'n-mitic',
564 avatar_url:
565 'https://crowdin-static.downloads.crowdin.com/avatar/14588102/small/5f8b6b73c8d583e6b424607470c09cb7.jpeg',
566 },
567 {
568 name: 'fawkulce',
569 login: 'fawkulce',
570 avatar_url:
571 'https://www.gravatar.com/avatar/9004e98cd5e707875b3dd9268214a664',
572 },
573 {
574 name: 'Glenac',
575 login: 'Glenac',
576 avatar_url:
577 'https://www.gravatar.com/avatar/080652c67697630c9885a1157ad8a360',
578 },
579 {
580 name: 'Victorious',
581 login: 'victoriousnathan55',
582 avatar_url:
583 'https://crowdin-static.downloads.crowdin.com/avatar/14319626/small/120632761f7821f4cbfdac046086b6e7.jpeg',
584 },
585 {
586 name: 'Raoul Molai',
587 login: 'raoul-m',
588 avatar_url:
589 'https://crowdin-static.downloads.crowdin.com/avatar/13238611/small/2906ff4c9e8704be8cb86d1b1cb124b1.jpg',
590 },
591 {
592 name: 'Nathanaël',
593 login: 'nathanaelhoun',
594 avatar_url:
595 'https://crowdin-static.downloads.crowdin.com/avatar/14628456/small/7c0f5919fba56edfddf08bf715039f75.jpeg',
596 },
597 {
598 name: 'Laurentiu Radu',
599 login: 'radulaurentiu',
600 avatar_url:
601 'https://crowdin-static.downloads.crowdin.com/avatar/14631958/small/c3a0112e9eb596f0a54cdebf5d99b82a.jpg',
602 },
603 {
604 name: 'GiacomoGuaresi',
605 login: 'GiacomoGuaresi',
606 avatar_url:
607 'https://crowdin-static.downloads.crowdin.com/avatar/14659702/small/12e79e3fc332762058ee525a95b72447.jpeg',
608 },
609 {
610 name: 'Hung Nguyen',
611 login: 'cohedz',
612 avatar_url:
613 'https://crowdin-static.downloads.crowdin.com/avatar/14664150/small/18ae8a7eaa36ba6202fa43eedd84b8d2.jpg',
614 },
615 {
616 name: 'Facundo Saravia',
617 login: 'facundo_ingenia',
618 avatar_url:
619 'https://crowdin-static.downloads.crowdin.com/avatar/14672204/small/eaf2caaff3d2851fabb3d74f76d0542e.png',
620 },
621 {
622 name: 'Lefebvre Saboya',
623 login: 'llsaboya',
624 avatar_url:
625 'https://crowdin-static.downloads.crowdin.com/avatar/14682462/small/ee313d9b222ea3d1f10bd337d6cb6fce.jpeg',
626 },
627 {
628 name: 'beez276',
629 login: 'beez276',
630 avatar_url:
631 'https://www.gravatar.com/avatar/4a5e7e0b13e365d0783e480ddff338fc',
632 },
633 {
634 name: 'namu',
635 login: 'namu',
636 avatar_url:
637 'https://www.gravatar.com/avatar/ddf44bc1e0a05ca46fa9b81f1f916f15',
638 },
639 {
640 name: 'Kaue Lima',
641 login: 'kauelima',
642 avatar_url:
643 'https://crowdin-static.downloads.crowdin.com/avatar/13054953/small/3319b5f15e0452b664f94e632d51276e.jpeg',
644 },
645 {
646 name: 'AlexDep',
647 login: 'AlexDep',
648 avatar_url:
649 'https://crowdin-static.downloads.crowdin.com/avatar/14705362/small/ba978b0356a94767dc79441c70aee964.png',
650 },
651 {
652 name: 'Nguyễn Tấn Lợi',
653 login: 'tanloibdp',
654 avatar_url:
655 'https://crowdin-static.downloads.crowdin.com/avatar/14736534/small/42b4da2ca619a6517adbb38bc60c7e5c.jpeg',
656 },
657 {
658 name: 'Alex Widén',
659 login: 'vovven',
660 avatar_url:
661 'https://crowdin-static.downloads.crowdin.com/avatar/14748884/small/9829dddc625adca8d20e9687f40f009e.jpeg',
662 },
663 {
664 name: 'amin_tado',
665 login: 'amin_tado',
666 avatar_url:
667 'https://crowdin-static.downloads.crowdin.com/avatar/12875002/small/fea4dcbf0c1e15743c467d0e152e43d9.jpg',
668 },
669 {
670 name: 'Rintan',
671 login: 'Rintan',
672 avatar_url:
673 'https://crowdin-static.downloads.crowdin.com/avatar/12710633/small/bd1081c95585021cb9862a5f9d1756ec.png',
674 },
675 {
676 name: 'Nesswit',
677 login: 'rishubil',
678 avatar_url:
679 'https://www.gravatar.com/avatar/4943e03e0f0cf28d12fbc98064b3f244',
680 },
681 {
682 name: 'Elia De Togni',
683 login: 'AmazingClaymore',
684 avatar_url:
685 'https://crowdin-static.downloads.crowdin.com/avatar/14812758/small/a9f623f45c833c7ba7f04cf2962f3793.png',
686 },
687 {
688 name: 'zkm3f',
689 login: 'zkm3f',
690 avatar_url:
691 'https://www.gravatar.com/avatar/2c79623d62d2bb36b31883abd5b08a12',
692 },
693 {
694 name: 'Sebastian Jasiński',
695 login: 'PrinceNorris',
696 avatar_url:
697 'https://crowdin-static.downloads.crowdin.com/avatar/13962625/small/552e23414407b34f8f67db5ea49a5604.png',
698 },
699 {
700 name: 'MoaufmKlo',
701 login: 'MoaufmKlo',
702 avatar_url:
703 'https://crowdin-static.downloads.crowdin.com/avatar/13720247/small/e01249ad9a091fda233cfaec0774c1fc.png',
704 },
705 {
706 name: 'Marcos Orso',
707 login: 'marcosorso',
708 avatar_url:
709 'https://crowdin-static.downloads.crowdin.com/avatar/14830692/small/0550fa339b76765dd8b200afabd43b0a.jpeg',
710 },
711 {
712 name: 'Nice Brown',
713 login: 'popdisk',
714 avatar_url:
715 'https://crowdin-static.downloads.crowdin.com/avatar/14844316/small/5a12669ef15f26b6c53a5d5afe38a6b3.jpeg',
716 },
717 {
718 name: 'Loremed',
719 login: 'Loremed',
720 avatar_url:
721 'https://www.gravatar.com/avatar/76d86c860fa5bdc1694ff9c7dc9778fb',
722 },
723 {
724 name: 'yarinShapira',
725 login: 'yarinShapira',
726 avatar_url:
727 'https://crowdin-static.downloads.crowdin.com/avatar/14845706/small/abf9ec9309f40dfcb01eae2c8fca02fb.png',
728 },
729 {
730 name: 'Christopher Coss',
731 login: 'Kissadere',
732 avatar_url:
733 'https://crowdin-static.downloads.crowdin.com/avatar/12721969/small/8feaec1d16dd268e5ec29204a6e1d080.jpg',
734 },
735 {
736 name: 'Buğra Çağlar',
737 login: 'portakalimsi',
738 avatar_url:
739 'https://crowdin-static.downloads.crowdin.com/avatar/13990869/small/a4e0b16904126d8e0d014d952f4bc1b6.jpeg',
740 },
741 {
742 name: 'sobeitnow0',
743 login: 'sobeitnow0',
744 avatar_url:
745 'https://crowdin-static.downloads.crowdin.com/avatar/14738292/small/727b33d7bd2ca021cf85b788c6cee9d1.jpeg',
746 },
747 {
748 name: 'Muhammad Zahiruddin',
749 login: 'dinzahir99',
750 avatar_url:
751 'https://crowdin-static.downloads.crowdin.com/avatar/12732934/small/cae45ad9864def2074b1e3c35efce683.png',
752 },
753 {
754 name: 'Aninus Partikler',
755 login: 'aninuscsalas',
756 avatar_url:
757 'https://crowdin-static.downloads.crowdin.com/avatar/14358620/small/7f3849dd7ea25ac874fac1986810e329.png',
758 },
759 {
760 name: 'Wellington Melo',
761 login: 'wellingtonsmelo.android',
762 avatar_url:
763 'https://crowdin-static.downloads.crowdin.com/avatar/14888906/small/8d128e54285cac52c0e50e53d4691c82.jpeg',
764 },
765 {
766 name: 'miangou',
767 login: 'miangou',
768 avatar_url:
769 'https://crowdin-static.downloads.crowdin.com/avatar/14891930/small/78e766643ac488bebc490ecf4677c0c9.jpeg',
770 },
771 {
772 name: 'Store',
773 login: 'HelaBasa',
774 avatar_url:
775 'https://crowdin-static.downloads.crowdin.com/avatar/13976107/small/ab4177e8d90665d4603e548488d15c68.jpg',
776 },
777 {
778 name: 'technowhizz',
779 login: 'technowhizz',
780 avatar_url:
781 'https://crowdin-static.downloads.crowdin.com/avatar/14897978/small/2d2a416e423758dd52a3dd0f657fdf0c.jpeg',
782 },
783 {
784 name: 'Trần Lê Quốc Huy',
785 login: 'LucasMasrider',
786 avatar_url:
787 'https://crowdin-static.downloads.crowdin.com/avatar/14613056/small/090933fb64948358fa226ad830de2b21.jpg',
788 },
789 {
790 name: 'Maciej Błędkowski',
791 login: 'mble',
792 avatar_url:
793 'https://crowdin-static.downloads.crowdin.com/avatar/14273256/small/7df80579990a9d9e3cf672d04b372297.jpeg',
794 },
795 {
796 name: 'd3ward',
797 login: 'd3ward',
798 avatar_url:
799 'https://crowdin-static.downloads.crowdin.com/avatar/13781643/small/bf617deeeba0d2efafef223ddb1c3c03.png',
800 },
801 {
802 name: 'Vijay Raghavan Aravamudhan',
803 login: 'vraravam',
804 avatar_url:
805 'https://crowdin-static.downloads.crowdin.com/avatar/14890780/small/8a0a5ed688ff21711a832f39ac0481b6.jpeg',
806 },
807 {
808 name: 'Markus Hatvan',
809 login: 'mhatvan',
810 avatar_url:
811 'https://crowdin-static.downloads.crowdin.com/avatar/14921973/small/98e0bce9af5f4d851630831d866262d2.jpeg',
812 },
813 {
814 name: 'amyaan',
815 login: 'amyaan',
816 avatar_url:
817 'https://www.gravatar.com/avatar/eac6ef8c854035fa9af245f866da0a42',
818 },
819 {
820 name: 'Fred William Torno Junior',
821 login: 'fredwilliamtjr',
822 avatar_url:
823 'https://crowdin-static.downloads.crowdin.com/avatar/14932371/small/e694cada2c8fd7924162e1badcc6af3f.png',
824 },
825 {
826 name: 'José Luis Bandala Pérez',
827 login: 'luis449bp',
828 avatar_url:
829 'https://www.gravatar.com/avatar/e7dbf284ff40c3c32845e1b95d257c61',
830 },
831 {
832 name: 'gurbii',
833 login: 'gurbii',
834 avatar_url:
835 'https://www.gravatar.com/avatar/bedbdd12dbf6df0abed084a7f6efe772',
836 },
837 {
838 name: 'Luiz Henrique',
839 login: '13luizhenrique',
840 avatar_url:
841 'https://crowdin-static.downloads.crowdin.com/avatar/13926183/small/d20b071be813e20efa3a121bc2658989.png',
842 },
843 {
844 name: 'Clément Biron',
845 login: 'clementbiron',
846 avatar_url:
847 'https://crowdin-static.downloads.crowdin.com/avatar/14951127/small/a95b2d3ff6d1b64bf0d75d561e025ec6.png',
848 },
849 {
850 name: 'ttxsyqz',
851 login: 'ttxsyqz',
852 avatar_url:
853 'https://www.gravatar.com/avatar/8913ba1176abfc32fa2021a8ec683511',
854 },
855 {
856 name: 'Janne Salmi',
857 login: 'BluePantherFIN',
858 avatar_url:
859 'https://crowdin-static.downloads.crowdin.com/avatar/14958709/small/f32c96756fb16350385ea3dee38626f7.jpeg',
860 },
861 {
862 name: 'TheRedLadybug62',
863 login: 'TheRedLadybug62',
864 avatar_url:
865 'https://www.gravatar.com/avatar/4b1fdb0a13f1bdf2bbfda46e9d78f2d0',
866 },
867 {
868 name: '曹恩逢',
869 login: 'SiderealArt',
870 avatar_url:
871 'https://crowdin-static.downloads.crowdin.com/avatar/12960382/small/efd52e2c41be32bfd52569ac15d228b7.jpg',
872 },
873 {
874 name: 'Martin Jakobsson',
875 login: 'jakobsson0',
876 avatar_url:
877 'https://crowdin-static.downloads.crowdin.com/avatar/14965633/small/6195809f0df9712fd7d4248d33cc846c.png',
878 },
879 {
880 name: 'Guus',
881 login: 'Guus',
882 avatar_url:
883 'https://crowdin-static.downloads.crowdin.com/avatar/12495264/small/eb334ff402b0b9bf49493bfce968399d.png',
884 },
885 {
886 name: 'peterpacket',
887 login: 'peterpacket',
888 avatar_url:
889 'https://crowdin-static.downloads.crowdin.com/avatar/14970427/small/da8ab2c6b80d2c06a3b9094e53b94db9.jpeg',
890 },
891 {
892 name: 'ogghi',
893 login: 'ogghi',
894 avatar_url:
895 'https://www.gravatar.com/avatar/59e381507a01e1c8cf58d2521260c0e1',
896 },
897 {
898 name: 'Vladimir Studinsky',
899 login: 'studinsky',
900 avatar_url:
901 'https://crowdin-static.downloads.crowdin.com/avatar/13280232/small/4dd03819450e266c9b42a7eff880f9dc.jpg',
902 },
903 {
904 name: 'János Benjamin Antal',
905 login: 'antaljanosbenjamin',
906 avatar_url:
907 'https://crowdin-static.downloads.crowdin.com/avatar/14982759/small/174144d1761e4b9f8e50353b4dbca8d1.jpeg',
908 },
909 {
910 name: 'Oğuzhan K',
911 login: 'oguzhankara34',
912 avatar_url:
913 'https://crowdin-static.downloads.crowdin.com/avatar/14989979/small/a404ab91595a7c5cf02854477ac4c559.jpeg',
914 },
915 {
916 name: 'Ben Naylor',
917 login: 'b_n',
918 avatar_url:
919 'https://crowdin-static.downloads.crowdin.com/avatar/14999083/small/00ae25b0d879d7578ca2d3c8c9a0c038.jpeg',
920 },
921 {
922 name: 'Martin Bernát',
923 login: 'martinbernat',
924 avatar_url:
925 'https://crowdin-static.downloads.crowdin.com/avatar/15000137/small/d6b368ed785d157f6e2105c64a7fe37b.png',
926 },
927 {
928 name: 'Ignacio Castro',
929 login: 'ignaciocastro',
930 avatar_url:
931 'https://crowdin-static.downloads.crowdin.com/avatar/14239666/small/ac376ab1a3f35722ab4a153b26ee881a.jpeg',
932 },
933 {
934 name: 'Niklas Lagström',
935 login: 'lagstrom',
936 avatar_url:
937 'https://crowdin-static.downloads.crowdin.com/avatar/15030387/small/329d60a44b8deba42c825e2dc1a9e7a0.jpeg',
938 },
939 {
940 name: 'Greivin Cordoncillo Romero',
941 login: 'jatatox',
942 avatar_url:
943 'https://crowdin-static.downloads.crowdin.com/avatar/15031761/small/6482c4317b9aa45d3e61ef82eb77b48a.jpeg',
944 },
945 {
946 name: 'Ovidiu Gherman',
947 login: 'gherman.ovidiu.ionut',
948 avatar_url:
949 'https://crowdin-static.downloads.crowdin.com/avatar/15031877/small/2ccf7f461f67f226b58260e459802848.jpeg',
950 },
951 {
952 name: 'Eryk Lewandowski',
953 login: 'erykosky',
954 avatar_url:
955 'https://crowdin-static.downloads.crowdin.com/avatar/15041515/small/43f0bd10f84bf785654f3412f2215df9.png',
956 },
957 {
958 name: '방현수',
959 login: 'natas999',
960 avatar_url:
961 'https://crowdin-static.downloads.crowdin.com/avatar/14401308/small/e0d6f0cdc5114be795273e5b690f0896.jpeg',
962 },
963 {
964 name: 'MyUncleSam',
965 login: 'MyUncleSam',
966 avatar_url:
967 'https://crowdin-static.downloads.crowdin.com/avatar/15046019/small/d48a41a2a7e2d205dbe3316cd834dfb6.jpeg',
968 },
969 {
970 name: 'Vladyslav Samotoi',
971 login: 'mcwladkoe',
972 avatar_url:
973 'https://crowdin-static.downloads.crowdin.com/avatar/12996072/small/be802e915089a812d93e676674c9454f.png',
974 },
975 {
976 name: 'Vyacheslav Malashin',
977 login: 'vyacheslav_malashin',
978 avatar_url:
979 'https://crowdin-static.downloads.crowdin.com/avatar/15062315/small/397445945985e829703b1fe3e4f4ccf4.JPG',
980 },
981 {
982 name: 'Chatos Kuntakinte',
983 login: 'chatoskuntakinte',
984 avatar_url:
985 'https://crowdin-static.downloads.crowdin.com/avatar/15062523/small/acb7763df860ca67fe30dbafcf9e31e0.png',
986 },
987 {
988 name: 'Juha Köpman',
989 login: 'e0f',
990 avatar_url:
991 'https://crowdin-static.downloads.crowdin.com/avatar/14443460/small/fda983d878c8cd64f9224d2c27a2a56c.jpg',
992 },
993 {
994 name: 'AiOO',
995 login: 'AiOO',
996 avatar_url:
997 'https://www.gravatar.com/avatar/f39fe4e7e61f4aea84e369b5f9d9c2f6',
998 },
999 {
1000 name: 'Ibra AF',
1001 login: 'musyawaroh123',
1002 avatar_url:
1003 'https://crowdin-static.downloads.crowdin.com/avatar/13583172/small/f3e47a6f884ad97a5a8d354f0fe5a853.jpg',
1004 },
1005 {
1006 name: 'Rebecca Wendhausen',
1007 login: 'bekwendhausen',
1008 avatar_url:
1009 'https://crowdin-static.downloads.crowdin.com/avatar/15085045/small/3afbce411d873055baca51f69d3bfd8c.png',
1010 },
1011 {
1012 name: 'David Astillero Pérez',
1013 login: 'dastillero',
1014 avatar_url:
1015 'https://crowdin-static.downloads.crowdin.com/avatar/14935695/small/abf96cf0a2ccb90f0ffbd7ffad4bf6f0.jpeg',
1016 },
1017 {
1018 name: 'mscythe',
1019 login: 'mscythe',
1020 avatar_url:
1021 'https://www.gravatar.com/avatar/f5c7d39046e60be1692b03d09624a49e',
1022 },
1023 {
1024 name: 'Jean-Pierre MÉRESSE',
1025 login: 'Jipem',
1026 avatar_url:
1027 'https://crowdin-static.downloads.crowdin.com/avatar/15101883/small/56a810446c7f1b7bfd566825bdf38f97.png',
1028 },
1029 {
1030 name: '咸粽子',
1031 login: 'XianZongzi',
1032 avatar_url:
1033 'https://crowdin-static.downloads.crowdin.com/avatar/13898579/small/a62e017825193da284eb84b7a318f6b7_default.png',
1034 },
1035 {
1036 name: 'Barkın Arga',
1037 login: 'barkinarga',
1038 avatar_url:
1039 'https://crowdin-static.downloads.crowdin.com/avatar/12813629/small/44d528df52ccd5972d167835ace78078.jpg',
1040 },
1041 {
1042 name: 'Santiago',
1043 login: 'Droidnius',
1044 avatar_url:
1045 'https://crowdin-static.downloads.crowdin.com/avatar/14790068/small/2d824af4ac6a1f41f82b24020409ae44.jpg',
1046 },
1047 {
1048 name: 'Kentai Radiquum',
1049 login: 'Radiquum',
1050 avatar_url:
1051 'https://crowdin-static.downloads.crowdin.com/avatar/15166222/small/bb762aa8ef3fcac773487ef3ef8708ce.jpeg',
1052 },
1053 {
1054 name: 'Mehmet Can',
1055 login: 'bymcs',
1056 avatar_url:
1057 'https://crowdin-static.downloads.crowdin.com/avatar/15166456/small/c4d6a35eb95112121b167386c044967d.png',
1058 },
1059 {
1060 name: 'banhetom',
1061 login: 'banhetom',
1062 avatar_url:
1063 'https://crowdin-static.downloads.crowdin.com/avatar/15203804/small/b8dbe2bfd68c749f7965f39ede727882.png',
1064 },
63]; 1065];
64 1066
65const infoPath = path.join(__dirname, '..', '.all-contributorsrc'); 1067const infoPath = path.join(__dirname, '..', '.all-contributorsrc');
diff --git a/src/api/apiBase.ts b/src/api/apiBase.ts
index d066d1466..fad20ca5e 100644
--- a/src/api/apiBase.ts
+++ b/src/api/apiBase.ts
@@ -32,10 +32,12 @@ export default function apiBase(withVersion = true) {
32 : (window as any).ferdium.stores.settings.all.app.server; 32 : (window as any).ferdium.stores.settings.all.app.server;
33 33
34 return fixUrl(withVersion ? `${url}/${API_VERSION}` : url); 34 return fixUrl(withVersion ? `${url}/${API_VERSION}` : url);
35}; 35}
36 36
37export function needsToken(): boolean { 37export function needsToken(): boolean {
38 return (window as any).ferdium.stores.settings.all.app.server === LOCAL_SERVER; 38 return (
39 (window as any).ferdium.stores.settings.all.app.server === LOCAL_SERVER
40 );
39} 41}
40 42
41export function localServerToken(): string | undefined { 43export function localServerToken(): string | undefined {
@@ -46,9 +48,7 @@ export function localServerToken(): string | undefined {
46 48
47export function importExportURL() { 49export function importExportURL() {
48 const base = apiBase(false); 50 const base = apiBase(false);
49 return needsToken() 51 return needsToken() ? `${base}/token/${localServerToken()}` : base;
50 ? `${base}/token/${localServerToken()}`
51 : base;
52} 52}
53 53
54export function serverBase() { 54export function serverBase() {
diff --git a/src/api/server/ServerApi.ts b/src/api/server/ServerApi.ts
index 8b551ade2..a3d873c65 100644
--- a/src/api/server/ServerApi.ts
+++ b/src/api/server/ServerApi.ts
@@ -25,7 +25,11 @@ import { SERVER_NOT_LOADED } from '../../config';
25import { userDataRecipesPath, userDataPath } from '../../environment-remote'; 25import { userDataRecipesPath, userDataPath } from '../../environment-remote';
26import { asarRecipesPath } from '../../helpers/asar-helpers'; 26import { asarRecipesPath } from '../../helpers/asar-helpers';
27import apiBase from '../apiBase'; 27import apiBase from '../apiBase';
28import { prepareAuthRequest, prepareLocalToken, sendAuthRequest } from '../utils/auth'; 28import {
29 prepareAuthRequest,
30 prepareLocalToken,
31 sendAuthRequest,
32} from '../utils/auth';
29 33
30import { 34import {
31 getRecipeDirectory, 35 getRecipeDirectory,
diff --git a/src/api/utils/auth.ts b/src/api/utils/auth.ts
index 282d00459..1f694a781 100644
--- a/src/api/utils/auth.ts
+++ b/src/api/utils/auth.ts
@@ -31,15 +31,17 @@ export const prepareAuthRequest = (
31 return request; 31 return request;
32}; 32};
33 33
34export const prepareLocalToken = async ( 34export const prepareLocalToken = async (requestData: {
35 requestData: { method: string; headers?: any; body?: any }, 35 method: string;
36) => { 36 headers?: any;
37 body?: any;
38}) => {
37 await when(() => !needsToken() || !!localServerToken(), { timeout: 2000 }); 39 await when(() => !needsToken() || !!localServerToken(), { timeout: 2000 });
38 const token = localServerToken(); 40 const token = localServerToken();
39 if (token) { 41 if (token) {
40 requestData.headers['X-Ferdium-Local-Token'] = token; 42 requestData.headers['X-Ferdium-Local-Token'] = token;
41 } 43 }
42} 44};
43 45
44export const sendAuthRequest = async ( 46export const sendAuthRequest = async (
45 url: RequestInfo, 47 url: RequestInfo,
diff --git a/src/components/auth/Invite.js b/src/components/auth/Invite.js
index 9eca924cd..6b0e0e40b 100644
--- a/src/components/auth/Invite.js
+++ b/src/components/auth/Invite.js
@@ -70,9 +70,7 @@ class Invite extends Component {
70 fields: { 70 fields: {
71 name: { 71 name: {
72 label: intl.formatMessage(messages.nameLabel), 72 label: intl.formatMessage(messages.nameLabel),
73 placeholder: intl.formatMessage( 73 placeholder: intl.formatMessage(messages.nameLabel),
74 messages.nameLabel,
75 ),
76 onChange: () => { 74 onChange: () => {
77 this.setState({ showSuccessInfo: false }); 75 this.setState({ showSuccessInfo: false });
78 }, 76 },
@@ -80,9 +78,7 @@ class Invite extends Component {
80 }, 78 },
81 email: { 79 email: {
82 label: intl.formatMessage(messages.emailLabel), 80 label: intl.formatMessage(messages.emailLabel),
83 placeholder: intl.formatMessage( 81 placeholder: intl.formatMessage(messages.emailLabel),
84 messages.emailLabel,
85 ),
86 onChange: () => { 82 onChange: () => {
87 this.setState({ showSuccessInfo: false }); 83 this.setState({ showSuccessInfo: false });
88 }, 84 },
diff --git a/src/components/auth/Locked.js b/src/components/auth/Locked.js
index 90ee46722..6e32dd980 100644
--- a/src/components/auth/Locked.js
+++ b/src/components/auth/Locked.js
@@ -54,17 +54,19 @@ class Locked extends Component {
54 54
55 form = (() => { 55 form = (() => {
56 const { intl } = this.props; 56 const { intl } = this.props;
57 return new Form({ 57 return new Form(
58 fields: { 58 {
59 password: { 59 fields: {
60 label: intl.formatMessage(messages.passwordLabel), 60 password: {
61 value: '', 61 label: intl.formatMessage(messages.passwordLabel),
62 type: 'password', 62 value: '',
63 type: 'password',
64 },
63 }, 65 },
64 }, 66 },
65 }, 67 intl,
66 intl, 68 );
67 )})(); 69 })();
68 70
69 submit(e) { 71 submit(e) {
70 e.preventDefault(); 72 e.preventDefault();
diff --git a/src/components/auth/Password.js b/src/components/auth/Password.js
index 0daa4c77a..5086b0bbd 100644
--- a/src/components/auth/Password.js
+++ b/src/components/auth/Password.js
@@ -50,17 +50,19 @@ class Password extends Component {
50 50
51 form = (() => { 51 form = (() => {
52 const { intl } = this.props; 52 const { intl } = this.props;
53 return new Form({ 53 return new Form(
54 fields: { 54 {
55 email: { 55 fields: {
56 label: intl.formatMessage(messages.emailLabel), 56 email: {
57 value: '', 57 label: intl.formatMessage(messages.emailLabel),
58 validators: [required, email], 58 value: '',
59 validators: [required, email],
60 },
59 }, 61 },
60 }, 62 },
61 }, 63 intl,
62 intl, 64 );
63 )})(); 65 })();
64 66
65 submit(e) { 67 submit(e) {
66 e.preventDefault(); 68 e.preventDefault();
@@ -80,7 +82,9 @@ class Password extends Component {
80 return ( 82 return (
81 <div className="auth__container"> 83 <div className="auth__container">
82 <form className="franz-form auth__form" onSubmit={e => this.submit(e)}> 84 <form className="franz-form auth__form" onSubmit={e => this.submit(e)}>
83 <Link to='/auth/welcome'><img src="./assets/images/logo.svg" className="auth__logo" alt="" /></Link> 85 <Link to="/auth/welcome">
86 <img src="./assets/images/logo.svg" className="auth__logo" alt="" />
87 </Link>
84 <H1>{intl.formatMessage(messages.headline)}</H1> 88 <H1>{intl.formatMessage(messages.headline)}</H1>
85 {status.length > 0 && status.includes('sent') && ( 89 {status.length > 0 && status.includes('sent') && (
86 <Infobox type="success" icon="checkbox-marked-circle-outline"> 90 <Infobox type="success" icon="checkbox-marked-circle-outline">
diff --git a/src/components/auth/Welcome.jsx b/src/components/auth/Welcome.jsx
index c784b75c3..9e5d10126 100644
--- a/src/components/auth/Welcome.jsx
+++ b/src/components/auth/Welcome.jsx
@@ -21,7 +21,8 @@ const messages = defineMessages({
21 }, 21 },
22 changeServerMessage: { 22 changeServerMessage: {
23 id: 'login.changeServerMessage', 23 id: 'login.changeServerMessage',
24 defaultMessage: 'You are using {serverNameParse} Server, do you want to switch?' 24 defaultMessage:
25 'You are using {serverNameParse} Server, do you want to switch?',
25 }, 26 },
26 changeServer: { 27 changeServer: {
27 id: 'login.changeServer', 28 id: 'login.changeServer',
@@ -78,7 +79,9 @@ class Welcome extends Component {
78 </Link> 79 </Link>
79 <div className="welcome__text__change-server"> 80 <div className="welcome__text__change-server">
80 <span> 81 <span>
81 {intl.formatMessage(messages.changeServerMessage, { serverNameParse })} 82 {intl.formatMessage(messages.changeServerMessage, {
83 serverNameParse,
84 })}
82 </span> 85 </span>
83 <Link to={changeServerRoute} className="button__change-server"> 86 <Link to={changeServerRoute} className="button__change-server">
84 <span>{intl.formatMessage(messages.changeServer)}</span> 87 <span>{intl.formatMessage(messages.changeServer)}</span>
diff --git a/src/components/services/content/ServiceView.js b/src/components/services/content/ServiceView.js
index 504325c3a..47d84fead 100644
--- a/src/components/services/content/ServiceView.js
+++ b/src/components/services/content/ServiceView.js
@@ -77,7 +77,8 @@ class ServiceView extends Component {
77 isSpellcheckerEnabled, 77 isSpellcheckerEnabled,
78 } = this.props; 78 } = this.props;
79 79
80 const { navigationBarBehaviour, navigationBarManualActive } = stores.settings.app; 80 const { navigationBarBehaviour, navigationBarManualActive } =
81 stores.settings.app;
81 82
82 const showNavBar = 83 const showNavBar =
83 navigationBarBehaviour === 'always' || 84 navigationBarBehaviour === 'always' ||
@@ -98,7 +99,11 @@ class ServiceView extends Component {
98 } 99 }
99 100
100 return ( 101 return (
101 <div className={webviewClasses} data-name={service.name} style={{order: service.order}}> 102 <div
103 className={webviewClasses}
104 data-name={service.name}
105 style={{ order: service.order }}
106 >
102 {service.isActive && service.isEnabled && ( 107 {service.isActive && service.isEnabled && (
103 <> 108 <>
104 {service.hasCrashed && ( 109 {service.hasCrashed && (
@@ -115,9 +120,9 @@ class ServiceView extends Component {
115 !service.isServiceAccessRestricted && ( 120 !service.isServiceAccessRestricted && (
116 <WebviewLoader loaded={false} name={service.name} /> 121 <WebviewLoader loaded={false} name={service.name} />
117 )} 122 )}
118 {service.isProgressbarEnabled && service.isLoadingPage && !service.isFirstLoad && ( 123 {service.isProgressbarEnabled &&
119 <TopBarProgress /> 124 service.isLoadingPage &&
120 )} 125 !service.isFirstLoad && <TopBarProgress />}
121 {service.isError && ( 126 {service.isError && (
122 <WebviewErrorHandler 127 <WebviewErrorHandler
123 name={service.recipe.name} 128 name={service.recipe.name}
@@ -151,11 +156,26 @@ class ServiceView extends Component {
151 /> 156 />
152 </> 157 </>
153 ) : ( 158 ) : (
154 <div style={{display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', textAlign: 'center' }}> 159 <div
155 <span role="img" aria-label="Sleeping Emoji" style={{fontSize: 42}}> 160 style={{
161 display: 'flex',
162 flexDirection: 'column',
163 justifyContent: 'center',
164 alignItems: 'center',
165 textAlign: 'center',
166 }}
167 >
168 <span
169 role="img"
170 aria-label="Sleeping Emoji"
171 style={{ fontSize: 42 }}
172 >
156 😴 173 😴
157 </span><br/><br/> 174 </span>
158 This service is currently hibernating.<br/> 175 <br />
176 <br />
177 This service is currently hibernating.
178 <br />
159 Try switching services or reloading Ferdium. 179 Try switching services or reloading Ferdium.
160 </div> 180 </div>
161 )} 181 )}
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js
index 8ebf1ac5f..a1612cf8b 100644
--- a/src/components/settings/account/AccountDashboard.js
+++ b/src/components/settings/account/AccountDashboard.js
@@ -106,7 +106,7 @@ class AccountDashboard extends Component {
106 <div className="settings__body"> 106 <div className="settings__body">
107 {isUsingWithoutAccount && ( 107 {isUsingWithoutAccount && (
108 <> 108 <>
109 <H1 className='.no-bottom-margin'> 109 <H1 className=".no-bottom-margin">
110 {intl.formatMessage(messages.accountUnavailable)} 110 {intl.formatMessage(messages.accountUnavailable)}
111 </H1> 111 </H1>
112 <p 112 <p
diff --git a/src/components/settings/recipes/RecipesDashboard.jsx b/src/components/settings/recipes/RecipesDashboard.jsx
index 589b97ecd..d6150d300 100644
--- a/src/components/settings/recipes/RecipesDashboard.jsx
+++ b/src/components/settings/recipes/RecipesDashboard.jsx
@@ -191,7 +191,9 @@ class RecipesDashboard extends Component {
191 <NavLink 191 <NavLink
192 to="/settings/recipes/all" 192 to="/settings/recipes/all"
193 className={({ isActive }) => 193 className={({ isActive }) =>
194 isActive && recipeFilter === 'all' ? 'badge badge--primary' : 'badge' 194 isActive && recipeFilter === 'all'
195 ? 'badge badge--primary'
196 : 'badge'
195 } 197 }
196 onClick={() => resetSearch()} 198 onClick={() => resetSearch()}
197 > 199 >
diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js
index 73136529a..ab43bace9 100644
--- a/src/components/settings/services/EditServiceForm.js
+++ b/src/components/settings/services/EditServiceForm.js
@@ -505,9 +505,7 @@ class EditServiceForm extends Component {
505 </div> 505 </div>
506 <div className="settings__controls"> 506 <div className="settings__controls">
507 {/* Delete Button */} 507 {/* Delete Button */}
508 <div> 508 <div>{action === 'edit' && deleteButton}</div>
509 {action === 'edit' && deleteButton}
510 </div>
511 509
512 {/* Save Button */} 510 {/* Save Button */}
513 {isSaving || isValidatingCustomUrl ? ( 511 {isSaving || isValidatingCustomUrl ? (
diff --git a/src/components/ui/ColorPickerInput.tsx b/src/components/ui/ColorPickerInput.tsx
index 8a4d3129a..710d05586 100644
--- a/src/components/ui/ColorPickerInput.tsx
+++ b/src/components/ui/ColorPickerInput.tsx
@@ -8,7 +8,7 @@ interface IProps {
8 field: Field; 8 field: Field;
9 className?: string; 9 className?: string;
10 focus?: boolean; 10 focus?: boolean;
11}; 11}
12 12
13class ColorPickerInput extends Component<IProps> { 13class ColorPickerInput extends Component<IProps> {
14 static defaultProps = { 14 static defaultProps = {
@@ -34,16 +34,13 @@ class ColorPickerInput extends Component<IProps> {
34 this.inputElement?.focus(); 34 this.inputElement?.focus();
35 } 35 }
36 36
37 handleChangeComplete = (color: { hex: string; }) => { 37 handleChangeComplete = (color: { hex: string }) => {
38 const { field } = this.props; 38 const { field } = this.props;
39 field.value = color.hex 39 field.value = color.hex;
40 }; 40 };
41 41
42 render() { 42 render() {
43 const { 43 const { field, className } = this.props;
44 field,
45 className,
46 } = this.props;
47 44
48 let { type } = field; 45 let { type } = field;
49 type = 'text'; 46 type = 'text';
@@ -57,8 +54,8 @@ class ColorPickerInput extends Component<IProps> {
57 })} 54 })}
58 > 55 >
59 <SliderPicker 56 <SliderPicker
60 color={ field.value } 57 color={field.value}
61 onChangeComplete={ this.handleChangeComplete } 58 onChangeComplete={this.handleChangeComplete}
62 id={field.id} 59 id={field.id}
63 type={type} 60 type={type}
64 className="franz-form__input" 61 className="franz-form__input"
diff --git a/src/components/ui/FullscreenLoader/index.js b/src/components/ui/FullscreenLoader/index.js
index 983e7ea6c..f8c6b92ee 100644
--- a/src/components/ui/FullscreenLoader/index.js
+++ b/src/components/ui/FullscreenLoader/index.js
@@ -23,7 +23,7 @@ class FullscreenLoader extends Component {
23 className: null, 23 className: null,
24 spinnerColor: null, 24 spinnerColor: null,
25 children: null, 25 children: null,
26 title: null 26 title: null,
27 }; 27 };
28 28
29 render() { 29 render() {
diff --git a/src/components/ui/loader/index.tsx b/src/components/ui/loader/index.tsx
index 4d52f320e..45f81ff3b 100644
--- a/src/components/ui/loader/index.tsx
+++ b/src/components/ui/loader/index.tsx
@@ -41,6 +41,4 @@ class LoaderComponent extends Component<IProps> {
41 } 41 }
42} 42}
43 43
44export default injectStyle(styles, { injectTheme: true })( 44export default injectStyle(styles, { injectTheme: true })(LoaderComponent);
45 LoaderComponent,
46);
diff --git a/src/components/ui/select/index.tsx b/src/components/ui/select/index.tsx
index 1ce6c674b..805836130 100644
--- a/src/components/ui/select/index.tsx
+++ b/src/components/ui/select/index.tsx
@@ -463,6 +463,4 @@ class SelectComponent extends Component<IProps> {
463 } 463 }
464} 464}
465 465
466export default injectStyle(styles, { injectTheme: true })( 466export default injectStyle(styles, { injectTheme: true })(SelectComponent);
467 SelectComponent,
468);
diff --git a/src/components/ui/textarea/index.tsx b/src/components/ui/textarea/index.tsx
index 6796ab83d..d4ea424be 100644
--- a/src/components/ui/textarea/index.tsx
+++ b/src/components/ui/textarea/index.tsx
@@ -121,6 +121,4 @@ class TextareaComponent extends Component<IProps> {
121 } 121 }
122} 122}
123 123
124export default injectSheet(styles, { injectTheme: true })( 124export default injectSheet(styles, { injectTheme: true })(TextareaComponent);
125 TextareaComponent,
126);
diff --git a/src/components/ui/wrapper/index.tsx b/src/components/ui/wrapper/index.tsx
index e7477a25c..d733d050e 100644
--- a/src/components/ui/wrapper/index.tsx
+++ b/src/components/ui/wrapper/index.tsx
@@ -33,6 +33,4 @@ class WrapperComponent extends Component<IProps> {
33 } 33 }
34} 34}
35 35
36export default injectStyle(styles, { injectTheme: true })( 36export default injectStyle(styles, { injectTheme: true })(WrapperComponent);
37 WrapperComponent,
38);
diff --git a/src/containers/auth/LoginScreen.tsx b/src/containers/auth/LoginScreen.tsx
index 5c30e6569..64e06e59d 100644
--- a/src/containers/auth/LoginScreen.tsx
+++ b/src/containers/auth/LoginScreen.tsx
@@ -1,6 +1,9 @@
1import { Component, ReactElement } from 'react'; 1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 2import { inject, observer } from 'mobx-react';
3import { StoresProps, GlobalError } from '../../@types/ferdium-components.types'; 3import {
4 StoresProps,
5 GlobalError,
6} from '../../@types/ferdium-components.types';
4import Login from '../../components/auth/Login'; 7import Login from '../../components/auth/Login';
5 8
6interface LoginScreenProps extends StoresProps { 9interface LoginScreenProps extends StoresProps {
diff --git a/src/containers/auth/SignupScreen.tsx b/src/containers/auth/SignupScreen.tsx
index f3675c286..bf7ffe778 100644
--- a/src/containers/auth/SignupScreen.tsx
+++ b/src/containers/auth/SignupScreen.tsx
@@ -1,7 +1,10 @@
1import { Component, ReactElement } from 'react'; 1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 2import { inject, observer } from 'mobx-react';
3 3
4import { StoresProps, GlobalError } from '../../@types/ferdium-components.types'; 4import {
5 StoresProps,
6 GlobalError,
7} from '../../@types/ferdium-components.types';
5import Signup from '../../components/auth/Signup'; 8import Signup from '../../components/auth/Signup';
6 9
7interface SignUpScreenComponents extends StoresProps { 10interface SignUpScreenComponents extends StoresProps {
diff --git a/src/electron/ipc-api/autoUpdate.ts b/src/electron/ipc-api/autoUpdate.ts
index 262d396ec..bf3e79c85 100644
--- a/src/electron/ipc-api/autoUpdate.ts
+++ b/src/electron/ipc-api/autoUpdate.ts
@@ -28,7 +28,7 @@ export default (params: { mainWindow: BrowserWindow; settings: any }) => {
28 appEvents.emit('install-update'); 28 appEvents.emit('install-update');
29 29
30 const openedWindows = BrowserWindow.getAllWindows(); 30 const openedWindows = BrowserWindow.getAllWindows();
31 for (const window of openedWindows) window.close(); 31 for (const window of openedWindows) window.close();
32 32
33 autoUpdater.quitAndInstall(); 33 autoUpdater.quitAndInstall();
34 } 34 }
diff --git a/src/electron/ipc-api/languageDetect.ts b/src/electron/ipc-api/languageDetect.ts
index d344f7097..6314ea12b 100644
--- a/src/electron/ipc-api/languageDetect.ts
+++ b/src/electron/ipc-api/languageDetect.ts
@@ -2,7 +2,9 @@ import { ipcMain } from 'electron';
2 2
3import LanguageDetect from 'languagedetect'; 3import LanguageDetect from 'languagedetect';
4 4
5const debug = require('../../preload-safe-debug')('Ferdium:ipcApi:languageDetect'); 5const debug = require('../../preload-safe-debug')(
6 'Ferdium:ipcApi:languageDetect',
7);
6 8
7export default async () => { 9export default async () => {
8 ipcMain.handle('detect-language', async (_event, { sample }) => { 10 ipcMain.handle('detect-language', async (_event, { sample }) => {
diff --git a/src/electron/ipc-api/localServer.ts b/src/electron/ipc-api/localServer.ts
index 71a3003d1..6264e719d 100644
--- a/src/electron/ipc-api/localServer.ts
+++ b/src/electron/ipc-api/localServer.ts
@@ -39,7 +39,10 @@ export default (params: { mainWindow: BrowserWindow }) => {
39 port += 1; 39 port += 1;
40 } 40 }
41 token = randomBytes(256 / 8).toString('base64url'); 41 token = randomBytes(256 / 8).toString('base64url');
42 debug('Starting local server at', `http://localhost:${port}/token/${token}`); 42 debug(
43 'Starting local server at',
44 `http://localhost:${port}/token/${token}`,
45 );
43 await server(userDataPath(), port, token); 46 await server(userDataPath(), port, token);
44 localServerStarted = true; 47 localServerStarted = true;
45 } 48 }
@@ -49,7 +52,7 @@ export default (params: { mainWindow: BrowserWindow }) => {
49 port, 52 port,
50 token, 53 token,
51 }); 54 });
52 })().catch((error) => { 55 })().catch(error => {
53 console.error('Error while starting local server', error); 56 console.error('Error while starting local server', error);
54 }); 57 });
55 }); 58 });
diff --git a/src/electron/ipc-api/sessionStorage.ts b/src/electron/ipc-api/sessionStorage.ts
index 2a9f4b4d1..39e84d42b 100644
--- a/src/electron/ipc-api/sessionStorage.ts
+++ b/src/electron/ipc-api/sessionStorage.ts
@@ -2,7 +2,9 @@ import { ipcMain, Session, session } from 'electron';
2 2
3import { TODOS_PARTITION_ID } from '../../config'; 3import { TODOS_PARTITION_ID } from '../../config';
4 4
5const debug = require('../../preload-safe-debug')('Ferdium:ipcApi:sessionStorage'); 5const debug = require('../../preload-safe-debug')(
6 'Ferdium:ipcApi:sessionStorage',
7);
6 8
7function deduceSession(serviceId: string | undefined | null): Session { 9function deduceSession(serviceId: string | undefined | null): Session {
8 if (serviceId) { 10 if (serviceId) {
diff --git a/src/electron/windowUtils.ts b/src/electron/windowUtils.ts
index 3621beb2f..654459320 100644
--- a/src/electron/windowUtils.ts
+++ b/src/electron/windowUtils.ts
@@ -1,6 +1,9 @@
1import { screen } from 'electron'; 1import { screen } from 'electron';
2 2
3export default function isPositionValid(position: { x: number; y: number }): boolean { 3export default function isPositionValid(position: {
4 x: number;
5 y: number;
6}): boolean {
4 const displays = screen.getAllDisplays(); 7 const displays = screen.getAllDisplays();
5 const { x, y } = position; 8 const { x, y } = position;
6 return displays.some( 9 return displays.some(
diff --git a/src/features/basicAuth/mainIpcHandler.ts b/src/features/basicAuth/mainIpcHandler.ts
index 5d320df5c..d9cedc974 100644
--- a/src/features/basicAuth/mainIpcHandler.ts
+++ b/src/features/basicAuth/mainIpcHandler.ts
@@ -1,6 +1,8 @@
1import { BrowserWindow } from 'electron'; 1import { BrowserWindow } from 'electron';
2 2
3const debug = require('../../preload-safe-debug')('Ferdium:feature:basicAuth:main'); 3const debug = require('../../preload-safe-debug')(
4 'Ferdium:feature:basicAuth:main',
5);
4 6
5export default function mainIpcHandler(mainWindow: BrowserWindow, authInfo) { 7export default function mainIpcHandler(mainWindow: BrowserWindow, authInfo) {
6 debug('Sending basic auth call', authInfo); 8 debug('Sending basic auth call', authInfo);
diff --git a/src/features/publishDebugInfo/Component.js b/src/features/publishDebugInfo/Component.js
index 1668ea79a..27661d917 100644
--- a/src/features/publishDebugInfo/Component.js
+++ b/src/features/publishDebugInfo/Component.js
@@ -14,7 +14,9 @@ import { DEBUG_API } from '../../config';
14import AppStore from '../../stores/AppStore'; 14import AppStore from '../../stores/AppStore';
15import ServicesStore from '../../stores/ServicesStore'; 15import ServicesStore from '../../stores/ServicesStore';
16 16
17const debug = require('../../preload-safe-debug')('Ferdium:feature:publishDebugInfo'); 17const debug = require('../../preload-safe-debug')(
18 'Ferdium:feature:publishDebugInfo',
19);
18 20
19const messages = defineMessages({ 21const messages = defineMessages({
20 title: { 22 title: {
@@ -89,7 +91,7 @@ class PublishDebugLogModal extends Component {
89 this.setState({ 91 this.setState({
90 log: null, 92 log: null,
91 error: false, 93 error: false,
92 isSendingLog: false 94 isSendingLog: false,
93 }); 95 });
94 } 96 }
95 97
@@ -149,17 +151,15 @@ class PublishDebugLogModal extends Component {
149 className={`${classes.modal} publish-debug`} 151 className={`${classes.modal} publish-debug`}
150 close={() => this.close()} 152 close={() => this.close()}
151 > 153 >
152 <H1 className={classes.headline}>{intl.formatMessage(messages.title)}</H1> 154 <H1 className={classes.headline}>
155 {intl.formatMessage(messages.title)}
156 </H1>
153 {log && ( 157 {log && (
154 <> 158 <>
155 <p className={classes.info}> 159 <p className={classes.info}>
156 {intl.formatMessage(messages.published)} 160 {intl.formatMessage(messages.published)}
157 </p> 161 </p>
158 <Input 162 <Input showLabel={false} value={`${DEBUG_API}/${log}`} readonly />
159 showLabel={false}
160 value={`${DEBUG_API}/${log}`}
161 readonly
162 />
163 </> 163 </>
164 )} 164 )}
165 165
@@ -169,9 +169,7 @@ class PublishDebugLogModal extends Component {
169 169
170 {!log && !error && ( 170 {!log && !error && (
171 <> 171 <>
172 <p className={classes.info}> 172 <p className={classes.info}>{intl.formatMessage(messages.info)}</p>
173 {intl.formatMessage(messages.info)}
174 </p>
175 173
176 <a 174 <a
177 href={`${DEBUG_API}/privacy.html`} 175 href={`${DEBUG_API}/privacy.html`}
diff --git a/src/features/publishDebugInfo/index.ts b/src/features/publishDebugInfo/index.ts
index 597bcdc12..80714a104 100644
--- a/src/features/publishDebugInfo/index.ts
+++ b/src/features/publishDebugInfo/index.ts
@@ -3,7 +3,9 @@ import { state as ModalState } from './store';
3export { default as Component } from './Component'; 3export { default as Component } from './Component';
4 4
5const state = ModalState; 5const state = ModalState;
6const debug = require('../../preload-safe-debug')('Ferdium:feature:publishDebugInfo'); 6const debug = require('../../preload-safe-debug')(
7 'Ferdium:feature:publishDebugInfo',
8);
7 9
8export default function initialize() { 10export default function initialize() {
9 debug('Initialize publishDebugInfo feature'); 11 debug('Initialize publishDebugInfo feature');
diff --git a/src/features/quickSwitch/index.ts b/src/features/quickSwitch/index.ts
index 9d53d0b2f..e6ee66e16 100644
--- a/src/features/quickSwitch/index.ts
+++ b/src/features/quickSwitch/index.ts
@@ -3,7 +3,9 @@ import { state as ModalState } from './store';
3export { default as Component } from './Component'; 3export { default as Component } from './Component';
4const state = ModalState; 4const state = ModalState;
5 5
6const debug = require('../../preload-safe-debug')('Ferdium:feature:quickSwitch'); 6const debug = require('../../preload-safe-debug')(
7 'Ferdium:feature:quickSwitch',
8);
7 9
8export default function initialize() { 10export default function initialize() {
9 debug('Initialize quickSwitch feature'); 11 debug('Initialize quickSwitch feature');
diff --git a/src/features/serviceProxy/index.ts b/src/features/serviceProxy/index.ts
index e0d667a72..51e67feca 100644
--- a/src/features/serviceProxy/index.ts
+++ b/src/features/serviceProxy/index.ts
@@ -1,7 +1,9 @@
1import { autorun, observable } from 'mobx'; 1import { autorun, observable } from 'mobx';
2import { session } from '@electron/remote'; 2import { session } from '@electron/remote';
3 3
4const debug = require('../../preload-safe-debug')('Ferdium:feature:serviceProxy'); 4const debug = require('../../preload-safe-debug')(
5 'Ferdium:feature:serviceProxy',
6);
5 7
6export const config = observable({ 8export const config = observable({
7 isEnabled: true, 9 isEnabled: true,
diff --git a/src/features/todos/preload.ts b/src/features/todos/preload.ts
index 6c8bc1aea..0d76efd7a 100644
--- a/src/features/todos/preload.ts
+++ b/src/features/todos/preload.ts
@@ -1,7 +1,9 @@
1import { ipcRenderer } from 'electron'; 1import { ipcRenderer } from 'electron';
2import { IPC } from './constants'; 2import { IPC } from './constants';
3 3
4const debug = require('../../preload-safe-debug')('Ferdium:feature:todos:preload'); 4const debug = require('../../preload-safe-debug')(
5 'Ferdium:feature:todos:preload',
6);
5 7
6debug('Preloading Todos Webview'); 8debug('Preloading Todos Webview');
7 9
diff --git a/src/features/workspaces/actions.ts b/src/features/workspaces/actions.ts
index b7f8b6b90..b4e1d0758 100644
--- a/src/features/workspaces/actions.ts
+++ b/src/features/workspaces/actions.ts
@@ -24,5 +24,5 @@ export default createActionsFromDefinitions(
24 openWorkspaceSettings: {}, 24 openWorkspaceSettings: {},
25 toggleKeepAllWorkspacesLoadedSetting: {}, 25 toggleKeepAllWorkspacesLoadedSetting: {},
26 }, 26 },
27 PropTypes.checkPropTypes 27 PropTypes.checkPropTypes,
28); 28);
diff --git a/src/features/workspaces/api.ts b/src/features/workspaces/api.ts
index fb752c565..b8bb703cd 100644
--- a/src/features/workspaces/api.ts
+++ b/src/features/workspaces/api.ts
@@ -4,7 +4,9 @@ import Request from '../../stores/lib/Request';
4import Workspace from './models/Workspace'; 4import Workspace from './models/Workspace';
5import apiBase from '../../api/apiBase'; 5import apiBase from '../../api/apiBase';
6 6
7const debug = require('../../preload-safe-debug')('Ferdium:feature:workspaces:api'); 7const debug = require('../../preload-safe-debug')(
8 'Ferdium:feature:workspaces:api',
9);
8 10
9export const workspaceApi = { 11export const workspaceApi = {
10 getUserWorkspaces: async () => { 12 getUserWorkspaces: async () => {
diff --git a/src/features/workspaces/components/EditWorkspaceForm.js b/src/features/workspaces/components/EditWorkspaceForm.js
index 7e8541c44..6bc9ae6f0 100644
--- a/src/features/workspaces/components/EditWorkspaceForm.js
+++ b/src/features/workspaces/components/EditWorkspaceForm.js
@@ -170,10 +170,7 @@ class EditWorkspaceForm extends Component {
170 </div> 170 </div>
171 <div className="settings__body"> 171 <div className="settings__body">
172 {updateWorkspaceRequest.error && ( 172 {updateWorkspaceRequest.error && (
173 <Infobox 173 <Infobox icon="alert" type="danger">
174 icon="alert"
175 type="danger"
176 >
177 Error while saving workspace 174 Error while saving workspace
178 </Infobox> 175 </Infobox>
179 )} 176 )}
diff --git a/src/features/workspaces/store.js b/src/features/workspaces/store.js
index e8c5d0590..a8fb493df 100644
--- a/src/features/workspaces/store.js
+++ b/src/features/workspaces/store.js
@@ -15,7 +15,9 @@ import { createActionBindings } from '../utils/ActionBinding';
15 15
16import { KEEP_WS_LOADED_USID } from '../../config'; 16import { KEEP_WS_LOADED_USID } from '../../config';
17 17
18const debug = require('../../preload-safe-debug')('Ferdium:feature:workspaces:store'); 18const debug = require('../../preload-safe-debug')(
19 'Ferdium:feature:workspaces:store',
20);
19 21
20export default class WorkspacesStore extends FeatureStore { 22export default class WorkspacesStore extends FeatureStore {
21 @observable isFeatureActive = false; 23 @observable isFeatureActive = false;
diff --git a/src/helpers/array-helpers.ts b/src/helpers/array-helpers.ts
index 5d28af433..33be12fa7 100644
--- a/src/helpers/array-helpers.ts
+++ b/src/helpers/array-helpers.ts
@@ -1,6 +1,6 @@
1export default function shuffleArray(arr: any[]): any[] { 1export default function shuffleArray(arr: any[]): any[] {
2 return arr 2 return arr
3 .map(a => [ Math.random(), a ]) 3 .map(a => [Math.random(), a])
4 .sort((a, b) => a[ 0 ] - b[ 0 ]) 4 .sort((a, b) => a[0] - b[0])
5 .map(a => a[ 1 ]) 5 .map(a => a[1]);
6}; 6}
diff --git a/src/helpers/url-helpers.ts b/src/helpers/url-helpers.ts
index 720f242b4..69a2cc4dc 100644
--- a/src/helpers/url-helpers.ts
+++ b/src/helpers/url-helpers.ts
@@ -24,7 +24,12 @@ export function isValidExternalURL(url: string | URL) {
24} 24}
25 25
26export function fixUrl(url: string | URL) { 26export function fixUrl(url: string | URL) {
27 return url.toString().replaceAll('//', '/').replaceAll('http:/', 'http://').replaceAll('https:/', 'https://').replaceAll('file:/', 'file://'); 27 return url
28 .toString()
29 .replaceAll('//', '/')
30 .replaceAll('http:/', 'http://')
31 .replaceAll('https:/', 'https://')
32 .replaceAll('file:/', 'file://');
28} 33}
29 34
30export function isValidFileUrl(path: string) { 35export function isValidFileUrl(path: string) {
diff --git a/src/helpers/validation-helpers.ts b/src/helpers/validation-helpers.ts
index b2b8823af..4e0af8b08 100644
--- a/src/helpers/validation-helpers.ts
+++ b/src/helpers/validation-helpers.ts
@@ -13,7 +13,7 @@ const messages = defineMessages({
13 }, 13 },
14 url: { 14 url: {
15 id: 'validation.url', 15 id: 'validation.url',
16 defaultMessage: "{field} is not a valid URL", 16 defaultMessage: '{field} is not a valid URL',
17 }, 17 },
18 minLength: { 18 minLength: {
19 id: 'validation.minLength', 19 id: 'validation.minLength',
diff --git a/src/i18n/translations.ts b/src/i18n/translations.ts
index 99c6e1e80..c62256aec 100644
--- a/src/i18n/translations.ts
+++ b/src/i18n/translations.ts
@@ -13,4 +13,4 @@ export default function generatedTranslations() {
13 } 13 }
14 } 14 }
15 return translations; 15 return translations;
16}; 16}
diff --git a/src/internal-server/app/Controllers/Http/RecipeController.js b/src/internal-server/app/Controllers/Http/RecipeController.js
index eac34aa5c..61fa6be8f 100644
--- a/src/internal-server/app/Controllers/Http/RecipeController.js
+++ b/src/internal-server/app/Controllers/Http/RecipeController.js
@@ -4,7 +4,9 @@ const { validateAll } = use('Validator');
4const Env = use('Env'); 4const Env = use('Env');
5 5
6const fetch = require('node-fetch'); 6const fetch = require('node-fetch');
7const debug = require('../../../../preload-safe-debug')('Ferdium:internalServer:RecipeController'); 7const debug = require('../../../../preload-safe-debug')(
8 'Ferdium:internalServer:RecipeController',
9);
8const { LIVE_FERDIUM_API } = require('../../../../config'); 10const { LIVE_FERDIUM_API } = require('../../../../config');
9const { convertToJSON } = require('../../../../jsUtils'); 11const { convertToJSON } = require('../../../../jsUtils');
10const { API_VERSION } = require('../../../../environment-remote'); 12const { API_VERSION } = require('../../../../environment-remote');
@@ -87,15 +89,11 @@ class RecipeController {
87 } 89 }
88 90
89 // Return an empty array 91 // Return an empty array
90 update({ 92 update({ response }) {
91 response,
92 }) {
93 return response.send([]); 93 return response.send([]);
94 } 94 }
95 95
96 async popularRecipes({ 96 async popularRecipes({ response }) {
97 response,
98 }) {
99 const recipesUrlFetch = await fetch(`${RECIPES_URL}/popular`); 97 const recipesUrlFetch = await fetch(`${RECIPES_URL}/popular`);
100 const featuredRecipes = convertToJSON(await recipesUrlFetch.text()); 98 const featuredRecipes = convertToJSON(await recipesUrlFetch.text());
101 return response.send(featuredRecipes); 99 return response.send(featuredRecipes);
diff --git a/src/internal-server/app/Controllers/Http/ServiceController.js b/src/internal-server/app/Controllers/Http/ServiceController.js
index 44e4a7369..226adb134 100644
--- a/src/internal-server/app/Controllers/Http/ServiceController.js
+++ b/src/internal-server/app/Controllers/Http/ServiceController.js
@@ -2,7 +2,10 @@ const Service = use('App/Models/Service');
2const { validateAll } = use('Validator'); 2const { validateAll } = use('Validator');
3 3
4const { v4: uuid } = require('uuid'); 4const { v4: uuid } = require('uuid');
5const { DEFAULT_SERVICE_ORDER, DEFAULT_SERVICE_SETTINGS } = require('../../../../config'); 5const {
6 DEFAULT_SERVICE_ORDER,
7 DEFAULT_SERVICE_SETTINGS,
8} = require('../../../../config');
6const { convertToJSON } = require('../../../../jsUtils'); 9const { convertToJSON } = require('../../../../jsUtils');
7const { deduceIconUrl, moveIcon } = require('../../ImageHelper'); 10const { deduceIconUrl, moveIcon } = require('../../ImageHelper');
8 11
@@ -30,7 +33,8 @@ class ServiceController {
30 serviceId = uuid(); 33 serviceId = uuid();
31 } while ( 34 } while (
32 // eslint-disable-next-line no-await-in-loop, unicorn/no-await-expression-member 35 // eslint-disable-next-line no-await-in-loop, unicorn/no-await-expression-member
33 (await Service.query().where('serviceId', serviceId).fetch()).rows.length > 0 36 (await Service.query().where('serviceId', serviceId).fetch()).rows
37 .length > 0
34 ); 38 );
35 39
36 await Service.create({ 40 await Service.create({
diff --git a/src/internal-server/app/Controllers/Http/StaticController.js b/src/internal-server/app/Controllers/Http/StaticController.js
index ac6f89008..0a0146d6b 100644
--- a/src/internal-server/app/Controllers/Http/StaticController.js
+++ b/src/internal-server/app/Controllers/Http/StaticController.js
@@ -4,9 +4,7 @@
4 4
5class StaticController { 5class StaticController {
6 // Enable all features 6 // Enable all features
7 features({ 7 features({ response }) {
8 response,
9 }) {
10 return response.send({ 8 return response.send({
11 isServiceProxyEnabled: true, 9 isServiceProxyEnabled: true,
12 isWorkspaceEnabled: true, 10 isWorkspaceEnabled: true,
@@ -20,9 +18,7 @@ class StaticController {
20 } 18 }
21 19
22 // Show announcements 20 // Show announcements
23 announcement({ 21 announcement({ response }) {
24 response,
25 }) {
26 return response.send({}); 22 return response.send({});
27 } 23 }
28} 24}
diff --git a/src/internal-server/app/ImageHelper.js b/src/internal-server/app/ImageHelper.js
index e7c981a1d..905ba81ab 100644
--- a/src/internal-server/app/ImageHelper.js
+++ b/src/internal-server/app/ImageHelper.js
@@ -6,7 +6,7 @@ const path = require('path');
6const fs = require('fs-extra'); 6const fs = require('fs-extra');
7const { API_VERSION } = require('../../environment-remote'); 7const { API_VERSION } = require('../../environment-remote');
8 8
9const moveIcon = async (icon) => { 9const moveIcon = async icon => {
10 const iconsPath = path.join(Env.get('USER_PATH'), 'icons'); 10 const iconsPath = path.join(Env.get('USER_PATH'), 'icons');
11 await fs.ensureDir(iconsPath); 11 await fs.ensureDir(iconsPath);
12 12
@@ -24,6 +24,11 @@ const moveIcon = async (icon) => {
24 return !icon.moved() ? '-1' : iconId; 24 return !icon.moved() ? '-1' : iconId;
25}; 25};
26 26
27const deduceIconUrl = (iconId) => iconId ? `http://${Env.get('HOST')}:${Env.get('PORT')}/${API_VERSION}/icon/${iconId}` : null 27const deduceIconUrl = iconId =>
28 iconId
29 ? `http://${Env.get('HOST')}:${Env.get(
30 'PORT',
31 )}/${API_VERSION}/icon/${iconId}`
32 : null;
28 33
29module.exports = { moveIcon, deduceIconUrl }; 34module.exports = { moveIcon, deduceIconUrl };
diff --git a/src/internal-server/start.ts b/src/internal-server/start.ts
index ae28e3313..f5e1953e7 100644
--- a/src/internal-server/start.ts
+++ b/src/internal-server/start.ts
@@ -63,12 +63,15 @@ export const server = async (userPath: string, port: number, token: string) => {
63 returned = true; 63 returned = true;
64 } 64 }
65 }); 65 });
66 new Ignitor(fold).appRoot(__dirname).fireHttpServer().catch((error) => { 66 new Ignitor(fold)
67 console.error(error); 67 .appRoot(__dirname)
68 if (!returned) { 68 .fireHttpServer()
69 returned = true; 69 .catch(error => {
70 reject(error); 70 console.error(error);
71 } 71 if (!returned) {
72 }); 72 returned = true;
73 reject(error);
74 }
75 });
73 }); 76 });
74}; 77};
diff --git a/src/internal-server/start/routes.js b/src/internal-server/start/routes.js
index 736796bb8..8aca39347 100644
--- a/src/internal-server/start/routes.js
+++ b/src/internal-server/start/routes.js
@@ -18,9 +18,13 @@ migrate();
18 18
19async function validateToken(clientToken, response, next) { 19async function validateToken(clientToken, response, next) {
20 const serverToken = process.env.FERDIUM_LOCAL_TOKEN; 20 const serverToken = process.env.FERDIUM_LOCAL_TOKEN;
21 const valid = serverToken && 21 const valid =
22 serverToken &&
22 clientToken && 23 clientToken &&
23 timingSafeEqual(Buffer.from(clientToken, 'utf8'), Buffer.from(serverToken, 'utf8')); 24 timingSafeEqual(
25 Buffer.from(clientToken, 'utf8'),
26 Buffer.from(serverToken, 'utf8'),
27 );
24 if (valid) { 28 if (valid) {
25 await next(); 29 await next();
26 return true; 30 return true;
@@ -41,11 +45,11 @@ const OnlyAllowFerdium = async ({ request, response }, next) => {
41const RequireTokenInQS = async ({ request, response }, next) => { 45const RequireTokenInQS = async ({ request, response }, next) => {
42 const clientToken = request.get().token; 46 const clientToken = request.get().token;
43 return validateToken(clientToken, response, next); 47 return validateToken(clientToken, response, next);
44} 48};
45 49
46const FERDIUM_LOCAL_TOKEN_COOKIE = 'ferdium-local-token'; 50const FERDIUM_LOCAL_TOKEN_COOKIE = 'ferdium-local-token';
47 51
48const RequireAuthenticatedBrowser = async({ request, response }, next) => { 52const RequireAuthenticatedBrowser = async ({ request, response }, next) => {
49 const clientToken = request.cookie(FERDIUM_LOCAL_TOKEN_COOKIE); 53 const clientToken = request.cookie(FERDIUM_LOCAL_TOKEN_COOKIE);
50 return validateToken(clientToken, response, next); 54 return validateToken(clientToken, response, next);
51}; 55};
diff --git a/src/jsUtils.ts b/src/jsUtils.ts
index 36d70da25..ba7542eab 100644
--- a/src/jsUtils.ts
+++ b/src/jsUtils.ts
@@ -21,4 +21,4 @@ export const convertToJSON = (data: string | any | undefined | null) =>
21export const cleanseJSObject = (data: any | undefined | null) => 21export const cleanseJSObject = (data: any | undefined | null) =>
22 JSON.parse(JSON.stringify(data)); 22 JSON.parse(JSON.stringify(data));
23 23
24export const isEscKeyPress = (keyCode : Number) => keyCode === 27; 24export const isEscKeyPress = (keyCode: Number) => keyCode === 27;
diff --git a/src/lib/Tray.js b/src/lib/Tray.js
index 0e935d891..fffdec64d 100644
--- a/src/lib/Tray.js
+++ b/src/lib/Tray.js
@@ -224,15 +224,9 @@ export default class TrayIcon {
224 _getAsset(type, asset) { 224 _getAsset(type, asset) {
225 let { platform } = process; 225 let { platform } = process;
226 226
227 if ( 227 if (isMac && macosVersion.isGreaterThanOrEqualTo('11')) {
228 isMac &&
229 macosVersion.isGreaterThanOrEqualTo('11')
230 ) {
231 platform = `${platform}-20`; 228 platform = `${platform}-20`;
232 } else if ( 229 } else if (isMac && nativeTheme.shouldUseDarkColors) {
233 isMac &&
234 nativeTheme.shouldUseDarkColors
235 ) {
236 platform = `${platform}-dark`; 230 platform = `${platform}-dark`;
237 } 231 }
238 232
diff --git a/src/preload-safe-debug.ts b/src/preload-safe-debug.ts
index 1136e93c1..d18dd8639 100644
--- a/src/preload-safe-debug.ts
+++ b/src/preload-safe-debug.ts
@@ -9,20 +9,22 @@
9 * because they correspond to preload scripts. 9 * because they correspond to preload scripts.
10 */ 10 */
11module.exports = function debug(namespace: string): (...params: any[]) => void { 11module.exports = function debug(namespace: string): (...params: any[]) => void {
12 if (typeof process === 'object' && 12 if (
13 'contextIsolated' in process && 13 typeof process === 'object' &&
14 (process as unknown as { contextIsolated: string }).contextIsolated) { 14 'contextIsolated' in process &&
15 (process as unknown as { contextIsolated: string }).contextIsolated
16 ) {
15 // Only output debug messages to the console if debugging is requested. 17 // Only output debug messages to the console if debugging is requested.
16 // We don't reimplement the matching algorithm from `debug` and just dump all 18 // We don't reimplement the matching algorithm from `debug` and just dump all
17 // messages to the console if some form of `Ferdium` debugging is enabled. 19 // messages to the console if some form of `Ferdium` debugging is enabled.
18 if (process.env.DEBUG?.startsWith('Ferdium:')) { 20 if (process.env.DEBUG?.startsWith('Ferdium:')) {
19 return (...params) => console.debug(`[${namespace}]`, ...params); 21 return (...params) => console.debug(`[${namespace}]`, ...params);
20 } 22 }
21 return () => { }; 23 return () => {};
22 } 24 }
23 /* 25 /*
24 eslint-disable-next-line global-require -- 26 eslint-disable-next-line global-require --
25 This file contains a workaround for situations were global require is problematic. 27 This file contains a workaround for situations were global require is problematic.
26 */ 28 */
27 return require('debug')(namespace); 29 return require('debug')(namespace);
28} 30};
diff --git a/src/stores/SettingsStore.ts b/src/stores/SettingsStore.ts
index a03d3c188..e2903c952 100644
--- a/src/stores/SettingsStore.ts
+++ b/src/stores/SettingsStore.ts
@@ -1,4 +1,3 @@
1
2import { ipcRenderer } from 'electron'; 1import { ipcRenderer } from 'electron';
3import { getCurrentWindow } from '@electron/remote'; 2import { getCurrentWindow } from '@electron/remote';
4import { action, computed, makeObservable, observable, reaction } from 'mobx'; 3import { action, computed, makeObservable, observable, reaction } from 'mobx';
diff --git a/src/webview/dialogTitle.ts b/src/webview/dialogTitle.ts
index 67b4e5b6b..14676100c 100644
--- a/src/webview/dialogTitle.ts
+++ b/src/webview/dialogTitle.ts
@@ -1,6 +1,8 @@
1import { ipcRenderer } from 'electron'; 1import { ipcRenderer } from 'electron';
2 2
3const debug = require('../preload-safe-debug')('Ferdium:Plugin:DialogTitleHandler'); 3const debug = require('../preload-safe-debug')(
4 'Ferdium:Plugin:DialogTitleHandler',
5);
4 6
5export default class DialogTitleHandler { 7export default class DialogTitleHandler {
6 titleCache: { title: string }; 8 titleCache: { title: string };
diff --git a/test/helpers/update-helpers.test.ts b/test/helpers/update-helpers.test.ts
index 0494c6855..2b6bf3113 100644
--- a/test/helpers/update-helpers.test.ts
+++ b/test/helpers/update-helpers.test.ts
@@ -78,7 +78,10 @@ describe('onAuthGoToReleaseNotes', () => {
78 }); 78 });
79 79
80 it(`returns '#/releasenotes' string for empty string`, () => { 80 it(`returns '#/releasenotes' string for empty string`, () => {
81 const result = update_helpers.onAuthGoToReleaseNotes('#/auth', '?version=6.0.0'); 81 const result = update_helpers.onAuthGoToReleaseNotes(
82 '#/auth',
83 '?version=6.0.0',
84 );
82 expect(result).toEqual('#/auth/releasenotes?version=6.0.0'); 85 expect(result).toEqual('#/auth/releasenotes?version=6.0.0');
83 }); 86 });
84 87