Compare commits

..

13 Commits

Author SHA1 Message Date
nivedin
00588bcc0a fix: interceptor error from extension issue 2023-11-14 17:17:07 +05:30
Akash K
e24d0ce605 fix: oauth 2.0 authentication type is breaking (#3531) 2023-11-14 00:12:04 +05:30
Andrew Bastin
de725337d6 fix: window drag taking precedence on windows 2023-11-08 20:07:13 +05:30
Andrew Bastin
9d1d369f37 fix: performance issues due to mouse on header detection 2023-11-08 18:47:40 +05:30
Andrew Bastin
2bd925d441 chore: correct version of selfhost-desktop 2023-11-08 17:18:12 +05:30
Liyas Thomas
bb8dc6f7eb chore: updated brand assets (#3500)
Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
2023-11-08 15:47:35 +05:30
Anwarul Islam
be3e5ba7e7 fix: graphql query deprecation issue (#3506) 2023-11-08 14:51:39 +05:30
Andrew Bastin
663134839f feat: let platforms disable we are using cookies prompt 2023-11-07 20:49:07 +05:30
Andrew Bastin
736f83a70c fix: header inspector cookie inspection will not trigger if current interceptor supports cookies 2023-11-07 20:36:34 +05:30
Andrew Bastin
05d2175f43 fix: selfhost-desktop not running gql-codegen 2023-11-07 20:24:22 +05:30
Andrew Bastin
97bd808431 chore: set versions with a bump version 2023-11-07 16:04:02 +05:30
Andrew Bastin
a13c2fd4c1 chore: pin @codemirror/language to 6.9.0 2023-11-07 15:57:19 +05:30
Andrew Bastin
16044b5840 feat: desktop app
Co-authored-by: Vivek R <123vivekr@gmail.com>
Co-authored-by: Liyas Thomas <liyascthomas@gmail.com>
2023-11-07 14:20:03 +05:30
62 changed files with 997 additions and 7264 deletions

View File

@@ -17,7 +17,7 @@
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
"sideEffects": false, "sideEffects": false,
"dependencies": { "dependencies": {
"@codemirror/language": "^6.9.2", "@codemirror/language": "6.9.0",
"@lezer/highlight": "1.1.4", "@lezer/highlight": "1.1.4",
"@lezer/lr": "^1.3.13" "@lezer/lr": "^1.3.13"
}, },

View File

@@ -1,6 +1,6 @@
{ {
"name": "hoppscotch-backend", "name": "hoppscotch-backend",
"version": "2023.8.3", "version": "2023.8.3-1",
"description": "", "description": "",
"author": "", "author": "",
"private": true, "private": true,

View File

@@ -257,6 +257,7 @@
"error": { "error": {
"browser_support_sse": "This browser doesn't seems to have Server Sent Events support.", "browser_support_sse": "This browser doesn't seems to have Server Sent Events support.",
"check_console_details": "Check console log for details.", "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", "curl_invalid_format": "cURL is not formatted properly",
"danger_zone": "Danger zone", "danger_zone": "Danger zone",
"delete_account": "Your account is currently an owner in these teams:", "delete_account": "Your account is currently an owner in these teams:",
@@ -277,6 +278,7 @@
"no_environments_to_export": "No environments to export. Please create an environment to get started.", "no_environments_to_export": "No environments to export. Please create an environment to get started.",
"no_results_found": "No matches found", "no_results_found": "No matches found",
"page_not_found": "This page could not be 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", "proxy_error": "Proxy error",
"script_fail": "Could not execute pre-request script", "script_fail": "Could not execute pre-request script",
"something_went_wrong": "Something went wrong", "something_went_wrong": "Something went wrong",

View File

@@ -1,7 +1,7 @@
{ {
"name": "@hoppscotch/common", "name": "@hoppscotch/common",
"private": true, "private": true,
"version": "2023.8.3", "version": "2023.8.3-1",
"scripts": { "scripts": {
"dev": "pnpm exec npm-run-all -p -l dev:*", "dev": "pnpm exec npm-run-all -p -l dev:*",
"test": "vitest --run", "test": "vitest --run",
@@ -27,7 +27,7 @@
"@codemirror/lang-javascript": "^6.2.1", "@codemirror/lang-javascript": "^6.2.1",
"@codemirror/lang-json": "^6.0.1", "@codemirror/lang-json": "^6.0.1",
"@codemirror/lang-xml": "^6.0.2", "@codemirror/lang-xml": "^6.0.2",
"@codemirror/language": "^6.9.2", "@codemirror/language": "6.9.0",
"@codemirror/legacy-modes": "^6.3.3", "@codemirror/legacy-modes": "^6.3.3",
"@codemirror/lint": "^6.4.2", "@codemirror/lint": "^6.4.2",
"@codemirror/search": "^6.5.4", "@codemirror/search": "^6.5.4",
@@ -102,7 +102,7 @@
"workbox-window": "^7.0.0", "workbox-window": "^7.0.0",
"xml-formatter": "^3.5.0", "xml-formatter": "^3.5.0",
"yargs-parser": "^21.1.1", "yargs-parser": "^21.1.1",
"zod": "^3.22.2" "zod": "^3.22.4"
}, },
"devDependencies": { "devDependencies": {
"@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-globals-polyfill": "^0.2.3",

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="156" height="32" fill="none"><rect width="156" height="32" fill="#000" rx="4"/><text xmlns="http://www.w3.org/2000/svg" x="50%" y="50%" fill="#fff" dominant-baseline="central" font-family="Helvetica,sans-serif" font-size="12" font-weight="bold" text-anchor="middle" text-rendering="geometricPrecision">▶ Run in Hoppscotch</text></svg>

After

Width:  |  Height:  |  Size: 386 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="156" height="32" fill="none"><rect width="156" height="32" fill="#fff" rx="4"/><text xmlns="http://www.w3.org/2000/svg" x="50%" y="50%" fill="#000" dominant-baseline="central" font-family="Helvetica,sans-serif" font-size="12" font-weight="bold" text-anchor="middle" text-rendering="geometricPrecision">▶ Run in Hoppscotch</text></svg>

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 926 KiB

After

Width:  |  Height:  |  Size: 354 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 462 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 400 B

After

Width:  |  Height:  |  Size: 624 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 871 B

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 KiB

After

Width:  |  Height:  |  Size: 360 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 535 KiB

After

Width:  |  Height:  |  Size: 385 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 178 KiB

View File

@@ -1 +1,50 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" fill="none"><path fill="#10B981" d="M0 0h512v512H0z"/><circle cx="197.76" cy="157.84" r="10" fill="#fff" fill-opacity=".75"/><circle cx="259.76" cy="161.84" r="12" fill="#fff" fill-opacity=".75"/><circle cx="319.76" cy="177.84" r="10" fill="#fff" fill-opacity=".75"/><path d="M344.963 235.676c2.075-12.698-38.872-29.804-90.967-38.094-52.09-8.296-96.404-4.665-98.48 8.033-.257 1.035 0 1.812.263 2.853-1.298-.521-76.714 211.212-76.714 211.212H364.14s-17.621-181.414-20.211-181.414c.515-.772 1.035-1.549 1.035-2.59Z" fill="url(#a)"/><path d="M314.902 227.386c-1.298 8.033-30.839 9.845-66.343 4.402-35.247-5.7-62.982-16.843-61.684-24.618.521-2.59 3.888-4.665 9.331-5.7-18.141.777-30.062 4.145-31.096 9.845-1.555 10.628 34.726 25.139 81.373 32.657 46.647 7.512 85.782 4.665 87.594-5.7 1.041-6.226-9.33-12.961-26.431-19.439 4.923 2.847 7.513 5.957 7.256 8.553Z" fill="#A7F3D0" fill-opacity=".5"/><path d="M333.557 157.413c-3.104-32.137-27.729-59.351-60.9-64.53-33.172-5.186-64.531 12.954-77.749 42.238 21.251 1.298 44.057 3.631 67.904 7.518 25.396 3.888 49.237 9.074 70.745 14.774Z" fill="url(#b)"/><path d="M74.142 158.002c-2.59 15.808 30.319 35.247 81.894 51.055-.257-1.04-.257-1.818-.257-2.853 2.07-12.698 46.127-16.328 98.48-8.032 52.347 8.29 93.037 25.396 90.961 38.094-.257 1.04-.514 1.818-1.035 2.589 53.645.778 90.968-7.512 93.557-23.32 3.625-24.104-74.638-56.498-174.93-72.306-100.555-15.808-185.045-9.331-188.67 14.773Zm115.586-1.298c.778-4.145 4.665-7.255 8.81-6.477 4.145.777 7.256 4.665 6.478 8.81-.52 4.145-4.665 6.998-8.81 6.478-4.145-.778-7.255-4.666-6.478-8.811Zm59.866 4.145c.777-5.7 6.22-9.587 11.92-8.547 5.7.778 9.588 6.215 8.553 11.921-1.041 5.442-6.478 9.33-11.92 8.553-5.706-.778-9.594-6.221-8.553-11.927Zm62.975 15.294c.778-4.145 4.665-7.255 8.81-6.478 4.145.778 7.255 4.666 6.478 8.811-.515 4.145-4.665 7.255-8.81 6.477-4.145-.777-7.256-4.665-6.478-8.81Z" fill="url(#c)"/><defs><radialGradient id="b" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0 32.7063 -69.3245 0 264.232 124.706)"><stop stop-color="#047857"/><stop offset="1" stop-color="#064E3B"/></radialGradient><radialGradient id="c" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(255.837 186.754) scale(1389.61)"><stop stop-color="#047857"/><stop offset=".115" stop-color="#064E3B"/></radialGradient><linearGradient id="a" x1="224.998" y1="157.606" x2="224.998" y2="403.696" gradientUnits="userSpaceOnUse"><stop stop-color="#86EFAC" stop-opacity=".75"/><stop offset=".635" stop-color="#fff" stop-opacity=".2"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient></defs></svg> <svg width="824" height="824" viewBox="0 0 824 824" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="824" height="824" rx="184" fill="#08110F"/>
<rect width="824" height="824" rx="184" fill="url(#paint0_radial_0_21)" fill-opacity="0.5"/>
<path d="M435.425 463.217C429.441 476.657 411.033 481.515 394.309 474.07C377.585 466.624 368.879 449.693 374.863 436.253C380.846 422.813 399.254 417.954 415.978 425.4C432.702 432.846 441.409 449.777 435.425 463.217Z" fill="url(#paint1_linear_0_21)"/>
<path d="M435.425 463.217C429.441 476.657 411.033 481.515 394.309 474.07C377.585 466.624 368.879 449.693 374.863 436.253C380.846 422.813 399.254 417.954 415.978 425.4C432.702 432.846 441.409 449.777 435.425 463.217Z" fill="url(#paint2_radial_0_21)" style="mix-blend-mode:soft-light"/>
<path d="M535.563 521.172C553.071 526.191 570.536 518.856 574.571 504.789C578.606 490.722 567.684 475.251 550.175 470.232C532.666 465.213 515.201 472.548 511.166 486.615C507.131 500.682 518.054 516.153 535.563 521.172Z" fill="url(#paint3_linear_0_21)"/>
<path d="M535.563 521.172C553.071 526.191 570.536 518.856 574.571 504.789C578.606 490.722 567.684 475.251 550.175 470.232C532.666 465.213 515.201 472.548 511.166 486.615C507.131 500.682 518.054 516.153 535.563 521.172Z" fill="url(#paint4_radial_0_21)" style="mix-blend-mode:soft-light"/>
<path d="M292.782 355.633C308.227 365.286 314.462 383.173 306.709 395.584C298.955 407.995 280.149 410.231 264.704 400.578C249.258 390.924 243.023 373.037 250.777 360.626C258.53 348.215 277.337 345.98 292.782 355.633Z" fill="url(#paint5_linear_0_21)"/>
<path d="M292.782 355.633C308.227 365.286 314.462 383.173 306.709 395.584C298.955 407.995 280.149 410.231 264.704 400.578C249.258 390.924 243.023 373.037 250.777 360.626C258.53 348.215 277.337 345.98 292.782 355.633Z" fill="url(#paint6_radial_0_21)" style="mix-blend-mode:soft-light"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M502.355 231.325C581.373 266.506 632.095 343.263 634.119 429.03C680.633 465.639 726.858 516.883 705.36 565.168C681.25 619.319 595.382 617.091 497.781 589.689C450.767 615.718 392.444 620.168 339.689 596.68C286.934 573.192 251.229 526.908 239.1 474.517C153.428 420.321 94.3151 357.999 118.425 303.847C139.923 255.562 208.935 255.626 267.265 265.697C332.356 209.81 423.338 196.144 502.355 231.325ZM159.38 322.082C147.667 348.389 210.578 423.052 382.845 499.751C555.111 576.449 652.693 573.241 664.405 546.934C674.099 525.16 634.213 483.308 588.537 450.878C553.009 425.484 504.344 397.494 440.864 369.231C423.586 361.538 416.839 341.008 424.104 324.691C431.369 308.374 447.329 297.463 480.93 295.91C496.747 295.862 498.823 291.476 499.546 287.716C500.442 281.915 492.401 276.002 484.108 272.31C418.17 242.953 337.453 255.265 281.503 314.178C226.84 301.933 169.074 300.309 159.38 322.082Z" fill="url(#paint7_linear_0_21)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M502.355 231.325C581.373 266.506 632.095 343.263 634.119 429.03C680.633 465.639 726.858 516.883 705.36 565.168C681.25 619.319 595.382 617.091 497.781 589.689C450.767 615.718 392.444 620.168 339.689 596.68C286.934 573.192 251.229 526.908 239.1 474.517C153.428 420.321 94.3151 357.999 118.425 303.847C139.923 255.562 208.935 255.626 267.265 265.697C332.356 209.81 423.338 196.144 502.355 231.325ZM159.38 322.082C147.667 348.389 210.578 423.052 382.845 499.751C555.111 576.449 652.693 573.241 664.405 546.934C674.099 525.16 634.213 483.308 588.537 450.878C553.009 425.484 504.344 397.494 440.864 369.231C423.586 361.538 416.839 341.008 424.104 324.691C431.369 308.374 447.329 297.463 480.93 295.91C496.747 295.862 498.823 291.476 499.546 287.716C500.442 281.915 492.401 276.002 484.108 272.31C418.17 242.953 337.453 255.265 281.503 314.178C226.84 301.933 169.074 300.309 159.38 322.082Z" fill="url(#paint8_radial_0_21)" style="mix-blend-mode:soft-light"/>
<defs>
<radialGradient id="paint0_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(814.524 12.36) rotate(125.613) scale(1089.59 1210.34)">
<stop stop-color="#00D196" stop-opacity="0.5"/>
<stop offset="0.996771" stop-color="#00D196" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint1_linear_0_21" x1="411.893" y1="212" x2="411.893" y2="612" gradientUnits="userSpaceOnUse">
<stop stop-color="#00D196"/>
<stop offset="1" stop-color="#00B381"/>
</linearGradient>
<radialGradient id="paint2_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(644.721 344.481) rotate(159.984) scale(631.37 385.135)">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint3_linear_0_21" x1="411.893" y1="212" x2="411.893" y2="612" gradientUnits="userSpaceOnUse">
<stop stop-color="#00D196"/>
<stop offset="1" stop-color="#00B381"/>
</linearGradient>
<radialGradient id="paint4_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(644.721 344.481) rotate(159.984) scale(631.37 385.135)">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint5_linear_0_21" x1="411.893" y1="212" x2="411.893" y2="612" gradientUnits="userSpaceOnUse">
<stop stop-color="#00D196"/>
<stop offset="1" stop-color="#00B381"/>
</linearGradient>
<radialGradient id="paint6_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(644.721 344.481) rotate(159.984) scale(631.37 385.135)">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint7_linear_0_21" x1="411.893" y1="212" x2="411.893" y2="612" gradientUnits="userSpaceOnUse">
<stop stop-color="#00D196"/>
<stop offset="1" stop-color="#00B381"/>
</linearGradient>
<radialGradient id="paint8_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(644.721 344.481) rotate(159.984) scale(631.37 385.135)">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -1,11 +1,11 @@
// generated by unplugin-vue-components /* eslint-disable */
// We suggest you to commit this file into source control /* prettier-ignore */
// @ts-nocheck
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399 // Read more: https://github.com/vuejs/core/pull/3399
import '@vue/runtime-core'
export {} export {}
declare module '@vue/runtime-core' { declare module 'vue' {
export interface GlobalComponents { export interface GlobalComponents {
AppActionHandler: typeof import('./components/app/ActionHandler.vue')['default'] AppActionHandler: typeof import('./components/app/ActionHandler.vue')['default']
AppAnnouncement: typeof import('./components/app/Announcement.vue')['default'] AppAnnouncement: typeof import('./components/app/Announcement.vue')['default']
@@ -154,6 +154,7 @@ declare module '@vue/runtime-core' {
IconLucideMinus: typeof import('~icons/lucide/minus')['default'] IconLucideMinus: typeof import('~icons/lucide/minus')['default']
IconLucideSearch: typeof import('~icons/lucide/search')['default'] IconLucideSearch: typeof import('~icons/lucide/search')['default']
IconLucideUsers: typeof import('~icons/lucide/users')['default'] IconLucideUsers: typeof import('~icons/lucide/users')['default']
InterceptorsErrorPlaceholder: typeof import('./components/interceptors/ErrorPlaceholder.vue')['default']
InterceptorsExtensionSubtitle: typeof import('./components/interceptors/ExtensionSubtitle.vue')['default'] InterceptorsExtensionSubtitle: typeof import('./components/interceptors/ExtensionSubtitle.vue')['default']
LensesHeadersRenderer: typeof import('./components/lenses/HeadersRenderer.vue')['default'] LensesHeadersRenderer: typeof import('./components/lenses/HeadersRenderer.vue')['default']
LensesHeadersRendererEntry: typeof import('./components/lenses/HeadersRendererEntry.vue')['default'] LensesHeadersRendererEntry: typeof import('./components/lenses/HeadersRendererEntry.vue')['default']
@@ -218,5 +219,4 @@ declare module '@vue/runtime-core' {
WorkspaceCurrent: typeof import('./components/workspace/Current.vue')['default'] WorkspaceCurrent: typeof import('./components/workspace/Current.vue')['default']
WorkspaceSelector: typeof import('./components/workspace/Selector.vue')['default'] WorkspaceSelector: typeof import('./components/workspace/Selector.vue')['default']
} }
} }

View File

@@ -1,7 +1,9 @@
<template> <template>
<div> <div>
<header <header
ref="headerRef"
class="flex items-center justify-between flex-1 flex-shrink-0 px-2 py-2 space-x-2 overflow-x-auto overflow-y-hidden" class="flex items-center justify-between flex-1 flex-shrink-0 px-2 py-2 space-x-2 overflow-x-auto overflow-y-hidden"
@mousedown.prevent="platform.ui?.appHeader?.onHeaderAreaClick?.()"
> >
<div <div
class="inline-flex items-center justify-start flex-1 space-x-2" class="inline-flex items-center justify-start flex-1 space-x-2"

View File

@@ -1,50 +1,55 @@
<template> <template>
<div> <div>
<div class="field-title" :class="{ 'field-highlighted': isHighlighted }"> <div class="flex justify-between gap-2">
{{ fieldName }} <div
<span v-if="fieldArgs.length > 0"> class="field-title flex-1"
( :class="{ 'field-highlighted': isHighlighted }"
<span v-for="(field, index) in fieldArgs" :key="`field-${index}`"> >
{{ field.name }}: {{ fieldName }}
<GraphqlTypeLink <span v-if="fieldArgs.length > 0">
:gql-type="field.type" (
:jump-type-callback="jumpTypeCallback" <span v-for="(field, index) in fieldArgs" :key="`field-${index}`">
/> {{ field.name }}:
<span v-if="index !== fieldArgs.length - 1">, </span> <GraphqlTypeLink
:gql-type="field.type"
@jump-to-type="jumpToType"
/>
<span v-if="index !== fieldArgs.length - 1">, </span>
</span>
) </span
>:
<GraphqlTypeLink :gql-type="gqlField.type" @jump-to-type="jumpToType" />
</div>
<div v-if="gqlField.deprecationReason">
<span
v-tippy="{ theme: 'tomato' }"
class="!text-red-500 hover:!text-red-600 text-xs flex items-center gap-2 cursor-pointer"
:title="gqlField.deprecationReason"
>
<IconAlertTriangle /> {{ t("state.deprecated") }}
</span> </span>
) </span </div>
>:
<GraphqlTypeLink
:gql-type="gqlField.type"
:jump-type-callback="jumpTypeCallback"
/>
</div> </div>
<div <div
v-if="gqlField.description" v-if="gqlField.description"
class="py-2 text-secondaryLight field-desc" class="field-desc py-2 text-secondaryLight"
> >
{{ gqlField.description }} {{ gqlField.description }}
</div> </div>
<div
v-if="gqlField.isDeprecated"
class="inline-block px-2 py-1 my-1 text-black bg-yellow-200 rounded field-deprecated"
>
{{ t("state.deprecated") }}
</div>
<div v-if="fieldArgs.length > 0"> <div v-if="fieldArgs.length > 0">
<h5 class="my-2">Arguments:</h5> <h5 class="my-2">Arguments:</h5>
<div class="pl-4 border-l-2 border-divider"> <div class="border-l-2 border-divider pl-4">
<div v-for="(field, index) in fieldArgs" :key="`field-${index}`"> <div v-for="(field, index) in fieldArgs" :key="`field-${index}`">
<span> <span>
{{ field.name }}: {{ field.name }}:
<GraphqlTypeLink <GraphqlTypeLink
:gql-type="field.type" :gql-type="field.type"
:jump-type-callback="jumpTypeCallback" @jump-to-type="jumpToType"
/> />
</span> </span>
<div <div
v-if="field.description" v-if="field.description"
class="py-2 text-secondaryLight field-desc" class="field-desc py-2 text-secondaryLight"
> >
{{ field.description }} {{ field.description }}
</div> </div>
@@ -54,37 +59,41 @@
</div> </div>
</template> </template>
<script> <script setup lang="ts">
// TypeScript + Script Setup this :)
import { defineComponent } from "vue"
import { useI18n } from "@composables/i18n" import { useI18n } from "@composables/i18n"
import { GraphQLType } from "graphql"
import { computed } from "vue"
import IconAlertTriangle from "~icons/lucide/alert-triangle"
export default defineComponent({ const t = useI18n()
props: {
gqlField: { type: Object, default: () => ({}) },
jumpTypeCallback: { type: Function, default: () => ({}) },
isHighlighted: { type: Boolean, default: false },
},
setup() {
return {
t: useI18n(),
}
},
computed: {
fieldName() {
return this.gqlField.name
},
fieldArgs() { const props = withDefaults(
return this.gqlField.args || [] defineProps<{
}, gqlField: any
}, isHighlighted: boolean
}) }>(),
{
gqlField: {},
isHighlighted: false,
}
)
const emit = defineEmits<{
(e: "jump-to-type", type: GraphQLType): void
}>()
const fieldName = computed(() => props.gqlField.name)
const fieldArgs = computed(() => props.gqlField.args || [])
const jumpToType = (type: GraphQLType) => {
emit("jump-to-type", type)
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.field-highlighted { .field-highlighted {
@apply border-accent border-b-2; @apply border-b-2 border-accent;
} }
.field-title { .field-title {

View File

@@ -58,8 +58,8 @@
v-for="(field, index) in filteredQueryFields" v-for="(field, index) in filteredQueryFields"
:key="`field-${index}`" :key="`field-${index}`"
:gql-field="field" :gql-field="field"
:jump-type-callback="handleJumpToType"
class="p-4" class="p-4"
@jump-to-type="handleJumpToType"
/> />
</HoppSmartTab> </HoppSmartTab>
<HoppSmartTab <HoppSmartTab
@@ -72,8 +72,8 @@
v-for="(field, index) in filteredMutationFields" v-for="(field, index) in filteredMutationFields"
:key="`field-${index}`" :key="`field-${index}`"
:gql-field="field" :gql-field="field"
:jump-type-callback="handleJumpToType"
class="p-4" class="p-4"
@jump-to-type="handleJumpToType"
/> />
</HoppSmartTab> </HoppSmartTab>
<HoppSmartTab <HoppSmartTab
@@ -86,8 +86,8 @@
v-for="(field, index) in filteredSubscriptionFields" v-for="(field, index) in filteredSubscriptionFields"
:key="`field-${index}`" :key="`field-${index}`"
:gql-field="field" :gql-field="field"
:jump-type-callback="handleJumpToType"
class="p-4" class="p-4"
@jump-to-type="handleJumpToType"
/> />
</HoppSmartTab> </HoppSmartTab>
<HoppSmartTab <HoppSmartTab
@@ -103,7 +103,7 @@
:gql-types="graphqlTypes" :gql-types="graphqlTypes"
:is-highlighted="isGqlTypeHighlighted(type)" :is-highlighted="isGqlTypeHighlighted(type)"
:highlighted-fields="getGqlTypeHighlightedFields(type)" :highlighted-fields="getGqlTypeHighlightedFields(type)"
:jump-type-callback="handleJumpToType" @jump-to-type="handleJumpToType"
/> />
</HoppSmartTab> </HoppSmartTab>
</HoppSmartTabs> </HoppSmartTabs>

View File

@@ -7,38 +7,31 @@
</span> </span>
</template> </template>
<script lang="ts"> <script setup lang="ts">
import { defineComponent } from "vue" import { GraphQLScalarType, GraphQLType } from "graphql"
import { GraphQLScalarType } from "graphql" import { computed } from "vue"
export default defineComponent({ const props = defineProps<{
props: { gqlType: GraphQLType
// eslint-disable-next-line vue/require-default-prop }>()
gqlType: null,
// (typeName: string) => void
// eslint-disable-next-line vue/require-default-prop
jumpTypeCallback: Function,
},
computed: { const emit = defineEmits<{
typeString() { (e: "jump-to-type", type: GraphQLType): void
return `${this.gqlType}` }>()
},
isScalar() {
return this.resolveRootType(this.gqlType) instanceof GraphQLScalarType
},
},
methods: { const typeString = computed(() => `${props.gqlType}`)
jumpToType() { const isScalar = computed(() => {
if (this.isScalar) return return resolveRootType(props.gqlType) instanceof GraphQLScalarType
this.jumpTypeCallback(this.gqlType)
},
resolveRootType(type) {
let t = type
while (t.ofType != null) t = t.ofType
return t
},
},
}) })
function resolveRootType(type: GraphQLType) {
let t = type as any
while (t.ofType != null) t = t.ofType
return t
}
function jumpToType() {
if (isScalar.value) return
emit("jump-to-type", props.gqlType)
}
</script> </script>

View File

@@ -43,6 +43,7 @@ import { useI18n } from "@composables/i18n"
import { useToast } from "@composables/toast" import { useToast } from "@composables/toast"
import { tokenRequest } from "~/helpers/oauth" import { tokenRequest } from "~/helpers/oauth"
import { getCombinedEnvVariables } from "~/helpers/preRequest" import { getCombinedEnvVariables } from "~/helpers/preRequest"
import * as E from "fp-ts/Either"
const t = useI18n() const t = useI18n()
const toast = useToast() const toast = useToast()
@@ -98,7 +99,11 @@ const handleAccessTokenRequest = async () => {
clientSecret: parseTemplateString(clientSecret.value, envVars), clientSecret: parseTemplateString(clientSecret.value, envVars),
scope: parseTemplateString(scope.value, envVars), scope: parseTemplateString(scope.value, envVars),
} }
await tokenRequest(tokenReqParams) const res = await tokenRequest(tokenReqParams)
if (res && E.isLeft(res)) {
toast.error(res.left)
}
} catch (e) { } catch (e) {
toast.error(`${e}`) toast.error(`${e}`)
} }

View File

@@ -350,7 +350,6 @@ const newSendRequest = async () => {
const streamResult = await streamPromise const streamResult = await streamPromise
requestCancelFunc.value = cancel requestCancelFunc.value = cancel
if (E.isRight(streamResult)) { if (E.isRight(streamResult)) {
subscribeToStream( subscribeToStream(
streamResult.right, streamResult.right,
@@ -365,6 +364,20 @@ const newSendRequest = async () => {
loading.value = false loading.value = false
}, },
() => { () => {
// TODO: Change this any to a proper type
const result = (streamResult.right as any).value
if (
result.type === "network_fail" &&
result.error?.error === "NO_PW_EXT_HOOK"
) {
const errorResponse: HoppRESTResponse = {
type: "extension_error",
error: result.error.humanMessage.heading,
component: result.error.component,
req: result.req,
}
updateRESTResponse(errorResponse)
}
loading.value = false loading.value = false
} }
) )

View File

@@ -11,6 +11,12 @@
<HoppSmartSpinner class="my-4" /> <HoppSmartSpinner class="my-4" />
<span class="text-secondaryLight">{{ t("state.loading") }}</span> <span class="text-secondaryLight">{{ t("state.loading") }}</span>
</div> </div>
<component
:is="response.component"
v-if="response.type === 'extension_error'"
class="flex-1"
/>
<HoppSmartPlaceholder <HoppSmartPlaceholder
v-if="response.type === 'network_fail'" v-if="response.type === 'network_fail'"
:src="`/images/states/${colorMode.value}/youre_lost.svg`" :src="`/images/states/${colorMode.value}/youre_lost.svg`"

View File

@@ -0,0 +1,98 @@
<template>
<HoppSmartPlaceholder
:src="`/images/states/${colorMode.value}/youre_lost.svg`"
:alt="`${t('error.network_fail')}`"
:heading="t('error.network_fail')"
large
>
<div class="my-1 text-secondaryLight flex flex-col items-center">
<span>
{{ t("error.please_install_extension") }}
</span>
<span>
{{ t("error.check_how_to_add_origin") }}
<HoppSmartLink
blank
to="https://docs.hoppscotch.io/documentation/features/interceptor#browser-extension"
class="text-accent hover:text-accentDark"
>
here
</HoppSmartLink>
</span>
</div>
<div class="flex flex-col py-4 space-y-2">
<span>
<HoppSmartItem
to="https://chrome.google.com/webstore/detail/hoppscotch-browser-extens/amknoiejhlmhancpahfcfcfhllgkpbld"
blank
:icon="IconChrome"
label="Chrome"
:info-icon="hasChromeExtInstalled ? IconCheckCircle : null"
:active-info-icon="hasChromeExtInstalled"
outline
/>
</span>
<span>
<HoppSmartItem
to="https://addons.mozilla.org/en-US/firefox/addon/hoppscotch"
blank
:icon="IconFirefox"
label="Firefox"
:info-icon="hasFirefoxExtInstalled ? IconCheckCircle : null"
:active-info-icon="hasFirefoxExtInstalled"
outline
/>
</span>
</div>
<div class="py-4 space-y-4">
<div class="flex items-center">
<HoppSmartToggle
:on="extensionEnabled"
@change="extensionEnabled = !extensionEnabled"
>
{{ t("settings.extensions_use_toggle") }}
</HoppSmartToggle>
</div>
</div>
</HoppSmartPlaceholder>
</template>
<script setup lang="ts">
import IconChrome from "~icons/brands/chrome"
import IconFirefox from "~icons/brands/firefox"
import IconCheckCircle from "~icons/lucide/check-circle"
import { useI18n } from "@composables/i18n"
import { ExtensionInterceptorService } from "~/platform/std/interceptors/extension"
import { useService } from "dioc/vue"
import { computed } from "vue"
import { InterceptorService } from "~/services/interceptor.service"
import { platform } from "~/platform"
import { useColorMode } from "~/composables/theming"
const colorMode = useColorMode()
const t = useI18n()
const interceptorService = useService(InterceptorService)
const extensionService = useService(ExtensionInterceptorService)
const hasChromeExtInstalled = extensionService.chromeExtensionInstalled
const hasFirefoxExtInstalled = extensionService.firefoxExtensionInstalled
const extensionEnabled = computed({
get() {
return (
interceptorService.currentInterceptorID.value ===
extensionService.interceptorID
)
},
set(active) {
if (active) {
interceptorService.currentInterceptorID.value =
extensionService.interceptorID
} else {
interceptorService.currentInterceptorID.value =
platform.interceptors.default
}
},
})
</script>

View File

@@ -152,12 +152,14 @@ export function useStreamSubscriber(): {
error?: (e: any) => void, error?: (e: any) => void,
complete?: () => void complete?: () => void
) => { ) => {
const sub = stream.subscribe({ let sub: Subscription | null = null
sub = stream.subscribe({
next, next,
error, error,
complete: () => { complete: () => {
if (complete) complete() if (complete) complete()
subs.splice(subs.indexOf(sub), 1) if (sub) subs.splice(subs.indexOf(sub), 1)
}, },
}) })

View File

@@ -4,7 +4,10 @@ import {
removeLocalConfig, removeLocalConfig,
} from "~/newstore/localpersistence" } from "~/newstore/localpersistence"
const redirectUri = `${window.location.origin}/` import * as E from "fp-ts/Either"
import { z } from "zod"
const redirectUri = `${window.location.origin}/oauth`
// GENERAL HELPER FUNCTIONS // GENERAL HELPER FUNCTIONS
@@ -16,7 +19,7 @@ const redirectUri = `${window.location.origin}/`
* @returns {Object} * @returns {Object}
*/ */
const sendPostRequest = async (url, params) => { const sendPostRequest = async (url: string, params: Record<string, string>) => {
const body = Object.keys(params) const body = Object.keys(params)
.map((key) => `${key}=${params[key]}`) .map((key) => `${key}=${params[key]}`)
.join("&") .join("&")
@@ -30,9 +33,9 @@ const sendPostRequest = async (url, params) => {
try { try {
const response = await fetch(url, options) const response = await fetch(url, options)
const data = await response.json() const data = await response.json()
return data return E.right(data)
} catch (e) { } catch (e) {
console.error(e) return E.left("AUTH_TOKEN_REQUEST_FAILED")
} }
} }
@@ -43,7 +46,7 @@ const sendPostRequest = async (url, params) => {
* @returns {Object} * @returns {Object}
*/ */
const parseQueryString = (searchQuery) => { const parseQueryString = (searchQuery: string): Record<string, string> => {
if (searchQuery === "") { if (searchQuery === "") {
return {} return {}
} }
@@ -61,7 +64,7 @@ const parseQueryString = (searchQuery) => {
* @returns {Object} * @returns {Object}
*/ */
const getTokenConfiguration = async (endpoint) => { const getTokenConfiguration = async (endpoint: string) => {
const options = { const options = {
method: "GET", method: "GET",
headers: { headers: {
@@ -71,9 +74,9 @@ const getTokenConfiguration = async (endpoint) => {
try { try {
const response = await fetch(endpoint, options) const response = await fetch(endpoint, options)
const config = await response.json() const config = await response.json()
return config return E.right(config)
} catch (e) { } catch (e) {
console.error(e) return E.left("OIDC_DISCOVERY_FAILED")
} }
} }
@@ -97,7 +100,7 @@ const generateRandomString = () => {
* @returns {Promise<ArrayBuffer>} * @returns {Promise<ArrayBuffer>}
*/ */
const sha256 = (plain) => { const sha256 = (plain: string) => {
const encoder = new TextEncoder() const encoder = new TextEncoder()
const data = encoder.encode(plain) const data = encoder.encode(plain)
return window.crypto.subtle.digest("SHA-256", data) return window.crypto.subtle.digest("SHA-256", data)
@@ -111,15 +114,18 @@ const sha256 = (plain) => {
*/ */
const base64urlencode = ( const base64urlencode = (
str // Converts the ArrayBuffer to string using Uint8 array to convert to what btoa accepts. str: ArrayBuffer // Converts the ArrayBuffer to string using Uint8 array to convert to what btoa accepts.
) => ) => {
const hashArray = Array.from(new Uint8Array(str))
// btoa accepts chars only within ascii 0-255 and base64 encodes them. // btoa accepts chars only within ascii 0-255 and base64 encodes them.
// Then convert the base64 encoded to base64url encoded // Then convert the base64 encoded to base64url encoded
// (replace + with -, replace / with _, trim trailing =) // (replace + with -, replace / with _, trim trailing =)
btoa(String.fromCharCode.apply(null, new Uint8Array(str))) return btoa(String.fromCharCode.apply(null, hashArray))
.replace(/\+/g, "-") .replace(/\+/g, "-")
.replace(/\//g, "_") .replace(/\//g, "_")
.replace(/=+$/, "") .replace(/=+$/, "")
}
/** /**
* Return the base64-urlencoded sha256 hash for the PKCE challenge * Return the base64-urlencoded sha256 hash for the PKCE challenge
@@ -128,13 +134,23 @@ const base64urlencode = (
* @returns {String} * @returns {String}
*/ */
const pkceChallengeFromVerifier = async (v) => { const pkceChallengeFromVerifier = async (v: string) => {
const hashed = await sha256(v) const hashed = await sha256(v)
return base64urlencode(hashed) return base64urlencode(hashed)
} }
// OAUTH REQUEST // OAUTH REQUEST
type TokenRequestParams = {
oidcDiscoveryUrl: string
grantType: string
authUrl: string
accessTokenUrl: string
clientId: string
clientSecret: string
scope: string
}
/** /**
* Initiates PKCE Auth Code flow when requested * Initiates PKCE Auth Code flow when requested
* *
@@ -150,16 +166,28 @@ const tokenRequest = async ({
clientId, clientId,
clientSecret, clientSecret,
scope, scope,
}) => { }: TokenRequestParams) => {
// Check oauth configuration // Check oauth configuration
if (oidcDiscoveryUrl !== "") { if (oidcDiscoveryUrl !== "") {
// eslint-disable-next-line camelcase const res = await getTokenConfiguration(oidcDiscoveryUrl)
const { authorization_endpoint, token_endpoint } =
await getTokenConfiguration(oidcDiscoveryUrl) const OIDCConfigurationSchema = z.object({
// eslint-disable-next-line camelcase authorization_endpoint: z.string(),
authUrl = authorization_endpoint token_endpoint: z.string(),
// eslint-disable-next-line camelcase })
accessTokenUrl = token_endpoint
if (E.isLeft(res)) {
return E.left("OIDC_DISCOVERY_FAILED" as const)
}
const parsedOIDCConfiguration = OIDCConfigurationSchema.safeParse(res.right)
if (!parsedOIDCConfiguration.success) {
return E.left("OIDC_DISCOVERY_FAILED" as const)
}
authUrl = parsedOIDCConfiguration.data.authorization_endpoint
accessTokenUrl = parsedOIDCConfiguration.data.token_endpoint
} }
// Store oauth information // Store oauth information
setLocalConfig("tokenEndpoint", accessTokenUrl) setLocalConfig("tokenEndpoint", accessTokenUrl)
@@ -190,7 +218,7 @@ const tokenRequest = async ({
)}&code_challenge_method=S256` )}&code_challenge_method=S256`
// Redirect to the authorization server // Redirect to the authorization server
window.location = buildUrl() window.location.assign(buildUrl())
} }
// OAUTH REDIRECT HANDLING // OAUTH REDIRECT HANDLING
@@ -202,44 +230,84 @@ const tokenRequest = async ({
* @returns {Promise<any | void>} * @returns {Promise<any | void>}
*/ */
const oauthRedirect = () => { const handleOAuthRedirect = async () => {
let tokenResponse = "" const queryParams = parseQueryString(window.location.search.substring(1))
const q = parseQueryString(window.location.search.substring(1))
// Check if the server returned an error string // Check if the server returned an error string
if (q.error) { if (queryParams.error) {
alert(`Error returned from authorization server: ${q.error}`) return E.left("AUTH_SERVER_RETURNED_ERROR" as const)
} }
if (!queryParams.code) {
return E.left("NO_AUTH_CODE" as const)
}
// If the server returned an authorization code, attempt to exchange it for an access token // If the server returned an authorization code, attempt to exchange it for an access token
if (q.code) { // Verify state matches what we set at the beginning
// Verify state matches what we set at the beginning if (getLocalConfig("pkce_state") !== queryParams.state) {
if (getLocalConfig("pkce_state") !== q.state) { return E.left("INVALID_STATE" as const)
alert("Invalid state")
Promise.reject(tokenResponse)
} else {
try {
// Exchange the authorization code for an access token
tokenResponse = sendPostRequest(getLocalConfig("tokenEndpoint"), {
grant_type: "authorization_code",
code: q.code,
client_id: getLocalConfig("client_id"),
client_secret: getLocalConfig("client_secret"),
redirect_uri: redirectUri,
code_verifier: getLocalConfig("pkce_codeVerifier"),
})
} catch (e) {
console.error(e)
return Promise.reject(tokenResponse)
}
}
// Clean these up since we don't need them anymore
removeLocalConfig("pkce_state")
removeLocalConfig("pkce_codeVerifier")
removeLocalConfig("tokenEndpoint")
removeLocalConfig("client_id")
removeLocalConfig("client_secret")
return tokenResponse
} }
return Promise.reject(tokenResponse)
const tokenEndpoint = getLocalConfig("tokenEndpoint")
const clientID = getLocalConfig("client_id")
const clientSecret = getLocalConfig("client_secret")
const codeVerifier = getLocalConfig("pkce_codeVerifier")
if (!tokenEndpoint) {
return E.left("NO_TOKEN_ENDPOINT" as const)
}
if (!clientID) {
return E.left("NO_CLIENT_ID" as const)
}
if (!clientSecret) {
return E.left("NO_CLIENT_SECRET" as const)
}
if (!codeVerifier) {
return E.left("NO_CODE_VERIFIER" as const)
}
// Exchange the authorization code for an access token
const tokenResponse: E.Either<string, any> = await sendPostRequest(
tokenEndpoint,
{
grant_type: "authorization_code",
code: queryParams.code,
client_id: clientID,
client_secret: clientSecret,
redirect_uri: redirectUri,
code_verifier: codeVerifier,
}
)
// Clean these up since we don't need them anymore
clearPKCEState()
if (E.isLeft(tokenResponse)) {
return E.left("AUTH_TOKEN_REQUEST_FAILED" as const)
}
const withAccessTokenSchema = z.object({
access_token: z.string(),
})
const parsedTokenResponse = withAccessTokenSchema.safeParse(
tokenResponse.right
)
return parsedTokenResponse.success
? E.right(parsedTokenResponse.data)
: E.left("AUTH_TOKEN_REQUEST_INVALID_RESPONSE" as const)
} }
export { tokenRequest, oauthRedirect } const clearPKCEState = () => {
removeLocalConfig("pkce_state")
removeLocalConfig("pkce_codeVerifier")
removeLocalConfig("tokenEndpoint")
removeLocalConfig("client_id")
removeLocalConfig("client_secret")
}
export { tokenRequest, handleOAuthRedirect }

View File

@@ -1,4 +1,5 @@
import { HoppRESTRequest } from "@hoppscotch/data" import { HoppRESTRequest } from "@hoppscotch/data"
import { Component } from "vue"
export type HoppRESTResponseHeader = { key: string; value: string } export type HoppRESTResponseHeader = { key: string; value: string }
@@ -39,3 +40,9 @@ export type HoppRESTResponse =
req: HoppRESTRequest req: HoppRESTRequest
} }
| {
type: "extension_error"
error: string
component: Component
req: HoppRESTRequest
}

View File

@@ -73,6 +73,7 @@ import { applySetting } from "~/newstore/settings"
import { getLocalConfig, setLocalConfig } from "~/newstore/localpersistence" import { getLocalConfig, setLocalConfig } from "~/newstore/localpersistence"
import { useToast } from "~/composables/toast" import { useToast } from "~/composables/toast"
import { useI18n } from "~/composables/i18n" import { useI18n } from "~/composables/i18n"
import { platform } from "~/platform"
const router = useRouter() const router = useRouter()
@@ -98,7 +99,10 @@ onBeforeMount(() => {
onMounted(() => { onMounted(() => {
const cookiesAllowed = getLocalConfig("cookiesAllowed") === "yes" const cookiesAllowed = getLocalConfig("cookiesAllowed") === "yes"
if (!cookiesAllowed) { const platformAllowsCookiePrompts =
platform.platformFeatureFlags.promptAsUsingCookies ?? true
if (!cookiesAllowed && platformAllowsCookiePrompts) {
toast.show(`${t("app.we_use_cookies")}`, { toast.show(`${t("app.we_use_cookies")}`, {
duration: 0, duration: 0,
action: [ action: [

View File

@@ -94,7 +94,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, onMounted, onBeforeUnmount, onBeforeMount } from "vue" import { ref, onMounted, onBeforeUnmount } from "vue"
import { safelyExtractRESTRequest } from "@hoppscotch/data" import { safelyExtractRESTRequest } from "@hoppscotch/data"
import { translateExtURLParams } from "~/helpers/RESTExtURLParams" import { translateExtURLParams } from "~/helpers/RESTExtURLParams"
import { useRoute } from "vue-router" import { useRoute } from "vue-router"
@@ -114,7 +114,6 @@ import {
} from "rxjs" } from "rxjs"
import { useToast } from "~/composables/toast" import { useToast } from "~/composables/toast"
import { watchDebounced } from "@vueuse/core" import { watchDebounced } from "@vueuse/core"
import { oauthRedirect } from "~/helpers/oauth"
import { useReadonlyStream } from "~/composables/stream" import { useReadonlyStream } from "~/composables/stream"
import { import {
changeCurrentSyncStatus, changeCurrentSyncStatus,
@@ -414,28 +413,6 @@ function setupTabStateSync() {
}) })
} }
function oAuthURL() {
onBeforeMount(async () => {
try {
const tokenInfo = await oauthRedirect()
if (
typeof tokenInfo === "object" &&
tokenInfo.hasOwnProperty("access_token")
) {
if (
tabs.currentActiveTab.value.document.request.auth.authType ===
"oauth-2"
) {
tabs.currentActiveTab.value.document.request.auth.token =
tokenInfo.access_token
}
}
// eslint-disable-next-line no-empty
} catch (_) {}
})
}
defineActionHandler("contextmenu.open", ({ position, text }) => { defineActionHandler("contextmenu.open", ({ position, text }) => {
if (text) { if (text) {
contextMenu.value = { contextMenu.value = {
@@ -454,7 +431,6 @@ defineActionHandler("contextmenu.open", ({ position, text }) => {
setupTabStateSync() setupTabStateSync()
bindRequestToURLParams() bindRequestToURLParams()
oAuthURL()
defineActionHandler("rest.request.open", ({ doc }) => { defineActionHandler("rest.request.open", ({ doc }) => {
tabs.createNewTab(doc) tabs.createNewTab(doc)

View File

@@ -0,0 +1,43 @@
<template>
<div class="flex justify-center items-center">
<HoppSmartSpinner />
</div>
</template>
<script setup lang="ts">
import { handleOAuthRedirect } from "~/helpers/oauth"
import { useToast } from "~/composables/toast"
import * as E from "fp-ts/Either"
import { useService } from "dioc/vue"
import { RESTTabService } from "~/services/tab/rest"
import { onMounted } from "vue"
import { useRouter } from "vue-router"
const router = useRouter()
const toast = useToast()
const tabs = useService(RESTTabService)
onMounted(async () => {
const tokenInfo = await handleOAuthRedirect()
if (E.isLeft(tokenInfo)) {
toast.error(tokenInfo.left)
router.push("/")
return
}
if (
tabs.currentActiveTab.value.document.request.auth.authType === "oauth-2"
) {
tabs.currentActiveTab.value.document.request.auth.token =
tokenInfo.right.access_token
router.push("/")
return
}
})
</script>

View File

@@ -35,6 +35,14 @@ export type PlatformDef = {
* If a value is not given, then the value is assumed to be false * If a value is not given, then the value is assumed to be false
*/ */
cookiesEnabled?: boolean cookiesEnabled?: boolean
/**
* Whether the platform should prompt the user that cookies are being used.
* This will result in the user being notified a cookies advisory and is meant for web apps.
*
* If a value is not given, then the value is assumed to be true
*/
promptAsUsingCookies?: boolean
} }
} }

View File

@@ -12,6 +12,7 @@ import { computed, readonly, ref } from "vue"
import { browserIsChrome, browserIsFirefox } from "~/helpers/utils/userAgent" import { browserIsChrome, browserIsFirefox } from "~/helpers/utils/userAgent"
import SettingsExtension from "~/components/settings/Extension.vue" import SettingsExtension from "~/components/settings/Extension.vue"
import InterceptorsExtensionSubtitle from "~/components/interceptors/ExtensionSubtitle.vue" import InterceptorsExtensionSubtitle from "~/components/interceptors/ExtensionSubtitle.vue"
import InterceptorsErrorPlaceholder from "~/components/interceptors/ErrorPlaceholder.vue"
export const defineSubscribableObject = <T extends object>(obj: T) => { export const defineSubscribableObject = <T extends object>(obj: T) => {
const proxyObject = { const proxyObject = {
@@ -217,6 +218,7 @@ export class ExtensionInterceptorService
description: () => "Heading not found", description: () => "Heading not found",
}, },
error: "NO_PW_EXT_HOOK", error: "NO_PW_EXT_HOOK",
component: InterceptorsErrorPlaceholder,
}) })
} }

View File

@@ -20,6 +20,11 @@ export type UIPlatformDef = {
appHeader?: { appHeader?: {
paddingTop?: Ref<string> paddingTop?: Ref<string>
paddingLeft?: Ref<string> paddingLeft?: Ref<string>
/**
* A function which is called when the header area of the app receives a click event
*/
onHeaderAreaClick?: () => void
} }
onCodemirrorInstanceMount?: (element: HTMLElement) => void onCodemirrorInstanceMount?: (element: HTMLElement) => void

View File

@@ -4,6 +4,7 @@ import { HeaderInspectorService } from "../header.inspector"
import { InspectionService } from "../../index" import { InspectionService } from "../../index"
import { getDefaultRESTRequest } from "~/helpers/rest/default" import { getDefaultRESTRequest } from "~/helpers/rest/default"
import { ref } from "vue" import { ref } from "vue"
import { InterceptorService } from "~/services/interceptor.service"
vi.mock("~/modules/i18n", () => ({ vi.mock("~/modules/i18n", () => ({
__esModule: true, __esModule: true,
@@ -58,5 +59,48 @@ describe("HeaderInspectorService", () => {
expect(result.value).toHaveLength(0) expect(result.value).toHaveLength(0)
}) })
it("should return an empty array when headers contain cookies but interceptor supports cookies", () => {
const container = new TestContainer()
container.bindMock(InterceptorService, {
currentInterceptor: ref({ supportsCookies: true }) as any,
})
const headerInspector = container.bind(HeaderInspectorService)
const req = ref({
...getDefaultRESTRequest(),
endpoint: "http://example.com/api/data",
headers: [{ key: "Cookie", value: "some-cookie", active: true }],
})
const result = headerInspector.getInspections(req)
expect(result.value).toHaveLength(0)
})
it("should return an inspector result when headers contain cookies and the current interceptor doesn't support cookies", () => {
const container = new TestContainer()
container.bindMock(InterceptorService, {
currentInterceptor: ref({ supportsCookies: false }) as any,
})
const headerInspector = container.bind(HeaderInspectorService)
const req = ref({
...getDefaultRESTRequest(),
endpoint: "http://example.com/api/data",
headers: [{ key: "Cookie", value: "some-cookie", active: true }],
})
const result = headerInspector.getInspections(req)
expect(result.value).not.toHaveLength(0)
expect(result.value).toContainEqual(
expect.objectContaining({ id: "header", isApplicable: true })
)
})
}) })
}) })

View File

@@ -4,6 +4,7 @@ import { getI18n } from "~/modules/i18n"
import { HoppRESTRequest } from "@hoppscotch/data" import { HoppRESTRequest } from "@hoppscotch/data"
import { Ref, computed, markRaw } from "vue" import { Ref, computed, markRaw } from "vue"
import IconAlertTriangle from "~icons/lucide/alert-triangle" import IconAlertTriangle from "~icons/lucide/alert-triangle"
import { InterceptorService } from "~/services/interceptor.service"
/** /**
* This inspector is responsible for inspecting the header of a request. * This inspector is responsible for inspecting the header of a request.
@@ -19,6 +20,7 @@ export class HeaderInspectorService extends Service implements Inspector {
public readonly inspectorID = "header" public readonly inspectorID = "header"
private readonly inspection = this.bind(InspectionService) private readonly inspection = this.bind(InspectionService)
private readonly interceptorService = this.bind(InterceptorService)
constructor() { constructor() {
super() super()
@@ -42,7 +44,10 @@ export class HeaderInspectorService extends Service implements Inspector {
const isContainCookies = headerKeys.includes("Cookie") const isContainCookies = headerKeys.includes("Cookie")
if (isContainCookies) { if (
isContainCookies &&
!this.interceptorService.currentInterceptor.value?.supportsCookies
) {
headerKeys.forEach((headerKey, index) => { headerKeys.forEach((headerKey, index) => {
if (this.cookiesCheck(headerKey)) { if (this.cookiesCheck(headerKey)) {
results.push({ results.push({

View File

@@ -29,6 +29,7 @@ export type InterceptorError =
description: (t: ReturnType<typeof getI18n>) => string description: (t: ReturnType<typeof getI18n>) => string
} }
error?: unknown error?: unknown
component?: Component
} }
/** /**

View File

@@ -25,3 +25,6 @@ dist-ssr
# Sitemap # Sitemap
.sitemap-gen .sitemap-gen
# Backend Code generation
src/api/generated

View File

@@ -0,0 +1,18 @@
overwrite: true
schema: "../../gql-gen/*.gql"
generates:
src/api/generated/graphql.ts:
documents: "src/**/*.graphql"
plugins:
- add:
content: >
/* eslint-disable */
// Auto-generated file (DO NOT EDIT!!!), refer gql-codegen.yml
- typescript
- typescript-operations
- typed-document-node
- typescript-urql-graphcache
src/api/generated/backend-schema.json:
plugins:
- urql-introspection

View File

@@ -1,16 +1,18 @@
{ {
"name": "@hoppscotch/selfhost-desktop", "name": "@hoppscotch/selfhost-desktop",
"private": true, "private": true,
"version": "0.0.0", "version": "2023.8.3-1",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev:vite": "vite",
"dev:gql-codegen": "graphql-codegen --require dotenv/config --config gql-codegen.yml dotenv_config_path=\"../../.env\" --watch",
"dev": "pnpm exec npm-run-all -p -l dev:*",
"build": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build", "build": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build",
"preview": "vite preview", "preview": "vite preview",
"tauri": "tauri" "tauri": "tauri",
"gql-codegen": "graphql-codegen --require dotenv/config --config gql-codegen.yml dotenv_config_path=\"../../.env\""
}, },
"dependencies": { "dependencies": {
"dioc": "workspace:^",
"@hoppscotch/common": "workspace:^", "@hoppscotch/common": "workspace:^",
"@platform/auth": "^0.1.106", "@platform/auth": "^0.1.106",
"@tauri-apps/api": "^1.3.0", "@tauri-apps/api": "^1.3.0",
@@ -18,6 +20,7 @@
"@vueuse/core": "^10.4.1", "@vueuse/core": "^10.4.1",
"axios": "^0.21.4", "axios": "^0.21.4",
"buffer": "^6.0.3", "buffer": "^6.0.3",
"dioc": "workspace:^",
"environments.api": "link:@platform/environments/environments.api", "environments.api": "link:@platform/environments/environments.api",
"event": "link:@tauri-apps/api/event", "event": "link:@tauri-apps/api/event",
"fp-ts": "^2.16.0", "fp-ts": "^2.16.0",
@@ -33,6 +36,14 @@
"workbox-window": "^6.5.4" "workbox-window": "^6.5.4"
}, },
"devDependencies": { "devDependencies": {
"@graphql-codegen/add": "^5.0.0",
"@graphql-codegen/cli": "^5.0.0",
"@graphql-codegen/typed-document-node": "^5.0.1",
"@graphql-codegen/typescript": "^4.0.1",
"@graphql-codegen/typescript-operations": "^4.0.1",
"@graphql-codegen/typescript-urql-graphcache": "^2.4.5",
"@graphql-codegen/urql-introspection": "^2.2.1",
"@graphql-typed-document-node/core": "^3.2.0",
"@intlify/vite-plugin-vue-i18n": "^6.0.1", "@intlify/vite-plugin-vue-i18n": "^6.0.1",
"@rushstack/eslint-patch": "^1.1.4", "@rushstack/eslint-patch": "^1.1.4",
"@types/lodash-es": "^4.17.9", "@types/lodash-es": "^4.17.9",
@@ -46,6 +57,7 @@
"eslint": "^8.28.0", "eslint": "^8.28.0",
"eslint-plugin-prettier": "^4.2.1", "eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-vue": "^9.5.1", "eslint-plugin-vue": "^9.5.1",
"npm-run-all": "^4.1.5",
"typescript": "^4.9.5", "typescript": "^4.9.5",
"unplugin-icons": "^0.14.9", "unplugin-icons": "^0.14.9",
"unplugin-vue-components": "^0.21.0", "unplugin-vue-components": "^0.21.0",

View File

@@ -7,8 +7,8 @@
"withGlobalTauri": false "withGlobalTauri": false
}, },
"package": { "package": {
"productName": "hoppscotch-desktop", "productName": "Hoppscotch",
"version": "0.0.0" "version": "23.8.1-1"
}, },
"tauri": { "tauri": {
"allowlist": { "allowlist": {

View File

@@ -15,64 +15,72 @@ import { useSettingStatic } from "@hoppscotch/common/composables/settings"
import { appWindow } from "@tauri-apps/api/window" import { appWindow } from "@tauri-apps/api/window"
import { stdFooterItems } from "@hoppscotch/common/platform/std/ui/footerItem" import { stdFooterItems } from "@hoppscotch/common/platform/std/ui/footerItem"
import { stdSupportOptionItems } from "@hoppscotch/common/platform/std/ui/supportOptionsItem" import { stdSupportOptionItems } from "@hoppscotch/common/platform/std/ui/supportOptionsItem"
import { useMousePressed } from "@vueuse/core"
import { ioDef } from "./platform/io" import { ioDef } from "./platform/io"
const headerPaddingLeft = ref("0px") const headerPaddingLeft = ref("0px")
const headerPaddingTop = ref("0px") const headerPaddingTop = ref("0px")
createHoppApp("#app", {
ui: {
additionalFooterMenuItems: stdFooterItems,
additionalSupportOptionsMenuItems: stdSupportOptionItems,
appHeader: {
paddingLeft: headerPaddingLeft,
paddingTop: headerPaddingTop,
},
},
io: ioDef,
auth: authDef,
sync: {
environments: environmentsDef,
collections: collectionsDef,
settings: settingsDef,
history: historyDef,
tabState: tabStateDef,
},
interceptors: {
default: "native",
interceptors: [
{ type: "service", service: NativeInterceptorService },
{ type: "standalone", interceptor: proxyInterceptor },
],
},
additionalInspectors: [
{ type: "service", service: ExtensionInspectorService },
],
platformFeatureFlags: {
exportAsGIST: false,
hasTelemetry: false,
cookiesEnabled: true,
},
})
watch(
useSettingStatic("BG_COLOR")[0],
async () => {
await nextTick()
await emit(
"hopp-bg-changed",
getComputedStyle(document.documentElement).getPropertyValue(
"--primary-color"
)
)
},
{ immediate: true }
)
;(async () => { ;(async () => {
const platform = await type() const platform = await type()
createHoppApp("#app", {
ui: {
additionalFooterMenuItems: stdFooterItems,
additionalSupportOptionsMenuItems: stdSupportOptionItems,
appHeader: {
paddingLeft: headerPaddingLeft,
paddingTop: headerPaddingTop,
onHeaderAreaClick() {
if (platform === "Darwin") {
// Drag thw window when the user drags the header area
// TODO: Ignore click on headers and fields
appWindow.startDragging()
}
},
},
},
io: ioDef,
auth: authDef,
sync: {
environments: environmentsDef,
collections: collectionsDef,
settings: settingsDef,
history: historyDef,
tabState: tabStateDef,
},
interceptors: {
default: "native",
interceptors: [
{ type: "service", service: NativeInterceptorService },
{ type: "standalone", interceptor: proxyInterceptor },
],
},
additionalInspectors: [
{ type: "service", service: ExtensionInspectorService },
],
platformFeatureFlags: {
exportAsGIST: false,
hasTelemetry: false,
cookiesEnabled: true,
promptAsUsingCookies: false,
},
})
watch(
useSettingStatic("BG_COLOR")[0],
async () => {
await nextTick()
await emit(
"hopp-bg-changed",
getComputedStyle(document.documentElement).getPropertyValue(
"--primary-color"
)
)
},
{ immediate: true }
)
if (platform === "Darwin") { if (platform === "Darwin") {
listen("will-enter-fullscreen", () => { listen("will-enter-fullscreen", () => {
headerPaddingTop.value = "0px" headerPaddingTop.value = "0px"
@@ -87,27 +95,4 @@ watch(
headerPaddingTop.value = "2px" headerPaddingTop.value = "2px"
headerPaddingLeft.value = "70px" headerPaddingLeft.value = "70px"
} }
const { pressed } = useMousePressed()
document.addEventListener("mousemove", (ev) => {
const { clientX, clientY } = ev
const el = document.querySelector("header")
if (!el) return
const { left, top, width, height } = el.getBoundingClientRect()
if (
clientX >= left &&
clientX <= left + width &&
clientY >= top &&
clientY <= top + height
) {
if (pressed.value) {
appWindow.startDragging()
}
}
})
})() })()

View File

@@ -1,7 +1,7 @@
{ {
"name": "@hoppscotch/selfhost-web", "name": "@hoppscotch/selfhost-web",
"private": true, "private": true,
"version": "2023.8.3", "version": "2023.8.3-1",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev:vite": "vite", "dev:vite": "vite",

View File

@@ -8,7 +8,6 @@
<link rel="icon" href="/favicon.ico" /> <link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Hoppscotch Admin</title> <title>Hoppscotch Admin</title>
<meta property="og:image" content="/cover.jpg" />
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

View File

@@ -1,7 +1,7 @@
{ {
"name": "hoppscotch-sh-admin", "name": "hoppscotch-sh-admin",
"private": true, "private": true,
"version": "2023.8.3", "version": "2023.8.3-1",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "pnpm exec npm-run-all -p -l dev:*", "dev": "pnpm exec npm-run-all -p -l dev:*",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,50 @@
<svg width="824" height="824" viewBox="0 0 824 824" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="824" height="824" rx="184" fill="#08110F"/>
<rect width="824" height="824" rx="184" fill="url(#paint0_radial_0_21)" fill-opacity="0.5"/>
<path d="M435.425 463.217C429.441 476.657 411.033 481.515 394.309 474.07C377.585 466.624 368.879 449.693 374.863 436.253C380.846 422.813 399.254 417.954 415.978 425.4C432.702 432.846 441.409 449.777 435.425 463.217Z" fill="url(#paint1_linear_0_21)"/>
<path d="M435.425 463.217C429.441 476.657 411.033 481.515 394.309 474.07C377.585 466.624 368.879 449.693 374.863 436.253C380.846 422.813 399.254 417.954 415.978 425.4C432.702 432.846 441.409 449.777 435.425 463.217Z" fill="url(#paint2_radial_0_21)" style="mix-blend-mode:soft-light"/>
<path d="M535.563 521.172C553.071 526.191 570.536 518.856 574.571 504.789C578.606 490.722 567.684 475.251 550.175 470.232C532.666 465.213 515.201 472.548 511.166 486.615C507.131 500.682 518.054 516.153 535.563 521.172Z" fill="url(#paint3_linear_0_21)"/>
<path d="M535.563 521.172C553.071 526.191 570.536 518.856 574.571 504.789C578.606 490.722 567.684 475.251 550.175 470.232C532.666 465.213 515.201 472.548 511.166 486.615C507.131 500.682 518.054 516.153 535.563 521.172Z" fill="url(#paint4_radial_0_21)" style="mix-blend-mode:soft-light"/>
<path d="M292.782 355.633C308.227 365.286 314.462 383.173 306.709 395.584C298.955 407.995 280.149 410.231 264.704 400.578C249.258 390.924 243.023 373.037 250.777 360.626C258.53 348.215 277.337 345.98 292.782 355.633Z" fill="url(#paint5_linear_0_21)"/>
<path d="M292.782 355.633C308.227 365.286 314.462 383.173 306.709 395.584C298.955 407.995 280.149 410.231 264.704 400.578C249.258 390.924 243.023 373.037 250.777 360.626C258.53 348.215 277.337 345.98 292.782 355.633Z" fill="url(#paint6_radial_0_21)" style="mix-blend-mode:soft-light"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M502.355 231.325C581.373 266.506 632.095 343.263 634.119 429.03C680.633 465.639 726.858 516.883 705.36 565.168C681.25 619.319 595.382 617.091 497.781 589.689C450.767 615.718 392.444 620.168 339.689 596.68C286.934 573.192 251.229 526.908 239.1 474.517C153.428 420.321 94.3151 357.999 118.425 303.847C139.923 255.562 208.935 255.626 267.265 265.697C332.356 209.81 423.338 196.144 502.355 231.325ZM159.38 322.082C147.667 348.389 210.578 423.052 382.845 499.751C555.111 576.449 652.693 573.241 664.405 546.934C674.099 525.16 634.213 483.308 588.537 450.878C553.009 425.484 504.344 397.494 440.864 369.231C423.586 361.538 416.839 341.008 424.104 324.691C431.369 308.374 447.329 297.463 480.93 295.91C496.747 295.862 498.823 291.476 499.546 287.716C500.442 281.915 492.401 276.002 484.108 272.31C418.17 242.953 337.453 255.265 281.503 314.178C226.84 301.933 169.074 300.309 159.38 322.082Z" fill="url(#paint7_linear_0_21)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M502.355 231.325C581.373 266.506 632.095 343.263 634.119 429.03C680.633 465.639 726.858 516.883 705.36 565.168C681.25 619.319 595.382 617.091 497.781 589.689C450.767 615.718 392.444 620.168 339.689 596.68C286.934 573.192 251.229 526.908 239.1 474.517C153.428 420.321 94.3151 357.999 118.425 303.847C139.923 255.562 208.935 255.626 267.265 265.697C332.356 209.81 423.338 196.144 502.355 231.325ZM159.38 322.082C147.667 348.389 210.578 423.052 382.845 499.751C555.111 576.449 652.693 573.241 664.405 546.934C674.099 525.16 634.213 483.308 588.537 450.878C553.009 425.484 504.344 397.494 440.864 369.231C423.586 361.538 416.839 341.008 424.104 324.691C431.369 308.374 447.329 297.463 480.93 295.91C496.747 295.862 498.823 291.476 499.546 287.716C500.442 281.915 492.401 276.002 484.108 272.31C418.17 242.953 337.453 255.265 281.503 314.178C226.84 301.933 169.074 300.309 159.38 322.082Z" fill="url(#paint8_radial_0_21)" style="mix-blend-mode:soft-light"/>
<defs>
<radialGradient id="paint0_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(814.524 12.36) rotate(125.613) scale(1089.59 1210.34)">
<stop stop-color="#00D196" stop-opacity="0.5"/>
<stop offset="0.996771" stop-color="#00D196" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint1_linear_0_21" x1="411.893" y1="212" x2="411.893" y2="612" gradientUnits="userSpaceOnUse">
<stop stop-color="#00D196"/>
<stop offset="1" stop-color="#00B381"/>
</linearGradient>
<radialGradient id="paint2_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(644.721 344.481) rotate(159.984) scale(631.37 385.135)">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint3_linear_0_21" x1="411.893" y1="212" x2="411.893" y2="612" gradientUnits="userSpaceOnUse">
<stop stop-color="#00D196"/>
<stop offset="1" stop-color="#00B381"/>
</linearGradient>
<radialGradient id="paint4_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(644.721 344.481) rotate(159.984) scale(631.37 385.135)">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint5_linear_0_21" x1="411.893" y1="212" x2="411.893" y2="612" gradientUnits="userSpaceOnUse">
<stop stop-color="#00D196"/>
<stop offset="1" stop-color="#00B381"/>
</linearGradient>
<radialGradient id="paint6_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(644.721 344.481) rotate(159.984) scale(631.37 385.135)">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint7_linear_0_21" x1="411.893" y1="212" x2="411.893" y2="612" gradientUnits="userSpaceOnUse">
<stop stop-color="#00D196"/>
<stop offset="1" stop-color="#00B381"/>
</linearGradient>
<radialGradient id="paint8_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(644.721 344.481) rotate(159.984) scale(631.37 385.135)">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -16,7 +16,7 @@
<div class="flex items-center justify-start px-4 my-4"> <div class="flex items-center justify-start px-4 my-4">
<div class="flex items-center"> <div class="flex items-center">
<HoppSmartLink class="flex items-center space-x-4" to="/dashboard"> <HoppSmartLink class="flex items-center space-x-4" to="/dashboard">
<img src="/cover.jpg" alt="hoppscotch-logo" class="h-7" /> <img src="/logo.svg" alt="hoppscotch-logo" class="h-7 w-7" />
<span <span
v-if="isExpanded" v-if="isExpanded"

View File

@@ -4,7 +4,7 @@
> >
<div class="flex flex-col justify-center text-center px-4"> <div class="flex flex-col justify-center text-center px-4">
<div class="flex justify-center items-center py-6"> <div class="flex justify-center items-center py-6">
<img src="/cover.jpg" alt="hoppscotch-logo" class="h-15" /> <img src="/logo.svg" alt="hoppscotch-logo" class="h-15 w-15" />
</div> </div>
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<h1 class="text-2xl text-secondaryDark">Login to Admin Dashboard</h1> <h1 class="text-2xl text-secondaryDark">Login to Admin Dashboard</h1>

View File

@@ -3,18 +3,16 @@ import { defineConfig } from "histoire"
export default defineConfig({ export default defineConfig({
theme: { theme: {
title: "Hoppscotch • UI", title: "Hoppscotch Design • Hoppscotch",
logo: { logo: {
square: "/logo.png", square: "/logo.svg",
light: "/logo.png", light: "/logo.svg",
dark: "/logo.png", dark: "/logo.svg",
}, },
logoHref: "https://ui.hoppscotch.io", logoHref: "/",
favicon: 'favicon.ico', favicon: "favicon.ico",
}, },
setupFile: "histoire.setup.ts", setupFile: "histoire.setup.ts",
plugins: [HstVue()], plugins: [HstVue()],
viteIgnorePlugins: [ viteIgnorePlugins: ["vite:dts"],
'vite:dts'
]
}) })

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -0,0 +1,50 @@
<svg width="824" height="824" viewBox="0 0 824 824" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="824" height="824" rx="184" fill="#08110F"/>
<rect width="824" height="824" rx="184" fill="url(#paint0_radial_0_21)" fill-opacity="0.5"/>
<path d="M435.425 463.217C429.441 476.657 411.033 481.515 394.309 474.07C377.585 466.624 368.879 449.693 374.863 436.253C380.846 422.813 399.254 417.954 415.978 425.4C432.702 432.846 441.409 449.777 435.425 463.217Z" fill="url(#paint1_linear_0_21)"/>
<path d="M435.425 463.217C429.441 476.657 411.033 481.515 394.309 474.07C377.585 466.624 368.879 449.693 374.863 436.253C380.846 422.813 399.254 417.954 415.978 425.4C432.702 432.846 441.409 449.777 435.425 463.217Z" fill="url(#paint2_radial_0_21)" style="mix-blend-mode:soft-light"/>
<path d="M535.563 521.172C553.071 526.191 570.536 518.856 574.571 504.789C578.606 490.722 567.684 475.251 550.175 470.232C532.666 465.213 515.201 472.548 511.166 486.615C507.131 500.682 518.054 516.153 535.563 521.172Z" fill="url(#paint3_linear_0_21)"/>
<path d="M535.563 521.172C553.071 526.191 570.536 518.856 574.571 504.789C578.606 490.722 567.684 475.251 550.175 470.232C532.666 465.213 515.201 472.548 511.166 486.615C507.131 500.682 518.054 516.153 535.563 521.172Z" fill="url(#paint4_radial_0_21)" style="mix-blend-mode:soft-light"/>
<path d="M292.782 355.633C308.227 365.286 314.462 383.173 306.709 395.584C298.955 407.995 280.149 410.231 264.704 400.578C249.258 390.924 243.023 373.037 250.777 360.626C258.53 348.215 277.337 345.98 292.782 355.633Z" fill="url(#paint5_linear_0_21)"/>
<path d="M292.782 355.633C308.227 365.286 314.462 383.173 306.709 395.584C298.955 407.995 280.149 410.231 264.704 400.578C249.258 390.924 243.023 373.037 250.777 360.626C258.53 348.215 277.337 345.98 292.782 355.633Z" fill="url(#paint6_radial_0_21)" style="mix-blend-mode:soft-light"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M502.355 231.325C581.373 266.506 632.095 343.263 634.119 429.03C680.633 465.639 726.858 516.883 705.36 565.168C681.25 619.319 595.382 617.091 497.781 589.689C450.767 615.718 392.444 620.168 339.689 596.68C286.934 573.192 251.229 526.908 239.1 474.517C153.428 420.321 94.3151 357.999 118.425 303.847C139.923 255.562 208.935 255.626 267.265 265.697C332.356 209.81 423.338 196.144 502.355 231.325ZM159.38 322.082C147.667 348.389 210.578 423.052 382.845 499.751C555.111 576.449 652.693 573.241 664.405 546.934C674.099 525.16 634.213 483.308 588.537 450.878C553.009 425.484 504.344 397.494 440.864 369.231C423.586 361.538 416.839 341.008 424.104 324.691C431.369 308.374 447.329 297.463 480.93 295.91C496.747 295.862 498.823 291.476 499.546 287.716C500.442 281.915 492.401 276.002 484.108 272.31C418.17 242.953 337.453 255.265 281.503 314.178C226.84 301.933 169.074 300.309 159.38 322.082Z" fill="url(#paint7_linear_0_21)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M502.355 231.325C581.373 266.506 632.095 343.263 634.119 429.03C680.633 465.639 726.858 516.883 705.36 565.168C681.25 619.319 595.382 617.091 497.781 589.689C450.767 615.718 392.444 620.168 339.689 596.68C286.934 573.192 251.229 526.908 239.1 474.517C153.428 420.321 94.3151 357.999 118.425 303.847C139.923 255.562 208.935 255.626 267.265 265.697C332.356 209.81 423.338 196.144 502.355 231.325ZM159.38 322.082C147.667 348.389 210.578 423.052 382.845 499.751C555.111 576.449 652.693 573.241 664.405 546.934C674.099 525.16 634.213 483.308 588.537 450.878C553.009 425.484 504.344 397.494 440.864 369.231C423.586 361.538 416.839 341.008 424.104 324.691C431.369 308.374 447.329 297.463 480.93 295.91C496.747 295.862 498.823 291.476 499.546 287.716C500.442 281.915 492.401 276.002 484.108 272.31C418.17 242.953 337.453 255.265 281.503 314.178C226.84 301.933 169.074 300.309 159.38 322.082Z" fill="url(#paint8_radial_0_21)" style="mix-blend-mode:soft-light"/>
<defs>
<radialGradient id="paint0_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(814.524 12.36) rotate(125.613) scale(1089.59 1210.34)">
<stop stop-color="#00D196" stop-opacity="0.5"/>
<stop offset="0.996771" stop-color="#00D196" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint1_linear_0_21" x1="411.893" y1="212" x2="411.893" y2="612" gradientUnits="userSpaceOnUse">
<stop stop-color="#00D196"/>
<stop offset="1" stop-color="#00B381"/>
</linearGradient>
<radialGradient id="paint2_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(644.721 344.481) rotate(159.984) scale(631.37 385.135)">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint3_linear_0_21" x1="411.893" y1="212" x2="411.893" y2="612" gradientUnits="userSpaceOnUse">
<stop stop-color="#00D196"/>
<stop offset="1" stop-color="#00B381"/>
</linearGradient>
<radialGradient id="paint4_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(644.721 344.481) rotate(159.984) scale(631.37 385.135)">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint5_linear_0_21" x1="411.893" y1="212" x2="411.893" y2="612" gradientUnits="userSpaceOnUse">
<stop stop-color="#00D196"/>
<stop offset="1" stop-color="#00B381"/>
</linearGradient>
<radialGradient id="paint6_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(644.721 344.481) rotate(159.984) scale(631.37 385.135)">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
<linearGradient id="paint7_linear_0_21" x1="411.893" y1="212" x2="411.893" y2="612" gradientUnits="userSpaceOnUse">
<stop stop-color="#00D196"/>
<stop offset="1" stop-color="#00B381"/>
</linearGradient>
<radialGradient id="paint8_radial_0_21" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(644.721 344.481) rotate(159.984) scale(631.37 385.135)">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</radialGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

300
pnpm-lock.yaml generated
View File

@@ -35,8 +35,8 @@ importers:
packages/codemirror-lang-graphql: packages/codemirror-lang-graphql:
dependencies: dependencies:
'@codemirror/language': '@codemirror/language':
specifier: ^6.9.2 specifier: 6.9.0
version: 6.9.2 version: 6.9.0
'@lezer/highlight': '@lezer/highlight':
specifier: 1.1.4 specifier: 1.1.4
version: 1.1.4 version: 1.1.4
@@ -372,7 +372,7 @@ importers:
version: 10.1.0(openapi-types@12.1.3) version: 10.1.0(openapi-types@12.1.3)
'@codemirror/autocomplete': '@codemirror/autocomplete':
specifier: ^6.10.2 specifier: ^6.10.2
version: 6.10.2(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.0) version: 6.10.2(@codemirror/language@6.9.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.0)
'@codemirror/commands': '@codemirror/commands':
specifier: ^6.3.0 specifier: ^6.3.0
version: 6.3.0 version: 6.3.0
@@ -386,8 +386,8 @@ importers:
specifier: ^6.0.2 specifier: ^6.0.2
version: 6.0.2(@codemirror/view@6.22.0) version: 6.0.2(@codemirror/view@6.22.0)
'@codemirror/language': '@codemirror/language':
specifier: ^6.9.2 specifier: 6.9.0
version: 6.9.2 version: 6.9.0
'@codemirror/legacy-modes': '@codemirror/legacy-modes':
specifier: ^6.3.3 specifier: ^6.3.3
version: 6.3.3 version: 6.3.3
@@ -611,8 +611,8 @@ importers:
specifier: ^21.1.1 specifier: ^21.1.1
version: 21.1.1 version: 21.1.1
zod: zod:
specifier: ^3.22.2 specifier: ^3.22.4
version: 3.22.2 version: 3.22.4
devDependencies: devDependencies:
'@esbuild-plugins/node-globals-polyfill': '@esbuild-plugins/node-globals-polyfill':
specifier: ^0.2.3 specifier: ^0.2.3
@@ -944,6 +944,30 @@ importers:
specifier: ^6.5.4 specifier: ^6.5.4
version: 6.6.0 version: 6.6.0
devDependencies: devDependencies:
'@graphql-codegen/add':
specifier: ^5.0.0
version: 5.0.0(graphql@16.8.1)
'@graphql-codegen/cli':
specifier: ^5.0.0
version: 5.0.0(@types/node@18.18.8)(graphql@16.8.1)
'@graphql-codegen/typed-document-node':
specifier: ^5.0.1
version: 5.0.1(graphql@16.8.1)
'@graphql-codegen/typescript':
specifier: ^4.0.1
version: 4.0.1(graphql@16.8.1)
'@graphql-codegen/typescript-operations':
specifier: ^4.0.1
version: 4.0.1(graphql@16.8.1)
'@graphql-codegen/typescript-urql-graphcache':
specifier: ^2.4.5
version: 2.4.5(@urql/exchange-graphcache@5.2.0)(graphql-tag@2.12.6)(graphql@16.8.1)
'@graphql-codegen/urql-introspection':
specifier: ^2.2.1
version: 2.2.1(graphql@16.8.1)
'@graphql-typed-document-node/core':
specifier: ^3.2.0
version: 3.2.0(graphql@16.8.1)
'@intlify/vite-plugin-vue-i18n': '@intlify/vite-plugin-vue-i18n':
specifier: ^6.0.1 specifier: ^6.0.1
version: 6.0.1(vite@4.5.0) version: 6.0.1(vite@4.5.0)
@@ -983,6 +1007,9 @@ importers:
eslint-plugin-vue: eslint-plugin-vue:
specifier: ^9.5.1 specifier: ^9.5.1
version: 9.17.0(eslint@8.47.0) version: 9.17.0(eslint@8.47.0)
npm-run-all:
specifier: ^4.1.5
version: 4.1.5
typescript: typescript:
specifier: ^4.9.5 specifier: ^4.9.5
version: 4.9.5 version: 4.9.5
@@ -4343,7 +4370,7 @@ packages:
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
dev: true dev: true
/@codemirror/autocomplete@6.10.2(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.0.3): /@codemirror/autocomplete@6.10.2(@codemirror/language@6.9.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.0.3):
resolution: {integrity: sha512-3dCL7b0j2GdtZzWN5j7HDpRAJ26ip07R4NGYz7QYthIYMiX8I4E4TNrYcdTayPJGeVQtd/xe7lWU4XL7THFb/w==} resolution: {integrity: sha512-3dCL7b0j2GdtZzWN5j7HDpRAJ26ip07R4NGYz7QYthIYMiX8I4E4TNrYcdTayPJGeVQtd/xe7lWU4XL7THFb/w==}
peerDependencies: peerDependencies:
'@codemirror/language': ^6.0.0 '@codemirror/language': ^6.0.0
@@ -4351,13 +4378,13 @@ packages:
'@codemirror/view': ^6.0.0 '@codemirror/view': ^6.0.0
'@lezer/common': ^1.0.0 '@lezer/common': ^1.0.0
dependencies: dependencies:
'@codemirror/language': 6.9.2 '@codemirror/language': 6.9.0
'@codemirror/state': 6.3.1 '@codemirror/state': 6.3.1
'@codemirror/view': 6.22.0 '@codemirror/view': 6.22.0
'@lezer/common': 1.0.3 '@lezer/common': 1.0.3
dev: false dev: false
/@codemirror/autocomplete@6.10.2(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.0): /@codemirror/autocomplete@6.10.2(@codemirror/language@6.9.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.0):
resolution: {integrity: sha512-3dCL7b0j2GdtZzWN5j7HDpRAJ26ip07R4NGYz7QYthIYMiX8I4E4TNrYcdTayPJGeVQtd/xe7lWU4XL7THFb/w==} resolution: {integrity: sha512-3dCL7b0j2GdtZzWN5j7HDpRAJ26ip07R4NGYz7QYthIYMiX8I4E4TNrYcdTayPJGeVQtd/xe7lWU4XL7THFb/w==}
peerDependencies: peerDependencies:
'@codemirror/language': ^6.0.0 '@codemirror/language': ^6.0.0
@@ -4365,7 +4392,7 @@ packages:
'@codemirror/view': ^6.0.0 '@codemirror/view': ^6.0.0
'@lezer/common': ^1.0.0 '@lezer/common': ^1.0.0
dependencies: dependencies:
'@codemirror/language': 6.9.2 '@codemirror/language': 6.9.0
'@codemirror/state': 6.3.1 '@codemirror/state': 6.3.1
'@codemirror/view': 6.22.0 '@codemirror/view': 6.22.0
'@lezer/common': 1.1.0 '@lezer/common': 1.1.0
@@ -4374,7 +4401,7 @@ packages:
/@codemirror/commands@6.3.0: /@codemirror/commands@6.3.0:
resolution: {integrity: sha512-tFfcxRIlOWiQDFhjBSWJ10MxcvbCIsRr6V64SgrcaY0MwNk32cUOcCuNlWo8VjV4qRQCgNgUAnIeo0svkk4R5Q==} resolution: {integrity: sha512-tFfcxRIlOWiQDFhjBSWJ10MxcvbCIsRr6V64SgrcaY0MwNk32cUOcCuNlWo8VjV4qRQCgNgUAnIeo0svkk4R5Q==}
dependencies: dependencies:
'@codemirror/language': 6.9.2 '@codemirror/language': 6.9.0
'@codemirror/state': 6.3.1 '@codemirror/state': 6.3.1
'@codemirror/view': 6.22.0 '@codemirror/view': 6.22.0
'@lezer/common': 1.1.0 '@lezer/common': 1.1.0
@@ -4382,8 +4409,8 @@ packages:
/@codemirror/lang-javascript@6.2.1: /@codemirror/lang-javascript@6.2.1:
resolution: {integrity: sha512-jlFOXTejVyiQCW3EQwvKH0m99bUYIw40oPmFjSX2VS78yzfe0HELZ+NEo9Yfo1MkGRpGlj3Gnu4rdxV1EnAs5A==} resolution: {integrity: sha512-jlFOXTejVyiQCW3EQwvKH0m99bUYIw40oPmFjSX2VS78yzfe0HELZ+NEo9Yfo1MkGRpGlj3Gnu4rdxV1EnAs5A==}
dependencies: dependencies:
'@codemirror/autocomplete': 6.10.2(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.0) '@codemirror/autocomplete': 6.10.2(@codemirror/language@6.9.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.1.0)
'@codemirror/language': 6.9.2 '@codemirror/language': 6.9.0
'@codemirror/lint': 6.4.2 '@codemirror/lint': 6.4.2
'@codemirror/state': 6.3.1 '@codemirror/state': 6.3.1
'@codemirror/view': 6.22.0 '@codemirror/view': 6.22.0
@@ -4394,14 +4421,14 @@ packages:
/@codemirror/lang-json@6.0.1: /@codemirror/lang-json@6.0.1:
resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==}
dependencies: dependencies:
'@codemirror/language': 6.9.2 '@codemirror/language': 6.9.0
'@lezer/json': 1.0.1 '@lezer/json': 1.0.1
/@codemirror/lang-xml@6.0.2(@codemirror/view@6.22.0): /@codemirror/lang-xml@6.0.2(@codemirror/view@6.22.0):
resolution: {integrity: sha512-JQYZjHL2LAfpiZI2/qZ/qzDuSqmGKMwyApYmEUUCTxLM4MWS7sATUEfIguZQr9Zjx/7gcdnewb039smF6nC2zw==} resolution: {integrity: sha512-JQYZjHL2LAfpiZI2/qZ/qzDuSqmGKMwyApYmEUUCTxLM4MWS7sATUEfIguZQr9Zjx/7gcdnewb039smF6nC2zw==}
dependencies: dependencies:
'@codemirror/autocomplete': 6.10.2(@codemirror/language@6.9.2)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.0.3) '@codemirror/autocomplete': 6.10.2(@codemirror/language@6.9.0)(@codemirror/state@6.3.1)(@codemirror/view@6.22.0)(@lezer/common@1.0.3)
'@codemirror/language': 6.9.2 '@codemirror/language': 6.9.0
'@codemirror/state': 6.3.1 '@codemirror/state': 6.3.1
'@lezer/common': 1.0.3 '@lezer/common': 1.0.3
'@lezer/xml': 1.0.2 '@lezer/xml': 1.0.2
@@ -4409,8 +4436,8 @@ packages:
- '@codemirror/view' - '@codemirror/view'
dev: false dev: false
/@codemirror/language@6.9.2: /@codemirror/language@6.9.0:
resolution: {integrity: sha512-QGTQXSpAKDIzaSE96zNK1UfIUhPgkT1CLjh1N5qVzZuxgsEOhz5RqaN8QCIdyOQklGLx3MgHd9YrE3X3+Pl1ow==} resolution: {integrity: sha512-nFu311/0ne/qGuGCL3oKuktBgzVOaxCHZPZv1tLSZkNjPYxxvkjSbzno3MlErG2tgw1Yw1yF8BxMCegeMXqpiw==}
dependencies: dependencies:
'@codemirror/state': 6.3.1 '@codemirror/state': 6.3.1
'@codemirror/view': 6.22.0 '@codemirror/view': 6.22.0
@@ -4422,7 +4449,7 @@ packages:
/@codemirror/legacy-modes@6.3.3: /@codemirror/legacy-modes@6.3.3:
resolution: {integrity: sha512-X0Z48odJ0KIoh/HY8Ltz75/4tDYc9msQf1E/2trlxFaFFhgjpVHjZ/BCXe1Lk7s4Gd67LL/CeEEHNI+xHOiESg==} resolution: {integrity: sha512-X0Z48odJ0KIoh/HY8Ltz75/4tDYc9msQf1E/2trlxFaFFhgjpVHjZ/BCXe1Lk7s4Gd67LL/CeEEHNI+xHOiESg==}
dependencies: dependencies:
'@codemirror/language': 6.9.2 '@codemirror/language': 6.9.0
dev: false dev: false
/@codemirror/lint@6.4.2: /@codemirror/lint@6.4.2:
@@ -4446,7 +4473,7 @@ packages:
/@codemirror/theme-one-dark@6.1.0: /@codemirror/theme-one-dark@6.1.0:
resolution: {integrity: sha512-AiTHtFRu8+vWT9wWUWDM+cog6ZwgivJogB1Tm/g40NIpLwph7AnmxrSzWfvJN5fBVufsuwBxecQCNmdcR5D7Aw==} resolution: {integrity: sha512-AiTHtFRu8+vWT9wWUWDM+cog6ZwgivJogB1Tm/g40NIpLwph7AnmxrSzWfvJN5fBVufsuwBxecQCNmdcR5D7Aw==}
dependencies: dependencies:
'@codemirror/language': 6.9.2 '@codemirror/language': 6.9.0
'@codemirror/state': 6.3.1 '@codemirror/state': 6.3.1
'@codemirror/view': 6.22.0 '@codemirror/view': 6.22.0
'@lezer/highlight': 1.1.4 '@lezer/highlight': 1.1.4
@@ -5504,9 +5531,9 @@ packages:
'@parcel/watcher': '@parcel/watcher':
optional: true optional: true
dependencies: dependencies:
'@babel/generator': 7.22.10 '@babel/generator': 7.23.0
'@babel/template': 7.22.5 '@babel/template': 7.22.15
'@babel/types': 7.22.10 '@babel/types': 7.23.0
'@graphql-codegen/core': 4.0.0(graphql@16.8.0) '@graphql-codegen/core': 4.0.0(graphql@16.8.0)
'@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.0) '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.0)
'@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.0) '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.0)
@@ -5518,7 +5545,7 @@ packages:
'@graphql-tools/load': 8.0.0(graphql@16.8.0) '@graphql-tools/load': 8.0.0(graphql@16.8.0)
'@graphql-tools/prisma-loader': 8.0.1(@types/node@17.0.27)(graphql@16.8.0) '@graphql-tools/prisma-loader': 8.0.1(@types/node@17.0.27)(graphql@16.8.0)
'@graphql-tools/url-loader': 8.0.0(@types/node@17.0.27)(graphql@16.8.0) '@graphql-tools/url-loader': 8.0.0(@types/node@17.0.27)(graphql@16.8.0)
'@graphql-tools/utils': 10.0.5(graphql@16.8.0) '@graphql-tools/utils': 10.0.6(graphql@16.8.0)
'@whatwg-node/fetch': 0.8.8 '@whatwg-node/fetch': 0.8.8
chalk: 4.1.2 chalk: 4.1.2
cosmiconfig: 8.2.0 cosmiconfig: 8.2.0
@@ -5559,9 +5586,9 @@ packages:
'@parcel/watcher': '@parcel/watcher':
optional: true optional: true
dependencies: dependencies:
'@babel/generator': 7.22.10 '@babel/generator': 7.23.0
'@babel/template': 7.22.5 '@babel/template': 7.22.15
'@babel/types': 7.22.10 '@babel/types': 7.23.0
'@graphql-codegen/core': 4.0.0(graphql@16.8.1) '@graphql-codegen/core': 4.0.0(graphql@16.8.1)
'@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1)
'@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1) '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1)
@@ -5573,7 +5600,7 @@ packages:
'@graphql-tools/load': 8.0.0(graphql@16.8.1) '@graphql-tools/load': 8.0.0(graphql@16.8.1)
'@graphql-tools/prisma-loader': 8.0.1(@types/node@17.0.27)(graphql@16.8.1) '@graphql-tools/prisma-loader': 8.0.1(@types/node@17.0.27)(graphql@16.8.1)
'@graphql-tools/url-loader': 8.0.0(@types/node@17.0.27)(graphql@16.8.1) '@graphql-tools/url-loader': 8.0.0(@types/node@17.0.27)(graphql@16.8.1)
'@graphql-tools/utils': 10.0.5(graphql@16.8.1) '@graphql-tools/utils': 10.0.6(graphql@16.8.1)
'@whatwg-node/fetch': 0.8.8 '@whatwg-node/fetch': 0.8.8
chalk: 4.1.2 chalk: 4.1.2
cosmiconfig: 8.2.0 cosmiconfig: 8.2.0
@@ -5604,6 +5631,61 @@ packages:
- utf-8-validate - utf-8-validate
dev: true dev: true
/@graphql-codegen/cli@5.0.0(@types/node@18.18.8)(graphql@16.8.1):
resolution: {integrity: sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA==}
hasBin: true
peerDependencies:
'@parcel/watcher': ^2.1.0
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
peerDependenciesMeta:
'@parcel/watcher':
optional: true
dependencies:
'@babel/generator': 7.23.0
'@babel/template': 7.22.15
'@babel/types': 7.23.0
'@graphql-codegen/core': 4.0.0(graphql@16.8.1)
'@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1)
'@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1)
'@graphql-tools/code-file-loader': 8.0.2(graphql@16.8.1)
'@graphql-tools/git-loader': 8.0.2(graphql@16.8.1)
'@graphql-tools/github-loader': 8.0.0(@types/node@18.18.8)(graphql@16.8.1)
'@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1)
'@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1)
'@graphql-tools/load': 8.0.0(graphql@16.8.1)
'@graphql-tools/prisma-loader': 8.0.1(@types/node@18.18.8)(graphql@16.8.1)
'@graphql-tools/url-loader': 8.0.0(@types/node@18.18.8)(graphql@16.8.1)
'@graphql-tools/utils': 10.0.6(graphql@16.8.1)
'@whatwg-node/fetch': 0.8.8
chalk: 4.1.2
cosmiconfig: 8.2.0
debounce: 1.2.1
detect-indent: 6.1.0
graphql: 16.8.1
graphql-config: 5.0.2(@types/node@18.18.8)(graphql@16.8.1)
inquirer: 8.2.6
is-glob: 4.0.3
jiti: 1.19.3
json-to-pretty-yaml: 1.2.2
listr2: 4.0.5
log-symbols: 4.1.0
micromatch: 4.0.5
shell-quote: 1.8.1
string-env-interpolation: 1.0.1
ts-log: 2.2.5
tslib: 2.6.2
yaml: 2.3.1
yargs: 17.7.2
transitivePeerDependencies:
- '@types/node'
- bufferutil
- cosmiconfig-toml-loader
- encoding
- enquirer
- supports-color
- utf-8-validate
dev: true
/@graphql-codegen/client-preset@2.1.0(graphql@16.6.0): /@graphql-codegen/client-preset@2.1.0(graphql@16.6.0):
resolution: {integrity: sha512-mt5CyPwZmOUP+ifC56xMjeEyfywu0P6HSWbhWPn1Jbv7n3TMILXMDfgOAufnOmrU1Ian8wu72I9A5IMRGqmW1w==} resolution: {integrity: sha512-mt5CyPwZmOUP+ifC56xMjeEyfywu0P6HSWbhWPn1Jbv7n3TMILXMDfgOAufnOmrU1Ian8wu72I9A5IMRGqmW1w==}
peerDependencies: peerDependencies:
@@ -6670,6 +6752,24 @@ packages:
- '@types/node' - '@types/node'
dev: true dev: true
/@graphql-tools/executor-http@1.0.2(@types/node@18.18.8)(graphql@16.8.1):
resolution: {integrity: sha512-JKTB4E3kdQM2/1NEcyrVPyQ8057ZVthCV5dFJiKktqY9IdmF00M8gupFcW3jlbM/Udn78ickeUBsUzA3EouqpA==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@graphql-tools/utils': 10.0.5(graphql@16.8.1)
'@repeaterjs/repeater': 3.0.4
'@whatwg-node/fetch': 0.9.9
extract-files: 11.0.0
graphql: 16.8.1
meros: 1.3.0(@types/node@18.18.8)
tslib: 2.6.2
value-or-promise: 1.0.12
transitivePeerDependencies:
- '@types/node'
dev: true
/@graphql-tools/executor-legacy-ws@0.0.9(graphql@16.6.0): /@graphql-tools/executor-legacy-ws@0.0.9(graphql@16.6.0):
resolution: {integrity: sha512-L7oDv7R5yoXzMH+KLKDB2WHVijfVW4dB2H+Ae1RdW3MFvwbYjhnIB6QzHqKEqksjp/FndtxZkbuTIuAOsYGTYw==} resolution: {integrity: sha512-L7oDv7R5yoXzMH+KLKDB2WHVijfVW4dB2H+Ae1RdW3MFvwbYjhnIB6QzHqKEqksjp/FndtxZkbuTIuAOsYGTYw==}
peerDependencies: peerDependencies:
@@ -6870,6 +6970,26 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@graphql-tools/github-loader@8.0.0(@types/node@18.18.8)(graphql@16.8.1):
resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@ardatan/sync-fetch': 0.0.1
'@graphql-tools/executor-http': 1.0.2(@types/node@18.18.8)(graphql@16.8.1)
'@graphql-tools/graphql-tag-pluck': 8.0.2(graphql@16.8.1)
'@graphql-tools/utils': 10.0.5(graphql@16.8.1)
'@whatwg-node/fetch': 0.9.9
graphql: 16.8.1
tslib: 2.6.2
value-or-promise: 1.0.12
transitivePeerDependencies:
- '@types/node'
- encoding
- supports-color
dev: true
/@graphql-tools/graphql-file-loader@7.4.0(graphql@16.8.0): /@graphql-tools/graphql-file-loader@7.4.0(graphql@16.8.0):
resolution: {integrity: sha512-r1lslE5GlWO/nbDX82enHjvva7qQiZEIPm+LC9JSgKaYuVoYHuIuIAVYkpBHeaRK1Kbh/86pEhL7PuBZ/cIWSA==} resolution: {integrity: sha512-r1lslE5GlWO/nbDX82enHjvva7qQiZEIPm+LC9JSgKaYuVoYHuIuIAVYkpBHeaRK1Kbh/86pEhL7PuBZ/cIWSA==}
peerDependencies: peerDependencies:
@@ -7270,7 +7390,7 @@ packages:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies: dependencies:
'@graphql-tools/url-loader': 8.0.0(@types/node@17.0.27)(graphql@16.8.0) '@graphql-tools/url-loader': 8.0.0(@types/node@17.0.27)(graphql@16.8.0)
'@graphql-tools/utils': 10.0.5(graphql@16.8.0) '@graphql-tools/utils': 10.0.6(graphql@16.8.0)
'@types/js-yaml': 4.0.5 '@types/js-yaml': 4.0.5
'@types/json-stable-stringify': 1.0.34 '@types/json-stable-stringify': 1.0.34
'@whatwg-node/fetch': 0.9.9 '@whatwg-node/fetch': 0.9.9
@@ -7303,7 +7423,40 @@ packages:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies: dependencies:
'@graphql-tools/url-loader': 8.0.0(@types/node@17.0.27)(graphql@16.8.1) '@graphql-tools/url-loader': 8.0.0(@types/node@17.0.27)(graphql@16.8.1)
'@graphql-tools/utils': 10.0.5(graphql@16.8.1) '@graphql-tools/utils': 10.0.6(graphql@16.8.1)
'@types/js-yaml': 4.0.5
'@types/json-stable-stringify': 1.0.34
'@whatwg-node/fetch': 0.9.9
chalk: 4.1.2
debug: 4.3.4(supports-color@9.2.2)
dotenv: 16.3.1
graphql: 16.8.1
graphql-request: 6.1.0(graphql@16.8.1)
http-proxy-agent: 7.0.0
https-proxy-agent: 7.0.1
jose: 4.14.4
js-yaml: 4.1.0
json-stable-stringify: 1.0.2
lodash: 4.17.21
scuid: 1.1.0
tslib: 2.6.2
yaml-ast-parser: 0.0.43
transitivePeerDependencies:
- '@types/node'
- bufferutil
- encoding
- supports-color
- utf-8-validate
dev: true
/@graphql-tools/prisma-loader@8.0.1(@types/node@18.18.8)(graphql@16.8.1):
resolution: {integrity: sha512-bl6e5sAYe35Z6fEbgKXNrqRhXlCJYeWKBkarohgYA338/SD9eEhXtg3Cedj7fut3WyRLoQFpHzfiwxKs7XrgXg==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@graphql-tools/url-loader': 8.0.0(@types/node@18.18.8)(graphql@16.8.1)
'@graphql-tools/utils': 10.0.6(graphql@16.8.1)
'@types/js-yaml': 4.0.5 '@types/js-yaml': 4.0.5
'@types/json-stable-stringify': 1.0.34 '@types/json-stable-stringify': 1.0.34
'@whatwg-node/fetch': 0.9.9 '@whatwg-node/fetch': 0.9.9
@@ -7519,10 +7672,10 @@ packages:
'@types/ws': 8.5.5 '@types/ws': 8.5.5
'@whatwg-node/fetch': 0.8.8 '@whatwg-node/fetch': 0.8.8
graphql: 16.6.0 graphql: 16.6.0
isomorphic-ws: 5.0.0(ws@8.13.0) isomorphic-ws: 5.0.0(ws@8.14.2)
tslib: 2.6.2 tslib: 2.6.2
value-or-promise: 1.0.12 value-or-promise: 1.0.12
ws: 8.13.0 ws: 8.14.2
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- bufferutil - bufferutil
@@ -7541,7 +7694,7 @@ packages:
'@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.0) '@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.0)
'@graphql-tools/executor-http': 1.0.2(@types/node@17.0.27)(graphql@16.8.0) '@graphql-tools/executor-http': 1.0.2(@types/node@17.0.27)(graphql@16.8.0)
'@graphql-tools/executor-legacy-ws': 1.0.1(graphql@16.8.0) '@graphql-tools/executor-legacy-ws': 1.0.1(graphql@16.8.0)
'@graphql-tools/utils': 10.0.5(graphql@16.8.0) '@graphql-tools/utils': 10.0.6(graphql@16.8.0)
'@graphql-tools/wrap': 10.0.0(graphql@16.8.0) '@graphql-tools/wrap': 10.0.0(graphql@16.8.0)
'@types/ws': 8.5.5 '@types/ws': 8.5.5
'@whatwg-node/fetch': 0.9.9 '@whatwg-node/fetch': 0.9.9
@@ -7568,7 +7721,34 @@ packages:
'@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.1) '@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.1)
'@graphql-tools/executor-http': 1.0.2(@types/node@17.0.27)(graphql@16.8.1) '@graphql-tools/executor-http': 1.0.2(@types/node@17.0.27)(graphql@16.8.1)
'@graphql-tools/executor-legacy-ws': 1.0.1(graphql@16.8.1) '@graphql-tools/executor-legacy-ws': 1.0.1(graphql@16.8.1)
'@graphql-tools/utils': 10.0.5(graphql@16.8.1) '@graphql-tools/utils': 10.0.6(graphql@16.8.1)
'@graphql-tools/wrap': 10.0.0(graphql@16.8.1)
'@types/ws': 8.5.5
'@whatwg-node/fetch': 0.9.9
graphql: 16.8.1
isomorphic-ws: 5.0.0(ws@8.14.2)
tslib: 2.6.2
value-or-promise: 1.0.12
ws: 8.14.2
transitivePeerDependencies:
- '@types/node'
- bufferutil
- encoding
- utf-8-validate
dev: true
/@graphql-tools/url-loader@8.0.0(@types/node@18.18.8)(graphql@16.8.1):
resolution: {integrity: sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@ardatan/sync-fetch': 0.0.1
'@graphql-tools/delegate': 10.0.2(graphql@16.8.1)
'@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.1)
'@graphql-tools/executor-http': 1.0.2(@types/node@18.18.8)(graphql@16.8.1)
'@graphql-tools/executor-legacy-ws': 1.0.1(graphql@16.8.1)
'@graphql-tools/utils': 10.0.6(graphql@16.8.1)
'@graphql-tools/wrap': 10.0.0(graphql@16.8.1) '@graphql-tools/wrap': 10.0.0(graphql@16.8.1)
'@types/ws': 8.5.5 '@types/ws': 8.5.5
'@whatwg-node/fetch': 0.9.9 '@whatwg-node/fetch': 0.9.9
@@ -7607,6 +7787,18 @@ packages:
graphql: 16.8.1 graphql: 16.8.1
tslib: 2.6.2 tslib: 2.6.2
/@graphql-tools/utils@10.0.6(graphql@16.8.0):
resolution: {integrity: sha512-hZMjl/BbX10iagovakgf3IiqArx8TPsotq5pwBld37uIX1JiZoSbgbCIFol7u55bh32o6cfDEiiJgfAD5fbeyQ==}
engines: {node: '>=16.0.0'}
peerDependencies:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
'@graphql-typed-document-node/core': 3.2.0(graphql@16.8.0)
dset: 3.1.2
graphql: 16.8.0
tslib: 2.6.2
dev: true
/@graphql-tools/utils@10.0.6(graphql@16.8.1): /@graphql-tools/utils@10.0.6(graphql@16.8.1):
resolution: {integrity: sha512-hZMjl/BbX10iagovakgf3IiqArx8TPsotq5pwBld37uIX1JiZoSbgbCIFol7u55bh32o6cfDEiiJgfAD5fbeyQ==} resolution: {integrity: sha512-hZMjl/BbX10iagovakgf3IiqArx8TPsotq5pwBld37uIX1JiZoSbgbCIFol7u55bh32o6cfDEiiJgfAD5fbeyQ==}
engines: {node: '>=16.0.0'} engines: {node: '>=16.0.0'}
@@ -7617,7 +7809,6 @@ packages:
dset: 3.1.2 dset: 3.1.2
graphql: 16.8.1 graphql: 16.8.1
tslib: 2.6.2 tslib: 2.6.2
dev: false
/@graphql-tools/utils@8.13.1(graphql@16.6.0): /@graphql-tools/utils@8.13.1(graphql@16.6.0):
resolution: {integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==} resolution: {integrity: sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==}
@@ -7820,7 +8011,7 @@ packages:
dependencies: dependencies:
'@codemirror/commands': 6.3.0 '@codemirror/commands': 6.3.0
'@codemirror/lang-json': 6.0.1 '@codemirror/lang-json': 6.0.1
'@codemirror/language': 6.9.2 '@codemirror/language': 6.9.0
'@codemirror/lint': 6.4.2 '@codemirror/lint': 6.4.2
'@codemirror/state': 6.3.1 '@codemirror/state': 6.3.1
'@codemirror/theme-one-dark': 6.1.0 '@codemirror/theme-one-dark': 6.1.0
@@ -16941,6 +17132,35 @@ packages:
- utf-8-validate - utf-8-validate
dev: true dev: true
/graphql-config@5.0.2(@types/node@18.18.8)(graphql@16.8.1):
resolution: {integrity: sha512-7TPxOrlbiG0JplSZYCyxn2XQtqVhXomEjXUmWJVSS5ET1nPhOJSsIb/WTwqWhcYX6G0RlHXSj9PLtGTKmxLNGg==}
engines: {node: '>= 16.0.0'}
peerDependencies:
cosmiconfig-toml-loader: ^1.0.0
graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
peerDependenciesMeta:
cosmiconfig-toml-loader:
optional: true
dependencies:
'@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1)
'@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1)
'@graphql-tools/load': 8.0.0(graphql@16.8.1)
'@graphql-tools/merge': 9.0.0(graphql@16.8.1)
'@graphql-tools/url-loader': 8.0.0(@types/node@18.18.8)(graphql@16.8.1)
'@graphql-tools/utils': 10.0.5(graphql@16.8.1)
cosmiconfig: 8.2.0
graphql: 16.8.1
jiti: 1.19.1
minimatch: 4.2.3
string-env-interpolation: 1.0.1
tslib: 2.6.2
transitivePeerDependencies:
- '@types/node'
- bufferutil
- encoding
- utf-8-validate
dev: true
/graphql-language-service-interface@2.10.2(@types/node@17.0.27)(graphql@16.8.0)(typescript@5.1.6): /graphql-language-service-interface@2.10.2(@types/node@17.0.27)(graphql@16.8.0)(typescript@5.1.6):
resolution: {integrity: sha512-RKIEBPhRMWdXY3fxRs99XysTDnEgAvNbu8ov/5iOlnkZsWQNzitjtd0O0l1CutQOQt3iXoHde7w8uhCnKL4tcg==} resolution: {integrity: sha512-RKIEBPhRMWdXY3fxRs99XysTDnEgAvNbu8ov/5iOlnkZsWQNzitjtd0O0l1CutQOQt3iXoHde7w8uhCnKL4tcg==}
peerDependencies: peerDependencies:
@@ -21013,7 +21233,7 @@ packages:
minimatch: 3.1.2 minimatch: 3.1.2
pidtree: 0.3.1 pidtree: 0.3.1
read-pkg: 3.0.0 read-pkg: 3.0.0
shell-quote: 1.7.3 shell-quote: 1.8.1
string.prototype.padend: 3.1.3 string.prototype.padend: 3.1.3
dev: true dev: true
@@ -23524,7 +23744,7 @@ packages:
graphql: 16.8.1 graphql: 16.8.1
iterall: 1.3.0 iterall: 1.3.0
symbol-observable: 1.2.0 symbol-observable: 1.2.0
ws: 7.4.6 ws: 7.5.9
transitivePeerDependencies: transitivePeerDependencies:
- bufferutil - bufferutil
- utf-8-validate - utf-8-validate
@@ -27540,7 +27760,6 @@ packages:
optional: true optional: true
utf-8-validate: utf-8-validate:
optional: true optional: true
dev: true
/ws@8.12.1: /ws@8.12.1:
resolution: {integrity: sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==} resolution: {integrity: sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==}
@@ -27849,6 +28068,7 @@ packages:
/zod@3.22.2: /zod@3.22.2:
resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==} resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==}
dev: true
/zod@3.22.4: /zod@3.22.4:
resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}