From 5cff1609a9a5eb02d5d511c6233220e95528f6e3 Mon Sep 17 00:00:00 2001 From: Alex Oliynyk Date: Thu, 20 Feb 2025 12:31:53 +0000 Subject: [PATCH] fix error handling when checking auth --- extensions/lingo-rep-raycast/CHANGELOG.md | 2 +- extensions/lingo-rep-raycast/README.md | 2 +- .../lingo-rep-raycast/package-lock.json | 445 ------------------ extensions/lingo-rep-raycast/package.json | 12 +- extensions/lingo-rep-raycast/src/config.ts | 1 - extensions/lingo-rep-raycast/src/fetch.ts | 51 +- extensions/lingo-rep-raycast/src/hooks.tsx | 108 +++-- 7 files changed, 99 insertions(+), 522 deletions(-) diff --git a/extensions/lingo-rep-raycast/CHANGELOG.md b/extensions/lingo-rep-raycast/CHANGELOG.md index 03b72633f9098..b1c4b38c34674 100644 --- a/extensions/lingo-rep-raycast/CHANGELOG.md +++ b/extensions/lingo-rep-raycast/CHANGELOG.md @@ -1,3 +1,3 @@ # LingoRep Changelog -## [Initial Version] - 2024-05-05 \ No newline at end of file +## [Initial Version] - {PR_MERGE_DATE} diff --git a/extensions/lingo-rep-raycast/README.md b/extensions/lingo-rep-raycast/README.md index 543ad9786eae5..853765d4f6629 100644 --- a/extensions/lingo-rep-raycast/README.md +++ b/extensions/lingo-rep-raycast/README.md @@ -6,7 +6,7 @@ The best way to translate and learn new words in 100+ languages Quickly translate, save and repeat later unknowns words with LingoRep's Raycast Extension. LingoRep allows to sync your translations between devices (Web, Desktop) and repeat them -usign best spaced repetition system (FSRS). Having trouble remembering a word - quickly discuss +using best spaced repetition system (FSRS). Having trouble remembering a word - quickly discuss it with our conversational AI bot, using your voice. Read more on https://lingorep.com diff --git a/extensions/lingo-rep-raycast/package-lock.json b/extensions/lingo-rep-raycast/package-lock.json index 8b1244ed6878f..3bf36378a0c7b 100644 --- a/extensions/lingo-rep-raycast/package-lock.json +++ b/extensions/lingo-rep-raycast/package-lock.json @@ -14,7 +14,6 @@ "axios": "1.7.2", "hono": "^4.4.2", "lodash": "^4.17.21", - "node-fetch": "^3.3.2", "zod": "3.23.8" }, "devDependencies": { @@ -29,66 +28,6 @@ "typescript": "^5.2.2" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", - "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", - "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", - "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", - "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.24.2", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", @@ -104,306 +43,6 @@ "node": ">=18" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", - "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", - "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", - "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", - "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", - "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", - "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", - "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", - "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", - "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", - "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", - "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", - "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", - "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", - "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", - "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", - "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", - "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", - "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", - "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", - "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", @@ -2002,14 +1641,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "engines": { - "node": ">= 12" - } - }, "node_modules/data-view-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", @@ -2677,28 +2308,6 @@ "reusify": "^1.0.4" } }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2824,17 +2433,6 @@ "node": ">= 6" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3981,41 +3579,6 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -5374,14 +4937,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "engines": { - "node": ">= 8" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/extensions/lingo-rep-raycast/package.json b/extensions/lingo-rep-raycast/package.json index 1132bbdb34497..53bb9f84b6860 100644 --- a/extensions/lingo-rep-raycast/package.json +++ b/extensions/lingo-rep-raycast/package.json @@ -21,8 +21,15 @@ } ], "scripts": { - "build": "ray build -e dist", - "dev": "ray develop", + "copy:shared-packages": "./copy-shared-packages.sh", + "watch:translate": "chokidar '../../packages/translate/dist/**/*' -c 'npm run copy:shared-packages'", + "watch:lang-options": "chokidar '../../packages/lang-options/dist/**/*' -c 'npm run copy:shared-packages'", + "watch:shared-packages": "npm-run-all --parallel watch:translate watch:lang-options", + "npm:install": "npm install --prefix /Users/alex/Work/Projects/alex/lingo-rep-monorepo/apps/lingo-rep-raycast", + "npm:uninstall": "npm uninstall --prefix /Users/alex/Work/Projects/alex/lingo-rep-monorepo/apps/lingo-rep-raycast", + "build": "npm run npm:install && ray build -e dist", + "dev:raycast": "ray develop", + "dev": "npm run npm:install && npm run copy:shared-packages && npm-run-all --parallel watch:shared-packages dev:raycast", "fix-lint": "ray lint --fix", "lint": "ray lint", "publish": "npx @raycast/api@latest publish" @@ -33,7 +40,6 @@ "axios": "1.7.2", "hono": "^4.4.2", "lodash": "^4.17.21", - "node-fetch": "^3.3.2", "zod": "3.23.8" }, "devDependencies": { diff --git a/extensions/lingo-rep-raycast/src/config.ts b/extensions/lingo-rep-raycast/src/config.ts index dbe15f3f8e796..ccce694b0128b 100644 --- a/extensions/lingo-rep-raycast/src/config.ts +++ b/extensions/lingo-rep-raycast/src/config.ts @@ -15,6 +15,5 @@ const allConfigs = { weURL: "chrome-extension://gfmbkbpbncjopblehgldppphpkcmehnk/settings.html", }, }; -// test export const config = allConfigs[nodeEnv]; diff --git a/extensions/lingo-rep-raycast/src/fetch.ts b/extensions/lingo-rep-raycast/src/fetch.ts index 3411f95bd0d6f..b1f461bb7e70c 100644 --- a/extensions/lingo-rep-raycast/src/fetch.ts +++ b/extensions/lingo-rep-raycast/src/fetch.ts @@ -1,4 +1,4 @@ -import fetch from "node-fetch"; +import axios from "axios"; import { config } from "./config"; async function get(url: string, jwt?: string): Promise { @@ -6,33 +6,38 @@ async function get(url: string, jwt?: string): Promise { throw new Error("No JWT provided"); } - const response = await fetch(`${config.apiURL}${url}`, { - method: "GET", - headers: { - Authorization: `Bearer ${jwt}`, - }, - }); - if (!response.ok) { - throw new Error(`GET request failed: ${response.status}`); + try { + const response = await axios.get(`${config.apiURL}${url}`, { + headers: { + Authorization: `Bearer ${jwt}`, + }, + }); + return response.data; + } catch (error) { + if (axios.isAxiosError(error) && error.response) { + throw new Error(`GET request failed: ${error.response.status}`); + } + throw error; } - return response.json(); } -// Define the POST wrapper -async function post(url: string, body: Record, jwt: string): Promise { +async function post(url: string, body: unknown, jwt?: string): Promise { if (!jwt) throw new Error("No JWT provided"); - const response = await fetch(`${config.apiURL}${url}`, { - method: "POST", - body: JSON.stringify(body), - headers: { - Authorization: `Bearer ${jwt}`, - "Content-Type": "application/json", - }, - }); - if (!response.ok) { - throw new Error(`POST request failed: ${response.status}. Response: ${await response.text()} `); + + try { + const response = await axios.post(`${config.apiURL}${url}`, body, { + headers: { + Authorization: `Bearer ${jwt}`, + "Content-Type": "application/json", + }, + }); + return response.data; + } catch (error) { + if (axios.isAxiosError(error) && error.response) { + throw new Error(`POST request failed: ${error.response.status}`); + } + throw error; } - return await response.json(); } export { get, post }; diff --git a/extensions/lingo-rep-raycast/src/hooks.tsx b/extensions/lingo-rep-raycast/src/hooks.tsx index 056558b0bb3f7..f3fec35c46537 100644 --- a/extensions/lingo-rep-raycast/src/hooks.tsx +++ b/extensions/lingo-rep-raycast/src/hooks.tsx @@ -1,7 +1,7 @@ import { useState, useEffect } from "react"; import { useCachedState } from "@raycast/utils"; -import { OAuth } from "@raycast/api"; -import fetch from "node-fetch"; +import { OAuth, showToast, Toast } from "@raycast/api"; +import axios from "axios"; import { get, post } from "./fetch"; import { config } from "./config"; @@ -55,14 +55,18 @@ async function refreshGoogleTokens(refreshToken: string): Promise { @@ -74,56 +78,64 @@ export const useIsAuthenticated = () => { useEffect(() => { void (async () => { const getJWTAndUserId = async (token: string) => { - const response = await fetch(`${config.apiURL}/auth/${authProvider}/get-jwt`, { - method: "GET", - headers: { - Authorization: `Bearer ${token}`, - }, - }); - - if (!response.ok) { - console.error("Error getting JWT", await response.text()); - throw new Error(response.statusText); - } - const tokenResponse = (await response.json()) as { message: string; jwt: string }; - if (tokenResponse?.jwt) { - setJWT(tokenResponse.jwt); - const userProfileRes = await fetch(`${config.apiURL}/auth/profile`, { + try { + const response = await axios.get(`${config.apiURL}/auth/${authProvider}/get-jwt`, { headers: { - Authorization: `Bearer ${tokenResponse.jwt}`, + Authorization: `Bearer ${token}`, }, }); - if (!userProfileRes.ok) { - console.error("Error getting user profile", await userProfileRes.text()); - throw new Error(userProfileRes.statusText); + + const tokenResponse = response.data as { message: string; jwt: string }; + if (tokenResponse?.jwt) { + setJWT(tokenResponse.jwt); + const userProfileRes = await axios.get(`${config.apiURL}/auth/profile`, { + headers: { + Authorization: `Bearer ${tokenResponse.jwt}`, + }, + }); + const userProfile = userProfileRes.data as { message: string; user: { id: string } }; + setUserId(userProfile.user.id); } - const userProfile = (await userProfileRes.json()) as { message: string; user: { id: string } }; - setUserId(userProfile.user.id); + } catch (error) { + if (axios.isAxiosError(error) && error.response) { + console.error("Error getting JWT/profile", error.response.data); + throw new Error(error.response.statusText); + } + throw error; } }; - if (authProvider === "github") { - const tokenSet = await githubService.client.getTokens(); - if (tokenSet && !tokenSet.isExpired()) { - setIsAuthenticated(true); - await getJWTAndUserId(tokenSet.accessToken); - } - } else if (authProvider === "google") { - let tokenSet = await googleService.client.getTokens(); - if (tokenSet?.accessToken) { - if (tokenSet.refreshToken && tokenSet.isExpired()) { - await googleService.client.setTokens(await refreshGoogleTokens(tokenSet.refreshToken)); - } - tokenSet = await googleService.client.getTokens(); - if (tokenSet?.accessToken && !tokenSet?.isExpired()) { + const resetAuth = () => { + setIsAuthenticated(false); + setJWT(""); + setUserId(""); + }; + try { + if (authProvider === "github") { + const tokenSet = await githubService.client.getTokens(); + if (tokenSet && !tokenSet.isExpired()) { setIsAuthenticated(true); await getJWTAndUserId(tokenSet.accessToken); } + } else if (authProvider === "google") { + let tokenSet = await googleService.client.getTokens(); + if (tokenSet?.accessToken) { + if (tokenSet.refreshToken && tokenSet.isExpired()) { + await googleService.client.setTokens(await refreshGoogleTokens(tokenSet.refreshToken)); + } + tokenSet = await googleService.client.getTokens(); + if (tokenSet?.accessToken && !tokenSet?.isExpired()) { + setIsAuthenticated(true); + await getJWTAndUserId(tokenSet.accessToken); + } + } + } else { + resetAuth(); } - } else { - setIsAuthenticated(false); - setJWT(""); - setUserId(""); + } catch (err) { + resetAuth(); + + showToast({ title: "Auth error", style: Toast.Style.Failure }); } })(); }, [authProvider]);