From 989b5a80580c986266cd474ebc8edcd84abc0990 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Mon, 5 Aug 2024 07:58:20 -0700 Subject: [PATCH] Model and DB refactor (#61) - [x] Move from `sqlx` to `rusqlite` - [x] Generate TS types from Rust models --- package-lock.json | 154 +- package.json | 16 +- plugin-runtime-types/package-lock.json | 12 +- plugin-runtime-types/package.json | 4 +- plugin-runtime-types/src/gen/Environment.ts | 4 + .../src/gen/EnvironmentVariable.ts | 3 + plugin-runtime-types/src/gen/Folder.ts | 3 + .../src/gen/GrpcConnection.ts | 3 + plugin-runtime-types/src/gen/GrpcEvent.ts | 4 + plugin-runtime-types/src/gen/GrpcEventType.ts | 3 + .../src/gen/GrpcMetadataEntry.ts | 3 + plugin-runtime-types/src/gen/GrpcRequest.ts | 4 + plugin-runtime-types/src/gen/HttpRequest.ts | 5 + .../src/gen/HttpRequestHeader.ts | 3 + plugin-runtime-types/src/gen/HttpResponse.ts | 4 + .../src/gen/HttpResponseHeader.ts | 3 + .../src/gen/HttpUrlParameter.ts | 3 + plugin-runtime-types/src/gen/KeyValue.ts | 3 + plugin-runtime-types/src/gen/Workspace.ts | 4 + plugin-runtime-types/src/index.ts | 17 +- plugin-runtime-types/src/models/index.ts | 1 - plugin-runtime-types/src/models/types.ts | 135 - plugin-runtime-types/src/plugins/context.ts | 3 +- .../src/plugins/httpRequestAction.ts | 2 +- plugin-runtime-types/src/plugins/import.ts | 5 +- ...baf4b5fc28c3cf0c001a84e25edf9eab3c7e3.json | 50 - ...7bb779b71dae30e5bbce34885a911a5a42428.json | 12 - ...4b4b35af5fa36f63dc48b9b66ee6dfde78976.json | 116 - ...458ffbcd8c0850aef16ba1f70e358623ac66a.json | 12 - ...52bf7213fe01b5346266c0a89dc0ac89eda64.json | 12 - ...ea43cc41c1d517386ed816c16d436bf626bf3.json | 12 - ...e25ad683b80b9bd0c2944063190a0d0a19ee5.json | 104 - ...d79cdd69210f3dc2076aedcadeba8e34dcb6e.json | 80 - ...c5678a9624020df4ea744e78396f6926d5c88.json | 12 - ...d4e40a1945d640962991f879928619950ef62.json | 12 - ...c7d8775040d5287c16890056dcb474674edfb.json | 92 - ...df83d83af5d88ea0b84514fdc877a668c27cd.json | 12 - ...2930bf21dfdd43ca4831bc1a198cf45ac3732.json | 12 - ...f9a5f7a3d82b379ff9af36645dcfb92548fdd.json | 62 - ...7fff5e3ec4619b962d149fdd4d618fe02c680.json | 110 - ...e4a1093739e9abba69f6fe5527d453fab4db8.json | 56 - ...0feb338f615b88aea2bd09cb5809008c645a3.json | 12 - ...cf16d4d2b3f8d0be32ffe7848528c725e1429.json | 12 - ...288b4055fec4ba7d9102131bd255c037fa021.json | 56 - ...07887c2a2cb564d1d076dd4ebf0ecbc82e098.json | 12 - ...818ad110d58c601f694a619d9345ae9e8e11d.json | 12 - ...d03fca2ff21012947014c79626abfce8e999b.json | 12 - ...f7029b6c78de227c6fa3a85d75d0a7f21e0e9.json | 74 - ...27c514bab4039ab5edadc79b77dfdfd63b208.json | 12 - ...504c9222645976e3433e32e190f4ee4bf100d.json | 80 - ...a0bb6477e78f27991ce7456b394e84383acb6.json | 12 - ...2fbb5e5ad0be952a0d832448d65cc5f0effc1.json | 74 - ...4ef093a1696d7b7ecaf694d12e5fafd62b685.json | 12 - ...87d679dd6f44c561d55c7bbea747053e53671.json | 12 - ...25fe35c3866d16f6482fc32c23762f112dc83.json | 116 - ...545deac2a5e9bfb814b60191f16b98ed49796.json | 62 - ...54aa8206ad852e608b362d014b67a0f21b0ed.json | 12 - ...bc0a9c000a631ee0d751a9dc4f3e76de3d57c.json | 12 - ...2840a6d5d13fec1bbc0aa61ca4f60de98a09c.json | 12 - ...4dbfec6ca130e16e592f948844c037bdc0593.json | 56 - ...fb6a73d25eb7c9e09cb9690afdb7fef5fca8b.json | 92 - ...cb80105501cf5baab706aa6792dfe90af8fc9.json | 116 - ...6a87e73a551f88a948a5445d754922b82b50b.json | 12 - ...7839ad502e8e5e43aa8c02e049865acbbae75.json | 98 - ...bee263923c387f4864917f36a04043bec4857.json | 104 - ...e4443342796cb72bdd43a821fae2994ae8e2f.json | 110 - ...d8e12cf29d6d243fffdd62ade2ab70c7bddda.json | 12 - ...97edad59e4f5998b15c50ed6eae2e97064068.json | 56 - ...c1cbd668bcf00ebe1a5f36616700c84972b39.json | 12 - src-tauri/Cargo.lock | 514 ++- src-tauri/Cargo.toml | 33 +- src-tauri/capabilities/capabilities.json | 28 +- src-tauri/gen/schemas/acl-manifests.json | 2 +- src-tauri/gen/schemas/capabilities.json | 2 +- src-tauri/gen/schemas/desktop-schema.json | 3875 +++++++++-------- src-tauri/gen/schemas/macOS-schema.json | 3875 +++++++++-------- src-tauri/grpc/Cargo.toml | 4 +- src-tauri/src/analytics.rs | 5 +- src-tauri/src/deno_ops.rs | 16 - src-tauri/src/export_resources.rs | 77 + src-tauri/src/http_request.rs | 86 +- src-tauri/src/lib.rs | 118 +- src-tauri/src/models.rs | 1675 ------- src-tauri/src/notifications.rs | 3 +- src-tauri/src/render.rs | 103 +- src-tauri/src/template_fns.rs | 10 +- src-tauri/yaak_models/Cargo.toml | 19 + src-tauri/yaak_models/src/lib.rs | 57 + src-tauri/yaak_models/src/models.rs | 796 ++++ src-tauri/yaak_models/src/queries.rs | 1373 ++++++ .../Cargo.toml | 6 +- .../build.rs | 0 .../src/lib.rs | 2 +- .../src/manager.rs | 0 .../src/nodejs.rs | 5 +- src-web/components/BasicAuth.tsx | 10 +- src-web/components/BearerAuth.tsx | 6 +- src-web/components/BinaryFileEditor.tsx | 2 +- src-web/components/CookieDialog.tsx | 5 +- src-web/components/EnvironmentEditDialog.tsx | 2 +- src-web/components/ExportDataDialog.tsx | 2 +- src-web/components/FormMultipartEditor.tsx | 2 +- src-web/components/FormUrlencodedEditor.tsx | 2 +- src-web/components/GraphQLEditor.tsx | 2 +- .../components/GrpcConnectionMessagesPane.tsx | 2 +- .../components/GrpcConnectionSetupPane.tsx | 2 +- src-web/components/GrpcEditor.tsx | 2 +- src-web/components/HeadersEditor.tsx | 2 +- src-web/components/HttpRequestLayout.tsx | 2 +- src-web/components/MoveToWorkspaceDialog.tsx | 2 +- src-web/components/OpenWorkspaceDialog.tsx | 2 +- .../components/RecentConnectionsDropdown.tsx | 2 +- .../components/RecentResponsesDropdown.tsx | 2 +- src-web/components/RequestPane.tsx | 5 +- src-web/components/ResponseHeaders.tsx | 2 +- src-web/components/ResponseInfo.tsx | 2 +- src-web/components/ResponsePane.tsx | 2 +- src-web/components/Sidebar.tsx | 2 +- src-web/components/UrlBar.tsx | 2 +- src-web/components/UrlParameterEditor.tsx | 2 +- src-web/components/core/Editor/extensions.ts | 2 +- .../components/core/Editor/twig/extension.ts | 2 +- src-web/components/core/HttpMethodTag.tsx | 2 +- src-web/components/core/StatusTag.tsx | 2 +- .../responseViewers/AudioViewer.tsx | 2 +- .../responseViewers/BinaryViewer.tsx | 2 +- .../components/responseViewers/CsvViewer.tsx | 2 +- .../responseViewers/ImageViewer.tsx | 2 +- .../components/responseViewers/JsonViewer.tsx | 2 +- .../components/responseViewers/PdfViewer.tsx | 2 +- .../components/responseViewers/TextViewer.tsx | 2 +- .../responseViewers/VideoViewer.tsx | 2 +- .../responseViewers/WebPageViewer.tsx | 2 +- src-web/hooks/useActiveEnvironment.ts | 2 +- src-web/hooks/useActiveRequest.ts | 2 +- src-web/hooks/useActiveWorkspace.ts | 2 +- src-web/hooks/useAppRoutes.tsx | 2 +- src-web/hooks/useContentTypeFromHeaders.ts | 4 +- src-web/hooks/useCreateEnvironment.ts | 2 +- src-web/hooks/useCreateFolder.ts | 2 +- src-web/hooks/useCreateGrpcRequest.ts | 2 +- src-web/hooks/useCreateHttpRequest.ts | 2 +- src-web/hooks/useCreateWorkspace.ts | 2 +- src-web/hooks/useDeleteAnyGrpcRequest.tsx | 2 +- src-web/hooks/useDeleteAnyHttpRequest.tsx | 2 +- src-web/hooks/useDeleteEnvironment.tsx | 2 +- src-web/hooks/useDeleteFolder.tsx | 2 +- src-web/hooks/useDeleteGrpcConnection.ts | 2 +- src-web/hooks/useDeleteHttpResponse.ts | 2 +- src-web/hooks/useDeleteWorkspace.tsx | 2 +- src-web/hooks/useDuplicateGrpcRequest.ts | 2 +- src-web/hooks/useDuplicateHttpRequest.ts | 2 +- src-web/hooks/useEnvironments.ts | 2 +- src-web/hooks/useFolders.ts | 2 +- src-web/hooks/useGrpc.ts | 2 +- src-web/hooks/useGrpcConnections.ts | 2 +- src-web/hooks/useGrpcEvents.ts | 2 +- src-web/hooks/useGrpcRequest.ts | 2 +- src-web/hooks/useGrpcRequests.ts | 2 +- src-web/hooks/useHttpRequest.ts | 2 +- src-web/hooks/useHttpRequests.ts | 2 +- src-web/hooks/useHttpResponses.ts | 2 +- src-web/hooks/useImportData.tsx | 2 +- src-web/hooks/useIntrospectGraphQL.ts | 2 +- src-web/hooks/useLatestGrpcConnection.ts | 2 +- src-web/hooks/useLatestHttpResponse.ts | 2 +- src-web/hooks/usePinnedGrpcConnection.ts | 2 +- src-web/hooks/usePinnedHttpResponse.ts | 2 +- src-web/hooks/useRenameRequest.tsx | 5 +- src-web/hooks/useResponseBodyBlob.ts | 2 +- src-web/hooks/useResponseBodyText.ts | 2 +- src-web/hooks/useSaveResponse.tsx | 2 +- src-web/hooks/useSendAnyHttpRequest.ts | 2 +- src-web/hooks/useSettings.ts | 2 +- src-web/hooks/useUpdateAnyFolder.ts | 2 +- src-web/hooks/useUpdateAnyGrpcRequest.ts | 2 +- src-web/hooks/useUpdateAnyHttpRequest.ts | 2 +- src-web/hooks/useUpdateEnvironment.ts | 2 +- src-web/hooks/useUpdateWorkspace.ts | 2 +- src-web/hooks/useWorkspaces.ts | 4 +- src-web/lib/fallbackRequestName.ts | 2 +- src-web/lib/gen/Cookie.ts | 5 + src-web/lib/gen/CookieDomain.ts | 3 + src-web/lib/gen/CookieExpires.ts | 3 + src-web/lib/gen/CookieJar.ts | 4 + src-web/lib/gen/Settings.ts | 3 + src-web/lib/keyValueStore.ts | 2 +- src-web/lib/models.ts | 60 +- src-web/lib/responseBody.ts | 2 +- src-web/lib/sendEphemeralRequest.ts | 2 +- src-web/lib/store.ts | 12 +- src-web/modules.d.ts | 1 + tsconfig.json | 1 + 193 files changed, 7083 insertions(+), 8337 deletions(-) create mode 100644 plugin-runtime-types/src/gen/Environment.ts create mode 100644 plugin-runtime-types/src/gen/EnvironmentVariable.ts create mode 100644 plugin-runtime-types/src/gen/Folder.ts create mode 100644 plugin-runtime-types/src/gen/GrpcConnection.ts create mode 100644 plugin-runtime-types/src/gen/GrpcEvent.ts create mode 100644 plugin-runtime-types/src/gen/GrpcEventType.ts create mode 100644 plugin-runtime-types/src/gen/GrpcMetadataEntry.ts create mode 100644 plugin-runtime-types/src/gen/GrpcRequest.ts create mode 100644 plugin-runtime-types/src/gen/HttpRequest.ts create mode 100644 plugin-runtime-types/src/gen/HttpRequestHeader.ts create mode 100644 plugin-runtime-types/src/gen/HttpResponse.ts create mode 100644 plugin-runtime-types/src/gen/HttpResponseHeader.ts create mode 100644 plugin-runtime-types/src/gen/HttpUrlParameter.ts create mode 100644 plugin-runtime-types/src/gen/KeyValue.ts create mode 100644 plugin-runtime-types/src/gen/Workspace.ts delete mode 100644 plugin-runtime-types/src/models/index.ts delete mode 100644 plugin-runtime-types/src/models/types.ts delete mode 100644 src-tauri/.sqlx/query-06aaf8f4a17566f1d25da2a60f0baf4b5fc28c3cf0c001a84e25edf9eab3c7e3.json delete mode 100644 src-tauri/.sqlx/query-07d1a1c7b4f3d9625a766e60fd57bb779b71dae30e5bbce34885a911a5a42428.json delete mode 100644 src-tauri/.sqlx/query-0fa6b56f8c996d14908a56928674b4b35af5fa36f63dc48b9b66ee6dfde78976.json delete mode 100644 src-tauri/.sqlx/query-12b265491d1ebba19e1ce8a660e458ffbcd8c0850aef16ba1f70e358623ac66a.json delete mode 100644 src-tauri/.sqlx/query-13cb883199e81966174e6fda9c252bf7213fe01b5346266c0a89dc0ac89eda64.json delete mode 100644 src-tauri/.sqlx/query-14930955e8a914e292dfbebfce2ea43cc41c1d517386ed816c16d436bf626bf3.json delete mode 100644 src-tauri/.sqlx/query-1821c2f60b9fa4514d58eb73b23e25ad683b80b9bd0c2944063190a0d0a19ee5.json delete mode 100644 src-tauri/.sqlx/query-18ada3bb42c29f1940ab2e61961d79cdd69210f3dc2076aedcadeba8e34dcb6e.json delete mode 100644 src-tauri/.sqlx/query-2c181a4dc13efc52fe6a5a68291c5678a9624020df4ea744e78396f6926d5c88.json delete mode 100644 src-tauri/.sqlx/query-2c9658a639c5e4994ae9c8ec30bd4e40a1945d640962991f879928619950ef62.json delete mode 100644 src-tauri/.sqlx/query-3e8651cca7feecc208a676dfd24c7d8775040d5287c16890056dcb474674edfb.json delete mode 100644 src-tauri/.sqlx/query-42bc0ded60b44dab19daf6d8fc7df83d83af5d88ea0b84514fdc877a668c27cd.json delete mode 100644 src-tauri/.sqlx/query-448a1d1f1866ab42c0f81fcf8eb2930bf21dfdd43ca4831bc1a198cf45ac3732.json delete mode 100644 src-tauri/.sqlx/query-558e72df3c6f2635c6b3d52a199f9a5f7a3d82b379ff9af36645dcfb92548fdd.json delete mode 100644 src-tauri/.sqlx/query-573db23160de025e5c72efb90be7fff5e3ec4619b962d149fdd4d618fe02c680.json delete mode 100644 src-tauri/.sqlx/query-5765e9565a8b89c5bc2d72197e0e4a1093739e9abba69f6fe5527d453fab4db8.json delete mode 100644 src-tauri/.sqlx/query-5af82cd333895d3d7d67a92f37b0feb338f615b88aea2bd09cb5809008c645a3.json delete mode 100644 src-tauri/.sqlx/query-5f2f40062abbe93e23b38876319cf16d4d2b3f8d0be32ffe7848528c725e1429.json delete mode 100644 src-tauri/.sqlx/query-612efa9ac45723dc604a88f5e7e288b4055fec4ba7d9102131bd255c037fa021.json delete mode 100644 src-tauri/.sqlx/query-66deed028199c78ed15ea2f837907887c2a2cb564d1d076dd4ebf0ecbc82e098.json delete mode 100644 src-tauri/.sqlx/query-6b5edf45a6799cd7f87c23a3c7f818ad110d58c601f694a619d9345ae9e8e11d.json delete mode 100644 src-tauri/.sqlx/query-84be2b954870ab181738656ecd4d03fca2ff21012947014c79626abfce8e999b.json delete mode 100644 src-tauri/.sqlx/query-8dfbae65ddec905ea3734448cc9f7029b6c78de227c6fa3a85d75d0a7f21e0e9.json delete mode 100644 src-tauri/.sqlx/query-9238f94c688d91f42627e5b73c627c514bab4039ab5edadc79b77dfdfd63b208.json delete mode 100644 src-tauri/.sqlx/query-92d8f003a8f7df692345f2d2fd2504c9222645976e3433e32e190f4ee4bf100d.json delete mode 100644 src-tauri/.sqlx/query-93aea3881dffb70a82325263740a0bb6477e78f27991ce7456b394e84383acb6.json delete mode 100644 src-tauri/.sqlx/query-9ba3f783238b77637ffded4171b2fbb5e5ad0be952a0d832448d65cc5f0effc1.json delete mode 100644 src-tauri/.sqlx/query-a690a04cd1ebe8c3dbfd0cd98ae4ef093a1696d7b7ecaf694d12e5fafd62b685.json delete mode 100644 src-tauri/.sqlx/query-ac1b4ffbd98b67f0a1a74e3525387d679dd6f44c561d55c7bbea747053e53671.json delete mode 100644 src-tauri/.sqlx/query-ac38621cd947c3be9ca0d8ea73325fe35c3866d16f6482fc32c23762f112dc83.json delete mode 100644 src-tauri/.sqlx/query-ae98a7b35a5cb80a4bcd04faa22545deac2a5e9bfb814b60191f16b98ed49796.json delete mode 100644 src-tauri/.sqlx/query-aeb0712785a9964d516dc8939bc54aa8206ad852e608b362d014b67a0f21b0ed.json delete mode 100644 src-tauri/.sqlx/query-b3fae40a793a6724dd2286a9ca4bc0a9c000a631ee0d751a9dc4f3e76de3d57c.json delete mode 100644 src-tauri/.sqlx/query-b98609f65dd3a6bbd1ea8dc8bed2840a6d5d13fec1bbc0aa61ca4f60de98a09c.json delete mode 100644 src-tauri/.sqlx/query-ba2b34a77723f24f86e4c3c45274dbfec6ca130e16e592f948844c037bdc0593.json delete mode 100644 src-tauri/.sqlx/query-d4b64c466624eb75e0f5bd201ebfb6a73d25eb7c9e09cb9690afdb7fef5fca8b.json delete mode 100644 src-tauri/.sqlx/query-d5e087caa163a0c7bfbbadf07eccb80105501cf5baab706aa6792dfe90af8fc9.json delete mode 100644 src-tauri/.sqlx/query-d80c09497771e3641022e73ec6c6a87e73a551f88a948a5445d754922b82b50b.json delete mode 100644 src-tauri/.sqlx/query-daa61066517df649e7c80a8ce407839ad502e8e5e43aa8c02e049865acbbae75.json delete mode 100644 src-tauri/.sqlx/query-e1cdba43bd938772631263966a9bee263923c387f4864917f36a04043bec4857.json delete mode 100644 src-tauri/.sqlx/query-e61c0dddb3e86d271cb9399faa4e4443342796cb72bdd43a821fae2994ae8e2f.json delete mode 100644 src-tauri/.sqlx/query-e7124f5570076bfd65985744f48d8e12cf29d6d243fffdd62ade2ab70c7bddda.json delete mode 100644 src-tauri/.sqlx/query-f5f20f3b37d932617499a0da50997edad59e4f5998b15c50ed6eae2e97064068.json delete mode 100644 src-tauri/.sqlx/query-fe0652396bc30d926cf99083651c1cbd668bcf00ebe1a5f36616700c84972b39.json delete mode 100644 src-tauri/src/deno_ops.rs create mode 100644 src-tauri/src/export_resources.rs delete mode 100644 src-tauri/src/models.rs create mode 100644 src-tauri/yaak_models/Cargo.toml create mode 100644 src-tauri/yaak_models/src/lib.rs create mode 100644 src-tauri/yaak_models/src/models.rs create mode 100644 src-tauri/yaak_models/src/queries.rs rename src-tauri/{tauri-plugin-plugin-runtime => yaak_plugin_runtime}/Cargo.toml (81%) rename src-tauri/{tauri-plugin-plugin-runtime => yaak_plugin_runtime}/build.rs (100%) rename src-tauri/{tauri-plugin-plugin-runtime => yaak_plugin_runtime}/src/lib.rs (96%) rename src-tauri/{tauri-plugin-plugin-runtime => yaak_plugin_runtime}/src/manager.rs (100%) rename src-tauri/{tauri-plugin-plugin-runtime => yaak_plugin_runtime}/src/nodejs.rs (96%) create mode 100644 src-web/lib/gen/Cookie.ts create mode 100644 src-web/lib/gen/CookieDomain.ts create mode 100644 src-web/lib/gen/CookieExpires.ts create mode 100644 src-web/lib/gen/CookieJar.ts create mode 100644 src-web/lib/gen/Settings.ts create mode 100644 src-web/modules.d.ts diff --git a/package-lock.json b/package-lock.json index 79d577f9..183b2662 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,13 +20,13 @@ "@react-hook/resize-observer": "^1.2.6", "@tailwindcss/container-queries": "^0.1.0", "@tanstack/react-query": "^5.45.1", - "@tauri-apps/api": "^2.0.0-beta.15", - "@tauri-apps/plugin-clipboard-manager": "^2.1.0-beta.5", - "@tauri-apps/plugin-dialog": "^2.0.0-beta.7", - "@tauri-apps/plugin-fs": "^2.0.0-beta.7", - "@tauri-apps/plugin-os": "^2.0.0-beta.7", - "@tauri-apps/plugin-shell": "^2.0.0-beta.8", - "@yaakapp/api": "^0.1.0-beta.1", + "@tauri-apps/api": "^2.0.0-rc.0", + "@tauri-apps/plugin-clipboard-manager": "^2.0.0-rc.0", + "@tauri-apps/plugin-dialog": "^2.0.0-rc.0", + "@tauri-apps/plugin-fs": "^2.0.0-rc.0", + "@tauri-apps/plugin-os": "^2.0.0-rc.0", + "@tauri-apps/plugin-shell": "^2.0.0-rc.0", + "@yaakapp/api": "^0.1.0-beta.8", "buffer": "^6.0.3", "classnames": "^2.3.2", "cm6-graphql": "^0.0.9", @@ -57,7 +57,7 @@ "devDependencies": { "@tailwindcss/nesting": "^0.0.0-insiders.565cd3e", "@tanstack/react-query-devtools": "^5.45.1", - "@tauri-apps/cli": "^2.0.0-beta.22", + "@tauri-apps/cli": "^2.0.0-rc.1", "@types/node": "^18.7.10", "@types/papaparse": "^5.3.7", "@types/parse-color": "^1.0.1", @@ -2343,9 +2343,9 @@ } }, "node_modules/@tauri-apps/api": { - "version": "2.0.0-beta.15", - "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0-beta.15.tgz", - "integrity": "sha512-H9w6iISmR+NvH4XuyCZB4zDN10tf9RFt6i/9JHEjaRhAowdAaJ+oiXq/3kedizNClHMtbTQ5j0oqDVPkZDAI8g==", + "version": "2.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0-rc.0.tgz", + "integrity": "sha512-v454Qs3REHc3Za59U+/eSmBsdmF+3NE5+76+lFDaitVqN4ZglDHENDaMARYKGJVZuxiSkzyqG0SeG7lLQjVkPA==", "engines": { "node": ">= 18.18", "npm": ">= 6.6.0", @@ -2357,9 +2357,9 @@ } }, "node_modules/@tauri-apps/cli": { - "version": "2.0.0-beta.22", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.0.0-beta.22.tgz", - "integrity": "sha512-OAuiDdSRKxNmr/dseQKKMoZZxIhQ6aAxmXJctGYJxCnkd62tQ8xeq87roVXGNS5Qkuv7WpySAyR0ntiMjvNLUA==", + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.0.0-rc.1.tgz", + "integrity": "sha512-9AzVrUMdb6EZ/Lwtdqt03XqqG6d/3gTJPOw2E9zmCHprJWEwqEp4JIVHYYfrqkkZyKclD3m5ggXwfYwclcYLdw==", "dev": true, "bin": { "tauri": "tauri.js" @@ -2372,22 +2372,22 @@ "url": "https://opencollective.com/tauri" }, "optionalDependencies": { - "@tauri-apps/cli-darwin-arm64": "2.0.0-beta.22", - "@tauri-apps/cli-darwin-x64": "2.0.0-beta.22", - "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-beta.22", - "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-beta.22", - "@tauri-apps/cli-linux-arm64-musl": "2.0.0-beta.22", - "@tauri-apps/cli-linux-x64-gnu": "2.0.0-beta.22", - "@tauri-apps/cli-linux-x64-musl": "2.0.0-beta.22", - "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-beta.22", - "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-beta.22", - "@tauri-apps/cli-win32-x64-msvc": "2.0.0-beta.22" + "@tauri-apps/cli-darwin-arm64": "2.0.0-rc.1", + "@tauri-apps/cli-darwin-x64": "2.0.0-rc.1", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-rc.1", + "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-rc.1", + "@tauri-apps/cli-linux-arm64-musl": "2.0.0-rc.1", + "@tauri-apps/cli-linux-x64-gnu": "2.0.0-rc.1", + "@tauri-apps/cli-linux-x64-musl": "2.0.0-rc.1", + "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-rc.1", + "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-rc.1", + "@tauri-apps/cli-win32-x64-msvc": "2.0.0-rc.1" } }, "node_modules/@tauri-apps/cli-darwin-arm64": { - "version": "2.0.0-beta.22", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.22.tgz", - "integrity": "sha512-Ofhythvg1Ks2IM87WUYNtgFzm21aU1Zn+8QP81lJy9Y7ZGMxP8FYfqeHz6GIWKI+CYf6I77HA8LHkT9pyE5PYg==", + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-rc.1.tgz", + "integrity": "sha512-dJxyAi4P9fOkklBZXuwUVnHgdM/20fgM4zYdfejQfju5+q9GUqnMbrrIUqlJbQGf8EnrIdSWnieO8wU8GOwT0g==", "cpu": [ "arm64" ], @@ -2401,9 +2401,9 @@ } }, "node_modules/@tauri-apps/cli-darwin-x64": { - "version": "2.0.0-beta.22", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.22.tgz", - "integrity": "sha512-/lWIixo7WgmMUqcxlPT7Ojlkl6qbVlNDwUZ+9DtTpoWnaaBxv/YpSe1k62vDWEC7l0apFY+Fz7cRONN2wglFyQ==", + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-rc.1.tgz", + "integrity": "sha512-dwrqLzNIFk8a1Vf2YI8axHm7uvLfo4M4TSWCw2ZkgeSGWWK6Y6CYVZbBEjOEGIOf+GFAa9rVOSZRuMwpiufNng==", "cpu": [ "x64" ], @@ -2417,9 +2417,9 @@ } }, "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { - "version": "2.0.0-beta.22", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.22.tgz", - "integrity": "sha512-9nJCSStoxu4BKaKVJhu/uBJ8IsIofwAdsX0TWFxqo0obaZbeQSEpPhVsCy+uk3u/28dF+qyUtMCYawO2Uljnag==", + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-rc.1.tgz", + "integrity": "sha512-jvMF4UNc3Jr/xHnw+4NNsWfk8WrcFrQVImAtKlCev9QepqfBmDh+FgXTvfysoBCSxEBS626TvYms3OhI0LOO4A==", "cpu": [ "arm" ], @@ -2433,9 +2433,9 @@ } }, "node_modules/@tauri-apps/cli-linux-arm64-gnu": { - "version": "2.0.0-beta.22", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.22.tgz", - "integrity": "sha512-TF9q9zHFBx9LaG2fJJC+BcpIokOmX1UIniBapndvx3dJmdDiK4F6w2QYKDkrBQVzDzcIducmdo2zNBv17O9tFQ==", + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-rc.1.tgz", + "integrity": "sha512-TGmadGW8BjTq864AYrv/u+vTnAodnOuzv1VCUOV23O8st35GZG6V47jwNsSjQjhrcO1XzmJiRAtrcVKuTZ/xUA==", "cpu": [ "arm64" ], @@ -2449,9 +2449,9 @@ } }, "node_modules/@tauri-apps/cli-linux-arm64-musl": { - "version": "2.0.0-beta.22", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.22.tgz", - "integrity": "sha512-ak/RdmaV7sATQmNOxlpHVlbKlrdquH7WH8nOv82X+iK+1HgAOGGqLqBUMzzhkGqo9SHQ9zJ6A2yOo7Z6TJXMmQ==", + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-rc.1.tgz", + "integrity": "sha512-+SJsRTW0PvvD7awEn+tIPJ3s12s6RpKXdOib2mztoKocasrGRfz+EFZuXc42Iwk3xROsrQkiw2UAmcNLkW5NwA==", "cpu": [ "arm64" ], @@ -2465,9 +2465,9 @@ } }, "node_modules/@tauri-apps/cli-linux-x64-gnu": { - "version": "2.0.0-beta.22", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.22.tgz", - "integrity": "sha512-9t+jQeMqBdXz51ikTh1PQFG/gs9PBzXmtMcIzUxE0juvH/ynjw0Vf+yZbNmwqVS9g7cj8XiBXoc6/N41SZE2cA==", + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-rc.1.tgz", + "integrity": "sha512-vjPrj2btS97IOp6cU42IrkI49SQZDSg8TPqwOwFqyQeAotCT1i0F38pLZWe1gLyPUowO8XdaaBdwYg6IRDKcZg==", "cpu": [ "x64" ], @@ -2481,9 +2481,9 @@ } }, "node_modules/@tauri-apps/cli-linux-x64-musl": { - "version": "2.0.0-beta.22", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.22.tgz", - "integrity": "sha512-PemcztfHG3HAuuo7HcnhfDrtN9NT7kueyNg8ipxJNPMa+s4K7kfieViyEiMW5pTr2F5WG/UuBSNcuwY+DVCcPA==", + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-rc.1.tgz", + "integrity": "sha512-MrE68/u6rMrkM1uM/DR1MNnMXiYebhSPGqqxshJ12SmFdk3yQ/Z73Wzvk8xv78eOExh4lTtEXI22YwaBCf9AEg==", "cpu": [ "x64" ], @@ -2497,9 +2497,9 @@ } }, "node_modules/@tauri-apps/cli-win32-arm64-msvc": { - "version": "2.0.0-beta.22", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.22.tgz", - "integrity": "sha512-EgKoG/jGEtTzhOp7ISjMdQsfd8IOG/5yZhO9Z4L/u7oB9mprKAJohYs24+ZxJtq2bOz4f/ZIysZ19nbkpxUzrg==", + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-rc.1.tgz", + "integrity": "sha512-SLulbiUjg8BGf/zX+U1PGjB+JpsN2nLRGuW07BYwSDW3s3mp2aagLuOwaTaOPBrDzfIMRYq8KT54A4jfRjEZlg==", "cpu": [ "arm64" ], @@ -2513,9 +2513,9 @@ } }, "node_modules/@tauri-apps/cli-win32-ia32-msvc": { - "version": "2.0.0-beta.22", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.22.tgz", - "integrity": "sha512-67OrM2m4FB3KujPbjd/i+9lqcLDO3/ixqL1GMc3BoHhcjF+7QY08OxqWeitdsP/8ihnMIIdir2xEjNUKc6Zelw==", + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-rc.1.tgz", + "integrity": "sha512-rz85riTjcWdZlgTku6HcBx625Otdc0/NwDjRXgdXakL1ybw7E+G5YlLZNcQX25u17RKUAWX/2/VZ1pSz945Ovw==", "cpu": [ "ia32" ], @@ -2529,9 +2529,9 @@ } }, "node_modules/@tauri-apps/cli-win32-x64-msvc": { - "version": "2.0.0-beta.22", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.22.tgz", - "integrity": "sha512-BsO5xMUxliTZTImXnOC73sKT2U9VUeqR8AtklSObBcAg5LaZKpYOdF2pZzU6rIMAZwzROTAT1hYsr4r/nx2UZg==", + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-rc.1.tgz", + "integrity": "sha512-aRO70dDbn4w3CbALMG+b7g460xmbSTuUiGmRh0r/MNVeoZk/YbqluBUyhXdWGxJb8OVubw/4RlczKYcPmJceMw==", "cpu": [ "x64" ], @@ -2545,43 +2545,43 @@ } }, "node_modules/@tauri-apps/plugin-clipboard-manager": { - "version": "2.1.0-beta.5", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-clipboard-manager/-/plugin-clipboard-manager-2.1.0-beta.5.tgz", - "integrity": "sha512-7YQEXRHXn5dIr/YcE7RtkoAhc6XwpqI7Qz0I3FcHn5vMbVvQ5OxKnGqEa8ZGRud6R3G9pNdnEKglLXLgUXK8tA==", + "version": "2.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-clipboard-manager/-/plugin-clipboard-manager-2.0.0-rc.0.tgz", + "integrity": "sha512-2fS3wbRQEtorkk3Np2msJUeKCXRqLQ9sSo2FzlFdUPYNzThsu43uWCF55McGLAfltNOvXQIcQLUBf05jbBL/5w==", "dependencies": { - "@tauri-apps/api": "2.0.0-beta.15" + "@tauri-apps/api": "^2.0.0-rc.0" } }, "node_modules/@tauri-apps/plugin-dialog": { - "version": "2.0.0-beta.7", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-beta.7.tgz", - "integrity": "sha512-myywwpsKbquDDzl5zaOmmLLv5O8EJ/GgHDAoVSPwO97R4iWzkDvj3HFF91tNh7i25Tu/bP6jYPAdZA1NCRxxtg==", + "version": "2.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-rc.0.tgz", + "integrity": "sha512-DPOXYe8SQ6Radk/67EOdaomlxL7oF99JO/ZUaPp1IBEs3Wro7lhlz63CfdKIBfKIZTLJLzP1R7/EiPL/GTA3Bg==", "dependencies": { - "@tauri-apps/api": "2.0.0-beta.15" + "@tauri-apps/api": "^2.0.0-rc.0" } }, "node_modules/@tauri-apps/plugin-fs": { - "version": "2.0.0-beta.7", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-fs/-/plugin-fs-2.0.0-beta.7.tgz", - "integrity": "sha512-hsZyhzvy+xtRfbrKI2rmU1ZfmgbSs7Zu/6a12MFlJKVzqXmUwJvggcjYdm1cEFdLbnOOsszENXbwMnkzmxtirA==", + "version": "2.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-fs/-/plugin-fs-2.0.0-rc.0.tgz", + "integrity": "sha512-74VCXEZlzTJ+Jv1V3KrV0qIHhSePpE/ljsF78rcEuvSfyTxLtt/Sb5CIUmVhFlKTRFOH9dX50T4dTZ3qFLyRnA==", "dependencies": { - "@tauri-apps/api": "2.0.0-beta.15" + "@tauri-apps/api": "^2.0.0-rc.0" } }, "node_modules/@tauri-apps/plugin-os": { - "version": "2.0.0-beta.7", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-os/-/plugin-os-2.0.0-beta.7.tgz", - "integrity": "sha512-CHo09ecxUU0NFkAqctXeQzdaXw02EXulqcaZnbjrBfRJ2ulmGq7zaUCsHihfcqWcdnmNwmP9Wh/gyznMc1JF9Q==", + "version": "2.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-os/-/plugin-os-2.0.0-rc.0.tgz", + "integrity": "sha512-OWAl8mooKnGykSD4iog8WRqcnOSx0gGmTJBlEExHdFeIuOHg0Ezvd+WiVLhT9LBg7go3ibNWRWpe/ZG7YEp4Vw==", "dependencies": { - "@tauri-apps/api": "2.0.0-beta.15" + "@tauri-apps/api": "^2.0.0-rc.0" } }, "node_modules/@tauri-apps/plugin-shell": { - "version": "2.0.0-beta.8", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.0.0-beta.8.tgz", - "integrity": "sha512-rFXI6MvsCdSGbuKbDu/NaOePREb9YTVTdeugHdvvljnKWW3dvmThBb2h/8Hxj+Z7Cd8MUoRxPeJWUZbPbJ2Imw==", + "version": "2.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.0.0-rc.0.tgz", + "integrity": "sha512-bhUcQcrqZoK8H1DFXapr5r1Z75oh6Kd5Tltz97XpZFLREEqp+KhN2Fvyh8r/fKAyenYsTYUIsDsyGdjdueuF9g==", "dependencies": { - "@tauri-apps/api": "2.0.0-beta.15" + "@tauri-apps/api": "^2.0.0-rc.0" } }, "node_modules/@types/babel__core": { @@ -2981,9 +2981,9 @@ "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==" }, "node_modules/@yaakapp/api": { - "version": "0.1.0-beta.1", - "resolved": "https://registry.npmjs.org/@yaakapp/api/-/api-0.1.0-beta.1.tgz", - "integrity": "sha512-govGMJy57nQq1k1LsGzaqahHXS0Uj5cinIxKJYRUyoasVUbShA6oE759J22lri+J3sF6KbfDC1rkE/kvKb2acw==", + "version": "0.1.0-beta.8", + "resolved": "https://registry.npmjs.org/@yaakapp/api/-/api-0.1.0-beta.8.tgz", + "integrity": "sha512-kR3c179QBlq/h29R/DWGJq7crAt9FZOFuhapdCYVFR1FsNGLP3+3PfyLc6rTj/SrqbH1lkIR4c2DmZKPE6yPPA==", "dependencies": { "@types/node": "^22.0.0" } diff --git a/package.json b/package.json index 5d3ae24d..a9c15c5f 100644 --- a/package.json +++ b/package.json @@ -35,13 +35,13 @@ "@react-hook/resize-observer": "^1.2.6", "@tailwindcss/container-queries": "^0.1.0", "@tanstack/react-query": "^5.45.1", - "@tauri-apps/api": "^2.0.0-beta.15", - "@tauri-apps/plugin-clipboard-manager": "^2.1.0-beta.5", - "@tauri-apps/plugin-dialog": "^2.0.0-beta.7", - "@tauri-apps/plugin-fs": "^2.0.0-beta.7", - "@tauri-apps/plugin-os": "^2.0.0-beta.7", - "@tauri-apps/plugin-shell": "^2.0.0-beta.8", - "@yaakapp/api": "^0.1.0-beta.1", + "@tauri-apps/api": "^2.0.0-rc.0", + "@tauri-apps/plugin-clipboard-manager": "^2.0.0-rc.0", + "@tauri-apps/plugin-dialog": "^2.0.0-rc.0", + "@tauri-apps/plugin-fs": "^2.0.0-rc.0", + "@tauri-apps/plugin-os": "^2.0.0-rc.0", + "@tauri-apps/plugin-shell": "^2.0.0-rc.0", + "@yaakapp/api": "^0.1.0-beta.8", "buffer": "^6.0.3", "classnames": "^2.3.2", "cm6-graphql": "^0.0.9", @@ -72,7 +72,7 @@ "devDependencies": { "@tailwindcss/nesting": "^0.0.0-insiders.565cd3e", "@tanstack/react-query-devtools": "^5.45.1", - "@tauri-apps/cli": "^2.0.0-beta.22", + "@tauri-apps/cli": "^2.0.0-rc.1", "@types/node": "^18.7.10", "@types/papaparse": "^5.3.7", "@types/parse-color": "^1.0.1", diff --git a/plugin-runtime-types/package-lock.json b/plugin-runtime-types/package-lock.json index 1ef3d1b5..63983cd2 100644 --- a/plugin-runtime-types/package-lock.json +++ b/plugin-runtime-types/package-lock.json @@ -1,14 +1,16 @@ { "name": "@yaakapp/api", - "version": "0.0.1", + "version": "0.1.0-beta.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@yaakapp/api", - "version": "0.0.1", + "version": "0.1.0-beta.4", + "dependencies": { + "@types/node": "^22.0.0" + }, "devDependencies": { - "@types/node": "^22.0.0", "typescript": "^5.5.4" } }, @@ -16,7 +18,6 @@ "version": "22.0.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz", "integrity": "sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==", - "dev": true, "dependencies": { "undici-types": "~6.11.1" } @@ -37,8 +38,7 @@ "node_modules/undici-types": { "version": "6.11.1", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", - "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", - "dev": true + "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==" } } } diff --git a/plugin-runtime-types/package.json b/plugin-runtime-types/package.json index 8d30049f..f8f82cb0 100644 --- a/plugin-runtime-types/package.json +++ b/plugin-runtime-types/package.json @@ -1,6 +1,6 @@ { "name": "@yaakapp/api", - "version": "0.0.5", + "version": "0.1.0-beta.8", "main": "lib/index.js", "typings": "./lib/index.d.ts", "files": [ @@ -8,7 +8,7 @@ ], "scripts": { "build": "tsc", - "prepublish": "npm run build" + "prepublishOnly": "npm run build" }, "dependencies": { "@types/node": "^22.0.0" diff --git a/plugin-runtime-types/src/gen/Environment.ts b/plugin-runtime-types/src/gen/Environment.ts new file mode 100644 index 00000000..900e596e --- /dev/null +++ b/plugin-runtime-types/src/gen/Environment.ts @@ -0,0 +1,4 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { EnvironmentVariable } from "./EnvironmentVariable"; + +export type Environment = { id: string, workspaceId: string, model: "environment", createdAt: string, updatedAt: string, name: string, variables: Array, }; diff --git a/plugin-runtime-types/src/gen/EnvironmentVariable.ts b/plugin-runtime-types/src/gen/EnvironmentVariable.ts new file mode 100644 index 00000000..987f115c --- /dev/null +++ b/plugin-runtime-types/src/gen/EnvironmentVariable.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type EnvironmentVariable = { enabled?: boolean, name: string, value: string, }; diff --git a/plugin-runtime-types/src/gen/Folder.ts b/plugin-runtime-types/src/gen/Folder.ts new file mode 100644 index 00000000..859475cf --- /dev/null +++ b/plugin-runtime-types/src/gen/Folder.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type Folder = { createdAt: string, updatedAt: string, id: string, workspaceId: string, folderId: string | null, model: "folder", name: string, sortPriority: number, }; diff --git a/plugin-runtime-types/src/gen/GrpcConnection.ts b/plugin-runtime-types/src/gen/GrpcConnection.ts new file mode 100644 index 00000000..595b5d00 --- /dev/null +++ b/plugin-runtime-types/src/gen/GrpcConnection.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type GrpcConnection = { id: string, model: "grpc_connection", workspaceId: string, requestId: string, createdAt: string, updatedAt: string, service: string, method: string, elapsed: number, status: number, url: string, error: string | null, trailers: { [key: string]: string }, }; diff --git a/plugin-runtime-types/src/gen/GrpcEvent.ts b/plugin-runtime-types/src/gen/GrpcEvent.ts new file mode 100644 index 00000000..67028185 --- /dev/null +++ b/plugin-runtime-types/src/gen/GrpcEvent.ts @@ -0,0 +1,4 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { GrpcEventType } from "./GrpcEventType"; + +export type GrpcEvent = { id: string, model: "grpc_event", workspaceId: string, requestId: string, connectionId: string, createdAt: string, content: string, eventType: GrpcEventType, metadata: { [key: string]: string }, status: number | null, error: string | null, }; diff --git a/plugin-runtime-types/src/gen/GrpcEventType.ts b/plugin-runtime-types/src/gen/GrpcEventType.ts new file mode 100644 index 00000000..00d8db9b --- /dev/null +++ b/plugin-runtime-types/src/gen/GrpcEventType.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type GrpcEventType = "info" | "error" | "client_message" | "server_message" | "connection_start" | "connection_end"; diff --git a/plugin-runtime-types/src/gen/GrpcMetadataEntry.ts b/plugin-runtime-types/src/gen/GrpcMetadataEntry.ts new file mode 100644 index 00000000..04deaff0 --- /dev/null +++ b/plugin-runtime-types/src/gen/GrpcMetadataEntry.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type GrpcMetadataEntry = { enabled?: boolean, name: string, value: string, }; diff --git a/plugin-runtime-types/src/gen/GrpcRequest.ts b/plugin-runtime-types/src/gen/GrpcRequest.ts new file mode 100644 index 00000000..cbe23c7e --- /dev/null +++ b/plugin-runtime-types/src/gen/GrpcRequest.ts @@ -0,0 +1,4 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { GrpcMetadataEntry } from "./GrpcMetadataEntry"; + +export type GrpcRequest = { id: string, model: "grpc_request", workspaceId: string, createdAt: string, updatedAt: string, folderId: string | null, name: string, sortPriority: number, url: string, service: string | null, method: string | null, message: string, authenticationType: string | null, authentication: Record, metadata: Array, }; diff --git a/plugin-runtime-types/src/gen/HttpRequest.ts b/plugin-runtime-types/src/gen/HttpRequest.ts new file mode 100644 index 00000000..0412dfdb --- /dev/null +++ b/plugin-runtime-types/src/gen/HttpRequest.ts @@ -0,0 +1,5 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { HttpRequestHeader } from "./HttpRequestHeader"; +import type { HttpUrlParameter } from "./HttpUrlParameter"; + +export type HttpRequest = { createdAt: string, updatedAt: string, id: string, workspaceId: string, folderId: string | null, model: "http_request", sortPriority: number, name: string, url: string, urlParameters: Array, method: string, body: Record, bodyType: string | null, authentication: Record, authenticationType: string | null, headers: Array, }; diff --git a/plugin-runtime-types/src/gen/HttpRequestHeader.ts b/plugin-runtime-types/src/gen/HttpRequestHeader.ts new file mode 100644 index 00000000..f62074a4 --- /dev/null +++ b/plugin-runtime-types/src/gen/HttpRequestHeader.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type HttpRequestHeader = { enabled?: boolean, name: string, value: string, }; diff --git a/plugin-runtime-types/src/gen/HttpResponse.ts b/plugin-runtime-types/src/gen/HttpResponse.ts new file mode 100644 index 00000000..60602fdd --- /dev/null +++ b/plugin-runtime-types/src/gen/HttpResponse.ts @@ -0,0 +1,4 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { HttpResponseHeader } from "./HttpResponseHeader"; + +export type HttpResponse = { id: string, model: "http_response", workspaceId: string, requestId: string, createdAt: string, updatedAt: string, error: string | null, url: string, contentLength: number | null, version: string | null, elapsed: number, elapsedHeaders: number, remoteAddr: string | null, status: number, statusReason: string | null, bodyPath: string | null, headers: Array, }; diff --git a/plugin-runtime-types/src/gen/HttpResponseHeader.ts b/plugin-runtime-types/src/gen/HttpResponseHeader.ts new file mode 100644 index 00000000..55b3f979 --- /dev/null +++ b/plugin-runtime-types/src/gen/HttpResponseHeader.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type HttpResponseHeader = { name: string, value: string, }; diff --git a/plugin-runtime-types/src/gen/HttpUrlParameter.ts b/plugin-runtime-types/src/gen/HttpUrlParameter.ts new file mode 100644 index 00000000..fbdde3f5 --- /dev/null +++ b/plugin-runtime-types/src/gen/HttpUrlParameter.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type HttpUrlParameter = { enabled?: boolean, name: string, value: string, }; diff --git a/plugin-runtime-types/src/gen/KeyValue.ts b/plugin-runtime-types/src/gen/KeyValue.ts new file mode 100644 index 00000000..301df19c --- /dev/null +++ b/plugin-runtime-types/src/gen/KeyValue.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type KeyValue = { model: "key_value", createdAt: string, updatedAt: string, namespace: string, key: string, value: string, }; diff --git a/plugin-runtime-types/src/gen/Workspace.ts b/plugin-runtime-types/src/gen/Workspace.ts new file mode 100644 index 00000000..d35cce88 --- /dev/null +++ b/plugin-runtime-types/src/gen/Workspace.ts @@ -0,0 +1,4 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { EnvironmentVariable } from "./EnvironmentVariable"; + +export type Workspace = { id: string, model: "workspace", createdAt: string, updatedAt: string, name: string, description: string, variables: Array, settingValidateCertificates: boolean, settingFollowRedirects: boolean, settingRequestTimeout: number, }; diff --git a/plugin-runtime-types/src/index.ts b/plugin-runtime-types/src/index.ts index 7f2551d3..e329c582 100644 --- a/plugin-runtime-types/src/index.ts +++ b/plugin-runtime-types/src/index.ts @@ -1,3 +1,18 @@ -export type * from './models'; export type * from './plugins'; export type * from './themes'; + +export * from './gen/Environment'; +export * from './gen/EnvironmentVariable'; +export * from './gen/Folder'; +export * from './gen/GrpcConnection'; +export * from './gen/GrpcEvent'; +export * from './gen/GrpcEventType'; +export * from './gen/GrpcMetadataEntry'; +export * from './gen/GrpcRequest'; +export * from './gen/HttpRequest'; +export * from './gen/HttpRequestHeader'; +export * from './gen/HttpResponse'; +export * from './gen/HttpResponseHeader'; +export * from './gen/HttpUrlParameter'; +export * from './gen/KeyValue'; +export * from './gen/Workspace'; diff --git a/plugin-runtime-types/src/models/index.ts b/plugin-runtime-types/src/models/index.ts deleted file mode 100644 index fcb073fe..00000000 --- a/plugin-runtime-types/src/models/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './types'; diff --git a/plugin-runtime-types/src/models/types.ts b/plugin-runtime-types/src/models/types.ts deleted file mode 100644 index e5c8f0ed..00000000 --- a/plugin-runtime-types/src/models/types.ts +++ /dev/null @@ -1,135 +0,0 @@ -export interface BaseModel { - readonly model: string; - readonly id: string; - readonly createdAt: string; - readonly updatedAt: string; -} - -export interface Workspace extends BaseModel { - readonly model: 'workspace'; - name: string; - description: string; - variables: EnvironmentVariable[]; - settingValidateCertificates: boolean; - settingFollowRedirects: boolean; - settingRequestTimeout: number; -} - -export interface EnvironmentVariable { - name: string; - value: string; - enabled?: boolean; -} - -export interface Folder extends BaseModel { - readonly workspaceId: string; - readonly model: 'folder'; - folderId: string | null; - sortPriority: number; - name: string; -} - -export interface Environment extends BaseModel { - readonly workspaceId: string; - readonly model: 'environment'; - name: string; - variables: EnvironmentVariable[]; -} - -export interface HttpHeader { - name: string; - value: string; - enabled?: boolean; -} - -export interface HttpUrlParameter { - name: string; - value: string; - enabled?: boolean; -} - -export interface GrpcMetadataEntry { - name: string; - value: string; - enabled?: boolean; -} - -export interface GrpcRequest extends BaseModel { - readonly workspaceId: string; - readonly model: 'grpc_request'; - folderId: string | null; - sortPriority: number; - name: string; - url: string; - service: string | null; - method: string | null; - message: string; - authentication: Record; - authenticationType: string | null; - metadata: GrpcMetadataEntry[]; -} - -export interface GrpcEvent extends BaseModel { - readonly workspaceId: string; - readonly requestId: string; - readonly connectionId: string; - readonly model: 'grpc_event'; - content: string; - status: number | null; - error: string | null; - eventType: - | 'info' - | 'error' - | 'client_message' - | 'server_message' - | 'connection_start' - | 'connection_end'; - metadata: Record; -} - -export interface GrpcConnection extends BaseModel { - readonly workspaceId: string; - readonly requestId: string; - readonly model: 'grpc_connection'; - service: string; - method: string; - elapsed: number; - elapsedConnection: number; - status: number; - url: string; - error: string | null; - trailers: Record; -} - -export interface HttpRequest extends BaseModel { - readonly workspaceId: string; - readonly model: 'http_request'; - folderId: string | null; - sortPriority: number; - name: string; - url: string; - urlParameters: HttpUrlParameter[]; - body: Record; - bodyType: string | null; - authentication: Record; - authenticationType: string | null; - method: string; - headers: HttpHeader[]; -} - -export interface HttpResponse extends BaseModel { - readonly workspaceId: string; - readonly model: 'http_response'; - readonly requestId: string; - readonly bodyPath: string | null; - readonly contentLength: number | null; - readonly error: string; - readonly status: number; - readonly elapsed: number; - readonly elapsedHeaders: number; - readonly statusReason: string; - readonly version: string; - readonly remoteAddr: string; - readonly url: string; - readonly headers: HttpHeader[]; -} diff --git a/plugin-runtime-types/src/plugins/context.ts b/plugin-runtime-types/src/plugins/context.ts index 5f5f9f76..0bed6e71 100644 --- a/plugin-runtime-types/src/plugins/context.ts +++ b/plugin-runtime-types/src/plugins/context.ts @@ -1,4 +1,5 @@ -import { HttpRequest, HttpResponse } from '../models'; +import { HttpRequest } from '../gen/HttpRequest'; +import { HttpResponse } from '../gen/HttpResponse'; export type YaakContext = { metadata: { diff --git a/plugin-runtime-types/src/plugins/httpRequestAction.ts b/plugin-runtime-types/src/plugins/httpRequestAction.ts index 547396e9..297c5188 100644 --- a/plugin-runtime-types/src/plugins/httpRequestAction.ts +++ b/plugin-runtime-types/src/plugins/httpRequestAction.ts @@ -1,4 +1,4 @@ -import { HttpRequest } from '../models'; +import { HttpRequest } from '../gen/HttpRequest'; import { YaakContext } from './context'; export type HttpRequestActionPlugin = { diff --git a/plugin-runtime-types/src/plugins/import.ts b/plugin-runtime-types/src/plugins/import.ts index 51873486..c5e3c70d 100644 --- a/plugin-runtime-types/src/plugins/import.ts +++ b/plugin-runtime-types/src/plugins/import.ts @@ -1,5 +1,8 @@ +import { Environment } from '../gen/Environment'; +import { Folder } from '../gen/Folder'; +import { HttpRequest } from '../gen/HttpRequest'; +import { Workspace } from '../gen/Workspace'; import { AtLeast } from '../helpers'; -import { Environment, Folder, HttpRequest, Workspace } from '../models'; import { YaakContext } from './context'; export type ImportPluginResponse = null | { diff --git a/src-tauri/.sqlx/query-06aaf8f4a17566f1d25da2a60f0baf4b5fc28c3cf0c001a84e25edf9eab3c7e3.json b/src-tauri/.sqlx/query-06aaf8f4a17566f1d25da2a60f0baf4b5fc28c3cf0c001a84e25edf9eab3c7e3.json deleted file mode 100644 index 3b465bd9..00000000 --- a/src-tauri/.sqlx/query-06aaf8f4a17566f1d25da2a60f0baf4b5fc28c3cf0c001a84e25edf9eab3c7e3.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT model, created_at, updated_at, namespace, key, value\n FROM key_values\n WHERE namespace = ? AND key = ?\n ", - "describe": { - "columns": [ - { - "name": "model", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 1, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 2, - "type_info": "Datetime" - }, - { - "name": "namespace", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "key", - "ordinal": 4, - "type_info": "Text" - }, - { - "name": "value", - "ordinal": 5, - "type_info": "Text" - } - ], - "parameters": { - "Right": 2 - }, - "nullable": [ - false, - false, - false, - false, - false, - false - ] - }, - "hash": "06aaf8f4a17566f1d25da2a60f0baf4b5fc28c3cf0c001a84e25edf9eab3c7e3" -} diff --git a/src-tauri/.sqlx/query-07d1a1c7b4f3d9625a766e60fd57bb779b71dae30e5bbce34885a911a5a42428.json b/src-tauri/.sqlx/query-07d1a1c7b4f3d9625a766e60fd57bb779b71dae30e5bbce34885a911a5a42428.json deleted file mode 100644 index 846d4f46..00000000 --- a/src-tauri/.sqlx/query-07d1a1c7b4f3d9625a766e60fd57bb779b71dae30e5bbce34885a911a5a42428.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n DELETE FROM http_responses\n WHERE id = ?\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 1 - }, - "nullable": [] - }, - "hash": "07d1a1c7b4f3d9625a766e60fd57bb779b71dae30e5bbce34885a911a5a42428" -} diff --git a/src-tauri/.sqlx/query-0fa6b56f8c996d14908a56928674b4b35af5fa36f63dc48b9b66ee6dfde78976.json b/src-tauri/.sqlx/query-0fa6b56f8c996d14908a56928674b4b35af5fa36f63dc48b9b66ee6dfde78976.json deleted file mode 100644 index d8d1de39..00000000 --- a/src-tauri/.sqlx/query-0fa6b56f8c996d14908a56928674b4b35af5fa36f63dc48b9b66ee6dfde78976.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, request_id, updated_at, created_at, url, status,\n status_reason, content_length, body_path, elapsed, elapsed_headers, error,\n version, remote_addr,\n headers AS \"headers!: sqlx::types::Json>\"\n FROM http_responses\n WHERE id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "request_id", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "updated_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "created_at", - "ordinal": 5, - "type_info": "Datetime" - }, - { - "name": "url", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "status", - "ordinal": 7, - "type_info": "Int64" - }, - { - "name": "status_reason", - "ordinal": 8, - "type_info": "Text" - }, - { - "name": "content_length", - "ordinal": 9, - "type_info": "Int64" - }, - { - "name": "body_path", - "ordinal": 10, - "type_info": "Text" - }, - { - "name": "elapsed", - "ordinal": 11, - "type_info": "Int64" - }, - { - "name": "elapsed_headers", - "ordinal": 12, - "type_info": "Int64" - }, - { - "name": "error", - "ordinal": 13, - "type_info": "Text" - }, - { - "name": "version", - "ordinal": 14, - "type_info": "Text" - }, - { - "name": "remote_addr", - "ordinal": 15, - "type_info": "Text" - }, - { - "name": "headers!: sqlx::types::Json>", - "ordinal": 16, - "type_info": "Text" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - true, - true, - true, - false, - false, - true, - true, - true, - false - ] - }, - "hash": "0fa6b56f8c996d14908a56928674b4b35af5fa36f63dc48b9b66ee6dfde78976" -} diff --git a/src-tauri/.sqlx/query-12b265491d1ebba19e1ce8a660e458ffbcd8c0850aef16ba1f70e358623ac66a.json b/src-tauri/.sqlx/query-12b265491d1ebba19e1ce8a660e458ffbcd8c0850aef16ba1f70e358623ac66a.json deleted file mode 100644 index 007998de..00000000 --- a/src-tauri/.sqlx/query-12b265491d1ebba19e1ce8a660e458ffbcd8c0850aef16ba1f70e358623ac66a.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n INSERT INTO workspaces (\n id, name, description, variables, setting_request_timeout,\n setting_follow_redirects, setting_validate_certificates\n )\n VALUES (?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (id) DO UPDATE SET\n updated_at = CURRENT_TIMESTAMP,\n name = excluded.name,\n description = excluded.description,\n variables = excluded.variables,\n setting_request_timeout = excluded.setting_request_timeout,\n setting_follow_redirects = excluded.setting_follow_redirects,\n setting_validate_certificates = excluded.setting_validate_certificates\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 7 - }, - "nullable": [] - }, - "hash": "12b265491d1ebba19e1ce8a660e458ffbcd8c0850aef16ba1f70e358623ac66a" -} diff --git a/src-tauri/.sqlx/query-13cb883199e81966174e6fda9c252bf7213fe01b5346266c0a89dc0ac89eda64.json b/src-tauri/.sqlx/query-13cb883199e81966174e6fda9c252bf7213fe01b5346266c0a89dc0ac89eda64.json deleted file mode 100644 index e14799c2..00000000 --- a/src-tauri/.sqlx/query-13cb883199e81966174e6fda9c252bf7213fe01b5346266c0a89dc0ac89eda64.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n INSERT INTO environments (\n id, workspace_id, name, variables\n )\n VALUES (?, ?, ?, ?)\n ON CONFLICT (id) DO UPDATE SET\n updated_at = CURRENT_TIMESTAMP,\n name = excluded.name,\n variables = excluded.variables\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 4 - }, - "nullable": [] - }, - "hash": "13cb883199e81966174e6fda9c252bf7213fe01b5346266c0a89dc0ac89eda64" -} diff --git a/src-tauri/.sqlx/query-14930955e8a914e292dfbebfce2ea43cc41c1d517386ed816c16d436bf626bf3.json b/src-tauri/.sqlx/query-14930955e8a914e292dfbebfce2ea43cc41c1d517386ed816c16d436bf626bf3.json deleted file mode 100644 index 3258060d..00000000 --- a/src-tauri/.sqlx/query-14930955e8a914e292dfbebfce2ea43cc41c1d517386ed816c16d436bf626bf3.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n INSERT INTO grpc_events (\n id, workspace_id, request_id, connection_id, content, event_type, metadata,\n status, error\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (id) DO UPDATE SET\n updated_at = CURRENT_TIMESTAMP,\n content = excluded.content,\n event_type = excluded.event_type,\n metadata = excluded.metadata,\n status = excluded.status,\n error = excluded.error\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 9 - }, - "nullable": [] - }, - "hash": "14930955e8a914e292dfbebfce2ea43cc41c1d517386ed816c16d436bf626bf3" -} diff --git a/src-tauri/.sqlx/query-1821c2f60b9fa4514d58eb73b23e25ad683b80b9bd0c2944063190a0d0a19ee5.json b/src-tauri/.sqlx/query-1821c2f60b9fa4514d58eb73b23e25ad683b80b9bd0c2944063190a0d0a19ee5.json deleted file mode 100644 index 2c549a1a..00000000 --- a/src-tauri/.sqlx/query-1821c2f60b9fa4514d58eb73b23e25ad683b80b9bd0c2944063190a0d0a19ee5.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, folder_id, created_at, updated_at, name, sort_priority,\n url, service, method, message, authentication_type,\n authentication AS \"authentication!: Json>\",\n metadata AS \"metadata!: sqlx::types::Json>\"\n FROM grpc_requests\n WHERE workspace_id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "folder_id", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 5, - "type_info": "Datetime" - }, - { - "name": "name", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "sort_priority", - "ordinal": 7, - "type_info": "Float" - }, - { - "name": "url", - "ordinal": 8, - "type_info": "Text" - }, - { - "name": "service", - "ordinal": 9, - "type_info": "Text" - }, - { - "name": "method", - "ordinal": 10, - "type_info": "Text" - }, - { - "name": "message", - "ordinal": 11, - "type_info": "Text" - }, - { - "name": "authentication_type", - "ordinal": 12, - "type_info": "Text" - }, - { - "name": "authentication!: Json>", - "ordinal": 13, - "type_info": "Text" - }, - { - "name": "metadata!: sqlx::types::Json>", - "ordinal": 14, - "type_info": "Text" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false, - true, - true, - false, - true, - false, - false - ] - }, - "hash": "1821c2f60b9fa4514d58eb73b23e25ad683b80b9bd0c2944063190a0d0a19ee5" -} diff --git a/src-tauri/.sqlx/query-18ada3bb42c29f1940ab2e61961d79cdd69210f3dc2076aedcadeba8e34dcb6e.json b/src-tauri/.sqlx/query-18ada3bb42c29f1940ab2e61961d79cdd69210f3dc2076aedcadeba8e34dcb6e.json deleted file mode 100644 index 6f205863..00000000 --- a/src-tauri/.sqlx/query-18ada3bb42c29f1940ab2e61961d79cdd69210f3dc2076aedcadeba8e34dcb6e.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, request_id, connection_id, created_at, content, status, error,\n event_type AS \"event_type!: GrpcEventType\",\n metadata AS \"metadata!: sqlx::types::Json>\"\n FROM grpc_events\n WHERE connection_id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "request_id", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "connection_id", - "ordinal": 4, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 5, - "type_info": "Datetime" - }, - { - "name": "content", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "status", - "ordinal": 7, - "type_info": "Int64" - }, - { - "name": "error", - "ordinal": 8, - "type_info": "Text" - }, - { - "name": "event_type!: GrpcEventType", - "ordinal": 9, - "type_info": "Text" - }, - { - "name": "metadata!: sqlx::types::Json>", - "ordinal": 10, - "type_info": "Text" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - true, - true, - false, - false - ] - }, - "hash": "18ada3bb42c29f1940ab2e61961d79cdd69210f3dc2076aedcadeba8e34dcb6e" -} diff --git a/src-tauri/.sqlx/query-2c181a4dc13efc52fe6a5a68291c5678a9624020df4ea744e78396f6926d5c88.json b/src-tauri/.sqlx/query-2c181a4dc13efc52fe6a5a68291c5678a9624020df4ea744e78396f6926d5c88.json deleted file mode 100644 index 74518eb2..00000000 --- a/src-tauri/.sqlx/query-2c181a4dc13efc52fe6a5a68291c5678a9624020df4ea744e78396f6926d5c88.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n INSERT INTO settings (id)\n VALUES ('default')\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 0 - }, - "nullable": [] - }, - "hash": "2c181a4dc13efc52fe6a5a68291c5678a9624020df4ea744e78396f6926d5c88" -} diff --git a/src-tauri/.sqlx/query-2c9658a639c5e4994ae9c8ec30bd4e40a1945d640962991f879928619950ef62.json b/src-tauri/.sqlx/query-2c9658a639c5e4994ae9c8ec30bd4e40a1945d640962991f879928619950ef62.json deleted file mode 100644 index 9f666e11..00000000 --- a/src-tauri/.sqlx/query-2c9658a639c5e4994ae9c8ec30bd4e40a1945d640962991f879928619950ef62.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n INSERT INTO http_responses (\n id, request_id, workspace_id, elapsed, elapsed_headers, url, status, status_reason,\n content_length, body_path, headers, version, remote_addr\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 13 - }, - "nullable": [] - }, - "hash": "2c9658a639c5e4994ae9c8ec30bd4e40a1945d640962991f879928619950ef62" -} diff --git a/src-tauri/.sqlx/query-3e8651cca7feecc208a676dfd24c7d8775040d5287c16890056dcb474674edfb.json b/src-tauri/.sqlx/query-3e8651cca7feecc208a676dfd24c7d8775040d5287c16890056dcb474674edfb.json deleted file mode 100644 index 8b2e3954..00000000 --- a/src-tauri/.sqlx/query-3e8651cca7feecc208a676dfd24c7d8775040d5287c16890056dcb474674edfb.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, request_id, created_at, updated_at, service,\n method, elapsed, status, error, url,\n trailers AS \"trailers!: sqlx::types::Json>\"\n FROM grpc_connections\n WHERE request_id = ?\n ORDER BY created_at DESC\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "request_id", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 5, - "type_info": "Datetime" - }, - { - "name": "service", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "method", - "ordinal": 7, - "type_info": "Text" - }, - { - "name": "elapsed", - "ordinal": 8, - "type_info": "Int64" - }, - { - "name": "status", - "ordinal": 9, - "type_info": "Int64" - }, - { - "name": "error", - "ordinal": 10, - "type_info": "Text" - }, - { - "name": "url", - "ordinal": 11, - "type_info": "Text" - }, - { - "name": "trailers!: sqlx::types::Json>", - "ordinal": 12, - "type_info": "Text" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - true, - false, - false - ] - }, - "hash": "3e8651cca7feecc208a676dfd24c7d8775040d5287c16890056dcb474674edfb" -} diff --git a/src-tauri/.sqlx/query-42bc0ded60b44dab19daf6d8fc7df83d83af5d88ea0b84514fdc877a668c27cd.json b/src-tauri/.sqlx/query-42bc0ded60b44dab19daf6d8fc7df83d83af5d88ea0b84514fdc877a668c27cd.json deleted file mode 100644 index 4276a419..00000000 --- a/src-tauri/.sqlx/query-42bc0ded60b44dab19daf6d8fc7df83d83af5d88ea0b84514fdc877a668c27cd.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n DELETE FROM grpc_connections\n WHERE id = ?\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 1 - }, - "nullable": [] - }, - "hash": "42bc0ded60b44dab19daf6d8fc7df83d83af5d88ea0b84514fdc877a668c27cd" -} diff --git a/src-tauri/.sqlx/query-448a1d1f1866ab42c0f81fcf8eb2930bf21dfdd43ca4831bc1a198cf45ac3732.json b/src-tauri/.sqlx/query-448a1d1f1866ab42c0f81fcf8eb2930bf21dfdd43ca4831bc1a198cf45ac3732.json deleted file mode 100644 index 79175a7f..00000000 --- a/src-tauri/.sqlx/query-448a1d1f1866ab42c0f81fcf8eb2930bf21dfdd43ca4831bc1a198cf45ac3732.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n DELETE FROM http_requests\n WHERE id = ?\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 1 - }, - "nullable": [] - }, - "hash": "448a1d1f1866ab42c0f81fcf8eb2930bf21dfdd43ca4831bc1a198cf45ac3732" -} diff --git a/src-tauri/.sqlx/query-558e72df3c6f2635c6b3d52a199f9a5f7a3d82b379ff9af36645dcfb92548fdd.json b/src-tauri/.sqlx/query-558e72df3c6f2635c6b3d52a199f9a5f7a3d82b379ff9af36645dcfb92548fdd.json deleted file mode 100644 index 4e9ece1c..00000000 --- a/src-tauri/.sqlx/query-558e72df3c6f2635c6b3d52a199f9a5f7a3d82b379ff9af36645dcfb92548fdd.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, created_at, updated_at, folder_id, name, sort_priority\n FROM folders\n WHERE workspace_id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 3, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "folder_id", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "name", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "sort_priority", - "ordinal": 7, - "type_info": "Float" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - true, - false, - false - ] - }, - "hash": "558e72df3c6f2635c6b3d52a199f9a5f7a3d82b379ff9af36645dcfb92548fdd" -} diff --git a/src-tauri/.sqlx/query-573db23160de025e5c72efb90be7fff5e3ec4619b962d149fdd4d618fe02c680.json b/src-tauri/.sqlx/query-573db23160de025e5c72efb90be7fff5e3ec4619b962d149fdd4d618fe02c680.json deleted file mode 100644 index 17d6f5d0..00000000 --- a/src-tauri/.sqlx/query-573db23160de025e5c72efb90be7fff5e3ec4619b962d149fdd4d618fe02c680.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, folder_id, created_at, updated_at, name, url, method,\n body_type, authentication_type, sort_priority,\n url_parameters AS \"url_parameters!: sqlx::types::Json>\",\n body AS \"body!: Json>\",\n authentication AS \"authentication!: Json>\",\n headers AS \"headers!: sqlx::types::Json>\"\n FROM http_requests\n WHERE id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "folder_id", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 5, - "type_info": "Datetime" - }, - { - "name": "name", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "url", - "ordinal": 7, - "type_info": "Text" - }, - { - "name": "method", - "ordinal": 8, - "type_info": "Text" - }, - { - "name": "body_type", - "ordinal": 9, - "type_info": "Text" - }, - { - "name": "authentication_type", - "ordinal": 10, - "type_info": "Text" - }, - { - "name": "sort_priority", - "ordinal": 11, - "type_info": "Float" - }, - { - "name": "url_parameters!: sqlx::types::Json>", - "ordinal": 12, - "type_info": "Text" - }, - { - "name": "body!: Json>", - "ordinal": 13, - "type_info": "Text" - }, - { - "name": "authentication!: Json>", - "ordinal": 14, - "type_info": "Text" - }, - { - "name": "headers!: sqlx::types::Json>", - "ordinal": 15, - "type_info": "Text" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false, - true, - true, - false, - false, - false, - false, - false - ] - }, - "hash": "573db23160de025e5c72efb90be7fff5e3ec4619b962d149fdd4d618fe02c680" -} diff --git a/src-tauri/.sqlx/query-5765e9565a8b89c5bc2d72197e0e4a1093739e9abba69f6fe5527d453fab4db8.json b/src-tauri/.sqlx/query-5765e9565a8b89c5bc2d72197e0e4a1093739e9abba69f6fe5527d453fab4db8.json deleted file mode 100644 index 13966583..00000000 --- a/src-tauri/.sqlx/query-5765e9565a8b89c5bc2d72197e0e4a1093739e9abba69f6fe5527d453fab4db8.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, created_at, updated_at, name,\n variables AS \"variables!: sqlx::types::Json>\"\n FROM environments\n WHERE id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 3, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "name", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "variables!: sqlx::types::Json>", - "ordinal": 6, - "type_info": "Null" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false - ] - }, - "hash": "5765e9565a8b89c5bc2d72197e0e4a1093739e9abba69f6fe5527d453fab4db8" -} diff --git a/src-tauri/.sqlx/query-5af82cd333895d3d7d67a92f37b0feb338f615b88aea2bd09cb5809008c645a3.json b/src-tauri/.sqlx/query-5af82cd333895d3d7d67a92f37b0feb338f615b88aea2bd09cb5809008c645a3.json deleted file mode 100644 index f82deaec..00000000 --- a/src-tauri/.sqlx/query-5af82cd333895d3d7d67a92f37b0feb338f615b88aea2bd09cb5809008c645a3.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n INSERT INTO grpc_requests (\n id, name, workspace_id, folder_id, sort_priority, url, service, method, message,\n authentication_type, authentication, metadata\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (id) DO UPDATE SET\n updated_at = CURRENT_TIMESTAMP,\n workspace_id = excluded.workspace_id,\n name = excluded.name,\n folder_id = excluded.folder_id,\n sort_priority = excluded.sort_priority,\n url = excluded.url,\n service = excluded.service,\n method = excluded.method,\n message = excluded.message,\n authentication_type = excluded.authentication_type,\n authentication = excluded.authentication,\n metadata = excluded.metadata\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 12 - }, - "nullable": [] - }, - "hash": "5af82cd333895d3d7d67a92f37b0feb338f615b88aea2bd09cb5809008c645a3" -} diff --git a/src-tauri/.sqlx/query-5f2f40062abbe93e23b38876319cf16d4d2b3f8d0be32ffe7848528c725e1429.json b/src-tauri/.sqlx/query-5f2f40062abbe93e23b38876319cf16d4d2b3f8d0be32ffe7848528c725e1429.json deleted file mode 100644 index 7d7cb86d..00000000 --- a/src-tauri/.sqlx/query-5f2f40062abbe93e23b38876319cf16d4d2b3f8d0be32ffe7848528c725e1429.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n INSERT INTO http_requests (\n id, workspace_id, folder_id, name, url, url_parameters, method, body, body_type,\n authentication, authentication_type, headers, sort_priority\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (id) DO UPDATE SET\n updated_at = CURRENT_TIMESTAMP,\n workspace_id = excluded.workspace_id,\n name = excluded.name,\n folder_id = excluded.folder_id,\n method = excluded.method,\n headers = excluded.headers,\n body = excluded.body,\n body_type = excluded.body_type,\n authentication = excluded.authentication,\n authentication_type = excluded.authentication_type,\n url = excluded.url,\n url_parameters = excluded.url_parameters,\n sort_priority = excluded.sort_priority\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 13 - }, - "nullable": [] - }, - "hash": "5f2f40062abbe93e23b38876319cf16d4d2b3f8d0be32ffe7848528c725e1429" -} diff --git a/src-tauri/.sqlx/query-612efa9ac45723dc604a88f5e7e288b4055fec4ba7d9102131bd255c037fa021.json b/src-tauri/.sqlx/query-612efa9ac45723dc604a88f5e7e288b4055fec4ba7d9102131bd255c037fa021.json deleted file mode 100644 index aa1534a3..00000000 --- a/src-tauri/.sqlx/query-612efa9ac45723dc604a88f5e7e288b4055fec4ba7d9102131bd255c037fa021.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, created_at, updated_at, workspace_id, name,\n cookies AS \"cookies!: sqlx::types::Json>\"\n FROM cookie_jars WHERE workspace_id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 2, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 3, - "type_info": "Datetime" - }, - { - "name": "workspace_id", - "ordinal": 4, - "type_info": "Text" - }, - { - "name": "name", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "cookies!: sqlx::types::Json>", - "ordinal": 6, - "type_info": "Text" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false - ] - }, - "hash": "612efa9ac45723dc604a88f5e7e288b4055fec4ba7d9102131bd255c037fa021" -} diff --git a/src-tauri/.sqlx/query-66deed028199c78ed15ea2f837907887c2a2cb564d1d076dd4ebf0ecbc82e098.json b/src-tauri/.sqlx/query-66deed028199c78ed15ea2f837907887c2a2cb564d1d076dd4ebf0ecbc82e098.json deleted file mode 100644 index a06e03b3..00000000 --- a/src-tauri/.sqlx/query-66deed028199c78ed15ea2f837907887c2a2cb564d1d076dd4ebf0ecbc82e098.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n INSERT INTO grpc_connections (\n id, workspace_id, request_id, service, method, elapsed,\n status, error, trailers, url\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT (id) DO UPDATE SET\n updated_at = CURRENT_TIMESTAMP,\n service = excluded.service,\n method = excluded.method,\n elapsed = excluded.elapsed,\n status = excluded.status,\n error = excluded.error,\n trailers = excluded.trailers,\n url = excluded.url\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 10 - }, - "nullable": [] - }, - "hash": "66deed028199c78ed15ea2f837907887c2a2cb564d1d076dd4ebf0ecbc82e098" -} diff --git a/src-tauri/.sqlx/query-6b5edf45a6799cd7f87c23a3c7f818ad110d58c601f694a619d9345ae9e8e11d.json b/src-tauri/.sqlx/query-6b5edf45a6799cd7f87c23a3c7f818ad110d58c601f694a619d9345ae9e8e11d.json deleted file mode 100644 index dcf32d4f..00000000 --- a/src-tauri/.sqlx/query-6b5edf45a6799cd7f87c23a3c7f818ad110d58c601f694a619d9345ae9e8e11d.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n UPDATE settings SET (\n theme, appearance, theme_dark, theme_light, update_channel,\n interface_font_size, interface_scale, editor_font_size, editor_soft_wrap,\n open_workspace_new_window\n ) = (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) WHERE id = 'default';\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 10 - }, - "nullable": [] - }, - "hash": "6b5edf45a6799cd7f87c23a3c7f818ad110d58c601f694a619d9345ae9e8e11d" -} diff --git a/src-tauri/.sqlx/query-84be2b954870ab181738656ecd4d03fca2ff21012947014c79626abfce8e999b.json b/src-tauri/.sqlx/query-84be2b954870ab181738656ecd4d03fca2ff21012947014c79626abfce8e999b.json deleted file mode 100644 index 7953188a..00000000 --- a/src-tauri/.sqlx/query-84be2b954870ab181738656ecd4d03fca2ff21012947014c79626abfce8e999b.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n DELETE FROM workspaces\n WHERE id = ?\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 1 - }, - "nullable": [] - }, - "hash": "84be2b954870ab181738656ecd4d03fca2ff21012947014c79626abfce8e999b" -} diff --git a/src-tauri/.sqlx/query-8dfbae65ddec905ea3734448cc9f7029b6c78de227c6fa3a85d75d0a7f21e0e9.json b/src-tauri/.sqlx/query-8dfbae65ddec905ea3734448cc9f7029b6c78de227c6fa3a85d75d0a7f21e0e9.json deleted file mode 100644 index b6db584b..00000000 --- a/src-tauri/.sqlx/query-8dfbae65ddec905ea3734448cc9f7029b6c78de227c6fa3a85d75d0a7f21e0e9.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, created_at, updated_at, name, description, setting_request_timeout,\n setting_follow_redirects, setting_validate_certificates,\n variables AS \"variables!: sqlx::types::Json>\"\n FROM workspaces\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 2, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 3, - "type_info": "Datetime" - }, - { - "name": "name", - "ordinal": 4, - "type_info": "Text" - }, - { - "name": "description", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "setting_request_timeout", - "ordinal": 6, - "type_info": "Int64" - }, - { - "name": "setting_follow_redirects", - "ordinal": 7, - "type_info": "Bool" - }, - { - "name": "setting_validate_certificates", - "ordinal": 8, - "type_info": "Bool" - }, - { - "name": "variables!: sqlx::types::Json>", - "ordinal": 9, - "type_info": "Text" - } - ], - "parameters": { - "Right": 0 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - }, - "hash": "8dfbae65ddec905ea3734448cc9f7029b6c78de227c6fa3a85d75d0a7f21e0e9" -} diff --git a/src-tauri/.sqlx/query-9238f94c688d91f42627e5b73c627c514bab4039ab5edadc79b77dfdfd63b208.json b/src-tauri/.sqlx/query-9238f94c688d91f42627e5b73c627c514bab4039ab5edadc79b77dfdfd63b208.json deleted file mode 100644 index ea8b6c1b..00000000 --- a/src-tauri/.sqlx/query-9238f94c688d91f42627e5b73c627c514bab4039ab5edadc79b77dfdfd63b208.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n INSERT INTO folders (\n id, workspace_id, folder_id, name, sort_priority\n )\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT (id) DO UPDATE SET\n updated_at = CURRENT_TIMESTAMP,\n name = excluded.name,\n folder_id = excluded.folder_id,\n sort_priority = excluded.sort_priority\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 5 - }, - "nullable": [] - }, - "hash": "9238f94c688d91f42627e5b73c627c514bab4039ab5edadc79b77dfdfd63b208" -} diff --git a/src-tauri/.sqlx/query-92d8f003a8f7df692345f2d2fd2504c9222645976e3433e32e190f4ee4bf100d.json b/src-tauri/.sqlx/query-92d8f003a8f7df692345f2d2fd2504c9222645976e3433e32e190f4ee4bf100d.json deleted file mode 100644 index f6ed8350..00000000 --- a/src-tauri/.sqlx/query-92d8f003a8f7df692345f2d2fd2504c9222645976e3433e32e190f4ee4bf100d.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, request_id, connection_id, created_at, content, status, error,\n event_type AS \"event_type!: GrpcEventType\",\n metadata AS \"metadata!: sqlx::types::Json>\"\n FROM grpc_events\n WHERE id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "request_id", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "connection_id", - "ordinal": 4, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 5, - "type_info": "Datetime" - }, - { - "name": "content", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "status", - "ordinal": 7, - "type_info": "Int64" - }, - { - "name": "error", - "ordinal": 8, - "type_info": "Text" - }, - { - "name": "event_type!: GrpcEventType", - "ordinal": 9, - "type_info": "Text" - }, - { - "name": "metadata!: sqlx::types::Json>", - "ordinal": 10, - "type_info": "Text" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - true, - true, - false, - false - ] - }, - "hash": "92d8f003a8f7df692345f2d2fd2504c9222645976e3433e32e190f4ee4bf100d" -} diff --git a/src-tauri/.sqlx/query-93aea3881dffb70a82325263740a0bb6477e78f27991ce7456b394e84383acb6.json b/src-tauri/.sqlx/query-93aea3881dffb70a82325263740a0bb6477e78f27991ce7456b394e84383acb6.json deleted file mode 100644 index 291362f4..00000000 --- a/src-tauri/.sqlx/query-93aea3881dffb70a82325263740a0bb6477e78f27991ce7456b394e84383acb6.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n DELETE FROM folders\n WHERE id = ?\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 1 - }, - "nullable": [] - }, - "hash": "93aea3881dffb70a82325263740a0bb6477e78f27991ce7456b394e84383acb6" -} diff --git a/src-tauri/.sqlx/query-9ba3f783238b77637ffded4171b2fbb5e5ad0be952a0d832448d65cc5f0effc1.json b/src-tauri/.sqlx/query-9ba3f783238b77637ffded4171b2fbb5e5ad0be952a0d832448d65cc5f0effc1.json deleted file mode 100644 index 0ef3ad69..00000000 --- a/src-tauri/.sqlx/query-9ba3f783238b77637ffded4171b2fbb5e5ad0be952a0d832448d65cc5f0effc1.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, created_at, updated_at, name, description, setting_request_timeout,\n setting_follow_redirects, setting_validate_certificates,\n variables AS \"variables!: sqlx::types::Json>\"\n FROM workspaces WHERE id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 2, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 3, - "type_info": "Datetime" - }, - { - "name": "name", - "ordinal": 4, - "type_info": "Text" - }, - { - "name": "description", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "setting_request_timeout", - "ordinal": 6, - "type_info": "Int64" - }, - { - "name": "setting_follow_redirects", - "ordinal": 7, - "type_info": "Bool" - }, - { - "name": "setting_validate_certificates", - "ordinal": 8, - "type_info": "Bool" - }, - { - "name": "variables!: sqlx::types::Json>", - "ordinal": 9, - "type_info": "Null" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false - ] - }, - "hash": "9ba3f783238b77637ffded4171b2fbb5e5ad0be952a0d832448d65cc5f0effc1" -} diff --git a/src-tauri/.sqlx/query-a690a04cd1ebe8c3dbfd0cd98ae4ef093a1696d7b7ecaf694d12e5fafd62b685.json b/src-tauri/.sqlx/query-a690a04cd1ebe8c3dbfd0cd98ae4ef093a1696d7b7ecaf694d12e5fafd62b685.json deleted file mode 100644 index 2ada8fc0..00000000 --- a/src-tauri/.sqlx/query-a690a04cd1ebe8c3dbfd0cd98ae4ef093a1696d7b7ecaf694d12e5fafd62b685.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n UPDATE grpc_connections\n SET (elapsed) = (-1)\n WHERE elapsed = 0;\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 0 - }, - "nullable": [] - }, - "hash": "a690a04cd1ebe8c3dbfd0cd98ae4ef093a1696d7b7ecaf694d12e5fafd62b685" -} diff --git a/src-tauri/.sqlx/query-ac1b4ffbd98b67f0a1a74e3525387d679dd6f44c561d55c7bbea747053e53671.json b/src-tauri/.sqlx/query-ac1b4ffbd98b67f0a1a74e3525387d679dd6f44c561d55c7bbea747053e53671.json deleted file mode 100644 index bb89b771..00000000 --- a/src-tauri/.sqlx/query-ac1b4ffbd98b67f0a1a74e3525387d679dd6f44c561d55c7bbea747053e53671.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n UPDATE http_responses\n SET (elapsed, status_reason) = (-1, 'Cancelled')\n WHERE elapsed = 0;\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 0 - }, - "nullable": [] - }, - "hash": "ac1b4ffbd98b67f0a1a74e3525387d679dd6f44c561d55c7bbea747053e53671" -} diff --git a/src-tauri/.sqlx/query-ac38621cd947c3be9ca0d8ea73325fe35c3866d16f6482fc32c23762f112dc83.json b/src-tauri/.sqlx/query-ac38621cd947c3be9ca0d8ea73325fe35c3866d16f6482fc32c23762f112dc83.json deleted file mode 100644 index 95b21958..00000000 --- a/src-tauri/.sqlx/query-ac38621cd947c3be9ca0d8ea73325fe35c3866d16f6482fc32c23762f112dc83.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, request_id, updated_at, created_at, url, status,\n status_reason, content_length, body_path, elapsed, elapsed_headers, error,\n version, remote_addr,\n headers AS \"headers!: sqlx::types::Json>\"\n FROM http_responses\n WHERE request_id = ?\n ORDER BY created_at DESC\n LIMIT ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "request_id", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "updated_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "created_at", - "ordinal": 5, - "type_info": "Datetime" - }, - { - "name": "url", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "status", - "ordinal": 7, - "type_info": "Int64" - }, - { - "name": "status_reason", - "ordinal": 8, - "type_info": "Text" - }, - { - "name": "content_length", - "ordinal": 9, - "type_info": "Int64" - }, - { - "name": "body_path", - "ordinal": 10, - "type_info": "Text" - }, - { - "name": "elapsed", - "ordinal": 11, - "type_info": "Int64" - }, - { - "name": "elapsed_headers", - "ordinal": 12, - "type_info": "Int64" - }, - { - "name": "error", - "ordinal": 13, - "type_info": "Text" - }, - { - "name": "version", - "ordinal": 14, - "type_info": "Text" - }, - { - "name": "remote_addr", - "ordinal": 15, - "type_info": "Text" - }, - { - "name": "headers!: sqlx::types::Json>", - "ordinal": 16, - "type_info": "Text" - } - ], - "parameters": { - "Right": 2 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - true, - true, - true, - false, - false, - true, - true, - true, - false - ] - }, - "hash": "ac38621cd947c3be9ca0d8ea73325fe35c3866d16f6482fc32c23762f112dc83" -} diff --git a/src-tauri/.sqlx/query-ae98a7b35a5cb80a4bcd04faa22545deac2a5e9bfb814b60191f16b98ed49796.json b/src-tauri/.sqlx/query-ae98a7b35a5cb80a4bcd04faa22545deac2a5e9bfb814b60191f16b98ed49796.json deleted file mode 100644 index 58aec4c3..00000000 --- a/src-tauri/.sqlx/query-ae98a7b35a5cb80a4bcd04faa22545deac2a5e9bfb814b60191f16b98ed49796.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, created_at, updated_at, folder_id, name, sort_priority\n FROM folders\n WHERE id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 3, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "folder_id", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "name", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "sort_priority", - "ordinal": 7, - "type_info": "Float" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - true, - false, - false - ] - }, - "hash": "ae98a7b35a5cb80a4bcd04faa22545deac2a5e9bfb814b60191f16b98ed49796" -} diff --git a/src-tauri/.sqlx/query-aeb0712785a9964d516dc8939bc54aa8206ad852e608b362d014b67a0f21b0ed.json b/src-tauri/.sqlx/query-aeb0712785a9964d516dc8939bc54aa8206ad852e608b362d014b67a0f21b0ed.json deleted file mode 100644 index 2236dfda..00000000 --- a/src-tauri/.sqlx/query-aeb0712785a9964d516dc8939bc54aa8206ad852e608b362d014b67a0f21b0ed.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n DELETE FROM environments\n WHERE id = ?\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 1 - }, - "nullable": [] - }, - "hash": "aeb0712785a9964d516dc8939bc54aa8206ad852e608b362d014b67a0f21b0ed" -} diff --git a/src-tauri/.sqlx/query-b3fae40a793a6724dd2286a9ca4bc0a9c000a631ee0d751a9dc4f3e76de3d57c.json b/src-tauri/.sqlx/query-b3fae40a793a6724dd2286a9ca4bc0a9c000a631ee0d751a9dc4f3e76de3d57c.json deleted file mode 100644 index c12ff6f4..00000000 --- a/src-tauri/.sqlx/query-b3fae40a793a6724dd2286a9ca4bc0a9c000a631ee0d751a9dc4f3e76de3d57c.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n INSERT INTO cookie_jars (\n id, workspace_id, name, cookies\n )\n VALUES (?, ?, ?, ?)\n ON CONFLICT (id) DO UPDATE SET\n updated_at = CURRENT_TIMESTAMP,\n name = excluded.name,\n cookies = excluded.cookies\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 4 - }, - "nullable": [] - }, - "hash": "b3fae40a793a6724dd2286a9ca4bc0a9c000a631ee0d751a9dc4f3e76de3d57c" -} diff --git a/src-tauri/.sqlx/query-b98609f65dd3a6bbd1ea8dc8bed2840a6d5d13fec1bbc0aa61ca4f60de98a09c.json b/src-tauri/.sqlx/query-b98609f65dd3a6bbd1ea8dc8bed2840a6d5d13fec1bbc0aa61ca4f60de98a09c.json deleted file mode 100644 index 95b8b28f..00000000 --- a/src-tauri/.sqlx/query-b98609f65dd3a6bbd1ea8dc8bed2840a6d5d13fec1bbc0aa61ca4f60de98a09c.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n DELETE FROM cookie_jars\n WHERE id = ?\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 1 - }, - "nullable": [] - }, - "hash": "b98609f65dd3a6bbd1ea8dc8bed2840a6d5d13fec1bbc0aa61ca4f60de98a09c" -} diff --git a/src-tauri/.sqlx/query-ba2b34a77723f24f86e4c3c45274dbfec6ca130e16e592f948844c037bdc0593.json b/src-tauri/.sqlx/query-ba2b34a77723f24f86e4c3c45274dbfec6ca130e16e592f948844c037bdc0593.json deleted file mode 100644 index 0c9dc27f..00000000 --- a/src-tauri/.sqlx/query-ba2b34a77723f24f86e4c3c45274dbfec6ca130e16e592f948844c037bdc0593.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT id, workspace_id, model, created_at, updated_at, name,\n variables AS \"variables!: sqlx::types::Json>\"\n FROM environments\n WHERE workspace_id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 3, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "name", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "variables!: sqlx::types::Json>", - "ordinal": 6, - "type_info": "Null" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false - ] - }, - "hash": "ba2b34a77723f24f86e4c3c45274dbfec6ca130e16e592f948844c037bdc0593" -} diff --git a/src-tauri/.sqlx/query-d4b64c466624eb75e0f5bd201ebfb6a73d25eb7c9e09cb9690afdb7fef5fca8b.json b/src-tauri/.sqlx/query-d4b64c466624eb75e0f5bd201ebfb6a73d25eb7c9e09cb9690afdb7fef5fca8b.json deleted file mode 100644 index 9bb6f1b1..00000000 --- a/src-tauri/.sqlx/query-d4b64c466624eb75e0f5bd201ebfb6a73d25eb7c9e09cb9690afdb7fef5fca8b.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, request_id, created_at, updated_at, service,\n method, elapsed, status, error, url,\n trailers AS \"trailers!: sqlx::types::Json>\"\n FROM grpc_connections\n WHERE id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "request_id", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 5, - "type_info": "Datetime" - }, - { - "name": "service", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "method", - "ordinal": 7, - "type_info": "Text" - }, - { - "name": "elapsed", - "ordinal": 8, - "type_info": "Int64" - }, - { - "name": "status", - "ordinal": 9, - "type_info": "Int64" - }, - { - "name": "error", - "ordinal": 10, - "type_info": "Text" - }, - { - "name": "url", - "ordinal": 11, - "type_info": "Text" - }, - { - "name": "trailers!: sqlx::types::Json>", - "ordinal": 12, - "type_info": "Text" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - true, - false, - false - ] - }, - "hash": "d4b64c466624eb75e0f5bd201ebfb6a73d25eb7c9e09cb9690afdb7fef5fca8b" -} diff --git a/src-tauri/.sqlx/query-d5e087caa163a0c7bfbbadf07eccb80105501cf5baab706aa6792dfe90af8fc9.json b/src-tauri/.sqlx/query-d5e087caa163a0c7bfbbadf07eccb80105501cf5baab706aa6792dfe90af8fc9.json deleted file mode 100644 index 7b1f8daf..00000000 --- a/src-tauri/.sqlx/query-d5e087caa163a0c7bfbbadf07eccb80105501cf5baab706aa6792dfe90af8fc9.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, request_id, updated_at, created_at, url, status,\n status_reason, content_length, body_path, elapsed, elapsed_headers, error,\n version, remote_addr,\n headers AS \"headers!: sqlx::types::Json>\"\n FROM http_responses\n WHERE workspace_id = ?\n ORDER BY created_at DESC\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "request_id", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "updated_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "created_at", - "ordinal": 5, - "type_info": "Datetime" - }, - { - "name": "url", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "status", - "ordinal": 7, - "type_info": "Int64" - }, - { - "name": "status_reason", - "ordinal": 8, - "type_info": "Text" - }, - { - "name": "content_length", - "ordinal": 9, - "type_info": "Int64" - }, - { - "name": "body_path", - "ordinal": 10, - "type_info": "Text" - }, - { - "name": "elapsed", - "ordinal": 11, - "type_info": "Int64" - }, - { - "name": "elapsed_headers", - "ordinal": 12, - "type_info": "Int64" - }, - { - "name": "error", - "ordinal": 13, - "type_info": "Text" - }, - { - "name": "version", - "ordinal": 14, - "type_info": "Text" - }, - { - "name": "remote_addr", - "ordinal": 15, - "type_info": "Text" - }, - { - "name": "headers!: sqlx::types::Json>", - "ordinal": 16, - "type_info": "Text" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - true, - true, - true, - false, - false, - true, - true, - true, - false - ] - }, - "hash": "d5e087caa163a0c7bfbbadf07eccb80105501cf5baab706aa6792dfe90af8fc9" -} diff --git a/src-tauri/.sqlx/query-d80c09497771e3641022e73ec6c6a87e73a551f88a948a5445d754922b82b50b.json b/src-tauri/.sqlx/query-d80c09497771e3641022e73ec6c6a87e73a551f88a948a5445d754922b82b50b.json deleted file mode 100644 index 6f7caf2e..00000000 --- a/src-tauri/.sqlx/query-d80c09497771e3641022e73ec6c6a87e73a551f88a948a5445d754922b82b50b.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n INSERT INTO key_values (namespace, key, value)\n VALUES (?, ?, ?) ON CONFLICT DO UPDATE SET\n updated_at = CURRENT_TIMESTAMP,\n value = excluded.value\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 3 - }, - "nullable": [] - }, - "hash": "d80c09497771e3641022e73ec6c6a87e73a551f88a948a5445d754922b82b50b" -} diff --git a/src-tauri/.sqlx/query-daa61066517df649e7c80a8ce407839ad502e8e5e43aa8c02e049865acbbae75.json b/src-tauri/.sqlx/query-daa61066517df649e7c80a8ce407839ad502e8e5e43aa8c02e049865acbbae75.json deleted file mode 100644 index ed194a49..00000000 --- a/src-tauri/.sqlx/query-daa61066517df649e7c80a8ce407839ad502e8e5e43aa8c02e049865acbbae75.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, created_at, updated_at, theme, appearance,\n theme_dark, theme_light, update_channel,\n interface_font_size, interface_scale, editor_font_size, editor_soft_wrap,\n open_workspace_new_window\n FROM settings\n WHERE id = 'default'\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 2, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 3, - "type_info": "Datetime" - }, - { - "name": "theme", - "ordinal": 4, - "type_info": "Text" - }, - { - "name": "appearance", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "theme_dark", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "theme_light", - "ordinal": 7, - "type_info": "Text" - }, - { - "name": "update_channel", - "ordinal": 8, - "type_info": "Text" - }, - { - "name": "interface_font_size", - "ordinal": 9, - "type_info": "Int64" - }, - { - "name": "interface_scale", - "ordinal": 10, - "type_info": "Int64" - }, - { - "name": "editor_font_size", - "ordinal": 11, - "type_info": "Int64" - }, - { - "name": "editor_soft_wrap", - "ordinal": 12, - "type_info": "Bool" - }, - { - "name": "open_workspace_new_window", - "ordinal": 13, - "type_info": "Bool" - } - ], - "parameters": { - "Right": 0 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - true - ] - }, - "hash": "daa61066517df649e7c80a8ce407839ad502e8e5e43aa8c02e049865acbbae75" -} diff --git a/src-tauri/.sqlx/query-e1cdba43bd938772631263966a9bee263923c387f4864917f36a04043bec4857.json b/src-tauri/.sqlx/query-e1cdba43bd938772631263966a9bee263923c387f4864917f36a04043bec4857.json deleted file mode 100644 index 6d970900..00000000 --- a/src-tauri/.sqlx/query-e1cdba43bd938772631263966a9bee263923c387f4864917f36a04043bec4857.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, folder_id, created_at, updated_at, name, sort_priority,\n url, service, method, message, authentication_type,\n authentication AS \"authentication!: Json>\",\n metadata AS \"metadata!: sqlx::types::Json>\"\n FROM grpc_requests\n WHERE id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "folder_id", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 5, - "type_info": "Datetime" - }, - { - "name": "name", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "sort_priority", - "ordinal": 7, - "type_info": "Float" - }, - { - "name": "url", - "ordinal": 8, - "type_info": "Text" - }, - { - "name": "service", - "ordinal": 9, - "type_info": "Text" - }, - { - "name": "method", - "ordinal": 10, - "type_info": "Text" - }, - { - "name": "message", - "ordinal": 11, - "type_info": "Text" - }, - { - "name": "authentication_type", - "ordinal": 12, - "type_info": "Text" - }, - { - "name": "authentication!: Json>", - "ordinal": 13, - "type_info": "Text" - }, - { - "name": "metadata!: sqlx::types::Json>", - "ordinal": 14, - "type_info": "Text" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false, - true, - true, - false, - true, - false, - false - ] - }, - "hash": "e1cdba43bd938772631263966a9bee263923c387f4864917f36a04043bec4857" -} diff --git a/src-tauri/.sqlx/query-e61c0dddb3e86d271cb9399faa4e4443342796cb72bdd43a821fae2994ae8e2f.json b/src-tauri/.sqlx/query-e61c0dddb3e86d271cb9399faa4e4443342796cb72bdd43a821fae2994ae8e2f.json deleted file mode 100644 index 25fe3a26..00000000 --- a/src-tauri/.sqlx/query-e61c0dddb3e86d271cb9399faa4e4443342796cb72bdd43a821fae2994ae8e2f.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, workspace_id, folder_id, created_at, updated_at, name, url,\n url_parameters AS \"url_parameters!: sqlx::types::Json>\",\n method, body_type, authentication_type, sort_priority,\n body AS \"body!: Json>\",\n authentication AS \"authentication!: Json>\",\n headers AS \"headers!: sqlx::types::Json>\"\n FROM http_requests\n WHERE workspace_id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "workspace_id", - "ordinal": 2, - "type_info": "Text" - }, - { - "name": "folder_id", - "ordinal": 3, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 4, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 5, - "type_info": "Datetime" - }, - { - "name": "name", - "ordinal": 6, - "type_info": "Text" - }, - { - "name": "url", - "ordinal": 7, - "type_info": "Text" - }, - { - "name": "url_parameters!: sqlx::types::Json>", - "ordinal": 8, - "type_info": "Text" - }, - { - "name": "method", - "ordinal": 9, - "type_info": "Text" - }, - { - "name": "body_type", - "ordinal": 10, - "type_info": "Text" - }, - { - "name": "authentication_type", - "ordinal": 11, - "type_info": "Text" - }, - { - "name": "sort_priority", - "ordinal": 12, - "type_info": "Float" - }, - { - "name": "body!: Json>", - "ordinal": 13, - "type_info": "Text" - }, - { - "name": "authentication!: Json>", - "ordinal": 14, - "type_info": "Text" - }, - { - "name": "headers!: sqlx::types::Json>", - "ordinal": 15, - "type_info": "Text" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - true, - false, - false, - false, - false, - false, - false, - true, - true, - false, - false, - false, - false - ] - }, - "hash": "e61c0dddb3e86d271cb9399faa4e4443342796cb72bdd43a821fae2994ae8e2f" -} diff --git a/src-tauri/.sqlx/query-e7124f5570076bfd65985744f48d8e12cf29d6d243fffdd62ade2ab70c7bddda.json b/src-tauri/.sqlx/query-e7124f5570076bfd65985744f48d8e12cf29d6d243fffdd62ade2ab70c7bddda.json deleted file mode 100644 index 3b49c691..00000000 --- a/src-tauri/.sqlx/query-e7124f5570076bfd65985744f48d8e12cf29d6d243fffdd62ade2ab70c7bddda.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n UPDATE http_responses SET (\n elapsed, elapsed_headers, url, status, status_reason, content_length, body_path,\n error, headers, version, remote_addr, updated_at\n ) = (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP) WHERE id = ?;\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 12 - }, - "nullable": [] - }, - "hash": "e7124f5570076bfd65985744f48d8e12cf29d6d243fffdd62ade2ab70c7bddda" -} diff --git a/src-tauri/.sqlx/query-f5f20f3b37d932617499a0da50997edad59e4f5998b15c50ed6eae2e97064068.json b/src-tauri/.sqlx/query-f5f20f3b37d932617499a0da50997edad59e4f5998b15c50ed6eae2e97064068.json deleted file mode 100644 index edc922c8..00000000 --- a/src-tauri/.sqlx/query-f5f20f3b37d932617499a0da50997edad59e4f5998b15c50ed6eae2e97064068.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n SELECT\n id, model, created_at, updated_at, workspace_id, name,\n cookies AS \"cookies!: sqlx::types::Json>\"\n FROM cookie_jars WHERE id = ?\n ", - "describe": { - "columns": [ - { - "name": "id", - "ordinal": 0, - "type_info": "Text" - }, - { - "name": "model", - "ordinal": 1, - "type_info": "Text" - }, - { - "name": "created_at", - "ordinal": 2, - "type_info": "Datetime" - }, - { - "name": "updated_at", - "ordinal": 3, - "type_info": "Datetime" - }, - { - "name": "workspace_id", - "ordinal": 4, - "type_info": "Text" - }, - { - "name": "name", - "ordinal": 5, - "type_info": "Text" - }, - { - "name": "cookies!: sqlx::types::Json>", - "ordinal": 6, - "type_info": "Text" - } - ], - "parameters": { - "Right": 1 - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false - ] - }, - "hash": "f5f20f3b37d932617499a0da50997edad59e4f5998b15c50ed6eae2e97064068" -} diff --git a/src-tauri/.sqlx/query-fe0652396bc30d926cf99083651c1cbd668bcf00ebe1a5f36616700c84972b39.json b/src-tauri/.sqlx/query-fe0652396bc30d926cf99083651c1cbd668bcf00ebe1a5f36616700c84972b39.json deleted file mode 100644 index a009d61a..00000000 --- a/src-tauri/.sqlx/query-fe0652396bc30d926cf99083651c1cbd668bcf00ebe1a5f36616700c84972b39.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "db_name": "SQLite", - "query": "\n DELETE FROM grpc_requests\n WHERE id = ?\n ", - "describe": { - "columns": [], - "parameters": { - "Right": 1 - }, - "nullable": [] - }, - "hash": "fe0652396bc30d926cf99083651c1cbd668bcf00ebe1a5f36616700c84972b39" -} diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 560bd7f4..6d19523d 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -35,7 +35,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom 0.2.15", "once_cell", "version_check 0.9.5", "zerocopy", @@ -165,7 +164,7 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" dependencies = [ - "event-listener 5.3.1", + "event-listener", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -222,7 +221,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 5.3.1", + "event-listener", "event-listener-strategy", "pin-project-lite", ] @@ -240,7 +239,7 @@ dependencies = [ "async-task", "blocking", "cfg-if", - "event-listener 5.3.1", + "event-listener", "futures-lite", "rustix", "tracing", @@ -661,9 +660,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.16.1" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" +checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" [[package]] name = "byteorder" @@ -679,9 +678,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.6.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" dependencies = [ "serde", ] @@ -755,9 +754,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +checksum = "26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc" [[package]] name = "cesu8" @@ -1113,14 +1112,37 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core 0.14.4", + "darling_macro 0.14.4", +] + [[package]] name = "darling" version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.10", + "darling_macro 0.20.10", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -1137,13 +1159,24 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core 0.14.4", + "quote", + "syn 1.0.109", +] + [[package]] name = "darling_macro" version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core", + "darling_core 0.20.10", "quote", "syn 2.0.72", ] @@ -1323,9 +1356,9 @@ dependencies = [ [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" @@ -1451,12 +1484,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - [[package]] name = "event-listener" version = "5.3.1" @@ -1474,7 +1501,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "event-listener 5.3.1", + "event-listener", "pin-project-lite", ] @@ -1494,6 +1521,18 @@ dependencies = [ "zune-inflate", ] +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + [[package]] name = "fastrand" version = "2.1.0" @@ -1549,9 +1588,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" dependencies = [ "crc32fast", "miniz_oxide", @@ -2101,7 +2140,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.2.6", + "indexmap 2.3.0", "slab", "tokio", "tokio-util", @@ -2120,7 +2159,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.2.6", + "indexmap 2.3.0", "slab", "tokio", "tokio-util", @@ -2158,9 +2197,9 @@ dependencies = [ [[package]] name = "hashlink" -version = "0.8.4" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" dependencies = [ "hashbrown 0.14.5", ] @@ -2170,9 +2209,6 @@ name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -dependencies = [ - "unicode-segmentation", -] [[package]] name = "heck" @@ -2565,9 +2601,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -2583,6 +2619,17 @@ dependencies = [ "cfb", ] +[[package]] +name = "inherent" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0122b7114117e64a63ac49f752a5ca4624d534c7b1c7de796ac196381cd2d947" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "instant" version = "0.1.13" @@ -2838,9 +2885,9 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" dependencies = [ "cc", "pkg-config", @@ -3492,12 +3539,12 @@ dependencies = [ [[package]] name = "os_pipe" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d73ba8daf8fac13b0501d1abeddcfe21ba7401ada61a819144b6c2a4f32209" +checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3603,7 +3650,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.2.6", + "indexmap 2.3.0", ] [[package]] @@ -3817,32 +3864,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ "base64 0.22.1", - "indexmap 2.2.6", + "indexmap 2.3.0", "quick-xml", "serde", "time", ] -[[package]] -name = "plugin_runtime" -version = "0.1.0" -dependencies = [ - "anyhow", - "command-group", - "dunce", - "log", - "prost 0.13.1", - "rand 0.8.5", - "reqwest", - "serde", - "serde_json", - "tauri", - "tauri-plugin-shell", - "tokio", - "tonic 0.12.1", - "tonic-build", -] - [[package]] name = "png" version = "0.17.13" @@ -3879,9 +3906,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -4178,6 +4208,28 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r2d2" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93" +dependencies = [ + "log", + "parking_lot", + "scheduled-thread-pool", +] + +[[package]] +name = "r2d2_sqlite" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a982edf65c129796dba72f8775b292ef482b40d035e827a9825b3bc07ccc5f2" +dependencies = [ + "r2d2", + "rusqlite", + "uuid", +] + [[package]] name = "radium" version = "0.7.0" @@ -4334,9 +4386,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.5" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", @@ -4418,7 +4470,7 @@ dependencies = [ "pin-project-lite", "quinn", "rustls 0.23.12", - "rustls-pemfile 2.1.2", + "rustls-pemfile 2.1.3", "rustls-pki-types", "serde", "serde_json", @@ -4539,6 +4591,21 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rusqlite" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" +dependencies = [ + "bitflags 2.6.0", + "chrono", + "fallible-iterator", + "fallible-streaming-iterator", + "hashlink", + "libsqlite3-sys", + "smallvec", +] + [[package]] name = "rust_decimal" version = "1.35.0" @@ -4638,9 +4705,9 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" dependencies = [ "base64 0.22.1", "rustls-pki-types", @@ -4703,6 +4770,15 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "scheduled-thread-pool" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" +dependencies = [ + "parking_lot", +] + [[package]] name = "schemars" version = "0.8.21" @@ -4751,6 +4827,53 @@ dependencies = [ "untrusted", ] +[[package]] +name = "sea-query" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e5073b2cfed767511a57d18115f3b3d8bcb5690bf8c89518caec6cb22c0cd74" +dependencies = [ + "chrono", + "inherent", + "sea-query-attr", + "sea-query-derive", +] + +[[package]] +name = "sea-query-attr" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168a31e0ef5a791ad26aa97c502eaed8d2a1ffdc22b3249f9947c1e12be6b477" +dependencies = [ + "darling 0.14.4", + "heck 0.4.1", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sea-query-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a82fcb49253abcb45cdcb2adf92956060ec0928635eb21b4f7a6d8f25ab0bc" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.72", + "thiserror", +] + +[[package]] +name = "sea-query-rusqlite" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd26649cda07604727e01106ca109e4d0796a6d09c627eaa7831fbe46daf78b" +dependencies = [ + "rusqlite", + "sea-query", +] + [[package]] name = "seahash" version = "4.1.0" @@ -4863,11 +4986,12 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.120" +version = "1.0.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" dependencies = [ "itoa 1.0.11", + "memchr", "ryu", "serde", ] @@ -4914,7 +5038,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.6", + "indexmap 2.3.0", "serde", "serde_derive", "serde_json", @@ -4928,7 +5052,7 @@ version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" dependencies = [ - "darling", + "darling 0.20.10", "proc-macro2", "quote", "syn 2.0.72", @@ -4940,7 +5064,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.3.0", "itoa 1.0.11", "ryu", "serde", @@ -5012,12 +5136,12 @@ dependencies = [ [[package]] name = "shared_child" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" dependencies = [ "libc", - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -5071,6 +5195,9 @@ name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] [[package]] name = "socket2" @@ -5162,9 +5289,9 @@ dependencies = [ [[package]] name = "sqlx" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" +checksum = "27144619c6e5802f1380337a209d2ac1c431002dd74c6e60aebff3c506dc4f0c" dependencies = [ "sqlx-core", "sqlx-macros", @@ -5175,27 +5302,26 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" +checksum = "a999083c1af5b5d6c071d34a708a19ba3e02106ad82ef7bbd69f5e48266b613b" dependencies = [ - "ahash 0.8.11", "atoi", "byteorder", "bytes", - "chrono", "crc", "crossbeam-queue", "either", - "event-listener 2.5.3", + "event-listener", "futures-channel", "futures-core", "futures-intrusive", "futures-io", "futures-util", + "hashbrown 0.14.5", "hashlink", "hex", - "indexmap 2.2.6", + "indexmap 2.3.0", "log", "memchr", "once_cell", @@ -5209,7 +5335,6 @@ dependencies = [ "smallvec", "sqlformat", "thiserror", - "time", "tokio", "tokio-stream", "tracing", @@ -5219,26 +5344,26 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" +checksum = "a23217eb7d86c584b8cbe0337b9eacf12ab76fe7673c513141ec42565698bb88" dependencies = [ "proc-macro2", "quote", "sqlx-core", "sqlx-macros-core", - "syn 1.0.109", + "syn 2.0.72", ] [[package]] name = "sqlx-macros-core" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +checksum = "1a099220ae541c5db479c6424bdf1b200987934033c2584f79a0e1693601e776" dependencies = [ "dotenvy", "either", - "heck 0.4.1", + "heck 0.5.0", "hex", "once_cell", "proc-macro2", @@ -5250,7 +5375,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 1.0.109", + "syn 2.0.72", "tempfile", "tokio", "url", @@ -5258,16 +5383,15 @@ dependencies = [ [[package]] name = "sqlx-mysql" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +checksum = "5afe4c38a9b417b6a9a5eeffe7235d0a106716495536e7727d1c7f4b1ff3eba6" dependencies = [ "atoi", - "base64 0.21.7", + "base64 0.22.1", "bitflags 2.6.0", "byteorder", "bytes", - "chrono", "crc", "digest", "dotenvy", @@ -5295,22 +5419,20 @@ dependencies = [ "sqlx-core", "stringprep", "thiserror", - "time", "tracing", "whoami", ] [[package]] name = "sqlx-postgres" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" +checksum = "b1dbb157e65f10dbe01f729339c06d239120221c9ad9fa0ba8408c4cc18ecf21" dependencies = [ "atoi", - "base64 0.21.7", + "base64 0.22.1", "bitflags 2.6.0", "byteorder", - "chrono", "crc", "dotenvy", "etcetera", @@ -5335,19 +5457,17 @@ dependencies = [ "sqlx-core", "stringprep", "thiserror", - "time", "tracing", "whoami", ] [[package]] name = "sqlx-sqlite" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" +checksum = "9b2cdd83c008a622d94499c0006d8ee5f821f36c89b7d625c900e5dc30b5c5ee" dependencies = [ "atoi", - "chrono", "flume", "futures-channel", "futures-core", @@ -5358,11 +5478,10 @@ dependencies = [ "log", "percent-encoding", "serde", + "serde_urlencoded", "sqlx-core", - "time", "tracing", "url", - "urlencoding", ] [[package]] @@ -5604,15 +5723,15 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.15" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.0.0-beta.24" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eab508aad4ae86e23865e294b20a7bb89bd7afea523897b7478329b841d4295" +checksum = "255e746089a370802ec4eb896dccc6f27c1dd2a203c1dc484fd996db954e2300" dependencies = [ "anyhow", "bytes", @@ -5660,9 +5779,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.0-beta.19" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "498f587026501e4bbc5d6273b63f8956b03c37b3d3b2027f9c756fcd468e9c62" +checksum = "85ceb8d082c3b17b4b2eb134a39363a22c696ddba473d6e5c0ab1caadad4cfca" dependencies = [ "anyhow", "cargo_toml", @@ -5682,9 +5801,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.0-beta.19" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43bbc731067e319ef60601bf5716d1e706ee9ae28e38c0587f7165c7d6824cdf" +checksum = "2407c7d37a491b16e530445c9611d91091cae198eea2ed424913b740215605f2" dependencies = [ "base64 0.22.1", "brotli 3.5.0", @@ -5709,9 +5828,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.0-beta.19" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36b4a44346577ccde75a24c62405a4c3b4f7a3a76614ee6cf1ed14a0b756795c" +checksum = "d210893b693be00f569b4f54456803debe104b7675f368205f2b6e94bac09b34" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -5723,9 +5842,9 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.0.0-beta.19" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abe0b85472516d1033ba251ac81b9f18f02725aadcaad697c8b727e6505a6ad" +checksum = "b352e4478af27bd7c76724bb426ebb32fc51baafb2186afabed4e706dc9e39d4" dependencies = [ "anyhow", "glob", @@ -5740,9 +5859,9 @@ dependencies = [ [[package]] name = "tauri-plugin-clipboard-manager" -version = "2.1.0-beta.6" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47675aca1e08a481aea642212f82d8ad980bc3ea7ea1350e5d78395aa28f4faf" +checksum = "76a26868f7e05a09673e4172d23acb82cd48911cca092f0e8d06179a69e5024c" dependencies = [ "arboard", "image 0.24.9", @@ -5756,9 +5875,9 @@ dependencies = [ [[package]] name = "tauri-plugin-dialog" -version = "2.0.0-beta.11" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8860dd73c96969eb14813f9f04d8665f2853342670456fb6619d637137ef0d09" +checksum = "6c538457a755a75b8bb1594ed40d1512f8f6386251d3fcde492f8f46768ec85b" dependencies = [ "dunce", "log", @@ -5774,9 +5893,9 @@ dependencies = [ [[package]] name = "tauri-plugin-fs" -version = "2.0.0-beta.11" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "461853268fe115ca19ee21e5986d505944f0b826048fe1bd726d74753fdf1df6" +checksum = "5df6b25b1f2b7b61565e66c4dbee9eb39e5635d2a763206e380e07cc3f601a67" dependencies = [ "anyhow", "glob", @@ -5793,9 +5912,9 @@ dependencies = [ [[package]] name = "tauri-plugin-log" -version = "2.0.0-beta.9" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f80d78a6e8102acf05a1e735f006991a2abfc71566d4e484f820b7495cd52c" +checksum = "380d27f23c39cde6a73024e65d8ec9b5b0af861e968dbe16b3aad86cd2c578e5" dependencies = [ "android_logger", "byte-unit", @@ -5815,9 +5934,9 @@ dependencies = [ [[package]] name = "tauri-plugin-os" -version = "2.0.0-beta.8" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79a0466f11f45fd3f640a17b5ba5e34c62912c9b391141c818155125ae9f0917" +checksum = "6b54cfeb26356822d3be3db4282041b03552f573a694b6b28aded7d95c62a039" dependencies = [ "gethostname", "log", @@ -5833,9 +5952,9 @@ dependencies = [ [[package]] name = "tauri-plugin-shell" -version = "2.0.0-beta.9" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9fa8c4e3d9ec343f6c3eb081672045566128a6c48ff6f6eeea85251ff38d3f" +checksum = "9209f6c32caec61e156a5616f7d80ba7683ca4a0a5641cbe5d3086ab371aaab2" dependencies = [ "encoding_rs", "log", @@ -5854,9 +5973,9 @@ dependencies = [ [[package]] name = "tauri-plugin-updater" -version = "2.0.0-beta.11" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcd8bad59390a1da0efb4fe82d6c697747925dd8f8cd841d74d21325d4dd36c7" +checksum = "5b5f10ba18d2fc65e16bdf053b7beccb621dcf880c52d2ab08bdeb2d685e3e14" dependencies = [ "base64 0.22.1", "dirs", @@ -5883,9 +6002,9 @@ dependencies = [ [[package]] name = "tauri-plugin-window-state" -version = "2.0.0-beta.11" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6f7cea222b8eeb3598c7b3e19e9c7e6b1c2d60207b87225e0c3bb1c24c8fdec" +checksum = "4a86654a4937427217c7531594a60bede289e0e6d27baef0527d5678fb3d263a" dependencies = [ "bitflags 2.6.0", "log", @@ -5898,9 +6017,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.0.0-beta.20" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe978df03966febbebc608931dc2cf26ef94df70855a18b05f07134cf474de09" +checksum = "6624fdf383ccafc9e8ad9205fe6e5c976b318efcd6b3662dde658c74e4254792" dependencies = [ "dpi", "gtk", @@ -5917,9 +6036,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.0.0-beta.20" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11e4d568f61095f507b3fc4254dfbfff3b20de2a1d66167ffca3f6d90b14db8f" +checksum = "9fd1a785c4281f8231b091593393b40cb3a800810c407b1ffed52de27ff1640a" dependencies = [ "cocoa", "gtk", @@ -5941,9 +6060,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.0.0-beta.19" +version = "2.0.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e20e51856f343c503892749b27d34042e6ca83a0369a12de3c5552d9874d04e8" +checksum = "6f435eeaae1e69cf93cf19da0f727989eed2e5eb6fc63a8d21432f59dd3ac4ac" dependencies = [ "brotli 3.5.0", "cargo_metadata", @@ -5986,12 +6105,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "b8fcd239983515c23a32fb82099f97d0b11b8c72f654ed659363a95c3dad7a53" dependencies = [ "cfg-if", "fastrand", + "once_cell", "rustix", "windows-sys 0.52.0", ] @@ -6014,6 +6134,15 @@ dependencies = [ "utf-8", ] +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + [[package]] name = "thin-slice" version = "0.1.1" @@ -6242,7 +6371,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.3.0", "serde", "serde_spanned", "toml_datetime", @@ -6255,7 +6384,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.3.0", "serde", "serde_spanned", "toml_datetime", @@ -6465,6 +6594,30 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "ts-rs" +version = "9.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b44017f9f875786e543595076374b9ef7d13465a518dd93d6ccdbf5b432dde8c" +dependencies = [ + "chrono", + "serde_json", + "thiserror", + "ts-rs-macros", +] + +[[package]] +name = "ts-rs-macros" +version = "9.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c88cc88fd23b5a04528f3a8436024f20010a16ec18eb23c164b1242f65860130" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", + "termcolor", +] + [[package]] name = "typeid" version = "1.0.0" @@ -6607,12 +6760,6 @@ dependencies = [ "serde", ] -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - [[package]] name = "urlpattern" version = "0.2.0" @@ -6645,6 +6792,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ "getrandom 0.2.15", + "rand 0.8.5", ] [[package]] @@ -6958,11 +7106,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -7082,6 +7230,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -7414,7 +7571,6 @@ dependencies = [ "mime_guess", "objc", "openssl-sys", - "plugin_runtime", "rand 0.8.5", "regex", "reqwest", @@ -7438,6 +7594,47 @@ dependencies = [ "tokio", "tokio-stream", "uuid", + "yaak_models", + "yaak_plugin_runtime", +] + +[[package]] +name = "yaak_models" +version = "0.1.0" +dependencies = [ + "chrono", + "log", + "r2d2", + "r2d2_sqlite", + "rand 0.8.5", + "rusqlite", + "sea-query", + "sea-query-rusqlite", + "serde", + "serde_json", + "tauri", + "thiserror", + "ts-rs", +] + +[[package]] +name = "yaak_plugin_runtime" +version = "0.1.0" +dependencies = [ + "anyhow", + "command-group", + "dunce", + "log", + "prost 0.13.1", + "rand 0.8.5", + "reqwest", + "serde", + "serde_json", + "tauri", + "tauri-plugin-shell", + "tokio", + "tonic 0.12.1", + "tonic-build", ] [[package]] @@ -7452,7 +7649,7 @@ dependencies = [ "async-trait", "derivative", "enumflags2", - "event-listener 5.3.1", + "event-listener", "futures-core", "futures-sink", "futures-util", @@ -7505,6 +7702,7 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -7527,15 +7725,15 @@ checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] name = "zip" -version = "2.1.5" +version = "2.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b895748a3ebcb69b9d38dcfdf21760859a4b0d0b0015277640c2ef4c69640e6f" +checksum = "40dd8c92efc296286ce1fbd16657c5dbefff44f1b4ca01cc5f517d8b7b3d3e2e" dependencies = [ "arbitrary", "crc32fast", "crossbeam-utils", "displaydoc", - "indexmap 2.2.6", + "indexmap 2.3.0", "memchr", "thiserror", ] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 73417047..4af9a4b7 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,4 +1,6 @@ -workspace = { members = ["grpc", "templates", "tauri-plugin-plugin-runtime"] } +[workspace] +members = ["grpc", "templates", "yaak_plugin_runtime", "yaak_models"] + [package] name = "yaak-app" @@ -14,7 +16,7 @@ crate-type = ["staticlib", "cdylib", "lib"] strip = true # Automatically strip symbols from the binary. [build-dependencies] -tauri-build = { version = "2.0.0-beta", features = [] } +tauri-build = { version = "2.0.0-rc.0", features = [] } [target.'cfg(target_os = "macos")'.dependencies] objc = "0.2.7" @@ -26,7 +28,8 @@ openssl-sys = { version = "0.9", features = ["vendored"] } # For Ubuntu installa [dependencies] grpc = { path = "./grpc" } templates = { path = "./templates" } -plugin_runtime = { path = "tauri-plugin-plugin-runtime" } +yaak_plugin_runtime = { path = "yaak_plugin_runtime" } +yaak_models = { path = "yaak_models" } anyhow = "1.0.86" base64 = "0.22.0" chrono = { version = "0.4.31", features = ["serde"] } @@ -41,18 +44,22 @@ reqwest_cookie_store = "0.8.0" serde = { version = "1.0.198", features = ["derive"] } serde_json = { version = "1.0.116", features = ["raw_value"] } serde_yaml = "0.9.34" -sqlx = { version = "0.7.4", features = ["sqlite", "runtime-tokio-rustls", "json", "chrono", "time"] } -tauri = { version = "2.0.0-beta", features = ["devtools", "protocol-asset"] } -tauri-plugin-clipboard-manager = "2.1.0-beta" -tauri-plugin-dialog = "2.0.0-beta" -tauri-plugin-fs = "2.0.0-beta" -tauri-plugin-log = { version = "2.0.0-beta", features = ["colored"] } -tauri-plugin-os = "2.0.0-beta" -tauri-plugin-shell = "2.0.0-beta" -tauri-plugin-updater = "2.0.0-beta" -tauri-plugin-window-state = "2.0.0-beta" +sqlx = { version = "0.8.0", features = ["sqlite", "runtime-tokio-rustls"] } +tauri = { workspace = true } +tauri-plugin-shell = { workspace = true } +tauri-plugin-clipboard-manager = "2.0.0-rc.0" +tauri-plugin-dialog = "2.0.0-rc.0" +tauri-plugin-fs = "2.0.0-rc.0" +tauri-plugin-log = { version = "2.0.0-rc.0", features = ["colored"] } +tauri-plugin-os = "2.0.0-rc.0" +tauri-plugin-updater = "2.0.0-rc.0" +tauri-plugin-window-state = "2.0.0-rc.0" tokio = { version = "1.36.0", features = ["sync"] } tokio-stream = "0.1.15" uuid = "1.7.0" thiserror = "1.0.61" mime_guess = "2.0.5" + +[workspace.dependencies] +tauri = { version = "2.0.0-rc.0", features = ["devtools", "protocol-asset"] } +tauri-plugin-shell = "2.0.0-rc.0" diff --git a/src-tauri/capabilities/capabilities.json b/src-tauri/capabilities/capabilities.json index 7fb8edf9..c35eb127 100644 --- a/src-tauri/capabilities/capabilities.json +++ b/src-tauri/capabilities/capabilities.json @@ -7,14 +7,14 @@ "*" ], "permissions": [ + "core:event:allow-emit", + "core:event:allow-listen", + "core:event:allow-unlisten", "os:allow-os-type", - "event:allow-emit", "clipboard-manager:allow-write-text", "clipboard-manager:allow-read-text", "dialog:allow-open", "dialog:allow-save", - "event:allow-listen", - "event:allow-unlisten", "fs:allow-read-file", "fs:allow-read-text-file", { @@ -29,17 +29,17 @@ ] }, "shell:allow-open", - "webview:allow-set-webview-zoom", - "window:allow-close", - "window:allow-is-fullscreen", - "window:allow-maximize", - "window:allow-minimize", - "window:allow-toggle-maximize", - "window:allow-set-decorations", - "window:allow-set-title", - "window:allow-start-dragging", - "window:allow-unmaximize", - "window:allow-theme", + "core:webview:allow-set-webview-zoom", + "core:window:allow-close", + "core:window:allow-is-fullscreen", + "core:window:allow-maximize", + "core:window:allow-minimize", + "core:window:allow-toggle-maximize", + "core:window:allow-set-decorations", + "core:window:allow-set-title", + "core:window:allow-start-dragging", + "core:window:allow-unmaximize", + "core:window:allow-theme", "clipboard-manager:allow-read-text", "clipboard-manager:allow-write-text" ] diff --git a/src-tauri/gen/schemas/acl-manifests.json b/src-tauri/gen/schemas/acl-manifests.json index d4500808..866f1be0 100644 --- a/src-tauri/gen/schemas/acl-manifests.json +++ b/src-tauri/gen/schemas/acl-manifests.json @@ -1 +1 @@ -{"app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"clipboard-manager":{"default_permission":{"identifier":"default","description":"No features are enabled by default, as we believe\nthe clipboard can be inherently dangerous and it is \napplication specific if read and/or write access is needed.\n\nClipboard interaction needs to be explicitly enabled.\n","permissions":[]},"permissions":{"allow-clear":{"identifier":"allow-clear","description":"Enables the clear command without any pre-configured scope.","commands":{"allow":["clear"],"deny":[]}},"allow-read-image":{"identifier":"allow-read-image","description":"Enables the read_image command without any pre-configured scope.","commands":{"allow":["read_image"],"deny":[]}},"allow-read-text":{"identifier":"allow-read-text","description":"Enables the read_text command without any pre-configured scope.","commands":{"allow":["read_text"],"deny":[]}},"allow-write-html":{"identifier":"allow-write-html","description":"Enables the write_html command without any pre-configured scope.","commands":{"allow":["write_html"],"deny":[]}},"allow-write-image":{"identifier":"allow-write-image","description":"Enables the write_image command without any pre-configured scope.","commands":{"allow":["write_image"],"deny":[]}},"allow-write-text":{"identifier":"allow-write-text","description":"Enables the write_text command without any pre-configured scope.","commands":{"allow":["write_text"],"deny":[]}},"deny-clear":{"identifier":"deny-clear","description":"Denies the clear command without any pre-configured scope.","commands":{"allow":[],"deny":["clear"]}},"deny-read-image":{"identifier":"deny-read-image","description":"Denies the read_image command without any pre-configured scope.","commands":{"allow":[],"deny":["read_image"]}},"deny-read-text":{"identifier":"deny-read-text","description":"Denies the read_text command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text"]}},"deny-write-html":{"identifier":"deny-write-html","description":"Denies the write_html command without any pre-configured scope.","commands":{"allow":[],"deny":["write_html"]}},"deny-write-image":{"identifier":"deny-write-image","description":"Denies the write_image command without any pre-configured scope.","commands":{"allow":[],"deny":["write_image"]}},"deny-write-text":{"identifier":"deny-write-text","description":"Denies the write_text command without any pre-configured scope.","commands":{"allow":[],"deny":["write_text"]}}},"permission_sets":{},"global_scope_schema":null},"dialog":{"default_permission":{"identifier":"default","description":"This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n","permissions":["allow-ask","allow-confirm","allow-message","allow-save","allow-open"]},"permissions":{"allow-ask":{"identifier":"allow-ask","description":"Enables the ask command without any pre-configured scope.","commands":{"allow":["ask"],"deny":[]}},"allow-confirm":{"identifier":"allow-confirm","description":"Enables the confirm command without any pre-configured scope.","commands":{"allow":["confirm"],"deny":[]}},"allow-message":{"identifier":"allow-message","description":"Enables the message command without any pre-configured scope.","commands":{"allow":["message"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"deny-ask":{"identifier":"deny-ask","description":"Denies the ask command without any pre-configured scope.","commands":{"allow":[],"deny":["ask"]}},"deny-confirm":{"identifier":"deny-confirm","description":"Denies the confirm command without any pre-configured scope.","commands":{"allow":[],"deny":["confirm"]}},"deny-message":{"identifier":"deny-message","description":"Denies the message command without any pre-configured scope.","commands":{"allow":[],"deny":["message"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}}},"permission_sets":{},"global_scope_schema":null},"event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"fs":{"default_permission":{"identifier":"default","description":"This set of permissions describes the what kind of\nfile system access the `fs` plugin has enabled or denied by default.\n\n#### Granted Permissions\n\nThis default permission set enables read access to the\napplication specific directories (AppConfig, AppData, AppLocalData, AppCache,\nAppLog) and all files and sub directories created in it.\nThe location of these directories depends on the operating system,\nwhere the application is run.\n\nIn general these directories need to be manually created\nby the application at runtime, before accessing files or folders\nin it is possible.\n\nTherefore, it is also allowed to create all of these folders via\nthe `mkdir` command.\n\n#### Denied Permissions\n\nThis default permission set prevents access to critical components\nof the Tauri application by default.\nOn Windows the webview data folder access is denied.\n\n","permissions":["create-app-specific-dirs","read-app-specific-dirs-recursive","deny-default"]},"permissions":{"allow-copy-file":{"identifier":"allow-copy-file","description":"Enables the copy_file command without any pre-configured scope.","commands":{"allow":["copy_file"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-exists":{"identifier":"allow-exists","description":"Enables the exists command without any pre-configured scope.","commands":{"allow":["exists"],"deny":[]}},"allow-fstat":{"identifier":"allow-fstat","description":"Enables the fstat command without any pre-configured scope.","commands":{"allow":["fstat"],"deny":[]}},"allow-ftruncate":{"identifier":"allow-ftruncate","description":"Enables the ftruncate command without any pre-configured scope.","commands":{"allow":["ftruncate"],"deny":[]}},"allow-lstat":{"identifier":"allow-lstat","description":"Enables the lstat command without any pre-configured scope.","commands":{"allow":["lstat"],"deny":[]}},"allow-mkdir":{"identifier":"allow-mkdir","description":"Enables the mkdir command without any pre-configured scope.","commands":{"allow":["mkdir"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-read":{"identifier":"allow-read","description":"Enables the read command without any pre-configured scope.","commands":{"allow":["read"],"deny":[]}},"allow-read-dir":{"identifier":"allow-read-dir","description":"Enables the read_dir command without any pre-configured scope.","commands":{"allow":["read_dir"],"deny":[]}},"allow-read-file":{"identifier":"allow-read-file","description":"Enables the read_file command without any pre-configured scope.","commands":{"allow":["read_file"],"deny":[]}},"allow-read-text-file":{"identifier":"allow-read-text-file","description":"Enables the read_text_file command without any pre-configured scope.","commands":{"allow":["read_text_file"],"deny":[]}},"allow-read-text-file-lines":{"identifier":"allow-read-text-file-lines","description":"Enables the read_text_file_lines command without any pre-configured scope.","commands":{"allow":["read_text_file_lines"],"deny":[]}},"allow-read-text-file-lines-next":{"identifier":"allow-read-text-file-lines-next","description":"Enables the read_text_file_lines_next command without any pre-configured scope.","commands":{"allow":["read_text_file_lines_next"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-rename":{"identifier":"allow-rename","description":"Enables the rename command without any pre-configured scope.","commands":{"allow":["rename"],"deny":[]}},"allow-seek":{"identifier":"allow-seek","description":"Enables the seek command without any pre-configured scope.","commands":{"allow":["seek"],"deny":[]}},"allow-stat":{"identifier":"allow-stat","description":"Enables the stat command without any pre-configured scope.","commands":{"allow":["stat"],"deny":[]}},"allow-truncate":{"identifier":"allow-truncate","description":"Enables the truncate command without any pre-configured scope.","commands":{"allow":["truncate"],"deny":[]}},"allow-unwatch":{"identifier":"allow-unwatch","description":"Enables the unwatch command without any pre-configured scope.","commands":{"allow":["unwatch"],"deny":[]}},"allow-watch":{"identifier":"allow-watch","description":"Enables the watch command without any pre-configured scope.","commands":{"allow":["watch"],"deny":[]}},"allow-write":{"identifier":"allow-write","description":"Enables the write command without any pre-configured scope.","commands":{"allow":["write"],"deny":[]}},"allow-write-file":{"identifier":"allow-write-file","description":"Enables the write_file command without any pre-configured scope.","commands":{"allow":["write_file"],"deny":[]}},"allow-write-text-file":{"identifier":"allow-write-text-file","description":"Enables the write_text_file command without any pre-configured scope.","commands":{"allow":["write_text_file"],"deny":[]}},"create-app-specific-dirs":{"identifier":"create-app-specific-dirs","description":"This permissions allows to create the application specific directories.\n","commands":{"allow":["mkdir"],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"},{"path":"$APPDATA"},{"path":"$APPLOCALDATA"},{"path":"$APPCACHE"},{"path":"$APPLOG"}]}},"deny-copy-file":{"identifier":"deny-copy-file","description":"Denies the copy_file command without any pre-configured scope.","commands":{"allow":[],"deny":["copy_file"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-exists":{"identifier":"deny-exists","description":"Denies the exists command without any pre-configured scope.","commands":{"allow":[],"deny":["exists"]}},"deny-fstat":{"identifier":"deny-fstat","description":"Denies the fstat command without any pre-configured scope.","commands":{"allow":[],"deny":["fstat"]}},"deny-ftruncate":{"identifier":"deny-ftruncate","description":"Denies the ftruncate command without any pre-configured scope.","commands":{"allow":[],"deny":["ftruncate"]}},"deny-lstat":{"identifier":"deny-lstat","description":"Denies the lstat command without any pre-configured scope.","commands":{"allow":[],"deny":["lstat"]}},"deny-mkdir":{"identifier":"deny-mkdir","description":"Denies the mkdir command without any pre-configured scope.","commands":{"allow":[],"deny":["mkdir"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-read":{"identifier":"deny-read","description":"Denies the read command without any pre-configured scope.","commands":{"allow":[],"deny":["read"]}},"deny-read-dir":{"identifier":"deny-read-dir","description":"Denies the read_dir command without any pre-configured scope.","commands":{"allow":[],"deny":["read_dir"]}},"deny-read-file":{"identifier":"deny-read-file","description":"Denies the read_file command without any pre-configured scope.","commands":{"allow":[],"deny":["read_file"]}},"deny-read-text-file":{"identifier":"deny-read-text-file","description":"Denies the read_text_file command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file"]}},"deny-read-text-file-lines":{"identifier":"deny-read-text-file-lines","description":"Denies the read_text_file_lines command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file_lines"]}},"deny-read-text-file-lines-next":{"identifier":"deny-read-text-file-lines-next","description":"Denies the read_text_file_lines_next command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file_lines_next"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-rename":{"identifier":"deny-rename","description":"Denies the rename command without any pre-configured scope.","commands":{"allow":[],"deny":["rename"]}},"deny-seek":{"identifier":"deny-seek","description":"Denies the seek command without any pre-configured scope.","commands":{"allow":[],"deny":["seek"]}},"deny-stat":{"identifier":"deny-stat","description":"Denies the stat command without any pre-configured scope.","commands":{"allow":[],"deny":["stat"]}},"deny-truncate":{"identifier":"deny-truncate","description":"Denies the truncate command without any pre-configured scope.","commands":{"allow":[],"deny":["truncate"]}},"deny-unwatch":{"identifier":"deny-unwatch","description":"Denies the unwatch command without any pre-configured scope.","commands":{"allow":[],"deny":["unwatch"]}},"deny-watch":{"identifier":"deny-watch","description":"Denies the watch command without any pre-configured scope.","commands":{"allow":[],"deny":["watch"]}},"deny-webview-data-linux":{"identifier":"deny-webview-data-linux","description":"This denies read access to the\n`$APPLOCALDATA` folder on linux as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.","commands":{"allow":[],"deny":[]}},"deny-webview-data-windows":{"identifier":"deny-webview-data-windows","description":"This denies read access to the\n`$APPLOCALDATA/EBWebView` folder on windows as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.","commands":{"allow":[],"deny":[]}},"deny-write":{"identifier":"deny-write","description":"Denies the write command without any pre-configured scope.","commands":{"allow":[],"deny":["write"]}},"deny-write-file":{"identifier":"deny-write-file","description":"Denies the write_file command without any pre-configured scope.","commands":{"allow":[],"deny":["write_file"]}},"deny-write-text-file":{"identifier":"deny-write-text-file","description":"Denies the write_text_file command without any pre-configured scope.","commands":{"allow":[],"deny":["write_text_file"]}},"read-all":{"identifier":"read-all","description":"This enables all read related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","read_file","read","open","read_text_file","read_text_file_lines","read_text_file_lines_next","seek","stat","lstat","fstat","exists","watch","unwatch"],"deny":[]}},"read-app-specific-dirs-recursive":{"identifier":"read-app-specific-dirs-recursive","description":"This permission allows recursive read functionality on the application\nspecific base directories. \n","commands":{"allow":["read_dir","read_file","read_text_file","read_text_file_lines","read_text_file_lines_next","exists"],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG/**"},{"path":"$APPDATA/**"},{"path":"$APPLOCALDATA/**"},{"path":"$APPCACHE/**"},{"path":"$APPLOG/**"}]}},"read-dirs":{"identifier":"read-dirs","description":"This enables directory read and file metadata related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","stat","lstat","fstat","exists"],"deny":[]}},"read-files":{"identifier":"read-files","description":"This enables file read related commands without any pre-configured accessible paths.","commands":{"allow":["read_file","read","open","read_text_file","read_text_file_lines","read_text_file_lines_next","seek","stat","lstat","fstat","exists"],"deny":[]}},"read-meta":{"identifier":"read-meta","description":"This enables all index or metadata related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","stat","lstat","fstat","exists"],"deny":[]}},"scope":{"identifier":"scope","description":"An empty permission you can use to modify the global scope.","commands":{"allow":[],"deny":[]}},"scope-app":{"identifier":"scope-app","description":"This scope permits access to all files and list content of top level directories in the `$APP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APP/*"}]}},"scope-app-index":{"identifier":"scope-app-index","description":"This scope permits to list all files and folders in the `$APP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APP/"}]}},"scope-app-recursive":{"identifier":"scope-app-recursive","description":"This scope permits recursive access to the complete `$APP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APP/**"}]}},"scope-appcache":{"identifier":"scope-appcache","description":"This scope permits access to all files and list content of top level directories in the `$APPCACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE/*"}]}},"scope-appcache-index":{"identifier":"scope-appcache-index","description":"This scope permits to list all files and folders in the `$APPCACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE/"}]}},"scope-appcache-recursive":{"identifier":"scope-appcache-recursive","description":"This scope permits recursive access to the complete `$APPCACHE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE/**"}]}},"scope-appconfig":{"identifier":"scope-appconfig","description":"This scope permits access to all files and list content of top level directories in the `$APPCONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG/*"}]}},"scope-appconfig-index":{"identifier":"scope-appconfig-index","description":"This scope permits to list all files and folders in the `$APPCONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG/"}]}},"scope-appconfig-recursive":{"identifier":"scope-appconfig-recursive","description":"This scope permits recursive access to the complete `$APPCONFIG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG/**"}]}},"scope-appdata":{"identifier":"scope-appdata","description":"This scope permits access to all files and list content of top level directories in the `$APPDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA/*"}]}},"scope-appdata-index":{"identifier":"scope-appdata-index","description":"This scope permits to list all files and folders in the `$APPDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA/"}]}},"scope-appdata-recursive":{"identifier":"scope-appdata-recursive","description":"This scope permits recursive access to the complete `$APPDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA/**"}]}},"scope-applocaldata":{"identifier":"scope-applocaldata","description":"This scope permits access to all files and list content of top level directories in the `$APPLOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA/*"}]}},"scope-applocaldata-index":{"identifier":"scope-applocaldata-index","description":"This scope permits to list all files and folders in the `$APPLOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA/"}]}},"scope-applocaldata-recursive":{"identifier":"scope-applocaldata-recursive","description":"This scope permits recursive access to the complete `$APPLOCALDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA/**"}]}},"scope-applog":{"identifier":"scope-applog","description":"This scope permits access to all files and list content of top level directories in the `$APPLOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG/*"}]}},"scope-applog-index":{"identifier":"scope-applog-index","description":"This scope permits to list all files and folders in the `$APPLOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG/"}]}},"scope-applog-recursive":{"identifier":"scope-applog-recursive","description":"This scope permits recursive access to the complete `$APPLOG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG/**"}]}},"scope-audio":{"identifier":"scope-audio","description":"This scope permits access to all files and list content of top level directories in the `$AUDIO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO/*"}]}},"scope-audio-index":{"identifier":"scope-audio-index","description":"This scope permits to list all files and folders in the `$AUDIO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO/"}]}},"scope-audio-recursive":{"identifier":"scope-audio-recursive","description":"This scope permits recursive access to the complete `$AUDIO` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO/**"}]}},"scope-cache":{"identifier":"scope-cache","description":"This scope permits access to all files and list content of top level directories in the `$CACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE/*"}]}},"scope-cache-index":{"identifier":"scope-cache-index","description":"This scope permits to list all files and folders in the `$CACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE/"}]}},"scope-cache-recursive":{"identifier":"scope-cache-recursive","description":"This scope permits recursive access to the complete `$CACHE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE/**"}]}},"scope-config":{"identifier":"scope-config","description":"This scope permits access to all files and list content of top level directories in the `$CONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG/*"}]}},"scope-config-index":{"identifier":"scope-config-index","description":"This scope permits to list all files and folders in the `$CONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG/"}]}},"scope-config-recursive":{"identifier":"scope-config-recursive","description":"This scope permits recursive access to the complete `$CONFIG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG/**"}]}},"scope-data":{"identifier":"scope-data","description":"This scope permits access to all files and list content of top level directories in the `$DATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA/*"}]}},"scope-data-index":{"identifier":"scope-data-index","description":"This scope permits to list all files and folders in the `$DATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA/"}]}},"scope-data-recursive":{"identifier":"scope-data-recursive","description":"This scope permits recursive access to the complete `$DATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA/**"}]}},"scope-desktop":{"identifier":"scope-desktop","description":"This scope permits access to all files and list content of top level directories in the `$DESKTOP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP/*"}]}},"scope-desktop-index":{"identifier":"scope-desktop-index","description":"This scope permits to list all files and folders in the `$DESKTOP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP/"}]}},"scope-desktop-recursive":{"identifier":"scope-desktop-recursive","description":"This scope permits recursive access to the complete `$DESKTOP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP/**"}]}},"scope-document":{"identifier":"scope-document","description":"This scope permits access to all files and list content of top level directories in the `$DOCUMENT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT/*"}]}},"scope-document-index":{"identifier":"scope-document-index","description":"This scope permits to list all files and folders in the `$DOCUMENT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT/"}]}},"scope-document-recursive":{"identifier":"scope-document-recursive","description":"This scope permits recursive access to the complete `$DOCUMENT` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT/**"}]}},"scope-download":{"identifier":"scope-download","description":"This scope permits access to all files and list content of top level directories in the `$DOWNLOAD`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD/*"}]}},"scope-download-index":{"identifier":"scope-download-index","description":"This scope permits to list all files and folders in the `$DOWNLOAD`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD/"}]}},"scope-download-recursive":{"identifier":"scope-download-recursive","description":"This scope permits recursive access to the complete `$DOWNLOAD` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD/**"}]}},"scope-exe":{"identifier":"scope-exe","description":"This scope permits access to all files and list content of top level directories in the `$EXE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE/*"}]}},"scope-exe-index":{"identifier":"scope-exe-index","description":"This scope permits to list all files and folders in the `$EXE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE/"}]}},"scope-exe-recursive":{"identifier":"scope-exe-recursive","description":"This scope permits recursive access to the complete `$EXE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE/**"}]}},"scope-font":{"identifier":"scope-font","description":"This scope permits access to all files and list content of top level directories in the `$FONT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT/*"}]}},"scope-font-index":{"identifier":"scope-font-index","description":"This scope permits to list all files and folders in the `$FONT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT/"}]}},"scope-font-recursive":{"identifier":"scope-font-recursive","description":"This scope permits recursive access to the complete `$FONT` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT/**"}]}},"scope-home":{"identifier":"scope-home","description":"This scope permits access to all files and list content of top level directories in the `$HOME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME/*"}]}},"scope-home-index":{"identifier":"scope-home-index","description":"This scope permits to list all files and folders in the `$HOME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME/"}]}},"scope-home-recursive":{"identifier":"scope-home-recursive","description":"This scope permits recursive access to the complete `$HOME` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME/**"}]}},"scope-localdata":{"identifier":"scope-localdata","description":"This scope permits access to all files and list content of top level directories in the `$LOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA/*"}]}},"scope-localdata-index":{"identifier":"scope-localdata-index","description":"This scope permits to list all files and folders in the `$LOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA/"}]}},"scope-localdata-recursive":{"identifier":"scope-localdata-recursive","description":"This scope permits recursive access to the complete `$LOCALDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA/**"}]}},"scope-log":{"identifier":"scope-log","description":"This scope permits access to all files and list content of top level directories in the `$LOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG/*"}]}},"scope-log-index":{"identifier":"scope-log-index","description":"This scope permits to list all files and folders in the `$LOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG/"}]}},"scope-log-recursive":{"identifier":"scope-log-recursive","description":"This scope permits recursive access to the complete `$LOG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG/**"}]}},"scope-picture":{"identifier":"scope-picture","description":"This scope permits access to all files and list content of top level directories in the `$PICTURE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE/*"}]}},"scope-picture-index":{"identifier":"scope-picture-index","description":"This scope permits to list all files and folders in the `$PICTURE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE/"}]}},"scope-picture-recursive":{"identifier":"scope-picture-recursive","description":"This scope permits recursive access to the complete `$PICTURE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE/**"}]}},"scope-public":{"identifier":"scope-public","description":"This scope permits access to all files and list content of top level directories in the `$PUBLIC`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC/*"}]}},"scope-public-index":{"identifier":"scope-public-index","description":"This scope permits to list all files and folders in the `$PUBLIC`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC/"}]}},"scope-public-recursive":{"identifier":"scope-public-recursive","description":"This scope permits recursive access to the complete `$PUBLIC` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC/**"}]}},"scope-resource":{"identifier":"scope-resource","description":"This scope permits access to all files and list content of top level directories in the `$RESOURCE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE/*"}]}},"scope-resource-index":{"identifier":"scope-resource-index","description":"This scope permits to list all files and folders in the `$RESOURCE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE/"}]}},"scope-resource-recursive":{"identifier":"scope-resource-recursive","description":"This scope permits recursive access to the complete `$RESOURCE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE/**"}]}},"scope-runtime":{"identifier":"scope-runtime","description":"This scope permits access to all files and list content of top level directories in the `$RUNTIME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME/*"}]}},"scope-runtime-index":{"identifier":"scope-runtime-index","description":"This scope permits to list all files and folders in the `$RUNTIME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME/"}]}},"scope-runtime-recursive":{"identifier":"scope-runtime-recursive","description":"This scope permits recursive access to the complete `$RUNTIME` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME/**"}]}},"scope-temp":{"identifier":"scope-temp","description":"This scope permits access to all files and list content of top level directories in the `$TEMP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP/*"}]}},"scope-temp-index":{"identifier":"scope-temp-index","description":"This scope permits to list all files and folders in the `$TEMP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP/"}]}},"scope-temp-recursive":{"identifier":"scope-temp-recursive","description":"This scope permits recursive access to the complete `$TEMP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP/**"}]}},"scope-template":{"identifier":"scope-template","description":"This scope permits access to all files and list content of top level directories in the `$TEMPLATE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE/*"}]}},"scope-template-index":{"identifier":"scope-template-index","description":"This scope permits to list all files and folders in the `$TEMPLATE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE/"}]}},"scope-template-recursive":{"identifier":"scope-template-recursive","description":"This scope permits recursive access to the complete `$TEMPLATE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE/**"}]}},"scope-video":{"identifier":"scope-video","description":"This scope permits access to all files and list content of top level directories in the `$VIDEO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO/*"}]}},"scope-video-index":{"identifier":"scope-video-index","description":"This scope permits to list all files and folders in the `$VIDEO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO/"}]}},"scope-video-recursive":{"identifier":"scope-video-recursive","description":"This scope permits recursive access to the complete `$VIDEO` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO/**"}]}},"write-all":{"identifier":"write-all","description":"This enables all write related commands without any pre-configured accessible paths.","commands":{"allow":["mkdir","create","copy_file","remove","rename","truncate","ftruncate","write","write_file","write_text_file"],"deny":[]}},"write-files":{"identifier":"write-files","description":"This enables all file write related commands without any pre-configured accessible paths.","commands":{"allow":["create","copy_file","remove","rename","truncate","ftruncate","write","write_file","write_text_file"],"deny":[]}}},"permission_sets":{"allow-app-meta":{"identifier":"allow-app-meta","description":"This allows non-recursive read access to metadata of the `$APP` folder, including file listing and statistics.","permissions":["read-meta","scope-app-index"]},"allow-app-meta-recursive":{"identifier":"allow-app-meta-recursive","description":"This allows full recursive read access to metadata of the `$APP` folder, including file listing and statistics.","permissions":["read-meta","scope-app-recursive"]},"allow-app-read":{"identifier":"allow-app-read","description":"This allows non-recursive read access to the `$APP` folder.","permissions":["read-all","scope-app"]},"allow-app-read-recursive":{"identifier":"allow-app-read-recursive","description":"This allows full recursive read access to the complete `$APP` folder, files and subdirectories.","permissions":["read-all","scope-app-recursive"]},"allow-app-write":{"identifier":"allow-app-write","description":"This allows non-recursive write access to the `$APP` folder.","permissions":["write-all","scope-app"]},"allow-app-write-recursive":{"identifier":"allow-app-write-recursive","description":"This allows full recursive write access to the complete `$APP` folder, files and subdirectories.","permissions":["write-all","scope-app-recursive"]},"allow-appcache-meta":{"identifier":"allow-appcache-meta","description":"This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-appcache-index"]},"allow-appcache-meta-recursive":{"identifier":"allow-appcache-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-appcache-recursive"]},"allow-appcache-read":{"identifier":"allow-appcache-read","description":"This allows non-recursive read access to the `$APPCACHE` folder.","permissions":["read-all","scope-appcache"]},"allow-appcache-read-recursive":{"identifier":"allow-appcache-read-recursive","description":"This allows full recursive read access to the complete `$APPCACHE` folder, files and subdirectories.","permissions":["read-all","scope-appcache-recursive"]},"allow-appcache-write":{"identifier":"allow-appcache-write","description":"This allows non-recursive write access to the `$APPCACHE` folder.","permissions":["write-all","scope-appcache"]},"allow-appcache-write-recursive":{"identifier":"allow-appcache-write-recursive","description":"This allows full recursive write access to the complete `$APPCACHE` folder, files and subdirectories.","permissions":["write-all","scope-appcache-recursive"]},"allow-appconfig-meta":{"identifier":"allow-appconfig-meta","description":"This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-appconfig-index"]},"allow-appconfig-meta-recursive":{"identifier":"allow-appconfig-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-appconfig-recursive"]},"allow-appconfig-read":{"identifier":"allow-appconfig-read","description":"This allows non-recursive read access to the `$APPCONFIG` folder.","permissions":["read-all","scope-appconfig"]},"allow-appconfig-read-recursive":{"identifier":"allow-appconfig-read-recursive","description":"This allows full recursive read access to the complete `$APPCONFIG` folder, files and subdirectories.","permissions":["read-all","scope-appconfig-recursive"]},"allow-appconfig-write":{"identifier":"allow-appconfig-write","description":"This allows non-recursive write access to the `$APPCONFIG` folder.","permissions":["write-all","scope-appconfig"]},"allow-appconfig-write-recursive":{"identifier":"allow-appconfig-write-recursive","description":"This allows full recursive write access to the complete `$APPCONFIG` folder, files and subdirectories.","permissions":["write-all","scope-appconfig-recursive"]},"allow-appdata-meta":{"identifier":"allow-appdata-meta","description":"This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-appdata-index"]},"allow-appdata-meta-recursive":{"identifier":"allow-appdata-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-appdata-recursive"]},"allow-appdata-read":{"identifier":"allow-appdata-read","description":"This allows non-recursive read access to the `$APPDATA` folder.","permissions":["read-all","scope-appdata"]},"allow-appdata-read-recursive":{"identifier":"allow-appdata-read-recursive","description":"This allows full recursive read access to the complete `$APPDATA` folder, files and subdirectories.","permissions":["read-all","scope-appdata-recursive"]},"allow-appdata-write":{"identifier":"allow-appdata-write","description":"This allows non-recursive write access to the `$APPDATA` folder.","permissions":["write-all","scope-appdata"]},"allow-appdata-write-recursive":{"identifier":"allow-appdata-write-recursive","description":"This allows full recursive write access to the complete `$APPDATA` folder, files and subdirectories.","permissions":["write-all","scope-appdata-recursive"]},"allow-applocaldata-meta":{"identifier":"allow-applocaldata-meta","description":"This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-applocaldata-index"]},"allow-applocaldata-meta-recursive":{"identifier":"allow-applocaldata-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-applocaldata-recursive"]},"allow-applocaldata-read":{"identifier":"allow-applocaldata-read","description":"This allows non-recursive read access to the `$APPLOCALDATA` folder.","permissions":["read-all","scope-applocaldata"]},"allow-applocaldata-read-recursive":{"identifier":"allow-applocaldata-read-recursive","description":"This allows full recursive read access to the complete `$APPLOCALDATA` folder, files and subdirectories.","permissions":["read-all","scope-applocaldata-recursive"]},"allow-applocaldata-write":{"identifier":"allow-applocaldata-write","description":"This allows non-recursive write access to the `$APPLOCALDATA` folder.","permissions":["write-all","scope-applocaldata"]},"allow-applocaldata-write-recursive":{"identifier":"allow-applocaldata-write-recursive","description":"This allows full recursive write access to the complete `$APPLOCALDATA` folder, files and subdirectories.","permissions":["write-all","scope-applocaldata-recursive"]},"allow-applog-meta":{"identifier":"allow-applog-meta","description":"This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.","permissions":["read-meta","scope-applog-index"]},"allow-applog-meta-recursive":{"identifier":"allow-applog-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.","permissions":["read-meta","scope-applog-recursive"]},"allow-applog-read":{"identifier":"allow-applog-read","description":"This allows non-recursive read access to the `$APPLOG` folder.","permissions":["read-all","scope-applog"]},"allow-applog-read-recursive":{"identifier":"allow-applog-read-recursive","description":"This allows full recursive read access to the complete `$APPLOG` folder, files and subdirectories.","permissions":["read-all","scope-applog-recursive"]},"allow-applog-write":{"identifier":"allow-applog-write","description":"This allows non-recursive write access to the `$APPLOG` folder.","permissions":["write-all","scope-applog"]},"allow-applog-write-recursive":{"identifier":"allow-applog-write-recursive","description":"This allows full recursive write access to the complete `$APPLOG` folder, files and subdirectories.","permissions":["write-all","scope-applog-recursive"]},"allow-audio-meta":{"identifier":"allow-audio-meta","description":"This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.","permissions":["read-meta","scope-audio-index"]},"allow-audio-meta-recursive":{"identifier":"allow-audio-meta-recursive","description":"This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.","permissions":["read-meta","scope-audio-recursive"]},"allow-audio-read":{"identifier":"allow-audio-read","description":"This allows non-recursive read access to the `$AUDIO` folder.","permissions":["read-all","scope-audio"]},"allow-audio-read-recursive":{"identifier":"allow-audio-read-recursive","description":"This allows full recursive read access to the complete `$AUDIO` folder, files and subdirectories.","permissions":["read-all","scope-audio-recursive"]},"allow-audio-write":{"identifier":"allow-audio-write","description":"This allows non-recursive write access to the `$AUDIO` folder.","permissions":["write-all","scope-audio"]},"allow-audio-write-recursive":{"identifier":"allow-audio-write-recursive","description":"This allows full recursive write access to the complete `$AUDIO` folder, files and subdirectories.","permissions":["write-all","scope-audio-recursive"]},"allow-cache-meta":{"identifier":"allow-cache-meta","description":"This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-cache-index"]},"allow-cache-meta-recursive":{"identifier":"allow-cache-meta-recursive","description":"This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-cache-recursive"]},"allow-cache-read":{"identifier":"allow-cache-read","description":"This allows non-recursive read access to the `$CACHE` folder.","permissions":["read-all","scope-cache"]},"allow-cache-read-recursive":{"identifier":"allow-cache-read-recursive","description":"This allows full recursive read access to the complete `$CACHE` folder, files and subdirectories.","permissions":["read-all","scope-cache-recursive"]},"allow-cache-write":{"identifier":"allow-cache-write","description":"This allows non-recursive write access to the `$CACHE` folder.","permissions":["write-all","scope-cache"]},"allow-cache-write-recursive":{"identifier":"allow-cache-write-recursive","description":"This allows full recursive write access to the complete `$CACHE` folder, files and subdirectories.","permissions":["write-all","scope-cache-recursive"]},"allow-config-meta":{"identifier":"allow-config-meta","description":"This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-config-index"]},"allow-config-meta-recursive":{"identifier":"allow-config-meta-recursive","description":"This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-config-recursive"]},"allow-config-read":{"identifier":"allow-config-read","description":"This allows non-recursive read access to the `$CONFIG` folder.","permissions":["read-all","scope-config"]},"allow-config-read-recursive":{"identifier":"allow-config-read-recursive","description":"This allows full recursive read access to the complete `$CONFIG` folder, files and subdirectories.","permissions":["read-all","scope-config-recursive"]},"allow-config-write":{"identifier":"allow-config-write","description":"This allows non-recursive write access to the `$CONFIG` folder.","permissions":["write-all","scope-config"]},"allow-config-write-recursive":{"identifier":"allow-config-write-recursive","description":"This allows full recursive write access to the complete `$CONFIG` folder, files and subdirectories.","permissions":["write-all","scope-config-recursive"]},"allow-data-meta":{"identifier":"allow-data-meta","description":"This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.","permissions":["read-meta","scope-data-index"]},"allow-data-meta-recursive":{"identifier":"allow-data-meta-recursive","description":"This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.","permissions":["read-meta","scope-data-recursive"]},"allow-data-read":{"identifier":"allow-data-read","description":"This allows non-recursive read access to the `$DATA` folder.","permissions":["read-all","scope-data"]},"allow-data-read-recursive":{"identifier":"allow-data-read-recursive","description":"This allows full recursive read access to the complete `$DATA` folder, files and subdirectories.","permissions":["read-all","scope-data-recursive"]},"allow-data-write":{"identifier":"allow-data-write","description":"This allows non-recursive write access to the `$DATA` folder.","permissions":["write-all","scope-data"]},"allow-data-write-recursive":{"identifier":"allow-data-write-recursive","description":"This allows full recursive write access to the complete `$DATA` folder, files and subdirectories.","permissions":["write-all","scope-data-recursive"]},"allow-desktop-meta":{"identifier":"allow-desktop-meta","description":"This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.","permissions":["read-meta","scope-desktop-index"]},"allow-desktop-meta-recursive":{"identifier":"allow-desktop-meta-recursive","description":"This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.","permissions":["read-meta","scope-desktop-recursive"]},"allow-desktop-read":{"identifier":"allow-desktop-read","description":"This allows non-recursive read access to the `$DESKTOP` folder.","permissions":["read-all","scope-desktop"]},"allow-desktop-read-recursive":{"identifier":"allow-desktop-read-recursive","description":"This allows full recursive read access to the complete `$DESKTOP` folder, files and subdirectories.","permissions":["read-all","scope-desktop-recursive"]},"allow-desktop-write":{"identifier":"allow-desktop-write","description":"This allows non-recursive write access to the `$DESKTOP` folder.","permissions":["write-all","scope-desktop"]},"allow-desktop-write-recursive":{"identifier":"allow-desktop-write-recursive","description":"This allows full recursive write access to the complete `$DESKTOP` folder, files and subdirectories.","permissions":["write-all","scope-desktop-recursive"]},"allow-document-meta":{"identifier":"allow-document-meta","description":"This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.","permissions":["read-meta","scope-document-index"]},"allow-document-meta-recursive":{"identifier":"allow-document-meta-recursive","description":"This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.","permissions":["read-meta","scope-document-recursive"]},"allow-document-read":{"identifier":"allow-document-read","description":"This allows non-recursive read access to the `$DOCUMENT` folder.","permissions":["read-all","scope-document"]},"allow-document-read-recursive":{"identifier":"allow-document-read-recursive","description":"This allows full recursive read access to the complete `$DOCUMENT` folder, files and subdirectories.","permissions":["read-all","scope-document-recursive"]},"allow-document-write":{"identifier":"allow-document-write","description":"This allows non-recursive write access to the `$DOCUMENT` folder.","permissions":["write-all","scope-document"]},"allow-document-write-recursive":{"identifier":"allow-document-write-recursive","description":"This allows full recursive write access to the complete `$DOCUMENT` folder, files and subdirectories.","permissions":["write-all","scope-document-recursive"]},"allow-download-meta":{"identifier":"allow-download-meta","description":"This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.","permissions":["read-meta","scope-download-index"]},"allow-download-meta-recursive":{"identifier":"allow-download-meta-recursive","description":"This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.","permissions":["read-meta","scope-download-recursive"]},"allow-download-read":{"identifier":"allow-download-read","description":"This allows non-recursive read access to the `$DOWNLOAD` folder.","permissions":["read-all","scope-download"]},"allow-download-read-recursive":{"identifier":"allow-download-read-recursive","description":"This allows full recursive read access to the complete `$DOWNLOAD` folder, files and subdirectories.","permissions":["read-all","scope-download-recursive"]},"allow-download-write":{"identifier":"allow-download-write","description":"This allows non-recursive write access to the `$DOWNLOAD` folder.","permissions":["write-all","scope-download"]},"allow-download-write-recursive":{"identifier":"allow-download-write-recursive","description":"This allows full recursive write access to the complete `$DOWNLOAD` folder, files and subdirectories.","permissions":["write-all","scope-download-recursive"]},"allow-exe-meta":{"identifier":"allow-exe-meta","description":"This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.","permissions":["read-meta","scope-exe-index"]},"allow-exe-meta-recursive":{"identifier":"allow-exe-meta-recursive","description":"This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.","permissions":["read-meta","scope-exe-recursive"]},"allow-exe-read":{"identifier":"allow-exe-read","description":"This allows non-recursive read access to the `$EXE` folder.","permissions":["read-all","scope-exe"]},"allow-exe-read-recursive":{"identifier":"allow-exe-read-recursive","description":"This allows full recursive read access to the complete `$EXE` folder, files and subdirectories.","permissions":["read-all","scope-exe-recursive"]},"allow-exe-write":{"identifier":"allow-exe-write","description":"This allows non-recursive write access to the `$EXE` folder.","permissions":["write-all","scope-exe"]},"allow-exe-write-recursive":{"identifier":"allow-exe-write-recursive","description":"This allows full recursive write access to the complete `$EXE` folder, files and subdirectories.","permissions":["write-all","scope-exe-recursive"]},"allow-font-meta":{"identifier":"allow-font-meta","description":"This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.","permissions":["read-meta","scope-font-index"]},"allow-font-meta-recursive":{"identifier":"allow-font-meta-recursive","description":"This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.","permissions":["read-meta","scope-font-recursive"]},"allow-font-read":{"identifier":"allow-font-read","description":"This allows non-recursive read access to the `$FONT` folder.","permissions":["read-all","scope-font"]},"allow-font-read-recursive":{"identifier":"allow-font-read-recursive","description":"This allows full recursive read access to the complete `$FONT` folder, files and subdirectories.","permissions":["read-all","scope-font-recursive"]},"allow-font-write":{"identifier":"allow-font-write","description":"This allows non-recursive write access to the `$FONT` folder.","permissions":["write-all","scope-font"]},"allow-font-write-recursive":{"identifier":"allow-font-write-recursive","description":"This allows full recursive write access to the complete `$FONT` folder, files and subdirectories.","permissions":["write-all","scope-font-recursive"]},"allow-home-meta":{"identifier":"allow-home-meta","description":"This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.","permissions":["read-meta","scope-home-index"]},"allow-home-meta-recursive":{"identifier":"allow-home-meta-recursive","description":"This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.","permissions":["read-meta","scope-home-recursive"]},"allow-home-read":{"identifier":"allow-home-read","description":"This allows non-recursive read access to the `$HOME` folder.","permissions":["read-all","scope-home"]},"allow-home-read-recursive":{"identifier":"allow-home-read-recursive","description":"This allows full recursive read access to the complete `$HOME` folder, files and subdirectories.","permissions":["read-all","scope-home-recursive"]},"allow-home-write":{"identifier":"allow-home-write","description":"This allows non-recursive write access to the `$HOME` folder.","permissions":["write-all","scope-home"]},"allow-home-write-recursive":{"identifier":"allow-home-write-recursive","description":"This allows full recursive write access to the complete `$HOME` folder, files and subdirectories.","permissions":["write-all","scope-home-recursive"]},"allow-localdata-meta":{"identifier":"allow-localdata-meta","description":"This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-localdata-index"]},"allow-localdata-meta-recursive":{"identifier":"allow-localdata-meta-recursive","description":"This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-localdata-recursive"]},"allow-localdata-read":{"identifier":"allow-localdata-read","description":"This allows non-recursive read access to the `$LOCALDATA` folder.","permissions":["read-all","scope-localdata"]},"allow-localdata-read-recursive":{"identifier":"allow-localdata-read-recursive","description":"This allows full recursive read access to the complete `$LOCALDATA` folder, files and subdirectories.","permissions":["read-all","scope-localdata-recursive"]},"allow-localdata-write":{"identifier":"allow-localdata-write","description":"This allows non-recursive write access to the `$LOCALDATA` folder.","permissions":["write-all","scope-localdata"]},"allow-localdata-write-recursive":{"identifier":"allow-localdata-write-recursive","description":"This allows full recursive write access to the complete `$LOCALDATA` folder, files and subdirectories.","permissions":["write-all","scope-localdata-recursive"]},"allow-log-meta":{"identifier":"allow-log-meta","description":"This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.","permissions":["read-meta","scope-log-index"]},"allow-log-meta-recursive":{"identifier":"allow-log-meta-recursive","description":"This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.","permissions":["read-meta","scope-log-recursive"]},"allow-log-read":{"identifier":"allow-log-read","description":"This allows non-recursive read access to the `$LOG` folder.","permissions":["read-all","scope-log"]},"allow-log-read-recursive":{"identifier":"allow-log-read-recursive","description":"This allows full recursive read access to the complete `$LOG` folder, files and subdirectories.","permissions":["read-all","scope-log-recursive"]},"allow-log-write":{"identifier":"allow-log-write","description":"This allows non-recursive write access to the `$LOG` folder.","permissions":["write-all","scope-log"]},"allow-log-write-recursive":{"identifier":"allow-log-write-recursive","description":"This allows full recursive write access to the complete `$LOG` folder, files and subdirectories.","permissions":["write-all","scope-log-recursive"]},"allow-picture-meta":{"identifier":"allow-picture-meta","description":"This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.","permissions":["read-meta","scope-picture-index"]},"allow-picture-meta-recursive":{"identifier":"allow-picture-meta-recursive","description":"This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.","permissions":["read-meta","scope-picture-recursive"]},"allow-picture-read":{"identifier":"allow-picture-read","description":"This allows non-recursive read access to the `$PICTURE` folder.","permissions":["read-all","scope-picture"]},"allow-picture-read-recursive":{"identifier":"allow-picture-read-recursive","description":"This allows full recursive read access to the complete `$PICTURE` folder, files and subdirectories.","permissions":["read-all","scope-picture-recursive"]},"allow-picture-write":{"identifier":"allow-picture-write","description":"This allows non-recursive write access to the `$PICTURE` folder.","permissions":["write-all","scope-picture"]},"allow-picture-write-recursive":{"identifier":"allow-picture-write-recursive","description":"This allows full recursive write access to the complete `$PICTURE` folder, files and subdirectories.","permissions":["write-all","scope-picture-recursive"]},"allow-public-meta":{"identifier":"allow-public-meta","description":"This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.","permissions":["read-meta","scope-public-index"]},"allow-public-meta-recursive":{"identifier":"allow-public-meta-recursive","description":"This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.","permissions":["read-meta","scope-public-recursive"]},"allow-public-read":{"identifier":"allow-public-read","description":"This allows non-recursive read access to the `$PUBLIC` folder.","permissions":["read-all","scope-public"]},"allow-public-read-recursive":{"identifier":"allow-public-read-recursive","description":"This allows full recursive read access to the complete `$PUBLIC` folder, files and subdirectories.","permissions":["read-all","scope-public-recursive"]},"allow-public-write":{"identifier":"allow-public-write","description":"This allows non-recursive write access to the `$PUBLIC` folder.","permissions":["write-all","scope-public"]},"allow-public-write-recursive":{"identifier":"allow-public-write-recursive","description":"This allows full recursive write access to the complete `$PUBLIC` folder, files and subdirectories.","permissions":["write-all","scope-public-recursive"]},"allow-resource-meta":{"identifier":"allow-resource-meta","description":"This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.","permissions":["read-meta","scope-resource-index"]},"allow-resource-meta-recursive":{"identifier":"allow-resource-meta-recursive","description":"This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.","permissions":["read-meta","scope-resource-recursive"]},"allow-resource-read":{"identifier":"allow-resource-read","description":"This allows non-recursive read access to the `$RESOURCE` folder.","permissions":["read-all","scope-resource"]},"allow-resource-read-recursive":{"identifier":"allow-resource-read-recursive","description":"This allows full recursive read access to the complete `$RESOURCE` folder, files and subdirectories.","permissions":["read-all","scope-resource-recursive"]},"allow-resource-write":{"identifier":"allow-resource-write","description":"This allows non-recursive write access to the `$RESOURCE` folder.","permissions":["write-all","scope-resource"]},"allow-resource-write-recursive":{"identifier":"allow-resource-write-recursive","description":"This allows full recursive write access to the complete `$RESOURCE` folder, files and subdirectories.","permissions":["write-all","scope-resource-recursive"]},"allow-runtime-meta":{"identifier":"allow-runtime-meta","description":"This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.","permissions":["read-meta","scope-runtime-index"]},"allow-runtime-meta-recursive":{"identifier":"allow-runtime-meta-recursive","description":"This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.","permissions":["read-meta","scope-runtime-recursive"]},"allow-runtime-read":{"identifier":"allow-runtime-read","description":"This allows non-recursive read access to the `$RUNTIME` folder.","permissions":["read-all","scope-runtime"]},"allow-runtime-read-recursive":{"identifier":"allow-runtime-read-recursive","description":"This allows full recursive read access to the complete `$RUNTIME` folder, files and subdirectories.","permissions":["read-all","scope-runtime-recursive"]},"allow-runtime-write":{"identifier":"allow-runtime-write","description":"This allows non-recursive write access to the `$RUNTIME` folder.","permissions":["write-all","scope-runtime"]},"allow-runtime-write-recursive":{"identifier":"allow-runtime-write-recursive","description":"This allows full recursive write access to the complete `$RUNTIME` folder, files and subdirectories.","permissions":["write-all","scope-runtime-recursive"]},"allow-temp-meta":{"identifier":"allow-temp-meta","description":"This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.","permissions":["read-meta","scope-temp-index"]},"allow-temp-meta-recursive":{"identifier":"allow-temp-meta-recursive","description":"This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.","permissions":["read-meta","scope-temp-recursive"]},"allow-temp-read":{"identifier":"allow-temp-read","description":"This allows non-recursive read access to the `$TEMP` folder.","permissions":["read-all","scope-temp"]},"allow-temp-read-recursive":{"identifier":"allow-temp-read-recursive","description":"This allows full recursive read access to the complete `$TEMP` folder, files and subdirectories.","permissions":["read-all","scope-temp-recursive"]},"allow-temp-write":{"identifier":"allow-temp-write","description":"This allows non-recursive write access to the `$TEMP` folder.","permissions":["write-all","scope-temp"]},"allow-temp-write-recursive":{"identifier":"allow-temp-write-recursive","description":"This allows full recursive write access to the complete `$TEMP` folder, files and subdirectories.","permissions":["write-all","scope-temp-recursive"]},"allow-template-meta":{"identifier":"allow-template-meta","description":"This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.","permissions":["read-meta","scope-template-index"]},"allow-template-meta-recursive":{"identifier":"allow-template-meta-recursive","description":"This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.","permissions":["read-meta","scope-template-recursive"]},"allow-template-read":{"identifier":"allow-template-read","description":"This allows non-recursive read access to the `$TEMPLATE` folder.","permissions":["read-all","scope-template"]},"allow-template-read-recursive":{"identifier":"allow-template-read-recursive","description":"This allows full recursive read access to the complete `$TEMPLATE` folder, files and subdirectories.","permissions":["read-all","scope-template-recursive"]},"allow-template-write":{"identifier":"allow-template-write","description":"This allows non-recursive write access to the `$TEMPLATE` folder.","permissions":["write-all","scope-template"]},"allow-template-write-recursive":{"identifier":"allow-template-write-recursive","description":"This allows full recursive write access to the complete `$TEMPLATE` folder, files and subdirectories.","permissions":["write-all","scope-template-recursive"]},"allow-video-meta":{"identifier":"allow-video-meta","description":"This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.","permissions":["read-meta","scope-video-index"]},"allow-video-meta-recursive":{"identifier":"allow-video-meta-recursive","description":"This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.","permissions":["read-meta","scope-video-recursive"]},"allow-video-read":{"identifier":"allow-video-read","description":"This allows non-recursive read access to the `$VIDEO` folder.","permissions":["read-all","scope-video"]},"allow-video-read-recursive":{"identifier":"allow-video-read-recursive","description":"This allows full recursive read access to the complete `$VIDEO` folder, files and subdirectories.","permissions":["read-all","scope-video-recursive"]},"allow-video-write":{"identifier":"allow-video-write","description":"This allows non-recursive write access to the `$VIDEO` folder.","permissions":["write-all","scope-video"]},"allow-video-write-recursive":{"identifier":"allow-video-write-recursive","description":"This allows full recursive write access to the complete `$VIDEO` folder, files and subdirectories.","permissions":["write-all","scope-video-recursive"]},"deny-default":{"identifier":"deny-default","description":"This denies access to dangerous Tauri relevant files and folders by default.","permissions":["deny-webview-data-linux","deny-webview-data-windows"]}},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"FS scope path.","type":"string"},{"properties":{"path":{"description":"FS scope path.","type":"string"}},"required":["path"],"type":"object"}],"description":"FS scope entry.","title":"FsScopeEntry"}},"image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"log":{"default_permission":{"identifier":"default","description":"Allows the log command","permissions":["allow-log"]},"permissions":{"allow-log":{"identifier":"allow-log","description":"Enables the log command without any pre-configured scope.","commands":{"allow":["log"],"deny":[]}},"deny-log":{"identifier":"deny-log","description":"Denies the log command without any pre-configured scope.","commands":{"allow":[],"deny":["log"]}}},"permission_sets":{},"global_scope_schema":null},"menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"os":{"default_permission":{"identifier":"default","description":"This permission set configures which\noperating system information are available\nto gather from the frontend.\n\n#### Granted Permissions\n\nAll information except the host name are available.\n\n","permissions":["allow-arch","allow-exe-extension","allow-family","allow-locale","allow-os-type","allow-platform","allow-version"]},"permissions":{"allow-arch":{"identifier":"allow-arch","description":"Enables the arch command without any pre-configured scope.","commands":{"allow":["arch"],"deny":[]}},"allow-exe-extension":{"identifier":"allow-exe-extension","description":"Enables the exe_extension command without any pre-configured scope.","commands":{"allow":["exe_extension"],"deny":[]}},"allow-family":{"identifier":"allow-family","description":"Enables the family command without any pre-configured scope.","commands":{"allow":["family"],"deny":[]}},"allow-hostname":{"identifier":"allow-hostname","description":"Enables the hostname command without any pre-configured scope.","commands":{"allow":["hostname"],"deny":[]}},"allow-locale":{"identifier":"allow-locale","description":"Enables the locale command without any pre-configured scope.","commands":{"allow":["locale"],"deny":[]}},"allow-os-type":{"identifier":"allow-os-type","description":"Enables the os_type command without any pre-configured scope.","commands":{"allow":["os_type"],"deny":[]}},"allow-platform":{"identifier":"allow-platform","description":"Enables the platform command without any pre-configured scope.","commands":{"allow":["platform"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-arch":{"identifier":"deny-arch","description":"Denies the arch command without any pre-configured scope.","commands":{"allow":[],"deny":["arch"]}},"deny-exe-extension":{"identifier":"deny-exe-extension","description":"Denies the exe_extension command without any pre-configured scope.","commands":{"allow":[],"deny":["exe_extension"]}},"deny-family":{"identifier":"deny-family","description":"Denies the family command without any pre-configured scope.","commands":{"allow":[],"deny":["family"]}},"deny-hostname":{"identifier":"deny-hostname","description":"Denies the hostname command without any pre-configured scope.","commands":{"allow":[],"deny":["hostname"]}},"deny-locale":{"identifier":"deny-locale","description":"Denies the locale command without any pre-configured scope.","commands":{"allow":[],"deny":["locale"]}},"deny-os-type":{"identifier":"deny-os-type","description":"Denies the os_type command without any pre-configured scope.","commands":{"allow":[],"deny":["os_type"]}},"deny-platform":{"identifier":"deny-platform","description":"Denies the platform command without any pre-configured scope.","commands":{"allow":[],"deny":["platform"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"shell":{"default_permission":{"identifier":"default","description":"This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n","permissions":["allow-open"]},"permissions":{"allow-execute":{"identifier":"allow-execute","description":"Enables the execute command without any pre-configured scope.","commands":{"allow":["execute"],"deny":[]}},"allow-kill":{"identifier":"allow-kill","description":"Enables the kill command without any pre-configured scope.","commands":{"allow":["kill"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-spawn":{"identifier":"allow-spawn","description":"Enables the spawn command without any pre-configured scope.","commands":{"allow":["spawn"],"deny":[]}},"allow-stdin-write":{"identifier":"allow-stdin-write","description":"Enables the stdin_write command without any pre-configured scope.","commands":{"allow":["stdin_write"],"deny":[]}},"deny-execute":{"identifier":"deny-execute","description":"Denies the execute command without any pre-configured scope.","commands":{"allow":[],"deny":["execute"]}},"deny-kill":{"identifier":"deny-kill","description":"Denies the kill command without any pre-configured scope.","commands":{"allow":[],"deny":["kill"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-spawn":{"identifier":"deny-spawn","description":"Denies the spawn command without any pre-configured scope.","commands":{"allow":[],"deny":["spawn"]}},"deny-stdin-write":{"identifier":"deny-stdin-write","description":"Denies the stdin_write command without any pre-configured scope.","commands":{"allow":[],"deny":["stdin_write"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","definitions":{"ShellAllowedArg":{"anyOf":[{"description":"A non-configurable argument that is passed to the command in the order it was specified.","type":"string"},{"additionalProperties":false,"description":"A variable that is set while calling the command from the webview API.","properties":{"validator":{"description":"[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\n[regex]: https://docs.rs/regex/latest/regex/#syntax","type":"string"}},"required":["validator"],"type":"object"}],"description":"A command argument allowed to be executed by the webview API."},"ShellAllowedArgs":{"anyOf":[{"description":"Use a simple boolean to allow all or disable all arguments to this command configuration.","type":"boolean"},{"description":"A specific set of [`ShellAllowedArg`] that are valid to call for the command configuration.","items":{"$ref":"#/definitions/ShellAllowedArg"},"type":"array"}],"description":"A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration."}},"description":"A command allowed to be executed by the webview API.","properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellAllowedArgs"}],"description":"The allowed arguments for the command execution."},"cmd":{"description":"The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"},"sidecar":{"description":"If this command is a sidecar command.","type":"boolean"}},"required":["args","cmd","name","sidecar"],"title":"Entry","type":"object"}},"tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null},"webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"window-state":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-filename","allow-restore-state","allow-save-window-state"]},"permissions":{"allow-filename":{"identifier":"allow-filename","description":"Enables the filename command without any pre-configured scope.","commands":{"allow":["filename"],"deny":[]}},"allow-restore-state":{"identifier":"allow-restore-state","description":"Enables the restore_state command without any pre-configured scope.","commands":{"allow":["restore_state"],"deny":[]}},"allow-save-window-state":{"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]}},"deny-filename":{"identifier":"deny-filename","description":"Denies the filename command without any pre-configured scope.","commands":{"allow":[],"deny":["filename"]}},"deny-restore-state":{"identifier":"deny-restore-state","description":"Denies the restore_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_state"]}},"deny-save-window-state":{"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file +{"clipboard-manager":{"default_permission":{"identifier":"default","description":"No features are enabled by default, as we believe\nthe clipboard can be inherently dangerous and it is \napplication specific if read and/or write access is needed.\n\nClipboard interaction needs to be explicitly enabled.\n","permissions":[]},"permissions":{"allow-clear":{"identifier":"allow-clear","description":"Enables the clear command without any pre-configured scope.","commands":{"allow":["clear"],"deny":[]}},"allow-read-image":{"identifier":"allow-read-image","description":"Enables the read_image command without any pre-configured scope.","commands":{"allow":["read_image"],"deny":[]}},"allow-read-text":{"identifier":"allow-read-text","description":"Enables the read_text command without any pre-configured scope.","commands":{"allow":["read_text"],"deny":[]}},"allow-write-html":{"identifier":"allow-write-html","description":"Enables the write_html command without any pre-configured scope.","commands":{"allow":["write_html"],"deny":[]}},"allow-write-image":{"identifier":"allow-write-image","description":"Enables the write_image command without any pre-configured scope.","commands":{"allow":["write_image"],"deny":[]}},"allow-write-text":{"identifier":"allow-write-text","description":"Enables the write_text command without any pre-configured scope.","commands":{"allow":["write_text"],"deny":[]}},"deny-clear":{"identifier":"deny-clear","description":"Denies the clear command without any pre-configured scope.","commands":{"allow":[],"deny":["clear"]}},"deny-read-image":{"identifier":"deny-read-image","description":"Denies the read_image command without any pre-configured scope.","commands":{"allow":[],"deny":["read_image"]}},"deny-read-text":{"identifier":"deny-read-text","description":"Denies the read_text command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text"]}},"deny-write-html":{"identifier":"deny-write-html","description":"Denies the write_html command without any pre-configured scope.","commands":{"allow":[],"deny":["write_html"]}},"deny-write-image":{"identifier":"deny-write-image","description":"Denies the write_image command without any pre-configured scope.","commands":{"allow":[],"deny":["write_image"]}},"deny-write-text":{"identifier":"deny-write-text","description":"Denies the write_text command without any pre-configured scope.","commands":{"allow":[],"deny":["write_text"]}}},"permission_sets":{},"global_scope_schema":null},"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"dialog":{"default_permission":{"identifier":"default","description":"This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n","permissions":["allow-ask","allow-confirm","allow-message","allow-save","allow-open"]},"permissions":{"allow-ask":{"identifier":"allow-ask","description":"Enables the ask command without any pre-configured scope.","commands":{"allow":["ask"],"deny":[]}},"allow-confirm":{"identifier":"allow-confirm","description":"Enables the confirm command without any pre-configured scope.","commands":{"allow":["confirm"],"deny":[]}},"allow-message":{"identifier":"allow-message","description":"Enables the message command without any pre-configured scope.","commands":{"allow":["message"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"deny-ask":{"identifier":"deny-ask","description":"Denies the ask command without any pre-configured scope.","commands":{"allow":[],"deny":["ask"]}},"deny-confirm":{"identifier":"deny-confirm","description":"Denies the confirm command without any pre-configured scope.","commands":{"allow":[],"deny":["confirm"]}},"deny-message":{"identifier":"deny-message","description":"Denies the message command without any pre-configured scope.","commands":{"allow":[],"deny":["message"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}}},"permission_sets":{},"global_scope_schema":null},"fs":{"default_permission":{"identifier":"default","description":"This set of permissions describes the what kind of\nfile system access the `fs` plugin has enabled or denied by default.\n\n#### Granted Permissions\n\nThis default permission set enables read access to the\napplication specific directories (AppConfig, AppData, AppLocalData, AppCache,\nAppLog) and all files and sub directories created in it.\nThe location of these directories depends on the operating system,\nwhere the application is run.\n\nIn general these directories need to be manually created\nby the application at runtime, before accessing files or folders\nin it is possible.\n\nTherefore, it is also allowed to create all of these folders via\nthe `mkdir` command.\n\n#### Denied Permissions\n\nThis default permission set prevents access to critical components\nof the Tauri application by default.\nOn Windows the webview data folder access is denied.\n\n","permissions":["create-app-specific-dirs","read-app-specific-dirs-recursive","deny-default"]},"permissions":{"allow-copy-file":{"identifier":"allow-copy-file","description":"Enables the copy_file command without any pre-configured scope.","commands":{"allow":["copy_file"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-exists":{"identifier":"allow-exists","description":"Enables the exists command without any pre-configured scope.","commands":{"allow":["exists"],"deny":[]}},"allow-fstat":{"identifier":"allow-fstat","description":"Enables the fstat command without any pre-configured scope.","commands":{"allow":["fstat"],"deny":[]}},"allow-ftruncate":{"identifier":"allow-ftruncate","description":"Enables the ftruncate command without any pre-configured scope.","commands":{"allow":["ftruncate"],"deny":[]}},"allow-lstat":{"identifier":"allow-lstat","description":"Enables the lstat command without any pre-configured scope.","commands":{"allow":["lstat"],"deny":[]}},"allow-mkdir":{"identifier":"allow-mkdir","description":"Enables the mkdir command without any pre-configured scope.","commands":{"allow":["mkdir"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-read":{"identifier":"allow-read","description":"Enables the read command without any pre-configured scope.","commands":{"allow":["read"],"deny":[]}},"allow-read-dir":{"identifier":"allow-read-dir","description":"Enables the read_dir command without any pre-configured scope.","commands":{"allow":["read_dir"],"deny":[]}},"allow-read-file":{"identifier":"allow-read-file","description":"Enables the read_file command without any pre-configured scope.","commands":{"allow":["read_file"],"deny":[]}},"allow-read-text-file":{"identifier":"allow-read-text-file","description":"Enables the read_text_file command without any pre-configured scope.","commands":{"allow":["read_text_file"],"deny":[]}},"allow-read-text-file-lines":{"identifier":"allow-read-text-file-lines","description":"Enables the read_text_file_lines command without any pre-configured scope.","commands":{"allow":["read_text_file_lines"],"deny":[]}},"allow-read-text-file-lines-next":{"identifier":"allow-read-text-file-lines-next","description":"Enables the read_text_file_lines_next command without any pre-configured scope.","commands":{"allow":["read_text_file_lines_next"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-rename":{"identifier":"allow-rename","description":"Enables the rename command without any pre-configured scope.","commands":{"allow":["rename"],"deny":[]}},"allow-seek":{"identifier":"allow-seek","description":"Enables the seek command without any pre-configured scope.","commands":{"allow":["seek"],"deny":[]}},"allow-stat":{"identifier":"allow-stat","description":"Enables the stat command without any pre-configured scope.","commands":{"allow":["stat"],"deny":[]}},"allow-truncate":{"identifier":"allow-truncate","description":"Enables the truncate command without any pre-configured scope.","commands":{"allow":["truncate"],"deny":[]}},"allow-unwatch":{"identifier":"allow-unwatch","description":"Enables the unwatch command without any pre-configured scope.","commands":{"allow":["unwatch"],"deny":[]}},"allow-watch":{"identifier":"allow-watch","description":"Enables the watch command without any pre-configured scope.","commands":{"allow":["watch"],"deny":[]}},"allow-write":{"identifier":"allow-write","description":"Enables the write command without any pre-configured scope.","commands":{"allow":["write"],"deny":[]}},"allow-write-file":{"identifier":"allow-write-file","description":"Enables the write_file command without any pre-configured scope.","commands":{"allow":["write_file"],"deny":[]}},"allow-write-text-file":{"identifier":"allow-write-text-file","description":"Enables the write_text_file command without any pre-configured scope.","commands":{"allow":["write_text_file"],"deny":[]}},"create-app-specific-dirs":{"identifier":"create-app-specific-dirs","description":"This permissions allows to create the application specific directories.\n","commands":{"allow":["mkdir"],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG"},{"path":"$APPDATA"},{"path":"$APPLOCALDATA"},{"path":"$APPCACHE"},{"path":"$APPLOG"}]}},"deny-copy-file":{"identifier":"deny-copy-file","description":"Denies the copy_file command without any pre-configured scope.","commands":{"allow":[],"deny":["copy_file"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-exists":{"identifier":"deny-exists","description":"Denies the exists command without any pre-configured scope.","commands":{"allow":[],"deny":["exists"]}},"deny-fstat":{"identifier":"deny-fstat","description":"Denies the fstat command without any pre-configured scope.","commands":{"allow":[],"deny":["fstat"]}},"deny-ftruncate":{"identifier":"deny-ftruncate","description":"Denies the ftruncate command without any pre-configured scope.","commands":{"allow":[],"deny":["ftruncate"]}},"deny-lstat":{"identifier":"deny-lstat","description":"Denies the lstat command without any pre-configured scope.","commands":{"allow":[],"deny":["lstat"]}},"deny-mkdir":{"identifier":"deny-mkdir","description":"Denies the mkdir command without any pre-configured scope.","commands":{"allow":[],"deny":["mkdir"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-read":{"identifier":"deny-read","description":"Denies the read command without any pre-configured scope.","commands":{"allow":[],"deny":["read"]}},"deny-read-dir":{"identifier":"deny-read-dir","description":"Denies the read_dir command without any pre-configured scope.","commands":{"allow":[],"deny":["read_dir"]}},"deny-read-file":{"identifier":"deny-read-file","description":"Denies the read_file command without any pre-configured scope.","commands":{"allow":[],"deny":["read_file"]}},"deny-read-text-file":{"identifier":"deny-read-text-file","description":"Denies the read_text_file command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file"]}},"deny-read-text-file-lines":{"identifier":"deny-read-text-file-lines","description":"Denies the read_text_file_lines command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file_lines"]}},"deny-read-text-file-lines-next":{"identifier":"deny-read-text-file-lines-next","description":"Denies the read_text_file_lines_next command without any pre-configured scope.","commands":{"allow":[],"deny":["read_text_file_lines_next"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-rename":{"identifier":"deny-rename","description":"Denies the rename command without any pre-configured scope.","commands":{"allow":[],"deny":["rename"]}},"deny-seek":{"identifier":"deny-seek","description":"Denies the seek command without any pre-configured scope.","commands":{"allow":[],"deny":["seek"]}},"deny-stat":{"identifier":"deny-stat","description":"Denies the stat command without any pre-configured scope.","commands":{"allow":[],"deny":["stat"]}},"deny-truncate":{"identifier":"deny-truncate","description":"Denies the truncate command without any pre-configured scope.","commands":{"allow":[],"deny":["truncate"]}},"deny-unwatch":{"identifier":"deny-unwatch","description":"Denies the unwatch command without any pre-configured scope.","commands":{"allow":[],"deny":["unwatch"]}},"deny-watch":{"identifier":"deny-watch","description":"Denies the watch command without any pre-configured scope.","commands":{"allow":[],"deny":["watch"]}},"deny-webview-data-linux":{"identifier":"deny-webview-data-linux","description":"This denies read access to the\n`$APPLOCALDATA` folder on linux as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.","commands":{"allow":[],"deny":[]}},"deny-webview-data-windows":{"identifier":"deny-webview-data-windows","description":"This denies read access to the\n`$APPLOCALDATA/EBWebView` folder on windows as the webview data and configuration values are stored here.\nAllowing access can lead to sensitive information disclosure and should be well considered.","commands":{"allow":[],"deny":[]}},"deny-write":{"identifier":"deny-write","description":"Denies the write command without any pre-configured scope.","commands":{"allow":[],"deny":["write"]}},"deny-write-file":{"identifier":"deny-write-file","description":"Denies the write_file command without any pre-configured scope.","commands":{"allow":[],"deny":["write_file"]}},"deny-write-text-file":{"identifier":"deny-write-text-file","description":"Denies the write_text_file command without any pre-configured scope.","commands":{"allow":[],"deny":["write_text_file"]}},"read-all":{"identifier":"read-all","description":"This enables all read related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","read_file","read","open","read_text_file","read_text_file_lines","read_text_file_lines_next","seek","stat","lstat","fstat","exists","watch","unwatch"],"deny":[]}},"read-app-specific-dirs-recursive":{"identifier":"read-app-specific-dirs-recursive","description":"This permission allows recursive read functionality on the application\nspecific base directories. \n","commands":{"allow":["read_dir","read_file","read_text_file","read_text_file_lines","read_text_file_lines_next","exists"],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG/**"},{"path":"$APPDATA/**"},{"path":"$APPLOCALDATA/**"},{"path":"$APPCACHE/**"},{"path":"$APPLOG/**"}]}},"read-dirs":{"identifier":"read-dirs","description":"This enables directory read and file metadata related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","stat","lstat","fstat","exists"],"deny":[]}},"read-files":{"identifier":"read-files","description":"This enables file read related commands without any pre-configured accessible paths.","commands":{"allow":["read_file","read","open","read_text_file","read_text_file_lines","read_text_file_lines_next","seek","stat","lstat","fstat","exists"],"deny":[]}},"read-meta":{"identifier":"read-meta","description":"This enables all index or metadata related commands without any pre-configured accessible paths.","commands":{"allow":["read_dir","stat","lstat","fstat","exists"],"deny":[]}},"scope":{"identifier":"scope","description":"An empty permission you can use to modify the global scope.","commands":{"allow":[],"deny":[]}},"scope-app":{"identifier":"scope-app","description":"This scope permits access to all files and list content of top level directories in the `$APP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APP/*"}]}},"scope-app-index":{"identifier":"scope-app-index","description":"This scope permits to list all files and folders in the `$APP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APP/"}]}},"scope-app-recursive":{"identifier":"scope-app-recursive","description":"This scope permits recursive access to the complete `$APP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APP/**"}]}},"scope-appcache":{"identifier":"scope-appcache","description":"This scope permits access to all files and list content of top level directories in the `$APPCACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE/*"}]}},"scope-appcache-index":{"identifier":"scope-appcache-index","description":"This scope permits to list all files and folders in the `$APPCACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE/"}]}},"scope-appcache-recursive":{"identifier":"scope-appcache-recursive","description":"This scope permits recursive access to the complete `$APPCACHE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCACHE/**"}]}},"scope-appconfig":{"identifier":"scope-appconfig","description":"This scope permits access to all files and list content of top level directories in the `$APPCONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG/*"}]}},"scope-appconfig-index":{"identifier":"scope-appconfig-index","description":"This scope permits to list all files and folders in the `$APPCONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG/"}]}},"scope-appconfig-recursive":{"identifier":"scope-appconfig-recursive","description":"This scope permits recursive access to the complete `$APPCONFIG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPCONFIG/**"}]}},"scope-appdata":{"identifier":"scope-appdata","description":"This scope permits access to all files and list content of top level directories in the `$APPDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA/*"}]}},"scope-appdata-index":{"identifier":"scope-appdata-index","description":"This scope permits to list all files and folders in the `$APPDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA/"}]}},"scope-appdata-recursive":{"identifier":"scope-appdata-recursive","description":"This scope permits recursive access to the complete `$APPDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPDATA/**"}]}},"scope-applocaldata":{"identifier":"scope-applocaldata","description":"This scope permits access to all files and list content of top level directories in the `$APPLOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA/*"}]}},"scope-applocaldata-index":{"identifier":"scope-applocaldata-index","description":"This scope permits to list all files and folders in the `$APPLOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA/"}]}},"scope-applocaldata-recursive":{"identifier":"scope-applocaldata-recursive","description":"This scope permits recursive access to the complete `$APPLOCALDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOCALDATA/**"}]}},"scope-applog":{"identifier":"scope-applog","description":"This scope permits access to all files and list content of top level directories in the `$APPLOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG/*"}]}},"scope-applog-index":{"identifier":"scope-applog-index","description":"This scope permits to list all files and folders in the `$APPLOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG/"}]}},"scope-applog-recursive":{"identifier":"scope-applog-recursive","description":"This scope permits recursive access to the complete `$APPLOG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$APPLOG/**"}]}},"scope-audio":{"identifier":"scope-audio","description":"This scope permits access to all files and list content of top level directories in the `$AUDIO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO/*"}]}},"scope-audio-index":{"identifier":"scope-audio-index","description":"This scope permits to list all files and folders in the `$AUDIO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO/"}]}},"scope-audio-recursive":{"identifier":"scope-audio-recursive","description":"This scope permits recursive access to the complete `$AUDIO` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$AUDIO/**"}]}},"scope-cache":{"identifier":"scope-cache","description":"This scope permits access to all files and list content of top level directories in the `$CACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE/*"}]}},"scope-cache-index":{"identifier":"scope-cache-index","description":"This scope permits to list all files and folders in the `$CACHE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE/"}]}},"scope-cache-recursive":{"identifier":"scope-cache-recursive","description":"This scope permits recursive access to the complete `$CACHE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CACHE/**"}]}},"scope-config":{"identifier":"scope-config","description":"This scope permits access to all files and list content of top level directories in the `$CONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG/*"}]}},"scope-config-index":{"identifier":"scope-config-index","description":"This scope permits to list all files and folders in the `$CONFIG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG/"}]}},"scope-config-recursive":{"identifier":"scope-config-recursive","description":"This scope permits recursive access to the complete `$CONFIG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$CONFIG/**"}]}},"scope-data":{"identifier":"scope-data","description":"This scope permits access to all files and list content of top level directories in the `$DATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA/*"}]}},"scope-data-index":{"identifier":"scope-data-index","description":"This scope permits to list all files and folders in the `$DATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA/"}]}},"scope-data-recursive":{"identifier":"scope-data-recursive","description":"This scope permits recursive access to the complete `$DATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DATA/**"}]}},"scope-desktop":{"identifier":"scope-desktop","description":"This scope permits access to all files and list content of top level directories in the `$DESKTOP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP/*"}]}},"scope-desktop-index":{"identifier":"scope-desktop-index","description":"This scope permits to list all files and folders in the `$DESKTOP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP/"}]}},"scope-desktop-recursive":{"identifier":"scope-desktop-recursive","description":"This scope permits recursive access to the complete `$DESKTOP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DESKTOP/**"}]}},"scope-document":{"identifier":"scope-document","description":"This scope permits access to all files and list content of top level directories in the `$DOCUMENT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT/*"}]}},"scope-document-index":{"identifier":"scope-document-index","description":"This scope permits to list all files and folders in the `$DOCUMENT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT/"}]}},"scope-document-recursive":{"identifier":"scope-document-recursive","description":"This scope permits recursive access to the complete `$DOCUMENT` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOCUMENT/**"}]}},"scope-download":{"identifier":"scope-download","description":"This scope permits access to all files and list content of top level directories in the `$DOWNLOAD`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD/*"}]}},"scope-download-index":{"identifier":"scope-download-index","description":"This scope permits to list all files and folders in the `$DOWNLOAD`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD/"}]}},"scope-download-recursive":{"identifier":"scope-download-recursive","description":"This scope permits recursive access to the complete `$DOWNLOAD` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$DOWNLOAD/**"}]}},"scope-exe":{"identifier":"scope-exe","description":"This scope permits access to all files and list content of top level directories in the `$EXE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE/*"}]}},"scope-exe-index":{"identifier":"scope-exe-index","description":"This scope permits to list all files and folders in the `$EXE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE/"}]}},"scope-exe-recursive":{"identifier":"scope-exe-recursive","description":"This scope permits recursive access to the complete `$EXE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$EXE/**"}]}},"scope-font":{"identifier":"scope-font","description":"This scope permits access to all files and list content of top level directories in the `$FONT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT/*"}]}},"scope-font-index":{"identifier":"scope-font-index","description":"This scope permits to list all files and folders in the `$FONT`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT/"}]}},"scope-font-recursive":{"identifier":"scope-font-recursive","description":"This scope permits recursive access to the complete `$FONT` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$FONT/**"}]}},"scope-home":{"identifier":"scope-home","description":"This scope permits access to all files and list content of top level directories in the `$HOME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME/*"}]}},"scope-home-index":{"identifier":"scope-home-index","description":"This scope permits to list all files and folders in the `$HOME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME/"}]}},"scope-home-recursive":{"identifier":"scope-home-recursive","description":"This scope permits recursive access to the complete `$HOME` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$HOME/**"}]}},"scope-localdata":{"identifier":"scope-localdata","description":"This scope permits access to all files and list content of top level directories in the `$LOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA/*"}]}},"scope-localdata-index":{"identifier":"scope-localdata-index","description":"This scope permits to list all files and folders in the `$LOCALDATA`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA/"}]}},"scope-localdata-recursive":{"identifier":"scope-localdata-recursive","description":"This scope permits recursive access to the complete `$LOCALDATA` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOCALDATA/**"}]}},"scope-log":{"identifier":"scope-log","description":"This scope permits access to all files and list content of top level directories in the `$LOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG/*"}]}},"scope-log-index":{"identifier":"scope-log-index","description":"This scope permits to list all files and folders in the `$LOG`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG/"}]}},"scope-log-recursive":{"identifier":"scope-log-recursive","description":"This scope permits recursive access to the complete `$LOG` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$LOG/**"}]}},"scope-picture":{"identifier":"scope-picture","description":"This scope permits access to all files and list content of top level directories in the `$PICTURE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE/*"}]}},"scope-picture-index":{"identifier":"scope-picture-index","description":"This scope permits to list all files and folders in the `$PICTURE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE/"}]}},"scope-picture-recursive":{"identifier":"scope-picture-recursive","description":"This scope permits recursive access to the complete `$PICTURE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PICTURE/**"}]}},"scope-public":{"identifier":"scope-public","description":"This scope permits access to all files and list content of top level directories in the `$PUBLIC`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC/*"}]}},"scope-public-index":{"identifier":"scope-public-index","description":"This scope permits to list all files and folders in the `$PUBLIC`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC/"}]}},"scope-public-recursive":{"identifier":"scope-public-recursive","description":"This scope permits recursive access to the complete `$PUBLIC` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$PUBLIC/**"}]}},"scope-resource":{"identifier":"scope-resource","description":"This scope permits access to all files and list content of top level directories in the `$RESOURCE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE/*"}]}},"scope-resource-index":{"identifier":"scope-resource-index","description":"This scope permits to list all files and folders in the `$RESOURCE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE/"}]}},"scope-resource-recursive":{"identifier":"scope-resource-recursive","description":"This scope permits recursive access to the complete `$RESOURCE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RESOURCE/**"}]}},"scope-runtime":{"identifier":"scope-runtime","description":"This scope permits access to all files and list content of top level directories in the `$RUNTIME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME/*"}]}},"scope-runtime-index":{"identifier":"scope-runtime-index","description":"This scope permits to list all files and folders in the `$RUNTIME`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME/"}]}},"scope-runtime-recursive":{"identifier":"scope-runtime-recursive","description":"This scope permits recursive access to the complete `$RUNTIME` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$RUNTIME/**"}]}},"scope-temp":{"identifier":"scope-temp","description":"This scope permits access to all files and list content of top level directories in the `$TEMP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP/*"}]}},"scope-temp-index":{"identifier":"scope-temp-index","description":"This scope permits to list all files and folders in the `$TEMP`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP/"}]}},"scope-temp-recursive":{"identifier":"scope-temp-recursive","description":"This scope permits recursive access to the complete `$TEMP` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMP/**"}]}},"scope-template":{"identifier":"scope-template","description":"This scope permits access to all files and list content of top level directories in the `$TEMPLATE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE/*"}]}},"scope-template-index":{"identifier":"scope-template-index","description":"This scope permits to list all files and folders in the `$TEMPLATE`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE/"}]}},"scope-template-recursive":{"identifier":"scope-template-recursive","description":"This scope permits recursive access to the complete `$TEMPLATE` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$TEMPLATE/**"}]}},"scope-video":{"identifier":"scope-video","description":"This scope permits access to all files and list content of top level directories in the `$VIDEO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO/*"}]}},"scope-video-index":{"identifier":"scope-video-index","description":"This scope permits to list all files and folders in the `$VIDEO`folder.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO/"}]}},"scope-video-recursive":{"identifier":"scope-video-recursive","description":"This scope permits recursive access to the complete `$VIDEO` folder, including sub directories and files.","commands":{"allow":[],"deny":[]},"scope":{"allow":[{"path":"$VIDEO/**"}]}},"write-all":{"identifier":"write-all","description":"This enables all write related commands without any pre-configured accessible paths.","commands":{"allow":["mkdir","create","copy_file","remove","rename","truncate","ftruncate","write","write_file","write_text_file"],"deny":[]}},"write-files":{"identifier":"write-files","description":"This enables all file write related commands without any pre-configured accessible paths.","commands":{"allow":["create","copy_file","remove","rename","truncate","ftruncate","write","write_file","write_text_file"],"deny":[]}}},"permission_sets":{"allow-app-meta":{"identifier":"allow-app-meta","description":"This allows non-recursive read access to metadata of the `$APP` folder, including file listing and statistics.","permissions":["read-meta","scope-app-index"]},"allow-app-meta-recursive":{"identifier":"allow-app-meta-recursive","description":"This allows full recursive read access to metadata of the `$APP` folder, including file listing and statistics.","permissions":["read-meta","scope-app-recursive"]},"allow-app-read":{"identifier":"allow-app-read","description":"This allows non-recursive read access to the `$APP` folder.","permissions":["read-all","scope-app"]},"allow-app-read-recursive":{"identifier":"allow-app-read-recursive","description":"This allows full recursive read access to the complete `$APP` folder, files and subdirectories.","permissions":["read-all","scope-app-recursive"]},"allow-app-write":{"identifier":"allow-app-write","description":"This allows non-recursive write access to the `$APP` folder.","permissions":["write-all","scope-app"]},"allow-app-write-recursive":{"identifier":"allow-app-write-recursive","description":"This allows full recursive write access to the complete `$APP` folder, files and subdirectories.","permissions":["write-all","scope-app-recursive"]},"allow-appcache-meta":{"identifier":"allow-appcache-meta","description":"This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-appcache-index"]},"allow-appcache-meta-recursive":{"identifier":"allow-appcache-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-appcache-recursive"]},"allow-appcache-read":{"identifier":"allow-appcache-read","description":"This allows non-recursive read access to the `$APPCACHE` folder.","permissions":["read-all","scope-appcache"]},"allow-appcache-read-recursive":{"identifier":"allow-appcache-read-recursive","description":"This allows full recursive read access to the complete `$APPCACHE` folder, files and subdirectories.","permissions":["read-all","scope-appcache-recursive"]},"allow-appcache-write":{"identifier":"allow-appcache-write","description":"This allows non-recursive write access to the `$APPCACHE` folder.","permissions":["write-all","scope-appcache"]},"allow-appcache-write-recursive":{"identifier":"allow-appcache-write-recursive","description":"This allows full recursive write access to the complete `$APPCACHE` folder, files and subdirectories.","permissions":["write-all","scope-appcache-recursive"]},"allow-appconfig-meta":{"identifier":"allow-appconfig-meta","description":"This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-appconfig-index"]},"allow-appconfig-meta-recursive":{"identifier":"allow-appconfig-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-appconfig-recursive"]},"allow-appconfig-read":{"identifier":"allow-appconfig-read","description":"This allows non-recursive read access to the `$APPCONFIG` folder.","permissions":["read-all","scope-appconfig"]},"allow-appconfig-read-recursive":{"identifier":"allow-appconfig-read-recursive","description":"This allows full recursive read access to the complete `$APPCONFIG` folder, files and subdirectories.","permissions":["read-all","scope-appconfig-recursive"]},"allow-appconfig-write":{"identifier":"allow-appconfig-write","description":"This allows non-recursive write access to the `$APPCONFIG` folder.","permissions":["write-all","scope-appconfig"]},"allow-appconfig-write-recursive":{"identifier":"allow-appconfig-write-recursive","description":"This allows full recursive write access to the complete `$APPCONFIG` folder, files and subdirectories.","permissions":["write-all","scope-appconfig-recursive"]},"allow-appdata-meta":{"identifier":"allow-appdata-meta","description":"This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-appdata-index"]},"allow-appdata-meta-recursive":{"identifier":"allow-appdata-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-appdata-recursive"]},"allow-appdata-read":{"identifier":"allow-appdata-read","description":"This allows non-recursive read access to the `$APPDATA` folder.","permissions":["read-all","scope-appdata"]},"allow-appdata-read-recursive":{"identifier":"allow-appdata-read-recursive","description":"This allows full recursive read access to the complete `$APPDATA` folder, files and subdirectories.","permissions":["read-all","scope-appdata-recursive"]},"allow-appdata-write":{"identifier":"allow-appdata-write","description":"This allows non-recursive write access to the `$APPDATA` folder.","permissions":["write-all","scope-appdata"]},"allow-appdata-write-recursive":{"identifier":"allow-appdata-write-recursive","description":"This allows full recursive write access to the complete `$APPDATA` folder, files and subdirectories.","permissions":["write-all","scope-appdata-recursive"]},"allow-applocaldata-meta":{"identifier":"allow-applocaldata-meta","description":"This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-applocaldata-index"]},"allow-applocaldata-meta-recursive":{"identifier":"allow-applocaldata-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-applocaldata-recursive"]},"allow-applocaldata-read":{"identifier":"allow-applocaldata-read","description":"This allows non-recursive read access to the `$APPLOCALDATA` folder.","permissions":["read-all","scope-applocaldata"]},"allow-applocaldata-read-recursive":{"identifier":"allow-applocaldata-read-recursive","description":"This allows full recursive read access to the complete `$APPLOCALDATA` folder, files and subdirectories.","permissions":["read-all","scope-applocaldata-recursive"]},"allow-applocaldata-write":{"identifier":"allow-applocaldata-write","description":"This allows non-recursive write access to the `$APPLOCALDATA` folder.","permissions":["write-all","scope-applocaldata"]},"allow-applocaldata-write-recursive":{"identifier":"allow-applocaldata-write-recursive","description":"This allows full recursive write access to the complete `$APPLOCALDATA` folder, files and subdirectories.","permissions":["write-all","scope-applocaldata-recursive"]},"allow-applog-meta":{"identifier":"allow-applog-meta","description":"This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.","permissions":["read-meta","scope-applog-index"]},"allow-applog-meta-recursive":{"identifier":"allow-applog-meta-recursive","description":"This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.","permissions":["read-meta","scope-applog-recursive"]},"allow-applog-read":{"identifier":"allow-applog-read","description":"This allows non-recursive read access to the `$APPLOG` folder.","permissions":["read-all","scope-applog"]},"allow-applog-read-recursive":{"identifier":"allow-applog-read-recursive","description":"This allows full recursive read access to the complete `$APPLOG` folder, files and subdirectories.","permissions":["read-all","scope-applog-recursive"]},"allow-applog-write":{"identifier":"allow-applog-write","description":"This allows non-recursive write access to the `$APPLOG` folder.","permissions":["write-all","scope-applog"]},"allow-applog-write-recursive":{"identifier":"allow-applog-write-recursive","description":"This allows full recursive write access to the complete `$APPLOG` folder, files and subdirectories.","permissions":["write-all","scope-applog-recursive"]},"allow-audio-meta":{"identifier":"allow-audio-meta","description":"This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.","permissions":["read-meta","scope-audio-index"]},"allow-audio-meta-recursive":{"identifier":"allow-audio-meta-recursive","description":"This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.","permissions":["read-meta","scope-audio-recursive"]},"allow-audio-read":{"identifier":"allow-audio-read","description":"This allows non-recursive read access to the `$AUDIO` folder.","permissions":["read-all","scope-audio"]},"allow-audio-read-recursive":{"identifier":"allow-audio-read-recursive","description":"This allows full recursive read access to the complete `$AUDIO` folder, files and subdirectories.","permissions":["read-all","scope-audio-recursive"]},"allow-audio-write":{"identifier":"allow-audio-write","description":"This allows non-recursive write access to the `$AUDIO` folder.","permissions":["write-all","scope-audio"]},"allow-audio-write-recursive":{"identifier":"allow-audio-write-recursive","description":"This allows full recursive write access to the complete `$AUDIO` folder, files and subdirectories.","permissions":["write-all","scope-audio-recursive"]},"allow-cache-meta":{"identifier":"allow-cache-meta","description":"This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-cache-index"]},"allow-cache-meta-recursive":{"identifier":"allow-cache-meta-recursive","description":"This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.","permissions":["read-meta","scope-cache-recursive"]},"allow-cache-read":{"identifier":"allow-cache-read","description":"This allows non-recursive read access to the `$CACHE` folder.","permissions":["read-all","scope-cache"]},"allow-cache-read-recursive":{"identifier":"allow-cache-read-recursive","description":"This allows full recursive read access to the complete `$CACHE` folder, files and subdirectories.","permissions":["read-all","scope-cache-recursive"]},"allow-cache-write":{"identifier":"allow-cache-write","description":"This allows non-recursive write access to the `$CACHE` folder.","permissions":["write-all","scope-cache"]},"allow-cache-write-recursive":{"identifier":"allow-cache-write-recursive","description":"This allows full recursive write access to the complete `$CACHE` folder, files and subdirectories.","permissions":["write-all","scope-cache-recursive"]},"allow-config-meta":{"identifier":"allow-config-meta","description":"This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-config-index"]},"allow-config-meta-recursive":{"identifier":"allow-config-meta-recursive","description":"This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.","permissions":["read-meta","scope-config-recursive"]},"allow-config-read":{"identifier":"allow-config-read","description":"This allows non-recursive read access to the `$CONFIG` folder.","permissions":["read-all","scope-config"]},"allow-config-read-recursive":{"identifier":"allow-config-read-recursive","description":"This allows full recursive read access to the complete `$CONFIG` folder, files and subdirectories.","permissions":["read-all","scope-config-recursive"]},"allow-config-write":{"identifier":"allow-config-write","description":"This allows non-recursive write access to the `$CONFIG` folder.","permissions":["write-all","scope-config"]},"allow-config-write-recursive":{"identifier":"allow-config-write-recursive","description":"This allows full recursive write access to the complete `$CONFIG` folder, files and subdirectories.","permissions":["write-all","scope-config-recursive"]},"allow-data-meta":{"identifier":"allow-data-meta","description":"This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.","permissions":["read-meta","scope-data-index"]},"allow-data-meta-recursive":{"identifier":"allow-data-meta-recursive","description":"This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.","permissions":["read-meta","scope-data-recursive"]},"allow-data-read":{"identifier":"allow-data-read","description":"This allows non-recursive read access to the `$DATA` folder.","permissions":["read-all","scope-data"]},"allow-data-read-recursive":{"identifier":"allow-data-read-recursive","description":"This allows full recursive read access to the complete `$DATA` folder, files and subdirectories.","permissions":["read-all","scope-data-recursive"]},"allow-data-write":{"identifier":"allow-data-write","description":"This allows non-recursive write access to the `$DATA` folder.","permissions":["write-all","scope-data"]},"allow-data-write-recursive":{"identifier":"allow-data-write-recursive","description":"This allows full recursive write access to the complete `$DATA` folder, files and subdirectories.","permissions":["write-all","scope-data-recursive"]},"allow-desktop-meta":{"identifier":"allow-desktop-meta","description":"This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.","permissions":["read-meta","scope-desktop-index"]},"allow-desktop-meta-recursive":{"identifier":"allow-desktop-meta-recursive","description":"This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.","permissions":["read-meta","scope-desktop-recursive"]},"allow-desktop-read":{"identifier":"allow-desktop-read","description":"This allows non-recursive read access to the `$DESKTOP` folder.","permissions":["read-all","scope-desktop"]},"allow-desktop-read-recursive":{"identifier":"allow-desktop-read-recursive","description":"This allows full recursive read access to the complete `$DESKTOP` folder, files and subdirectories.","permissions":["read-all","scope-desktop-recursive"]},"allow-desktop-write":{"identifier":"allow-desktop-write","description":"This allows non-recursive write access to the `$DESKTOP` folder.","permissions":["write-all","scope-desktop"]},"allow-desktop-write-recursive":{"identifier":"allow-desktop-write-recursive","description":"This allows full recursive write access to the complete `$DESKTOP` folder, files and subdirectories.","permissions":["write-all","scope-desktop-recursive"]},"allow-document-meta":{"identifier":"allow-document-meta","description":"This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.","permissions":["read-meta","scope-document-index"]},"allow-document-meta-recursive":{"identifier":"allow-document-meta-recursive","description":"This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.","permissions":["read-meta","scope-document-recursive"]},"allow-document-read":{"identifier":"allow-document-read","description":"This allows non-recursive read access to the `$DOCUMENT` folder.","permissions":["read-all","scope-document"]},"allow-document-read-recursive":{"identifier":"allow-document-read-recursive","description":"This allows full recursive read access to the complete `$DOCUMENT` folder, files and subdirectories.","permissions":["read-all","scope-document-recursive"]},"allow-document-write":{"identifier":"allow-document-write","description":"This allows non-recursive write access to the `$DOCUMENT` folder.","permissions":["write-all","scope-document"]},"allow-document-write-recursive":{"identifier":"allow-document-write-recursive","description":"This allows full recursive write access to the complete `$DOCUMENT` folder, files and subdirectories.","permissions":["write-all","scope-document-recursive"]},"allow-download-meta":{"identifier":"allow-download-meta","description":"This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.","permissions":["read-meta","scope-download-index"]},"allow-download-meta-recursive":{"identifier":"allow-download-meta-recursive","description":"This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.","permissions":["read-meta","scope-download-recursive"]},"allow-download-read":{"identifier":"allow-download-read","description":"This allows non-recursive read access to the `$DOWNLOAD` folder.","permissions":["read-all","scope-download"]},"allow-download-read-recursive":{"identifier":"allow-download-read-recursive","description":"This allows full recursive read access to the complete `$DOWNLOAD` folder, files and subdirectories.","permissions":["read-all","scope-download-recursive"]},"allow-download-write":{"identifier":"allow-download-write","description":"This allows non-recursive write access to the `$DOWNLOAD` folder.","permissions":["write-all","scope-download"]},"allow-download-write-recursive":{"identifier":"allow-download-write-recursive","description":"This allows full recursive write access to the complete `$DOWNLOAD` folder, files and subdirectories.","permissions":["write-all","scope-download-recursive"]},"allow-exe-meta":{"identifier":"allow-exe-meta","description":"This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.","permissions":["read-meta","scope-exe-index"]},"allow-exe-meta-recursive":{"identifier":"allow-exe-meta-recursive","description":"This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.","permissions":["read-meta","scope-exe-recursive"]},"allow-exe-read":{"identifier":"allow-exe-read","description":"This allows non-recursive read access to the `$EXE` folder.","permissions":["read-all","scope-exe"]},"allow-exe-read-recursive":{"identifier":"allow-exe-read-recursive","description":"This allows full recursive read access to the complete `$EXE` folder, files and subdirectories.","permissions":["read-all","scope-exe-recursive"]},"allow-exe-write":{"identifier":"allow-exe-write","description":"This allows non-recursive write access to the `$EXE` folder.","permissions":["write-all","scope-exe"]},"allow-exe-write-recursive":{"identifier":"allow-exe-write-recursive","description":"This allows full recursive write access to the complete `$EXE` folder, files and subdirectories.","permissions":["write-all","scope-exe-recursive"]},"allow-font-meta":{"identifier":"allow-font-meta","description":"This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.","permissions":["read-meta","scope-font-index"]},"allow-font-meta-recursive":{"identifier":"allow-font-meta-recursive","description":"This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.","permissions":["read-meta","scope-font-recursive"]},"allow-font-read":{"identifier":"allow-font-read","description":"This allows non-recursive read access to the `$FONT` folder.","permissions":["read-all","scope-font"]},"allow-font-read-recursive":{"identifier":"allow-font-read-recursive","description":"This allows full recursive read access to the complete `$FONT` folder, files and subdirectories.","permissions":["read-all","scope-font-recursive"]},"allow-font-write":{"identifier":"allow-font-write","description":"This allows non-recursive write access to the `$FONT` folder.","permissions":["write-all","scope-font"]},"allow-font-write-recursive":{"identifier":"allow-font-write-recursive","description":"This allows full recursive write access to the complete `$FONT` folder, files and subdirectories.","permissions":["write-all","scope-font-recursive"]},"allow-home-meta":{"identifier":"allow-home-meta","description":"This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.","permissions":["read-meta","scope-home-index"]},"allow-home-meta-recursive":{"identifier":"allow-home-meta-recursive","description":"This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.","permissions":["read-meta","scope-home-recursive"]},"allow-home-read":{"identifier":"allow-home-read","description":"This allows non-recursive read access to the `$HOME` folder.","permissions":["read-all","scope-home"]},"allow-home-read-recursive":{"identifier":"allow-home-read-recursive","description":"This allows full recursive read access to the complete `$HOME` folder, files and subdirectories.","permissions":["read-all","scope-home-recursive"]},"allow-home-write":{"identifier":"allow-home-write","description":"This allows non-recursive write access to the `$HOME` folder.","permissions":["write-all","scope-home"]},"allow-home-write-recursive":{"identifier":"allow-home-write-recursive","description":"This allows full recursive write access to the complete `$HOME` folder, files and subdirectories.","permissions":["write-all","scope-home-recursive"]},"allow-localdata-meta":{"identifier":"allow-localdata-meta","description":"This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-localdata-index"]},"allow-localdata-meta-recursive":{"identifier":"allow-localdata-meta-recursive","description":"This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.","permissions":["read-meta","scope-localdata-recursive"]},"allow-localdata-read":{"identifier":"allow-localdata-read","description":"This allows non-recursive read access to the `$LOCALDATA` folder.","permissions":["read-all","scope-localdata"]},"allow-localdata-read-recursive":{"identifier":"allow-localdata-read-recursive","description":"This allows full recursive read access to the complete `$LOCALDATA` folder, files and subdirectories.","permissions":["read-all","scope-localdata-recursive"]},"allow-localdata-write":{"identifier":"allow-localdata-write","description":"This allows non-recursive write access to the `$LOCALDATA` folder.","permissions":["write-all","scope-localdata"]},"allow-localdata-write-recursive":{"identifier":"allow-localdata-write-recursive","description":"This allows full recursive write access to the complete `$LOCALDATA` folder, files and subdirectories.","permissions":["write-all","scope-localdata-recursive"]},"allow-log-meta":{"identifier":"allow-log-meta","description":"This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.","permissions":["read-meta","scope-log-index"]},"allow-log-meta-recursive":{"identifier":"allow-log-meta-recursive","description":"This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.","permissions":["read-meta","scope-log-recursive"]},"allow-log-read":{"identifier":"allow-log-read","description":"This allows non-recursive read access to the `$LOG` folder.","permissions":["read-all","scope-log"]},"allow-log-read-recursive":{"identifier":"allow-log-read-recursive","description":"This allows full recursive read access to the complete `$LOG` folder, files and subdirectories.","permissions":["read-all","scope-log-recursive"]},"allow-log-write":{"identifier":"allow-log-write","description":"This allows non-recursive write access to the `$LOG` folder.","permissions":["write-all","scope-log"]},"allow-log-write-recursive":{"identifier":"allow-log-write-recursive","description":"This allows full recursive write access to the complete `$LOG` folder, files and subdirectories.","permissions":["write-all","scope-log-recursive"]},"allow-picture-meta":{"identifier":"allow-picture-meta","description":"This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.","permissions":["read-meta","scope-picture-index"]},"allow-picture-meta-recursive":{"identifier":"allow-picture-meta-recursive","description":"This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.","permissions":["read-meta","scope-picture-recursive"]},"allow-picture-read":{"identifier":"allow-picture-read","description":"This allows non-recursive read access to the `$PICTURE` folder.","permissions":["read-all","scope-picture"]},"allow-picture-read-recursive":{"identifier":"allow-picture-read-recursive","description":"This allows full recursive read access to the complete `$PICTURE` folder, files and subdirectories.","permissions":["read-all","scope-picture-recursive"]},"allow-picture-write":{"identifier":"allow-picture-write","description":"This allows non-recursive write access to the `$PICTURE` folder.","permissions":["write-all","scope-picture"]},"allow-picture-write-recursive":{"identifier":"allow-picture-write-recursive","description":"This allows full recursive write access to the complete `$PICTURE` folder, files and subdirectories.","permissions":["write-all","scope-picture-recursive"]},"allow-public-meta":{"identifier":"allow-public-meta","description":"This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.","permissions":["read-meta","scope-public-index"]},"allow-public-meta-recursive":{"identifier":"allow-public-meta-recursive","description":"This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.","permissions":["read-meta","scope-public-recursive"]},"allow-public-read":{"identifier":"allow-public-read","description":"This allows non-recursive read access to the `$PUBLIC` folder.","permissions":["read-all","scope-public"]},"allow-public-read-recursive":{"identifier":"allow-public-read-recursive","description":"This allows full recursive read access to the complete `$PUBLIC` folder, files and subdirectories.","permissions":["read-all","scope-public-recursive"]},"allow-public-write":{"identifier":"allow-public-write","description":"This allows non-recursive write access to the `$PUBLIC` folder.","permissions":["write-all","scope-public"]},"allow-public-write-recursive":{"identifier":"allow-public-write-recursive","description":"This allows full recursive write access to the complete `$PUBLIC` folder, files and subdirectories.","permissions":["write-all","scope-public-recursive"]},"allow-resource-meta":{"identifier":"allow-resource-meta","description":"This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.","permissions":["read-meta","scope-resource-index"]},"allow-resource-meta-recursive":{"identifier":"allow-resource-meta-recursive","description":"This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.","permissions":["read-meta","scope-resource-recursive"]},"allow-resource-read":{"identifier":"allow-resource-read","description":"This allows non-recursive read access to the `$RESOURCE` folder.","permissions":["read-all","scope-resource"]},"allow-resource-read-recursive":{"identifier":"allow-resource-read-recursive","description":"This allows full recursive read access to the complete `$RESOURCE` folder, files and subdirectories.","permissions":["read-all","scope-resource-recursive"]},"allow-resource-write":{"identifier":"allow-resource-write","description":"This allows non-recursive write access to the `$RESOURCE` folder.","permissions":["write-all","scope-resource"]},"allow-resource-write-recursive":{"identifier":"allow-resource-write-recursive","description":"This allows full recursive write access to the complete `$RESOURCE` folder, files and subdirectories.","permissions":["write-all","scope-resource-recursive"]},"allow-runtime-meta":{"identifier":"allow-runtime-meta","description":"This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.","permissions":["read-meta","scope-runtime-index"]},"allow-runtime-meta-recursive":{"identifier":"allow-runtime-meta-recursive","description":"This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.","permissions":["read-meta","scope-runtime-recursive"]},"allow-runtime-read":{"identifier":"allow-runtime-read","description":"This allows non-recursive read access to the `$RUNTIME` folder.","permissions":["read-all","scope-runtime"]},"allow-runtime-read-recursive":{"identifier":"allow-runtime-read-recursive","description":"This allows full recursive read access to the complete `$RUNTIME` folder, files and subdirectories.","permissions":["read-all","scope-runtime-recursive"]},"allow-runtime-write":{"identifier":"allow-runtime-write","description":"This allows non-recursive write access to the `$RUNTIME` folder.","permissions":["write-all","scope-runtime"]},"allow-runtime-write-recursive":{"identifier":"allow-runtime-write-recursive","description":"This allows full recursive write access to the complete `$RUNTIME` folder, files and subdirectories.","permissions":["write-all","scope-runtime-recursive"]},"allow-temp-meta":{"identifier":"allow-temp-meta","description":"This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.","permissions":["read-meta","scope-temp-index"]},"allow-temp-meta-recursive":{"identifier":"allow-temp-meta-recursive","description":"This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.","permissions":["read-meta","scope-temp-recursive"]},"allow-temp-read":{"identifier":"allow-temp-read","description":"This allows non-recursive read access to the `$TEMP` folder.","permissions":["read-all","scope-temp"]},"allow-temp-read-recursive":{"identifier":"allow-temp-read-recursive","description":"This allows full recursive read access to the complete `$TEMP` folder, files and subdirectories.","permissions":["read-all","scope-temp-recursive"]},"allow-temp-write":{"identifier":"allow-temp-write","description":"This allows non-recursive write access to the `$TEMP` folder.","permissions":["write-all","scope-temp"]},"allow-temp-write-recursive":{"identifier":"allow-temp-write-recursive","description":"This allows full recursive write access to the complete `$TEMP` folder, files and subdirectories.","permissions":["write-all","scope-temp-recursive"]},"allow-template-meta":{"identifier":"allow-template-meta","description":"This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.","permissions":["read-meta","scope-template-index"]},"allow-template-meta-recursive":{"identifier":"allow-template-meta-recursive","description":"This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.","permissions":["read-meta","scope-template-recursive"]},"allow-template-read":{"identifier":"allow-template-read","description":"This allows non-recursive read access to the `$TEMPLATE` folder.","permissions":["read-all","scope-template"]},"allow-template-read-recursive":{"identifier":"allow-template-read-recursive","description":"This allows full recursive read access to the complete `$TEMPLATE` folder, files and subdirectories.","permissions":["read-all","scope-template-recursive"]},"allow-template-write":{"identifier":"allow-template-write","description":"This allows non-recursive write access to the `$TEMPLATE` folder.","permissions":["write-all","scope-template"]},"allow-template-write-recursive":{"identifier":"allow-template-write-recursive","description":"This allows full recursive write access to the complete `$TEMPLATE` folder, files and subdirectories.","permissions":["write-all","scope-template-recursive"]},"allow-video-meta":{"identifier":"allow-video-meta","description":"This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.","permissions":["read-meta","scope-video-index"]},"allow-video-meta-recursive":{"identifier":"allow-video-meta-recursive","description":"This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.","permissions":["read-meta","scope-video-recursive"]},"allow-video-read":{"identifier":"allow-video-read","description":"This allows non-recursive read access to the `$VIDEO` folder.","permissions":["read-all","scope-video"]},"allow-video-read-recursive":{"identifier":"allow-video-read-recursive","description":"This allows full recursive read access to the complete `$VIDEO` folder, files and subdirectories.","permissions":["read-all","scope-video-recursive"]},"allow-video-write":{"identifier":"allow-video-write","description":"This allows non-recursive write access to the `$VIDEO` folder.","permissions":["write-all","scope-video"]},"allow-video-write-recursive":{"identifier":"allow-video-write-recursive","description":"This allows full recursive write access to the complete `$VIDEO` folder, files and subdirectories.","permissions":["write-all","scope-video-recursive"]},"deny-default":{"identifier":"deny-default","description":"This denies access to dangerous Tauri relevant files and folders by default.","permissions":["deny-webview-data-linux","deny-webview-data-windows"]}},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","anyOf":[{"description":"FS scope path.","type":"string"},{"properties":{"path":{"description":"FS scope path.","type":"string"}},"required":["path"],"type":"object"}],"description":"FS scope entry.","title":"FsScopeEntry"}},"log":{"default_permission":{"identifier":"default","description":"Allows the log command","permissions":["allow-log"]},"permissions":{"allow-log":{"identifier":"allow-log","description":"Enables the log command without any pre-configured scope.","commands":{"allow":["log"],"deny":[]}},"deny-log":{"identifier":"deny-log","description":"Denies the log command without any pre-configured scope.","commands":{"allow":[],"deny":["log"]}}},"permission_sets":{},"global_scope_schema":null},"os":{"default_permission":{"identifier":"default","description":"This permission set configures which\noperating system information are available\nto gather from the frontend.\n\n#### Granted Permissions\n\nAll information except the host name are available.\n\n","permissions":["allow-arch","allow-exe-extension","allow-family","allow-locale","allow-os-type","allow-platform","allow-version"]},"permissions":{"allow-arch":{"identifier":"allow-arch","description":"Enables the arch command without any pre-configured scope.","commands":{"allow":["arch"],"deny":[]}},"allow-exe-extension":{"identifier":"allow-exe-extension","description":"Enables the exe_extension command without any pre-configured scope.","commands":{"allow":["exe_extension"],"deny":[]}},"allow-family":{"identifier":"allow-family","description":"Enables the family command without any pre-configured scope.","commands":{"allow":["family"],"deny":[]}},"allow-hostname":{"identifier":"allow-hostname","description":"Enables the hostname command without any pre-configured scope.","commands":{"allow":["hostname"],"deny":[]}},"allow-locale":{"identifier":"allow-locale","description":"Enables the locale command without any pre-configured scope.","commands":{"allow":["locale"],"deny":[]}},"allow-os-type":{"identifier":"allow-os-type","description":"Enables the os_type command without any pre-configured scope.","commands":{"allow":["os_type"],"deny":[]}},"allow-platform":{"identifier":"allow-platform","description":"Enables the platform command without any pre-configured scope.","commands":{"allow":["platform"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-arch":{"identifier":"deny-arch","description":"Denies the arch command without any pre-configured scope.","commands":{"allow":[],"deny":["arch"]}},"deny-exe-extension":{"identifier":"deny-exe-extension","description":"Denies the exe_extension command without any pre-configured scope.","commands":{"allow":[],"deny":["exe_extension"]}},"deny-family":{"identifier":"deny-family","description":"Denies the family command without any pre-configured scope.","commands":{"allow":[],"deny":["family"]}},"deny-hostname":{"identifier":"deny-hostname","description":"Denies the hostname command without any pre-configured scope.","commands":{"allow":[],"deny":["hostname"]}},"deny-locale":{"identifier":"deny-locale","description":"Denies the locale command without any pre-configured scope.","commands":{"allow":[],"deny":["locale"]}},"deny-os-type":{"identifier":"deny-os-type","description":"Denies the os_type command without any pre-configured scope.","commands":{"allow":[],"deny":["os_type"]}},"deny-platform":{"identifier":"deny-platform","description":"Denies the platform command without any pre-configured scope.","commands":{"allow":[],"deny":["platform"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"shell":{"default_permission":{"identifier":"default","description":"This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n","permissions":["allow-open"]},"permissions":{"allow-execute":{"identifier":"allow-execute","description":"Enables the execute command without any pre-configured scope.","commands":{"allow":["execute"],"deny":[]}},"allow-kill":{"identifier":"allow-kill","description":"Enables the kill command without any pre-configured scope.","commands":{"allow":["kill"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-spawn":{"identifier":"allow-spawn","description":"Enables the spawn command without any pre-configured scope.","commands":{"allow":["spawn"],"deny":[]}},"allow-stdin-write":{"identifier":"allow-stdin-write","description":"Enables the stdin_write command without any pre-configured scope.","commands":{"allow":["stdin_write"],"deny":[]}},"deny-execute":{"identifier":"deny-execute","description":"Denies the execute command without any pre-configured scope.","commands":{"allow":[],"deny":["execute"]}},"deny-kill":{"identifier":"deny-kill","description":"Denies the kill command without any pre-configured scope.","commands":{"allow":[],"deny":["kill"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-spawn":{"identifier":"deny-spawn","description":"Denies the spawn command without any pre-configured scope.","commands":{"allow":[],"deny":["spawn"]}},"deny-stdin-write":{"identifier":"deny-stdin-write","description":"Denies the stdin_write command without any pre-configured scope.","commands":{"allow":[],"deny":["stdin_write"]}}},"permission_sets":{},"global_scope_schema":{"$schema":"http://json-schema.org/draft-07/schema#","definitions":{"ShellAllowedArg":{"anyOf":[{"description":"A non-configurable argument that is passed to the command in the order it was specified.","type":"string"},{"additionalProperties":false,"description":"A variable that is set while calling the command from the webview API.","properties":{"raw":{"default":false,"description":"Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.","type":"boolean"},"validator":{"description":"[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: ","type":"string"}},"required":["validator"],"type":"object"}],"description":"A command argument allowed to be executed by the webview API."},"ShellAllowedArgs":{"anyOf":[{"description":"Use a simple boolean to allow all or disable all arguments to this command configuration.","type":"boolean"},{"description":"A specific set of [`ShellAllowedArg`] that are valid to call for the command configuration.","items":{"$ref":"#/definitions/ShellAllowedArg"},"type":"array"}],"description":"A set of command arguments allowed to be executed by the webview API.\n\nA value of `true` will allow any arguments to be passed to the command. `false` will disable all arguments. A list of [`ShellAllowedArg`] will set those arguments as the only valid arguments to be passed to the attached command configuration."}},"description":"A command allowed to be executed by the webview API.","properties":{"args":{"allOf":[{"$ref":"#/definitions/ShellAllowedArgs"}],"description":"The allowed arguments for the command execution."},"cmd":{"description":"The command name. It can start with a variable that resolves to a system base directory. The variables are: `$AUDIO`, `$CACHE`, `$CONFIG`, `$DATA`, `$LOCALDATA`, `$DESKTOP`, `$DOCUMENT`, `$DOWNLOAD`, `$EXE`, `$FONT`, `$HOME`, `$PICTURE`, `$PUBLIC`, `$RUNTIME`, `$TEMPLATE`, `$VIDEO`, `$RESOURCE`, `$APP`, `$LOG`, `$TEMP`, `$APPCONFIG`, `$APPDATA`, `$APPLOCALDATA`, `$APPCACHE`, `$APPLOG`.","type":"string"},"name":{"description":"The name for this allowed shell command configuration.\n\nThis name will be used inside of the webview API to call this command along with any specified arguments.","type":"string"},"sidecar":{"description":"If this command is a sidecar command.","type":"boolean"}},"required":["args","cmd","name","sidecar"],"title":"Entry","type":"object"}},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null},"window-state":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-filename","allow-restore-state","allow-save-window-state"]},"permissions":{"allow-filename":{"identifier":"allow-filename","description":"Enables the filename command without any pre-configured scope.","commands":{"allow":["filename"],"deny":[]}},"allow-restore-state":{"identifier":"allow-restore-state","description":"Enables the restore_state command without any pre-configured scope.","commands":{"allow":["restore_state"],"deny":[]}},"allow-save-window-state":{"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]}},"deny-filename":{"identifier":"deny-filename","description":"Denies the filename command without any pre-configured scope.","commands":{"allow":[],"deny":["filename"]}},"deny-restore-state":{"identifier":"deny-restore-state","description":"Denies the restore_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_state"]}},"deny-save-window-state":{"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/src-tauri/gen/schemas/capabilities.json b/src-tauri/gen/schemas/capabilities.json index b60483af..65e0d095 100644 --- a/src-tauri/gen/schemas/capabilities.json +++ b/src-tauri/gen/schemas/capabilities.json @@ -1 +1 @@ -{"main":{"identifier":"main","description":"Main permissions","local":true,"windows":["*"],"permissions":["os:allow-os-type","event:allow-emit","clipboard-manager:allow-write-text","clipboard-manager:allow-read-text","dialog:allow-open","dialog:allow-save","event:allow-listen","event:allow-unlisten","fs:allow-read-file","fs:allow-read-text-file",{"identifier":"fs:scope","allow":[{"path":"$APPDATA"},{"path":"$APPDATA/**"}]},"shell:allow-open","webview:allow-set-webview-zoom","window:allow-close","window:allow-is-fullscreen","window:allow-maximize","window:allow-minimize","window:allow-toggle-maximize","window:allow-set-decorations","window:allow-set-title","window:allow-start-dragging","window:allow-unmaximize","window:allow-theme","clipboard-manager:allow-read-text","clipboard-manager:allow-write-text"]}} \ No newline at end of file +{"main":{"identifier":"main","description":"Main permissions","local":true,"windows":["*"],"permissions":["core:event:allow-emit","core:event:allow-listen","core:event:allow-unlisten","os:allow-os-type","clipboard-manager:allow-write-text","clipboard-manager:allow-read-text","dialog:allow-open","dialog:allow-save","fs:allow-read-file","fs:allow-read-text-file",{"identifier":"fs:scope","allow":[{"path":"$APPDATA"},{"path":"$APPDATA/**"}]},"shell:allow-open","core:webview:allow-set-webview-zoom","core:window:allow-close","core:window:allow-is-fullscreen","core:window:allow-maximize","core:window:allow-minimize","core:window:allow-toggle-maximize","core:window:allow-set-decorations","core:window:allow-set-title","core:window:allow-start-dragging","core:window:allow-unmaximize","core:window:allow-theme","clipboard-manager:allow-read-text","clipboard-manager:allow-write-text"]}} \ No newline at end of file diff --git a/src-tauri/gen/schemas/desktop-schema.json b/src-tauri/gen/schemas/desktop-schema.json index 4412909f..dcd047f7 100644 --- a/src-tauri/gen/schemas/desktop-schema.json +++ b/src-tauri/gen/schemas/desktop-schema.json @@ -37,7 +37,7 @@ ], "definitions": { "Capability": { - "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"path:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, \"platforms\": [\"macOS\",\"windows\"] } ```", + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, \"platforms\": [\"macOS\",\"windows\"] } ```", "type": "object", "required": [ "identifier", @@ -84,7 +84,7 @@ } }, "permissions": { - "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"path:default\", \"event:default\", \"window:default\", \"app:default\", \"image:default\", \"resources:default\", \"menu:default\", \"tray:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", "type": "array", "items": { "$ref": "#/definitions/PermissionEntry" @@ -2361,97 +2361,6 @@ }, "Identifier": { "oneOf": [ - { - "description": "app:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "app:default" - ] - }, - { - "description": "app:allow-app-hide -> Enables the app_hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:allow-app-hide" - ] - }, - { - "description": "app:allow-app-show -> Enables the app_show command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:allow-app-show" - ] - }, - { - "description": "app:allow-default-window-icon -> Enables the default_window_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:allow-default-window-icon" - ] - }, - { - "description": "app:allow-name -> Enables the name command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:allow-name" - ] - }, - { - "description": "app:allow-tauri-version -> Enables the tauri_version command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:allow-tauri-version" - ] - }, - { - "description": "app:allow-version -> Enables the version command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:allow-version" - ] - }, - { - "description": "app:deny-app-hide -> Denies the app_hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:deny-app-hide" - ] - }, - { - "description": "app:deny-app-show -> Denies the app_show command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:deny-app-show" - ] - }, - { - "description": "app:deny-default-window-icon -> Denies the default_window_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:deny-default-window-icon" - ] - }, - { - "description": "app:deny-name -> Denies the name command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:deny-name" - ] - }, - { - "description": "app:deny-tauri-version -> Denies the tauri_version command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:deny-tauri-version" - ] - }, - { - "description": "app:deny-version -> Denies the version command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:deny-version" - ] - }, { "description": "clipboard-manager:default -> No features are enabled by default, as we believe\nthe clipboard can be inherently dangerous and it is \napplication specific if read and/or write access is needed.\n\nClipboard interaction needs to be explicitly enabled.\n", "type": "string", @@ -2543,6 +2452,1945 @@ "clipboard-manager:deny-write-text" ] }, + { + "description": "core:app:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:app:default" + ] + }, + { + "description": "core:app:allow-app-hide -> Enables the app_hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:allow-app-hide" + ] + }, + { + "description": "core:app:allow-app-show -> Enables the app_show command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:allow-app-show" + ] + }, + { + "description": "core:app:allow-default-window-icon -> Enables the default_window_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:allow-default-window-icon" + ] + }, + { + "description": "core:app:allow-name -> Enables the name command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:allow-name" + ] + }, + { + "description": "core:app:allow-tauri-version -> Enables the tauri_version command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:allow-tauri-version" + ] + }, + { + "description": "core:app:allow-version -> Enables the version command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:allow-version" + ] + }, + { + "description": "core:app:deny-app-hide -> Denies the app_hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:deny-app-hide" + ] + }, + { + "description": "core:app:deny-app-show -> Denies the app_show command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:deny-app-show" + ] + }, + { + "description": "core:app:deny-default-window-icon -> Denies the default_window_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:deny-default-window-icon" + ] + }, + { + "description": "core:app:deny-name -> Denies the name command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:deny-name" + ] + }, + { + "description": "core:app:deny-tauri-version -> Denies the tauri_version command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:deny-tauri-version" + ] + }, + { + "description": "core:app:deny-version -> Denies the version command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:deny-version" + ] + }, + { + "description": "core:event:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:event:default" + ] + }, + { + "description": "core:event:allow-emit -> Enables the emit command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:allow-emit" + ] + }, + { + "description": "core:event:allow-emit-to -> Enables the emit_to command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:allow-emit-to" + ] + }, + { + "description": "core:event:allow-listen -> Enables the listen command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:allow-listen" + ] + }, + { + "description": "core:event:allow-unlisten -> Enables the unlisten command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:allow-unlisten" + ] + }, + { + "description": "core:event:deny-emit -> Denies the emit command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:deny-emit" + ] + }, + { + "description": "core:event:deny-emit-to -> Denies the emit_to command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:deny-emit-to" + ] + }, + { + "description": "core:event:deny-listen -> Denies the listen command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:deny-listen" + ] + }, + { + "description": "core:event:deny-unlisten -> Denies the unlisten command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:deny-unlisten" + ] + }, + { + "description": "core:image:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:image:default" + ] + }, + { + "description": "core:image:allow-from-bytes -> Enables the from_bytes command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:allow-from-bytes" + ] + }, + { + "description": "core:image:allow-from-path -> Enables the from_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:allow-from-path" + ] + }, + { + "description": "core:image:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:allow-new" + ] + }, + { + "description": "core:image:allow-rgba -> Enables the rgba command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:allow-rgba" + ] + }, + { + "description": "core:image:allow-size -> Enables the size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:allow-size" + ] + }, + { + "description": "core:image:deny-from-bytes -> Denies the from_bytes command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:deny-from-bytes" + ] + }, + { + "description": "core:image:deny-from-path -> Denies the from_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:deny-from-path" + ] + }, + { + "description": "core:image:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:deny-new" + ] + }, + { + "description": "core:image:deny-rgba -> Denies the rgba command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:deny-rgba" + ] + }, + { + "description": "core:image:deny-size -> Denies the size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:deny-size" + ] + }, + { + "description": "core:menu:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:menu:default" + ] + }, + { + "description": "core:menu:allow-append -> Enables the append command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-append" + ] + }, + { + "description": "core:menu:allow-create-default -> Enables the create_default command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-create-default" + ] + }, + { + "description": "core:menu:allow-get -> Enables the get command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-get" + ] + }, + { + "description": "core:menu:allow-insert -> Enables the insert command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-insert" + ] + }, + { + "description": "core:menu:allow-is-checked -> Enables the is_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-is-checked" + ] + }, + { + "description": "core:menu:allow-is-enabled -> Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-is-enabled" + ] + }, + { + "description": "core:menu:allow-items -> Enables the items command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-items" + ] + }, + { + "description": "core:menu:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-new" + ] + }, + { + "description": "core:menu:allow-popup -> Enables the popup command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-popup" + ] + }, + { + "description": "core:menu:allow-prepend -> Enables the prepend command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-prepend" + ] + }, + { + "description": "core:menu:allow-remove -> Enables the remove command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-remove" + ] + }, + { + "description": "core:menu:allow-remove-at -> Enables the remove_at command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-remove-at" + ] + }, + { + "description": "core:menu:allow-set-accelerator -> Enables the set_accelerator command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-accelerator" + ] + }, + { + "description": "core:menu:allow-set-as-app-menu -> Enables the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-as-app-menu" + ] + }, + { + "description": "core:menu:allow-set-as-help-menu-for-nsapp -> Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-as-help-menu-for-nsapp" + ] + }, + { + "description": "core:menu:allow-set-as-window-menu -> Enables the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-as-window-menu" + ] + }, + { + "description": "core:menu:allow-set-as-windows-menu-for-nsapp -> Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-as-windows-menu-for-nsapp" + ] + }, + { + "description": "core:menu:allow-set-checked -> Enables the set_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-checked" + ] + }, + { + "description": "core:menu:allow-set-enabled -> Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-enabled" + ] + }, + { + "description": "core:menu:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-icon" + ] + }, + { + "description": "core:menu:allow-set-text -> Enables the set_text command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-text" + ] + }, + { + "description": "core:menu:allow-text -> Enables the text command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-text" + ] + }, + { + "description": "core:menu:deny-append -> Denies the append command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-append" + ] + }, + { + "description": "core:menu:deny-create-default -> Denies the create_default command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-create-default" + ] + }, + { + "description": "core:menu:deny-get -> Denies the get command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-get" + ] + }, + { + "description": "core:menu:deny-insert -> Denies the insert command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-insert" + ] + }, + { + "description": "core:menu:deny-is-checked -> Denies the is_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-is-checked" + ] + }, + { + "description": "core:menu:deny-is-enabled -> Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-is-enabled" + ] + }, + { + "description": "core:menu:deny-items -> Denies the items command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-items" + ] + }, + { + "description": "core:menu:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-new" + ] + }, + { + "description": "core:menu:deny-popup -> Denies the popup command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-popup" + ] + }, + { + "description": "core:menu:deny-prepend -> Denies the prepend command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-prepend" + ] + }, + { + "description": "core:menu:deny-remove -> Denies the remove command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-remove" + ] + }, + { + "description": "core:menu:deny-remove-at -> Denies the remove_at command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-remove-at" + ] + }, + { + "description": "core:menu:deny-set-accelerator -> Denies the set_accelerator command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-accelerator" + ] + }, + { + "description": "core:menu:deny-set-as-app-menu -> Denies the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-as-app-menu" + ] + }, + { + "description": "core:menu:deny-set-as-help-menu-for-nsapp -> Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-as-help-menu-for-nsapp" + ] + }, + { + "description": "core:menu:deny-set-as-window-menu -> Denies the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-as-window-menu" + ] + }, + { + "description": "core:menu:deny-set-as-windows-menu-for-nsapp -> Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-as-windows-menu-for-nsapp" + ] + }, + { + "description": "core:menu:deny-set-checked -> Denies the set_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-checked" + ] + }, + { + "description": "core:menu:deny-set-enabled -> Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-enabled" + ] + }, + { + "description": "core:menu:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-icon" + ] + }, + { + "description": "core:menu:deny-set-text -> Denies the set_text command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-text" + ] + }, + { + "description": "core:menu:deny-text -> Denies the text command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-text" + ] + }, + { + "description": "core:path:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:path:default" + ] + }, + { + "description": "core:path:allow-basename -> Enables the basename command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-basename" + ] + }, + { + "description": "core:path:allow-dirname -> Enables the dirname command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-dirname" + ] + }, + { + "description": "core:path:allow-extname -> Enables the extname command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-extname" + ] + }, + { + "description": "core:path:allow-is-absolute -> Enables the is_absolute command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-is-absolute" + ] + }, + { + "description": "core:path:allow-join -> Enables the join command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-join" + ] + }, + { + "description": "core:path:allow-normalize -> Enables the normalize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-normalize" + ] + }, + { + "description": "core:path:allow-resolve -> Enables the resolve command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-resolve" + ] + }, + { + "description": "core:path:allow-resolve-directory -> Enables the resolve_directory command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-resolve-directory" + ] + }, + { + "description": "core:path:deny-basename -> Denies the basename command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-basename" + ] + }, + { + "description": "core:path:deny-dirname -> Denies the dirname command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-dirname" + ] + }, + { + "description": "core:path:deny-extname -> Denies the extname command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-extname" + ] + }, + { + "description": "core:path:deny-is-absolute -> Denies the is_absolute command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-is-absolute" + ] + }, + { + "description": "core:path:deny-join -> Denies the join command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-join" + ] + }, + { + "description": "core:path:deny-normalize -> Denies the normalize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-normalize" + ] + }, + { + "description": "core:path:deny-resolve -> Denies the resolve command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-resolve" + ] + }, + { + "description": "core:path:deny-resolve-directory -> Denies the resolve_directory command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-resolve-directory" + ] + }, + { + "description": "core:resources:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:resources:default" + ] + }, + { + "description": "core:resources:allow-close -> Enables the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:resources:allow-close" + ] + }, + { + "description": "core:resources:deny-close -> Denies the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:resources:deny-close" + ] + }, + { + "description": "core:tray:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:tray:default" + ] + }, + { + "description": "core:tray:allow-get-by-id -> Enables the get_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-get-by-id" + ] + }, + { + "description": "core:tray:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-new" + ] + }, + { + "description": "core:tray:allow-remove-by-id -> Enables the remove_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-remove-by-id" + ] + }, + { + "description": "core:tray:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-icon" + ] + }, + { + "description": "core:tray:allow-set-icon-as-template -> Enables the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-icon-as-template" + ] + }, + { + "description": "core:tray:allow-set-menu -> Enables the set_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-menu" + ] + }, + { + "description": "core:tray:allow-set-show-menu-on-left-click -> Enables the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-show-menu-on-left-click" + ] + }, + { + "description": "core:tray:allow-set-temp-dir-path -> Enables the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-temp-dir-path" + ] + }, + { + "description": "core:tray:allow-set-title -> Enables the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-title" + ] + }, + { + "description": "core:tray:allow-set-tooltip -> Enables the set_tooltip command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-tooltip" + ] + }, + { + "description": "core:tray:allow-set-visible -> Enables the set_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-visible" + ] + }, + { + "description": "core:tray:deny-get-by-id -> Denies the get_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-get-by-id" + ] + }, + { + "description": "core:tray:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-new" + ] + }, + { + "description": "core:tray:deny-remove-by-id -> Denies the remove_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-remove-by-id" + ] + }, + { + "description": "core:tray:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-icon" + ] + }, + { + "description": "core:tray:deny-set-icon-as-template -> Denies the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-icon-as-template" + ] + }, + { + "description": "core:tray:deny-set-menu -> Denies the set_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-menu" + ] + }, + { + "description": "core:tray:deny-set-show-menu-on-left-click -> Denies the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-show-menu-on-left-click" + ] + }, + { + "description": "core:tray:deny-set-temp-dir-path -> Denies the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-temp-dir-path" + ] + }, + { + "description": "core:tray:deny-set-title -> Denies the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-title" + ] + }, + { + "description": "core:tray:deny-set-tooltip -> Denies the set_tooltip command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-tooltip" + ] + }, + { + "description": "core:tray:deny-set-visible -> Denies the set_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-visible" + ] + }, + { + "description": "core:webview:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:webview:default" + ] + }, + { + "description": "core:webview:allow-create-webview -> Enables the create_webview command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-create-webview" + ] + }, + { + "description": "core:webview:allow-create-webview-window -> Enables the create_webview_window command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-create-webview-window" + ] + }, + { + "description": "core:webview:allow-internal-toggle-devtools -> Enables the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-internal-toggle-devtools" + ] + }, + { + "description": "core:webview:allow-print -> Enables the print command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-print" + ] + }, + { + "description": "core:webview:allow-reparent -> Enables the reparent command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-reparent" + ] + }, + { + "description": "core:webview:allow-set-webview-focus -> Enables the set_webview_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-set-webview-focus" + ] + }, + { + "description": "core:webview:allow-set-webview-position -> Enables the set_webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-set-webview-position" + ] + }, + { + "description": "core:webview:allow-set-webview-size -> Enables the set_webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-set-webview-size" + ] + }, + { + "description": "core:webview:allow-set-webview-zoom -> Enables the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-set-webview-zoom" + ] + }, + { + "description": "core:webview:allow-webview-close -> Enables the webview_close command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-webview-close" + ] + }, + { + "description": "core:webview:allow-webview-position -> Enables the webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-webview-position" + ] + }, + { + "description": "core:webview:allow-webview-size -> Enables the webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-webview-size" + ] + }, + { + "description": "core:webview:deny-create-webview -> Denies the create_webview command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-create-webview" + ] + }, + { + "description": "core:webview:deny-create-webview-window -> Denies the create_webview_window command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-create-webview-window" + ] + }, + { + "description": "core:webview:deny-internal-toggle-devtools -> Denies the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-internal-toggle-devtools" + ] + }, + { + "description": "core:webview:deny-print -> Denies the print command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-print" + ] + }, + { + "description": "core:webview:deny-reparent -> Denies the reparent command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-reparent" + ] + }, + { + "description": "core:webview:deny-set-webview-focus -> Denies the set_webview_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-set-webview-focus" + ] + }, + { + "description": "core:webview:deny-set-webview-position -> Denies the set_webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-set-webview-position" + ] + }, + { + "description": "core:webview:deny-set-webview-size -> Denies the set_webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-set-webview-size" + ] + }, + { + "description": "core:webview:deny-set-webview-zoom -> Denies the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-set-webview-zoom" + ] + }, + { + "description": "core:webview:deny-webview-close -> Denies the webview_close command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-webview-close" + ] + }, + { + "description": "core:webview:deny-webview-position -> Denies the webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-webview-position" + ] + }, + { + "description": "core:webview:deny-webview-size -> Denies the webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-webview-size" + ] + }, + { + "description": "core:window:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:window:default" + ] + }, + { + "description": "core:window:allow-available-monitors -> Enables the available_monitors command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-available-monitors" + ] + }, + { + "description": "core:window:allow-center -> Enables the center command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-center" + ] + }, + { + "description": "core:window:allow-close -> Enables the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-close" + ] + }, + { + "description": "core:window:allow-create -> Enables the create command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-create" + ] + }, + { + "description": "core:window:allow-current-monitor -> Enables the current_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-current-monitor" + ] + }, + { + "description": "core:window:allow-cursor-position -> Enables the cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-cursor-position" + ] + }, + { + "description": "core:window:allow-destroy -> Enables the destroy command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-destroy" + ] + }, + { + "description": "core:window:allow-hide -> Enables the hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-hide" + ] + }, + { + "description": "core:window:allow-inner-position -> Enables the inner_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-inner-position" + ] + }, + { + "description": "core:window:allow-inner-size -> Enables the inner_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-inner-size" + ] + }, + { + "description": "core:window:allow-internal-toggle-maximize -> Enables the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-internal-toggle-maximize" + ] + }, + { + "description": "core:window:allow-is-closable -> Enables the is_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-closable" + ] + }, + { + "description": "core:window:allow-is-decorated -> Enables the is_decorated command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-decorated" + ] + }, + { + "description": "core:window:allow-is-focused -> Enables the is_focused command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-focused" + ] + }, + { + "description": "core:window:allow-is-fullscreen -> Enables the is_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-fullscreen" + ] + }, + { + "description": "core:window:allow-is-maximizable -> Enables the is_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-maximizable" + ] + }, + { + "description": "core:window:allow-is-maximized -> Enables the is_maximized command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-maximized" + ] + }, + { + "description": "core:window:allow-is-minimizable -> Enables the is_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-minimizable" + ] + }, + { + "description": "core:window:allow-is-minimized -> Enables the is_minimized command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-minimized" + ] + }, + { + "description": "core:window:allow-is-resizable -> Enables the is_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-resizable" + ] + }, + { + "description": "core:window:allow-is-visible -> Enables the is_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-visible" + ] + }, + { + "description": "core:window:allow-maximize -> Enables the maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-maximize" + ] + }, + { + "description": "core:window:allow-minimize -> Enables the minimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-minimize" + ] + }, + { + "description": "core:window:allow-monitor-from-point -> Enables the monitor_from_point command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-monitor-from-point" + ] + }, + { + "description": "core:window:allow-outer-position -> Enables the outer_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-outer-position" + ] + }, + { + "description": "core:window:allow-outer-size -> Enables the outer_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-outer-size" + ] + }, + { + "description": "core:window:allow-primary-monitor -> Enables the primary_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-primary-monitor" + ] + }, + { + "description": "core:window:allow-request-user-attention -> Enables the request_user_attention command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-request-user-attention" + ] + }, + { + "description": "core:window:allow-scale-factor -> Enables the scale_factor command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-scale-factor" + ] + }, + { + "description": "core:window:allow-set-always-on-bottom -> Enables the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-always-on-bottom" + ] + }, + { + "description": "core:window:allow-set-always-on-top -> Enables the set_always_on_top command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-always-on-top" + ] + }, + { + "description": "core:window:allow-set-closable -> Enables the set_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-closable" + ] + }, + { + "description": "core:window:allow-set-content-protected -> Enables the set_content_protected command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-content-protected" + ] + }, + { + "description": "core:window:allow-set-cursor-grab -> Enables the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-cursor-grab" + ] + }, + { + "description": "core:window:allow-set-cursor-icon -> Enables the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-cursor-icon" + ] + }, + { + "description": "core:window:allow-set-cursor-position -> Enables the set_cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-cursor-position" + ] + }, + { + "description": "core:window:allow-set-cursor-visible -> Enables the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-cursor-visible" + ] + }, + { + "description": "core:window:allow-set-decorations -> Enables the set_decorations command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-decorations" + ] + }, + { + "description": "core:window:allow-set-effects -> Enables the set_effects command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-effects" + ] + }, + { + "description": "core:window:allow-set-focus -> Enables the set_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-focus" + ] + }, + { + "description": "core:window:allow-set-fullscreen -> Enables the set_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-fullscreen" + ] + }, + { + "description": "core:window:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-icon" + ] + }, + { + "description": "core:window:allow-set-ignore-cursor-events -> Enables the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-ignore-cursor-events" + ] + }, + { + "description": "core:window:allow-set-max-size -> Enables the set_max_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-max-size" + ] + }, + { + "description": "core:window:allow-set-maximizable -> Enables the set_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-maximizable" + ] + }, + { + "description": "core:window:allow-set-min-size -> Enables the set_min_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-min-size" + ] + }, + { + "description": "core:window:allow-set-minimizable -> Enables the set_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-minimizable" + ] + }, + { + "description": "core:window:allow-set-position -> Enables the set_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-position" + ] + }, + { + "description": "core:window:allow-set-progress-bar -> Enables the set_progress_bar command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-progress-bar" + ] + }, + { + "description": "core:window:allow-set-resizable -> Enables the set_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-resizable" + ] + }, + { + "description": "core:window:allow-set-shadow -> Enables the set_shadow command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-shadow" + ] + }, + { + "description": "core:window:allow-set-size -> Enables the set_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-size" + ] + }, + { + "description": "core:window:allow-set-size-constraints -> Enables the set_size_constraints command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-size-constraints" + ] + }, + { + "description": "core:window:allow-set-skip-taskbar -> Enables the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-skip-taskbar" + ] + }, + { + "description": "core:window:allow-set-title -> Enables the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-title" + ] + }, + { + "description": "core:window:allow-set-title-bar-style -> Enables the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-title-bar-style" + ] + }, + { + "description": "core:window:allow-set-visible-on-all-workspaces -> Enables the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-visible-on-all-workspaces" + ] + }, + { + "description": "core:window:allow-show -> Enables the show command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-show" + ] + }, + { + "description": "core:window:allow-start-dragging -> Enables the start_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-start-dragging" + ] + }, + { + "description": "core:window:allow-start-resize-dragging -> Enables the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-start-resize-dragging" + ] + }, + { + "description": "core:window:allow-theme -> Enables the theme command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-theme" + ] + }, + { + "description": "core:window:allow-title -> Enables the title command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-title" + ] + }, + { + "description": "core:window:allow-toggle-maximize -> Enables the toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-toggle-maximize" + ] + }, + { + "description": "core:window:allow-unmaximize -> Enables the unmaximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-unmaximize" + ] + }, + { + "description": "core:window:allow-unminimize -> Enables the unminimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-unminimize" + ] + }, + { + "description": "core:window:deny-available-monitors -> Denies the available_monitors command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-available-monitors" + ] + }, + { + "description": "core:window:deny-center -> Denies the center command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-center" + ] + }, + { + "description": "core:window:deny-close -> Denies the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-close" + ] + }, + { + "description": "core:window:deny-create -> Denies the create command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-create" + ] + }, + { + "description": "core:window:deny-current-monitor -> Denies the current_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-current-monitor" + ] + }, + { + "description": "core:window:deny-cursor-position -> Denies the cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-cursor-position" + ] + }, + { + "description": "core:window:deny-destroy -> Denies the destroy command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-destroy" + ] + }, + { + "description": "core:window:deny-hide -> Denies the hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-hide" + ] + }, + { + "description": "core:window:deny-inner-position -> Denies the inner_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-inner-position" + ] + }, + { + "description": "core:window:deny-inner-size -> Denies the inner_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-inner-size" + ] + }, + { + "description": "core:window:deny-internal-toggle-maximize -> Denies the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-internal-toggle-maximize" + ] + }, + { + "description": "core:window:deny-is-closable -> Denies the is_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-closable" + ] + }, + { + "description": "core:window:deny-is-decorated -> Denies the is_decorated command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-decorated" + ] + }, + { + "description": "core:window:deny-is-focused -> Denies the is_focused command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-focused" + ] + }, + { + "description": "core:window:deny-is-fullscreen -> Denies the is_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-fullscreen" + ] + }, + { + "description": "core:window:deny-is-maximizable -> Denies the is_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-maximizable" + ] + }, + { + "description": "core:window:deny-is-maximized -> Denies the is_maximized command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-maximized" + ] + }, + { + "description": "core:window:deny-is-minimizable -> Denies the is_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-minimizable" + ] + }, + { + "description": "core:window:deny-is-minimized -> Denies the is_minimized command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-minimized" + ] + }, + { + "description": "core:window:deny-is-resizable -> Denies the is_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-resizable" + ] + }, + { + "description": "core:window:deny-is-visible -> Denies the is_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-visible" + ] + }, + { + "description": "core:window:deny-maximize -> Denies the maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-maximize" + ] + }, + { + "description": "core:window:deny-minimize -> Denies the minimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-minimize" + ] + }, + { + "description": "core:window:deny-monitor-from-point -> Denies the monitor_from_point command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-monitor-from-point" + ] + }, + { + "description": "core:window:deny-outer-position -> Denies the outer_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-outer-position" + ] + }, + { + "description": "core:window:deny-outer-size -> Denies the outer_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-outer-size" + ] + }, + { + "description": "core:window:deny-primary-monitor -> Denies the primary_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-primary-monitor" + ] + }, + { + "description": "core:window:deny-request-user-attention -> Denies the request_user_attention command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-request-user-attention" + ] + }, + { + "description": "core:window:deny-scale-factor -> Denies the scale_factor command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-scale-factor" + ] + }, + { + "description": "core:window:deny-set-always-on-bottom -> Denies the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-always-on-bottom" + ] + }, + { + "description": "core:window:deny-set-always-on-top -> Denies the set_always_on_top command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-always-on-top" + ] + }, + { + "description": "core:window:deny-set-closable -> Denies the set_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-closable" + ] + }, + { + "description": "core:window:deny-set-content-protected -> Denies the set_content_protected command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-content-protected" + ] + }, + { + "description": "core:window:deny-set-cursor-grab -> Denies the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-cursor-grab" + ] + }, + { + "description": "core:window:deny-set-cursor-icon -> Denies the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-cursor-icon" + ] + }, + { + "description": "core:window:deny-set-cursor-position -> Denies the set_cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-cursor-position" + ] + }, + { + "description": "core:window:deny-set-cursor-visible -> Denies the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-cursor-visible" + ] + }, + { + "description": "core:window:deny-set-decorations -> Denies the set_decorations command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-decorations" + ] + }, + { + "description": "core:window:deny-set-effects -> Denies the set_effects command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-effects" + ] + }, + { + "description": "core:window:deny-set-focus -> Denies the set_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-focus" + ] + }, + { + "description": "core:window:deny-set-fullscreen -> Denies the set_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-fullscreen" + ] + }, + { + "description": "core:window:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-icon" + ] + }, + { + "description": "core:window:deny-set-ignore-cursor-events -> Denies the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-ignore-cursor-events" + ] + }, + { + "description": "core:window:deny-set-max-size -> Denies the set_max_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-max-size" + ] + }, + { + "description": "core:window:deny-set-maximizable -> Denies the set_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-maximizable" + ] + }, + { + "description": "core:window:deny-set-min-size -> Denies the set_min_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-min-size" + ] + }, + { + "description": "core:window:deny-set-minimizable -> Denies the set_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-minimizable" + ] + }, + { + "description": "core:window:deny-set-position -> Denies the set_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-position" + ] + }, + { + "description": "core:window:deny-set-progress-bar -> Denies the set_progress_bar command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-progress-bar" + ] + }, + { + "description": "core:window:deny-set-resizable -> Denies the set_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-resizable" + ] + }, + { + "description": "core:window:deny-set-shadow -> Denies the set_shadow command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-shadow" + ] + }, + { + "description": "core:window:deny-set-size -> Denies the set_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-size" + ] + }, + { + "description": "core:window:deny-set-size-constraints -> Denies the set_size_constraints command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-size-constraints" + ] + }, + { + "description": "core:window:deny-set-skip-taskbar -> Denies the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-skip-taskbar" + ] + }, + { + "description": "core:window:deny-set-title -> Denies the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-title" + ] + }, + { + "description": "core:window:deny-set-title-bar-style -> Denies the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-title-bar-style" + ] + }, + { + "description": "core:window:deny-set-visible-on-all-workspaces -> Denies the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-visible-on-all-workspaces" + ] + }, + { + "description": "core:window:deny-show -> Denies the show command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-show" + ] + }, + { + "description": "core:window:deny-start-dragging -> Denies the start_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-start-dragging" + ] + }, + { + "description": "core:window:deny-start-resize-dragging -> Denies the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-start-resize-dragging" + ] + }, + { + "description": "core:window:deny-theme -> Denies the theme command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-theme" + ] + }, + { + "description": "core:window:deny-title -> Denies the title command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-title" + ] + }, + { + "description": "core:window:deny-toggle-maximize -> Denies the toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-toggle-maximize" + ] + }, + { + "description": "core:window:deny-unmaximize -> Denies the unmaximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-unmaximize" + ] + }, + { + "description": "core:window:deny-unminimize -> Denies the unminimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-unminimize" + ] + }, { "description": "dialog:default -> This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n", "type": "string", @@ -2620,69 +4468,6 @@ "dialog:deny-save" ] }, - { - "description": "event:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "event:default" - ] - }, - { - "description": "event:allow-emit -> Enables the emit command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:allow-emit" - ] - }, - { - "description": "event:allow-emit-to -> Enables the emit_to command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:allow-emit-to" - ] - }, - { - "description": "event:allow-listen -> Enables the listen command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:allow-listen" - ] - }, - { - "description": "event:allow-unlisten -> Enables the unlisten command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:allow-unlisten" - ] - }, - { - "description": "event:deny-emit -> Denies the emit command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:deny-emit" - ] - }, - { - "description": "event:deny-emit-to -> Denies the emit_to command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:deny-emit-to" - ] - }, - { - "description": "event:deny-listen -> Denies the listen command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:deny-listen" - ] - }, - { - "description": "event:deny-unlisten -> Denies the unlisten command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:deny-unlisten" - ] - }, { "description": "fs:allow-app-meta -> This allows non-recursive read access to metadata of the `$APP` folder, including file listing and statistics.", "type": "string", @@ -4685,83 +6470,6 @@ "fs:write-files" ] }, - { - "description": "image:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "image:default" - ] - }, - { - "description": "image:allow-from-bytes -> Enables the from_bytes command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:allow-from-bytes" - ] - }, - { - "description": "image:allow-from-path -> Enables the from_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:allow-from-path" - ] - }, - { - "description": "image:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:allow-new" - ] - }, - { - "description": "image:allow-rgba -> Enables the rgba command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:allow-rgba" - ] - }, - { - "description": "image:allow-size -> Enables the size command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:allow-size" - ] - }, - { - "description": "image:deny-from-bytes -> Denies the from_bytes command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:deny-from-bytes" - ] - }, - { - "description": "image:deny-from-path -> Denies the from_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:deny-from-path" - ] - }, - { - "description": "image:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:deny-new" - ] - }, - { - "description": "image:deny-rgba -> Denies the rgba command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:deny-rgba" - ] - }, - { - "description": "image:deny-size -> Denies the size command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:deny-size" - ] - }, { "description": "log:default -> Allows the log command", "type": "string", @@ -4783,321 +6491,6 @@ "log:deny-log" ] }, - { - "description": "menu:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "menu:default" - ] - }, - { - "description": "menu:allow-append -> Enables the append command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-append" - ] - }, - { - "description": "menu:allow-create-default -> Enables the create_default command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-create-default" - ] - }, - { - "description": "menu:allow-get -> Enables the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-get" - ] - }, - { - "description": "menu:allow-insert -> Enables the insert command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-insert" - ] - }, - { - "description": "menu:allow-is-checked -> Enables the is_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-is-checked" - ] - }, - { - "description": "menu:allow-is-enabled -> Enables the is_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-is-enabled" - ] - }, - { - "description": "menu:allow-items -> Enables the items command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-items" - ] - }, - { - "description": "menu:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-new" - ] - }, - { - "description": "menu:allow-popup -> Enables the popup command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-popup" - ] - }, - { - "description": "menu:allow-prepend -> Enables the prepend command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-prepend" - ] - }, - { - "description": "menu:allow-remove -> Enables the remove command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-remove" - ] - }, - { - "description": "menu:allow-remove-at -> Enables the remove_at command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-remove-at" - ] - }, - { - "description": "menu:allow-set-accelerator -> Enables the set_accelerator command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-accelerator" - ] - }, - { - "description": "menu:allow-set-as-app-menu -> Enables the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-as-app-menu" - ] - }, - { - "description": "menu:allow-set-as-help-menu-for-nsapp -> Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-as-help-menu-for-nsapp" - ] - }, - { - "description": "menu:allow-set-as-window-menu -> Enables the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-as-window-menu" - ] - }, - { - "description": "menu:allow-set-as-windows-menu-for-nsapp -> Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-as-windows-menu-for-nsapp" - ] - }, - { - "description": "menu:allow-set-checked -> Enables the set_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-checked" - ] - }, - { - "description": "menu:allow-set-enabled -> Enables the set_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-enabled" - ] - }, - { - "description": "menu:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-icon" - ] - }, - { - "description": "menu:allow-set-text -> Enables the set_text command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-text" - ] - }, - { - "description": "menu:allow-text -> Enables the text command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-text" - ] - }, - { - "description": "menu:deny-append -> Denies the append command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-append" - ] - }, - { - "description": "menu:deny-create-default -> Denies the create_default command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-create-default" - ] - }, - { - "description": "menu:deny-get -> Denies the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-get" - ] - }, - { - "description": "menu:deny-insert -> Denies the insert command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-insert" - ] - }, - { - "description": "menu:deny-is-checked -> Denies the is_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-is-checked" - ] - }, - { - "description": "menu:deny-is-enabled -> Denies the is_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-is-enabled" - ] - }, - { - "description": "menu:deny-items -> Denies the items command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-items" - ] - }, - { - "description": "menu:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-new" - ] - }, - { - "description": "menu:deny-popup -> Denies the popup command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-popup" - ] - }, - { - "description": "menu:deny-prepend -> Denies the prepend command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-prepend" - ] - }, - { - "description": "menu:deny-remove -> Denies the remove command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-remove" - ] - }, - { - "description": "menu:deny-remove-at -> Denies the remove_at command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-remove-at" - ] - }, - { - "description": "menu:deny-set-accelerator -> Denies the set_accelerator command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-accelerator" - ] - }, - { - "description": "menu:deny-set-as-app-menu -> Denies the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-as-app-menu" - ] - }, - { - "description": "menu:deny-set-as-help-menu-for-nsapp -> Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-as-help-menu-for-nsapp" - ] - }, - { - "description": "menu:deny-set-as-window-menu -> Denies the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-as-window-menu" - ] - }, - { - "description": "menu:deny-set-as-windows-menu-for-nsapp -> Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-as-windows-menu-for-nsapp" - ] - }, - { - "description": "menu:deny-set-checked -> Denies the set_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-checked" - ] - }, - { - "description": "menu:deny-set-enabled -> Denies the set_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-enabled" - ] - }, - { - "description": "menu:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-icon" - ] - }, - { - "description": "menu:deny-set-text -> Denies the set_text command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-text" - ] - }, - { - "description": "menu:deny-text -> Denies the text command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-text" - ] - }, { "description": "os:default -> This permission set configures which\noperating system information are available\nto gather from the frontend.\n\n#### Granted Permissions\n\nAll information except the host name are available.\n\n", "type": "string", @@ -5217,146 +6610,6 @@ "os:deny-version" ] }, - { - "description": "path:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "path:default" - ] - }, - { - "description": "path:allow-basename -> Enables the basename command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-basename" - ] - }, - { - "description": "path:allow-dirname -> Enables the dirname command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-dirname" - ] - }, - { - "description": "path:allow-extname -> Enables the extname command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-extname" - ] - }, - { - "description": "path:allow-is-absolute -> Enables the is_absolute command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-is-absolute" - ] - }, - { - "description": "path:allow-join -> Enables the join command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-join" - ] - }, - { - "description": "path:allow-normalize -> Enables the normalize command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-normalize" - ] - }, - { - "description": "path:allow-resolve -> Enables the resolve command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-resolve" - ] - }, - { - "description": "path:allow-resolve-directory -> Enables the resolve_directory command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-resolve-directory" - ] - }, - { - "description": "path:deny-basename -> Denies the basename command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-basename" - ] - }, - { - "description": "path:deny-dirname -> Denies the dirname command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-dirname" - ] - }, - { - "description": "path:deny-extname -> Denies the extname command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-extname" - ] - }, - { - "description": "path:deny-is-absolute -> Denies the is_absolute command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-is-absolute" - ] - }, - { - "description": "path:deny-join -> Denies the join command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-join" - ] - }, - { - "description": "path:deny-normalize -> Denies the normalize command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-normalize" - ] - }, - { - "description": "path:deny-resolve -> Denies the resolve command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-resolve" - ] - }, - { - "description": "path:deny-resolve-directory -> Denies the resolve_directory command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-resolve-directory" - ] - }, - { - "description": "resources:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "resources:default" - ] - }, - { - "description": "resources:allow-close -> Enables the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "resources:allow-close" - ] - }, - { - "description": "resources:deny-close -> Denies the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "resources:deny-close" - ] - }, { "description": "shell:default -> This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", "type": "string", @@ -5434,167 +6687,6 @@ "shell:deny-stdin-write" ] }, - { - "description": "tray:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "tray:default" - ] - }, - { - "description": "tray:allow-get-by-id -> Enables the get_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-get-by-id" - ] - }, - { - "description": "tray:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-new" - ] - }, - { - "description": "tray:allow-remove-by-id -> Enables the remove_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-remove-by-id" - ] - }, - { - "description": "tray:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-icon" - ] - }, - { - "description": "tray:allow-set-icon-as-template -> Enables the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-icon-as-template" - ] - }, - { - "description": "tray:allow-set-menu -> Enables the set_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-menu" - ] - }, - { - "description": "tray:allow-set-show-menu-on-left-click -> Enables the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-show-menu-on-left-click" - ] - }, - { - "description": "tray:allow-set-temp-dir-path -> Enables the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-temp-dir-path" - ] - }, - { - "description": "tray:allow-set-title -> Enables the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-title" - ] - }, - { - "description": "tray:allow-set-tooltip -> Enables the set_tooltip command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-tooltip" - ] - }, - { - "description": "tray:allow-set-visible -> Enables the set_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-visible" - ] - }, - { - "description": "tray:deny-get-by-id -> Denies the get_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-get-by-id" - ] - }, - { - "description": "tray:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-new" - ] - }, - { - "description": "tray:deny-remove-by-id -> Denies the remove_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-remove-by-id" - ] - }, - { - "description": "tray:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-icon" - ] - }, - { - "description": "tray:deny-set-icon-as-template -> Denies the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-icon-as-template" - ] - }, - { - "description": "tray:deny-set-menu -> Denies the set_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-menu" - ] - }, - { - "description": "tray:deny-set-show-menu-on-left-click -> Denies the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-show-menu-on-left-click" - ] - }, - { - "description": "tray:deny-set-temp-dir-path -> Denies the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-temp-dir-path" - ] - }, - { - "description": "tray:deny-set-title -> Denies the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-title" - ] - }, - { - "description": "tray:deny-set-tooltip -> Denies the set_tooltip command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-tooltip" - ] - }, - { - "description": "tray:deny-set-visible -> Denies the set_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-visible" - ] - }, { "description": "updater:default -> This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n", "type": "string", @@ -5658,1084 +6750,6 @@ "updater:deny-install" ] }, - { - "description": "webview:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "webview:default" - ] - }, - { - "description": "webview:allow-create-webview -> Enables the create_webview command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-create-webview" - ] - }, - { - "description": "webview:allow-create-webview-window -> Enables the create_webview_window command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-create-webview-window" - ] - }, - { - "description": "webview:allow-internal-toggle-devtools -> Enables the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-internal-toggle-devtools" - ] - }, - { - "description": "webview:allow-print -> Enables the print command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-print" - ] - }, - { - "description": "webview:allow-reparent -> Enables the reparent command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-reparent" - ] - }, - { - "description": "webview:allow-set-webview-focus -> Enables the set_webview_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-set-webview-focus" - ] - }, - { - "description": "webview:allow-set-webview-position -> Enables the set_webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-set-webview-position" - ] - }, - { - "description": "webview:allow-set-webview-size -> Enables the set_webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-set-webview-size" - ] - }, - { - "description": "webview:allow-set-webview-zoom -> Enables the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-set-webview-zoom" - ] - }, - { - "description": "webview:allow-webview-close -> Enables the webview_close command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-webview-close" - ] - }, - { - "description": "webview:allow-webview-position -> Enables the webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-webview-position" - ] - }, - { - "description": "webview:allow-webview-size -> Enables the webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-webview-size" - ] - }, - { - "description": "webview:deny-create-webview -> Denies the create_webview command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-create-webview" - ] - }, - { - "description": "webview:deny-create-webview-window -> Denies the create_webview_window command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-create-webview-window" - ] - }, - { - "description": "webview:deny-internal-toggle-devtools -> Denies the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-internal-toggle-devtools" - ] - }, - { - "description": "webview:deny-print -> Denies the print command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-print" - ] - }, - { - "description": "webview:deny-reparent -> Denies the reparent command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-reparent" - ] - }, - { - "description": "webview:deny-set-webview-focus -> Denies the set_webview_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-set-webview-focus" - ] - }, - { - "description": "webview:deny-set-webview-position -> Denies the set_webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-set-webview-position" - ] - }, - { - "description": "webview:deny-set-webview-size -> Denies the set_webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-set-webview-size" - ] - }, - { - "description": "webview:deny-set-webview-zoom -> Denies the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-set-webview-zoom" - ] - }, - { - "description": "webview:deny-webview-close -> Denies the webview_close command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-webview-close" - ] - }, - { - "description": "webview:deny-webview-position -> Denies the webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-webview-position" - ] - }, - { - "description": "webview:deny-webview-size -> Denies the webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-webview-size" - ] - }, - { - "description": "window:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "window:default" - ] - }, - { - "description": "window:allow-available-monitors -> Enables the available_monitors command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-available-monitors" - ] - }, - { - "description": "window:allow-center -> Enables the center command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-center" - ] - }, - { - "description": "window:allow-close -> Enables the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-close" - ] - }, - { - "description": "window:allow-create -> Enables the create command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-create" - ] - }, - { - "description": "window:allow-current-monitor -> Enables the current_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-current-monitor" - ] - }, - { - "description": "window:allow-cursor-position -> Enables the cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-cursor-position" - ] - }, - { - "description": "window:allow-destroy -> Enables the destroy command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-destroy" - ] - }, - { - "description": "window:allow-hide -> Enables the hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-hide" - ] - }, - { - "description": "window:allow-inner-position -> Enables the inner_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-inner-position" - ] - }, - { - "description": "window:allow-inner-size -> Enables the inner_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-inner-size" - ] - }, - { - "description": "window:allow-internal-toggle-maximize -> Enables the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-internal-toggle-maximize" - ] - }, - { - "description": "window:allow-is-closable -> Enables the is_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-closable" - ] - }, - { - "description": "window:allow-is-decorated -> Enables the is_decorated command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-decorated" - ] - }, - { - "description": "window:allow-is-focused -> Enables the is_focused command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-focused" - ] - }, - { - "description": "window:allow-is-fullscreen -> Enables the is_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-fullscreen" - ] - }, - { - "description": "window:allow-is-maximizable -> Enables the is_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-maximizable" - ] - }, - { - "description": "window:allow-is-maximized -> Enables the is_maximized command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-maximized" - ] - }, - { - "description": "window:allow-is-minimizable -> Enables the is_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-minimizable" - ] - }, - { - "description": "window:allow-is-minimized -> Enables the is_minimized command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-minimized" - ] - }, - { - "description": "window:allow-is-resizable -> Enables the is_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-resizable" - ] - }, - { - "description": "window:allow-is-visible -> Enables the is_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-visible" - ] - }, - { - "description": "window:allow-maximize -> Enables the maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-maximize" - ] - }, - { - "description": "window:allow-minimize -> Enables the minimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-minimize" - ] - }, - { - "description": "window:allow-monitor-from-point -> Enables the monitor_from_point command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-monitor-from-point" - ] - }, - { - "description": "window:allow-outer-position -> Enables the outer_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-outer-position" - ] - }, - { - "description": "window:allow-outer-size -> Enables the outer_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-outer-size" - ] - }, - { - "description": "window:allow-primary-monitor -> Enables the primary_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-primary-monitor" - ] - }, - { - "description": "window:allow-request-user-attention -> Enables the request_user_attention command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-request-user-attention" - ] - }, - { - "description": "window:allow-scale-factor -> Enables the scale_factor command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-scale-factor" - ] - }, - { - "description": "window:allow-set-always-on-bottom -> Enables the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-always-on-bottom" - ] - }, - { - "description": "window:allow-set-always-on-top -> Enables the set_always_on_top command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-always-on-top" - ] - }, - { - "description": "window:allow-set-closable -> Enables the set_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-closable" - ] - }, - { - "description": "window:allow-set-content-protected -> Enables the set_content_protected command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-content-protected" - ] - }, - { - "description": "window:allow-set-cursor-grab -> Enables the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-cursor-grab" - ] - }, - { - "description": "window:allow-set-cursor-icon -> Enables the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-cursor-icon" - ] - }, - { - "description": "window:allow-set-cursor-position -> Enables the set_cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-cursor-position" - ] - }, - { - "description": "window:allow-set-cursor-visible -> Enables the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-cursor-visible" - ] - }, - { - "description": "window:allow-set-decorations -> Enables the set_decorations command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-decorations" - ] - }, - { - "description": "window:allow-set-effects -> Enables the set_effects command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-effects" - ] - }, - { - "description": "window:allow-set-focus -> Enables the set_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-focus" - ] - }, - { - "description": "window:allow-set-fullscreen -> Enables the set_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-fullscreen" - ] - }, - { - "description": "window:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-icon" - ] - }, - { - "description": "window:allow-set-ignore-cursor-events -> Enables the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-ignore-cursor-events" - ] - }, - { - "description": "window:allow-set-max-size -> Enables the set_max_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-max-size" - ] - }, - { - "description": "window:allow-set-maximizable -> Enables the set_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-maximizable" - ] - }, - { - "description": "window:allow-set-min-size -> Enables the set_min_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-min-size" - ] - }, - { - "description": "window:allow-set-minimizable -> Enables the set_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-minimizable" - ] - }, - { - "description": "window:allow-set-position -> Enables the set_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-position" - ] - }, - { - "description": "window:allow-set-progress-bar -> Enables the set_progress_bar command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-progress-bar" - ] - }, - { - "description": "window:allow-set-resizable -> Enables the set_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-resizable" - ] - }, - { - "description": "window:allow-set-shadow -> Enables the set_shadow command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-shadow" - ] - }, - { - "description": "window:allow-set-size -> Enables the set_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-size" - ] - }, - { - "description": "window:allow-set-skip-taskbar -> Enables the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-skip-taskbar" - ] - }, - { - "description": "window:allow-set-title -> Enables the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-title" - ] - }, - { - "description": "window:allow-set-title-bar-style -> Enables the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-title-bar-style" - ] - }, - { - "description": "window:allow-set-visible-on-all-workspaces -> Enables the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-visible-on-all-workspaces" - ] - }, - { - "description": "window:allow-show -> Enables the show command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-show" - ] - }, - { - "description": "window:allow-start-dragging -> Enables the start_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-start-dragging" - ] - }, - { - "description": "window:allow-start-resize-dragging -> Enables the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-start-resize-dragging" - ] - }, - { - "description": "window:allow-theme -> Enables the theme command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-theme" - ] - }, - { - "description": "window:allow-title -> Enables the title command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-title" - ] - }, - { - "description": "window:allow-toggle-maximize -> Enables the toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-toggle-maximize" - ] - }, - { - "description": "window:allow-unmaximize -> Enables the unmaximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-unmaximize" - ] - }, - { - "description": "window:allow-unminimize -> Enables the unminimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-unminimize" - ] - }, - { - "description": "window:deny-available-monitors -> Denies the available_monitors command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-available-monitors" - ] - }, - { - "description": "window:deny-center -> Denies the center command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-center" - ] - }, - { - "description": "window:deny-close -> Denies the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-close" - ] - }, - { - "description": "window:deny-create -> Denies the create command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-create" - ] - }, - { - "description": "window:deny-current-monitor -> Denies the current_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-current-monitor" - ] - }, - { - "description": "window:deny-cursor-position -> Denies the cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-cursor-position" - ] - }, - { - "description": "window:deny-destroy -> Denies the destroy command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-destroy" - ] - }, - { - "description": "window:deny-hide -> Denies the hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-hide" - ] - }, - { - "description": "window:deny-inner-position -> Denies the inner_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-inner-position" - ] - }, - { - "description": "window:deny-inner-size -> Denies the inner_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-inner-size" - ] - }, - { - "description": "window:deny-internal-toggle-maximize -> Denies the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-internal-toggle-maximize" - ] - }, - { - "description": "window:deny-is-closable -> Denies the is_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-closable" - ] - }, - { - "description": "window:deny-is-decorated -> Denies the is_decorated command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-decorated" - ] - }, - { - "description": "window:deny-is-focused -> Denies the is_focused command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-focused" - ] - }, - { - "description": "window:deny-is-fullscreen -> Denies the is_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-fullscreen" - ] - }, - { - "description": "window:deny-is-maximizable -> Denies the is_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-maximizable" - ] - }, - { - "description": "window:deny-is-maximized -> Denies the is_maximized command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-maximized" - ] - }, - { - "description": "window:deny-is-minimizable -> Denies the is_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-minimizable" - ] - }, - { - "description": "window:deny-is-minimized -> Denies the is_minimized command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-minimized" - ] - }, - { - "description": "window:deny-is-resizable -> Denies the is_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-resizable" - ] - }, - { - "description": "window:deny-is-visible -> Denies the is_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-visible" - ] - }, - { - "description": "window:deny-maximize -> Denies the maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-maximize" - ] - }, - { - "description": "window:deny-minimize -> Denies the minimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-minimize" - ] - }, - { - "description": "window:deny-monitor-from-point -> Denies the monitor_from_point command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-monitor-from-point" - ] - }, - { - "description": "window:deny-outer-position -> Denies the outer_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-outer-position" - ] - }, - { - "description": "window:deny-outer-size -> Denies the outer_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-outer-size" - ] - }, - { - "description": "window:deny-primary-monitor -> Denies the primary_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-primary-monitor" - ] - }, - { - "description": "window:deny-request-user-attention -> Denies the request_user_attention command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-request-user-attention" - ] - }, - { - "description": "window:deny-scale-factor -> Denies the scale_factor command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-scale-factor" - ] - }, - { - "description": "window:deny-set-always-on-bottom -> Denies the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-always-on-bottom" - ] - }, - { - "description": "window:deny-set-always-on-top -> Denies the set_always_on_top command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-always-on-top" - ] - }, - { - "description": "window:deny-set-closable -> Denies the set_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-closable" - ] - }, - { - "description": "window:deny-set-content-protected -> Denies the set_content_protected command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-content-protected" - ] - }, - { - "description": "window:deny-set-cursor-grab -> Denies the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-cursor-grab" - ] - }, - { - "description": "window:deny-set-cursor-icon -> Denies the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-cursor-icon" - ] - }, - { - "description": "window:deny-set-cursor-position -> Denies the set_cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-cursor-position" - ] - }, - { - "description": "window:deny-set-cursor-visible -> Denies the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-cursor-visible" - ] - }, - { - "description": "window:deny-set-decorations -> Denies the set_decorations command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-decorations" - ] - }, - { - "description": "window:deny-set-effects -> Denies the set_effects command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-effects" - ] - }, - { - "description": "window:deny-set-focus -> Denies the set_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-focus" - ] - }, - { - "description": "window:deny-set-fullscreen -> Denies the set_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-fullscreen" - ] - }, - { - "description": "window:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-icon" - ] - }, - { - "description": "window:deny-set-ignore-cursor-events -> Denies the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-ignore-cursor-events" - ] - }, - { - "description": "window:deny-set-max-size -> Denies the set_max_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-max-size" - ] - }, - { - "description": "window:deny-set-maximizable -> Denies the set_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-maximizable" - ] - }, - { - "description": "window:deny-set-min-size -> Denies the set_min_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-min-size" - ] - }, - { - "description": "window:deny-set-minimizable -> Denies the set_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-minimizable" - ] - }, - { - "description": "window:deny-set-position -> Denies the set_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-position" - ] - }, - { - "description": "window:deny-set-progress-bar -> Denies the set_progress_bar command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-progress-bar" - ] - }, - { - "description": "window:deny-set-resizable -> Denies the set_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-resizable" - ] - }, - { - "description": "window:deny-set-shadow -> Denies the set_shadow command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-shadow" - ] - }, - { - "description": "window:deny-set-size -> Denies the set_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-size" - ] - }, - { - "description": "window:deny-set-skip-taskbar -> Denies the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-skip-taskbar" - ] - }, - { - "description": "window:deny-set-title -> Denies the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-title" - ] - }, - { - "description": "window:deny-set-title-bar-style -> Denies the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-title-bar-style" - ] - }, - { - "description": "window:deny-set-visible-on-all-workspaces -> Denies the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-visible-on-all-workspaces" - ] - }, - { - "description": "window:deny-show -> Denies the show command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-show" - ] - }, - { - "description": "window:deny-start-dragging -> Denies the start_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-start-dragging" - ] - }, - { - "description": "window:deny-start-resize-dragging -> Denies the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-start-resize-dragging" - ] - }, - { - "description": "window:deny-theme -> Denies the theme command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-theme" - ] - }, - { - "description": "window:deny-title -> Denies the title command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-title" - ] - }, - { - "description": "window:deny-toggle-maximize -> Denies the toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-toggle-maximize" - ] - }, - { - "description": "window:deny-unmaximize -> Denies the unmaximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-unmaximize" - ] - }, - { - "description": "window:deny-unminimize -> Denies the unminimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-unminimize" - ] - }, { "description": "window-state:default -> This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", "type": "string", @@ -6895,8 +6909,13 @@ "validator" ], "properties": { + "raw": { + "description": "Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.", + "default": false, + "type": "boolean" + }, "validator": { - "description": "[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\n[regex]: https://docs.rs/regex/latest/regex/#syntax", + "description": "[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: ", "type": "string" } }, diff --git a/src-tauri/gen/schemas/macOS-schema.json b/src-tauri/gen/schemas/macOS-schema.json index 4412909f..dcd047f7 100644 --- a/src-tauri/gen/schemas/macOS-schema.json +++ b/src-tauri/gen/schemas/macOS-schema.json @@ -37,7 +37,7 @@ ], "definitions": { "Capability": { - "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"path:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, \"platforms\": [\"macOS\",\"windows\"] } ```", + "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, \"platforms\": [\"macOS\",\"windows\"] } ```", "type": "object", "required": [ "identifier", @@ -84,7 +84,7 @@ } }, "permissions": { - "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"path:default\", \"event:default\", \"window:default\", \"app:default\", \"image:default\", \"resources:default\", \"menu:default\", \"tray:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", + "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", "type": "array", "items": { "$ref": "#/definitions/PermissionEntry" @@ -2361,97 +2361,6 @@ }, "Identifier": { "oneOf": [ - { - "description": "app:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "app:default" - ] - }, - { - "description": "app:allow-app-hide -> Enables the app_hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:allow-app-hide" - ] - }, - { - "description": "app:allow-app-show -> Enables the app_show command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:allow-app-show" - ] - }, - { - "description": "app:allow-default-window-icon -> Enables the default_window_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:allow-default-window-icon" - ] - }, - { - "description": "app:allow-name -> Enables the name command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:allow-name" - ] - }, - { - "description": "app:allow-tauri-version -> Enables the tauri_version command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:allow-tauri-version" - ] - }, - { - "description": "app:allow-version -> Enables the version command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:allow-version" - ] - }, - { - "description": "app:deny-app-hide -> Denies the app_hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:deny-app-hide" - ] - }, - { - "description": "app:deny-app-show -> Denies the app_show command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:deny-app-show" - ] - }, - { - "description": "app:deny-default-window-icon -> Denies the default_window_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:deny-default-window-icon" - ] - }, - { - "description": "app:deny-name -> Denies the name command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:deny-name" - ] - }, - { - "description": "app:deny-tauri-version -> Denies the tauri_version command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:deny-tauri-version" - ] - }, - { - "description": "app:deny-version -> Denies the version command without any pre-configured scope.", - "type": "string", - "enum": [ - "app:deny-version" - ] - }, { "description": "clipboard-manager:default -> No features are enabled by default, as we believe\nthe clipboard can be inherently dangerous and it is \napplication specific if read and/or write access is needed.\n\nClipboard interaction needs to be explicitly enabled.\n", "type": "string", @@ -2543,6 +2452,1945 @@ "clipboard-manager:deny-write-text" ] }, + { + "description": "core:app:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:app:default" + ] + }, + { + "description": "core:app:allow-app-hide -> Enables the app_hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:allow-app-hide" + ] + }, + { + "description": "core:app:allow-app-show -> Enables the app_show command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:allow-app-show" + ] + }, + { + "description": "core:app:allow-default-window-icon -> Enables the default_window_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:allow-default-window-icon" + ] + }, + { + "description": "core:app:allow-name -> Enables the name command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:allow-name" + ] + }, + { + "description": "core:app:allow-tauri-version -> Enables the tauri_version command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:allow-tauri-version" + ] + }, + { + "description": "core:app:allow-version -> Enables the version command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:allow-version" + ] + }, + { + "description": "core:app:deny-app-hide -> Denies the app_hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:deny-app-hide" + ] + }, + { + "description": "core:app:deny-app-show -> Denies the app_show command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:deny-app-show" + ] + }, + { + "description": "core:app:deny-default-window-icon -> Denies the default_window_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:deny-default-window-icon" + ] + }, + { + "description": "core:app:deny-name -> Denies the name command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:deny-name" + ] + }, + { + "description": "core:app:deny-tauri-version -> Denies the tauri_version command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:deny-tauri-version" + ] + }, + { + "description": "core:app:deny-version -> Denies the version command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:app:deny-version" + ] + }, + { + "description": "core:event:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:event:default" + ] + }, + { + "description": "core:event:allow-emit -> Enables the emit command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:allow-emit" + ] + }, + { + "description": "core:event:allow-emit-to -> Enables the emit_to command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:allow-emit-to" + ] + }, + { + "description": "core:event:allow-listen -> Enables the listen command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:allow-listen" + ] + }, + { + "description": "core:event:allow-unlisten -> Enables the unlisten command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:allow-unlisten" + ] + }, + { + "description": "core:event:deny-emit -> Denies the emit command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:deny-emit" + ] + }, + { + "description": "core:event:deny-emit-to -> Denies the emit_to command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:deny-emit-to" + ] + }, + { + "description": "core:event:deny-listen -> Denies the listen command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:deny-listen" + ] + }, + { + "description": "core:event:deny-unlisten -> Denies the unlisten command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:event:deny-unlisten" + ] + }, + { + "description": "core:image:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:image:default" + ] + }, + { + "description": "core:image:allow-from-bytes -> Enables the from_bytes command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:allow-from-bytes" + ] + }, + { + "description": "core:image:allow-from-path -> Enables the from_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:allow-from-path" + ] + }, + { + "description": "core:image:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:allow-new" + ] + }, + { + "description": "core:image:allow-rgba -> Enables the rgba command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:allow-rgba" + ] + }, + { + "description": "core:image:allow-size -> Enables the size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:allow-size" + ] + }, + { + "description": "core:image:deny-from-bytes -> Denies the from_bytes command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:deny-from-bytes" + ] + }, + { + "description": "core:image:deny-from-path -> Denies the from_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:deny-from-path" + ] + }, + { + "description": "core:image:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:deny-new" + ] + }, + { + "description": "core:image:deny-rgba -> Denies the rgba command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:deny-rgba" + ] + }, + { + "description": "core:image:deny-size -> Denies the size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:image:deny-size" + ] + }, + { + "description": "core:menu:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:menu:default" + ] + }, + { + "description": "core:menu:allow-append -> Enables the append command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-append" + ] + }, + { + "description": "core:menu:allow-create-default -> Enables the create_default command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-create-default" + ] + }, + { + "description": "core:menu:allow-get -> Enables the get command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-get" + ] + }, + { + "description": "core:menu:allow-insert -> Enables the insert command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-insert" + ] + }, + { + "description": "core:menu:allow-is-checked -> Enables the is_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-is-checked" + ] + }, + { + "description": "core:menu:allow-is-enabled -> Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-is-enabled" + ] + }, + { + "description": "core:menu:allow-items -> Enables the items command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-items" + ] + }, + { + "description": "core:menu:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-new" + ] + }, + { + "description": "core:menu:allow-popup -> Enables the popup command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-popup" + ] + }, + { + "description": "core:menu:allow-prepend -> Enables the prepend command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-prepend" + ] + }, + { + "description": "core:menu:allow-remove -> Enables the remove command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-remove" + ] + }, + { + "description": "core:menu:allow-remove-at -> Enables the remove_at command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-remove-at" + ] + }, + { + "description": "core:menu:allow-set-accelerator -> Enables the set_accelerator command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-accelerator" + ] + }, + { + "description": "core:menu:allow-set-as-app-menu -> Enables the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-as-app-menu" + ] + }, + { + "description": "core:menu:allow-set-as-help-menu-for-nsapp -> Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-as-help-menu-for-nsapp" + ] + }, + { + "description": "core:menu:allow-set-as-window-menu -> Enables the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-as-window-menu" + ] + }, + { + "description": "core:menu:allow-set-as-windows-menu-for-nsapp -> Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-as-windows-menu-for-nsapp" + ] + }, + { + "description": "core:menu:allow-set-checked -> Enables the set_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-checked" + ] + }, + { + "description": "core:menu:allow-set-enabled -> Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-enabled" + ] + }, + { + "description": "core:menu:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-icon" + ] + }, + { + "description": "core:menu:allow-set-text -> Enables the set_text command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-set-text" + ] + }, + { + "description": "core:menu:allow-text -> Enables the text command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:allow-text" + ] + }, + { + "description": "core:menu:deny-append -> Denies the append command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-append" + ] + }, + { + "description": "core:menu:deny-create-default -> Denies the create_default command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-create-default" + ] + }, + { + "description": "core:menu:deny-get -> Denies the get command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-get" + ] + }, + { + "description": "core:menu:deny-insert -> Denies the insert command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-insert" + ] + }, + { + "description": "core:menu:deny-is-checked -> Denies the is_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-is-checked" + ] + }, + { + "description": "core:menu:deny-is-enabled -> Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-is-enabled" + ] + }, + { + "description": "core:menu:deny-items -> Denies the items command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-items" + ] + }, + { + "description": "core:menu:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-new" + ] + }, + { + "description": "core:menu:deny-popup -> Denies the popup command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-popup" + ] + }, + { + "description": "core:menu:deny-prepend -> Denies the prepend command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-prepend" + ] + }, + { + "description": "core:menu:deny-remove -> Denies the remove command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-remove" + ] + }, + { + "description": "core:menu:deny-remove-at -> Denies the remove_at command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-remove-at" + ] + }, + { + "description": "core:menu:deny-set-accelerator -> Denies the set_accelerator command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-accelerator" + ] + }, + { + "description": "core:menu:deny-set-as-app-menu -> Denies the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-as-app-menu" + ] + }, + { + "description": "core:menu:deny-set-as-help-menu-for-nsapp -> Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-as-help-menu-for-nsapp" + ] + }, + { + "description": "core:menu:deny-set-as-window-menu -> Denies the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-as-window-menu" + ] + }, + { + "description": "core:menu:deny-set-as-windows-menu-for-nsapp -> Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-as-windows-menu-for-nsapp" + ] + }, + { + "description": "core:menu:deny-set-checked -> Denies the set_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-checked" + ] + }, + { + "description": "core:menu:deny-set-enabled -> Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-enabled" + ] + }, + { + "description": "core:menu:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-icon" + ] + }, + { + "description": "core:menu:deny-set-text -> Denies the set_text command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-set-text" + ] + }, + { + "description": "core:menu:deny-text -> Denies the text command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:menu:deny-text" + ] + }, + { + "description": "core:path:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:path:default" + ] + }, + { + "description": "core:path:allow-basename -> Enables the basename command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-basename" + ] + }, + { + "description": "core:path:allow-dirname -> Enables the dirname command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-dirname" + ] + }, + { + "description": "core:path:allow-extname -> Enables the extname command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-extname" + ] + }, + { + "description": "core:path:allow-is-absolute -> Enables the is_absolute command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-is-absolute" + ] + }, + { + "description": "core:path:allow-join -> Enables the join command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-join" + ] + }, + { + "description": "core:path:allow-normalize -> Enables the normalize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-normalize" + ] + }, + { + "description": "core:path:allow-resolve -> Enables the resolve command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-resolve" + ] + }, + { + "description": "core:path:allow-resolve-directory -> Enables the resolve_directory command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:allow-resolve-directory" + ] + }, + { + "description": "core:path:deny-basename -> Denies the basename command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-basename" + ] + }, + { + "description": "core:path:deny-dirname -> Denies the dirname command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-dirname" + ] + }, + { + "description": "core:path:deny-extname -> Denies the extname command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-extname" + ] + }, + { + "description": "core:path:deny-is-absolute -> Denies the is_absolute command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-is-absolute" + ] + }, + { + "description": "core:path:deny-join -> Denies the join command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-join" + ] + }, + { + "description": "core:path:deny-normalize -> Denies the normalize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-normalize" + ] + }, + { + "description": "core:path:deny-resolve -> Denies the resolve command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-resolve" + ] + }, + { + "description": "core:path:deny-resolve-directory -> Denies the resolve_directory command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:path:deny-resolve-directory" + ] + }, + { + "description": "core:resources:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:resources:default" + ] + }, + { + "description": "core:resources:allow-close -> Enables the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:resources:allow-close" + ] + }, + { + "description": "core:resources:deny-close -> Denies the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:resources:deny-close" + ] + }, + { + "description": "core:tray:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:tray:default" + ] + }, + { + "description": "core:tray:allow-get-by-id -> Enables the get_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-get-by-id" + ] + }, + { + "description": "core:tray:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-new" + ] + }, + { + "description": "core:tray:allow-remove-by-id -> Enables the remove_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-remove-by-id" + ] + }, + { + "description": "core:tray:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-icon" + ] + }, + { + "description": "core:tray:allow-set-icon-as-template -> Enables the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-icon-as-template" + ] + }, + { + "description": "core:tray:allow-set-menu -> Enables the set_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-menu" + ] + }, + { + "description": "core:tray:allow-set-show-menu-on-left-click -> Enables the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-show-menu-on-left-click" + ] + }, + { + "description": "core:tray:allow-set-temp-dir-path -> Enables the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-temp-dir-path" + ] + }, + { + "description": "core:tray:allow-set-title -> Enables the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-title" + ] + }, + { + "description": "core:tray:allow-set-tooltip -> Enables the set_tooltip command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-tooltip" + ] + }, + { + "description": "core:tray:allow-set-visible -> Enables the set_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:allow-set-visible" + ] + }, + { + "description": "core:tray:deny-get-by-id -> Denies the get_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-get-by-id" + ] + }, + { + "description": "core:tray:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-new" + ] + }, + { + "description": "core:tray:deny-remove-by-id -> Denies the remove_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-remove-by-id" + ] + }, + { + "description": "core:tray:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-icon" + ] + }, + { + "description": "core:tray:deny-set-icon-as-template -> Denies the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-icon-as-template" + ] + }, + { + "description": "core:tray:deny-set-menu -> Denies the set_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-menu" + ] + }, + { + "description": "core:tray:deny-set-show-menu-on-left-click -> Denies the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-show-menu-on-left-click" + ] + }, + { + "description": "core:tray:deny-set-temp-dir-path -> Denies the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-temp-dir-path" + ] + }, + { + "description": "core:tray:deny-set-title -> Denies the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-title" + ] + }, + { + "description": "core:tray:deny-set-tooltip -> Denies the set_tooltip command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-tooltip" + ] + }, + { + "description": "core:tray:deny-set-visible -> Denies the set_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:tray:deny-set-visible" + ] + }, + { + "description": "core:webview:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:webview:default" + ] + }, + { + "description": "core:webview:allow-create-webview -> Enables the create_webview command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-create-webview" + ] + }, + { + "description": "core:webview:allow-create-webview-window -> Enables the create_webview_window command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-create-webview-window" + ] + }, + { + "description": "core:webview:allow-internal-toggle-devtools -> Enables the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-internal-toggle-devtools" + ] + }, + { + "description": "core:webview:allow-print -> Enables the print command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-print" + ] + }, + { + "description": "core:webview:allow-reparent -> Enables the reparent command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-reparent" + ] + }, + { + "description": "core:webview:allow-set-webview-focus -> Enables the set_webview_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-set-webview-focus" + ] + }, + { + "description": "core:webview:allow-set-webview-position -> Enables the set_webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-set-webview-position" + ] + }, + { + "description": "core:webview:allow-set-webview-size -> Enables the set_webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-set-webview-size" + ] + }, + { + "description": "core:webview:allow-set-webview-zoom -> Enables the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-set-webview-zoom" + ] + }, + { + "description": "core:webview:allow-webview-close -> Enables the webview_close command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-webview-close" + ] + }, + { + "description": "core:webview:allow-webview-position -> Enables the webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-webview-position" + ] + }, + { + "description": "core:webview:allow-webview-size -> Enables the webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-webview-size" + ] + }, + { + "description": "core:webview:deny-create-webview -> Denies the create_webview command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-create-webview" + ] + }, + { + "description": "core:webview:deny-create-webview-window -> Denies the create_webview_window command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-create-webview-window" + ] + }, + { + "description": "core:webview:deny-internal-toggle-devtools -> Denies the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-internal-toggle-devtools" + ] + }, + { + "description": "core:webview:deny-print -> Denies the print command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-print" + ] + }, + { + "description": "core:webview:deny-reparent -> Denies the reparent command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-reparent" + ] + }, + { + "description": "core:webview:deny-set-webview-focus -> Denies the set_webview_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-set-webview-focus" + ] + }, + { + "description": "core:webview:deny-set-webview-position -> Denies the set_webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-set-webview-position" + ] + }, + { + "description": "core:webview:deny-set-webview-size -> Denies the set_webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-set-webview-size" + ] + }, + { + "description": "core:webview:deny-set-webview-zoom -> Denies the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-set-webview-zoom" + ] + }, + { + "description": "core:webview:deny-webview-close -> Denies the webview_close command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-webview-close" + ] + }, + { + "description": "core:webview:deny-webview-position -> Denies the webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-webview-position" + ] + }, + { + "description": "core:webview:deny-webview-size -> Denies the webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-webview-size" + ] + }, + { + "description": "core:window:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "core:window:default" + ] + }, + { + "description": "core:window:allow-available-monitors -> Enables the available_monitors command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-available-monitors" + ] + }, + { + "description": "core:window:allow-center -> Enables the center command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-center" + ] + }, + { + "description": "core:window:allow-close -> Enables the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-close" + ] + }, + { + "description": "core:window:allow-create -> Enables the create command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-create" + ] + }, + { + "description": "core:window:allow-current-monitor -> Enables the current_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-current-monitor" + ] + }, + { + "description": "core:window:allow-cursor-position -> Enables the cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-cursor-position" + ] + }, + { + "description": "core:window:allow-destroy -> Enables the destroy command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-destroy" + ] + }, + { + "description": "core:window:allow-hide -> Enables the hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-hide" + ] + }, + { + "description": "core:window:allow-inner-position -> Enables the inner_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-inner-position" + ] + }, + { + "description": "core:window:allow-inner-size -> Enables the inner_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-inner-size" + ] + }, + { + "description": "core:window:allow-internal-toggle-maximize -> Enables the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-internal-toggle-maximize" + ] + }, + { + "description": "core:window:allow-is-closable -> Enables the is_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-closable" + ] + }, + { + "description": "core:window:allow-is-decorated -> Enables the is_decorated command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-decorated" + ] + }, + { + "description": "core:window:allow-is-focused -> Enables the is_focused command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-focused" + ] + }, + { + "description": "core:window:allow-is-fullscreen -> Enables the is_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-fullscreen" + ] + }, + { + "description": "core:window:allow-is-maximizable -> Enables the is_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-maximizable" + ] + }, + { + "description": "core:window:allow-is-maximized -> Enables the is_maximized command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-maximized" + ] + }, + { + "description": "core:window:allow-is-minimizable -> Enables the is_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-minimizable" + ] + }, + { + "description": "core:window:allow-is-minimized -> Enables the is_minimized command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-minimized" + ] + }, + { + "description": "core:window:allow-is-resizable -> Enables the is_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-resizable" + ] + }, + { + "description": "core:window:allow-is-visible -> Enables the is_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-is-visible" + ] + }, + { + "description": "core:window:allow-maximize -> Enables the maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-maximize" + ] + }, + { + "description": "core:window:allow-minimize -> Enables the minimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-minimize" + ] + }, + { + "description": "core:window:allow-monitor-from-point -> Enables the monitor_from_point command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-monitor-from-point" + ] + }, + { + "description": "core:window:allow-outer-position -> Enables the outer_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-outer-position" + ] + }, + { + "description": "core:window:allow-outer-size -> Enables the outer_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-outer-size" + ] + }, + { + "description": "core:window:allow-primary-monitor -> Enables the primary_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-primary-monitor" + ] + }, + { + "description": "core:window:allow-request-user-attention -> Enables the request_user_attention command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-request-user-attention" + ] + }, + { + "description": "core:window:allow-scale-factor -> Enables the scale_factor command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-scale-factor" + ] + }, + { + "description": "core:window:allow-set-always-on-bottom -> Enables the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-always-on-bottom" + ] + }, + { + "description": "core:window:allow-set-always-on-top -> Enables the set_always_on_top command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-always-on-top" + ] + }, + { + "description": "core:window:allow-set-closable -> Enables the set_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-closable" + ] + }, + { + "description": "core:window:allow-set-content-protected -> Enables the set_content_protected command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-content-protected" + ] + }, + { + "description": "core:window:allow-set-cursor-grab -> Enables the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-cursor-grab" + ] + }, + { + "description": "core:window:allow-set-cursor-icon -> Enables the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-cursor-icon" + ] + }, + { + "description": "core:window:allow-set-cursor-position -> Enables the set_cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-cursor-position" + ] + }, + { + "description": "core:window:allow-set-cursor-visible -> Enables the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-cursor-visible" + ] + }, + { + "description": "core:window:allow-set-decorations -> Enables the set_decorations command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-decorations" + ] + }, + { + "description": "core:window:allow-set-effects -> Enables the set_effects command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-effects" + ] + }, + { + "description": "core:window:allow-set-focus -> Enables the set_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-focus" + ] + }, + { + "description": "core:window:allow-set-fullscreen -> Enables the set_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-fullscreen" + ] + }, + { + "description": "core:window:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-icon" + ] + }, + { + "description": "core:window:allow-set-ignore-cursor-events -> Enables the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-ignore-cursor-events" + ] + }, + { + "description": "core:window:allow-set-max-size -> Enables the set_max_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-max-size" + ] + }, + { + "description": "core:window:allow-set-maximizable -> Enables the set_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-maximizable" + ] + }, + { + "description": "core:window:allow-set-min-size -> Enables the set_min_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-min-size" + ] + }, + { + "description": "core:window:allow-set-minimizable -> Enables the set_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-minimizable" + ] + }, + { + "description": "core:window:allow-set-position -> Enables the set_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-position" + ] + }, + { + "description": "core:window:allow-set-progress-bar -> Enables the set_progress_bar command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-progress-bar" + ] + }, + { + "description": "core:window:allow-set-resizable -> Enables the set_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-resizable" + ] + }, + { + "description": "core:window:allow-set-shadow -> Enables the set_shadow command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-shadow" + ] + }, + { + "description": "core:window:allow-set-size -> Enables the set_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-size" + ] + }, + { + "description": "core:window:allow-set-size-constraints -> Enables the set_size_constraints command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-size-constraints" + ] + }, + { + "description": "core:window:allow-set-skip-taskbar -> Enables the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-skip-taskbar" + ] + }, + { + "description": "core:window:allow-set-title -> Enables the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-title" + ] + }, + { + "description": "core:window:allow-set-title-bar-style -> Enables the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-title-bar-style" + ] + }, + { + "description": "core:window:allow-set-visible-on-all-workspaces -> Enables the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-set-visible-on-all-workspaces" + ] + }, + { + "description": "core:window:allow-show -> Enables the show command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-show" + ] + }, + { + "description": "core:window:allow-start-dragging -> Enables the start_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-start-dragging" + ] + }, + { + "description": "core:window:allow-start-resize-dragging -> Enables the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-start-resize-dragging" + ] + }, + { + "description": "core:window:allow-theme -> Enables the theme command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-theme" + ] + }, + { + "description": "core:window:allow-title -> Enables the title command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-title" + ] + }, + { + "description": "core:window:allow-toggle-maximize -> Enables the toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-toggle-maximize" + ] + }, + { + "description": "core:window:allow-unmaximize -> Enables the unmaximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-unmaximize" + ] + }, + { + "description": "core:window:allow-unminimize -> Enables the unminimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-unminimize" + ] + }, + { + "description": "core:window:deny-available-monitors -> Denies the available_monitors command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-available-monitors" + ] + }, + { + "description": "core:window:deny-center -> Denies the center command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-center" + ] + }, + { + "description": "core:window:deny-close -> Denies the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-close" + ] + }, + { + "description": "core:window:deny-create -> Denies the create command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-create" + ] + }, + { + "description": "core:window:deny-current-monitor -> Denies the current_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-current-monitor" + ] + }, + { + "description": "core:window:deny-cursor-position -> Denies the cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-cursor-position" + ] + }, + { + "description": "core:window:deny-destroy -> Denies the destroy command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-destroy" + ] + }, + { + "description": "core:window:deny-hide -> Denies the hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-hide" + ] + }, + { + "description": "core:window:deny-inner-position -> Denies the inner_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-inner-position" + ] + }, + { + "description": "core:window:deny-inner-size -> Denies the inner_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-inner-size" + ] + }, + { + "description": "core:window:deny-internal-toggle-maximize -> Denies the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-internal-toggle-maximize" + ] + }, + { + "description": "core:window:deny-is-closable -> Denies the is_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-closable" + ] + }, + { + "description": "core:window:deny-is-decorated -> Denies the is_decorated command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-decorated" + ] + }, + { + "description": "core:window:deny-is-focused -> Denies the is_focused command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-focused" + ] + }, + { + "description": "core:window:deny-is-fullscreen -> Denies the is_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-fullscreen" + ] + }, + { + "description": "core:window:deny-is-maximizable -> Denies the is_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-maximizable" + ] + }, + { + "description": "core:window:deny-is-maximized -> Denies the is_maximized command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-maximized" + ] + }, + { + "description": "core:window:deny-is-minimizable -> Denies the is_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-minimizable" + ] + }, + { + "description": "core:window:deny-is-minimized -> Denies the is_minimized command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-minimized" + ] + }, + { + "description": "core:window:deny-is-resizable -> Denies the is_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-resizable" + ] + }, + { + "description": "core:window:deny-is-visible -> Denies the is_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-is-visible" + ] + }, + { + "description": "core:window:deny-maximize -> Denies the maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-maximize" + ] + }, + { + "description": "core:window:deny-minimize -> Denies the minimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-minimize" + ] + }, + { + "description": "core:window:deny-monitor-from-point -> Denies the monitor_from_point command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-monitor-from-point" + ] + }, + { + "description": "core:window:deny-outer-position -> Denies the outer_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-outer-position" + ] + }, + { + "description": "core:window:deny-outer-size -> Denies the outer_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-outer-size" + ] + }, + { + "description": "core:window:deny-primary-monitor -> Denies the primary_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-primary-monitor" + ] + }, + { + "description": "core:window:deny-request-user-attention -> Denies the request_user_attention command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-request-user-attention" + ] + }, + { + "description": "core:window:deny-scale-factor -> Denies the scale_factor command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-scale-factor" + ] + }, + { + "description": "core:window:deny-set-always-on-bottom -> Denies the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-always-on-bottom" + ] + }, + { + "description": "core:window:deny-set-always-on-top -> Denies the set_always_on_top command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-always-on-top" + ] + }, + { + "description": "core:window:deny-set-closable -> Denies the set_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-closable" + ] + }, + { + "description": "core:window:deny-set-content-protected -> Denies the set_content_protected command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-content-protected" + ] + }, + { + "description": "core:window:deny-set-cursor-grab -> Denies the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-cursor-grab" + ] + }, + { + "description": "core:window:deny-set-cursor-icon -> Denies the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-cursor-icon" + ] + }, + { + "description": "core:window:deny-set-cursor-position -> Denies the set_cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-cursor-position" + ] + }, + { + "description": "core:window:deny-set-cursor-visible -> Denies the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-cursor-visible" + ] + }, + { + "description": "core:window:deny-set-decorations -> Denies the set_decorations command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-decorations" + ] + }, + { + "description": "core:window:deny-set-effects -> Denies the set_effects command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-effects" + ] + }, + { + "description": "core:window:deny-set-focus -> Denies the set_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-focus" + ] + }, + { + "description": "core:window:deny-set-fullscreen -> Denies the set_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-fullscreen" + ] + }, + { + "description": "core:window:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-icon" + ] + }, + { + "description": "core:window:deny-set-ignore-cursor-events -> Denies the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-ignore-cursor-events" + ] + }, + { + "description": "core:window:deny-set-max-size -> Denies the set_max_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-max-size" + ] + }, + { + "description": "core:window:deny-set-maximizable -> Denies the set_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-maximizable" + ] + }, + { + "description": "core:window:deny-set-min-size -> Denies the set_min_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-min-size" + ] + }, + { + "description": "core:window:deny-set-minimizable -> Denies the set_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-minimizable" + ] + }, + { + "description": "core:window:deny-set-position -> Denies the set_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-position" + ] + }, + { + "description": "core:window:deny-set-progress-bar -> Denies the set_progress_bar command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-progress-bar" + ] + }, + { + "description": "core:window:deny-set-resizable -> Denies the set_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-resizable" + ] + }, + { + "description": "core:window:deny-set-shadow -> Denies the set_shadow command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-shadow" + ] + }, + { + "description": "core:window:deny-set-size -> Denies the set_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-size" + ] + }, + { + "description": "core:window:deny-set-size-constraints -> Denies the set_size_constraints command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-size-constraints" + ] + }, + { + "description": "core:window:deny-set-skip-taskbar -> Denies the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-skip-taskbar" + ] + }, + { + "description": "core:window:deny-set-title -> Denies the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-title" + ] + }, + { + "description": "core:window:deny-set-title-bar-style -> Denies the set_title_bar_style command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-title-bar-style" + ] + }, + { + "description": "core:window:deny-set-visible-on-all-workspaces -> Denies the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-set-visible-on-all-workspaces" + ] + }, + { + "description": "core:window:deny-show -> Denies the show command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-show" + ] + }, + { + "description": "core:window:deny-start-dragging -> Denies the start_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-start-dragging" + ] + }, + { + "description": "core:window:deny-start-resize-dragging -> Denies the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-start-resize-dragging" + ] + }, + { + "description": "core:window:deny-theme -> Denies the theme command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-theme" + ] + }, + { + "description": "core:window:deny-title -> Denies the title command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-title" + ] + }, + { + "description": "core:window:deny-toggle-maximize -> Denies the toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-toggle-maximize" + ] + }, + { + "description": "core:window:deny-unmaximize -> Denies the unmaximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-unmaximize" + ] + }, + { + "description": "core:window:deny-unminimize -> Denies the unminimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-unminimize" + ] + }, { "description": "dialog:default -> This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n", "type": "string", @@ -2620,69 +4468,6 @@ "dialog:deny-save" ] }, - { - "description": "event:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "event:default" - ] - }, - { - "description": "event:allow-emit -> Enables the emit command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:allow-emit" - ] - }, - { - "description": "event:allow-emit-to -> Enables the emit_to command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:allow-emit-to" - ] - }, - { - "description": "event:allow-listen -> Enables the listen command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:allow-listen" - ] - }, - { - "description": "event:allow-unlisten -> Enables the unlisten command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:allow-unlisten" - ] - }, - { - "description": "event:deny-emit -> Denies the emit command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:deny-emit" - ] - }, - { - "description": "event:deny-emit-to -> Denies the emit_to command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:deny-emit-to" - ] - }, - { - "description": "event:deny-listen -> Denies the listen command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:deny-listen" - ] - }, - { - "description": "event:deny-unlisten -> Denies the unlisten command without any pre-configured scope.", - "type": "string", - "enum": [ - "event:deny-unlisten" - ] - }, { "description": "fs:allow-app-meta -> This allows non-recursive read access to metadata of the `$APP` folder, including file listing and statistics.", "type": "string", @@ -4685,83 +6470,6 @@ "fs:write-files" ] }, - { - "description": "image:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "image:default" - ] - }, - { - "description": "image:allow-from-bytes -> Enables the from_bytes command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:allow-from-bytes" - ] - }, - { - "description": "image:allow-from-path -> Enables the from_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:allow-from-path" - ] - }, - { - "description": "image:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:allow-new" - ] - }, - { - "description": "image:allow-rgba -> Enables the rgba command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:allow-rgba" - ] - }, - { - "description": "image:allow-size -> Enables the size command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:allow-size" - ] - }, - { - "description": "image:deny-from-bytes -> Denies the from_bytes command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:deny-from-bytes" - ] - }, - { - "description": "image:deny-from-path -> Denies the from_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:deny-from-path" - ] - }, - { - "description": "image:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:deny-new" - ] - }, - { - "description": "image:deny-rgba -> Denies the rgba command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:deny-rgba" - ] - }, - { - "description": "image:deny-size -> Denies the size command without any pre-configured scope.", - "type": "string", - "enum": [ - "image:deny-size" - ] - }, { "description": "log:default -> Allows the log command", "type": "string", @@ -4783,321 +6491,6 @@ "log:deny-log" ] }, - { - "description": "menu:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "menu:default" - ] - }, - { - "description": "menu:allow-append -> Enables the append command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-append" - ] - }, - { - "description": "menu:allow-create-default -> Enables the create_default command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-create-default" - ] - }, - { - "description": "menu:allow-get -> Enables the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-get" - ] - }, - { - "description": "menu:allow-insert -> Enables the insert command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-insert" - ] - }, - { - "description": "menu:allow-is-checked -> Enables the is_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-is-checked" - ] - }, - { - "description": "menu:allow-is-enabled -> Enables the is_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-is-enabled" - ] - }, - { - "description": "menu:allow-items -> Enables the items command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-items" - ] - }, - { - "description": "menu:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-new" - ] - }, - { - "description": "menu:allow-popup -> Enables the popup command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-popup" - ] - }, - { - "description": "menu:allow-prepend -> Enables the prepend command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-prepend" - ] - }, - { - "description": "menu:allow-remove -> Enables the remove command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-remove" - ] - }, - { - "description": "menu:allow-remove-at -> Enables the remove_at command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-remove-at" - ] - }, - { - "description": "menu:allow-set-accelerator -> Enables the set_accelerator command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-accelerator" - ] - }, - { - "description": "menu:allow-set-as-app-menu -> Enables the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-as-app-menu" - ] - }, - { - "description": "menu:allow-set-as-help-menu-for-nsapp -> Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-as-help-menu-for-nsapp" - ] - }, - { - "description": "menu:allow-set-as-window-menu -> Enables the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-as-window-menu" - ] - }, - { - "description": "menu:allow-set-as-windows-menu-for-nsapp -> Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-as-windows-menu-for-nsapp" - ] - }, - { - "description": "menu:allow-set-checked -> Enables the set_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-checked" - ] - }, - { - "description": "menu:allow-set-enabled -> Enables the set_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-enabled" - ] - }, - { - "description": "menu:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-icon" - ] - }, - { - "description": "menu:allow-set-text -> Enables the set_text command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-set-text" - ] - }, - { - "description": "menu:allow-text -> Enables the text command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:allow-text" - ] - }, - { - "description": "menu:deny-append -> Denies the append command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-append" - ] - }, - { - "description": "menu:deny-create-default -> Denies the create_default command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-create-default" - ] - }, - { - "description": "menu:deny-get -> Denies the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-get" - ] - }, - { - "description": "menu:deny-insert -> Denies the insert command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-insert" - ] - }, - { - "description": "menu:deny-is-checked -> Denies the is_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-is-checked" - ] - }, - { - "description": "menu:deny-is-enabled -> Denies the is_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-is-enabled" - ] - }, - { - "description": "menu:deny-items -> Denies the items command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-items" - ] - }, - { - "description": "menu:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-new" - ] - }, - { - "description": "menu:deny-popup -> Denies the popup command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-popup" - ] - }, - { - "description": "menu:deny-prepend -> Denies the prepend command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-prepend" - ] - }, - { - "description": "menu:deny-remove -> Denies the remove command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-remove" - ] - }, - { - "description": "menu:deny-remove-at -> Denies the remove_at command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-remove-at" - ] - }, - { - "description": "menu:deny-set-accelerator -> Denies the set_accelerator command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-accelerator" - ] - }, - { - "description": "menu:deny-set-as-app-menu -> Denies the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-as-app-menu" - ] - }, - { - "description": "menu:deny-set-as-help-menu-for-nsapp -> Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-as-help-menu-for-nsapp" - ] - }, - { - "description": "menu:deny-set-as-window-menu -> Denies the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-as-window-menu" - ] - }, - { - "description": "menu:deny-set-as-windows-menu-for-nsapp -> Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-as-windows-menu-for-nsapp" - ] - }, - { - "description": "menu:deny-set-checked -> Denies the set_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-checked" - ] - }, - { - "description": "menu:deny-set-enabled -> Denies the set_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-enabled" - ] - }, - { - "description": "menu:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-icon" - ] - }, - { - "description": "menu:deny-set-text -> Denies the set_text command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-set-text" - ] - }, - { - "description": "menu:deny-text -> Denies the text command without any pre-configured scope.", - "type": "string", - "enum": [ - "menu:deny-text" - ] - }, { "description": "os:default -> This permission set configures which\noperating system information are available\nto gather from the frontend.\n\n#### Granted Permissions\n\nAll information except the host name are available.\n\n", "type": "string", @@ -5217,146 +6610,6 @@ "os:deny-version" ] }, - { - "description": "path:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "path:default" - ] - }, - { - "description": "path:allow-basename -> Enables the basename command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-basename" - ] - }, - { - "description": "path:allow-dirname -> Enables the dirname command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-dirname" - ] - }, - { - "description": "path:allow-extname -> Enables the extname command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-extname" - ] - }, - { - "description": "path:allow-is-absolute -> Enables the is_absolute command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-is-absolute" - ] - }, - { - "description": "path:allow-join -> Enables the join command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-join" - ] - }, - { - "description": "path:allow-normalize -> Enables the normalize command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-normalize" - ] - }, - { - "description": "path:allow-resolve -> Enables the resolve command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-resolve" - ] - }, - { - "description": "path:allow-resolve-directory -> Enables the resolve_directory command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:allow-resolve-directory" - ] - }, - { - "description": "path:deny-basename -> Denies the basename command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-basename" - ] - }, - { - "description": "path:deny-dirname -> Denies the dirname command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-dirname" - ] - }, - { - "description": "path:deny-extname -> Denies the extname command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-extname" - ] - }, - { - "description": "path:deny-is-absolute -> Denies the is_absolute command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-is-absolute" - ] - }, - { - "description": "path:deny-join -> Denies the join command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-join" - ] - }, - { - "description": "path:deny-normalize -> Denies the normalize command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-normalize" - ] - }, - { - "description": "path:deny-resolve -> Denies the resolve command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-resolve" - ] - }, - { - "description": "path:deny-resolve-directory -> Denies the resolve_directory command without any pre-configured scope.", - "type": "string", - "enum": [ - "path:deny-resolve-directory" - ] - }, - { - "description": "resources:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "resources:default" - ] - }, - { - "description": "resources:allow-close -> Enables the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "resources:allow-close" - ] - }, - { - "description": "resources:deny-close -> Denies the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "resources:deny-close" - ] - }, { "description": "shell:default -> This permission set configures which\nshell functionality is exposed by default.\n\n#### Granted Permissions\n\nIt allows to use the `open` functionality without any specific\nscope pre-configured. It will allow opening `http(s)://`,\n`tel:` and `mailto:` links.\n", "type": "string", @@ -5434,167 +6687,6 @@ "shell:deny-stdin-write" ] }, - { - "description": "tray:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "tray:default" - ] - }, - { - "description": "tray:allow-get-by-id -> Enables the get_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-get-by-id" - ] - }, - { - "description": "tray:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-new" - ] - }, - { - "description": "tray:allow-remove-by-id -> Enables the remove_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-remove-by-id" - ] - }, - { - "description": "tray:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-icon" - ] - }, - { - "description": "tray:allow-set-icon-as-template -> Enables the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-icon-as-template" - ] - }, - { - "description": "tray:allow-set-menu -> Enables the set_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-menu" - ] - }, - { - "description": "tray:allow-set-show-menu-on-left-click -> Enables the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-show-menu-on-left-click" - ] - }, - { - "description": "tray:allow-set-temp-dir-path -> Enables the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-temp-dir-path" - ] - }, - { - "description": "tray:allow-set-title -> Enables the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-title" - ] - }, - { - "description": "tray:allow-set-tooltip -> Enables the set_tooltip command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-tooltip" - ] - }, - { - "description": "tray:allow-set-visible -> Enables the set_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:allow-set-visible" - ] - }, - { - "description": "tray:deny-get-by-id -> Denies the get_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-get-by-id" - ] - }, - { - "description": "tray:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-new" - ] - }, - { - "description": "tray:deny-remove-by-id -> Denies the remove_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-remove-by-id" - ] - }, - { - "description": "tray:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-icon" - ] - }, - { - "description": "tray:deny-set-icon-as-template -> Denies the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-icon-as-template" - ] - }, - { - "description": "tray:deny-set-menu -> Denies the set_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-menu" - ] - }, - { - "description": "tray:deny-set-show-menu-on-left-click -> Denies the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-show-menu-on-left-click" - ] - }, - { - "description": "tray:deny-set-temp-dir-path -> Denies the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-temp-dir-path" - ] - }, - { - "description": "tray:deny-set-title -> Denies the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-title" - ] - }, - { - "description": "tray:deny-set-tooltip -> Denies the set_tooltip command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-tooltip" - ] - }, - { - "description": "tray:deny-set-visible -> Denies the set_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "tray:deny-set-visible" - ] - }, { "description": "updater:default -> This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n", "type": "string", @@ -5658,1084 +6750,6 @@ "updater:deny-install" ] }, - { - "description": "webview:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "webview:default" - ] - }, - { - "description": "webview:allow-create-webview -> Enables the create_webview command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-create-webview" - ] - }, - { - "description": "webview:allow-create-webview-window -> Enables the create_webview_window command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-create-webview-window" - ] - }, - { - "description": "webview:allow-internal-toggle-devtools -> Enables the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-internal-toggle-devtools" - ] - }, - { - "description": "webview:allow-print -> Enables the print command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-print" - ] - }, - { - "description": "webview:allow-reparent -> Enables the reparent command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-reparent" - ] - }, - { - "description": "webview:allow-set-webview-focus -> Enables the set_webview_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-set-webview-focus" - ] - }, - { - "description": "webview:allow-set-webview-position -> Enables the set_webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-set-webview-position" - ] - }, - { - "description": "webview:allow-set-webview-size -> Enables the set_webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-set-webview-size" - ] - }, - { - "description": "webview:allow-set-webview-zoom -> Enables the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-set-webview-zoom" - ] - }, - { - "description": "webview:allow-webview-close -> Enables the webview_close command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-webview-close" - ] - }, - { - "description": "webview:allow-webview-position -> Enables the webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-webview-position" - ] - }, - { - "description": "webview:allow-webview-size -> Enables the webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:allow-webview-size" - ] - }, - { - "description": "webview:deny-create-webview -> Denies the create_webview command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-create-webview" - ] - }, - { - "description": "webview:deny-create-webview-window -> Denies the create_webview_window command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-create-webview-window" - ] - }, - { - "description": "webview:deny-internal-toggle-devtools -> Denies the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-internal-toggle-devtools" - ] - }, - { - "description": "webview:deny-print -> Denies the print command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-print" - ] - }, - { - "description": "webview:deny-reparent -> Denies the reparent command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-reparent" - ] - }, - { - "description": "webview:deny-set-webview-focus -> Denies the set_webview_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-set-webview-focus" - ] - }, - { - "description": "webview:deny-set-webview-position -> Denies the set_webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-set-webview-position" - ] - }, - { - "description": "webview:deny-set-webview-size -> Denies the set_webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-set-webview-size" - ] - }, - { - "description": "webview:deny-set-webview-zoom -> Denies the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-set-webview-zoom" - ] - }, - { - "description": "webview:deny-webview-close -> Denies the webview_close command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-webview-close" - ] - }, - { - "description": "webview:deny-webview-position -> Denies the webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-webview-position" - ] - }, - { - "description": "webview:deny-webview-size -> Denies the webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "webview:deny-webview-size" - ] - }, - { - "description": "window:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "window:default" - ] - }, - { - "description": "window:allow-available-monitors -> Enables the available_monitors command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-available-monitors" - ] - }, - { - "description": "window:allow-center -> Enables the center command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-center" - ] - }, - { - "description": "window:allow-close -> Enables the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-close" - ] - }, - { - "description": "window:allow-create -> Enables the create command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-create" - ] - }, - { - "description": "window:allow-current-monitor -> Enables the current_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-current-monitor" - ] - }, - { - "description": "window:allow-cursor-position -> Enables the cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-cursor-position" - ] - }, - { - "description": "window:allow-destroy -> Enables the destroy command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-destroy" - ] - }, - { - "description": "window:allow-hide -> Enables the hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-hide" - ] - }, - { - "description": "window:allow-inner-position -> Enables the inner_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-inner-position" - ] - }, - { - "description": "window:allow-inner-size -> Enables the inner_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-inner-size" - ] - }, - { - "description": "window:allow-internal-toggle-maximize -> Enables the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-internal-toggle-maximize" - ] - }, - { - "description": "window:allow-is-closable -> Enables the is_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-closable" - ] - }, - { - "description": "window:allow-is-decorated -> Enables the is_decorated command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-decorated" - ] - }, - { - "description": "window:allow-is-focused -> Enables the is_focused command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-focused" - ] - }, - { - "description": "window:allow-is-fullscreen -> Enables the is_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-fullscreen" - ] - }, - { - "description": "window:allow-is-maximizable -> Enables the is_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-maximizable" - ] - }, - { - "description": "window:allow-is-maximized -> Enables the is_maximized command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-maximized" - ] - }, - { - "description": "window:allow-is-minimizable -> Enables the is_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-minimizable" - ] - }, - { - "description": "window:allow-is-minimized -> Enables the is_minimized command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-minimized" - ] - }, - { - "description": "window:allow-is-resizable -> Enables the is_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-resizable" - ] - }, - { - "description": "window:allow-is-visible -> Enables the is_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-is-visible" - ] - }, - { - "description": "window:allow-maximize -> Enables the maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-maximize" - ] - }, - { - "description": "window:allow-minimize -> Enables the minimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-minimize" - ] - }, - { - "description": "window:allow-monitor-from-point -> Enables the monitor_from_point command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-monitor-from-point" - ] - }, - { - "description": "window:allow-outer-position -> Enables the outer_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-outer-position" - ] - }, - { - "description": "window:allow-outer-size -> Enables the outer_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-outer-size" - ] - }, - { - "description": "window:allow-primary-monitor -> Enables the primary_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-primary-monitor" - ] - }, - { - "description": "window:allow-request-user-attention -> Enables the request_user_attention command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-request-user-attention" - ] - }, - { - "description": "window:allow-scale-factor -> Enables the scale_factor command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-scale-factor" - ] - }, - { - "description": "window:allow-set-always-on-bottom -> Enables the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-always-on-bottom" - ] - }, - { - "description": "window:allow-set-always-on-top -> Enables the set_always_on_top command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-always-on-top" - ] - }, - { - "description": "window:allow-set-closable -> Enables the set_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-closable" - ] - }, - { - "description": "window:allow-set-content-protected -> Enables the set_content_protected command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-content-protected" - ] - }, - { - "description": "window:allow-set-cursor-grab -> Enables the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-cursor-grab" - ] - }, - { - "description": "window:allow-set-cursor-icon -> Enables the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-cursor-icon" - ] - }, - { - "description": "window:allow-set-cursor-position -> Enables the set_cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-cursor-position" - ] - }, - { - "description": "window:allow-set-cursor-visible -> Enables the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-cursor-visible" - ] - }, - { - "description": "window:allow-set-decorations -> Enables the set_decorations command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-decorations" - ] - }, - { - "description": "window:allow-set-effects -> Enables the set_effects command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-effects" - ] - }, - { - "description": "window:allow-set-focus -> Enables the set_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-focus" - ] - }, - { - "description": "window:allow-set-fullscreen -> Enables the set_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-fullscreen" - ] - }, - { - "description": "window:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-icon" - ] - }, - { - "description": "window:allow-set-ignore-cursor-events -> Enables the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-ignore-cursor-events" - ] - }, - { - "description": "window:allow-set-max-size -> Enables the set_max_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-max-size" - ] - }, - { - "description": "window:allow-set-maximizable -> Enables the set_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-maximizable" - ] - }, - { - "description": "window:allow-set-min-size -> Enables the set_min_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-min-size" - ] - }, - { - "description": "window:allow-set-minimizable -> Enables the set_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-minimizable" - ] - }, - { - "description": "window:allow-set-position -> Enables the set_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-position" - ] - }, - { - "description": "window:allow-set-progress-bar -> Enables the set_progress_bar command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-progress-bar" - ] - }, - { - "description": "window:allow-set-resizable -> Enables the set_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-resizable" - ] - }, - { - "description": "window:allow-set-shadow -> Enables the set_shadow command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-shadow" - ] - }, - { - "description": "window:allow-set-size -> Enables the set_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-size" - ] - }, - { - "description": "window:allow-set-skip-taskbar -> Enables the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-skip-taskbar" - ] - }, - { - "description": "window:allow-set-title -> Enables the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-title" - ] - }, - { - "description": "window:allow-set-title-bar-style -> Enables the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-title-bar-style" - ] - }, - { - "description": "window:allow-set-visible-on-all-workspaces -> Enables the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-set-visible-on-all-workspaces" - ] - }, - { - "description": "window:allow-show -> Enables the show command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-show" - ] - }, - { - "description": "window:allow-start-dragging -> Enables the start_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-start-dragging" - ] - }, - { - "description": "window:allow-start-resize-dragging -> Enables the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-start-resize-dragging" - ] - }, - { - "description": "window:allow-theme -> Enables the theme command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-theme" - ] - }, - { - "description": "window:allow-title -> Enables the title command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-title" - ] - }, - { - "description": "window:allow-toggle-maximize -> Enables the toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-toggle-maximize" - ] - }, - { - "description": "window:allow-unmaximize -> Enables the unmaximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-unmaximize" - ] - }, - { - "description": "window:allow-unminimize -> Enables the unminimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:allow-unminimize" - ] - }, - { - "description": "window:deny-available-monitors -> Denies the available_monitors command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-available-monitors" - ] - }, - { - "description": "window:deny-center -> Denies the center command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-center" - ] - }, - { - "description": "window:deny-close -> Denies the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-close" - ] - }, - { - "description": "window:deny-create -> Denies the create command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-create" - ] - }, - { - "description": "window:deny-current-monitor -> Denies the current_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-current-monitor" - ] - }, - { - "description": "window:deny-cursor-position -> Denies the cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-cursor-position" - ] - }, - { - "description": "window:deny-destroy -> Denies the destroy command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-destroy" - ] - }, - { - "description": "window:deny-hide -> Denies the hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-hide" - ] - }, - { - "description": "window:deny-inner-position -> Denies the inner_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-inner-position" - ] - }, - { - "description": "window:deny-inner-size -> Denies the inner_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-inner-size" - ] - }, - { - "description": "window:deny-internal-toggle-maximize -> Denies the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-internal-toggle-maximize" - ] - }, - { - "description": "window:deny-is-closable -> Denies the is_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-closable" - ] - }, - { - "description": "window:deny-is-decorated -> Denies the is_decorated command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-decorated" - ] - }, - { - "description": "window:deny-is-focused -> Denies the is_focused command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-focused" - ] - }, - { - "description": "window:deny-is-fullscreen -> Denies the is_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-fullscreen" - ] - }, - { - "description": "window:deny-is-maximizable -> Denies the is_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-maximizable" - ] - }, - { - "description": "window:deny-is-maximized -> Denies the is_maximized command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-maximized" - ] - }, - { - "description": "window:deny-is-minimizable -> Denies the is_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-minimizable" - ] - }, - { - "description": "window:deny-is-minimized -> Denies the is_minimized command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-minimized" - ] - }, - { - "description": "window:deny-is-resizable -> Denies the is_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-resizable" - ] - }, - { - "description": "window:deny-is-visible -> Denies the is_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-is-visible" - ] - }, - { - "description": "window:deny-maximize -> Denies the maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-maximize" - ] - }, - { - "description": "window:deny-minimize -> Denies the minimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-minimize" - ] - }, - { - "description": "window:deny-monitor-from-point -> Denies the monitor_from_point command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-monitor-from-point" - ] - }, - { - "description": "window:deny-outer-position -> Denies the outer_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-outer-position" - ] - }, - { - "description": "window:deny-outer-size -> Denies the outer_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-outer-size" - ] - }, - { - "description": "window:deny-primary-monitor -> Denies the primary_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-primary-monitor" - ] - }, - { - "description": "window:deny-request-user-attention -> Denies the request_user_attention command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-request-user-attention" - ] - }, - { - "description": "window:deny-scale-factor -> Denies the scale_factor command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-scale-factor" - ] - }, - { - "description": "window:deny-set-always-on-bottom -> Denies the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-always-on-bottom" - ] - }, - { - "description": "window:deny-set-always-on-top -> Denies the set_always_on_top command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-always-on-top" - ] - }, - { - "description": "window:deny-set-closable -> Denies the set_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-closable" - ] - }, - { - "description": "window:deny-set-content-protected -> Denies the set_content_protected command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-content-protected" - ] - }, - { - "description": "window:deny-set-cursor-grab -> Denies the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-cursor-grab" - ] - }, - { - "description": "window:deny-set-cursor-icon -> Denies the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-cursor-icon" - ] - }, - { - "description": "window:deny-set-cursor-position -> Denies the set_cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-cursor-position" - ] - }, - { - "description": "window:deny-set-cursor-visible -> Denies the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-cursor-visible" - ] - }, - { - "description": "window:deny-set-decorations -> Denies the set_decorations command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-decorations" - ] - }, - { - "description": "window:deny-set-effects -> Denies the set_effects command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-effects" - ] - }, - { - "description": "window:deny-set-focus -> Denies the set_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-focus" - ] - }, - { - "description": "window:deny-set-fullscreen -> Denies the set_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-fullscreen" - ] - }, - { - "description": "window:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-icon" - ] - }, - { - "description": "window:deny-set-ignore-cursor-events -> Denies the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-ignore-cursor-events" - ] - }, - { - "description": "window:deny-set-max-size -> Denies the set_max_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-max-size" - ] - }, - { - "description": "window:deny-set-maximizable -> Denies the set_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-maximizable" - ] - }, - { - "description": "window:deny-set-min-size -> Denies the set_min_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-min-size" - ] - }, - { - "description": "window:deny-set-minimizable -> Denies the set_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-minimizable" - ] - }, - { - "description": "window:deny-set-position -> Denies the set_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-position" - ] - }, - { - "description": "window:deny-set-progress-bar -> Denies the set_progress_bar command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-progress-bar" - ] - }, - { - "description": "window:deny-set-resizable -> Denies the set_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-resizable" - ] - }, - { - "description": "window:deny-set-shadow -> Denies the set_shadow command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-shadow" - ] - }, - { - "description": "window:deny-set-size -> Denies the set_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-size" - ] - }, - { - "description": "window:deny-set-skip-taskbar -> Denies the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-skip-taskbar" - ] - }, - { - "description": "window:deny-set-title -> Denies the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-title" - ] - }, - { - "description": "window:deny-set-title-bar-style -> Denies the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-title-bar-style" - ] - }, - { - "description": "window:deny-set-visible-on-all-workspaces -> Denies the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-set-visible-on-all-workspaces" - ] - }, - { - "description": "window:deny-show -> Denies the show command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-show" - ] - }, - { - "description": "window:deny-start-dragging -> Denies the start_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-start-dragging" - ] - }, - { - "description": "window:deny-start-resize-dragging -> Denies the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-start-resize-dragging" - ] - }, - { - "description": "window:deny-theme -> Denies the theme command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-theme" - ] - }, - { - "description": "window:deny-title -> Denies the title command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-title" - ] - }, - { - "description": "window:deny-toggle-maximize -> Denies the toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-toggle-maximize" - ] - }, - { - "description": "window:deny-unmaximize -> Denies the unmaximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-unmaximize" - ] - }, - { - "description": "window:deny-unminimize -> Denies the unminimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "window:deny-unminimize" - ] - }, { "description": "window-state:default -> This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", "type": "string", @@ -6895,8 +6909,13 @@ "validator" ], "properties": { + "raw": { + "description": "Marks the validator as a raw regex, meaning the plugin should not make any modification at runtime.\n\nThis means the regex will not match on the entire string by default, which might be exploited if your regex allow unexpected input to be considered valid. When using this option, make sure your regex is correct.", + "default": false, + "type": "boolean" + }, "validator": { - "description": "[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\n[regex]: https://docs.rs/regex/latest/regex/#syntax", + "description": "[regex] validator to require passed values to conform to an expected input.\n\nThis will require the argument value passed to this variable to match the `validator` regex before it will be executed.\n\nThe regex string is by default surrounded by `^...$` to match the full string. For example the `https?://\\w+` regex would be registered as `^https?://\\w+$`.\n\n[regex]: ", "type": "string" } }, diff --git a/src-tauri/grpc/Cargo.toml b/src-tauri/grpc/Cargo.toml index 5a6c351f..2df64654 100644 --- a/src-tauri/grpc/Cargo.toml +++ b/src-tauri/grpc/Cargo.toml @@ -18,7 +18,7 @@ anyhow = "1.0.79" hyper = { version = "0.14" } hyper-rustls = { version = "0.24.0", features = ["http2"] } uuid = { version = "1.7.0", features = ["v4"] } -tauri = { version = "2.0.0-beta" } -tauri-plugin-shell = "2.0.0-beta" +tauri = { workspace = true } +tauri-plugin-shell = { workspace = true } md5 = "0.7.0" dunce = "1.0.4" diff --git a/src-tauri/src/analytics.rs b/src-tauri/src/analytics.rs index 3171a95e..667331a1 100644 --- a/src-tauri/src/analytics.rs +++ b/src-tauri/src/analytics.rs @@ -6,10 +6,9 @@ use serde_json::json; use sqlx::types::JsonValue; use tauri::{AppHandle, Manager}; +use yaak_models::queries::{generate_id, get_key_value_int, get_key_value_string, set_key_value_int, set_key_value_string}; + use crate::is_dev; -use crate::models::{ - generate_id, get_key_value_int, get_key_value_string, set_key_value_int, set_key_value_string, -}; const NAMESPACE: &str = "analytics"; const NUM_LAUNCHES_KEY: &str = "num_launches"; diff --git a/src-tauri/src/deno_ops.rs b/src-tauri/src/deno_ops.rs deleted file mode 100644 index cc9a0ef6..00000000 --- a/src-tauri/src/deno_ops.rs +++ /dev/null @@ -1,16 +0,0 @@ -use deno_core::error::AnyError; -use deno_core::op2; - -#[op2] -#[serde] -pub fn op_yaml_parse(#[string] text: String) -> Result { - let value = serde_yaml::from_str(&text)?; - Ok(value) -} - -#[op2] -#[string] -pub fn op_yaml_stringify(#[serde] value: serde_json::Value) -> Result { - let value = serde_yaml::to_string(&value)?; - Ok(value) -} diff --git a/src-tauri/src/export_resources.rs b/src-tauri/src/export_resources.rs new file mode 100644 index 00000000..7179715d --- /dev/null +++ b/src-tauri/src/export_resources.rs @@ -0,0 +1,77 @@ +use chrono::NaiveDateTime; +use serde::{Deserialize, Serialize}; +use tauri::{Manager, WebviewWindow}; +use yaak_models::models::{Environment, Folder, GrpcRequest, HttpRequest, Workspace}; + +#[derive(Default, Debug, Deserialize, Serialize)] +#[serde(default, rename_all = "camelCase")] +pub struct WorkspaceExport { + pub yaak_version: String, + pub yaak_schema: i64, + pub timestamp: NaiveDateTime, + pub resources: WorkspaceExportResources, +} + +#[derive(Default, Debug, Deserialize, Serialize)] +#[serde(default, rename_all = "camelCase")] +pub struct WorkspaceExportResources { + pub workspaces: Vec, + pub environments: Vec, + pub folders: Vec, + pub http_requests: Vec, + pub grpc_requests: Vec, +} + +#[derive(Default, Debug, Deserialize, Serialize)] +pub struct ImportResult { + pub resources: WorkspaceExportResources, +} + +pub async fn get_workspace_export_resources( + window: &WebviewWindow, + workspace_ids: Vec<&str>, +) -> WorkspaceExport { + let app_handle = window.app_handle(); + let mut data = WorkspaceExport { + yaak_version: app_handle.package_info().version.clone().to_string(), + yaak_schema: 2, + timestamp: chrono::Utc::now().naive_utc(), + resources: WorkspaceExportResources { + workspaces: Vec::new(), + environments: Vec::new(), + folders: Vec::new(), + http_requests: Vec::new(), + grpc_requests: Vec::new(), + }, + }; + + for workspace_id in workspace_ids { + data.resources.workspaces.push( + yaak_models::queries::get_workspace(window, workspace_id) + .await + .expect("Failed to get workspace"), + ); + data.resources.environments.append( + &mut yaak_models::queries::list_environments(window, workspace_id) + .await + .expect("Failed to get environments"), + ); + data.resources.folders.append( + &mut yaak_models::queries::list_folders(window, workspace_id) + .await + .expect("Failed to get folders"), + ); + data.resources.http_requests.append( + &mut yaak_models::queries::list_http_requests(window, workspace_id) + .await + .expect("Failed to get http requests"), + ); + data.resources.grpc_requests.append( + &mut yaak_models::queries::list_grpc_requests(window, workspace_id) + .await + .expect("Failed to get grpc requests"), + ); + } + + return data; +} diff --git a/src-tauri/src/http_request.rs b/src-tauri/src/http_request.rs index 08cb775d..0706d259 100644 --- a/src-tauri/src/http_request.rs +++ b/src-tauri/src/http_request.rs @@ -6,6 +6,8 @@ use std::str::FromStr; use std::sync::Arc; use std::time::Duration; +use crate::render::variables_from_environment; +use crate::{render, response_err}; use base64::Engine; use http::header::{ACCEPT, USER_AGENT}; use http::{HeaderMap, HeaderName, HeaderValue}; @@ -14,25 +16,23 @@ use mime_guess::Mime; use reqwest::redirect::Policy; use reqwest::Method; use reqwest::{multipart, Url}; -use sqlx::types::{Json, JsonValue}; use tauri::{Manager, WebviewWindow}; use tokio::sync::oneshot; use tokio::sync::watch::Receiver; - -use crate::render::variables_from_environment; -use crate::{models, render, response_err}; +use yaak_models::models::{Cookie, CookieJar, Environment, HttpRequest, HttpResponse, HttpResponseHeader}; +use yaak_models::queries::{get_workspace, update_response_if_id, upsert_cookie_jar}; pub async fn send_http_request( window: &WebviewWindow, - request: models::HttpRequest, - response: &models::HttpResponse, - environment: Option, - cookie_jar: Option, + request: HttpRequest, + response: &HttpResponse, + environment: Option, + cookie_jar: Option, download_path: Option, cancel_rx: &mut Receiver, -) -> Result { +) -> Result { let environment_ref = environment.as_ref(); - let workspace = models::get_workspace(window, &request.workspace_id) + let workspace = get_workspace(window, &request.workspace_id) .await .expect("Failed to get Workspace"); let vars = variables_from_environment(&workspace, environment_ref); @@ -63,11 +63,10 @@ pub async fn send_http_request( // HACK: Can't construct Cookie without serde, so we have to do this let cookies = cj .cookies - .0 .iter() - .map(|json_cookie| { - serde_json::from_value(json_cookie.clone()) - .expect("Failed to deserialize cookie") + .map(|cookie| { + let json_cookie = serde_json::to_value(cookie).unwrap(); + serde_json::from_value(json_cookie).expect("Failed to deserialize cookie") }) .map(|c| Ok(c)) .collect::>>(); @@ -85,7 +84,7 @@ pub async fn send_http_request( if workspace.setting_request_timeout > 0 { client_builder = client_builder.timeout(Duration::from_millis( - workspace.setting_request_timeout.unsigned_abs(), + workspace.setting_request_timeout.unsigned_abs() as u64, )); } @@ -138,7 +137,7 @@ pub async fn send_http_request( // ); // } - for h in request.headers.0 { + for h in request.headers { if h.name.is_empty() && h.value.is_empty() { continue; } @@ -170,7 +169,7 @@ pub async fn send_http_request( if let Some(b) = &request.authentication_type { let empty_value = &serde_json::to_value("").unwrap(); - let a = request.authentication.0; + let a = request.authentication; if b == "basic" { let raw_username = a @@ -203,7 +202,7 @@ pub async fn send_http_request( } let mut query_params = Vec::new(); - for p in request.url_parameters.0 { + for p in request.url_parameters { if !p.enabled || p.name.is_empty() { continue; } @@ -217,7 +216,7 @@ pub async fn send_http_request( if let Some(body_type) = &request.body_type { let empty_string = &serde_json::to_value("").unwrap(); let empty_bool = &serde_json::to_value(false).unwrap(); - let request_body = request.body.0; + let request_body = request.body; if request_body.contains_key("text") { let raw_text = request_body @@ -382,19 +381,17 @@ pub async fn send_http_request( match raw_response { Ok(v) => { let mut response = response.clone(); - response.elapsed_headers = start.elapsed().as_millis() as i64; + response.elapsed_headers = start.elapsed().as_millis() as i32; let response_headers = v.headers().clone(); - response.status = v.status().as_u16() as i64; + response.status = v.status().as_u16() as i32; response.status_reason = v.status().canonical_reason().map(|s| s.to_string()); - response.headers = Json( - response_headers - .iter() - .map(|(k, v)| models::HttpResponseHeader { - name: k.as_str().to_string(), - value: v.to_str().unwrap().to_string(), - }) - .collect(), - ); + response.headers = response_headers + .iter() + .map(|(k, v)| HttpResponseHeader { + name: k.as_str().to_string(), + value: v.to_str().unwrap_or_default().to_string(), + }) + .collect(); response.url = v.url().to_string(); response.remote_addr = v.remote_addr().map(|a| a.to_string()); response.version = match v.version() { @@ -408,12 +405,12 @@ pub async fn send_http_request( let content_length = v.content_length(); let body_bytes = v.bytes().await.expect("Failed to get body").to_vec(); - response.elapsed = start.elapsed().as_millis() as i64; + response.elapsed = start.elapsed().as_millis() as i32; // Use content length if available, otherwise use body length response.content_length = match content_length { - Some(l) => Some(l as i64), - None => Some(body_bytes.len() as i64), + Some(l) => Some(l as i32), + None => Some(body_bytes.len() as i32), }; { @@ -441,11 +438,11 @@ pub async fn send_http_request( ); } - response = models::update_response_if_id(window, &response) + response = update_response_if_id(window, &response) .await .expect("Failed to update response"); - // Copy response to download path, if specified + // Copy response to the download path, if specified match (download_path, response.body_path.clone()) { (Some(dl_path), Some(body_path)) => { info!("Downloading response body to {}", dl_path.display()); @@ -464,16 +461,17 @@ pub async fn send_http_request( // }); // store.store_response_cookies(cookies, &url); - let json_cookies: Json> = Json( - cookie_store - .lock() - .unwrap() - .iter_any() - .map(|c| serde_json::to_value(&c).expect("Failed to serialize cookie")) - .collect::>(), - ); + let json_cookies: Vec = cookie_store + .lock() + .unwrap() + .iter_any() + .map(|c| { + let json_cookie = serde_json::to_value(&c).expect("Failed to serialize cookie"); + serde_json::from_value(json_cookie).expect("Failed to deserialize cookie") + }) + .collect::>(); cookie_jar.cookies = json_cookies; - if let Err(e) = models::upsert_cookie_jar(window, &cookie_jar).await { + if let Err(e) = upsert_cookie_jar(window, &cookie_jar).await { error!("Failed to update cookie jar: {}", e); }; } diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 316bbea1..05444430 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -6,7 +6,7 @@ extern crate objc; use std::collections::HashMap; use std::env::current_dir; use std::fs; -use std::fs::{create_dir_all, File, read_to_string}; +use std::fs::{create_dir_all, read_to_string, File}; use std::path::PathBuf; use std::process::exit; use std::str::FromStr; @@ -17,66 +17,65 @@ use fern::colors::ColoredLevelConfig; use log::{debug, error, info, warn}; use rand::random; use serde_json::{json, Value}; -use sqlx::{Pool, Sqlite, SqlitePool}; use sqlx::migrate::Migrator; use sqlx::sqlite::SqliteConnectOptions; -use sqlx::types::Json; -use tauri::{AppHandle, Emitter, LogicalSize, RunEvent, State, WebviewUrl, WebviewWindow}; -use tauri::{Manager, WindowEvent}; -use tauri::Listener; +use sqlx::{Pool, Sqlite, SqlitePool}; use tauri::path::BaseDirectory; +use tauri::Listener; #[cfg(target_os = "macos")] use tauri::TitleBarStyle; +use tauri::{AppHandle, Emitter, LogicalSize, RunEvent, State, WebviewUrl, WebviewWindow}; +use tauri::{Manager, WindowEvent}; use tauri_plugin_log::{fern, Target, TargetKind}; use tauri_plugin_shell::ShellExt; use tokio::sync::Mutex; -use ::grpc::{Code, deserialize_message, serialize_message, ServiceDefinition}; use ::grpc::manager::{DynamicMessage, GrpcHandle}; -use plugin_runtime::manager::PluginManager; +use ::grpc::{deserialize_message, serialize_message, Code, ServiceDefinition}; +use yaak_plugin_runtime::manager::PluginManager; use crate::analytics::{AnalyticsAction, AnalyticsResource}; use crate::grpc::metadata_to_map; use crate::http_request::send_http_request; -use crate::models::{ - cancel_pending_grpc_connections, cancel_pending_responses, CookieJar, - create_http_response, delete_all_grpc_connections, delete_all_http_responses, delete_cookie_jar, - delete_environment, delete_folder, delete_grpc_connection, delete_grpc_request, - delete_http_request, delete_http_response, delete_workspace, duplicate_grpc_request, - duplicate_http_request, Environment, EnvironmentVariable, Folder, generate_model_id, - get_cookie_jar, get_environment, get_folder, get_grpc_connection, - get_grpc_request, get_http_request, get_http_response, get_key_value_raw, - get_or_create_settings, get_workspace, get_workspace_export_resources, GrpcConnection, GrpcEvent, - GrpcEventType, GrpcRequest, HttpRequest, HttpResponse, KeyValue, - list_cookie_jars, list_environments, list_folders, list_grpc_connections, list_grpc_events, - list_grpc_requests, list_http_requests, list_responses, list_workspaces, ModelType, - set_key_value_raw, Settings, update_response_if_id, update_settings, upsert_cookie_jar, upsert_environment, - upsert_folder, upsert_grpc_connection, upsert_grpc_event, upsert_grpc_request, upsert_http_request, upsert_workspace, Workspace, - WorkspaceExportResources, -}; -use crate::models::ImportResult; +use crate::export_resources::{get_workspace_export_resources, ImportResult, WorkspaceExportResources}; use crate::notifications::YaakNotifier; use crate::render::{render_request, variables_from_environment}; use crate::updates::{UpdateMode, YaakUpdater}; use crate::window_menu::app_menu; +use yaak_models::models::{ + CookieJar, Environment, EnvironmentVariable, Folder, GrpcConnection, GrpcEvent, GrpcEventType, + GrpcRequest, HttpRequest, HttpResponse, KeyValue, ModelType, Settings, Workspace, +}; +use yaak_models::queries::{ + cancel_pending_grpc_connections, cancel_pending_responses, create_http_response, + delete_all_grpc_connections, delete_all_http_responses, delete_cookie_jar, delete_environment, + delete_folder, delete_grpc_connection, delete_grpc_request, delete_http_request, + delete_http_response, delete_workspace, duplicate_grpc_request, duplicate_http_request, + generate_model_id, get_cookie_jar, get_environment, get_folder, get_grpc_connection, + get_grpc_request, get_http_request, get_http_response, get_key_value_raw, + get_or_create_settings, get_workspace, list_cookie_jars, list_environments, list_folders, + list_grpc_connections, list_grpc_events, list_grpc_requests, list_http_requests, + list_responses, list_workspaces, set_key_value_raw, update_response_if_id, update_settings, + upsert_cookie_jar, upsert_environment, upsert_folder, upsert_grpc_connection, + upsert_grpc_event, upsert_grpc_request, upsert_http_request, upsert_workspace, +}; mod analytics; mod grpc; mod http_request; -mod models; +mod export_resources; mod notifications; mod render; #[cfg(target_os = "macos")] mod tauri_plugin_mac_window; +mod template_fns; mod updates; mod window_menu; -mod template_fns; const DEFAULT_WINDOW_WIDTH: f64 = 1100.0; const DEFAULT_WINDOW_HEIGHT: f64 = 600.0; -async fn migrate_db(app_handle: &AppHandle, db: &Mutex>) -> Result<(), String> { - let pool = &*db.lock().await; +async fn migrate_db(app_handle: &AppHandle, pool: &Pool) -> Result<(), String> { let p = app_handle .path() .resolve("migrations", BaseDirectory::Resource) @@ -170,7 +169,7 @@ async fn cmd_grpc_go( let vars = variables_from_environment(&workspace, environment.as_ref()); // Add rest of metadata - for h in req.clone().metadata.0 { + for h in req.clone().metadata { if h.name.is_empty() && h.value.is_empty() { continue; } @@ -188,7 +187,7 @@ async fn cmd_grpc_go( if let Some(b) = &req.authentication_type { let req = req.clone(); let empty_value = &serde_json::to_value("").unwrap(); - let a = req.authentication.0; + let a = req.authentication; if b == "basic" { let raw_username = a @@ -276,7 +275,7 @@ async fn cmd_grpc_go( upsert_grpc_connection( &w, &GrpcConnection { - elapsed: start.elapsed().as_millis() as i64, + elapsed: start.elapsed().as_millis() as i32, error: Some(err.clone()), ..conn.clone() }, @@ -392,7 +391,7 @@ async fn cmd_grpc_go( &GrpcEvent { content: format!("Connecting to {}", req.url), event_type: GrpcEventType::ConnectionStart, - metadata: Json(metadata.clone()), + metadata: metadata.clone(), ..base_event.clone() }, ) @@ -452,7 +451,7 @@ async fn cmd_grpc_go( upsert_grpc_event( &w, &GrpcEvent { - metadata: Json(metadata_to_map(msg.metadata().clone())), + metadata: metadata_to_map(msg.metadata().clone()), content: if msg.metadata().len() == 0 { "Received response" } else { @@ -480,7 +479,7 @@ async fn cmd_grpc_go( &GrpcEvent { content: "Connection complete".to_string(), event_type: GrpcEventType::ConnectionEnd, - status: Some(Code::Ok as i64), + status: Some(Code::Ok as i32), ..base_event.clone() }, ) @@ -493,15 +492,15 @@ async fn cmd_grpc_go( &(match e.status { Some(s) => GrpcEvent { error: Some(s.message().to_string()), - status: Some(s.code() as i64), + status: Some(s.code() as i32), content: "Failed to connect".to_string(), - metadata: Json(metadata_to_map(s.metadata().clone())), + metadata: metadata_to_map(s.metadata().clone()), event_type: GrpcEventType::ConnectionEnd, ..base_event.clone() }, None => GrpcEvent { error: Some(e.message), - status: Some(Code::Unknown as i64), + status: Some(Code::Unknown as i32), content: "Failed to connect".to_string(), event_type: GrpcEventType::ConnectionEnd, ..base_event.clone() @@ -521,7 +520,7 @@ async fn cmd_grpc_go( upsert_grpc_event( &w, &GrpcEvent { - metadata: Json(metadata_to_map(stream.metadata().clone())), + metadata: metadata_to_map(stream.metadata().clone()), content: if stream.metadata().len() == 0 { "Received response" } else { @@ -542,15 +541,15 @@ async fn cmd_grpc_go( &(match e.status { Some(s) => GrpcEvent { error: Some(s.message().to_string()), - status: Some(s.code() as i64), + status: Some(s.code() as i32), content: "Failed to connect".to_string(), - metadata: Json(metadata_to_map(s.metadata().clone())), + metadata: metadata_to_map(s.metadata().clone()), event_type: GrpcEventType::ConnectionEnd, ..base_event.clone() }, None => GrpcEvent { error: Some(e.message), - status: Some(Code::Unknown as i64), + status: Some(Code::Unknown as i32), content: "Failed to connect".to_string(), event_type: GrpcEventType::ConnectionEnd, ..base_event.clone() @@ -589,8 +588,8 @@ async fn cmd_grpc_go( &w, &GrpcEvent { content: "Connection complete".to_string(), - status: Some(Code::Unavailable as i64), - metadata: Json(metadata_to_map(trailers)), + status: Some(Code::Unavailable as i32), + metadata: metadata_to_map(trailers), event_type: GrpcEventType::ConnectionEnd, ..base_event.clone() }, @@ -604,8 +603,8 @@ async fn cmd_grpc_go( &w, &GrpcEvent { content: status.to_string(), - status: Some(status.code() as i64), - metadata: Json(metadata_to_map(status.metadata().clone())), + status: Some(status.code() as i32), + metadata: metadata_to_map(status.metadata().clone()), event_type: GrpcEventType::ConnectionEnd, ..base_event.clone() }, @@ -630,11 +629,11 @@ async fn cmd_grpc_go( let closed_event = events .iter() .find(|e| GrpcEventType::ConnectionEnd == e.event_type); - let closed_status = closed_event.and_then(|e| e.status).unwrap_or(Code::Unavailable as i64); + let closed_status = closed_event.and_then(|e| e.status).unwrap_or(Code::Unavailable as i32); upsert_grpc_connection( &w, &GrpcConnection{ - elapsed: start.elapsed().as_millis() as i64, + elapsed: start.elapsed().as_millis() as i32, status: closed_status, ..get_grpc_connection(&w, &conn_id).await.unwrap().clone() }, @@ -646,15 +645,15 @@ async fn cmd_grpc_go( &GrpcEvent { content: "Cancelled".to_string(), event_type: GrpcEventType::ConnectionEnd, - status: Some(Code::Cancelled as i64), + status: Some(Code::Cancelled as i32), ..base_msg.clone() }, ).await.unwrap(); upsert_grpc_connection( &w, &GrpcConnection { - elapsed: start.elapsed().as_millis() as i64, - status: Code::Cancelled as i64, + elapsed: start.elapsed().as_millis() as i32, + status: Code::Cancelled as i32, ..get_grpc_connection(&w, &conn_id).await.unwrap().clone() }, ) @@ -1182,7 +1181,7 @@ async fn cmd_create_environment( Environment { workspace_id: workspace_id.to_string(), name: name.to_string(), - variables: Json(variables), + variables, ..Default::default() }, ) @@ -1194,7 +1193,7 @@ async fn cmd_create_environment( async fn cmd_create_grpc_request( workspace_id: &str, name: &str, - sort_priority: f64, + sort_priority: f32, folder_id: Option<&str>, w: WebviewWindow, ) -> Result { @@ -1304,7 +1303,7 @@ async fn cmd_list_folders(workspace_id: &str, w: WebviewWindow) -> Result, w: WebviewWindow, ) -> Result { @@ -1612,11 +1611,12 @@ pub fn run() { .plugin(tauri_plugin_clipboard_manager::init()) .plugin(tauri_plugin_window_state::Builder::default().build()) .plugin(tauri_plugin_shell::init()) - .plugin(tauri_plugin_updater::Builder::new().build()) + .plugin(tauri_plugin_updater::Builder::default().build()) .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_os::init()) - .plugin(plugin_runtime::init()) - .plugin(tauri_plugin_fs::init()); + .plugin(tauri_plugin_fs::init()) + .plugin(yaak_models::Builder::default().build()) + .plugin(yaak_plugin_runtime::init()); #[cfg(target_os = "macos")] { @@ -1671,11 +1671,9 @@ pub fn run() { let pool = SqlitePool::connect_with(opts) .await .expect("Failed to connect to database"); - let m = Mutex::new(pool.clone()); - migrate_db(app.handle(), &m) + migrate_db(app.handle(), &pool) .await .expect("Failed to migrate database"); - app.manage(m); let h = app.handle(); let _ = cancel_pending_responses(h).await; let _ = cancel_pending_grpc_connections(h).await; diff --git a/src-tauri/src/models.rs b/src-tauri/src/models.rs deleted file mode 100644 index 67799adb..00000000 --- a/src-tauri/src/models.rs +++ /dev/null @@ -1,1675 +0,0 @@ -use std::collections::HashMap; -use std::fs; - -use log::error; -use rand::distributions::{Alphanumeric, DistString}; -use serde::{Deserialize, Serialize}; -use sqlx::types::chrono::NaiveDateTime; -use sqlx::types::{Json, JsonValue}; -use sqlx::{Pool, Sqlite}; -use tauri::{AppHandle, Emitter, Manager, WebviewWindow, Wry}; -use tokio::sync::Mutex; - -pub enum ModelType { - TypeCookieJar, - TypeEnvironment, - TypeFolder, - TypeGrpcConnection, - TypeGrpcEvent, - TypeGrpcRequest, - TypeHttpRequest, - TypeHttpResponse, - TypeWorkspace, -} - -impl ModelType { - pub fn id_prefix(&self) -> String { - match self { - ModelType::TypeCookieJar => "cj", - ModelType::TypeEnvironment => "ev", - ModelType::TypeFolder => "fl", - ModelType::TypeGrpcConnection => "gc", - ModelType::TypeGrpcEvent => "ge", - ModelType::TypeGrpcRequest => "gr", - ModelType::TypeHttpRequest => "rq", - ModelType::TypeHttpResponse => "rs", - ModelType::TypeWorkspace => "wk", - } - .to_string() - } -} - -fn default_true() -> bool { - true -} - -#[derive(sqlx::FromRow, Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct Settings { - pub id: String, - pub model: String, - pub created_at: NaiveDateTime, - pub updated_at: NaiveDateTime, - pub theme: String, - pub appearance: String, - pub theme_dark: String, - pub theme_light: String, - pub update_channel: String, - pub interface_font_size: i64, - pub interface_scale: i64, - pub editor_font_size: i64, - pub editor_soft_wrap: bool, - pub open_workspace_new_window: Option, -} - -#[derive(sqlx::FromRow, Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct Workspace { - pub id: String, - pub model: String, - pub created_at: NaiveDateTime, - pub updated_at: NaiveDateTime, - pub name: String, - pub description: String, - pub variables: Json>, - - // Settings - #[serde(default = "default_true")] - pub setting_validate_certificates: bool, - #[serde(default = "default_true")] - pub setting_follow_redirects: bool, - pub setting_request_timeout: i64, -} - -// Implement default for Workspace -impl Workspace { - pub(crate) fn new(name: String) -> Self { - Self { - name, - model: "workspace".to_string(), - setting_validate_certificates: true, - setting_follow_redirects: true, - ..Default::default() - } - } -} - -#[derive(sqlx::FromRow, Debug, Clone, Serialize, Deserialize, Default)] -pub struct CookieX {} - -#[derive(sqlx::FromRow, Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct CookieJar { - pub id: String, - pub model: String, - pub created_at: NaiveDateTime, - pub updated_at: NaiveDateTime, - pub workspace_id: String, - pub name: String, - pub cookies: Json>, -} - -#[derive(sqlx::FromRow, Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct Environment { - pub id: String, - pub workspace_id: String, - pub model: String, - pub created_at: NaiveDateTime, - pub updated_at: NaiveDateTime, - pub name: String, - pub variables: Json>, -} - -#[derive(Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct EnvironmentVariable { - #[serde(default = "default_true")] - pub enabled: bool, - pub name: String, - pub value: String, -} - -#[derive(sqlx::FromRow, Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct Folder { - pub created_at: NaiveDateTime, - pub updated_at: NaiveDateTime, - pub id: String, - pub workspace_id: String, - pub folder_id: Option, - pub model: String, - pub name: String, - pub sort_priority: f64, -} - -#[derive(Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct HttpRequestHeader { - #[serde(default = "default_true")] - pub enabled: bool, - pub name: String, - pub value: String, -} - -#[derive(Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct HttpUrlParameter { - #[serde(default = "default_true")] - pub enabled: bool, - pub name: String, - pub value: String, -} - -fn default_http_request_method() -> String { - "GET".to_string() -} - -#[derive(sqlx::FromRow, Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct HttpRequest { - pub created_at: NaiveDateTime, - pub updated_at: NaiveDateTime, - pub id: String, - pub workspace_id: String, - pub folder_id: Option, - pub model: String, - pub sort_priority: f64, - pub name: String, - pub url: String, - pub url_parameters: Json>, - #[serde(default = "default_http_request_method")] - pub method: String, - pub body: Json>, - pub body_type: Option, - pub authentication: Json>, - pub authentication_type: Option, - pub headers: Json>, -} - -#[derive(Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct HttpResponseHeader { - pub name: String, - pub value: String, -} - -#[derive(sqlx::FromRow, Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct HttpResponse { - pub id: String, - pub model: String, - pub workspace_id: String, - pub request_id: String, - pub created_at: NaiveDateTime, - pub updated_at: NaiveDateTime, - pub error: Option, - pub url: String, - pub content_length: Option, - pub version: Option, - pub elapsed: i64, - pub elapsed_headers: i64, - pub remote_addr: Option, - pub status: i64, - pub status_reason: Option, - pub body_path: Option, - pub headers: Json>, -} - -impl HttpResponse { - pub(crate) fn new() -> Self { - Self { - model: "http_response".to_string(), - ..Default::default() - } - } -} - -#[derive(Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct GrpcMetadataEntry { - #[serde(default = "default_true")] - pub enabled: bool, - pub name: String, - pub value: String, -} - -#[derive(sqlx::FromRow, Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct GrpcRequest { - pub id: String, - pub model: String, - pub workspace_id: String, - pub created_at: NaiveDateTime, - pub updated_at: NaiveDateTime, - pub folder_id: Option, - pub name: String, - pub sort_priority: f64, - pub url: String, - pub service: Option, - pub method: Option, - pub message: String, - pub authentication_type: Option, - pub authentication: Json>, - pub metadata: Json>, -} - -#[derive(sqlx::FromRow, Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct GrpcConnection { - pub id: String, - pub model: String, - pub workspace_id: String, - pub request_id: String, - pub created_at: NaiveDateTime, - pub updated_at: NaiveDateTime, - pub service: String, - pub method: String, - pub elapsed: i64, - pub status: i64, - pub url: String, - pub error: Option, - pub trailers: Json>, -} - -#[derive(sqlx::Type, Debug, Clone, Serialize, Deserialize, Eq, PartialEq)] -#[serde(rename_all = "snake_case")] -#[sqlx(rename_all = "snake_case")] -pub enum GrpcEventType { - Info, - Error, - ClientMessage, - ServerMessage, - ConnectionStart, - ConnectionEnd, -} - -impl Default for GrpcEventType { - fn default() -> Self { - GrpcEventType::Info - } -} - -#[derive(Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct GrpcEvent { - pub id: String, - pub model: String, - pub workspace_id: String, - pub request_id: String, - pub connection_id: String, - pub created_at: NaiveDateTime, - pub content: String, - pub event_type: GrpcEventType, - pub metadata: Json>, - pub status: Option, - pub error: Option, -} - -#[derive(sqlx::FromRow, Debug, Clone, Serialize, Deserialize, Default)] -#[serde(default, rename_all = "camelCase")] -pub struct KeyValue { - pub model: String, - pub created_at: NaiveDateTime, - pub updated_at: NaiveDateTime, - pub namespace: String, - pub key: String, - pub value: String, -} - -pub async fn set_key_value_string( - mgr: &impl Manager, - namespace: &str, - key: &str, - value: &str, -) -> (KeyValue, bool) { - let encoded = serde_json::to_string(value); - set_key_value_raw(mgr, namespace, key, &encoded.unwrap()).await -} - -pub async fn set_key_value_int( - mgr: &impl Manager, - namespace: &str, - key: &str, - value: i32, -) -> (KeyValue, bool) { - let encoded = serde_json::to_string(&value); - set_key_value_raw(mgr, namespace, key, &encoded.unwrap()).await -} - -pub async fn get_key_value_string( - mgr: &impl Manager, - namespace: &str, - key: &str, - default: &str, -) -> String { - match get_key_value_raw(mgr, namespace, key).await { - None => default.to_string(), - Some(v) => { - let result = serde_json::from_str(&v.value); - match result { - Ok(v) => v, - Err(e) => { - error!("Failed to parse string key value: {}", e); - default.to_string() - } - } - } - } -} - -pub async fn get_key_value_int( - mgr: &impl Manager, - namespace: &str, - key: &str, - default: i32, -) -> i32 { - match get_key_value_raw(mgr, namespace, key).await { - None => default.clone(), - Some(v) => { - let result = serde_json::from_str(&v.value); - match result { - Ok(v) => v, - Err(e) => { - error!("Failed to parse int key value: {}", e); - default.clone() - } - } - } - } -} - -pub async fn set_key_value_raw( - mgr: &impl Manager, - namespace: &str, - key: &str, - value: &str, -) -> (KeyValue, bool) { - let db = get_db(mgr).await; - let existing = get_key_value_raw(mgr, namespace, key).await; - sqlx::query!( - r#" - INSERT INTO key_values (namespace, key, value) - VALUES (?, ?, ?) ON CONFLICT DO UPDATE SET - updated_at = CURRENT_TIMESTAMP, - value = excluded.value - "#, - namespace, - key, - value, - ) - .execute(&db) - .await - .expect("Failed to insert key value"); - - let kv = get_key_value_raw(mgr, namespace, key) - .await - .expect("Failed to get key value"); - (kv, existing.is_none()) -} - -pub async fn get_key_value_raw( - mgr: &impl Manager, - namespace: &str, - key: &str, -) -> Option { - let db = get_db(mgr).await; - sqlx::query_as!( - KeyValue, - r#" - SELECT model, created_at, updated_at, namespace, key, value - FROM key_values - WHERE namespace = ? AND key = ? - "#, - namespace, - key, - ) - .fetch_one(&db) - .await - .ok() -} - -pub async fn list_workspaces(mgr: &impl Manager) -> Result, sqlx::Error> { - let db = get_db(mgr).await; - sqlx::query_as!( - Workspace, - r#" - SELECT - id, model, created_at, updated_at, name, description, setting_request_timeout, - setting_follow_redirects, setting_validate_certificates, - variables AS "variables!: sqlx::types::Json>" - FROM workspaces - "#, - ) - .fetch_all(&db) - .await -} - -pub async fn get_workspace(mgr: &impl Manager, id: &str) -> Result { - let db = get_db(mgr).await; - sqlx::query_as!( - Workspace, - r#" - SELECT - id, model, created_at, updated_at, name, description, setting_request_timeout, - setting_follow_redirects, setting_validate_certificates, - variables AS "variables!: sqlx::types::Json>" - FROM workspaces WHERE id = ? - "#, - id, - ) - .fetch_one(&db) - .await -} - -pub async fn delete_workspace(window: &WebviewWindow, id: &str) -> Result { - let db = get_db(window).await; - let workspace = get_workspace(window, id).await?; - let _ = sqlx::query!( - r#" - DELETE FROM workspaces - WHERE id = ? - "#, - id, - ) - .execute(&db) - .await; - - for r in list_responses_by_workspace_id(window, id).await? { - delete_http_response(window, &r.id).await?; - } - - emit_deleted_model(window, workspace) -} - -pub async fn get_cookie_jar(mgr: &impl Manager, id: &str) -> Result { - let db = get_db(mgr).await; - sqlx::query_as!( - CookieJar, - r#" - SELECT - id, model, created_at, updated_at, workspace_id, name, - cookies AS "cookies!: sqlx::types::Json>" - FROM cookie_jars WHERE id = ? - "#, - id, - ) - .fetch_one(&db) - .await -} - -pub async fn list_cookie_jars( - mgr: &impl Manager, - workspace_id: &str, -) -> Result, sqlx::Error> { - let db = get_db(mgr).await; - sqlx::query_as!( - CookieJar, - r#" - SELECT - id, model, created_at, updated_at, workspace_id, name, - cookies AS "cookies!: sqlx::types::Json>" - FROM cookie_jars WHERE workspace_id = ? - "#, - workspace_id, - ) - .fetch_all(&db) - .await -} - -pub async fn delete_cookie_jar(window: &WebviewWindow, id: &str) -> Result { - let cookie_jar = get_cookie_jar(window, id).await?; - let db = get_db(window).await; - - let _ = sqlx::query!( - r#" - DELETE FROM cookie_jars - WHERE id = ? - "#, - id, - ) - .execute(&db) - .await; - - emit_deleted_model(window, cookie_jar) -} - -pub async fn duplicate_grpc_request( - window: &WebviewWindow, - id: &str, -) -> Result { - let mut request = get_grpc_request(window, id).await?.clone(); - request.id = "".to_string(); - upsert_grpc_request(window, &request).await -} - -pub async fn upsert_grpc_request( - window: &WebviewWindow, - request: &GrpcRequest, -) -> Result { - let db = get_db(window).await; - let id = match request.id.as_str() { - "" => generate_model_id(ModelType::TypeGrpcRequest), - _ => request.id.to_string(), - }; - let trimmed_name = request.name.trim(); - sqlx::query!( - r#" - INSERT INTO grpc_requests ( - id, name, workspace_id, folder_id, sort_priority, url, service, method, message, - authentication_type, authentication, metadata - ) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - ON CONFLICT (id) DO UPDATE SET - updated_at = CURRENT_TIMESTAMP, - workspace_id = excluded.workspace_id, - name = excluded.name, - folder_id = excluded.folder_id, - sort_priority = excluded.sort_priority, - url = excluded.url, - service = excluded.service, - method = excluded.method, - message = excluded.message, - authentication_type = excluded.authentication_type, - authentication = excluded.authentication, - metadata = excluded.metadata - "#, - id, - trimmed_name, - request.workspace_id, - request.folder_id, - request.sort_priority, - request.url, - request.service, - request.method, - request.message, - request.authentication_type, - request.authentication, - request.metadata, - ) - .execute(&db) - .await?; - - match get_grpc_request(window, &id).await { - Ok(m) => Ok(emit_upserted_model(window, m)), - Err(e) => Err(e), - } -} - -pub async fn get_grpc_request( - mgr: &impl Manager, - id: &str, -) -> Result { - let db = get_db(mgr).await; - sqlx::query_as!( - GrpcRequest, - r#" - SELECT - id, model, workspace_id, folder_id, created_at, updated_at, name, sort_priority, - url, service, method, message, authentication_type, - authentication AS "authentication!: Json>", - metadata AS "metadata!: sqlx::types::Json>" - FROM grpc_requests - WHERE id = ? - "#, - id, - ) - .fetch_one(&db) - .await -} - -pub async fn list_grpc_requests( - mgr: &impl Manager, - workspace_id: &str, -) -> Result, sqlx::Error> { - let db = get_db(mgr).await; - sqlx::query_as!( - GrpcRequest, - r#" - SELECT - id, model, workspace_id, folder_id, created_at, updated_at, name, sort_priority, - url, service, method, message, authentication_type, - authentication AS "authentication!: Json>", - metadata AS "metadata!: sqlx::types::Json>" - FROM grpc_requests - WHERE workspace_id = ? - "#, - workspace_id, - ) - .fetch_all(&db) - .await -} - -pub async fn upsert_grpc_connection( - window: &WebviewWindow, - connection: &GrpcConnection, -) -> Result { - let db = get_db(window).await; - let id = match connection.id.as_str() { - "" => generate_model_id(ModelType::TypeGrpcConnection), - _ => connection.id.to_string(), - }; - sqlx::query!( - r#" - INSERT INTO grpc_connections ( - id, workspace_id, request_id, service, method, elapsed, - status, error, trailers, url - ) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - ON CONFLICT (id) DO UPDATE SET - updated_at = CURRENT_TIMESTAMP, - service = excluded.service, - method = excluded.method, - elapsed = excluded.elapsed, - status = excluded.status, - error = excluded.error, - trailers = excluded.trailers, - url = excluded.url - "#, - id, - connection.workspace_id, - connection.request_id, - connection.service, - connection.method, - connection.elapsed, - connection.status, - connection.error, - connection.trailers, - connection.url, - ) - .execute(&db) - .await?; - - match get_grpc_connection(window, &id).await { - Ok(m) => Ok(emit_upserted_model(window, m)), - Err(e) => Err(e), - } -} - -pub async fn get_grpc_connection( - mgr: &impl Manager, - id: &str, -) -> Result { - let db = get_db(mgr).await; - sqlx::query_as!( - GrpcConnection, - r#" - SELECT - id, model, workspace_id, request_id, created_at, updated_at, service, - method, elapsed, status, error, url, - trailers AS "trailers!: sqlx::types::Json>" - FROM grpc_connections - WHERE id = ? - "#, - id, - ) - .fetch_one(&db) - .await -} - -pub async fn list_grpc_connections( - mgr: &impl Manager, - request_id: &str, -) -> Result, sqlx::Error> { - let db = get_db(mgr).await; - sqlx::query_as!( - GrpcConnection, - r#" - SELECT - id, model, workspace_id, request_id, created_at, updated_at, service, - method, elapsed, status, error, url, - trailers AS "trailers!: sqlx::types::Json>" - FROM grpc_connections - WHERE request_id = ? - ORDER BY created_at DESC - "#, - request_id, - ) - .fetch_all(&db) - .await -} - -pub async fn upsert_grpc_event( - window: &WebviewWindow, - event: &GrpcEvent, -) -> Result { - let db = get_db(window).await; - let id = match event.id.as_str() { - "" => generate_model_id(ModelType::TypeGrpcEvent), - _ => event.id.to_string(), - }; - sqlx::query!( - r#" - INSERT INTO grpc_events ( - id, workspace_id, request_id, connection_id, content, event_type, metadata, - status, error - ) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) - ON CONFLICT (id) DO UPDATE SET - updated_at = CURRENT_TIMESTAMP, - content = excluded.content, - event_type = excluded.event_type, - metadata = excluded.metadata, - status = excluded.status, - error = excluded.error - "#, - id, - event.workspace_id, - event.request_id, - event.connection_id, - event.content, - event.event_type, - event.metadata, - event.status, - event.error, - ) - .execute(&db) - .await?; - - match get_grpc_event(window, &id).await { - Ok(m) => Ok(emit_upserted_model(window, m)), - Err(e) => Err(e), - } -} - -pub async fn get_grpc_event(mgr: &impl Manager, id: &str) -> Result { - let db = get_db(mgr).await; - sqlx::query_as!( - GrpcEvent, - r#" - SELECT - id, model, workspace_id, request_id, connection_id, created_at, content, status, error, - event_type AS "event_type!: GrpcEventType", - metadata AS "metadata!: sqlx::types::Json>" - FROM grpc_events - WHERE id = ? - "#, - id, - ) - .fetch_one(&db) - .await -} - -pub async fn list_grpc_events( - mgr: &impl Manager, - connection_id: &str, -) -> Result, sqlx::Error> { - let db = get_db(mgr).await; - sqlx::query_as!( - GrpcEvent, - r#" - SELECT - id, model, workspace_id, request_id, connection_id, created_at, content, status, error, - event_type AS "event_type!: GrpcEventType", - metadata AS "metadata!: sqlx::types::Json>" - FROM grpc_events - WHERE connection_id = ? - "#, - connection_id, - ) - .fetch_all(&db) - .await -} - -pub async fn upsert_cookie_jar( - window: &WebviewWindow, - cookie_jar: &CookieJar, -) -> Result { - let id = match cookie_jar.id.as_str() { - "" => generate_model_id(ModelType::TypeCookieJar), - _ => cookie_jar.id.to_string(), - }; - let trimmed_name = cookie_jar.name.trim(); - - let db = get_db(window).await; - sqlx::query!( - r#" - INSERT INTO cookie_jars ( - id, workspace_id, name, cookies - ) - VALUES (?, ?, ?, ?) - ON CONFLICT (id) DO UPDATE SET - updated_at = CURRENT_TIMESTAMP, - name = excluded.name, - cookies = excluded.cookies - "#, - id, - cookie_jar.workspace_id, - trimmed_name, - cookie_jar.cookies, - ) - .execute(&db) - .await?; - - match get_cookie_jar(window, &id).await { - Ok(m) => Ok(emit_upserted_model(window, m)), - Err(e) => Err(e), - } -} - -pub async fn list_environments( - mgr: &impl Manager, - workspace_id: &str, -) -> Result, sqlx::Error> { - let db = get_db(mgr).await; - sqlx::query_as!( - Environment, - r#" - SELECT id, workspace_id, model, created_at, updated_at, name, - variables AS "variables!: sqlx::types::Json>" - FROM environments - WHERE workspace_id = ? - "#, - workspace_id, - ) - .fetch_all(&db) - .await -} - -pub async fn delete_environment( - window: &WebviewWindow, - id: &str, -) -> Result { - let db = get_db(window).await; - let env = get_environment(window, id).await?; - let _ = sqlx::query!( - r#" - DELETE FROM environments - WHERE id = ? - "#, - id, - ) - .execute(&db) - .await; - - emit_deleted_model(window, env) -} - -async fn get_settings(mgr: &impl Manager) -> Result { - let db = get_db(mgr).await; - sqlx::query_as!( - Settings, - r#" - SELECT - id, model, created_at, updated_at, theme, appearance, - theme_dark, theme_light, update_channel, - interface_font_size, interface_scale, editor_font_size, editor_soft_wrap, - open_workspace_new_window - FROM settings - WHERE id = 'default' - "#, - ) - .fetch_one(&db) - .await -} - -pub async fn get_or_create_settings(mgr: &impl Manager) -> Settings { - if let Ok(settings) = get_settings(mgr).await { - return settings; - } - - let db = get_db(mgr).await; - sqlx::query!( - r#" - INSERT INTO settings (id) - VALUES ('default') - "#, - ) - .execute(&db) - .await - .expect("Failed to insert settings"); - - get_settings(mgr).await.expect("Failed to get settings") -} - -pub async fn update_settings( - window: &WebviewWindow, - settings: Settings, -) -> Result { - let db = get_db(window).await; - sqlx::query!( - r#" - UPDATE settings SET ( - theme, appearance, theme_dark, theme_light, update_channel, - interface_font_size, interface_scale, editor_font_size, editor_soft_wrap, - open_workspace_new_window - ) = (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) WHERE id = 'default'; - "#, - settings.theme, - settings.appearance, - settings.theme_dark, - settings.theme_light, - settings.update_channel, - settings.interface_font_size, - settings.interface_scale, - settings.editor_font_size, - settings.editor_soft_wrap, - settings.open_workspace_new_window, - ) - .execute(&db) - .await?; - - match get_settings(window).await { - Ok(m) => Ok(emit_upserted_model(window, m)), - Err(e) => Err(e), - } -} - -pub async fn upsert_environment( - window: &WebviewWindow, - environment: Environment, -) -> Result { - let id = match environment.id.as_str() { - "" => generate_model_id(ModelType::TypeEnvironment), - _ => environment.id.to_string(), - }; - let trimmed_name = environment.name.trim(); - let db = get_db(window).await; - sqlx::query!( - r#" - INSERT INTO environments ( - id, workspace_id, name, variables - ) - VALUES (?, ?, ?, ?) - ON CONFLICT (id) DO UPDATE SET - updated_at = CURRENT_TIMESTAMP, - name = excluded.name, - variables = excluded.variables - "#, - id, - environment.workspace_id, - trimmed_name, - environment.variables, - ) - .execute(&db) - .await?; - - match get_environment(window, &id).await { - Ok(m) => Ok(emit_upserted_model(window, m)), - Err(e) => Err(e), - } -} - -pub async fn get_environment( - mgr: &impl Manager, - id: &str, -) -> Result { - let db = get_db(mgr).await; - sqlx::query_as!( - Environment, - r#" - SELECT - id, model, workspace_id, created_at, updated_at, name, - variables AS "variables!: sqlx::types::Json>" - FROM environments - WHERE id = ? - "#, - id, - ) - .fetch_one(&db) - .await -} - -pub async fn get_folder(mgr: &impl Manager, id: &str) -> Result { - let db = get_db(mgr).await; - sqlx::query_as!( - Folder, - r#" - SELECT - id, model, workspace_id, created_at, updated_at, folder_id, name, sort_priority - FROM folders - WHERE id = ? - "#, - id, - ) - .fetch_one(&db) - .await -} - -pub async fn list_folders( - mgr: &impl Manager, - workspace_id: &str, -) -> Result, sqlx::Error> { - let db = get_db(mgr).await; - sqlx::query_as!( - Folder, - r#" - SELECT - id, model, workspace_id, created_at, updated_at, folder_id, name, sort_priority - FROM folders - WHERE workspace_id = ? - "#, - workspace_id, - ) - .fetch_all(&db) - .await -} - -pub async fn delete_folder(window: &WebviewWindow, id: &str) -> Result { - let folder = get_folder(window, id).await?; - let db = get_db(window).await; - let _ = sqlx::query!( - r#" - DELETE FROM folders - WHERE id = ? - "#, - id, - ) - .execute(&db) - .await; - - emit_deleted_model(window, folder) -} - -pub async fn upsert_folder(window: &WebviewWindow, r: Folder) -> Result { - let id = match r.id.as_str() { - "" => generate_model_id(ModelType::TypeFolder), - _ => r.id.to_string(), - }; - let trimmed_name = r.name.trim(); - - let db = get_db(window).await; - sqlx::query!( - r#" - INSERT INTO folders ( - id, workspace_id, folder_id, name, sort_priority - ) - VALUES (?, ?, ?, ?, ?) - ON CONFLICT (id) DO UPDATE SET - updated_at = CURRENT_TIMESTAMP, - name = excluded.name, - folder_id = excluded.folder_id, - sort_priority = excluded.sort_priority - "#, - id, - r.workspace_id, - r.folder_id, - trimmed_name, - r.sort_priority, - ) - .execute(&db) - .await?; - - match get_folder(window, &id).await { - Ok(m) => Ok(emit_upserted_model(window, m)), - Err(e) => Err(e), - } -} - -pub async fn duplicate_http_request( - window: &WebviewWindow, - id: &str, -) -> Result { - let mut request = get_http_request(window, id).await?.clone(); - request.id = "".to_string(); - upsert_http_request(window, request).await -} - -pub async fn upsert_http_request( - window: &WebviewWindow, - r: HttpRequest, -) -> Result { - let id = match r.id.as_str() { - "" => generate_model_id(ModelType::TypeHttpRequest), - _ => r.id.to_string(), - }; - let trimmed_name = r.name.trim(); - - let db = get_db(window).await; - - sqlx::query!( - r#" - INSERT INTO http_requests ( - id, workspace_id, folder_id, name, url, url_parameters, method, body, body_type, - authentication, authentication_type, headers, sort_priority - ) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - ON CONFLICT (id) DO UPDATE SET - updated_at = CURRENT_TIMESTAMP, - workspace_id = excluded.workspace_id, - name = excluded.name, - folder_id = excluded.folder_id, - method = excluded.method, - headers = excluded.headers, - body = excluded.body, - body_type = excluded.body_type, - authentication = excluded.authentication, - authentication_type = excluded.authentication_type, - url = excluded.url, - url_parameters = excluded.url_parameters, - sort_priority = excluded.sort_priority - "#, - id, - r.workspace_id, - r.folder_id, - trimmed_name, - r.url, - r.url_parameters, - r.method, - r.body, - r.body_type, - r.authentication, - r.authentication_type, - r.headers, - r.sort_priority, - ) - .execute(&db) - .await?; - - match get_http_request(window, &id).await { - Ok(m) => Ok(emit_upserted_model(window, m)), - Err(e) => Err(e), - } -} - -pub async fn list_http_requests( - mgr: &impl Manager, - workspace_id: &str, -) -> Result, sqlx::Error> { - let db = get_db(mgr).await; - sqlx::query_as!( - HttpRequest, - r#" - SELECT - id, model, workspace_id, folder_id, created_at, updated_at, name, url, - url_parameters AS "url_parameters!: sqlx::types::Json>", - method, body_type, authentication_type, sort_priority, - body AS "body!: Json>", - authentication AS "authentication!: Json>", - headers AS "headers!: sqlx::types::Json>" - FROM http_requests - WHERE workspace_id = ? - "#, - workspace_id, - ) - .fetch_all(&db) - .await -} - -pub async fn get_http_request( - mgr: &impl Manager, - id: &str, -) -> Result { - let db = get_db(mgr).await; - - sqlx::query_as!( - HttpRequest, - r#" - SELECT - id, model, workspace_id, folder_id, created_at, updated_at, name, url, method, - body_type, authentication_type, sort_priority, - url_parameters AS "url_parameters!: sqlx::types::Json>", - body AS "body!: Json>", - authentication AS "authentication!: Json>", - headers AS "headers!: sqlx::types::Json>" - FROM http_requests - WHERE id = ? - "#, - id, - ) - .fetch_one(&db) - .await -} - -pub async fn delete_http_request( - window: &WebviewWindow, - id: &str, -) -> Result { - let req = get_http_request(window, id).await?; - - // DB deletes will cascade but this will delete the files - delete_all_http_responses(window, id).await?; - - let db = get_db(window).await; - let _ = sqlx::query!( - r#" - DELETE FROM http_requests - WHERE id = ? - "#, - id, - ) - .execute(&db) - .await; - - emit_deleted_model(window, req) -} - -#[allow(clippy::too_many_arguments)] -pub async fn create_http_response( - window: &WebviewWindow, - request_id: &str, - elapsed: i64, - elapsed_headers: i64, - url: &str, - status: i64, - status_reason: Option<&str>, - content_length: Option, - body_path: Option<&str>, - headers: Vec, - version: Option<&str>, - remote_addr: Option<&str>, -) -> Result { - let req = get_http_request(window, request_id).await?; - let id = generate_model_id(ModelType::TypeHttpResponse); - let headers_json = Json(headers); - let db = get_db(window).await; - sqlx::query!( - r#" - INSERT INTO http_responses ( - id, request_id, workspace_id, elapsed, elapsed_headers, url, status, status_reason, - content_length, body_path, headers, version, remote_addr - ) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?); - "#, - id, - request_id, - req.workspace_id, - elapsed, - elapsed_headers, - url, - status, - status_reason, - content_length, - body_path, - headers_json, - version, - remote_addr, - ) - .execute(&db) - .await?; - - match get_http_response(window, &id).await { - Ok(m) => Ok(emit_upserted_model(window, m)), - Err(e) => Err(e), - } -} - -pub async fn cancel_pending_grpc_connections(app: &AppHandle) -> Result<(), sqlx::Error> { - let db = get_db(app).await; - sqlx::query!( - r#" - UPDATE grpc_connections - SET (elapsed) = (-1) - WHERE elapsed = 0; - "#, - ) - .execute(&db) - .await?; - Ok(()) -} - -pub async fn cancel_pending_responses(app: &AppHandle) -> Result<(), sqlx::Error> { - let db = get_db(app).await; - sqlx::query!( - r#" - UPDATE http_responses - SET (elapsed, status_reason) = (-1, 'Cancelled') - WHERE elapsed = 0; - "#, - ) - .execute(&db) - .await?; - Ok(()) -} - -pub async fn update_response_if_id( - window: &WebviewWindow, - response: &HttpResponse, -) -> Result { - if response.id.is_empty() { - Ok(response.clone()) - } else { - update_response(window, response).await - } -} - -pub async fn upsert_workspace( - window: &WebviewWindow, - workspace: Workspace, -) -> Result { - let id = match workspace.id.as_str() { - "" => generate_model_id(ModelType::TypeWorkspace), - _ => workspace.id.to_string(), - }; - let trimmed_name = workspace.name.trim(); - - let db = get_db(window).await; - sqlx::query!( - r#" - INSERT INTO workspaces ( - id, name, description, variables, setting_request_timeout, - setting_follow_redirects, setting_validate_certificates - ) - VALUES (?, ?, ?, ?, ?, ?, ?) - ON CONFLICT (id) DO UPDATE SET - updated_at = CURRENT_TIMESTAMP, - name = excluded.name, - description = excluded.description, - variables = excluded.variables, - setting_request_timeout = excluded.setting_request_timeout, - setting_follow_redirects = excluded.setting_follow_redirects, - setting_validate_certificates = excluded.setting_validate_certificates - "#, - id, - trimmed_name, - workspace.description, - workspace.variables, - workspace.setting_request_timeout, - workspace.setting_follow_redirects, - workspace.setting_validate_certificates, - ) - .execute(&db) - .await?; - - match get_workspace(window, &id).await { - Ok(m) => Ok(emit_upserted_model(window, m)), - Err(e) => Err(e), - } -} - -pub async fn update_response( - window: &WebviewWindow, - response: &HttpResponse, -) -> Result { - let db = get_db(window).await; - sqlx::query!( - r#" - UPDATE http_responses SET ( - elapsed, elapsed_headers, url, status, status_reason, content_length, body_path, - error, headers, version, remote_addr, updated_at - ) = (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP) WHERE id = ?; - "#, - response.elapsed, - response.elapsed_headers, - response.url, - response.status, - response.status_reason, - response.content_length, - response.body_path, - response.error, - response.headers, - response.version, - response.remote_addr, - response.id, - ) - .execute(&db) - .await?; - - match get_http_response(window, &response.id).await { - Ok(m) => Ok(emit_upserted_model(window, m)), - Err(e) => Err(e), - } -} - -pub async fn get_http_response( - mgr: &impl Manager, - id: &str, -) -> Result { - let db = get_db(mgr).await; - sqlx::query_as!( - HttpResponse, - r#" - SELECT - id, model, workspace_id, request_id, updated_at, created_at, url, status, - status_reason, content_length, body_path, elapsed, elapsed_headers, error, - version, remote_addr, - headers AS "headers!: sqlx::types::Json>" - FROM http_responses - WHERE id = ? - "#, - id, - ) - .fetch_one(&db) - .await -} - -pub async fn list_responses( - mgr: &impl Manager, - request_id: &str, - limit: Option, -) -> Result, sqlx::Error> { - let limit_unwrapped = limit.unwrap_or_else(|| i64::MAX); - let db = get_db(mgr).await; - sqlx::query_as!( - HttpResponse, - r#" - SELECT - id, model, workspace_id, request_id, updated_at, created_at, url, status, - status_reason, content_length, body_path, elapsed, elapsed_headers, error, - version, remote_addr, - headers AS "headers!: sqlx::types::Json>" - FROM http_responses - WHERE request_id = ? - ORDER BY created_at DESC - LIMIT ? - "#, - request_id, - limit_unwrapped, - ) - .fetch_all(&db) - .await -} - -pub async fn list_responses_by_workspace_id( - mgr: &impl Manager, - workspace_id: &str, -) -> Result, sqlx::Error> { - let db = get_db(mgr).await; - sqlx::query_as!( - HttpResponse, - r#" - SELECT - id, model, workspace_id, request_id, updated_at, created_at, url, status, - status_reason, content_length, body_path, elapsed, elapsed_headers, error, - version, remote_addr, - headers AS "headers!: sqlx::types::Json>" - FROM http_responses - WHERE workspace_id = ? - ORDER BY created_at DESC - "#, - workspace_id, - ) - .fetch_all(&db) - .await -} - -pub async fn delete_grpc_request( - window: &WebviewWindow, - id: &str, -) -> Result { - let req = get_grpc_request(window, id).await?; - - let db = get_db(window).await; - let _ = sqlx::query!( - r#" - DELETE FROM grpc_requests - WHERE id = ? - "#, - id, - ) - .execute(&db) - .await; - - emit_deleted_model(window, req) -} - -pub async fn delete_grpc_connection( - window: &WebviewWindow, - id: &str, -) -> Result { - let resp = get_grpc_connection(window, id).await?; - - let db = get_db(window).await; - let _ = sqlx::query!( - r#" - DELETE FROM grpc_connections - WHERE id = ? - "#, - id, - ) - .execute(&db) - .await; - - emit_deleted_model(window, resp) -} - -pub async fn delete_http_response( - window: &WebviewWindow, - id: &str, -) -> Result { - let resp = get_http_response(window, id).await?; - - // Delete the body file if it exists - if let Some(p) = resp.body_path.clone() { - if let Err(e) = fs::remove_file(p) { - error!("Failed to delete body file: {}", e); - }; - } - - let db = get_db(window).await; - let _ = sqlx::query!( - r#" - DELETE FROM http_responses - WHERE id = ? - "#, - id, - ) - .execute(&db) - .await; - - emit_deleted_model(window, resp) -} - -pub async fn delete_all_grpc_connections( - window: &WebviewWindow, - request_id: &str, -) -> Result<(), sqlx::Error> { - for r in list_grpc_connections(window, request_id).await? { - delete_grpc_connection(window, &r.id).await?; - } - Ok(()) -} - -pub async fn delete_all_http_responses( - window: &WebviewWindow, - request_id: &str, -) -> Result<(), sqlx::Error> { - for r in list_responses(window, request_id, None).await? { - delete_http_response(window, &r.id).await?; - } - Ok(()) -} - -pub fn generate_model_id(model: ModelType) -> String { - let id = generate_id(); - format!("{}_{}", model.id_prefix(), id) -} - -pub fn generate_id() -> String { - Alphanumeric.sample_string(&mut rand::thread_rng(), 10) -} - -#[derive(Default, Debug, Deserialize, Serialize)] -#[serde(default, rename_all = "camelCase")] -pub struct WorkspaceExport { - pub yaak_version: String, - pub yaak_schema: i64, - pub timestamp: NaiveDateTime, - pub resources: WorkspaceExportResources, -} - -#[derive(Default, Debug, Deserialize, Serialize)] -#[serde(default, rename_all = "camelCase")] -pub struct WorkspaceExportResources { - pub workspaces: Vec, - pub environments: Vec, - pub folders: Vec, - pub http_requests: Vec, - pub grpc_requests: Vec, -} - -#[derive(Default, Debug, Deserialize, Serialize)] -pub struct ImportResult { - pub resources: WorkspaceExportResources, -} - -pub async fn get_workspace_export_resources( - window: &WebviewWindow, - workspace_ids: Vec<&str>, -) -> WorkspaceExport { - let app_handle = window.app_handle(); - let mut data = WorkspaceExport { - yaak_version: app_handle.package_info().version.clone().to_string(), - yaak_schema: 2, - timestamp: chrono::Utc::now().naive_utc(), - resources: WorkspaceExportResources { - workspaces: Vec::new(), - environments: Vec::new(), - folders: Vec::new(), - http_requests: Vec::new(), - grpc_requests: Vec::new(), - }, - }; - - for workspace_id in workspace_ids { - data.resources.workspaces.push( - get_workspace(window, workspace_id) - .await - .expect("Failed to get workspace"), - ); - data.resources.environments.append( - &mut list_environments(window, workspace_id) - .await - .expect("Failed to get environments"), - ); - data.resources.folders.append( - &mut list_folders(window, workspace_id) - .await - .expect("Failed to get folders"), - ); - data.resources.http_requests.append( - &mut list_http_requests(window, workspace_id) - .await - .expect("Failed to get http requests"), - ); - data.resources.grpc_requests.append( - &mut list_grpc_requests(window, workspace_id) - .await - .expect("Failed to get grpc requests"), - ); - } - - return data; -} - -#[derive(Clone, Serialize)] -#[serde(default, rename_all = "camelCase")] -struct ModelPayload { - pub model: M, - pub window_label: String, -} - -fn emit_upserted_model(window: &WebviewWindow, model: M) -> M { - let payload = ModelPayload { - model: model.clone(), - window_label: window.label().to_string(), - }; - - window.emit("upserted_model", payload).unwrap(); - model -} - -fn emit_deleted_model(window: &WebviewWindow, model: M) -> Result { - let payload = ModelPayload { - model: model.clone(), - window_label: window.label().to_string(), - }; - window.emit("deleted_model", payload).unwrap(); - Ok(model) -} - -async fn get_db(w: &impl Manager) -> Pool { - let db_state = w.state::>>(); - let db = &*db_state.lock().await; - db.clone() -} diff --git a/src-tauri/src/notifications.rs b/src-tauri/src/notifications.rs index 0df7dda0..c033cae3 100644 --- a/src-tauri/src/notifications.rs +++ b/src-tauri/src/notifications.rs @@ -5,9 +5,8 @@ use log::debug; use reqwest::Method; use serde::{Deserialize, Serialize}; use tauri::{AppHandle, Emitter}; - +use yaak_models::queries::{get_key_value_raw, set_key_value_raw}; use crate::analytics::get_num_launches; -use crate::models::{get_key_value_raw, set_key_value_raw}; // Check for updates every hour const MAX_UPDATE_CHECK_SECONDS: u64 = 60 * 60; diff --git a/src-tauri/src/render.rs b/src-tauri/src/render.rs index fb177564..27e57855 100644 --- a/src-tauri/src/render.rs +++ b/src-tauri/src/render.rs @@ -1,13 +1,12 @@ use std::collections::HashMap; -use sqlx::types::{Json, JsonValue}; +use sqlx::types::JsonValue; +use crate::template_fns::timestamp; use templates::parse_and_render; - -use crate::models::{ +use yaak_models::models::{ Environment, EnvironmentVariable, HttpRequest, HttpRequestHeader, HttpUrlParameter, Workspace, }; -use crate::template_fns::timestamp; pub fn render_request(r: &HttpRequest, w: &Workspace, e: Option<&Environment>) -> HttpRequest { let r = r.clone(); @@ -15,56 +14,48 @@ pub fn render_request(r: &HttpRequest, w: &Workspace, e: Option<&Environment>) - HttpRequest { url: render(r.url.as_str(), vars), - url_parameters: Json( - r.url_parameters - .0 - .iter() - .map(|p| HttpUrlParameter { - enabled: p.enabled, - name: render(p.name.as_str(), vars), - value: render(p.value.as_str(), vars), - }) - .collect::>(), - ), - headers: Json( - r.headers - .0 - .iter() - .map(|p| HttpRequestHeader { - enabled: p.enabled, - name: render(p.name.as_str(), vars), - value: render(p.value.as_str(), vars), - }) - .collect::>(), - ), - body: Json( - r.body - .0 - .iter() - .map(|(k, v)| { - let v = if v.is_string() { - render(v.as_str().unwrap(), vars) - } else { - v.to_string() - }; - (render(k, vars), JsonValue::from(v)) - }) - .collect::>(), - ), - authentication: Json( - r.authentication - .0 - .iter() - .map(|(k, v)| { - let v = if v.is_string() { - render(v.as_str().unwrap(), vars) - } else { - v.to_string() - }; - (render(k, vars), JsonValue::from(v)) - }) - .collect::>(), - ), + url_parameters: r + .url_parameters + .iter() + .map(|p| HttpUrlParameter { + enabled: p.enabled, + name: render(p.name.as_str(), vars), + value: render(p.value.as_str(), vars), + }) + .collect::>(), + headers: r + .headers + .iter() + .map(|p| HttpRequestHeader { + enabled: p.enabled, + name: render(p.name.as_str(), vars), + value: render(p.value.as_str(), vars), + }) + .collect::>(), + body: r + .body + .iter() + .map(|(k, v)| { + let v = if v.is_string() { + render(v.as_str().unwrap(), vars) + } else { + v.to_string() + }; + (render(k, vars), JsonValue::from(v)) + }) + .collect::>(), + authentication: r + .authentication + .iter() + .map(|(k, v)| { + let v = if v.is_string() { + render(v.as_str().unwrap(), vars) + } else { + v.to_string() + }; + (render(k, vars), JsonValue::from(v)) + }) + .collect::>(), ..r } } @@ -95,10 +86,10 @@ pub fn variables_from_environment( environment: Option<&Environment>, ) -> HashMap { let mut variables = HashMap::new(); - variables = add_variable_to_map(variables, &workspace.variables.0); + variables = add_variable_to_map(variables, &workspace.variables); if let Some(e) = environment { - variables = add_variable_to_map(variables, &e.variables.0); + variables = add_variable_to_map(variables, &e.variables); } recursively_render_variables(&variables, 0) diff --git a/src-tauri/src/template_fns.rs b/src-tauri/src/template_fns.rs index 76cdb43d..94b7434d 100644 --- a/src-tauri/src/template_fns.rs +++ b/src-tauri/src/template_fns.rs @@ -12,7 +12,10 @@ pub fn timestamp(args: HashMap) -> Result { } _ => { let json_from = serde_json::to_string(from).unwrap_or_default(); - let now: DateTime = serde_json::from_str(json_from.as_str()).unwrap(); + let now: DateTime = match serde_json::from_str(json_from.as_str()) { + Ok(r) => r, + Err(e) => return Err(e.to_string()), + }; now } }; @@ -43,7 +46,10 @@ mod tests { fn timestamp_from() { let mut args = HashMap::new(); args.insert("from".to_string(), "2024-07-31T14:16:41.983Z".to_string()); - assert_eq!(timestamp(args), Ok("2024-07-31T14:16:41.983+00:00".to_string())); + assert_eq!( + timestamp(args), + Ok("2024-07-31T14:16:41.983+00:00".to_string()) + ); } #[test] diff --git a/src-tauri/yaak_models/Cargo.toml b/src-tauri/yaak_models/Cargo.toml new file mode 100644 index 00000000..4ede0ebb --- /dev/null +++ b/src-tauri/yaak_models/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "yaak_models" +version = "0.1.0" +edition = "2021" + +[dependencies] +chrono = { version = "0.4.38", features = ["serde"] } +rusqlite = { version = "0.31.0", features = ["bundled", "chrono"] } +sea-query = { version = "0.31.0", features = ["with-chrono", "attr"] } +sea-query-rusqlite = { version = "0.6.0", features = ["with-chrono"] } +serde = { version = "1.0.204", features = ["derive"] } +serde_json = "1.0.122" +thiserror = "1.0.63" +ts-rs = { version = "9.0.1", features = ["chrono-impl", "serde-json-impl"] } +tauri = { workspace = true } +log = "0.4.22" +rand = "0.8.5" +r2d2 = "0.8.10" +r2d2_sqlite = { version = "0.24.0" } diff --git a/src-tauri/yaak_models/src/lib.rs b/src-tauri/yaak_models/src/lib.rs new file mode 100644 index 00000000..ede1fcb9 --- /dev/null +++ b/src-tauri/yaak_models/src/lib.rs @@ -0,0 +1,57 @@ +use std::env::current_dir; +use std::fs::create_dir_all; +use r2d2; +use r2d2_sqlite; + +use log::info; +use r2d2::Pool; +use r2d2_sqlite::SqliteConnectionManager; +use serde::Deserialize; +use tauri::async_runtime::Mutex; +use tauri::plugin::TauriPlugin; +use tauri::{is_dev, plugin, Manager, Runtime}; + +pub mod models; +pub mod queries; + +pub struct SqliteConnection(Mutex>); + +#[derive(Default, Deserialize)] +pub struct PluginConfig { + // Nothing yet (will be configurable in tauri.conf.json +} + +/// Tauri SQL plugin builder. +#[derive(Default)] +pub struct Builder { + // Nothing Yet +} + +impl Builder { + pub fn new() -> Self { + Self::default() + } + + pub fn build(&self) -> TauriPlugin> { + plugin::Builder::>::new("yaak_models") + .setup(|app, _api| { + let app_path = match is_dev() { + true => current_dir().unwrap(), + false => app.path().app_data_dir().unwrap(), + }; + + create_dir_all(app_path.clone()).expect("Problem creating App directory!"); + + let db_file_path = app_path.join("db.sqlite"); + info!("Opening SQLite DB at {db_file_path:?}"); + + let manager = SqliteConnectionManager::file(db_file_path); + let pool = Pool::new(manager).unwrap(); + + app.manage(SqliteConnection(Mutex::new(pool))); + + Ok(()) + }) + .build() + } +} diff --git a/src-tauri/yaak_models/src/models.rs b/src-tauri/yaak_models/src/models.rs new file mode 100644 index 00000000..52342590 --- /dev/null +++ b/src-tauri/yaak_models/src/models.rs @@ -0,0 +1,796 @@ +use chrono::NaiveDateTime; +use rusqlite::Row; +use sea_query::Iden; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use serde_json::Value; +use ts_rs::TS; + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../src-web/lib/gen/")] +pub struct Settings { + pub id: String, + #[ts(type = "\"settings\"")] + pub model: String, + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, + pub theme: String, + pub appearance: String, + pub theme_dark: String, + pub theme_light: String, + pub update_channel: String, + pub interface_font_size: i32, + pub interface_scale: i32, + pub editor_font_size: i32, + pub editor_soft_wrap: bool, + pub open_workspace_new_window: Option, +} + +#[derive(Iden)] +pub enum SettingsIden { + #[iden = "settings"] + Table, + Id, + Model, + CreatedAt, + UpdatedAt, + Theme, + Appearance, + UpdateChannel, + ThemeDark, + ThemeLight, + InterfaceFontSize, + InterfaceScale, + EditorFontSize, + EditorSoftWrap, + OpenWorkspaceNewWindow, +} + +impl<'s> TryFrom<&Row<'s>> for Settings { + type Error = rusqlite::Error; + + fn try_from(r: &Row<'s>) -> Result { + Ok(Settings { + id: r.get("id")?, + model: r.get("model")?, + created_at: r.get("created_at")?, + updated_at: r.get("updated_at")?, + theme: r.get("theme")?, + appearance: r.get("appearance")?, + theme_dark: r.get("theme_dark")?, + theme_light: r.get("theme_light")?, + update_channel: r.get("update_channel")?, + interface_font_size: r.get("interface_font_size")?, + interface_scale: r.get("interface_scale")?, + editor_font_size: r.get("editor_font_size")?, + editor_soft_wrap: r.get("editor_soft_wrap")?, + open_workspace_new_window: r.get("open_workspace_new_window")?, + }) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct Workspace { + pub id: String, + #[ts(type = "\"workspace\"")] + pub model: String, + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, + pub name: String, + pub description: String, + pub variables: Vec, + + // Settings + #[serde(default = "default_true")] + pub setting_validate_certificates: bool, + #[serde(default = "default_true")] + pub setting_follow_redirects: bool, + pub setting_request_timeout: i32, +} + +#[derive(Iden)] +pub enum WorkspaceIden { + #[iden = "workspaces"] + Table, + Id, + Model, + CreatedAt, + UpdatedAt, + Name, + Description, + Variables, + SettingValidateCertificates, + SettingFollowRedirects, + SettingRequestTimeout, +} + +impl<'s> TryFrom<&Row<'s>> for Workspace { + type Error = rusqlite::Error; + + fn try_from(r: &Row<'s>) -> Result { + let variables: String = r.get("variables")?; + Ok(Workspace { + id: r.get("id")?, + model: r.get("model")?, + created_at: r.get("created_at")?, + updated_at: r.get("updated_at")?, + name: r.get("name")?, + description: r.get("description")?, + variables: serde_json::from_str(variables.as_str()).unwrap_or_default(), + setting_validate_certificates: r.get("setting_validate_certificates")?, + setting_follow_redirects: r.get("setting_follow_redirects")?, + setting_request_timeout: r.get("setting_request_timeout")?, + }) + } +} + +impl Workspace { + pub fn new(name: String) -> Self { + Self { + name, + model: "workspace".to_string(), + setting_validate_certificates: true, + setting_follow_redirects: true, + ..Default::default() + } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, TS)] +#[ts(export, export_to = "../../../src-web/lib/gen/")] +enum CookieDomain { + HostOnly(String), + Suffix(String), + NotPresent, + Empty, +} + +#[derive(Debug, Clone, Serialize, Deserialize, TS)] +#[ts(export, export_to = "../../../src-web/lib/gen/")] +enum CookieExpires { + AtUtc(String), + SessionEnd, +} + +#[derive(Debug, Clone, Serialize, Deserialize, TS)] +#[ts(export, export_to = "../../../src-web/lib/gen/")] +pub struct Cookie { + raw_cookie: String, + domain: CookieDomain, + expires: CookieExpires, + path: (String, bool), +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../src-web/lib/gen/")] +pub struct CookieJar { + pub id: String, + #[ts(type = "\"cookie_jar\"")] + pub model: String, + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, + pub workspace_id: String, + pub name: String, + pub cookies: Vec, +} + +#[derive(Iden)] +pub enum CookieJarIden { + #[iden = "cookie_jars"] + Table, + Id, + Model, + WorkspaceId, + CreatedAt, + UpdatedAt, + Name, + Cookies, +} + +impl<'s> TryFrom<&Row<'s>> for CookieJar { + type Error = rusqlite::Error; + + fn try_from(r: &Row<'s>) -> Result { + let cookies: String = r.get("cookies")?; + Ok(CookieJar { + id: r.get("id")?, + model: r.get("model")?, + workspace_id: r.get("workspace_id")?, + created_at: r.get("created_at")?, + updated_at: r.get("updated_at")?, + name: r.get("name")?, + cookies: serde_json::from_str(cookies.as_str()).unwrap_or_default(), + }) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct Environment { + pub id: String, + pub workspace_id: String, + #[ts(type = "\"environment\"")] + pub model: String, + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, + pub name: String, + pub variables: Vec, +} + +#[derive(Iden)] +pub enum EnvironmentIden { + #[iden = "environments"] + Table, + Id, + Model, + WorkspaceId, + CreatedAt, + UpdatedAt, + Name, + Variables, +} + +impl<'s> TryFrom<&Row<'s>> for Environment { + type Error = rusqlite::Error; + + fn try_from(r: &Row<'s>) -> Result { + let variables: String = r.get("variables")?; + Ok(Environment { + id: r.get("id")?, + model: r.get("model")?, + workspace_id: r.get("workspace_id")?, + created_at: r.get("created_at")?, + updated_at: r.get("updated_at")?, + name: r.get("name")?, + variables: serde_json::from_str(variables.as_str()).unwrap_or_default(), + }) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct EnvironmentVariable { + #[serde(default = "default_true")] + #[ts(optional, as = "Option")] + pub enabled: bool, + pub name: String, + pub value: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct Folder { + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, + pub id: String, + pub workspace_id: String, + pub folder_id: Option, + #[ts(type = "\"folder\"")] + pub model: String, + pub name: String, + pub sort_priority: f32, +} + +#[derive(Iden)] +pub enum FolderIden { + #[iden = "folders"] + Table, + Id, + Model, + WorkspaceId, + FolderId, + CreatedAt, + UpdatedAt, + Name, + SortPriority, +} + +impl<'s> TryFrom<&Row<'s>> for Folder { + type Error = rusqlite::Error; + + fn try_from(r: &Row<'s>) -> Result { + Ok(Folder { + id: r.get("id")?, + model: r.get("model")?, + sort_priority: r.get("sort_priority")?, + workspace_id: r.get("workspace_id")?, + created_at: r.get("created_at")?, + updated_at: r.get("updated_at")?, + folder_id: r.get("folder_id")?, + name: r.get("name")?, + }) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct HttpRequestHeader { + #[serde(default = "default_true")] + #[ts(optional, as = "Option")] + pub enabled: bool, + pub name: String, + pub value: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct HttpUrlParameter { + #[serde(default = "default_true")] + #[ts(optional, as = "Option")] + pub enabled: bool, + pub name: String, + pub value: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct HttpRequest { + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, + pub id: String, + pub workspace_id: String, + pub folder_id: Option, + #[ts(type = "\"http_request\"")] + pub model: String, + pub sort_priority: f32, + pub name: String, + pub url: String, + pub url_parameters: Vec, + #[serde(default = "default_http_request_method")] + pub method: String, + #[ts(type = "Record")] + pub body: HashMap, + pub body_type: Option, + #[ts(type = "Record")] + pub authentication: HashMap, + pub authentication_type: Option, + pub headers: Vec, +} + +#[derive(Iden)] +pub enum HttpRequestIden { + #[iden = "http_requests"] + Table, + Id, + Model, + WorkspaceId, + FolderId, + CreatedAt, + UpdatedAt, + Name, + SortPriority, + Url, + UrlParameters, + Method, + Body, + BodyType, + Authentication, + AuthenticationType, + Headers, +} + +impl<'s> TryFrom<&Row<'s>> for HttpRequest { + type Error = rusqlite::Error; + + fn try_from(r: &Row<'s>) -> Result { + let url_parameters: String = r.get("url_parameters")?; + let body: String = r.get("body")?; + let authentication: String = r.get("authentication")?; + let headers: String = r.get("headers")?; + Ok(HttpRequest { + id: r.get("id")?, + model: r.get("model")?, + sort_priority: r.get("sort_priority")?, + workspace_id: r.get("workspace_id")?, + created_at: r.get("created_at")?, + updated_at: r.get("updated_at")?, + url: r.get("url")?, + url_parameters: serde_json::from_str(url_parameters.as_str()).unwrap_or_default(), + method: r.get("method")?, + body: serde_json::from_str(body.as_str()).unwrap_or_default(), + body_type: r.get("body_type")?, + authentication: serde_json::from_str(authentication.as_str()).unwrap_or_default(), + authentication_type: r.get("authentication_type")?, + headers: serde_json::from_str(headers.as_str()).unwrap_or_default(), + folder_id: r.get("folder_id")?, + name: r.get("name")?, + }) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct HttpResponseHeader { + pub name: String, + pub value: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct HttpResponse { + pub id: String, + #[ts(type = "\"http_response\"")] + pub model: String, + pub workspace_id: String, + pub request_id: String, + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, + pub error: Option, + pub url: String, + pub content_length: Option, + pub version: Option, + pub elapsed: i32, + pub elapsed_headers: i32, + pub remote_addr: Option, + pub status: i32, + pub status_reason: Option, + pub body_path: Option, + pub headers: Vec, +} + +#[derive(Iden)] +pub enum HttpResponseIden { + #[iden = "http_responses"] + Table, + Id, + Model, + WorkspaceId, + RequestId, + CreatedAt, + UpdatedAt, + Error, + Url, + ContentLength, + Version, + Elapsed, + ElapsedHeaders, + RemoteAddr, + Status, + StatusReason, + BodyPath, + Headers, +} + +impl<'s> TryFrom<&Row<'s>> for HttpResponse { + type Error = rusqlite::Error; + + fn try_from(r: &Row<'s>) -> Result { + let headers: String = r.get("headers")?; + Ok(HttpResponse { + id: r.get("id")?, + model: r.get("model")?, + workspace_id: r.get("workspace_id")?, + request_id: r.get("request_id")?, + created_at: r.get("created_at")?, + updated_at: r.get("updated_at")?, + error: r.get("error")?, + url: r.get("url")?, + content_length: r.get("content_length")?, + version: r.get("version")?, + elapsed: r.get("elapsed")?, + elapsed_headers: r.get("elapsed_headers")?, + remote_addr: r.get("remote_addr")?, + status: r.get("status")?, + status_reason: r.get("status_reason")?, + body_path: r.get("body_path")?, + headers: serde_json::from_str(headers.as_str()).unwrap_or_default(), + }) + } +} + +impl HttpResponse { + pub fn new() -> Self { + Self { + model: "http_response".to_string(), + ..Default::default() + } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct GrpcMetadataEntry { + #[serde(default = "default_true")] + #[ts(optional, as = "Option")] + pub enabled: bool, + pub name: String, + pub value: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct GrpcRequest { + pub id: String, + #[ts(type = "\"grpc_request\"")] + pub model: String, + pub workspace_id: String, + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, + pub folder_id: Option, + pub name: String, + pub sort_priority: f32, + pub url: String, + pub service: Option, + pub method: Option, + pub message: String, + pub authentication_type: Option, + #[ts(type = "Record")] + pub authentication: HashMap, + pub metadata: Vec, +} + +#[derive(Iden)] +pub enum GrpcRequestIden { + #[iden = "grpc_requests"] + Table, + Id, + Model, + WorkspaceId, + CreatedAt, + UpdatedAt, + FolderId, + Name, + SortPriority, + Url, + Service, + Method, + Message, + AuthenticationType, + Authentication, + Metadata, +} + +impl<'s> TryFrom<&Row<'s>> for GrpcRequest { + type Error = rusqlite::Error; + + fn try_from(r: &Row<'s>) -> Result { + let authentication: String = r.get("authentication")?; + let metadata: String = r.get("metadata")?; + Ok(GrpcRequest { + id: r.get("id")?, + model: r.get("model")?, + workspace_id: r.get("workspace_id")?, + created_at: r.get("created_at")?, + updated_at: r.get("updated_at")?, + folder_id: r.get("folder_id")?, + name: r.get("name")?, + service: r.get("service")?, + method: r.get("method")?, + message: r.get("message")?, + authentication_type: r.get("authentication_type")?, + authentication: serde_json::from_str(authentication.as_str()).unwrap_or_default(), + url: r.get("url")?, + sort_priority: r.get("sort_priority")?, + metadata: serde_json::from_str(metadata.as_str()).unwrap_or_default(), + }) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct GrpcConnection { + pub id: String, + #[ts(type = "\"grpc_connection\"")] + pub model: String, + pub workspace_id: String, + pub request_id: String, + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, + pub service: String, + pub method: String, + pub elapsed: i32, + pub status: i32, + pub url: String, + pub error: Option, + pub trailers: HashMap, +} + +#[derive(Iden)] +pub enum GrpcConnectionIden { + #[iden = "grpc_connections"] + Table, + Id, + Model, + WorkspaceId, + CreatedAt, + UpdatedAt, + RequestId, + Service, + Method, + Elapsed, + Status, + Url, + Error, + Trailers, +} + +impl<'s> TryFrom<&Row<'s>> for GrpcConnection { + type Error = rusqlite::Error; + + fn try_from(r: &Row<'s>) -> Result { + let trailers: String = r.get("trailers")?; + Ok(GrpcConnection { + id: r.get("id")?, + model: r.get("model")?, + workspace_id: r.get("workspace_id")?, + request_id: r.get("request_id")?, + created_at: r.get("created_at")?, + updated_at: r.get("updated_at")?, + service: r.get("service")?, + method: r.get("method")?, + elapsed: r.get("elapsed")?, + status: r.get("status")?, + url: r.get("url")?, + error: r.get("error")?, + trailers: serde_json::from_str(trailers.as_str()).unwrap_or_default(), + }) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, TS)] +#[serde(rename_all = "snake_case")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub enum GrpcEventType { + Info, + Error, + ClientMessage, + ServerMessage, + ConnectionStart, + ConnectionEnd, +} + +impl Default for GrpcEventType { + fn default() -> Self { + GrpcEventType::Info + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct GrpcEvent { + pub id: String, + #[ts(type = "\"grpc_event\"")] + pub model: String, + pub workspace_id: String, + pub request_id: String, + pub connection_id: String, + pub created_at: NaiveDateTime, + pub content: String, + pub event_type: GrpcEventType, + pub metadata: HashMap, + pub status: Option, + pub error: Option, +} + +#[derive(Iden)] +pub enum GrpcEventIden { + #[iden = "grpc_events"] + Table, + Id, + Model, + WorkspaceId, + RequestId, + ConnectionId, + CreatedAt, + UpdatedAt, + Content, + EventType, + Metadata, + Status, + Error, +} + +impl<'s> TryFrom<&Row<'s>> for GrpcEvent { + type Error = rusqlite::Error; + + fn try_from(r: &Row<'s>) -> Result { + let event_type: String = r.get("event_type")?; + let metadata: String = r.get("metadata")?; + Ok(GrpcEvent { + id: r.get("id")?, + model: r.get("model")?, + workspace_id: r.get("workspace_id")?, + request_id: r.get("request_id")?, + connection_id: r.get("connection_id")?, + created_at: r.get("created_at")?, + content: r.get("content")?, + event_type: serde_json::from_str(event_type.as_str()).unwrap_or_default(), + metadata: serde_json::from_str(metadata.as_str()).unwrap_or_default(), + status: r.get("status")?, + error: r.get("error")?, + }) + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, Default, TS)] +#[serde(default, rename_all = "camelCase")] +#[ts(export, export_to = "../../../plugin-runtime-types/src/gen/")] +pub struct KeyValue { + #[ts(type = "\"key_value\"")] + pub model: String, + pub created_at: NaiveDateTime, + pub updated_at: NaiveDateTime, + pub namespace: String, + pub key: String, + pub value: String, +} + +#[derive(Iden)] +pub enum KeyValueIden { + #[iden = "key_values"] + Table, + Model, + CreatedAt, + UpdatedAt, + Namespace, + Key, + Value, +} + +impl<'s> TryFrom<&Row<'s>> for KeyValue { + type Error = rusqlite::Error; + + fn try_from(r: &Row<'s>) -> Result { + Ok(KeyValue { + model: r.get("model")?, + created_at: r.get("created_at")?, + updated_at: r.get("updated_at")?, + namespace: r.get("namespace")?, + key: r.get("key")?, + value: r.get("value")?, + }) + } +} + +fn default_true() -> bool { + true +} + +fn default_http_request_method() -> String { + "GET".to_string() +} + +pub enum ModelType { + TypeCookieJar, + TypeEnvironment, + TypeFolder, + TypeGrpcConnection, + TypeGrpcEvent, + TypeGrpcRequest, + TypeHttpRequest, + TypeHttpResponse, + TypeWorkspace, +} + +impl ModelType { + pub fn id_prefix(&self) -> String { + match self { + ModelType::TypeCookieJar => "cj", + ModelType::TypeEnvironment => "ev", + ModelType::TypeFolder => "fl", + ModelType::TypeGrpcConnection => "gc", + ModelType::TypeGrpcEvent => "ge", + ModelType::TypeGrpcRequest => "gr", + ModelType::TypeHttpRequest => "rq", + ModelType::TypeHttpResponse => "rs", + ModelType::TypeWorkspace => "wk", + } + .to_string() + } +} diff --git a/src-tauri/yaak_models/src/queries.rs b/src-tauri/yaak_models/src/queries.rs new file mode 100644 index 00000000..66d0833a --- /dev/null +++ b/src-tauri/yaak_models/src/queries.rs @@ -0,0 +1,1373 @@ +use std::fs; + +use log::error; +use rand::distributions::{Alphanumeric, DistString}; +use sea_query::ColumnRef::Asterisk; +use sea_query::Keyword::CurrentTimestamp; +use sea_query::{Cond, Expr, OnConflict, Order, Query, SqliteQueryBuilder}; +use sea_query_rusqlite::RusqliteBinder; +use serde::Serialize; +use tauri::{AppHandle, Emitter, Manager, WebviewWindow, Wry}; +use thiserror::Error; + +use crate::models::{ + CookieJar, CookieJarIden, Environment, EnvironmentIden, Folder, FolderIden, GrpcConnection, + GrpcConnectionIden, GrpcEvent, GrpcEventIden, GrpcRequest, GrpcRequestIden, HttpRequest, + HttpRequestIden, HttpResponse, HttpResponseHeader, HttpResponseIden, KeyValue, KeyValueIden, + ModelType, Settings, SettingsIden, Workspace, WorkspaceIden, +}; +use crate::SqliteConnection; + +#[derive(Error, Debug)] +pub enum DBError { + #[error("SQL error")] + SqlError(#[from] rusqlite::Error), + #[error("JSON error")] + JsonError(#[from] serde_json::Error), + #[error("unknown error")] + Unknown, +} + +pub async fn set_key_value_string( + mgr: &impl Manager, + namespace: &str, + key: &str, + value: &str, +) -> (KeyValue, bool) { + let encoded = serde_json::to_string(value); + set_key_value_raw(mgr, namespace, key, &encoded.unwrap()).await +} + +pub async fn set_key_value_int( + mgr: &impl Manager, + namespace: &str, + key: &str, + value: i32, +) -> (KeyValue, bool) { + let encoded = serde_json::to_string(&value); + set_key_value_raw(mgr, namespace, key, &encoded.unwrap()).await +} + +pub async fn get_key_value_string( + mgr: &impl Manager, + namespace: &str, + key: &str, + default: &str, +) -> String { + match get_key_value_raw(mgr, namespace, key).await { + None => default.to_string(), + Some(v) => { + let result = serde_json::from_str(&v.value); + match result { + Ok(v) => v, + Err(e) => { + error!("Failed to parse string key value: {}", e); + default.to_string() + } + } + } + } +} + +pub async fn get_key_value_int( + mgr: &impl Manager, + namespace: &str, + key: &str, + default: i32, +) -> i32 { + match get_key_value_raw(mgr, namespace, key).await { + None => default.clone(), + Some(v) => { + let result = serde_json::from_str(&v.value); + match result { + Ok(v) => v, + Err(e) => { + error!("Failed to parse int key value: {}", e); + default.clone() + } + } + } + } +} + +pub async fn set_key_value_raw( + mgr: &impl Manager, + namespace: &str, + key: &str, + value: &str, +) -> (KeyValue, bool) { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + let existing = get_key_value_raw(mgr, namespace, key).await; + let (sql, params) = Query::insert() + .into_table(KeyValueIden::Table) + .columns([ + KeyValueIden::CreatedAt, + KeyValueIden::UpdatedAt, + KeyValueIden::Namespace, + KeyValueIden::Key, + KeyValueIden::Value, + ]) + .values_panic([ + CurrentTimestamp.into(), + CurrentTimestamp.into(), + namespace.into(), + key.into(), + value.into(), + ]) + .on_conflict( + OnConflict::new() + .update_columns([KeyValueIden::UpdatedAt, KeyValueIden::Value]) + .to_owned(), + ) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db + .prepare(sql.as_str()) + .expect("Failed to prepare KeyValue upsert"); + let kv = stmt + .query_row(&*params.as_params(), |row| row.try_into()) + .expect("Failed to upsert KeyValue"); + (kv, existing.is_none()) +} + +pub async fn get_key_value_raw( + mgr: &impl Manager, + namespace: &str, + key: &str, +) -> Option { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::select() + .from(KeyValueIden::Table) + .column(Asterisk) + .cond_where( + Cond::all() + .add(Expr::col(KeyValueIden::Namespace).eq(namespace)) + .add(Expr::col(KeyValueIden::Key).eq(key)), + ) + .build_rusqlite(SqliteQueryBuilder); + + db.query_row(sql.as_str(), &*params.as_params(), |row| row.try_into()) + .ok() +} + +pub async fn list_workspaces(mgr: &impl Manager) -> Result, DBError> { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::select() + .from(WorkspaceIden::Table) + .column(Asterisk) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + let items = stmt.query_map(&*params.as_params(), |row| row.try_into())?; + Ok(items.map(|v| v.unwrap()).collect()) +} + +pub async fn get_workspace(mgr: &impl Manager, id: &str) -> Result { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::select() + .from(WorkspaceIden::Table) + .column(Asterisk) + .cond_where(Expr::col(WorkspaceIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + Ok(stmt.query_row(&*params.as_params(), |row| row.try_into())?) +} + +pub async fn upsert_workspace( + window: &WebviewWindow, + workspace: Workspace, +) -> Result { + let id = match workspace.id.as_str() { + "" => generate_model_id(ModelType::TypeWorkspace), + _ => workspace.id.to_string(), + }; + let trimmed_name = workspace.name.trim(); + + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::insert() + .into_table(WorkspaceIden::Table) + .columns([ + WorkspaceIden::Id, + WorkspaceIden::CreatedAt, + WorkspaceIden::UpdatedAt, + WorkspaceIden::Name, + WorkspaceIden::Description, + WorkspaceIden::Variables, + WorkspaceIden::SettingRequestTimeout, + WorkspaceIden::SettingFollowRedirects, + WorkspaceIden::SettingValidateCertificates, + ]) + .values_panic([ + id.as_str().into(), + CurrentTimestamp.into(), + CurrentTimestamp.into(), + trimmed_name.into(), + workspace.description.into(), + serde_json::to_string(&workspace.variables).unwrap().into(), + workspace.setting_request_timeout.into(), + workspace.setting_follow_redirects.into(), + workspace.setting_validate_certificates.into(), + ]) + .on_conflict( + OnConflict::column(GrpcRequestIden::Id) + .update_columns([ + WorkspaceIden::UpdatedAt, + WorkspaceIden::Name, + WorkspaceIden::Description, + WorkspaceIden::Variables, + WorkspaceIden::SettingRequestTimeout, + WorkspaceIden::SettingFollowRedirects, + WorkspaceIden::SettingValidateCertificates, + ]) + .to_owned(), + ) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db.prepare(sql.as_str())?; + let m = stmt.query_row(&*params.as_params(), |row| row.try_into())?; + Ok(emit_upserted_model(window, m)) +} + +pub async fn delete_workspace(window: &WebviewWindow, id: &str) -> Result { + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + let workspace = get_workspace(window, id).await?; + + let (sql, params) = Query::delete() + .from_table(WorkspaceIden::Table) + .cond_where(Expr::col(WorkspaceIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + db.execute(sql.as_str(), &*params.as_params())?; + + for r in list_responses_by_workspace_id(window, id).await? { + delete_http_response(window, &r.id).await?; + } + + emit_deleted_model(window, workspace) +} + +pub async fn get_cookie_jar(mgr: &impl Manager, id: &str) -> Result { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::select() + .from(CookieJarIden::Table) + .column(Asterisk) + .cond_where(Expr::col(CookieJarIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + Ok(stmt.query_row(&*params.as_params(), |row| row.try_into())?) +} + +pub async fn list_cookie_jars( + mgr: &impl Manager, + workspace_id: &str, +) -> Result, DBError> { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::select() + .from(CookieJarIden::Table) + .column(Asterisk) + .cond_where(Expr::col(CookieJarIden::WorkspaceId).eq(workspace_id)) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + let items = stmt.query_map(&*params.as_params(), |row| row.try_into())?; + Ok(items.map(|v| v.unwrap()).collect()) +} + +pub async fn delete_cookie_jar(window: &WebviewWindow, id: &str) -> Result { + let cookie_jar = get_cookie_jar(window, id).await?; + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::delete() + .from_table(CookieJarIden::Table) + .cond_where(Expr::col(WorkspaceIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + db.execute(sql.as_str(), &*params.as_params())?; + + emit_deleted_model(window, cookie_jar) +} + +pub async fn duplicate_grpc_request( + window: &WebviewWindow, + id: &str, +) -> Result { + let mut request = get_grpc_request(window, id).await?.clone(); + request.id = "".to_string(); + upsert_grpc_request(window, &request).await +} + +pub async fn delete_grpc_request(window: &WebviewWindow, id: &str) -> Result { + let req = get_grpc_request(window, id).await?; + + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::delete() + .from_table(GrpcRequestIden::Table) + .cond_where(Expr::col(GrpcRequestIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + db.execute(sql.as_str(), &*params.as_params())?; + + emit_deleted_model(window, req) +} + +pub async fn upsert_grpc_request( + window: &WebviewWindow, + request: &GrpcRequest, +) -> Result { + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + let id = match request.id.as_str() { + "" => generate_model_id(ModelType::TypeGrpcRequest), + _ => request.id.to_string(), + }; + let trimmed_name = request.name.trim(); + + let (sql, params) = Query::insert() + .into_table(GrpcRequestIden::Table) + .columns([ + GrpcRequestIden::Id, + GrpcRequestIden::CreatedAt, + GrpcRequestIden::UpdatedAt, + GrpcRequestIden::Name, + GrpcRequestIden::WorkspaceId, + GrpcRequestIden::FolderId, + GrpcRequestIden::SortPriority, + GrpcRequestIden::Url, + GrpcRequestIden::Service, + GrpcRequestIden::Message, + GrpcRequestIden::AuthenticationType, + GrpcRequestIden::Authentication, + GrpcRequestIden::Metadata, + ]) + .values_panic([ + id.as_str().into(), + CurrentTimestamp.into(), + CurrentTimestamp.into(), + trimmed_name.into(), + request.workspace_id.as_str().into(), + request.folder_id.as_ref().map(|s| s.as_str()).into(), + request.sort_priority.into(), + request.url.as_str().into(), + request.service.as_ref().map(|s| s.as_str()).into(), + request.method.as_ref().map(|s| s.as_str()).into(), + request.message.as_str().into(), + request + .authentication_type + .as_ref() + .map(|s| s.as_str()) + .into(), + serde_json::to_string(&request.authentication) + .unwrap() + .into(), + serde_json::to_string(&request.metadata).unwrap().into(), + ]) + .on_conflict( + OnConflict::column(GrpcRequestIden::Id) + .update_columns([ + GrpcRequestIden::UpdatedAt, + GrpcRequestIden::WorkspaceId, + GrpcRequestIden::Name, + GrpcRequestIden::FolderId, + GrpcRequestIden::SortPriority, + GrpcRequestIden::Url, + GrpcRequestIden::Service, + GrpcRequestIden::Method, + GrpcRequestIden::Message, + GrpcRequestIden::AuthenticationType, + GrpcRequestIden::Authentication, + GrpcRequestIden::Metadata, + ]) + .to_owned(), + ) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db.prepare(sql.as_str())?; + let m = stmt.query_row(&*params.as_params(), |row| row.try_into())?; + Ok(emit_upserted_model(window, m)) +} + +pub async fn get_grpc_request(mgr: &impl Manager, id: &str) -> Result { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::select() + .from(GrpcRequestIden::Table) + .column(Asterisk) + .cond_where(Expr::col(GrpcRequestIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + Ok(stmt.query_row(&*params.as_params(), |row| row.try_into())?) +} + +pub async fn list_grpc_requests( + mgr: &impl Manager, + workspace_id: &str, +) -> Result, DBError> { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::select() + .from(GrpcRequestIden::Table) + .cond_where(Expr::col(GrpcRequestIden::WorkspaceId).eq(workspace_id)) + .column(Asterisk) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + let items = stmt.query_map(&*params.as_params(), |row| row.try_into())?; + Ok(items.map(|v| v.unwrap()).collect()) +} + +pub async fn upsert_grpc_connection( + window: &WebviewWindow, + connection: &GrpcConnection, +) -> Result { + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + let id = match connection.id.as_str() { + "" => generate_model_id(ModelType::TypeGrpcConnection), + _ => connection.id.to_string(), + }; + let (sql, params) = Query::insert() + .into_table(GrpcConnectionIden::Table) + .columns([ + GrpcConnectionIden::Id, + GrpcConnectionIden::CreatedAt, + GrpcConnectionIden::UpdatedAt, + GrpcConnectionIden::WorkspaceId, + GrpcConnectionIden::RequestId, + GrpcConnectionIden::Service, + GrpcConnectionIden::Method, + GrpcConnectionIden::Elapsed, + GrpcConnectionIden::Status, + GrpcConnectionIden::Error, + GrpcConnectionIden::Trailers, + GrpcConnectionIden::Url, + ]) + .values_panic([ + id.as_str().into(), + CurrentTimestamp.into(), + CurrentTimestamp.into(), + connection.workspace_id.as_str().into(), + connection.request_id.as_str().into(), + connection.service.as_str().into(), + connection.method.as_str().into(), + connection.elapsed.into(), + connection.status.into(), + connection.error.as_ref().map(|s| s.as_str()).into(), + serde_json::to_string(&connection.trailers).unwrap().into(), + connection.url.as_str().into(), + ]) + .on_conflict( + OnConflict::column(GrpcConnectionIden::Id) + .update_columns([ + GrpcConnectionIden::UpdatedAt, + GrpcConnectionIden::Service, + GrpcConnectionIden::Method, + GrpcConnectionIden::Elapsed, + GrpcConnectionIden::Status, + GrpcConnectionIden::Error, + GrpcConnectionIden::Trailers, + GrpcConnectionIden::Url, + ]) + .to_owned(), + ) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db.prepare(sql.as_str())?; + let m = stmt.query_row(&*params.as_params(), |row| row.try_into())?; + Ok(emit_upserted_model(window, m)) +} + +pub async fn get_grpc_connection( + mgr: &impl Manager, + id: &str, +) -> Result { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::select() + .from(GrpcConnectionIden::Table) + .column(Asterisk) + .cond_where(Expr::col(GrpcConnectionIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + Ok(stmt.query_row(&*params.as_params(), |row| row.try_into())?) +} + +pub async fn list_grpc_connections( + mgr: &impl Manager, + request_id: &str, +) -> Result, DBError> { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::select() + .from(GrpcConnectionIden::Table) + .cond_where(Expr::col(GrpcConnectionIden::RequestId).eq(request_id)) + .column(Asterisk) + .order_by(GrpcConnectionIden::CreatedAt, Order::Desc) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + let items = stmt.query_map(&*params.as_params(), |row| row.try_into())?; + Ok(items.map(|v| v.unwrap()).collect()) +} + +pub async fn delete_grpc_connection( + window: &WebviewWindow, + id: &str, +) -> Result { + let resp = get_grpc_connection(window, id).await?; + + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::delete() + .from_table(GrpcConnectionIden::Table) + .cond_where(Expr::col(GrpcConnectionIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + + db.execute(sql.as_str(), &*params.as_params())?; + emit_deleted_model(window, resp) +} + +pub async fn delete_all_grpc_connections( + window: &WebviewWindow, + request_id: &str, +) -> Result<(), DBError> { + for r in list_grpc_connections(window, request_id).await? { + delete_grpc_connection(window, &r.id).await?; + } + Ok(()) +} + +pub async fn upsert_grpc_event( + window: &WebviewWindow, + event: &GrpcEvent, +) -> Result { + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + let id = match event.id.as_str() { + "" => generate_model_id(ModelType::TypeGrpcEvent), + _ => event.id.to_string(), + }; + + let (sql, params) = Query::insert() + .into_table(GrpcEventIden::Table) + .columns([ + GrpcEventIden::Id, + GrpcEventIden::CreatedAt, + GrpcEventIden::UpdatedAt, + GrpcEventIden::WorkspaceId, + GrpcEventIden::RequestId, + GrpcEventIden::ConnectionId, + GrpcEventIden::Content, + GrpcEventIden::EventType, + GrpcEventIden::Metadata, + GrpcEventIden::Status, + GrpcEventIden::Error, + ]) + .values_panic([ + id.as_str().into(), + CurrentTimestamp.into(), + CurrentTimestamp.into(), + event.workspace_id.as_str().into(), + event.request_id.as_str().into(), + event.connection_id.as_str().into(), + event.content.as_str().into(), + serde_json::to_string(&event.event_type).unwrap().into(), + serde_json::to_string(&event.metadata).unwrap().into(), + event.status.into(), + event.error.as_ref().map(|s| s.as_str()).into(), + ]) + .on_conflict( + OnConflict::column(GrpcEventIden::Id) + .update_columns([ + GrpcEventIden::UpdatedAt, + GrpcEventIden::Content, + GrpcEventIden::EventType, + GrpcEventIden::Metadata, + GrpcEventIden::Status, + GrpcEventIden::Error, + ]) + .to_owned(), + ) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db.prepare(sql.as_str())?; + let m = stmt.query_row(&*params.as_params(), |row| row.try_into())?; + Ok(emit_upserted_model(window, m)) +} + +pub async fn get_grpc_event(mgr: &impl Manager, id: &str) -> Result { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::select() + .from(GrpcEventIden::Table) + .column(Asterisk) + .cond_where(Expr::col(GrpcEventIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + Ok(stmt.query_row(&*params.as_params(), |row| row.try_into())?) +} + +pub async fn list_grpc_events( + mgr: &impl Manager, + connection_id: &str, +) -> Result, DBError> { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::select() + .from(GrpcEventIden::Table) + .cond_where(Expr::col(GrpcEventIden::ConnectionId).eq(connection_id)) + .column(Asterisk) + .order_by(GrpcEventIden::CreatedAt, Order::Desc) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + let items = stmt.query_map(&*params.as_params(), |row| row.try_into())?; + Ok(items.map(|v| v.unwrap()).collect()) +} + +pub async fn upsert_cookie_jar( + window: &WebviewWindow, + cookie_jar: &CookieJar, +) -> Result { + let id = match cookie_jar.id.as_str() { + "" => generate_model_id(ModelType::TypeCookieJar), + _ => cookie_jar.id.to_string(), + }; + let trimmed_name = cookie_jar.name.trim(); + + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::insert() + .into_table(CookieJarIden::Table) + .columns([ + CookieJarIden::Id, + CookieJarIden::CreatedAt, + CookieJarIden::UpdatedAt, + CookieJarIden::WorkspaceId, + CookieJarIden::Name, + CookieJarIden::Cookies, + ]) + .values_panic([ + id.as_str().into(), + CurrentTimestamp.into(), + CurrentTimestamp.into(), + cookie_jar.workspace_id.as_str().into(), + trimmed_name.into(), + serde_json::to_string(&cookie_jar.cookies).unwrap().into(), + ]) + .on_conflict( + OnConflict::column(GrpcEventIden::Id) + .update_columns([ + CookieJarIden::UpdatedAt, + CookieJarIden::Name, + CookieJarIden::Cookies, + ]) + .to_owned(), + ) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db.prepare(sql.as_str())?; + let m = stmt.query_row(&*params.as_params(), |row| row.try_into())?; + Ok(emit_upserted_model(window, m)) +} + +pub async fn list_environments( + mgr: &impl Manager, + workspace_id: &str, +) -> Result, DBError> { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::select() + .from(EnvironmentIden::Table) + .cond_where(Expr::col(EnvironmentIden::WorkspaceId).eq(workspace_id)) + .column(Asterisk) + .order_by(EnvironmentIden::CreatedAt, Order::Desc) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + let items = stmt.query_map(&*params.as_params(), |row| row.try_into())?; + Ok(items.map(|v| v.unwrap()).collect()) +} + +pub async fn delete_environment(window: &WebviewWindow, id: &str) -> Result { + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + let env = get_environment(window, id).await?; + + let (sql, params) = Query::delete() + .from_table(EnvironmentIden::Table) + .cond_where(Expr::col(EnvironmentIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + + db.execute(sql.as_str(), &*params.as_params())?; + emit_deleted_model(window, env) +} + +async fn get_settings(mgr: &impl Manager) -> Result { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::select() + .from(SettingsIden::Table) + .column(Asterisk) + .cond_where(Expr::col(SettingsIden::Id).eq("default")) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + Ok(stmt.query_row(&*params.as_params(), |row| row.try_into())?) +} + +pub async fn get_or_create_settings(mgr: &impl Manager) -> Settings { + if let Ok(settings) = get_settings(mgr).await { + return settings; + } + + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::insert() + .into_table(SettingsIden::Table) + .columns([SettingsIden::Id]) + .values_panic(["default".into()]) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db + .prepare(sql.as_str()) + .expect("Failed to prepare Settings insert"); + stmt.query_row(&*params.as_params(), |row| row.try_into()) + .expect("Failed to insert Settings") +} + +pub async fn update_settings( + window: &WebviewWindow, + settings: Settings, +) -> Result { + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::update() + .table(SettingsIden::Table) + .cond_where(Expr::col(SettingsIden::Id).eq("default")) + .values([ + (SettingsIden::Id, "default".into()), + (SettingsIden::CreatedAt, CurrentTimestamp.into()), + ( + SettingsIden::Appearance, + settings.appearance.as_str().into(), + ), + (SettingsIden::ThemeDark, settings.theme_dark.as_str().into()), + ( + SettingsIden::ThemeLight, + settings.theme_light.as_str().into(), + ), + ( + SettingsIden::UpdateChannel, + settings.update_channel.as_str().into(), + ), + ( + SettingsIden::InterfaceFontSize, + settings.interface_font_size.into(), + ), + ( + SettingsIden::InterfaceScale, + settings.interface_scale.into(), + ), + ( + SettingsIden::EditorFontSize, + settings.editor_font_size.into(), + ), + ( + SettingsIden::EditorSoftWrap, + settings.editor_soft_wrap.into(), + ), + ( + SettingsIden::OpenWorkspaceNewWindow, + settings.open_workspace_new_window.into(), + ), + ]) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db.prepare(sql.as_str())?; + let m = stmt.query_row(&*params.as_params(), |row| row.try_into())?; + Ok(emit_upserted_model(window, m)) +} + +pub async fn upsert_environment( + window: &WebviewWindow, + environment: Environment, +) -> Result { + let id = match environment.id.as_str() { + "" => generate_model_id(ModelType::TypeEnvironment), + _ => environment.id.to_string(), + }; + let trimmed_name = environment.name.trim(); + + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::insert() + .into_table(EnvironmentIden::Table) + .columns([ + EnvironmentIden::Id, + EnvironmentIden::CreatedAt, + EnvironmentIden::UpdatedAt, + EnvironmentIden::WorkspaceId, + EnvironmentIden::Name, + EnvironmentIden::Variables, + ]) + .values_panic([ + id.as_str().into(), + CurrentTimestamp.into(), + CurrentTimestamp.into(), + environment.workspace_id.as_str().into(), + trimmed_name.into(), + serde_json::to_string(&environment.variables) + .unwrap() + .into(), + ]) + .on_conflict( + OnConflict::column(GrpcEventIden::Id) + .update_columns([ + EnvironmentIden::UpdatedAt, + EnvironmentIden::Name, + EnvironmentIden::Variables, + ]) + .to_owned(), + ) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db.prepare(sql.as_str())?; + let m = stmt.query_row(&*params.as_params(), |row| row.try_into())?; + Ok(emit_upserted_model(window, m)) +} + +pub async fn get_environment(mgr: &impl Manager, id: &str) -> Result { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::select() + .from(EnvironmentIden::Table) + .column(Asterisk) + .cond_where(Expr::col(EnvironmentIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + Ok(stmt.query_row(&*params.as_params(), |row| row.try_into())?) +} + +pub async fn get_folder(mgr: &impl Manager, id: &str) -> Result { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::select() + .from(FolderIden::Table) + .column(Asterisk) + .cond_where(Expr::col(FolderIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + Ok(stmt.query_row(&*params.as_params(), |row| row.try_into())?) +} + +pub async fn list_folders( + mgr: &impl Manager, + workspace_id: &str, +) -> Result, DBError> { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::select() + .from(FolderIden::Table) + .cond_where(Expr::col(FolderIden::WorkspaceId).eq(workspace_id)) + .column(Asterisk) + .order_by(FolderIden::CreatedAt, Order::Desc) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + let items = stmt.query_map(&*params.as_params(), |row| row.try_into())?; + Ok(items.map(|v| v.unwrap()).collect()) +} + +pub async fn delete_folder(window: &WebviewWindow, id: &str) -> Result { + let folder = get_folder(window, id).await?; + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::delete() + .from_table(FolderIden::Table) + .cond_where(Expr::col(FolderIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + db.execute(sql.as_str(), &*params.as_params())?; + + emit_deleted_model(window, folder) +} + +pub async fn upsert_folder(window: &WebviewWindow, r: Folder) -> Result { + let id = match r.id.as_str() { + "" => generate_model_id(ModelType::TypeFolder), + _ => r.id.to_string(), + }; + let trimmed_name = r.name.trim(); + + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::insert() + .into_table(FolderIden::Table) + .columns([ + FolderIden::Id, + FolderIden::CreatedAt, + FolderIden::UpdatedAt, + FolderIden::WorkspaceId, + FolderIden::FolderId, + FolderIden::Name, + FolderIden::SortPriority, + ]) + .values_panic([ + id.as_str().into(), + CurrentTimestamp.into(), + CurrentTimestamp.into(), + r.workspace_id.as_str().into(), + trimmed_name.into(), + r.sort_priority.into(), + ]) + .on_conflict( + OnConflict::column(GrpcEventIden::Id) + .update_columns([ + FolderIden::UpdatedAt, + FolderIden::Name, + FolderIden::FolderId, + FolderIden::SortPriority, + ]) + .to_owned(), + ) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db.prepare(sql.as_str())?; + let m = stmt.query_row(&*params.as_params(), |row| row.try_into())?; + Ok(emit_upserted_model(window, m)) +} + +pub async fn duplicate_http_request( + window: &WebviewWindow, + id: &str, +) -> Result { + let mut request = get_http_request(window, id).await?.clone(); + request.id = "".to_string(); + upsert_http_request(window, request).await +} + +pub async fn upsert_http_request( + window: &WebviewWindow, + r: HttpRequest, +) -> Result { + let id = match r.id.as_str() { + "" => generate_model_id(ModelType::TypeHttpRequest), + _ => r.id.to_string(), + }; + let trimmed_name = r.name.trim(); + + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::insert() + .into_table(HttpRequestIden::Table) + .columns([ + HttpRequestIden::Id, + HttpRequestIden::CreatedAt, + HttpRequestIden::UpdatedAt, + HttpRequestIden::WorkspaceId, + HttpRequestIden::FolderId, + HttpRequestIden::Name, + HttpRequestIden::Url, + HttpRequestIden::UrlParameters, + HttpRequestIden::Method, + HttpRequestIden::Body, + HttpRequestIden::BodyType, + HttpRequestIden::Authentication, + HttpRequestIden::AuthenticationType, + HttpRequestIden::Headers, + HttpRequestIden::SortPriority, + ]) + .values_panic([ + id.as_str().into(), + CurrentTimestamp.into(), + CurrentTimestamp.into(), + r.workspace_id.as_str().into(), + r.folder_id.as_ref().map(|s| s.as_str()).into(), + trimmed_name.into(), + r.url.as_str().into(), + serde_json::to_string(&r.url_parameters).unwrap().into(), + r.method.as_str().into(), + serde_json::to_string(&r.body).unwrap().into(), + r.body_type.as_ref().map(|s| s.as_str()).into(), + serde_json::to_string(&r.authentication).unwrap().into(), + r.authentication_type.as_ref().map(|s| s.as_str()).into(), + serde_json::to_string(&r.headers).unwrap().into(), + r.sort_priority.into(), + ]) + .on_conflict( + OnConflict::column(GrpcEventIden::Id) + .update_columns([ + HttpRequestIden::UpdatedAt, + HttpRequestIden::WorkspaceId, + HttpRequestIden::Name, + HttpRequestIden::FolderId, + HttpRequestIden::Method, + HttpRequestIden::Headers, + HttpRequestIden::Body, + HttpRequestIden::BodyType, + HttpRequestIden::Authentication, + HttpRequestIden::AuthenticationType, + HttpRequestIden::Url, + HttpRequestIden::UrlParameters, + HttpRequestIden::SortPriority, + ]) + .to_owned(), + ) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db.prepare(sql.as_str())?; + let m = stmt.query_row(&*params.as_params(), |row| row.try_into())?; + Ok(emit_upserted_model(window, m)) +} + +pub async fn list_http_requests( + mgr: &impl Manager, + workspace_id: &str, +) -> Result, DBError> { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::select() + .from(HttpRequestIden::Table) + .cond_where(Expr::col(HttpRequestIden::WorkspaceId).eq(workspace_id)) + .column(Asterisk) + .order_by(HttpRequestIden::CreatedAt, Order::Desc) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + let items = stmt.query_map(&*params.as_params(), |row| row.try_into())?; + Ok(items.map(|v| v.unwrap()).collect()) +} + +pub async fn get_http_request(mgr: &impl Manager, id: &str) -> Result { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::select() + .from(HttpRequestIden::Table) + .column(Asterisk) + .cond_where(Expr::col(HttpRequestIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + Ok(stmt.query_row(&*params.as_params(), |row| row.try_into())?) +} + +pub async fn delete_http_request(window: &WebviewWindow, id: &str) -> Result { + let req = get_http_request(window, id).await?; + + // DB deletes will cascade but this will delete the files + delete_all_http_responses(window, id).await?; + + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::delete() + .from_table(HttpRequestIden::Table) + .cond_where(Expr::col(HttpRequestIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + db.execute(sql.as_str(), &*params.as_params())?; + + emit_deleted_model(window, req) +} + +#[allow(clippy::too_many_arguments)] +pub async fn create_http_response( + window: &WebviewWindow, + request_id: &str, + elapsed: i64, + elapsed_headers: i64, + url: &str, + status: i64, + status_reason: Option<&str>, + content_length: Option, + body_path: Option<&str>, + headers: Vec, + version: Option<&str>, + remote_addr: Option<&str>, +) -> Result { + let req = get_http_request(window, request_id).await?; + let id = generate_model_id(ModelType::TypeHttpResponse); + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::insert() + .into_table(HttpResponseIden::Table) + .columns([ + HttpResponseIden::Id, + HttpResponseIden::CreatedAt, + HttpResponseIden::UpdatedAt, + HttpResponseIden::RequestId, + HttpResponseIden::WorkspaceId, + HttpResponseIden::Elapsed, + HttpResponseIden::ElapsedHeaders, + HttpResponseIden::Url, + HttpResponseIden::Status, + HttpResponseIden::StatusReason, + HttpResponseIden::ContentLength, + HttpResponseIden::BodyPath, + HttpResponseIden::Headers, + HttpResponseIden::Version, + HttpResponseIden::RemoteAddr, + ]) + .values_panic([ + id.as_str().into(), + CurrentTimestamp.into(), + CurrentTimestamp.into(), + req.id.as_str().into(), + req.workspace_id.as_str().into(), + elapsed.into(), + elapsed_headers.into(), + url.into(), + status.into(), + status_reason.into(), + content_length.into(), + body_path.into(), + serde_json::to_string(&headers).unwrap().into(), + version.into(), + remote_addr.into(), + ]) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db.prepare(sql.as_str())?; + let m = stmt.query_row(&*params.as_params(), |row| row.try_into())?; + Ok(emit_upserted_model(window, m)) +} + +pub async fn cancel_pending_grpc_connections(app: &AppHandle) -> Result<(), DBError> { + let dbm = &*app.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::update() + .table(GrpcConnectionIden::Table) + .value(GrpcConnectionIden::Elapsed, -1) + .cond_where(Expr::col(GrpcConnectionIden::Elapsed).eq(0)) + .build_rusqlite(SqliteQueryBuilder); + + db.execute(sql.as_str(), &*params.as_params())?; + Ok(()) +} + +pub async fn cancel_pending_responses(app: &AppHandle) -> Result<(), DBError> { + let dbm = &*app.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::update() + .table(HttpResponseIden::Table) + .values([ + (HttpResponseIden::Elapsed, (-1i32).into()), + (HttpResponseIden::StatusReason, "Cancelled".into()), + ]) + .cond_where(Expr::col(HttpResponseIden::Elapsed).eq(0)) + .build_rusqlite(SqliteQueryBuilder); + + db.execute(sql.as_str(), &*params.as_params())?; + Ok(()) +} + +pub async fn update_response_if_id( + window: &WebviewWindow, + response: &HttpResponse, +) -> Result { + if response.id.is_empty() { + Ok(response.clone()) + } else { + update_response(window, response).await + } +} + +pub async fn update_response( + window: &WebviewWindow, + response: &HttpResponse, +) -> Result { + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + + let (sql, params) = Query::update() + .table(HttpResponseIden::Table) + .cond_where(Expr::col(HttpResponseIden::Id).eq(response.clone().id)) + .values([ + (HttpResponseIden::UpdatedAt, CurrentTimestamp.into()), + (HttpResponseIden::Elapsed, response.elapsed.into()), + (HttpResponseIden::Url, response.url.as_str().into()), + (HttpResponseIden::Status, response.status.into()), + ( + HttpResponseIden::StatusReason, + response.status_reason.as_ref().map(|s| s.as_str()).into(), + ), + ( + HttpResponseIden::ContentLength, + response.content_length.into(), + ), + ( + HttpResponseIden::BodyPath, + response.body_path.as_ref().map(|s| s.as_str()).into(), + ), + ( + HttpResponseIden::Error, + response.error.as_ref().map(|s| s.as_str()).into(), + ), + ( + HttpResponseIden::Headers, + serde_json::to_string(&response.headers) + .unwrap_or_default() + .into(), + ), + ( + HttpResponseIden::Version, + response.version.as_ref().map(|s| s.as_str()).into(), + ), + ( + HttpResponseIden::RemoteAddr, + response.remote_addr.as_ref().map(|s| s.as_str()).into(), + ), + ]) + .returning_all() + .build_rusqlite(SqliteQueryBuilder); + + let mut stmt = db.prepare(sql.as_str())?; + let m = stmt.query_row(&*params.as_params(), |row| row.try_into())?; + Ok(emit_upserted_model(window, m)) +} + +pub async fn get_http_response(mgr: &impl Manager, id: &str) -> Result { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::select() + .from(HttpResponseIden::Table) + .column(Asterisk) + .cond_where(Expr::col(HttpResponseIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + Ok(stmt.query_row(&*params.as_params(), |row| row.try_into())?) +} + +pub async fn delete_http_response( + window: &WebviewWindow, + id: &str, +) -> Result { + let resp = get_http_response(window, id).await?; + + // Delete the body file if it exists + if let Some(p) = resp.body_path.clone() { + if let Err(e) = fs::remove_file(p) { + error!("Failed to delete body file: {}", e); + }; + } + + let dbm = &*window.app_handle().state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::delete() + .from_table(HttpResponseIden::Table) + .cond_where(Expr::col(HttpResponseIden::Id).eq(id)) + .build_rusqlite(SqliteQueryBuilder); + db.execute(sql.as_str(), &*params.as_params())?; + + emit_deleted_model(window, resp) +} + +pub async fn delete_all_http_responses( + window: &WebviewWindow, + request_id: &str, +) -> Result<(), DBError> { + for r in list_responses(window, request_id, None).await? { + delete_http_response(window, &r.id).await?; + } + Ok(()) +} + +pub async fn list_responses( + mgr: &impl Manager, + request_id: &str, + limit: Option, +) -> Result, DBError> { + let limit_unwrapped = limit.unwrap_or_else(|| i64::MAX); + let dbm = mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::select() + .from(HttpResponseIden::Table) + .cond_where(Expr::col(HttpResponseIden::RequestId).eq(request_id)) + .column(Asterisk) + .order_by(HttpResponseIden::CreatedAt, Order::Desc) + .limit(limit_unwrapped as u64) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + let items = stmt.query_map(&*params.as_params(), |row| row.try_into())?; + Ok(items.map(|v| v.unwrap()).collect()) +} + +pub async fn list_responses_by_workspace_id( + mgr: &impl Manager, + workspace_id: &str, +) -> Result, DBError> { + let dbm = &*mgr.state::(); + let db = dbm.0.lock().await.get().unwrap(); + let (sql, params) = Query::select() + .from(HttpResponseIden::Table) + .cond_where(Expr::col(HttpResponseIden::WorkspaceId).eq(workspace_id)) + .column(Asterisk) + .order_by(HttpResponseIden::CreatedAt, Order::Desc) + .build_rusqlite(SqliteQueryBuilder); + let mut stmt = db.prepare(sql.as_str())?; + let items = stmt.query_map(&*params.as_params(), |row| row.try_into())?; + Ok(items.map(|v| v.unwrap()).collect()) +} + +pub fn generate_model_id(model: ModelType) -> String { + let id = generate_id(); + format!("{}_{}", model.id_prefix(), id) +} + +pub fn generate_id() -> String { + Alphanumeric.sample_string(&mut rand::thread_rng(), 10) +} + +#[derive(Clone, Serialize)] +#[serde(default, rename_all = "camelCase")] +struct ModelPayload { + pub model: M, + pub window_label: String, +} + +fn emit_upserted_model(window: &WebviewWindow, model: M) -> M { + let payload = ModelPayload { + model: model.clone(), + window_label: window.label().to_string(), + }; + + window.emit("upserted_model", payload).unwrap(); + model +} + +fn emit_deleted_model(window: &WebviewWindow, model: M) -> Result { + let payload = ModelPayload { + model: model.clone(), + window_label: window.label().to_string(), + }; + window.emit("deleted_model", payload).unwrap(); + Ok(model) +} diff --git a/src-tauri/tauri-plugin-plugin-runtime/Cargo.toml b/src-tauri/yaak_plugin_runtime/Cargo.toml similarity index 81% rename from src-tauri/tauri-plugin-plugin-runtime/Cargo.toml rename to src-tauri/yaak_plugin_runtime/Cargo.toml index 7f8b7942..55e391c2 100644 --- a/src-tauri/tauri-plugin-plugin-runtime/Cargo.toml +++ b/src-tauri/yaak_plugin_runtime/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "plugin_runtime" +name = "yaak_plugin_runtime" version = "0.1.0" edition = "2021" @@ -13,8 +13,8 @@ rand = "0.8.5" reqwest = { version = "0.12.5", features = ["stream"] } serde = { version = "1.0.198", features = ["derive"] } serde_json = "1.0.113" -tauri = { version = "2.0.0-beta" } -tauri-plugin-shell = "2.0.0-beta" +tauri = { workspace = true } +tauri-plugin-shell = { workspace = true } tokio = { version = "1.0", features = ["macros", "rt-multi-thread", "process"] } tonic = "0.12.1" diff --git a/src-tauri/tauri-plugin-plugin-runtime/build.rs b/src-tauri/yaak_plugin_runtime/build.rs similarity index 100% rename from src-tauri/tauri-plugin-plugin-runtime/build.rs rename to src-tauri/yaak_plugin_runtime/build.rs diff --git a/src-tauri/tauri-plugin-plugin-runtime/src/lib.rs b/src-tauri/yaak_plugin_runtime/src/lib.rs similarity index 96% rename from src-tauri/tauri-plugin-plugin-runtime/src/lib.rs rename to src-tauri/yaak_plugin_runtime/src/lib.rs index a5798e20..da5b5b2d 100644 --- a/src-tauri/tauri-plugin-plugin-runtime/src/lib.rs +++ b/src-tauri/yaak_plugin_runtime/src/lib.rs @@ -15,7 +15,7 @@ pub mod plugin_runtime { } pub fn init() -> TauriPlugin { - Builder::new("plugin_runtime") + Builder::new("yaak_plugin_runtime") .setup(|app, _| { tauri::async_runtime::block_on(async move { let manager = PluginManager::new(&app).await; diff --git a/src-tauri/tauri-plugin-plugin-runtime/src/manager.rs b/src-tauri/yaak_plugin_runtime/src/manager.rs similarity index 100% rename from src-tauri/tauri-plugin-plugin-runtime/src/manager.rs rename to src-tauri/yaak_plugin_runtime/src/manager.rs diff --git a/src-tauri/tauri-plugin-plugin-runtime/src/nodejs.rs b/src-tauri/yaak_plugin_runtime/src/nodejs.rs similarity index 96% rename from src-tauri/tauri-plugin-plugin-runtime/src/nodejs.rs rename to src-tauri/yaak_plugin_runtime/src/nodejs.rs index dd88a234..ada51094 100644 --- a/src-tauri/tauri-plugin-plugin-runtime/src/nodejs.rs +++ b/src-tauri/yaak_plugin_runtime/src/nodejs.rs @@ -1,7 +1,7 @@ use std::path::PathBuf; use std::time::Duration; -use log::{debug, info}; +use log::info; use rand::distributions::{Alphanumeric, DistString}; use serde; use serde::Deserialize; @@ -88,8 +88,7 @@ pub async fn node_start( match fs::read_to_string(port_file_path.clone()).await { Ok(s) => break s, - Err(err) => { - debug!("Failed to read port file {}", err.to_string()); + Err(_) => { tokio::time::sleep(Duration::from_millis(500)).await; } } diff --git a/src-web/components/BasicAuth.tsx b/src-web/components/BasicAuth.tsx index 1f37faae..b569cd99 100644 --- a/src-web/components/BasicAuth.tsx +++ b/src-web/components/BasicAuth.tsx @@ -1,6 +1,6 @@ import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest'; import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest'; -import type { GrpcRequest, HttpRequest } from '../lib/models'; +import type { GrpcRequest, HttpRequest } from '@yaakapp/api'; import { Input } from './core/Input'; import { VStack } from './core/Stacks'; @@ -27,7 +27,7 @@ export function BasicAuth({ request }: Prop if (request.model === 'http_request') { updateHttpRequest.mutate({ id: request.id, - update: (r) => ({ + update: (r: HttpRequest) => ({ ...r, authentication: { password: r.authentication.password, username }, }), @@ -35,7 +35,7 @@ export function BasicAuth({ request }: Prop } else { updateGrpcRequest.mutate({ id: request.id, - update: (r) => ({ + update: (r: GrpcRequest) => ({ ...r, authentication: { password: r.authentication.password, username }, }), @@ -57,7 +57,7 @@ export function BasicAuth({ request }: Prop if (request.model === 'http_request') { updateHttpRequest.mutate({ id: request.id, - update: (r) => ({ + update: (r: HttpRequest) => ({ ...r, authentication: { username: r.authentication.username, password }, }), @@ -65,7 +65,7 @@ export function BasicAuth({ request }: Prop } else { updateGrpcRequest.mutate({ id: request.id, - update: (r) => ({ + update: (r: GrpcRequest) => ({ ...r, authentication: { username: r.authentication.username, password }, }), diff --git a/src-web/components/BearerAuth.tsx b/src-web/components/BearerAuth.tsx index 5043753e..19b9a3a2 100644 --- a/src-web/components/BearerAuth.tsx +++ b/src-web/components/BearerAuth.tsx @@ -1,6 +1,6 @@ import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest'; import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest'; -import type { GrpcRequest, HttpRequest } from '../lib/models'; +import type { GrpcRequest, HttpRequest } from '@yaakapp/api'; import { Input } from './core/Input'; import { VStack } from './core/Stacks'; @@ -27,7 +27,7 @@ export function BearerAuth({ request }: Pro if (request.model === 'http_request') { updateHttpRequest.mutate({ id: request.id ?? null, - update: (r) => ({ + update: (r: HttpRequest) => ({ ...r, authentication: { token }, }), @@ -35,7 +35,7 @@ export function BearerAuth({ request }: Pro } else { updateGrpcRequest.mutate({ id: request.id ?? null, - update: (r) => ({ + update: (r: GrpcRequest) => ({ ...r, authentication: { token }, }), diff --git a/src-web/components/BinaryFileEditor.tsx b/src-web/components/BinaryFileEditor.tsx index 7932b4c4..c63678e8 100644 --- a/src-web/components/BinaryFileEditor.tsx +++ b/src-web/components/BinaryFileEditor.tsx @@ -1,6 +1,6 @@ import mime from 'mime'; import { useKeyValue } from '../hooks/useKeyValue'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import { Banner } from './core/Banner'; import { Button } from './core/Button'; import { InlineCode } from './core/InlineCode'; diff --git a/src-web/components/CookieDialog.tsx b/src-web/components/CookieDialog.tsx index 3b7504b6..7e53f0ae 100644 --- a/src-web/components/CookieDialog.tsx +++ b/src-web/components/CookieDialog.tsx @@ -1,5 +1,6 @@ import { useCookieJars } from '../hooks/useCookieJars'; import { useUpdateCookieJar } from '../hooks/useUpdateCookieJar'; +import type { Cookie } from '../lib/gen/Cookie'; import { cookieDomain } from '../lib/models'; import { Banner } from './core/Banner'; import { IconButton } from './core/IconButton'; @@ -37,7 +38,7 @@ export const CookieDialog = function ({ cookieJarId }: Props) { - {cookieJar?.cookies.map((c) => ( + {cookieJar?.cookies.map((c: Cookie) => ( {cookieDomain(c)} @@ -55,7 +56,7 @@ export const CookieDialog = function ({ cookieJarId }: Props) { onClick={async () => { await updateCookieJar.mutateAsync({ ...cookieJar, - cookies: cookieJar.cookies.filter((c2) => c2 !== c), + cookies: cookieJar.cookies.filter((c2: Cookie) => c2 !== c), }); }} /> diff --git a/src-web/components/EnvironmentEditDialog.tsx b/src-web/components/EnvironmentEditDialog.tsx index de80a51d..8c3a1cd0 100644 --- a/src-web/components/EnvironmentEditDialog.tsx +++ b/src-web/components/EnvironmentEditDialog.tsx @@ -9,7 +9,7 @@ import { useKeyValue } from '../hooks/useKeyValue'; import { usePrompt } from '../hooks/usePrompt'; import { useUpdateEnvironment } from '../hooks/useUpdateEnvironment'; import { useUpdateWorkspace } from '../hooks/useUpdateWorkspace'; -import type { Environment, Workspace } from '../lib/models'; +import type { Environment, Workspace } from '@yaakapp/api'; import { Button } from './core/Button'; import { ContextMenu } from './core/Dropdown'; import type { diff --git a/src-web/components/ExportDataDialog.tsx b/src-web/components/ExportDataDialog.tsx index ddb6f7c9..f711fe39 100644 --- a/src-web/components/ExportDataDialog.tsx +++ b/src-web/components/ExportDataDialog.tsx @@ -1,7 +1,7 @@ import { save } from '@tauri-apps/plugin-dialog'; import { useCallback, useMemo, useState } from 'react'; import slugify from 'slugify'; -import type { Workspace } from '../lib/models'; +import type { Workspace } from '@yaakapp/api'; import { count } from '../lib/pluralize'; import { invokeCmd } from '../lib/tauri'; import { Button } from './core/Button'; diff --git a/src-web/components/FormMultipartEditor.tsx b/src-web/components/FormMultipartEditor.tsx index 0ef51048..9abb2cfb 100644 --- a/src-web/components/FormMultipartEditor.tsx +++ b/src-web/components/FormMultipartEditor.tsx @@ -1,5 +1,5 @@ import { useCallback, useMemo } from 'react'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import type { Pair, PairEditorProps } from './core/PairEditor'; import { PairEditor } from './core/PairEditor'; diff --git a/src-web/components/FormUrlencodedEditor.tsx b/src-web/components/FormUrlencodedEditor.tsx index 1a9e3cd2..d3b97ac0 100644 --- a/src-web/components/FormUrlencodedEditor.tsx +++ b/src-web/components/FormUrlencodedEditor.tsx @@ -1,5 +1,5 @@ import { useCallback, useMemo } from 'react'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import type { Pair, PairEditorProps } from './core/PairEditor'; import { PairOrBulkEditor } from './core/PairOrBulkEditor'; diff --git a/src-web/components/GraphQLEditor.tsx b/src-web/components/GraphQLEditor.tsx index 7f56a8d9..3951f46e 100644 --- a/src-web/components/GraphQLEditor.tsx +++ b/src-web/components/GraphQLEditor.tsx @@ -2,7 +2,7 @@ import type { EditorView } from 'codemirror'; import { useCallback, useEffect, useMemo, useRef } from 'react'; import { useIntrospectGraphQL } from '../hooks/useIntrospectGraphQL'; import { tryFormatJson } from '../lib/formatters'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import { Button } from './core/Button'; import type { EditorProps } from './core/Editor'; import { Editor, formatGraphQL } from './core/Editor'; diff --git a/src-web/components/GrpcConnectionMessagesPane.tsx b/src-web/components/GrpcConnectionMessagesPane.tsx index ee56908c..8f733ae1 100644 --- a/src-web/components/GrpcConnectionMessagesPane.tsx +++ b/src-web/components/GrpcConnectionMessagesPane.tsx @@ -5,7 +5,7 @@ import React, { useEffect, useMemo, useState } from 'react'; import { useGrpcEvents } from '../hooks/useGrpcEvents'; import { usePinnedGrpcConnection } from '../hooks/usePinnedGrpcConnection'; import { useStateWithDeps } from '../hooks/useStateWithDeps'; -import type { GrpcEvent, GrpcRequest } from '../lib/models'; +import type { GrpcEvent, GrpcRequest } from '@yaakapp/api'; import { isResponseLoading } from '../lib/models'; import { Banner } from './core/Banner'; import { Button } from './core/Button'; diff --git a/src-web/components/GrpcConnectionSetupPane.tsx b/src-web/components/GrpcConnectionSetupPane.tsx index 6c30ef4c..a27ce178 100644 --- a/src-web/components/GrpcConnectionSetupPane.tsx +++ b/src-web/components/GrpcConnectionSetupPane.tsx @@ -6,7 +6,7 @@ import { createGlobalState } from 'react-use'; import type { ReflectResponseService } from '../hooks/useGrpc'; import { useRequestUpdateKey } from '../hooks/useRequestUpdateKey'; import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest'; -import type { GrpcMetadataEntry, GrpcRequest } from '../lib/models'; +import type { GrpcMetadataEntry, GrpcRequest } from '@yaakapp/api'; import { AUTH_TYPE_BASIC, AUTH_TYPE_BEARER, AUTH_TYPE_NONE } from '../lib/models'; import { BasicAuth } from './BasicAuth'; import { BearerAuth } from './BearerAuth'; diff --git a/src-web/components/GrpcEditor.tsx b/src-web/components/GrpcEditor.tsx index fbbc7ec3..fb5c80be 100644 --- a/src-web/components/GrpcEditor.tsx +++ b/src-web/components/GrpcEditor.tsx @@ -13,7 +13,7 @@ import { useEffect, useMemo, useRef } from 'react'; import { useAlert } from '../hooks/useAlert'; import type { ReflectResponseService } from '../hooks/useGrpc'; import { tryFormatJson } from '../lib/formatters'; -import type { GrpcRequest } from '../lib/models'; +import type { GrpcRequest } from '@yaakapp/api'; import { count } from '../lib/pluralize'; import { Button } from './core/Button'; import type { EditorProps } from './core/Editor'; diff --git a/src-web/components/HeadersEditor.tsx b/src-web/components/HeadersEditor.tsx index ee5ac060..0c37e452 100644 --- a/src-web/components/HeadersEditor.tsx +++ b/src-web/components/HeadersEditor.tsx @@ -3,7 +3,7 @@ import { connections } from '../lib/data/connections'; import { encodings } from '../lib/data/encodings'; import { headerNames } from '../lib/data/headerNames'; import { mimeTypes } from '../lib/data/mimetypes'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import type { GenericCompletionConfig } from './core/Editor/genericCompletion'; import type { PairEditorProps } from './core/PairEditor'; import { PairOrBulkEditor } from './core/PairOrBulkEditor'; diff --git a/src-web/components/HttpRequestLayout.tsx b/src-web/components/HttpRequestLayout.tsx index 50e68ad3..f5201e37 100644 --- a/src-web/components/HttpRequestLayout.tsx +++ b/src-web/components/HttpRequestLayout.tsx @@ -1,6 +1,6 @@ import type { CSSProperties } from 'react'; import React from 'react'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import { SplitLayout } from './core/SplitLayout'; import { RequestPane } from './RequestPane'; import { ResponsePane } from './ResponsePane'; diff --git a/src-web/components/MoveToWorkspaceDialog.tsx b/src-web/components/MoveToWorkspaceDialog.tsx index 587f2223..4cb2d0b6 100644 --- a/src-web/components/MoveToWorkspaceDialog.tsx +++ b/src-web/components/MoveToWorkspaceDialog.tsx @@ -7,7 +7,7 @@ import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest'; import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest'; import { useWorkspaces } from '../hooks/useWorkspaces'; import { fallbackRequestName } from '../lib/fallbackRequestName'; -import type { GrpcRequest, HttpRequest } from '../lib/models'; +import type { GrpcRequest, HttpRequest } from '@yaakapp/api'; import { Button } from './core/Button'; import { InlineCode } from './core/InlineCode'; import { Select } from './core/Select'; diff --git a/src-web/components/OpenWorkspaceDialog.tsx b/src-web/components/OpenWorkspaceDialog.tsx index b739e5a4..c2494624 100644 --- a/src-web/components/OpenWorkspaceDialog.tsx +++ b/src-web/components/OpenWorkspaceDialog.tsx @@ -2,7 +2,7 @@ import { useState } from 'react'; import { useOpenWorkspace } from '../hooks/useOpenWorkspace'; import { useSettings } from '../hooks/useSettings'; import { useUpdateSettings } from '../hooks/useUpdateSettings'; -import type { Workspace } from '../lib/models'; +import type { Workspace } from '@yaakapp/api'; import { Button } from './core/Button'; import { Checkbox } from './core/Checkbox'; import { Icon } from './core/Icon'; diff --git a/src-web/components/RecentConnectionsDropdown.tsx b/src-web/components/RecentConnectionsDropdown.tsx index 54f62eec..cc409c7f 100644 --- a/src-web/components/RecentConnectionsDropdown.tsx +++ b/src-web/components/RecentConnectionsDropdown.tsx @@ -1,7 +1,7 @@ import { formatDistanceToNowStrict } from 'date-fns'; import { useDeleteGrpcConnection } from '../hooks/useDeleteGrpcConnection'; import { useDeleteGrpcConnections } from '../hooks/useDeleteGrpcConnections'; -import type { GrpcConnection } from '../lib/models'; +import type { GrpcConnection } from '@yaakapp/api'; import { count } from '../lib/pluralize'; import { Dropdown } from './core/Dropdown'; import { Icon } from './core/Icon'; diff --git a/src-web/components/RecentResponsesDropdown.tsx b/src-web/components/RecentResponsesDropdown.tsx index 4eaeaf9c..71e34e50 100644 --- a/src-web/components/RecentResponsesDropdown.tsx +++ b/src-web/components/RecentResponsesDropdown.tsx @@ -2,7 +2,7 @@ import classNames from 'classnames'; import { useDeleteHttpResponse } from '../hooks/useDeleteHttpResponse'; import { useDeleteHttpResponses } from '../hooks/useDeleteHttpResponses'; import { useSaveResponse } from '../hooks/useSaveResponse'; -import type { HttpResponse } from '../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { pluralize } from '../lib/pluralize'; import { Dropdown } from './core/Dropdown'; import { Icon } from './core/Icon'; diff --git a/src-web/components/RequestPane.tsx b/src-web/components/RequestPane.tsx index 3139ee01..69c0672c 100644 --- a/src-web/components/RequestPane.tsx +++ b/src-web/components/RequestPane.tsx @@ -12,7 +12,7 @@ import { useRequestUpdateKey } from '../hooks/useRequestUpdateKey'; import { useSendAnyHttpRequest } from '../hooks/useSendAnyHttpRequest'; import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest'; import { tryFormatJson } from '../lib/formatters'; -import type { HttpHeader, HttpRequest, HttpUrlParameter } from '../lib/models'; +import type { HttpRequest, HttpRequestHeader, HttpUrlParameter } from '@yaakapp/api'; import { AUTH_TYPE_BASIC, AUTH_TYPE_BEARER, @@ -211,7 +211,8 @@ export const RequestPane = memo(function RequestPane({ [activeRequestId, updateRequest], ); const handleHeadersChange = useCallback( - (headers: HttpHeader[]) => updateRequest.mutate({ id: activeRequestId, update: { headers } }), + (headers: HttpRequestHeader[]) => + updateRequest.mutate({ id: activeRequestId, update: { headers } }), [activeRequestId, updateRequest], ); const handleUrlParametersChange = useCallback( diff --git a/src-web/components/ResponseHeaders.tsx b/src-web/components/ResponseHeaders.tsx index 9464a0eb..5061e96c 100644 --- a/src-web/components/ResponseHeaders.tsx +++ b/src-web/components/ResponseHeaders.tsx @@ -1,4 +1,4 @@ -import type { HttpResponse } from '../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { KeyValueRow, KeyValueRows } from './core/KeyValueRow'; interface Props { diff --git a/src-web/components/ResponseInfo.tsx b/src-web/components/ResponseInfo.tsx index 91f2ba57..8ba9a4bf 100644 --- a/src-web/components/ResponseInfo.tsx +++ b/src-web/components/ResponseInfo.tsx @@ -1,5 +1,5 @@ import { open } from '@tauri-apps/plugin-shell'; -import type { HttpResponse } from '../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { IconButton } from './core/IconButton'; import { KeyValueRow, KeyValueRows } from './core/KeyValueRow'; diff --git a/src-web/components/ResponsePane.tsx b/src-web/components/ResponsePane.tsx index a90bf05a..6f7e601e 100644 --- a/src-web/components/ResponsePane.tsx +++ b/src-web/components/ResponsePane.tsx @@ -5,7 +5,7 @@ import { createGlobalState } from 'react-use'; import { useContentTypeFromHeaders } from '../hooks/useContentTypeFromHeaders'; import { usePinnedHttpResponse } from '../hooks/usePinnedHttpResponse'; import { useResponseViewMode } from '../hooks/useResponseViewMode'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import { isResponseLoading } from '../lib/models'; import { Banner } from './core/Banner'; import { CountBadge } from './core/CountBadge'; diff --git a/src-web/components/Sidebar.tsx b/src-web/components/Sidebar.tsx index b9a43fe4..9ad1eddf 100644 --- a/src-web/components/Sidebar.tsx +++ b/src-web/components/Sidebar.tsx @@ -32,7 +32,7 @@ import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest'; import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest'; import { useWorkspaces } from '../hooks/useWorkspaces'; import { fallbackRequestName } from '../lib/fallbackRequestName'; -import type { Folder, GrpcRequest, HttpRequest, Workspace } from '../lib/models'; +import type { Folder, GrpcRequest, HttpRequest, Workspace } from '@yaakapp/api'; import { isResponseLoading } from '../lib/models'; import type { DropdownItem } from './core/Dropdown'; import { ContextMenu } from './core/Dropdown'; diff --git a/src-web/components/UrlBar.tsx b/src-web/components/UrlBar.tsx index 655944e0..a8bd5ad1 100644 --- a/src-web/components/UrlBar.tsx +++ b/src-web/components/UrlBar.tsx @@ -3,7 +3,7 @@ import type { EditorView } from 'codemirror'; import type { FormEvent, ReactNode } from 'react'; import { memo, useRef, useState } from 'react'; import { useHotKey } from '../hooks/useHotKey'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import type { IconProps } from './core/Icon'; import { IconButton } from './core/IconButton'; import type { InputProps } from './core/Input'; diff --git a/src-web/components/UrlParameterEditor.tsx b/src-web/components/UrlParameterEditor.tsx index 1184f257..cdfba446 100644 --- a/src-web/components/UrlParameterEditor.tsx +++ b/src-web/components/UrlParameterEditor.tsx @@ -1,4 +1,4 @@ -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import { PairOrBulkEditor } from './core/PairOrBulkEditor'; type Props = { diff --git a/src-web/components/core/Editor/extensions.ts b/src-web/components/core/Editor/extensions.ts index 22ae5e36..bfb3e91a 100644 --- a/src-web/components/core/Editor/extensions.ts +++ b/src-web/components/core/Editor/extensions.ts @@ -33,7 +33,7 @@ import { import { tags as t } from '@lezer/highlight'; import { graphql, graphqlLanguageSupport } from 'cm6-graphql'; import { EditorView } from 'codemirror'; -import type { Environment, Workspace } from '../../../lib/models'; +import type { Environment, Workspace } from '@yaakapp/api'; import type { EditorProps } from './index'; import { pairs } from './pairs/extension'; import { text } from './text/extension'; diff --git a/src-web/components/core/Editor/twig/extension.ts b/src-web/components/core/Editor/twig/extension.ts index 2c68c6fa..4e128842 100644 --- a/src-web/components/core/Editor/twig/extension.ts +++ b/src-web/components/core/Editor/twig/extension.ts @@ -1,7 +1,7 @@ import type { LanguageSupport } from '@codemirror/language'; import { LRLanguage } from '@codemirror/language'; import { parseMixed } from '@lezer/common'; -import type { Environment, Workspace } from '../../../../lib/models'; +import type { Environment, Workspace } from '@yaakapp/api'; import type { GenericCompletionConfig } from '../genericCompletion'; import { genericCompletion } from '../genericCompletion'; import { textLanguageName } from '../text/extension'; diff --git a/src-web/components/core/HttpMethodTag.tsx b/src-web/components/core/HttpMethodTag.tsx index 0a2d787d..e19b3a6e 100644 --- a/src-web/components/core/HttpMethodTag.tsx +++ b/src-web/components/core/HttpMethodTag.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import type { GrpcRequest, HttpRequest } from '../../lib/models'; +import type { GrpcRequest, HttpRequest } from '@yaakapp/api'; interface Props { request: HttpRequest | GrpcRequest; diff --git a/src-web/components/core/StatusTag.tsx b/src-web/components/core/StatusTag.tsx index f2bee082..32750150 100644 --- a/src-web/components/core/StatusTag.tsx +++ b/src-web/components/core/StatusTag.tsx @@ -1,5 +1,5 @@ import classNames from 'classnames'; -import type { HttpResponse } from '../../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; interface Props { response: Pick; diff --git a/src-web/components/responseViewers/AudioViewer.tsx b/src-web/components/responseViewers/AudioViewer.tsx index 9389dc9d..9f3fd873 100644 --- a/src-web/components/responseViewers/AudioViewer.tsx +++ b/src-web/components/responseViewers/AudioViewer.tsx @@ -1,6 +1,6 @@ import { convertFileSrc } from '@tauri-apps/api/core'; import React from 'react'; -import type { HttpResponse } from '../../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; interface Props { response: HttpResponse; diff --git a/src-web/components/responseViewers/BinaryViewer.tsx b/src-web/components/responseViewers/BinaryViewer.tsx index b908126b..6079c960 100644 --- a/src-web/components/responseViewers/BinaryViewer.tsx +++ b/src-web/components/responseViewers/BinaryViewer.tsx @@ -1,5 +1,5 @@ import { useSaveResponse } from '../../hooks/useSaveResponse'; -import type { HttpResponse } from '../../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { getContentTypeHeader } from '../../lib/models'; import { Banner } from '../core/Banner'; import { Button } from '../core/Button'; diff --git a/src-web/components/responseViewers/CsvViewer.tsx b/src-web/components/responseViewers/CsvViewer.tsx index 185295a1..24cbf28e 100644 --- a/src-web/components/responseViewers/CsvViewer.tsx +++ b/src-web/components/responseViewers/CsvViewer.tsx @@ -2,7 +2,7 @@ import classNames from 'classnames'; import Papa from 'papaparse'; import { useMemo } from 'react'; import { useResponseBodyText } from '../../hooks/useResponseBodyText'; -import type { HttpResponse } from '../../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; interface Props { response: HttpResponse; diff --git a/src-web/components/responseViewers/ImageViewer.tsx b/src-web/components/responseViewers/ImageViewer.tsx index cadcce83..aa8b8869 100644 --- a/src-web/components/responseViewers/ImageViewer.tsx +++ b/src-web/components/responseViewers/ImageViewer.tsx @@ -1,7 +1,7 @@ import { convertFileSrc } from '@tauri-apps/api/core'; import classNames from 'classnames'; import { useState } from 'react'; -import type { HttpResponse } from '../../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; interface Props { response: HttpResponse; diff --git a/src-web/components/responseViewers/JsonViewer.tsx b/src-web/components/responseViewers/JsonViewer.tsx index b30dd2ce..7f33f681 100644 --- a/src-web/components/responseViewers/JsonViewer.tsx +++ b/src-web/components/responseViewers/JsonViewer.tsx @@ -1,6 +1,6 @@ import classNames from 'classnames'; import { useResponseBodyText } from '../../hooks/useResponseBodyText'; -import type { HttpResponse } from '../../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { JsonAttributeTree } from '../core/JsonAttributeTree'; interface Props { diff --git a/src-web/components/responseViewers/PdfViewer.tsx b/src-web/components/responseViewers/PdfViewer.tsx index 07b38f9c..6ef725c3 100644 --- a/src-web/components/responseViewers/PdfViewer.tsx +++ b/src-web/components/responseViewers/PdfViewer.tsx @@ -6,7 +6,7 @@ import type { PDFDocumentProxy } from 'pdfjs-dist'; import React, { useRef, useState } from 'react'; import { Document, Page } from 'react-pdf'; import { useDebouncedState } from '../../hooks/useDebouncedState'; -import type { HttpResponse } from '../../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import './PdfViewer.css'; interface Props { diff --git a/src-web/components/responseViewers/TextViewer.tsx b/src-web/components/responseViewers/TextViewer.tsx index 648bc19b..78ded0bd 100644 --- a/src-web/components/responseViewers/TextViewer.tsx +++ b/src-web/components/responseViewers/TextViewer.tsx @@ -9,7 +9,7 @@ import { useResponseBodyText } from '../../hooks/useResponseBodyText'; import { useSaveResponse } from '../../hooks/useSaveResponse'; import { useToggle } from '../../hooks/useToggle'; import { tryFormatJson, tryFormatXml } from '../../lib/formatters'; -import type { HttpResponse } from '../../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { CopyButton } from '../CopyButton'; import { Banner } from '../core/Banner'; import { Button } from '../core/Button'; diff --git a/src-web/components/responseViewers/VideoViewer.tsx b/src-web/components/responseViewers/VideoViewer.tsx index 0d2e6587..be05f322 100644 --- a/src-web/components/responseViewers/VideoViewer.tsx +++ b/src-web/components/responseViewers/VideoViewer.tsx @@ -1,6 +1,6 @@ import { convertFileSrc } from '@tauri-apps/api/core'; import React from 'react'; -import type { HttpResponse } from '../../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; interface Props { response: HttpResponse; diff --git a/src-web/components/responseViewers/WebPageViewer.tsx b/src-web/components/responseViewers/WebPageViewer.tsx index 8b761975..e10992d5 100644 --- a/src-web/components/responseViewers/WebPageViewer.tsx +++ b/src-web/components/responseViewers/WebPageViewer.tsx @@ -1,6 +1,6 @@ import { useMemo } from 'react'; import { useResponseBodyText } from '../../hooks/useResponseBodyText'; -import type { HttpResponse } from '../../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; interface Props { response: HttpResponse; diff --git a/src-web/hooks/useActiveEnvironment.ts b/src-web/hooks/useActiveEnvironment.ts index 19f3fbc2..e15deb94 100644 --- a/src-web/hooks/useActiveEnvironment.ts +++ b/src-web/hooks/useActiveEnvironment.ts @@ -1,5 +1,5 @@ import { useMemo } from 'react'; -import type { Environment } from '../lib/models'; +import type { Environment } from '@yaakapp/api'; import { useActiveEnvironmentId } from './useActiveEnvironmentId'; import { useEnvironments } from './useEnvironments'; diff --git a/src-web/hooks/useActiveRequest.ts b/src-web/hooks/useActiveRequest.ts index 2887c7e9..deeadc7c 100644 --- a/src-web/hooks/useActiveRequest.ts +++ b/src-web/hooks/useActiveRequest.ts @@ -1,4 +1,4 @@ -import type { GrpcRequest, HttpRequest } from '../lib/models'; +import type { GrpcRequest, HttpRequest } from '@yaakapp/api'; import { useActiveRequestId } from './useActiveRequestId'; import { useRequests } from './useRequests'; diff --git a/src-web/hooks/useActiveWorkspace.ts b/src-web/hooks/useActiveWorkspace.ts index 31e0c4fc..e02563be 100644 --- a/src-web/hooks/useActiveWorkspace.ts +++ b/src-web/hooks/useActiveWorkspace.ts @@ -1,5 +1,5 @@ import { useMemo } from 'react'; -import type { Workspace } from '../lib/models'; +import type { Workspace } from '@yaakapp/api'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; import { useWorkspaces } from './useWorkspaces'; diff --git a/src-web/hooks/useAppRoutes.tsx b/src-web/hooks/useAppRoutes.tsx index cd900614..01cb29a3 100644 --- a/src-web/hooks/useAppRoutes.tsx +++ b/src-web/hooks/useAppRoutes.tsx @@ -1,6 +1,6 @@ import { useCallback } from 'react'; import { useNavigate } from 'react-router-dom'; -import type { Environment } from '../lib/models'; +import type { Environment } from '@yaakapp/api'; import { QUERY_ENVIRONMENT_ID } from './useActiveEnvironmentId'; import { useActiveRequestId } from './useActiveRequestId'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; diff --git a/src-web/hooks/useContentTypeFromHeaders.ts b/src-web/hooks/useContentTypeFromHeaders.ts index 7644022a..e847f4d4 100644 --- a/src-web/hooks/useContentTypeFromHeaders.ts +++ b/src-web/hooks/useContentTypeFromHeaders.ts @@ -1,7 +1,7 @@ import { useMemo } from 'react'; -import type { HttpHeader } from '../lib/models'; +import type { HttpResponseHeader } from '@yaakapp/api'; -export function useContentTypeFromHeaders(headers: HttpHeader[] | null): string | null { +export function useContentTypeFromHeaders(headers: HttpResponseHeader[] | null): string | null { return useMemo( () => headers?.find((h) => h.name.toLowerCase() === 'content-type')?.value ?? null, [headers], diff --git a/src-web/hooks/useCreateEnvironment.ts b/src-web/hooks/useCreateEnvironment.ts index 0eff8dfd..9cb8ab44 100644 --- a/src-web/hooks/useCreateEnvironment.ts +++ b/src-web/hooks/useCreateEnvironment.ts @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { trackEvent } from '../lib/analytics'; -import type { Environment } from '../lib/models'; +import type { Environment } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; import { useAppRoutes } from './useAppRoutes'; diff --git a/src-web/hooks/useCreateFolder.ts b/src-web/hooks/useCreateFolder.ts index e2f0129c..d6ee29b8 100644 --- a/src-web/hooks/useCreateFolder.ts +++ b/src-web/hooks/useCreateFolder.ts @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { trackEvent } from '../lib/analytics'; -import type { Folder } from '../lib/models'; +import type { Folder } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveRequest } from './useActiveRequest'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; diff --git a/src-web/hooks/useCreateGrpcRequest.ts b/src-web/hooks/useCreateGrpcRequest.ts index 88c33af9..3758726e 100644 --- a/src-web/hooks/useCreateGrpcRequest.ts +++ b/src-web/hooks/useCreateGrpcRequest.ts @@ -1,6 +1,6 @@ import { useMutation } from '@tanstack/react-query'; import { trackEvent } from '../lib/analytics'; -import type { GrpcRequest } from '../lib/models'; +import type { GrpcRequest } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveEnvironmentId } from './useActiveEnvironmentId'; import { useActiveRequest } from './useActiveRequest'; diff --git a/src-web/hooks/useCreateHttpRequest.ts b/src-web/hooks/useCreateHttpRequest.ts index 6b11e2b7..f2a9aab6 100644 --- a/src-web/hooks/useCreateHttpRequest.ts +++ b/src-web/hooks/useCreateHttpRequest.ts @@ -1,6 +1,6 @@ import { useMutation } from '@tanstack/react-query'; import { trackEvent } from '../lib/analytics'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveEnvironmentId } from './useActiveEnvironmentId'; import { useActiveRequest } from './useActiveRequest'; diff --git a/src-web/hooks/useCreateWorkspace.ts b/src-web/hooks/useCreateWorkspace.ts index 1fdf963a..42e7cb3b 100644 --- a/src-web/hooks/useCreateWorkspace.ts +++ b/src-web/hooks/useCreateWorkspace.ts @@ -1,5 +1,5 @@ import { useMutation } from '@tanstack/react-query'; -import type { Workspace } from '../lib/models'; +import type { Workspace } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useAppRoutes } from './useAppRoutes'; import { usePrompt } from './usePrompt'; diff --git a/src-web/hooks/useDeleteAnyGrpcRequest.tsx b/src-web/hooks/useDeleteAnyGrpcRequest.tsx index 6131816f..308a6e8a 100644 --- a/src-web/hooks/useDeleteAnyGrpcRequest.tsx +++ b/src-web/hooks/useDeleteAnyGrpcRequest.tsx @@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { InlineCode } from '../components/core/InlineCode'; import { trackEvent } from '../lib/analytics'; import { fallbackRequestName } from '../lib/fallbackRequestName'; -import type { GrpcRequest } from '../lib/models'; +import type { GrpcRequest } from '@yaakapp/api'; import { getGrpcRequest } from '../lib/store'; import { invokeCmd } from '../lib/tauri'; import { useConfirm } from './useConfirm'; diff --git a/src-web/hooks/useDeleteAnyHttpRequest.tsx b/src-web/hooks/useDeleteAnyHttpRequest.tsx index 3af23b85..98dd9ea9 100644 --- a/src-web/hooks/useDeleteAnyHttpRequest.tsx +++ b/src-web/hooks/useDeleteAnyHttpRequest.tsx @@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { InlineCode } from '../components/core/InlineCode'; import { trackEvent } from '../lib/analytics'; import { fallbackRequestName } from '../lib/fallbackRequestName'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import { getHttpRequest } from '../lib/store'; import { invokeCmd } from '../lib/tauri'; import { useConfirm } from './useConfirm'; diff --git a/src-web/hooks/useDeleteEnvironment.tsx b/src-web/hooks/useDeleteEnvironment.tsx index 8623456d..a4478f74 100644 --- a/src-web/hooks/useDeleteEnvironment.tsx +++ b/src-web/hooks/useDeleteEnvironment.tsx @@ -1,7 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { InlineCode } from '../components/core/InlineCode'; import { trackEvent } from '../lib/analytics'; -import type { Environment, Workspace } from '../lib/models'; +import type { Environment, Workspace } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useConfirm } from './useConfirm'; import { environmentsQueryKey } from './useEnvironments'; diff --git a/src-web/hooks/useDeleteFolder.tsx b/src-web/hooks/useDeleteFolder.tsx index 48d6c0c0..b13c8b83 100644 --- a/src-web/hooks/useDeleteFolder.tsx +++ b/src-web/hooks/useDeleteFolder.tsx @@ -1,7 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { InlineCode } from '../components/core/InlineCode'; import { trackEvent } from '../lib/analytics'; -import type { Folder } from '../lib/models'; +import type { Folder } from '@yaakapp/api'; import { getFolder } from '../lib/store'; import { invokeCmd } from '../lib/tauri'; import { useConfirm } from './useConfirm'; diff --git a/src-web/hooks/useDeleteGrpcConnection.ts b/src-web/hooks/useDeleteGrpcConnection.ts index 02a1a2d5..842a1cff 100644 --- a/src-web/hooks/useDeleteGrpcConnection.ts +++ b/src-web/hooks/useDeleteGrpcConnection.ts @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { trackEvent } from '../lib/analytics'; -import type { GrpcConnection } from '../lib/models'; +import type { GrpcConnection } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { grpcConnectionsQueryKey } from './useGrpcConnections'; diff --git a/src-web/hooks/useDeleteHttpResponse.ts b/src-web/hooks/useDeleteHttpResponse.ts index e4b9b473..20f581d9 100644 --- a/src-web/hooks/useDeleteHttpResponse.ts +++ b/src-web/hooks/useDeleteHttpResponse.ts @@ -1,6 +1,6 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { trackEvent } from '../lib/analytics'; -import type { HttpResponse } from '../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { httpResponsesQueryKey } from './useHttpResponses'; diff --git a/src-web/hooks/useDeleteWorkspace.tsx b/src-web/hooks/useDeleteWorkspace.tsx index c0d5d13c..7a160ba8 100644 --- a/src-web/hooks/useDeleteWorkspace.tsx +++ b/src-web/hooks/useDeleteWorkspace.tsx @@ -1,7 +1,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; import { InlineCode } from '../components/core/InlineCode'; import { trackEvent } from '../lib/analytics'; -import type { Workspace } from '../lib/models'; +import type { Workspace } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; import { useAppRoutes } from './useAppRoutes'; diff --git a/src-web/hooks/useDuplicateGrpcRequest.ts b/src-web/hooks/useDuplicateGrpcRequest.ts index 9b45af86..11c6d858 100644 --- a/src-web/hooks/useDuplicateGrpcRequest.ts +++ b/src-web/hooks/useDuplicateGrpcRequest.ts @@ -1,7 +1,7 @@ import { useMutation } from '@tanstack/react-query'; import { trackEvent } from '../lib/analytics'; import { setKeyValue } from '../lib/keyValueStore'; -import type { GrpcRequest } from '../lib/models'; +import type { GrpcRequest } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveEnvironmentId } from './useActiveEnvironmentId'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; diff --git a/src-web/hooks/useDuplicateHttpRequest.ts b/src-web/hooks/useDuplicateHttpRequest.ts index 5b80a356..a44a2515 100644 --- a/src-web/hooks/useDuplicateHttpRequest.ts +++ b/src-web/hooks/useDuplicateHttpRequest.ts @@ -1,6 +1,6 @@ import { useMutation } from '@tanstack/react-query'; import { trackEvent } from '../lib/analytics'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveEnvironmentId } from './useActiveEnvironmentId'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; diff --git a/src-web/hooks/useEnvironments.ts b/src-web/hooks/useEnvironments.ts index 5705e9de..4cfea2f0 100644 --- a/src-web/hooks/useEnvironments.ts +++ b/src-web/hooks/useEnvironments.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import type { Environment } from '../lib/models'; +import type { Environment } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; diff --git a/src-web/hooks/useFolders.ts b/src-web/hooks/useFolders.ts index 440ba5b4..ce869de1 100644 --- a/src-web/hooks/useFolders.ts +++ b/src-web/hooks/useFolders.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import type { Folder } from '../lib/models'; +import type { Folder } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; diff --git a/src-web/hooks/useGrpc.ts b/src-web/hooks/useGrpc.ts index 24a1cf53..1413c111 100644 --- a/src-web/hooks/useGrpc.ts +++ b/src-web/hooks/useGrpc.ts @@ -2,7 +2,7 @@ import { useMutation, useQuery } from '@tanstack/react-query'; import { emit } from '@tauri-apps/api/event'; import { trackEvent } from '../lib/analytics'; import { minPromiseMillis } from '../lib/minPromiseMillis'; -import type { GrpcConnection, GrpcRequest } from '../lib/models'; +import type { GrpcConnection, GrpcRequest } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveEnvironmentId } from './useActiveEnvironmentId'; import { useDebouncedValue } from './useDebouncedValue'; diff --git a/src-web/hooks/useGrpcConnections.ts b/src-web/hooks/useGrpcConnections.ts index a89e4943..f8f59cac 100644 --- a/src-web/hooks/useGrpcConnections.ts +++ b/src-web/hooks/useGrpcConnections.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import type { GrpcConnection } from '../lib/models'; +import type { GrpcConnection } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; export function grpcConnectionsQueryKey({ requestId }: { requestId: string }) { diff --git a/src-web/hooks/useGrpcEvents.ts b/src-web/hooks/useGrpcEvents.ts index 7ada4427..17224418 100644 --- a/src-web/hooks/useGrpcEvents.ts +++ b/src-web/hooks/useGrpcEvents.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import type { GrpcEvent } from '../lib/models'; +import type { GrpcEvent } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; export function grpcEventsQueryKey({ connectionId }: { connectionId: string }) { diff --git a/src-web/hooks/useGrpcRequest.ts b/src-web/hooks/useGrpcRequest.ts index be0789c5..cc0e1655 100644 --- a/src-web/hooks/useGrpcRequest.ts +++ b/src-web/hooks/useGrpcRequest.ts @@ -1,4 +1,4 @@ -import type { GrpcRequest } from '../lib/models'; +import type { GrpcRequest } from '@yaakapp/api'; import { useGrpcRequests } from './useGrpcRequests'; export function useGrpcRequest(id: string | null): GrpcRequest | null { diff --git a/src-web/hooks/useGrpcRequests.ts b/src-web/hooks/useGrpcRequests.ts index 7c60d477..71620070 100644 --- a/src-web/hooks/useGrpcRequests.ts +++ b/src-web/hooks/useGrpcRequests.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import type { GrpcRequest } from '../lib/models'; +import type { GrpcRequest } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; diff --git a/src-web/hooks/useHttpRequest.ts b/src-web/hooks/useHttpRequest.ts index c0b072ea..e399725e 100644 --- a/src-web/hooks/useHttpRequest.ts +++ b/src-web/hooks/useHttpRequest.ts @@ -1,4 +1,4 @@ -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import { useHttpRequests } from './useHttpRequests'; export function useHttpRequest(id: string | null): HttpRequest | null { diff --git a/src-web/hooks/useHttpRequests.ts b/src-web/hooks/useHttpRequests.ts index ed467aa7..44f9fe1f 100644 --- a/src-web/hooks/useHttpRequests.ts +++ b/src-web/hooks/useHttpRequests.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; diff --git a/src-web/hooks/useHttpResponses.ts b/src-web/hooks/useHttpResponses.ts index f7407022..b77f89d3 100644 --- a/src-web/hooks/useHttpResponses.ts +++ b/src-web/hooks/useHttpResponses.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import type { HttpResponse } from '../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; export function httpResponsesQueryKey({ requestId }: { requestId: string }) { diff --git a/src-web/hooks/useImportData.tsx b/src-web/hooks/useImportData.tsx index 89ffbc5c..9585d7d2 100644 --- a/src-web/hooks/useImportData.tsx +++ b/src-web/hooks/useImportData.tsx @@ -4,7 +4,7 @@ import { FormattedError } from '../components/core/FormattedError'; import { VStack } from '../components/core/Stacks'; import { useDialog } from '../components/DialogContext'; import { ImportDataDialog } from '../components/ImportDataDialog'; -import type { Environment, Folder, GrpcRequest, HttpRequest, Workspace } from '../lib/models'; +import type { Environment, Folder, GrpcRequest, HttpRequest, Workspace } from '@yaakapp/api'; import { count } from '../lib/pluralize'; import { invokeCmd } from '../lib/tauri'; import { useActiveWorkspaceId } from './useActiveWorkspaceId'; diff --git a/src-web/hooks/useIntrospectGraphQL.ts b/src-web/hooks/useIntrospectGraphQL.ts index 824554e6..742dff37 100644 --- a/src-web/hooks/useIntrospectGraphQL.ts +++ b/src-web/hooks/useIntrospectGraphQL.ts @@ -2,7 +2,7 @@ import type { IntrospectionQuery } from 'graphql'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { buildClientSchema, getIntrospectionQuery } from '../components/core/Editor'; import { minPromiseMillis } from '../lib/minPromiseMillis'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import { getResponseBodyText } from '../lib/responseBody'; import { sendEphemeralRequest } from '../lib/sendEphemeralRequest'; import { useActiveEnvironmentId } from './useActiveEnvironmentId'; diff --git a/src-web/hooks/useLatestGrpcConnection.ts b/src-web/hooks/useLatestGrpcConnection.ts index a139c71c..a9164261 100644 --- a/src-web/hooks/useLatestGrpcConnection.ts +++ b/src-web/hooks/useLatestGrpcConnection.ts @@ -1,4 +1,4 @@ -import type { GrpcConnection } from '../lib/models'; +import type { GrpcConnection } from '@yaakapp/api'; import { useGrpcConnections } from './useGrpcConnections'; export function useLatestGrpcConnection(requestId: string | null): GrpcConnection | null { diff --git a/src-web/hooks/useLatestHttpResponse.ts b/src-web/hooks/useLatestHttpResponse.ts index 085aab80..8d6e3958 100644 --- a/src-web/hooks/useLatestHttpResponse.ts +++ b/src-web/hooks/useLatestHttpResponse.ts @@ -1,4 +1,4 @@ -import type { HttpResponse } from '../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { useHttpResponses } from './useHttpResponses'; export function useLatestHttpResponse(requestId: string | null): HttpResponse | null { diff --git a/src-web/hooks/usePinnedGrpcConnection.ts b/src-web/hooks/usePinnedGrpcConnection.ts index 9be6efd1..98b74050 100644 --- a/src-web/hooks/usePinnedGrpcConnection.ts +++ b/src-web/hooks/usePinnedGrpcConnection.ts @@ -1,4 +1,4 @@ -import type { GrpcConnection, GrpcRequest } from '../lib/models'; +import type { GrpcConnection, GrpcRequest } from '@yaakapp/api'; import { useGrpcConnections } from './useGrpcConnections'; import { useKeyValue } from './useKeyValue'; import { useLatestGrpcConnection } from './useLatestGrpcConnection'; diff --git a/src-web/hooks/usePinnedHttpResponse.ts b/src-web/hooks/usePinnedHttpResponse.ts index 56116549..e40299f5 100644 --- a/src-web/hooks/usePinnedHttpResponse.ts +++ b/src-web/hooks/usePinnedHttpResponse.ts @@ -1,4 +1,4 @@ -import type { HttpRequest, HttpResponse } from '../lib/models'; +import type { HttpRequest, HttpResponse } from '@yaakapp/api'; import { useHttpResponses } from './useHttpResponses'; import { useKeyValue } from './useKeyValue'; import { useLatestHttpResponse } from './useLatestHttpResponse'; diff --git a/src-web/hooks/useRenameRequest.tsx b/src-web/hooks/useRenameRequest.tsx index 1f1499c6..d53b681d 100644 --- a/src-web/hooks/useRenameRequest.tsx +++ b/src-web/hooks/useRenameRequest.tsx @@ -1,4 +1,5 @@ import { useMutation } from '@tanstack/react-query'; +import type { GrpcRequest, HttpRequest } from '@yaakapp/api'; import { InlineCode } from '../components/core/InlineCode'; import { usePrompt } from './usePrompt'; import { useRequests } from './useRequests'; @@ -33,9 +34,9 @@ export function useRenameRequest(requestId: string | null) { defaultValue: request.name, }); if (request.model === 'http_request') { - updateHttpRequest.mutate({ id: request.id, update: (r) => ({ ...r, name }) }); + updateHttpRequest.mutate({ id: request.id, update: (r: HttpRequest) => ({ ...r, name }) }); } else { - updateGrpcRequest.mutate({ id: request.id, update: (r) => ({ ...r, name }) }); + updateGrpcRequest.mutate({ id: request.id, update: (r: GrpcRequest) => ({ ...r, name }) }); } }, }); diff --git a/src-web/hooks/useResponseBodyBlob.ts b/src-web/hooks/useResponseBodyBlob.ts index be9ebb0c..1e421df9 100644 --- a/src-web/hooks/useResponseBodyBlob.ts +++ b/src-web/hooks/useResponseBodyBlob.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import type { HttpResponse } from '../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { getResponseBodyBlob } from '../lib/responseBody'; export function useResponseBodyBlob(response: HttpResponse) { diff --git a/src-web/hooks/useResponseBodyText.ts b/src-web/hooks/useResponseBodyText.ts index 0fe191fa..006804d7 100644 --- a/src-web/hooks/useResponseBodyText.ts +++ b/src-web/hooks/useResponseBodyText.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import type { HttpResponse } from '../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { getResponseBodyText } from '../lib/responseBody'; export function useResponseBodyText(response: HttpResponse) { diff --git a/src-web/hooks/useSaveResponse.tsx b/src-web/hooks/useSaveResponse.tsx index 8cc8a4cf..10a5d6dc 100644 --- a/src-web/hooks/useSaveResponse.tsx +++ b/src-web/hooks/useSaveResponse.tsx @@ -4,7 +4,7 @@ import mime from 'mime'; import slugify from 'slugify'; import { InlineCode } from '../components/core/InlineCode'; import { useToast } from '../components/ToastContext'; -import type { HttpResponse } from '../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { getContentTypeHeader } from '../lib/models'; import { getHttpRequest } from '../lib/store'; import { invokeCmd } from '../lib/tauri'; diff --git a/src-web/hooks/useSendAnyHttpRequest.ts b/src-web/hooks/useSendAnyHttpRequest.ts index 053867ae..0e104eff 100644 --- a/src-web/hooks/useSendAnyHttpRequest.ts +++ b/src-web/hooks/useSendAnyHttpRequest.ts @@ -2,7 +2,7 @@ import { useMutation } from '@tanstack/react-query'; import { save } from '@tauri-apps/plugin-dialog'; import slugify from 'slugify'; import { trackEvent } from '../lib/analytics'; -import type { HttpResponse } from '../lib/models'; +import type { HttpResponse } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; import { useActiveCookieJar } from './useActiveCookieJar'; import { useActiveEnvironment } from './useActiveEnvironment'; diff --git a/src-web/hooks/useSettings.ts b/src-web/hooks/useSettings.ts index ca83c112..66afbe45 100644 --- a/src-web/hooks/useSettings.ts +++ b/src-web/hooks/useSettings.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import type { Settings } from '../lib/models'; +import type { Settings } from '../lib/gen/Settings'; import { invokeCmd } from '../lib/tauri'; export function settingsQueryKey() { diff --git a/src-web/hooks/useUpdateAnyFolder.ts b/src-web/hooks/useUpdateAnyFolder.ts index 4ad57baa..643f30e3 100644 --- a/src-web/hooks/useUpdateAnyFolder.ts +++ b/src-web/hooks/useUpdateAnyFolder.ts @@ -1,5 +1,5 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import type { Folder } from '../lib/models'; +import type { Folder } from '@yaakapp/api'; import { getFolder } from '../lib/store'; import { invokeCmd } from '../lib/tauri'; import { foldersQueryKey } from './useFolders'; diff --git a/src-web/hooks/useUpdateAnyGrpcRequest.ts b/src-web/hooks/useUpdateAnyGrpcRequest.ts index 97db5d5d..4107467a 100644 --- a/src-web/hooks/useUpdateAnyGrpcRequest.ts +++ b/src-web/hooks/useUpdateAnyGrpcRequest.ts @@ -1,5 +1,5 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import type { GrpcRequest } from '../lib/models'; +import type { GrpcRequest } from '@yaakapp/api'; import { getGrpcRequest } from '../lib/store'; import { invokeCmd } from '../lib/tauri'; import { grpcRequestsQueryKey } from './useGrpcRequests'; diff --git a/src-web/hooks/useUpdateAnyHttpRequest.ts b/src-web/hooks/useUpdateAnyHttpRequest.ts index dbe8bb6b..c73fc651 100644 --- a/src-web/hooks/useUpdateAnyHttpRequest.ts +++ b/src-web/hooks/useUpdateAnyHttpRequest.ts @@ -1,5 +1,5 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import type { HttpRequest } from '../lib/models'; +import type { HttpRequest } from '@yaakapp/api'; import { getHttpRequest } from '../lib/store'; import { invokeCmd } from '../lib/tauri'; import { httpRequestsQueryKey } from './useHttpRequests'; diff --git a/src-web/hooks/useUpdateEnvironment.ts b/src-web/hooks/useUpdateEnvironment.ts index a798ca6f..7228a477 100644 --- a/src-web/hooks/useUpdateEnvironment.ts +++ b/src-web/hooks/useUpdateEnvironment.ts @@ -1,5 +1,5 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import type { Environment } from '../lib/models'; +import type { Environment } from '@yaakapp/api'; import { getEnvironment } from '../lib/store'; import { invokeCmd } from '../lib/tauri'; import { environmentsQueryKey } from './useEnvironments'; diff --git a/src-web/hooks/useUpdateWorkspace.ts b/src-web/hooks/useUpdateWorkspace.ts index cf772814..a1ed1bd3 100644 --- a/src-web/hooks/useUpdateWorkspace.ts +++ b/src-web/hooks/useUpdateWorkspace.ts @@ -1,5 +1,5 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; -import type { Workspace } from '../lib/models'; +import type { Workspace } from '@yaakapp/api'; import { getWorkspace } from '../lib/store'; import { invokeCmd } from '../lib/tauri'; import { workspacesQueryKey } from './useWorkspaces'; diff --git a/src-web/hooks/useWorkspaces.ts b/src-web/hooks/useWorkspaces.ts index e02a86d8..b200113b 100644 --- a/src-web/hooks/useWorkspaces.ts +++ b/src-web/hooks/useWorkspaces.ts @@ -1,5 +1,5 @@ import { useQuery } from '@tanstack/react-query'; -import type { Workspace } from '../lib/models'; +import type { Workspace } from '@yaakapp/api'; import { invokeCmd } from '../lib/tauri'; // eslint-disable-next-line @typescript-eslint/no-unused-vars,@typescript-eslint/ban-types @@ -12,7 +12,9 @@ export function useWorkspaces() { useQuery({ queryKey: workspacesQueryKey(), queryFn: async () => { + console.log('GETTING WORKSPACES'); const workspaces = await invokeCmd('cmd_list_workspaces'); + console.log('GOT WORKSPACES'); return workspaces as Workspace[]; }, }).data ?? [] diff --git a/src-web/lib/fallbackRequestName.ts b/src-web/lib/fallbackRequestName.ts index 9c7525e6..1ce53a73 100644 --- a/src-web/lib/fallbackRequestName.ts +++ b/src-web/lib/fallbackRequestName.ts @@ -1,4 +1,4 @@ -import type { GrpcRequest, HttpRequest } from './models'; +import type { GrpcRequest, HttpRequest } from '@yaakapp/api'; export function fallbackRequestName(r: HttpRequest | GrpcRequest | null): string { if (r == null) return ''; diff --git a/src-web/lib/gen/Cookie.ts b/src-web/lib/gen/Cookie.ts new file mode 100644 index 00000000..6d2dfc77 --- /dev/null +++ b/src-web/lib/gen/Cookie.ts @@ -0,0 +1,5 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { CookieDomain } from "./CookieDomain"; +import type { CookieExpires } from "./CookieExpires"; + +export type Cookie = { raw_cookie: string, domain: CookieDomain, expires: CookieExpires, path: [string, boolean], }; diff --git a/src-web/lib/gen/CookieDomain.ts b/src-web/lib/gen/CookieDomain.ts new file mode 100644 index 00000000..5ee87594 --- /dev/null +++ b/src-web/lib/gen/CookieDomain.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type CookieDomain = { "HostOnly": string } | { "Suffix": string } | "NotPresent" | "Empty"; diff --git a/src-web/lib/gen/CookieExpires.ts b/src-web/lib/gen/CookieExpires.ts new file mode 100644 index 00000000..1e936e38 --- /dev/null +++ b/src-web/lib/gen/CookieExpires.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type CookieExpires = { "AtUtc": string } | "SessionEnd"; diff --git a/src-web/lib/gen/CookieJar.ts b/src-web/lib/gen/CookieJar.ts new file mode 100644 index 00000000..aa67f049 --- /dev/null +++ b/src-web/lib/gen/CookieJar.ts @@ -0,0 +1,4 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { Cookie } from "./Cookie"; + +export type CookieJar = { id: string, model: "cookie_jar", createdAt: string, updatedAt: string, workspaceId: string, name: string, cookies: Array, }; diff --git a/src-web/lib/gen/Settings.ts b/src-web/lib/gen/Settings.ts new file mode 100644 index 00000000..78548f5f --- /dev/null +++ b/src-web/lib/gen/Settings.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type Settings = { id: string, model: "settings", createdAt: string, updatedAt: string, theme: string, appearance: string, themeDark: string, themeLight: string, updateChannel: string, interfaceFontSize: number, interfaceScale: number, editorFontSize: number, editorSoftWrap: boolean, openWorkspaceNewWindow: boolean | null, }; diff --git a/src-web/lib/keyValueStore.ts b/src-web/lib/keyValueStore.ts index 411967de..3fbc51c3 100644 --- a/src-web/lib/keyValueStore.ts +++ b/src-web/lib/keyValueStore.ts @@ -1,4 +1,4 @@ -import type { KeyValue } from './models'; +import type { KeyValue } from '@yaakapp/api'; import { invokeCmd } from './tauri'; export async function setKeyValue({ diff --git a/src-web/lib/models.ts b/src-web/lib/models.ts index 39021b0a..a4f696ca 100644 --- a/src-web/lib/models.ts +++ b/src-web/lib/models.ts @@ -1,17 +1,20 @@ import type { - BaseModel, - Workspace, - HttpResponse, - HttpRequest, - HttpHeader, - Folder, - GrpcRequest, - GrpcEvent, - GrpcConnection, Environment, + Folder, + GrpcConnection, + GrpcEvent, + GrpcRequest, + HttpRequest, + HttpResponse, + KeyValue, + Workspace, + HttpResponseHeader, } from '@yaakapp/api'; +import type { Cookie } from './gen/Cookie'; +import type { CookieJar } from './gen/CookieJar'; +import type { Settings } from './gen/Settings'; -export * from '@yaakapp/api'; +export type { CookieJar, Cookie, Settings }; export const BODY_TYPE_NONE = null; export const BODY_TYPE_GRAPHQL = 'graphql'; @@ -39,34 +42,6 @@ export type Model = | Environment | CookieJar; -export interface Settings extends BaseModel { - readonly model: 'settings'; - theme: string; - appearance: string; - themeLight: string; - themeDark: string; - updateChannel: string; - interfaceFontSize: number; - interfaceScale: number; - editorFontSize: number; - editorSoftWrap: boolean; - openWorkspaceNewWindow: boolean | null; -} - -export interface CookieJar extends BaseModel { - readonly model: 'cookie_jar'; - workspaceId: string; - name: string; - cookies: Cookie[]; -} - -export interface Cookie { - raw_cookie: string; - domain: { HostOnly: string } | { Suffix: string } | 'NotPresent' | 'Empty'; - expires: { AtUtc: string } | 'SessionEnd'; - path: [string, boolean]; -} - export function cookieDomain(cookie: Cookie): string { if (cookie.domain === 'NotPresent' || cookie.domain === 'Empty') { return 'n/a'; @@ -80,13 +55,6 @@ export function cookieDomain(cookie: Cookie): string { return 'unknown'; } -export interface KeyValue extends Omit { - readonly model: 'key_value'; - readonly key: string; - readonly namespace: string; - value: string; -} - export function isResponseLoading(response: HttpResponse | GrpcConnection): boolean { return response.elapsed === 0; } @@ -101,6 +69,6 @@ export function modelsEq(a: Model, b: Model) { return false; } -export function getContentTypeHeader(headers: HttpHeader[]): string | null { +export function getContentTypeHeader(headers: HttpResponseHeader[]): string | null { return headers.find((h) => h.name.toLowerCase() === 'content-type')?.value ?? null; } diff --git a/src-web/lib/responseBody.ts b/src-web/lib/responseBody.ts index 269b2306..5945d161 100644 --- a/src-web/lib/responseBody.ts +++ b/src-web/lib/responseBody.ts @@ -1,5 +1,5 @@ import { readFile, readTextFile } from '@tauri-apps/plugin-fs'; -import type { HttpResponse } from './models'; +import type { HttpResponse } from '@yaakapp/api'; export async function getResponseBodyText(response: HttpResponse): Promise { if (response.bodyPath) { diff --git a/src-web/lib/sendEphemeralRequest.ts b/src-web/lib/sendEphemeralRequest.ts index 5751f414..d007ebb8 100644 --- a/src-web/lib/sendEphemeralRequest.ts +++ b/src-web/lib/sendEphemeralRequest.ts @@ -1,4 +1,4 @@ -import type { HttpRequest, HttpResponse } from './models'; +import type { HttpRequest, HttpResponse } from '@yaakapp/api'; import { invokeCmd } from './tauri'; export async function sendEphemeralRequest( diff --git a/src-web/lib/store.ts b/src-web/lib/store.ts index e19550a8..6d876f49 100644 --- a/src-web/lib/store.ts +++ b/src-web/lib/store.ts @@ -1,12 +1,6 @@ -import type { - CookieJar, - Environment, - Folder, - GrpcRequest, - HttpRequest, - Settings, - Workspace, -} from './models'; +import type { Environment, Folder, GrpcRequest, HttpRequest, Workspace } from '@yaakapp/api'; +import type { CookieJar } from './gen/CookieJar'; +import type { Settings } from './gen/Settings'; import { invokeCmd } from './tauri'; export async function getSettings(): Promise { diff --git a/src-web/modules.d.ts b/src-web/modules.d.ts new file mode 100644 index 00000000..7c54b413 --- /dev/null +++ b/src-web/modules.d.ts @@ -0,0 +1 @@ +declare module 'format-graphql'; diff --git a/tsconfig.json b/tsconfig.json index 3745910a..05f14ac2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,6 +19,7 @@ }, "include": [ "src-web", + "src-web/modules.d.ts", "vite.config.ts" ], "references": [{ "path": "./tsconfig.node.json" }]