diff --git a/packages/codemirror-lang-graphql/package.json b/packages/codemirror-lang-graphql/package.json index b644e04e4..3b9137859 100644 --- a/packages/codemirror-lang-graphql/package.json +++ b/packages/codemirror-lang-graphql/package.json @@ -17,7 +17,7 @@ "types": "dist/index.d.ts", "sideEffects": false, "dependencies": { - "@codemirror/language": "^6.9.2", + "@codemirror/language": "6.9.0", "@lezer/highlight": "1.1.4", "@lezer/lr": "^1.3.13" }, diff --git a/packages/hoppscotch-backend/package.json b/packages/hoppscotch-backend/package.json index 8e1f07d31..3bc5fbdf4 100644 --- a/packages/hoppscotch-backend/package.json +++ b/packages/hoppscotch-backend/package.json @@ -1,6 +1,6 @@ { "name": "hoppscotch-backend", - "version": "2023.8.3", + "version": "2023.8.4-1", "description": "", "author": "", "private": true, diff --git a/packages/hoppscotch-common/locales/en.json b/packages/hoppscotch-common/locales/en.json index 35450a5fb..aef9d41d7 100644 --- a/packages/hoppscotch-common/locales/en.json +++ b/packages/hoppscotch-common/locales/en.json @@ -1,5 +1,6 @@ { "action": { + "add": "Add", "autoscroll": "Autoscroll", "cancel": "Cancel", "choose_file": "Choose a file", @@ -54,9 +55,28 @@ "new": "Add new", "star": "Add star" }, + "cookies": { + "modal": { + "new_domain_name": "New domain name", + "set": "Set a cookie", + "cookie_string": "Cookie string", + "enter_cookie_string": "Enter cookie string", + "cookie_name": "Name", + "cookie_value": "Value", + "cookie_path": "Path", + "cookie_expires": "Expires", + "managed_tab": "Managed", + "raw_tab": "Raw", + "interceptor_no_support": "Your currently selected interceptor does not support cookies. Select a different Interceptor and try again.", + "empty_domains": "Domain list is empty", + "empty_domain": "Domain is empty", + "no_cookies_in_domain": "No cookies set for this domain" + } + }, "app": { "chat_with_us": "Chat with us", "contact_us": "Contact us", + "cookies": "Cookies", "copy": "Copy", "copy_user_id": "Copy User Auth Token", "developer_option": "Developer options", @@ -119,7 +139,21 @@ "password": "Password", "token": "Token", "type": "Authorization Type", - "username": "Username" + "username": "Username", + "oauth": { + "token_generation_oidc_discovery_failed": "Failure on token generation: OpenID Connect Discovery Failed", + "something_went_wrong_on_token_generation": "Something went wrong on token generation", + "redirect_auth_server_returned_error": "Auth Server returned an error state", + "redirect_no_auth_code": "No Authorization Code present in the redirect", + "redirect_invalid_state": "Invalid State value present in the redirect", + "redirect_no_token_endpoint": "No Token Endpoint Defined", + "redirect_no_client_id": "No Client ID defined", + "redirect_no_client_secret": "No Client Secret Defined", + "redirect_no_code_verifier": "No Code Verifier Defined", + "redirect_auth_token_request_failed": "Request to get the auth token failed", + "redirect_auth_token_request_invalid_response": "Invalid Response from the Token Endpoint when requesting for an auth token", + "something_went_wrong_on_oauth_redirect": "Something went wrong during OAuth Redirect" + } }, "collection": { "created": "Collection created", @@ -237,6 +271,7 @@ "error": { "browser_support_sse": "This browser doesn't seems to have Server Sent Events support.", "check_console_details": "Check console log for details.", + "check_how_to_add_origin": "Check how you can add an origin", "curl_invalid_format": "cURL is not formatted properly", "danger_zone": "Danger zone", "delete_account": "Your account is currently an owner in these teams:", @@ -257,6 +292,7 @@ "no_environments_to_export": "No environments to export. Please create an environment to get started.", "no_results_found": "No matches found", "page_not_found": "This page could not be found", + "please_install_extension": "Please install the extension and add origin to the extension.", "proxy_error": "Proxy error", "script_fail": "Could not execute pre-request script", "something_went_wrong": "Something went wrong", @@ -764,7 +800,7 @@ "published_error": "Something went wrong while publishing msg: {topic} to topic: {message}", "published_message": "Published message: {message} to topic: {topic}", "reconnection_error": "Failed to reconnect", - "show":"Show", + "show": "Show", "subscribed_failed": "Failed to subscribe to topic: {topic}", "subscribed_success": "Successfully subscribed to topic: {topic}", "unsubscribed_failed": "Failed to unsubscribe from topic: {topic}", diff --git a/packages/hoppscotch-common/package.json b/packages/hoppscotch-common/package.json index b51cc1e11..7f4020036 100644 --- a/packages/hoppscotch-common/package.json +++ b/packages/hoppscotch-common/package.json @@ -1,7 +1,7 @@ { "name": "@hoppscotch/common", "private": true, - "version": "2023.8.3", + "version": "2023.8.4-1", "scripts": { "dev": "pnpm exec npm-run-all -p -l dev:*", "test": "vitest --run", @@ -27,7 +27,7 @@ "@codemirror/lang-javascript": "^6.2.1", "@codemirror/lang-json": "^6.0.1", "@codemirror/lang-xml": "^6.0.2", - "@codemirror/language": "^6.9.2", + "@codemirror/language": "6.9.0", "@codemirror/legacy-modes": "^6.3.3", "@codemirror/lint": "^6.4.2", "@codemirror/search": "^6.5.4", @@ -52,6 +52,7 @@ "acorn-walk": "^8.2.0", "axios": "^1.4.0", "buffer": "^6.0.3", + "cookie-es": "^1.0.0", "dioc": "workspace:^", "esprima": "^4.0.1", "events": "^3.3.0", @@ -76,6 +77,8 @@ "process": "^0.11.10", "qs": "^6.11.2", "rxjs": "^7.8.1", + "set-cookie-parser": "^2.6.0", + "set-cookie-parser-es": "^1.0.5", "socket.io-client-v2": "npm:socket.io-client@^2.4.0", "socket.io-client-v3": "npm:socket.io-client@^3.1.3", "socket.io-client-v4": "npm:socket.io-client@^4.4.1", @@ -98,7 +101,8 @@ "wonka": "^6.3.4", "workbox-window": "^7.0.0", "xml-formatter": "^3.5.0", - "yargs-parser": "^21.1.1" + "yargs-parser": "^21.1.1", + "zod": "^3.22.4" }, "devDependencies": { "@esbuild-plugins/node-globals-polyfill": "^0.2.3", diff --git a/packages/hoppscotch-common/public/badge-dark.svg b/packages/hoppscotch-common/public/badge-dark.svg new file mode 100644 index 000000000..831b4af14 --- /dev/null +++ b/packages/hoppscotch-common/public/badge-dark.svg @@ -0,0 +1 @@ +▶ Run in Hoppscotch diff --git a/packages/hoppscotch-common/public/badge-light.svg b/packages/hoppscotch-common/public/badge-light.svg new file mode 100644 index 000000000..828836e19 --- /dev/null +++ b/packages/hoppscotch-common/public/badge-light.svg @@ -0,0 +1 @@ +▶ Run in Hoppscotch diff --git a/packages/hoppscotch-common/public/banner.png b/packages/hoppscotch-common/public/banner.png index f697a6eee..1997efa68 100644 Binary files a/packages/hoppscotch-common/public/banner.png and b/packages/hoppscotch-common/public/banner.png differ diff --git a/packages/hoppscotch-common/public/favicon.ico b/packages/hoppscotch-common/public/favicon.ico index f8cd232e7..741183600 100644 Binary files a/packages/hoppscotch-common/public/favicon.ico and b/packages/hoppscotch-common/public/favicon.ico differ diff --git a/packages/hoppscotch-common/public/icon.png b/packages/hoppscotch-common/public/icon.png index 5919c5185..df8b691a9 100644 Binary files a/packages/hoppscotch-common/public/icon.png and b/packages/hoppscotch-common/public/icon.png differ diff --git a/packages/hoppscotch-common/public/icons/pwa-1024x1024.png b/packages/hoppscotch-common/public/icons/pwa-1024x1024.png index 4b439124c..f99ad60fb 100644 Binary files a/packages/hoppscotch-common/public/icons/pwa-1024x1024.png and b/packages/hoppscotch-common/public/icons/pwa-1024x1024.png differ diff --git a/packages/hoppscotch-common/public/icons/pwa-128x128.png b/packages/hoppscotch-common/public/icons/pwa-128x128.png index cae223eae..300c68c3e 100644 Binary files a/packages/hoppscotch-common/public/icons/pwa-128x128.png and b/packages/hoppscotch-common/public/icons/pwa-128x128.png differ diff --git a/packages/hoppscotch-common/public/icons/pwa-16x16.png b/packages/hoppscotch-common/public/icons/pwa-16x16.png index 308c5ff90..62d642743 100644 Binary files a/packages/hoppscotch-common/public/icons/pwa-16x16.png and b/packages/hoppscotch-common/public/icons/pwa-16x16.png differ diff --git a/packages/hoppscotch-common/public/icons/pwa-192x192.png b/packages/hoppscotch-common/public/icons/pwa-192x192.png index d4d4654c4..cffff24c0 100644 Binary files a/packages/hoppscotch-common/public/icons/pwa-192x192.png and b/packages/hoppscotch-common/public/icons/pwa-192x192.png differ diff --git a/packages/hoppscotch-common/public/icons/pwa-256x256.png b/packages/hoppscotch-common/public/icons/pwa-256x256.png index 6358d6fd6..77ad9a5ec 100644 Binary files a/packages/hoppscotch-common/public/icons/pwa-256x256.png and b/packages/hoppscotch-common/public/icons/pwa-256x256.png differ diff --git a/packages/hoppscotch-common/public/icons/pwa-32x32.png b/packages/hoppscotch-common/public/icons/pwa-32x32.png index 48e200102..c497149f3 100644 Binary files a/packages/hoppscotch-common/public/icons/pwa-32x32.png and b/packages/hoppscotch-common/public/icons/pwa-32x32.png differ diff --git a/packages/hoppscotch-common/public/icons/pwa-512x512.png b/packages/hoppscotch-common/public/icons/pwa-512x512.png index 109726d11..313d51853 100644 Binary files a/packages/hoppscotch-common/public/icons/pwa-512x512.png and b/packages/hoppscotch-common/public/icons/pwa-512x512.png differ diff --git a/packages/hoppscotch-common/public/images/banner-dark.png b/packages/hoppscotch-common/public/images/banner-dark.png index b9f8a6049..966ab4b57 100644 Binary files a/packages/hoppscotch-common/public/images/banner-dark.png and b/packages/hoppscotch-common/public/images/banner-dark.png differ diff --git a/packages/hoppscotch-common/public/images/banner-light.png b/packages/hoppscotch-common/public/images/banner-light.png index 2fb808e89..0e284d3ec 100644 Binary files a/packages/hoppscotch-common/public/images/banner-light.png and b/packages/hoppscotch-common/public/images/banner-light.png differ diff --git a/packages/hoppscotch-common/public/logo.png b/packages/hoppscotch-common/public/logo.png index 5919c5185..787c4b6dd 100644 Binary files a/packages/hoppscotch-common/public/logo.png and b/packages/hoppscotch-common/public/logo.png differ diff --git a/packages/hoppscotch-common/public/logo.svg b/packages/hoppscotch-common/public/logo.svg index 8044120b7..d78a86ba7 100644 --- a/packages/hoppscotch-common/public/logo.svg +++ b/packages/hoppscotch-common/public/logo.svg @@ -1 +1,50 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/hoppscotch-common/src/components.d.ts b/packages/hoppscotch-common/src/components.d.ts index 09f6cd1d7..18a1a24ce 100644 --- a/packages/hoppscotch-common/src/components.d.ts +++ b/packages/hoppscotch-common/src/components.d.ts @@ -59,6 +59,8 @@ declare module "vue" { CollectionsRequest: typeof import('./components/collections/Request.vue')['default'] CollectionsSaveRequest: typeof import('./components/collections/SaveRequest.vue')['default'] CollectionsTeamCollections: typeof import('./components/collections/TeamCollections.vue')['default'] + CookiesAllModal: typeof import('./components/cookies/AllModal.vue')['default'] + CookiesEditCookie: typeof import('./components/cookies/EditCookie.vue')['default'] Environments: typeof import('./components/environments/index.vue')['default'] EnvironmentsAdd: typeof import('./components/environments/Add.vue')['default'] EnvironmentsImportExport: typeof import('./components/environments/ImportExport.vue')['default'] @@ -91,13 +93,11 @@ declare module "vue" { HoppButtonPrimary: typeof import('@hoppscotch/ui')['HoppButtonPrimary'] HoppButtonSecondary: typeof import('@hoppscotch/ui')['HoppButtonSecondary'] HoppSmartAnchor: typeof import('@hoppscotch/ui')['HoppSmartAnchor'] - HoppSmartAutoComplete: typeof import('@hoppscotch/ui')['HoppSmartAutoComplete'] HoppSmartCheckbox: typeof import('@hoppscotch/ui')['HoppSmartCheckbox'] HoppSmartConfirmModal: typeof import('@hoppscotch/ui')['HoppSmartConfirmModal'] HoppSmartExpand: typeof import('@hoppscotch/ui')['HoppSmartExpand'] HoppSmartFileChip: typeof import('@hoppscotch/ui')['HoppSmartFileChip'] HoppSmartInput: typeof import('@hoppscotch/ui')['HoppSmartInput'] - HoppSmartIntersection: typeof import('@hoppscotch/ui')['HoppSmartIntersection'] HoppSmartItem: typeof import('@hoppscotch/ui')['HoppSmartItem'] HoppSmartLink: typeof import('@hoppscotch/ui')['HoppSmartLink'] HoppSmartModal: typeof import('@hoppscotch/ui')['HoppSmartModal'] @@ -145,7 +145,6 @@ declare module "vue" { IconLucideAlertTriangle: typeof import('~icons/lucide/alert-triangle')['default'] IconLucideArrowLeft: typeof import('~icons/lucide/arrow-left')['default'] IconLucideArrowUpRight: typeof import('~icons/lucide/arrow-up-right')['default'] - IconLucideBrush: typeof import('~icons/lucide/brush')['default'] IconLucideCheckCircle: typeof import('~icons/lucide/check-circle')['default'] IconLucideChevronRight: typeof import('~icons/lucide/chevron-right')['default'] IconLucideGlobe: typeof import('~icons/lucide/globe')['default'] @@ -155,10 +154,9 @@ declare module "vue" { IconLucideLayers: typeof import('~icons/lucide/layers')['default'] IconLucideListEnd: typeof import('~icons/lucide/list-end')['default'] IconLucideMinus: typeof import('~icons/lucide/minus')['default'] - IconLucideRss: typeof import('~icons/lucide/rss')['default'] IconLucideSearch: typeof import('~icons/lucide/search')['default'] IconLucideUsers: typeof import('~icons/lucide/users')['default'] - IconLucideVerified: typeof import('~icons/lucide/verified')['default'] + InterceptorsErrorPlaceholder: typeof import('./components/interceptors/ErrorPlaceholder.vue')['default'] InterceptorsExtensionSubtitle: typeof import('./components/interceptors/ExtensionSubtitle.vue')['default'] LensesHeadersRenderer: typeof import('./components/lenses/HeadersRenderer.vue')['default'] LensesHeadersRendererEntry: typeof import('./components/lenses/HeadersRendererEntry.vue')['default'] diff --git a/packages/hoppscotch-common/src/components/app/Footer.vue b/packages/hoppscotch-common/src/components/app/Footer.vue index 84c5ae81c..57bb2123b 100644 --- a/packages/hoppscotch-common/src/components/app/Footer.vue +++ b/packages/hoppscotch-common/src/components/app/Footer.vue @@ -20,6 +20,12 @@ +
+
diff --git a/packages/hoppscotch-common/src/components/collections/index.vue b/packages/hoppscotch-common/src/components/collections/index.vue index 734752163..64cfe2051 100644 --- a/packages/hoppscotch-common/src/components/collections/index.vue +++ b/packages/hoppscotch-common/src/components/collections/index.vue @@ -1866,28 +1866,25 @@ const getJSONCollection = async () => { * @param collectionJSON - JSON string of the collection * @param name - Name of the collection set as the file name */ -const initializeDownloadCollection = ( +const initializeDownloadCollection = async ( collectionJSON: string, name: string | null ) => { - const file = new Blob([collectionJSON], { type: "application/json" }) - const a = document.createElement("a") - const url = URL.createObjectURL(file) - a.href = url + const result = await platform.io.saveFileWithDialog({ + data: collectionJSON, + contentType: "application/json", + suggestedFilename: `${name ?? "collection"}.json`, + filters: [ + { + name: "Hoppscotch Collection JSON file", + extensions: ["json"], + }, + ], + }) - if (name) { - a.download = `${name}.json` - } else { - a.download = `${url.split("/").pop()!.split("#")[0].split("?")[0]}.json` + if (result.type === "unknown" || result.type === "saved") { + toast.success(t("state.download_started").toString()) } - - document.body.appendChild(a) - a.click() - toast.success(t("state.download_started").toString()) - setTimeout(() => { - document.body.removeChild(a) - URL.revokeObjectURL(url) - }, 1000) } /** @@ -1916,11 +1913,14 @@ const exportData = async ( exportLoading.value = false return }, - (coll) => { + async (coll) => { const hoppColl = teamCollToHoppRESTColl(coll) const collectionJSONString = JSON.stringify(hoppColl) - initializeDownloadCollection(collectionJSONString, hoppColl.name) + await initializeDownloadCollection( + collectionJSONString, + hoppColl.name + ) exportLoading.value = false } ) diff --git a/packages/hoppscotch-common/src/components/cookies/AllModal.vue b/packages/hoppscotch-common/src/components/cookies/AllModal.vue new file mode 100644 index 000000000..40e0a67f7 --- /dev/null +++ b/packages/hoppscotch-common/src/components/cookies/AllModal.vue @@ -0,0 +1,269 @@ + + + diff --git a/packages/hoppscotch-common/src/components/cookies/EditCookie.vue b/packages/hoppscotch-common/src/components/cookies/EditCookie.vue new file mode 100644 index 000000000..7d1582862 --- /dev/null +++ b/packages/hoppscotch-common/src/components/cookies/EditCookie.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/packages/hoppscotch-common/src/components/environments/ImportExport.vue b/packages/hoppscotch-common/src/components/environments/ImportExport.vue index a84461d3e..4fa07b55e 100644 --- a/packages/hoppscotch-common/src/components/environments/ImportExport.vue +++ b/packages/hoppscotch-common/src/components/environments/ImportExport.vue @@ -375,7 +375,7 @@ const importFromPostman = ({ importFromHoppscotch(environments) } -const exportJSON = () => { +const exportJSON = async () => { const dataToWrite = environmentJson.value const parsedCollections = JSON.parse(dataToWrite) @@ -385,19 +385,27 @@ const exportJSON = () => { } const file = new Blob([dataToWrite], { type: "application/json" }) - const a = document.createElement("a") const url = URL.createObjectURL(file) - a.href = url - // TODO: get uri from meta - a.download = `${url.split("/").pop()!.split("#")[0].split("?")[0]}.json` - document.body.appendChild(a) - a.click() - toast.success(t("state.download_started").toString()) - setTimeout(() => { - document.body.removeChild(a) - URL.revokeObjectURL(url) - }, 1000) + const filename = `${url.split("/").pop()!.split("#")[0].split("?")[0]}.json` + + URL.revokeObjectURL(url) + + const result = await platform.io.saveFileWithDialog({ + data: dataToWrite, + contentType: "application/json", + suggestedFilename: filename, + filters: [ + { + name: "JSON file", + extensions: ["json"], + }, + ], + }) + + if (result.type === "unknown" || result.type === "saved") { + toast.success(t("state.download_started").toString()) + } } const getErrorMessage = (err: GQLError) => { diff --git a/packages/hoppscotch-common/src/components/graphql/Field.vue b/packages/hoppscotch-common/src/components/graphql/Field.vue index 673ccac28..5ba3d7650 100644 --- a/packages/hoppscotch-common/src/components/graphql/Field.vue +++ b/packages/hoppscotch-common/src/components/graphql/Field.vue @@ -1,23 +1,34 @@ -