diff --git a/.circleci/config.yml b/.circleci/config.yml index b12c365c6..02d57b6d6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -93,7 +93,6 @@ workflows: - get-version - deployment-testing-approval - docker-build-server - - docker-build-frontend - docker-build-frontend-2 - docker-build-previews - docker-build-webhooks @@ -116,12 +115,6 @@ workflows: requires: - get-version - - docker-build-frontend: - context: *build-context - filters: *filters-build - requires: - - get-version - - docker-build-frontend-2: context: *build-context filters: *filters-build @@ -195,22 +188,6 @@ workflows: - test-server-multiregion - test-preview-service - - docker-publish-frontend: - context: *docker-hub-context - filters: *filters-publish - requires: - - docker-build-frontend - - get-version - - pre-commit - - publish-approval - - test-frontend-2 - - test-viewer - - test-objectsender - - test-server - - test-server-no-ff - - test-server-multiregion - - test-preview-service - - docker-publish-frontend-2: context: *docker-hub-context filters: *filters-publish @@ -340,7 +317,6 @@ workflows: - deployment-test-helm-chart - docker-publish-docker-compose-ingress - docker-publish-file-imports - - docker-publish-frontend - docker-publish-frontend-2 - docker-publish-monitor-container - docker-publish-previews @@ -494,6 +470,7 @@ jobs: S3_CREATE_BUCKET: 'true' REDIS_URL: 'redis://127.0.0.1:6379' S3_REGION: '' # optional, defaults to 'us-east-1' + FRONTEND_ORIGIN: 'http://127.0.0.1:8081' ENCRYPTION_KEYS_PATH: 'test/assets/automate/encryptionKeys.json' ENABLE_ALL_FFS: 'true' RATELIMITER_ENABLED: 'false' @@ -566,6 +543,7 @@ jobs: NODE_ENV: test DATABASE_URL: 'postgres://speckle:speckle@127.0.0.1:5432/speckle2_test' PGDATABASE: speckle2_test + POSTGRES_MAX_CONNECTIONS_SERVER: 20 PGUSER: speckle SESSION_SECRET: 'keyboard cat' STRATEGY_LOCAL: 'true' @@ -577,6 +555,7 @@ jobs: S3_CREATE_BUCKET: 'true' REDIS_URL: 'redis://127.0.0.1:6379' S3_REGION: '' # optional, defaults to 'us-east-1' + FRONTEND_ORIGIN: 'http://127.0.0.1:8081' ENCRYPTION_KEYS_PATH: 'test/assets/automate/encryptionKeys.json' DISABLE_ALL_FFS: 'true' RATELIMITER_ENABLED: 'false' @@ -627,6 +606,7 @@ jobs: S3_CREATE_BUCKET: 'true' REDIS_URL: 'redis://127.0.0.1:6379' S3_REGION: '' # optional, defaults to 'us-east-1' + FRONTEND_ORIGIN: 'http://127.0.0.1:8081' ENCRYPTION_KEYS_PATH: 'test/assets/automate/encryptionKeys.json' FF_BILLING_INTEGRATION_ENABLED: 'true' # These are the only different env keys: @@ -1018,11 +998,6 @@ jobs: environment: SPECKLE_SERVER_PACKAGE: server - docker-build-frontend: - <<: *build-job - environment: - SPECKLE_SERVER_PACKAGE: frontend - docker-build-frontend-2: <<: *build-job resource_class: xlarge @@ -1088,11 +1063,6 @@ jobs: environment: SPECKLE_SERVER_PACKAGE: server - docker-publish-frontend: - <<: *publish-job - environment: - SPECKLE_SERVER_PACKAGE: frontend - docker-publish-frontend-2: <<: *publish-job environment: diff --git a/.gitignore b/.gitignore index 449785fc3..72bf3f9d3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,6 @@ *node_modules packages/server/.env packages/server/dist -packages/frontend/dist -packages/frontend/profiler packages/viewer/dist packages/objectloader/dist packages/*/dist @@ -22,7 +20,6 @@ coverage/ packages/viewer/example/*.js packages/viewer/example/*.js.map -packages/frontend/schema.graphql .tool-versions packages/server/reports* diff --git a/README.md b/README.md index 0a9ef1fc4..d7ba3e224 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ This monorepo is the home of the Speckle v2 web packages: - [`packages/server`](https://github.com/specklesystems/speckle-server/blob/main/packages/server): the Server, a nodejs app. Core external dependencies are a Redis and Postgresql db. -- [`packages/frontend`](https://github.com/specklesystems/speckle-server/blob/main/packages/frontend): the Frontend, a static Vue app. +- [`packages/frontend-2`](https://github.com/specklesystems/speckle-server/blob/main/packages/frontend-2): the Frontend, a Nuxt/Vue app. - [`packages/viewer`](https://github.com/specklesystems/speckle-server/blob/main/packages/viewer): a threejs extension that allows you to display 3D data [![npm version](https://camo.githubusercontent.com/dc69232cc57b77de6554e752dd6dfc60ca0ecdfbe91bdfcbf7c7531a511ec200/68747470733a2f2f62616467652e667572792e696f2f6a732f253430737065636b6c652532467669657765722e737667)](https://www.npmjs.com/package/@speckle/viewer) - [`packages/objectloader`](https://github.com/specklesystems/speckle-server/blob/main/packages/objectloader): a small js utility class that helps you stream an object and all its sub-components from the Speckle Server API. [![npm version](https://camo.githubusercontent.com/4d4f1e38ce50aaf11b4a3ad8e01ce3eaaa561dc5fd08febbae556f52f1d41097/68747470733a2f2f62616467652e667572792e696f2f6a732f253430737065636b6c652532466f626a6563746c6f616465722e737667)](https://www.npmjs.com/package/@speckle/objectloader) - [`packages/preview-service`](https://github.com/specklesystems/speckle-server/blob/main/packages/preview-service): generates object previews for Speckle Objects headlessly. This package is meant to be called on by the server. diff --git a/docker-compose-speckle.yml b/docker-compose-speckle.yml index 715662bbb..d1f6790f9 100644 --- a/docker-compose-speckle.yml +++ b/docker-compose-speckle.yml @@ -72,7 +72,6 @@ services: FILE_SIZE_LIMIT_MB: 100 EMAIL_FROM: 'no-reply@example.org' - USE_FRONTEND_2: true FRONTEND_ORIGIN: 'http://127.0.0.1' ONBOARDING_STREAM_URL: 'https://latest.speckle.systems/projects/843d07eb10' diff --git a/docker-compose-test.yml b/docker-compose-test.yml index 05dbd79da..c3fb4ad3e 100644 --- a/docker-compose-test.yml +++ b/docker-compose-test.yml @@ -9,7 +9,6 @@ services: environment: SPECKLE_SERVER: http://127.0.0.1 # this is the canonical url SERVER_VERSION: 2 - FRONTEND_VERSION: '2' VERIFY_CERTIFICATE: '0' restart: 'no' diff --git a/package.json b/package.json index 93f04f584..fce545129 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,6 @@ "dev:minimal": "yarn workspaces foreach -pivW -j unlimited --include '{@speckle/server,@speckle/frontend-2}' run dev", "gqlgen": "yarn workspaces foreach -pivW -j unlimited --include '{@speckle/server,@speckle/frontend,@speckle/frontend-2,@speckle/dui3}' run gqlgen", "dev:server": "yarn workspace @speckle/server dev", - "dev:frontend": "yarn workspace @speckle/frontend dev", "dev:frontend-2": "yarn workspace @speckle/frontend-2 dev", "dev:shared": "yarn workspace @speckle/shared dev", "prepare": "husky install", diff --git a/packages/frontend-2/lib/auth/helpers/strategies.ts b/packages/frontend-2/lib/auth/helpers/strategies.ts index f177e8c14..666d246d3 100644 --- a/packages/frontend-2/lib/auth/helpers/strategies.ts +++ b/packages/frontend-2/lib/auth/helpers/strategies.ts @@ -1,6 +1,3 @@ -/** - * TODO: Does this need to change for new frontend? - */ export const speckleWebAppId = 'spklwebapp' export enum AuthStrategy { diff --git a/packages/frontend-2/lib/auth/services/auth.ts b/packages/frontend-2/lib/auth/services/auth.ts index 921a310e9..f8f861f8e 100644 --- a/packages/frontend-2/lib/auth/services/auth.ts +++ b/packages/frontend-2/lib/auth/services/auth.ts @@ -6,7 +6,6 @@ import { } from '~~/lib/auth/errors/errors' import { speckleWebAppId } from '~~/lib/auth/helpers/strategies' -// TODO: Should these differ from the old frontend values? const appId = speckleWebAppId const appSecret = speckleWebAppId diff --git a/packages/frontend/.browserslistrc b/packages/frontend/.browserslistrc deleted file mode 100644 index 75b6f1072..000000000 --- a/packages/frontend/.browserslistrc +++ /dev/null @@ -1 +0,0 @@ -since 2019 \ No newline at end of file diff --git a/packages/frontend/.vscode/launch.json b/packages/frontend/.vscode/launch.json deleted file mode 100644 index d0c177764..000000000 --- a/packages/frontend/.vscode/launch.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "type": "firefox", - "request": "launch", - "reAttach": true, - "name": "Launch localhost", - "url": "http://127.0.0.1:3000", - "webRoot": "${workspaceFolder}", - "sourceMaps": true, - "trace": true, - "pathMappings": [ - { - "url": "webpack:///src/main", - "path": "${workspaceFolder}/src/main" - } - ] - }, - { - "type": "chrome", - "request": "launch", - "name": "Launch Chrome against localhost", - "url": "http://127.0.0.1:3000", - "webRoot": "${workspaceFolder}", - "sourceMaps": true, - "trace": true, - "pathMappings": [ - { - "url": "webpack:///src/main", - "path": "${workspaceFolder}/src/main" - } - ] - } - ] -} diff --git a/packages/frontend/.vscode/settings.json b/packages/frontend/.vscode/settings.json deleted file mode 100644 index 82356c9f1..000000000 --- a/packages/frontend/.vscode/settings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "javascript.suggest.autoImports": true, - "typescript.suggest.autoImports": true, - "typescript.preferences.importModuleSpecifier": "non-relative", - "javascript.preferences.importModuleSpecifier": "non-relative", - "volar.completion.preferredTagNameCase": "kebab", - "vitest.disableWorkspaceWarning": true -} diff --git a/packages/frontend/Dockerfile b/packages/frontend/Dockerfile deleted file mode 100644 index 67949c017..000000000 --- a/packages/frontend/Dockerfile +++ /dev/null @@ -1,59 +0,0 @@ -# NOTE: Docker context should be set to git root directory, to include the viewer -ARG NODE_ENV=production -ARG SPECKLE_SERVER_VERSION=custom -# build stage -FROM node:18-bullseye-slim@sha256:8cc7dcd5aa06715247f8f2f258332f188d4221e2685b1a0159e4e6c3382e4918 as build-stage -ARG NODE_ENV -ARG SPECKLE_SERVER_VERSION - -ENV NODE_ENV=${NODE_ENV} - -WORKDIR /speckle-server -COPY .yarnrc.yml . -COPY .yarn ./.yarn -COPY package.json yarn.lock ./ - -# Onyl copy in the relevant package.json files for the dependencies -COPY packages/frontend-2/type-augmentations/stubs ./packages/frontend-2/type-augmentations/stubs/ -COPY packages/frontend/package.json ./packages/frontend/ -COPY packages/viewer/package.json ./packages/viewer/ -COPY packages/objectloader/package.json ./packages/objectloader/ -COPY packages/shared/package.json ./packages/shared/ - -RUN yarn workspaces focus --all - -# Onyl copy in the relevant source files for the dependencies -COPY packages/objectloader ./packages/objectloader/ -COPY packages/viewer ./packages/viewer/ -COPY packages/frontend ./packages/frontend/ -COPY packages/shared ./packages/shared/ - -# This way the foreach only builds the frontend and its deps -RUN yarn workspaces foreach -W run build - -RUN DEBIAN_FRONTEND=noninteractive \ - apt-get -q update && \ - apt-get install --no-install-recommends -y \ - gettext=0.21-4 \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# production stage -FROM bitnami/openresty:1.21.4-3-debian-11-r3@sha256:456f29ba40fb4b5591ded0666c50c5026e3e0f97397440b9c5f2246813de9ec8 as production-stage -ARG NODE_ENV -ARG SPECKLE_SERVER_VERSION - -ENV NODE_ENV=${NODE_ENV} -ENV FILE_SIZE_LIMIT_MB=100 - -COPY --from=build-stage /usr/bin/envsubst /usr/bin/envsubst - -COPY --from=build-stage /speckle-server/packages/frontend/dist /app - -COPY packages/frontend/nginx/ /opt/bitnami/openresty/nginx/ - -# prepare the environment -ENTRYPOINT ["/opt/bitnami/openresty/nginx/docker-entrypoint.sh"] - -EXPOSE 8080 -CMD ["/opt/bitnami/scripts/openresty/entrypoint.sh", "/opt/bitnami/scripts/openresty/run.sh"] diff --git a/packages/frontend/README.md b/packages/frontend/README.md deleted file mode 100644 index 90ee651ec..000000000 --- a/packages/frontend/README.md +++ /dev/null @@ -1,87 +0,0 @@ -# The Speckle Frontend App - -[![Twitter Follow](https://img.shields.io/twitter/follow/SpeckleSystems?style=social)](https://twitter.com/SpeckleSystems) [![Community forum users](https://img.shields.io/discourse/users?server=https%3A%2F%2Fspeckle.community&style=flat-square&logo=discourse&logoColor=white)](https://speckle.community) [![website](https://img.shields.io/badge/https://-speckle.systems-royalblue?style=flat-square)](https://speckle.systems) [![docs](https://img.shields.io/badge/docs-speckle.guide-orange?style=flat-square&logo=read-the-docs&logoColor=white)](https://speckle.guide/dev/) - -## Disclaimer - -We're working to stabilize the 2.0 API, and until then there will be breaking changes. - -Notes: - -- In **development** mode, the Speckle Server will proxy the frontend from `localhost:3000` to `localhost:8080`. If you don't see anything, ensure you've run `yarn serve` in the frontend package. - -- In **production** mode, the Speckle Frontend will be statically served by nginx (see the Dockerfile in the current directory). - -## Documentation - -Comprehensive developer and user documentation can be found in our: - -#### 📚 [Speckle Docs website](https://speckle.guide/dev/) - -## Project setup - -Make sure you follow the Developing and Debugging section in the project root readme. - -### Running - -Dev server with hot reload: - -``` -yarn dev -``` - -Build static build & serve it (for development, otherwise use docker image): - -``` -yarn build && yarn serve -``` - -### Apollo Client - -We're on Apollo Client v3 and Vue Apollo v4 (both the options API and composition API) in this package, so pretty much all of the latest and greatest features are there and ready to be used. - -**Note**: Do not import anything from `@apollo/client`, use `@apollo/client/core` instead! Otherwise you risk bundling in React dependencies, which we definitely do not need! - -### TypeScript - -This project also supports TypeScript, both in Vue SFCs and outside them. It's preferred that you use it when writing new code and also migrate JS files when there's a good oppurtunity to do so. - -#### TS in Vue - -1. Set ` - - diff --git a/packages/frontend/nginx/docker-entrypoint.sh b/packages/frontend/nginx/docker-entrypoint.sh deleted file mode 100755 index 67bc935fd..000000000 --- a/packages/frontend/nginx/docker-entrypoint.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -set -euo pipefail -# shellcheck disable=SC2016,SC2046 -defined_envs=$(printf '${%s} ' $(env | cut -d= -f1)) - -echo Starting nginx environment template rendering with "${defined_envs}" - -cp /opt/bitnami/openresty/nginx/mime.types /opt/bitnami/openresty/nginx/conf/mime.types -envsubst "${defined_envs}" < /opt/bitnami/openresty/nginx/templates/nginx.conf.template > /opt/bitnami/openresty/nginx/conf/nginx.conf - -echo Nginx conf rendered, starting server... -exec "$@" diff --git a/packages/frontend/nginx/mime.types b/packages/frontend/nginx/mime.types deleted file mode 100644 index 8d37c8636..000000000 --- a/packages/frontend/nginx/mime.types +++ /dev/null @@ -1,98 +0,0 @@ -types { - text/html html htm shtml; - text/css css; - text/xml xml; - image/gif gif; - image/jpeg jpeg jpg; - application/javascript js; - application/atom+xml atom; - application/rss+xml rss; - - text/mathml mml; - text/plain txt; - text/vnd.sun.j2me.app-descriptor jad; - text/vnd.wap.wml wml; - text/x-component htc; - - image/avif avif; - image/png png; - image/svg+xml svg svgz; - image/tiff tif tiff; - image/vnd.wap.wbmp wbmp; - image/webp webp; - image/x-icon ico; - image/x-jng jng; - image/x-ms-bmp bmp; - - font/woff woff; - font/woff2 woff2; - - application/java-archive jar war ear; - application/json json; - application/mac-binhex40 hqx; - application/msword doc; - application/pdf pdf; - application/postscript ps eps ai; - application/rtf rtf; - application/vnd.apple.mpegurl m3u8; - application/vnd.google-earth.kml+xml kml; - application/vnd.google-earth.kmz kmz; - application/vnd.ms-excel xls; - application/vnd.ms-fontobject eot; - application/vnd.ms-powerpoint ppt; - application/vnd.oasis.opendocument.graphics odg; - application/vnd.oasis.opendocument.presentation odp; - application/vnd.oasis.opendocument.spreadsheet ods; - application/vnd.oasis.opendocument.text odt; - application/vnd.openxmlformats-officedocument.presentationml.presentation - pptx; - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - xlsx; - application/vnd.openxmlformats-officedocument.wordprocessingml.document - docx; - application/vnd.wap.wmlc wmlc; - application/wasm wasm; - application/x-7z-compressed 7z; - application/x-cocoa cco; - application/x-java-archive-diff jardiff; - application/x-java-jnlp-file jnlp; - application/x-makeself run; - application/x-perl pl pm; - application/x-pilot prc pdb; - application/x-rar-compressed rar; - application/x-redhat-package-manager rpm; - application/x-sea sea; - application/x-shockwave-flash swf; - application/x-stuffit sit; - application/x-tcl tcl tk; - application/x-x509-ca-cert der pem crt; - application/x-xpinstall xpi; - application/xhtml+xml xhtml; - application/xspf+xml xspf; - application/zip zip; - - application/octet-stream bin exe dll; - application/octet-stream deb; - application/octet-stream dmg; - application/octet-stream iso img; - application/octet-stream msi msp msm; - - audio/midi mid midi kar; - audio/mpeg mp3; - audio/ogg ogg; - audio/x-m4a m4a; - audio/x-realaudio ra; - - video/3gpp 3gpp 3gp; - video/mp2t ts; - video/mp4 mp4; - video/mpeg mpeg mpg; - video/quicktime mov; - video/webm webm; - video/x-flv flv; - video/x-m4v m4v; - video/x-mng mng; - video/x-ms-asf asx asf; - video/x-ms-wmv wmv; - video/x-msvideo avi; -} diff --git a/packages/frontend/nginx/templates/nginx.conf.template b/packages/frontend/nginx/templates/nginx.conf.template deleted file mode 100644 index 92e6c5c53..000000000 --- a/packages/frontend/nginx/templates/nginx.conf.template +++ /dev/null @@ -1,160 +0,0 @@ -pcre_jit on; -error_log stderr info; - -events { - worker_connections 1024; -} - -http { - include mime.types; - default_type application/octet-stream; - - # move default write paths to a custom directory - # kubernetes can mount this directory and prevent writes to the root directory - # https://github.com/openresty/docker-openresty/issues/119 - client_body_temp_path /bitnami/openresty/nginx-client-body; - proxy_temp_path /bitnami/openresty/nginx-proxy; - fastcgi_temp_path /bitnami/openresty/nginx-fastcgi; - uwsgi_temp_path /bitnami/openresty/nginx-uwsgi; - scgi_temp_path /bitnami/openresty/nginx-scgi; - - log_format json_combined escape=json - '{' - '"time_local":"$time_local",' - '"remote_addr":"$remote_addr",' - '"remote_user":"$remote_user",' - '"request":"$request",' - '"status": "$status",' - '"body_bytes_sent":"$body_bytes_sent",' - '"request_time":"$request_time",' - '"http_referrer":"$http_referer",' - '"http_user_agent":"$http_user_agent"' - '}'; - - sendfile on; - keepalive_timeout 65; - access_log /dev/stdout json_combined; - - # Speckle configuration - server_tokens off; - gzip on; - gzip_disable "msie6"; - - gzip_vary on; - gzip_proxied any; - gzip_comp_level 6; - gzip_buffers 16 8k; - gzip_http_version 1.1; - gzip_min_length 256; - gzip_types - application/atom+xml - application/geo+json - application/javascript - application/x-javascript - application/json - application/ld+json - application/manifest+json - application/rdf+xml - application/rss+xml - application/xhtml+xml - application/xml - font/eot - font/otf - font/ttf - image/svg+xml - text/css - text/javascript - text/plain - text/xml; - - set_real_ip_from 103.21.244.0/22; - set_real_ip_from 103.22.200.0/22; - set_real_ip_from 103.31.4.0/22; - set_real_ip_from 104.16.0.0/13; - set_real_ip_from 104.24.0.0/14; - set_real_ip_from 108.162.192.0/18; - set_real_ip_from 131.0.72.0/22; - set_real_ip_from 141.101.64.0/18; - set_real_ip_from 162.158.0.0/15; - set_real_ip_from 172.64.0.0/13; - set_real_ip_from 173.245.48.0/20; - set_real_ip_from 188.114.96.0/20; - set_real_ip_from 190.93.240.0/20; - set_real_ip_from 197.234.240.0/22; - set_real_ip_from 198.41.128.0/17; - set_real_ip_from 2400:cb00::/32; - set_real_ip_from 2606:4700::/32; - set_real_ip_from 2803:f800::/32; - set_real_ip_from 2405:b500::/32; - set_real_ip_from 2405:8100::/32; - set_real_ip_from 2c0f:f248::/32; - set_real_ip_from 2a06:98c0::/29; - - #use any of the following two - real_ip_header CF-Connecting-IP; - #real_ip_header X-Forwarded-For; - - server { - listen 8080; - client_max_body_size 100m; - - location / { - root /app; - index index.html; - try_files $uri $uri/ /index.html; - add_header Cache-Control "no-store, no-cache, must-revalidate"; - } - - location ~* ^/(favicon.ico|logo.svg|loadingImage.png|og_image.png) { - root /app; - index index.html; - try_files $uri $uri/ /index.html; - expires 1d; - } - - location ~* ^/(js/.*|fonts/.*|(css/.*)|(img/.*)|(assets/.*)) { - root /app; - index index.html; - try_files $uri $uri/ /index.html; - expires 1y; - } - - location ~ ^/streams/.* { - default_type text/html; - content_by_lua_block { - local f = assert(io.open('/app/index.html', "rb")) - local content = f:read("*all") - f:close() - local http_host = ngx.var.http_host - - content = content:gsub('', '') - - local stream_id = ngx.var.uri:sub(10) - local img_tag = '' - - content = content:gsub('', img_tag) - - ngx.say(content) - } - } - - location ~* ^/(graphql|explorer|(auth/.*)|(objects/.*)|(preview/.*)|(api/.*)|(static/.*)) { - resolver 127.0.0.11 valid=30s; - set $upstream_speckle_server speckle-server; - client_max_body_size ${FILE_SIZE_LIMIT_MB}m; - proxy_pass http://$upstream_speckle_server:3000; - - proxy_buffering off; - proxy_request_buffering off; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } - - error_page 500 502 503 504 /50x.html; - - location = /50x.html { - root /app; - } - } -} diff --git a/packages/frontend/package.json b/packages/frontend/package.json deleted file mode 100644 index e028a6b4c..000000000 --- a/packages/frontend/package.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "name": "@speckle/frontend", - "version": "2.5.4", - "private": true, - "scripts": { - "dev": "vite", - "build": "vite build", - "serve": "vite preview --port 8080", - "profile": "vite-bundle-visualizer --output profiler/stats.html", - "lint:eslint": "eslint .", - "lint:ts": "vue-tsc --noEmit", - "lint": "yarn lint:eslint && yarn lint:ts", - "lint:ci": "yarn lint:ts", - "gqlgen": "graphql-codegen --config codegen.yml" - }, - "dependencies": { - "@apollo/client": "^3.7.0", - "@speckle/shared": "workspace:^", - "@speckle/viewer": "2.17.8", - "@tiptap/core": "^2.0.0-beta.176", - "@tiptap/extension-bold": "^2.0.0-beta.26", - "@tiptap/extension-document": "^2.0.0-beta.15", - "@tiptap/extension-hard-break": "^2.0.0-beta.30", - "@tiptap/extension-history": "^2.0.0-beta.21", - "@tiptap/extension-italic": "^2.0.0-beta.26", - "@tiptap/extension-link": "^2.0.0-beta.38", - "@tiptap/extension-mention": "^2.0.0-beta.97", - "@tiptap/extension-paragraph": "^2.0.0-beta.23", - "@tiptap/extension-placeholder": "^2.0.0-beta.48", - "@tiptap/extension-strike": "^2.0.0-beta.27", - "@tiptap/extension-text": "^2.0.0-beta.15", - "@tiptap/extension-underline": "^2.0.0-beta.23", - "@tiptap/vue-2": "^2.0.0-beta.79", - "@tryghost/content-api": "^1.5.12", - "@vue/apollo-composable": "^4.0.0-alpha.19", - "@vue/apollo-option": "^4.0.0-alpha.20", - "@vuejs-community/vue-filter-date-format": "^1.6.3", - "@vuejs-community/vue-filter-date-parse": "^1.2.0", - "@vueuse/core": "^9.13.0", - "apexcharts": "^3.33.1", - "apollo-upload-client": "^17.0.0", - "dompurify": "^2.5.4", - "graphql": "^15.0.0", - "graphql-tag": "^2.12.6", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "numeral": "^2.0.6", - "portal-vue": "^2.1.7", - "regenerator-runtime": "^0.13.9", - "subscriptions-transport-ws": "^0.11.0", - "tween": "^0.9.0", - "uuid": "^8.3.2", - "v-tooltip": "^2.0.3", - "vue": "^2.7.5", - "vue-apexcharts": "^1.6.1", - "vue-histogram-slider": "^0.3.8", - "vue-infinite-loading": "^2.4.5", - "vue-mixpanel": "1.0.7", - "vue-router": "^3.4.9", - "vue-timeago": "^5.1.2", - "vuedraggable": "^2.24.3", - "vuetify": "^2.6.10", - "vuetify-image-input": "^19.1.0" - }, - "devDependencies": { - "@graphql-codegen/cli": "^5.0.2", - "@graphql-codegen/introspection": "^4.0.3", - "@graphql-codegen/typed-document-node": "^5.0.7", - "@graphql-codegen/typescript": "^4.0.7", - "@graphql-codegen/typescript-document-nodes": "^4.0.7", - "@graphql-codegen/typescript-operations": "^4.2.1", - "@mdi/font": "^5.8.55", - "@parcel/watcher": "^2.4.1", - "@swc/core": "^1.2.222", - "@types/apollo-upload-client": "^17.0.1", - "@types/dompurify": "^2.3.3", - "@types/lodash": "^4.14.180", - "@types/mixpanel-browser": "^2.50.2", - "@types/node": "^17.0.43", - "@typescript-eslint/eslint-plugin": "^7.12.0", - "@typescript-eslint/parser": "^7.12.0", - "@vitejs/plugin-vue2": "^2.2.0", - "babel-plugin-lodash": "^3.3.4", - "eslint": "^9.4.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-vue": "^9.26.0", - "prettier": "^2.5.1", - "sass": "~1.32.6", - "ts-node": "^10.9.1", - "tsconfig-paths": "^4.0.0", - "type-fest": "^2.13.1", - "typescript": "~4.5.5", - "unplugin-vue-components": "^0.25.1", - "vite": "^5.3.4", - "vite-bundle-visualizer": "^0.7.0", - "vite-plugin-simple-gql": "^0.5.0", - "vue-tsc": "^1.8.8" - }, - "engines": { - "node": "^18.19.0" - } -} diff --git a/packages/frontend/public/favicon.ico b/packages/frontend/public/favicon.ico deleted file mode 100644 index ed7d98c11..000000000 Binary files a/packages/frontend/public/favicon.ico and /dev/null differ diff --git a/packages/frontend/public/loadingImage.png b/packages/frontend/public/loadingImage.png deleted file mode 100644 index 8c65cf7b6..000000000 Binary files a/packages/frontend/public/loadingImage.png and /dev/null differ diff --git a/packages/frontend/public/logo.svg b/packages/frontend/public/logo.svg deleted file mode 100644 index 94d42e6d0..000000000 --- a/packages/frontend/public/logo.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/packages/frontend/public/og_image.png b/packages/frontend/public/og_image.png deleted file mode 100644 index 42b5ca50a..000000000 Binary files a/packages/frontend/public/og_image.png and /dev/null differ diff --git a/packages/frontend/src/assets/404box.png b/packages/frontend/src/assets/404box.png deleted file mode 100755 index 4f56ea7be..000000000 Binary files a/packages/frontend/src/assets/404box.png and /dev/null differ diff --git a/packages/frontend/src/assets/comments.gif b/packages/frontend/src/assets/comments.gif deleted file mode 100644 index 8b42ad180..000000000 Binary files a/packages/frontend/src/assets/comments.gif and /dev/null differ diff --git a/packages/frontend/src/assets/emptybox.png b/packages/frontend/src/assets/emptybox.png deleted file mode 100755 index 399a9bb54..000000000 Binary files a/packages/frontend/src/assets/emptybox.png and /dev/null differ diff --git a/packages/frontend/src/assets/lockbox.png b/packages/frontend/src/assets/lockbox.png deleted file mode 100755 index 8ea0f3f4d..000000000 Binary files a/packages/frontend/src/assets/lockbox.png and /dev/null differ diff --git a/packages/frontend/src/assets/logo.svg b/packages/frontend/src/assets/logo.svg deleted file mode 100644 index 94d42e6d0..000000000 --- a/packages/frontend/src/assets/logo.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/packages/frontend/src/assets/onboarding-1.png b/packages/frontend/src/assets/onboarding-1.png deleted file mode 100644 index 015a87c90..000000000 Binary files a/packages/frontend/src/assets/onboarding-1.png and /dev/null differ diff --git a/packages/frontend/src/assets/onboarding-1.webp b/packages/frontend/src/assets/onboarding-1.webp deleted file mode 100644 index a1c4d3bf5..000000000 Binary files a/packages/frontend/src/assets/onboarding-1.webp and /dev/null differ diff --git a/packages/frontend/src/assets/onboarding-2.png b/packages/frontend/src/assets/onboarding-2.png deleted file mode 100644 index dcfb7dfe7..000000000 Binary files a/packages/frontend/src/assets/onboarding-2.png and /dev/null differ diff --git a/packages/frontend/src/assets/onboarding-2.webp b/packages/frontend/src/assets/onboarding-2.webp deleted file mode 100644 index 38f319a80..000000000 Binary files a/packages/frontend/src/assets/onboarding-2.webp and /dev/null differ diff --git a/packages/frontend/src/assets/onboarding-3.png b/packages/frontend/src/assets/onboarding-3.png deleted file mode 100644 index 10f52ee00..000000000 Binary files a/packages/frontend/src/assets/onboarding-3.png and /dev/null differ diff --git a/packages/frontend/src/assets/onboarding-3.webp b/packages/frontend/src/assets/onboarding-3.webp deleted file mode 100644 index d893bf208..000000000 Binary files a/packages/frontend/src/assets/onboarding-3.webp and /dev/null differ diff --git a/packages/frontend/src/assets/onboarding-4.png b/packages/frontend/src/assets/onboarding-4.png deleted file mode 100644 index a37bbcd5f..000000000 Binary files a/packages/frontend/src/assets/onboarding-4.png and /dev/null differ diff --git a/packages/frontend/src/assets/onboarding-4.webp b/packages/frontend/src/assets/onboarding-4.webp deleted file mode 100644 index a40cc3a3f..000000000 Binary files a/packages/frontend/src/assets/onboarding-4.webp and /dev/null differ diff --git a/packages/frontend/src/assets/onboarding-5.png b/packages/frontend/src/assets/onboarding-5.png deleted file mode 100644 index 383310d9e..000000000 Binary files a/packages/frontend/src/assets/onboarding-5.png and /dev/null differ diff --git a/packages/frontend/src/assets/onboarding-5.webp b/packages/frontend/src/assets/onboarding-5.webp deleted file mode 100644 index 630d4e885..000000000 Binary files a/packages/frontend/src/assets/onboarding-5.webp and /dev/null differ diff --git a/packages/frontend/src/assets/panning.gif b/packages/frontend/src/assets/panning.gif deleted file mode 100644 index 93c8eb9d8..000000000 Binary files a/packages/frontend/src/assets/panning.gif and /dev/null differ diff --git a/packages/frontend/src/assets/rotating.gif b/packages/frontend/src/assets/rotating.gif deleted file mode 100644 index cbf2f49dd..000000000 Binary files a/packages/frontend/src/assets/rotating.gif and /dev/null differ diff --git a/packages/frontend/src/assets/sectionbox.gif b/packages/frontend/src/assets/sectionbox.gif deleted file mode 100644 index f58fa867d..000000000 Binary files a/packages/frontend/src/assets/sectionbox.gif and /dev/null differ diff --git a/packages/frontend/src/assets/specklebrick.png b/packages/frontend/src/assets/specklebrick.png deleted file mode 100755 index 278859bc8..000000000 Binary files a/packages/frontend/src/assets/specklebrick.png and /dev/null differ diff --git a/packages/frontend/src/assets/splash.svg b/packages/frontend/src/assets/splash.svg deleted file mode 100644 index f4c4e3833..000000000 --- a/packages/frontend/src/assets/splash.svg +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/frontend/src/assets/zooming.gif b/packages/frontend/src/assets/zooming.gif deleted file mode 100644 index 9b7ce3a75..000000000 Binary files a/packages/frontend/src/assets/zooming.gif and /dev/null differ diff --git a/packages/frontend/src/bootstrapper.ts b/packages/frontend/src/bootstrapper.ts deleted file mode 100644 index 136dcdfcc..000000000 --- a/packages/frontend/src/bootstrapper.ts +++ /dev/null @@ -1,40 +0,0 @@ -import Vue from 'vue' -import VTooltip from 'v-tooltip' -import VueMixpanel from 'vue-mixpanel' -import PortalVue from 'portal-vue' -import { formatNumber } from '@/plugins/formatNumber' - -/** - * Global bootstrapping for the frontend app - */ - -// Filter to turn any number into a nice string like '10k', '5.5m' -// Accepts 'max' parameter to set it's formatting while being animated -Vue.filter('prettynum', formatNumber) - -// env vars injected by Vite -const enableDevMode = !!import.meta.env.FORCE_VUE_DEVTOOLS || !!import.meta.env.DEV - -Vue.config.productionTip = enableDevMode -Vue.config.devtools = enableDevMode - -Vue.use(VTooltip, { - defaultDelay: 300, - defaultBoundariesElement: document.body, - defaultHtml: false -}) - -// In highly restrictive sandboxed environments mixpanel init might fail due to document.cookie access -Vue.use(VueMixpanel, { - token: 'acd87c5a50b56df91a795e999812a3a4', - config: { - // eslint-disable-next-line camelcase - api_host: 'https://analytics.speckle.systems' - } -}) - -Vue.use(PortalVue) - -// Event hub -// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -Vue.prototype.$eventHub = new Vue() diff --git a/packages/frontend/src/config/apolloConfig.ts b/packages/frontend/src/config/apolloConfig.ts deleted file mode 100644 index ae860958e..000000000 --- a/packages/frontend/src/config/apolloConfig.ts +++ /dev/null @@ -1,300 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import Vue from 'vue' -import { createApolloProvider, ApolloProvider } from '@vue/apollo-option' -import { - ApolloClient, - ApolloLink, - InMemoryCache, - split, - TypePolicies, - from -} from '@apollo/client/core' -import { setContext } from '@apollo/client/link/context' -import { WebSocketLink } from '@apollo/client/link/ws' -import { SubscriptionClient } from 'subscriptions-transport-ws' -import { LocalStorageKeys } from '@/helpers/mainConstants' -import { createUploadLink } from 'apollo-upload-client' -import { AppLocalStorage } from '@/utils/localStorage' -import { getMainDefinition } from '@apollo/client/utilities' -import { OperationDefinitionNode, Kind } from 'graphql' -import { - buildAbstractCollectionMergeFunction, - incomingOverwritesExistingMergeFunction -} from '@/main/lib/core/helpers/apolloSetupHelper' -import { merge } from 'lodash' -import { statePolicies as commitObjectViewerStatePolicies } from '@/main/lib/viewer/commit-object-viewer/stateManagerCore' -import { Optional } from '@speckle/shared' -import { onError } from '@apollo/client/link/error' -import { registerError, isErrorState } from '@/main/lib/core/utils/appErrorStateManager' -import { isInvalidAuth } from '@/helpers/errorHelper' -import { signOut } from '@/plugins/authHelpers' - -// Name of the localStorage item -const AUTH_TOKEN = LocalStorageKeys.AuthToken -// Http endpoint -const httpEndpoint = `${window.location.origin}/graphql` -// WS endpoint -const wsEndpoint = `${window.location.origin.replace('http', 'ws')}/graphql` -// app version -const appVersion = (import.meta.env.SPECKLE_SERVER_VERSION || 'unknown') as string - -let instance: Optional = undefined - -function hasAuthToken() { - return !!AppLocalStorage.get(AUTH_TOKEN) -} - -function createCache(): InMemoryCache { - return new InMemoryCache({ - /** - * This is where you configure how various GQL fields should be read, written to or merged when new data comes in. - * If you define a merge function here, you don't need to duplicate the merge logic inside an `update()` callback - * of a fetchMore call, for example. - * - * Feel free to re-use utilities in `apolloSetupHelper` for defining merge functions or even use the ones that come from `@apollo/client/utilities`. - * - * Read more: https://www.apollographql.com/docs/react/caching/cache-field-behavior - */ - typePolicies: merge( - { - Query: { - fields: { - otherUser: { - read(original, { args, toReference }) { - if (args?.id) { - return toReference({ __typename: 'LimitedUser', id: args.id }) - } - - return original - } - }, - user: { - read(original, { args, toReference }) { - if (args?.id) { - return toReference({ __typename: 'User', id: args.id }) - } - - return original - } - }, - stream: { - read(original, { args, toReference }) { - if (args?.id) { - return toReference({ __typename: 'Stream', id: args.id }) - } - - return original - } - }, - streams: { - keyArgs: ['query'], - merge: buildAbstractCollectionMergeFunction('StreamCollection', { - checkIdentity: true - }) - } - } - }, - LimitedUser: { - fields: { - commits: { - keyArgs: false, - merge: buildAbstractCollectionMergeFunction('CommitCollection', { - checkIdentity: true - }) - } - } - }, - User: { - fields: { - timeline: { - keyArgs: ['after', 'before'], - merge: buildAbstractCollectionMergeFunction('ActivityCollection') - }, - commits: { - keyArgs: false, - merge: buildAbstractCollectionMergeFunction('CommitCollection', { - checkIdentity: true - }) - }, - favoriteStreams: { - keyArgs: false, - merge: buildAbstractCollectionMergeFunction('StreamCollection', { - checkIdentity: true - }) - } - } - }, - Stream: { - fields: { - activity: { - keyArgs: ['after', 'before', 'actionType'], - merge: buildAbstractCollectionMergeFunction('ActivityCollection') - }, - commits: { - keyArgs: false, - merge: buildAbstractCollectionMergeFunction('CommitCollection', { - checkIdentity: true - }) - }, - pendingCollaborators: { - merge: incomingOverwritesExistingMergeFunction - }, - pendingAccessRequests: { - merge: incomingOverwritesExistingMergeFunction - } - } - }, - Branch: { - fields: { - commits: { - keyArgs: false, - merge: buildAbstractCollectionMergeFunction('CommitCollection', { - checkIdentity: true - }) - } - } - }, - BranchCollection: { - merge: true - }, - ServerStats: { - merge: true - }, - WebhookEventCollection: { - merge: true - }, - ServerInfo: { - merge: true - }, - CommentThreadActivityMessage: { - merge: true - } - }, - commitObjectViewerStatePolicies - ) - }) -} - -function createWsClient(): SubscriptionClient { - return new SubscriptionClient(wsEndpoint, { - reconnect: true, - connectionParams: () => { - const authToken = AppLocalStorage.get(AUTH_TOKEN) - const Authorization = authToken ? `Bearer ${authToken}` : null - return Authorization ? { Authorization, headers: { Authorization } } : {} - } - }) -} - -function createLink(wsClient?: SubscriptionClient): ApolloLink { - // Prepare links - const httpLink = createUploadLink({ - uri: httpEndpoint - }) - const authLink = setContext(async (_, { headers }) => { - const authToken = AppLocalStorage.get(AUTH_TOKEN) - const authHeader = authToken ? { Authorization: `Bearer ${authToken}` } : {} - return { - headers: { - ...headers, - ...authHeader - } - } - }) - let link = authLink.concat(httpLink) - - // WS link - if (wsClient) { - const wsLink = new WebSocketLink(wsClient) - link = split( - ({ query }) => { - const definition = getMainDefinition(query) as OperationDefinitionNode - const { kind, operation } = definition - - return kind === Kind.OPERATION_DEFINITION && operation === 'subscription' - }, - wsLink, - link - ) - - // Stopping WS when in error state - wsClient.use([ - { - applyMiddleware: (_opt, next) => { - if (isErrorState()) { - return // never invokes next() - essentially stuck - } - - next() - } - } - ]) - } - - // Global error handling - const errorLink = onError((res) => { - const { networkError } = res - if (networkError && isInvalidAuth(networkError)) { - // Logout - void signOut() - } - - registerError() - }) - - return from([errorLink, link]) -} - -function createApolloClient() { - const cache = createCache() - const wsClient = createWsClient() - const link = createLink(wsClient) - - const apolloClient = new ApolloClient({ - link, - cache, - ssrForceFetchDelay: 100, - connectToDevTools: import.meta.env.DEV, - name: 'web', - version: appVersion - }) - - return { - apolloClient, - wsClient - } -} - -/** - * Create and set a global Vue Apollo provider instance - */ -export function createProvider(): ApolloProvider { - // Create apollo client - const { apolloClient, wsClient } = createApolloClient() - apolloClient.wsClient = hasAuthToken() ? wsClient : null - - // Create vue apollo provider - const apolloProvider = createApolloProvider({ - defaultClient: apolloClient - }) - instance = apolloProvider - - return apolloProvider -} - -export function getApolloProvider(): ApolloProvider { - if (!instance) { - throw new Error('Attempting to use unitialized global Apollo Provider') - } - - return instance -} - -export function installVueApollo(apolloProvider: ApolloProvider): void { - // Install apollo provider (it's done weirdly cause it's meant to be used with vue 3) - Vue.config.globalProperties ||= {} - Vue.prototype.$apolloProvider = apolloProvider - apolloProvider.install(Vue) -} diff --git a/packages/frontend/src/graphql/accessRequests.ts b/packages/frontend/src/graphql/accessRequests.ts deleted file mode 100644 index c8e40d40f..000000000 --- a/packages/frontend/src/graphql/accessRequests.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { basicStreamAccessRequestFieldsFragment } from '@/graphql/fragments/accessRequests' -import { gql } from '@apollo/client/core' - -export const getStreamAccessRequestQuery = gql` - query GetStreamAccessRequest($streamId: String!) { - streamAccessRequest(streamId: $streamId) { - ...BasicStreamAccessRequestFields - } - } - - ${basicStreamAccessRequestFieldsFragment} -` - -export const createStreamAccessRequestMutation = gql` - mutation CreateStreamAccessRequest($streamId: String!) { - streamAccessRequestCreate(streamId: $streamId) { - ...BasicStreamAccessRequestFields - } - } - - ${basicStreamAccessRequestFieldsFragment} -` - -export const useStreamAccessRequestMutation = gql` - mutation UseStreamAccessRequest( - $requestId: String! - $accept: Boolean! - $role: StreamRole = STREAM_CONTRIBUTOR - ) { - streamAccessRequestUse(requestId: $requestId, accept: $accept, role: $role) - } -` diff --git a/packages/frontend/src/graphql/branch.gql b/packages/frontend/src/graphql/branch.gql deleted file mode 100644 index b6ffda945..000000000 --- a/packages/frontend/src/graphql/branch.gql +++ /dev/null @@ -1,27 +0,0 @@ -query StreamWithBranch($streamId: String!, $branchName: String!, $cursor: String) { - stream(id: $streamId) { - id - name - role - branch(name: $branchName) { - id - name - description - commits(cursor: $cursor, limit: 4) { - totalCount - cursor - items { - id - authorName - authorId - authorAvatar - sourceApplication - message - referencedObject - createdAt - commentCount - } - } - } - } -} diff --git a/packages/frontend/src/graphql/branch.js b/packages/frontend/src/graphql/branch.js deleted file mode 100644 index 6ed84998c..000000000 --- a/packages/frontend/src/graphql/branch.js +++ /dev/null @@ -1,32 +0,0 @@ -import { gql } from '@apollo/client/core' - -export const branchCreatedSubscription = gql` - subscription BranchCreated($streamId: String!) { - branchCreated(streamId: $streamId) - } -` -// TODO: Reusable composable -export const streamNavBranchesQuery = gql` - query StreamAllBranches($streamId: String!, $cursor: String) { - stream(id: $streamId) { - id - branches(limit: 500, cursor: $cursor) { - totalCount - cursor - items { - id - name - description - author { - id - name - } - commits { - totalCount - } - createdAt - } - } - } - } -` diff --git a/packages/frontend/src/graphql/comments.ts b/packages/frontend/src/graphql/comments.ts deleted file mode 100644 index f9a49c9b4..000000000 --- a/packages/frontend/src/graphql/comments.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { gql } from '@apollo/client/core' - -export const COMMENT_FULL_INFO_FRAGMENT = gql` - fragment CommentFullInfo on Comment { - id - archived - authorId - text { - doc - attachments { - id - fileName - streamId - fileType - fileSize - } - } - data - screenshot - replies { - totalCount - } - resources { - resourceId - resourceType - } - createdAt - updatedAt - viewedAt - } -` diff --git a/packages/frontend/src/graphql/commit.gql b/packages/frontend/src/graphql/commit.gql deleted file mode 100644 index 14b9b8c6a..000000000 --- a/packages/frontend/src/graphql/commit.gql +++ /dev/null @@ -1,18 +0,0 @@ -query StreamCommitQuery($streamId: String!, $id: String!) { - stream(id: $streamId) { - id - name - role - commit(id: $id) { - id - message - referencedObject - authorName - authorId - authorAvatar - createdAt - branchName - sourceApplication - } - } -} diff --git a/packages/frontend/src/graphql/commits.ts b/packages/frontend/src/graphql/commits.ts deleted file mode 100644 index 34faed4ca..000000000 --- a/packages/frontend/src/graphql/commits.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { gql } from '@apollo/client/core' - -export const streamBranchesSelectorQuery = gql` - query StreamBranchesSelector($streamId: String!) { - stream(id: $streamId) { - id - branches(limit: 100) { - items { - name - } - } - } - } -` - -export const moveCommitsMutation = gql` - mutation MoveCommits($input: CommitsMoveInput!) { - commitsMove(input: $input) - } -` - -export const deleteCommitsMutation = gql` - mutation DeleteCommits($input: CommitsDeleteInput!) { - commitsDelete(input: $input) - } -` diff --git a/packages/frontend/src/graphql/fragments/accessRequests.ts b/packages/frontend/src/graphql/fragments/accessRequests.ts deleted file mode 100644 index 4cf58aa73..000000000 --- a/packages/frontend/src/graphql/fragments/accessRequests.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { limitedUserFieldsFragment } from '@/graphql/fragments/user' -import { gql } from '@apollo/client/core' - -export const basicStreamAccessRequestFieldsFragment = gql` - fragment BasicStreamAccessRequestFields on StreamAccessRequest { - id - streamId - createdAt - } -` - -export const fullStreamAccessRequestFieldsFragment = gql` - fragment FullStreamAccessRequestFields on StreamAccessRequest { - ...BasicStreamAccessRequestFields - requester { - ...LimitedUserFields - } - } - - ${limitedUserFieldsFragment} - ${basicStreamAccessRequestFieldsFragment} -` diff --git a/packages/frontend/src/graphql/fragments/activity.ts b/packages/frontend/src/graphql/fragments/activity.ts deleted file mode 100644 index 879910f3f..000000000 --- a/packages/frontend/src/graphql/fragments/activity.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { gql } from '@apollo/client/core' - -export const activityMainFieldsFragment = gql` - fragment ActivityMainFields on Activity { - id - actionType - info - userId - streamId - resourceId - resourceType - time - message - } -` - -export const limitedCommitActivityFieldsFragment = gql` - fragment LimitedCommitActivityFields on Activity { - id - info - time - userId - message - } -` diff --git a/packages/frontend/src/graphql/fragments/streams.ts b/packages/frontend/src/graphql/fragments/streams.ts deleted file mode 100644 index 78e8a0a7c..000000000 --- a/packages/frontend/src/graphql/fragments/streams.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { fullStreamAccessRequestFieldsFragment } from '@/graphql/fragments/accessRequests' -import { gql } from '@apollo/client/core' - -export const streamPendingAccessRequestsFragment = gql` - fragment StreamPendingAccessRequests on Stream { - pendingAccessRequests { - ...FullStreamAccessRequestFields - } - } - - ${fullStreamAccessRequestFieldsFragment} -` - -export const streamFileUploadFragment = gql` - fragment StreamFileUpload on FileUpload { - id - convertedCommitId - userId - convertedStatus - convertedMessage - fileName - fileType - uploadComplete - uploadDate - convertedLastUpdate - } -` diff --git a/packages/frontend/src/graphql/fragments/user.js b/packages/frontend/src/graphql/fragments/user.js deleted file mode 100644 index d8b51a458..000000000 --- a/packages/frontend/src/graphql/fragments/user.js +++ /dev/null @@ -1,38 +0,0 @@ -import { gql } from '@apollo/client/core' - -export const limitedUserFieldsFragment = gql` - fragment LimitedUserFields on LimitedUser { - id - name - bio - company - avatar - verified - } -` - -export const streamCollaboratorFieldsFragment = gql` - fragment StreamCollaboratorFields on StreamCollaborator { - id - name - role - company - avatar - serverRole - } -` - -export const usersOwnInviteFieldsFragment = gql` - fragment UsersOwnInviteFields on PendingStreamCollaborator { - id - inviteId - streamId - streamName - token - invitedBy { - ...LimitedUserFields - } - } - - ${limitedUserFieldsFragment} -` diff --git a/packages/frontend/src/graphql/generated/graphql.ts b/packages/frontend/src/graphql/generated/graphql.ts deleted file mode 100644 index 87252d296..000000000 --- a/packages/frontend/src/graphql/generated/graphql.ts +++ /dev/null @@ -1,6075 +0,0 @@ -import gql from 'graphql-tag'; -import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -export type MakeEmpty = { [_ in K]?: never }; -export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never }; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: { input: string; output: string; } - String: { input: string; output: string; } - Boolean: { input: boolean; output: boolean; } - Int: { input: number; output: number; } - Float: { input: number; output: number; } - /** The `BigInt` scalar type represents non-fractional signed whole numeric values. */ - BigInt: { input: any; output: any; } - /** A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */ - DateTime: { input: string; output: string; } - /** The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */ - JSONObject: { input: Record; output: Record; } -}; - -export type ActiveUserMutations = { - __typename?: 'ActiveUserMutations'; - emailMutations: UserEmailMutations; - /** Mark onboarding as complete */ - finishOnboarding: Scalars['Boolean']['output']; - /** Edit a user's profile */ - update: User; -}; - - -export type ActiveUserMutationsUpdateArgs = { - user: UserUpdateInput; -}; - -export type Activity = { - __typename?: 'Activity'; - actionType: Scalars['String']['output']; - id: Scalars['ID']['output']; - info: Scalars['JSONObject']['output']; - message: Scalars['String']['output']; - resourceId: Scalars['String']['output']; - resourceType: Scalars['String']['output']; - streamId?: Maybe; - time: Scalars['DateTime']['output']; - userId: Scalars['String']['output']; -}; - -export type ActivityCollection = { - __typename?: 'ActivityCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type AddDomainToWorkspaceInput = { - domain: Scalars['String']['input']; - workspaceId: Scalars['ID']['input']; -}; - -export type AdminInviteList = { - __typename?: 'AdminInviteList'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type AdminMutations = { - __typename?: 'AdminMutations'; - updateWorkspacePlan: Scalars['Boolean']['output']; -}; - - -export type AdminMutationsUpdateWorkspacePlanArgs = { - input: AdminUpdateWorkspacePlanInput; -}; - -export type AdminQueries = { - __typename?: 'AdminQueries'; - inviteList: AdminInviteList; - projectList: ProjectCollection; - serverStatistics: ServerStatistics; - userList: AdminUserList; - workspaceList: WorkspaceCollection; -}; - - -export type AdminQueriesInviteListArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; - query?: InputMaybe; -}; - - -export type AdminQueriesProjectListArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; - orderBy?: InputMaybe; - query?: InputMaybe; - visibility?: InputMaybe; -}; - - -export type AdminQueriesUserListArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; - query?: InputMaybe; - role?: InputMaybe; -}; - - -export type AdminQueriesWorkspaceListArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; - query?: InputMaybe; -}; - -export type AdminUpdateWorkspacePlanInput = { - plan: WorkspacePlans; - status: WorkspacePlanStatuses; - workspaceId: Scalars['ID']['input']; -}; - -export type AdminUserList = { - __typename?: 'AdminUserList'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type AdminUserListItem = { - __typename?: 'AdminUserListItem'; - avatar?: Maybe; - company?: Maybe; - email?: Maybe; - id: Scalars['ID']['output']; - name: Scalars['String']['output']; - role?: Maybe; - verified?: Maybe; -}; - -export type AdminUsersListCollection = { - __typename?: 'AdminUsersListCollection'; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -/** - * A representation of a registered or invited user in the admin users list. Either registeredUser - * or invitedUser will always be set, both values can't be null. - */ -export type AdminUsersListItem = { - __typename?: 'AdminUsersListItem'; - id: Scalars['String']['output']; - invitedUser?: Maybe; - registeredUser?: Maybe; -}; - -export type AdminWorkspaceJoinRequestFilter = { - status?: InputMaybe; -}; - -export type ApiToken = { - __typename?: 'ApiToken'; - createdAt: Scalars['DateTime']['output']; - id: Scalars['String']['output']; - lastChars: Scalars['String']['output']; - lastUsed: Scalars['DateTime']['output']; - lifespan: Scalars['BigInt']['output']; - name: Scalars['String']['output']; - scopes: Array>; -}; - -export type ApiTokenCreateInput = { - lifespan?: InputMaybe; - name: Scalars['String']['input']; - scopes: Array; -}; - -export type AppAuthor = { - __typename?: 'AppAuthor'; - avatar?: Maybe; - id: Scalars['String']['output']; - name: Scalars['String']['output']; -}; - -export type AppCreateInput = { - description: Scalars['String']['input']; - logo?: InputMaybe; - name: Scalars['String']['input']; - public?: InputMaybe; - redirectUrl: Scalars['String']['input']; - scopes: Array>; - termsAndConditionsLink?: InputMaybe; -}; - -export type AppTokenCreateInput = { - lifespan?: InputMaybe; - /** Optionally limit the token to only have access to specific resources */ - limitResources?: InputMaybe>; - name: Scalars['String']['input']; - scopes: Array; -}; - -export type AppUpdateInput = { - description: Scalars['String']['input']; - id: Scalars['String']['input']; - logo?: InputMaybe; - name: Scalars['String']['input']; - public?: InputMaybe; - redirectUrl: Scalars['String']['input']; - scopes: Array>; - termsAndConditionsLink?: InputMaybe; -}; - -export type ApproveWorkspaceJoinRequestInput = { - userId: Scalars['String']['input']; - workspaceId: Scalars['String']['input']; -}; - -export type ArchiveCommentInput = { - archived: Scalars['Boolean']['input']; - commentId: Scalars['String']['input']; - projectId: Scalars['String']['input']; -}; - -export type AuthStrategy = { - __typename?: 'AuthStrategy'; - color?: Maybe; - icon: Scalars['String']['output']; - id: Scalars['String']['output']; - name: Scalars['String']['output']; - url: Scalars['String']['output']; -}; - -export type AutomateAuthCodePayloadTest = { - action: Scalars['String']['input']; - code: Scalars['String']['input']; - userId: Scalars['String']['input']; - workspaceId?: InputMaybe; -}; - -export type AutomateFunction = { - __typename?: 'AutomateFunction'; - /** Only returned if user is a part of this speckle server */ - creator?: Maybe; - description: Scalars['String']['output']; - id: Scalars['ID']['output']; - isFeatured: Scalars['Boolean']['output']; - logo?: Maybe; - name: Scalars['String']['output']; - releases: AutomateFunctionReleaseCollection; - repo: BasicGitRepositoryMetadata; - /** SourceAppNames values from @speckle/shared. Empty array means - all of them */ - supportedSourceApps: Array; - tags: Array; - workspaceIds?: Maybe>; -}; - - -export type AutomateFunctionReleasesArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: InputMaybe; -}; - -export type AutomateFunctionCollection = { - __typename?: 'AutomateFunctionCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type AutomateFunctionRelease = { - __typename?: 'AutomateFunctionRelease'; - commitId: Scalars['String']['output']; - createdAt: Scalars['DateTime']['output']; - function: AutomateFunction; - functionId: Scalars['String']['output']; - id: Scalars['ID']['output']; - inputSchema?: Maybe; - versionTag: Scalars['String']['output']; -}; - -export type AutomateFunctionReleaseCollection = { - __typename?: 'AutomateFunctionReleaseCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type AutomateFunctionReleasesFilter = { - search?: InputMaybe; -}; - -export type AutomateFunctionRun = { - __typename?: 'AutomateFunctionRun'; - contextView?: Maybe; - createdAt: Scalars['DateTime']['output']; - elapsed: Scalars['Float']['output']; - /** Nullable, in case the function is not retrievable due to poor network conditions */ - function?: Maybe; - functionId?: Maybe; - functionReleaseId?: Maybe; - id: Scalars['ID']['output']; - /** AutomateTypes.ResultsSchema type from @speckle/shared */ - results?: Maybe; - status: AutomateRunStatus; - statusMessage?: Maybe; - updatedAt: Scalars['DateTime']['output']; -}; - -export type AutomateFunctionRunStatusReportInput = { - contextView?: InputMaybe; - functionRunId: Scalars['String']['input']; - projectId: Scalars['String']['input']; - /** AutomateTypes.ResultsSchema type from @speckle/shared */ - results?: InputMaybe; - status: AutomateRunStatus; - statusMessage?: InputMaybe; -}; - -export type AutomateFunctionTemplate = { - __typename?: 'AutomateFunctionTemplate'; - id: AutomateFunctionTemplateLanguage; - logo: Scalars['String']['output']; - title: Scalars['String']['output']; - url: Scalars['String']['output']; -}; - -export enum AutomateFunctionTemplateLanguage { - DotNet = 'DOT_NET', - Python = 'PYTHON', - Typescript = 'TYPESCRIPT' -} - -export type AutomateFunctionToken = { - __typename?: 'AutomateFunctionToken'; - functionId: Scalars['String']['output']; - functionToken: Scalars['String']['output']; -}; - -export type AutomateFunctionsFilter = { - /** By default we skip functions without releases. Set this to true to include them. */ - functionsWithoutReleases?: InputMaybe; - search?: InputMaybe; -}; - -export type AutomateMutations = { - __typename?: 'AutomateMutations'; - createFunction: AutomateFunction; - createFunctionWithoutVersion: AutomateFunctionToken; - updateFunction: AutomateFunction; -}; - - -export type AutomateMutationsCreateFunctionArgs = { - input: CreateAutomateFunctionInput; -}; - - -export type AutomateMutationsCreateFunctionWithoutVersionArgs = { - input: CreateAutomateFunctionWithoutVersionInput; -}; - - -export type AutomateMutationsUpdateFunctionArgs = { - input: UpdateAutomateFunctionInput; -}; - -export type AutomateRun = { - __typename?: 'AutomateRun'; - automation: Automation; - automationId: Scalars['String']['output']; - createdAt: Scalars['DateTime']['output']; - functionRuns: Array; - id: Scalars['ID']['output']; - status: AutomateRunStatus; - trigger: AutomationRunTrigger; - updatedAt: Scalars['DateTime']['output']; -}; - -export type AutomateRunCollection = { - __typename?: 'AutomateRunCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export enum AutomateRunStatus { - Canceled = 'CANCELED', - Exception = 'EXCEPTION', - Failed = 'FAILED', - Initializing = 'INITIALIZING', - Pending = 'PENDING', - Running = 'RUNNING', - Succeeded = 'SUCCEEDED', - Timeout = 'TIMEOUT' -} - -export enum AutomateRunTriggerType { - VersionCreated = 'VERSION_CREATED' -} - -export type Automation = { - __typename?: 'Automation'; - createdAt: Scalars['DateTime']['output']; - /** Only accessible to automation owners */ - creationPublicKeys: Array; - currentRevision?: Maybe; - enabled: Scalars['Boolean']['output']; - id: Scalars['ID']['output']; - isTestAutomation: Scalars['Boolean']['output']; - name: Scalars['String']['output']; - runs: AutomateRunCollection; - updatedAt: Scalars['DateTime']['output']; -}; - - -export type AutomationRunsArgs = { - cursor?: InputMaybe; - limit?: InputMaybe; -}; - -export type AutomationCollection = { - __typename?: 'AutomationCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type AutomationRevision = { - __typename?: 'AutomationRevision'; - functions: Array; - id: Scalars['ID']['output']; - triggerDefinitions: Array; -}; - -export type AutomationRevisionCreateFunctionInput = { - functionId: Scalars['String']['input']; - functionReleaseId: Scalars['String']['input']; - /** Should be encrypted from the client side */ - parameters?: InputMaybe; -}; - -export type AutomationRevisionFunction = { - __typename?: 'AutomationRevisionFunction'; - /** The secrets in parameters are redacted with six asterisks - ****** */ - parameters?: Maybe; - release: AutomateFunctionRelease; -}; - -export type AutomationRevisionTriggerDefinition = VersionCreatedTriggerDefinition; - -export type AutomationRunTrigger = VersionCreatedTrigger; - -export type BasicGitRepositoryMetadata = { - __typename?: 'BasicGitRepositoryMetadata'; - id: Scalars['ID']['output']; - name: Scalars['String']['output']; - owner: Scalars['String']['output']; - url: Scalars['String']['output']; -}; - -export enum BillingInterval { - Monthly = 'monthly', - Yearly = 'yearly' -} - -export type BlobMetadata = { - __typename?: 'BlobMetadata'; - createdAt: Scalars['DateTime']['output']; - fileHash?: Maybe; - fileName: Scalars['String']['output']; - fileSize?: Maybe; - fileType: Scalars['String']['output']; - id: Scalars['String']['output']; - streamId: Scalars['String']['output']; - uploadError?: Maybe; - uploadStatus: Scalars['Int']['output']; - userId: Scalars['String']['output']; -}; - -export type BlobMetadataCollection = { - __typename?: 'BlobMetadataCollection'; - cursor?: Maybe; - items?: Maybe>; - totalCount: Scalars['Int']['output']; - totalSize: Scalars['Int']['output']; -}; - -export type Branch = { - __typename?: 'Branch'; - /** - * All the recent activity on this branch in chronological order - * @deprecated Part of the old API surface and will be removed in the future. - */ - activity?: Maybe; - author?: Maybe; - commits?: Maybe; - createdAt?: Maybe; - description?: Maybe; - id: Scalars['String']['output']; - name: Scalars['String']['output']; -}; - - -export type BranchActivityArgs = { - actionType?: InputMaybe; - after?: InputMaybe; - before?: InputMaybe; - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -export type BranchCommitsArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - -export type BranchCollection = { - __typename?: 'BranchCollection'; - cursor?: Maybe; - items?: Maybe>; - totalCount: Scalars['Int']['output']; -}; - -export type BranchCreateInput = { - description?: InputMaybe; - name: Scalars['String']['input']; - streamId: Scalars['String']['input']; -}; - -export type BranchDeleteInput = { - id: Scalars['String']['input']; - streamId: Scalars['String']['input']; -}; - -export type BranchUpdateInput = { - description?: InputMaybe; - id: Scalars['String']['input']; - name?: InputMaybe; - streamId: Scalars['String']['input']; -}; - -export type BulkUsersRetrievalInput = { - cursor?: InputMaybe; - emails: Array; - limit?: InputMaybe; -}; - -export type CancelCheckoutSessionInput = { - sessionId: Scalars['ID']['input']; - workspaceId: Scalars['ID']['input']; -}; - -export type CheckoutSession = { - __typename?: 'CheckoutSession'; - billingInterval: BillingInterval; - createdAt: Scalars['DateTime']['output']; - id: Scalars['ID']['output']; - paymentStatus: SessionPaymentStatus; - updatedAt: Scalars['DateTime']['output']; - url: Scalars['String']['output']; - workspacePlan: PaidWorkspacePlans; -}; - -export type CheckoutSessionInput = { - billingInterval: BillingInterval; - isCreateFlow?: InputMaybe; - workspaceId: Scalars['ID']['input']; - workspacePlan: PaidWorkspacePlans; -}; - -export type Comment = { - __typename?: 'Comment'; - archived: Scalars['Boolean']['output']; - author: LimitedUser; - authorId: Scalars['String']['output']; - createdAt: Scalars['DateTime']['output']; - /** - * Legacy comment viewer data field - * @deprecated Use the new viewerState field instead - */ - data?: Maybe; - /** Whether or not comment is a reply to another comment */ - hasParent: Scalars['Boolean']['output']; - id: Scalars['String']['output']; - /** Parent thread, if there's any */ - parent?: Maybe; - /** Plain-text version of the comment text, ideal for previews */ - rawText: Scalars['String']['output']; - /** @deprecated Not actually implemented */ - reactions?: Maybe>>; - /** Gets the replies to this comment. */ - replies: CommentCollection; - /** Get authors of replies to this comment */ - replyAuthors: CommentReplyAuthorCollection; - /** Resources that this comment targets. Can be a mixture of either one stream, or multiple commits and objects. */ - resources: Array; - screenshot?: Maybe; - text: SmartTextEditorValue; - /** The time this comment was last updated. Corresponds also to the latest reply to this comment, if any. */ - updatedAt: Scalars['DateTime']['output']; - /** The last time you viewed this comment. Present only if an auth'ed request. Relevant only if a top level commit. */ - viewedAt?: Maybe; - /** Resource identifiers as defined and implemented in the Viewer of the new frontend */ - viewerResources: Array; - /** SerializedViewerState */ - viewerState?: Maybe; -}; - - -export type CommentRepliesArgs = { - cursor?: InputMaybe; - limit?: InputMaybe; -}; - - -export type CommentReplyAuthorsArgs = { - limit?: Scalars['Int']['input']; -}; - -export type CommentActivityMessage = { - __typename?: 'CommentActivityMessage'; - comment: Comment; - type: Scalars['String']['output']; -}; - -export type CommentCollection = { - __typename?: 'CommentCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type CommentContentInput = { - blobIds?: InputMaybe>; - doc?: InputMaybe; -}; - -/** Deprecated: Used by old stream-based mutations */ -export type CommentCreateInput = { - /** IDs of uploaded blobs that should be attached to this comment */ - blobIds: Array; - data: Scalars['JSONObject']['input']; - /** - * Specifies the resources this comment is linked to. There are several use cases: - * - a comment targets only one resource (commit or object) - * - a comment targets one or more resources (commits or objects) - * - a comment targets only a stream - */ - resources: Array>; - screenshot?: InputMaybe; - streamId: Scalars['String']['input']; - /** ProseMirror document object */ - text?: InputMaybe; -}; - -export type CommentDataFilters = { - __typename?: 'CommentDataFilters'; - hiddenIds?: Maybe>; - isolatedIds?: Maybe>; - passMax?: Maybe; - passMin?: Maybe; - propertyInfoKey?: Maybe; - sectionBox?: Maybe; -}; - -/** Equivalent to frontend-1's LocalFilterState */ -export type CommentDataFiltersInput = { - hiddenIds?: InputMaybe>; - isolatedIds?: InputMaybe>; - passMax?: InputMaybe; - passMin?: InputMaybe; - propertyInfoKey?: InputMaybe; - sectionBox?: InputMaybe; -}; - -/** Deprecated: Used by old stream-based mutations */ -export type CommentEditInput = { - /** IDs of uploaded blobs that should be attached to this comment */ - blobIds: Array; - id: Scalars['String']['input']; - streamId: Scalars['String']['input']; - /** ProseMirror document object */ - text?: InputMaybe; -}; - -export type CommentMutations = { - __typename?: 'CommentMutations'; - archive: Scalars['Boolean']['output']; - create: Comment; - edit: Comment; - markViewed: Scalars['Boolean']['output']; - reply: Comment; -}; - - -export type CommentMutationsArchiveArgs = { - input: ArchiveCommentInput; -}; - - -export type CommentMutationsCreateArgs = { - input: CreateCommentInput; -}; - - -export type CommentMutationsEditArgs = { - input: EditCommentInput; -}; - - -export type CommentMutationsMarkViewedArgs = { - input: MarkCommentViewedInput; -}; - - -export type CommentMutationsReplyArgs = { - input: CreateCommentReplyInput; -}; - -export type CommentReplyAuthorCollection = { - __typename?: 'CommentReplyAuthorCollection'; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type CommentThreadActivityMessage = { - __typename?: 'CommentThreadActivityMessage'; - data?: Maybe; - reply?: Maybe; - type: Scalars['String']['output']; -}; - -export type Commit = { - __typename?: 'Commit'; - /** - * All the recent activity on this commit in chronological order - * @deprecated Part of the old API surface and will be removed in the future. - */ - activity?: Maybe; - authorAvatar?: Maybe; - authorId?: Maybe; - authorName?: Maybe; - branch?: Maybe; - branchName?: Maybe; - /** - * The total number of comments for this commit. To actually get the comments, use the comments query and pass in a resource array consisting of of this commit's id. - * E.g., - * ``` - * query{ - * comments(streamId:"streamId" resources:[{resourceType: commit, resourceId:"commitId"}] ){ - * ... - * } - * ``` - * @deprecated Part of the old API surface and will be removed in the future. - */ - commentCount: Scalars['Int']['output']; - createdAt?: Maybe; - id: Scalars['String']['output']; - message?: Maybe; - parents?: Maybe>>; - referencedObject: Scalars['String']['output']; - sourceApplication?: Maybe; - /** - * Will throw an authorization error if active user isn't authorized to see it, for example, - * if a stream isn't public and the user doesn't have the appropriate rights. - */ - stream: Stream; - /** @deprecated Use the stream field instead */ - streamId?: Maybe; - /** @deprecated Use the stream field instead */ - streamName?: Maybe; - totalChildrenCount?: Maybe; -}; - - -export type CommitActivityArgs = { - actionType?: InputMaybe; - after?: InputMaybe; - before?: InputMaybe; - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - -export type CommitCollection = { - __typename?: 'CommitCollection'; - cursor?: Maybe; - items?: Maybe>; - totalCount: Scalars['Int']['output']; -}; - -export type CommitCreateInput = { - branchName: Scalars['String']['input']; - message?: InputMaybe; - objectId: Scalars['String']['input']; - parents?: InputMaybe>>; - sourceApplication?: InputMaybe; - streamId: Scalars['String']['input']; - totalChildrenCount?: InputMaybe; -}; - -export type CommitDeleteInput = { - id: Scalars['String']['input']; - streamId: Scalars['String']['input']; -}; - -export type CommitObjectViewerState = { - __typename?: 'CommitObjectViewerState'; - addingComment: Scalars['Boolean']['output']; - commentReactions: Array; - currentFilterState?: Maybe; - emojis: Array; - localFilterPropKey?: Maybe; - objectProperties?: Maybe>>; - preventCommentCollapse: Scalars['Boolean']['output']; - sectionBox?: Maybe; - selectedCommentMetaData?: Maybe; - selectedObjects?: Maybe>>; - viewerBusy: Scalars['Boolean']['output']; -}; - -export type CommitReceivedInput = { - commitId: Scalars['String']['input']; - message?: InputMaybe; - sourceApplication: Scalars['String']['input']; - streamId: Scalars['String']['input']; -}; - -export type CommitUpdateInput = { - id: Scalars['String']['input']; - message?: InputMaybe; - /** To move the commit to a different branch, please the name of the branch. */ - newBranchName?: InputMaybe; - streamId: Scalars['String']['input']; -}; - -export type CommitsDeleteInput = { - commitIds: Array; - streamId: Scalars['ID']['input']; -}; - -export type CommitsMoveInput = { - commitIds: Array; - streamId: Scalars['ID']['input']; - targetBranch: Scalars['String']['input']; -}; - -/** - * Can be used instead of a full item collection, when the implementation doesn't call for it yet. Because - * of the structure, it can be swapped out to a full item collection in the future - */ -export type CountOnlyCollection = { - __typename?: 'CountOnlyCollection'; - totalCount: Scalars['Int']['output']; -}; - -export type CreateAutomateFunctionInput = { - description: Scalars['String']['input']; - /** Base64 encoded image data string */ - logo?: InputMaybe; - name: Scalars['String']['input']; - /** GitHub organization to create the repository in */ - org?: InputMaybe; - /** SourceAppNames values from @speckle/shared */ - supportedSourceApps: Array; - tags: Array; - template: AutomateFunctionTemplateLanguage; -}; - -export type CreateAutomateFunctionWithoutVersionInput = { - description: Scalars['String']['input']; - name: Scalars['String']['input']; -}; - -export type CreateCommentInput = { - content: CommentContentInput; - projectId: Scalars['String']['input']; - /** Resources that this comment should be attached to */ - resourceIdString: Scalars['String']['input']; - screenshot?: InputMaybe; - /** - * SerializedViewerState. If omitted, comment won't render (correctly) inside the - * viewer, but will still be retrievable through the API - */ - viewerState?: InputMaybe; -}; - -export type CreateCommentReplyInput = { - content: CommentContentInput; - projectId: Scalars['String']['input']; - threadId: Scalars['String']['input']; -}; - -export type CreateModelInput = { - description?: InputMaybe; - name: Scalars['String']['input']; - projectId: Scalars['ID']['input']; -}; - -export type CreateServerRegionInput = { - description?: InputMaybe; - key: Scalars['String']['input']; - name: Scalars['String']['input']; -}; - -export type CreateUserEmailInput = { - email: Scalars['String']['input']; -}; - -export type CreateVersionInput = { - message?: InputMaybe; - modelId: Scalars['String']['input']; - objectId: Scalars['String']['input']; - parents?: InputMaybe>; - projectId: Scalars['String']['input']; - sourceApplication?: InputMaybe; - totalChildrenCount?: InputMaybe; -}; - -export type DeleteModelInput = { - id: Scalars['ID']['input']; - projectId: Scalars['ID']['input']; -}; - -export type DeleteUserEmailInput = { - id: Scalars['ID']['input']; -}; - -export type DeleteVersionsInput = { - projectId: Scalars['ID']['input']; - versionIds: Array; -}; - -export type DenyWorkspaceJoinRequestInput = { - userId: Scalars['String']['input']; - workspaceId: Scalars['String']['input']; -}; - -export enum DiscoverableStreamsSortType { - CreatedDate = 'CREATED_DATE', - FavoritesCount = 'FAVORITES_COUNT' -} - -export type DiscoverableStreamsSortingInput = { - direction: SortDirection; - type: DiscoverableStreamsSortType; -}; - -export type EditCommentInput = { - commentId: Scalars['String']['input']; - content: CommentContentInput; - projectId: Scalars['String']['input']; -}; - -export type EmailVerificationRequestInput = { - id: Scalars['ID']['input']; -}; - -export type FileUpload = { - __typename?: 'FileUpload'; - branchName: Scalars['String']['output']; - /** If present, the conversion result is stored in this commit. */ - convertedCommitId?: Maybe; - convertedLastUpdate: Scalars['DateTime']['output']; - /** Holds any errors or info. */ - convertedMessage?: Maybe; - /** 0 = queued, 1 = processing, 2 = success, 3 = error */ - convertedStatus: Scalars['Int']['output']; - /** Alias for convertedCommitId */ - convertedVersionId?: Maybe; - fileName: Scalars['String']['output']; - fileSize: Scalars['Int']['output']; - fileType: Scalars['String']['output']; - id: Scalars['String']['output']; - /** Model associated with the file upload, if it exists already */ - model?: Maybe; - /** Alias for branchName */ - modelName: Scalars['String']['output']; - /** Alias for streamId */ - projectId: Scalars['String']['output']; - streamId: Scalars['String']['output']; - uploadComplete: Scalars['Boolean']['output']; - uploadDate: Scalars['DateTime']['output']; - /** The user's id that uploaded this file. */ - userId: Scalars['String']['output']; -}; - -export type GendoAiRender = { - __typename?: 'GendoAIRender'; - camera?: Maybe; - createdAt: Scalars['DateTime']['output']; - gendoGenerationId?: Maybe; - id: Scalars['ID']['output']; - modelId: Scalars['String']['output']; - projectId: Scalars['String']['output']; - prompt: Scalars['String']['output']; - /** This is a blob id. */ - responseImage?: Maybe; - status: Scalars['String']['output']; - updatedAt: Scalars['DateTime']['output']; - user?: Maybe; - userId: Scalars['String']['output']; - versionId: Scalars['String']['output']; -}; - -export type GendoAiRenderCollection = { - __typename?: 'GendoAIRenderCollection'; - items: Array>; - totalCount: Scalars['Int']['output']; -}; - -export type GendoAiRenderInput = { - /** Base64 encoded image of the depthmap. */ - baseImage: Scalars['String']['input']; - camera: Scalars['JSONObject']['input']; - modelId: Scalars['ID']['input']; - projectId: Scalars['ID']['input']; - /** The generation prompt. */ - prompt: Scalars['String']['input']; - versionId: Scalars['ID']['input']; -}; - -export type JoinWorkspaceInput = { - workspaceId: Scalars['ID']['input']; -}; - -export type LegacyCommentViewerData = { - __typename?: 'LegacyCommentViewerData'; - /** - * An array representing a user's camera position: - * [camPos.x, camPos.y, camPos.z, camTarget.x, camTarget.y, camTarget.z, isOrtho, zoomNumber] - */ - camPos: Array; - /** Old FE LocalFilterState type */ - filters: CommentDataFilters; - /** THREE.Vector3 {x, y, z} */ - location: Scalars['JSONObject']['output']; - /** Viewer.getCurrentSectionBox(): THREE.Box3 */ - sectionBox?: Maybe; - /** Currently unused. Ideally comments should keep track of selected objects. */ - selection?: Maybe; -}; - -/** - * Limited user type, for showing public info about a user - * to another user - */ -export type LimitedUser = { - __typename?: 'LimitedUser'; - /** - * All the recent activity from this user in chronological order - * @deprecated Part of the old API surface and will be removed in the future. - */ - activity?: Maybe; - avatar?: Maybe; - bio?: Maybe; - /** - * Get public stream commits authored by the user - * @deprecated Part of the old API surface and will be removed in the future. - */ - commits?: Maybe; - company?: Maybe; - id: Scalars['ID']['output']; - name: Scalars['String']['output']; - role?: Maybe; - /** - * Returns all discoverable streams that the user is a collaborator on - * @deprecated Part of the old API surface and will be removed in the future. - */ - streams: UserStreamCollection; - /** - * The user's timeline in chronological order - * @deprecated Part of the old API surface and will be removed in the future. - */ - timeline?: Maybe; - /** - * Total amount of favorites attached to streams owned by the user - * @deprecated Part of the old API surface and will be removed in the future. - */ - totalOwnedStreamsFavorites: Scalars['Int']['output']; - verified?: Maybe; - workspaceDomainPolicyCompliant?: Maybe; - workspaceRole?: Maybe; -}; - - -/** - * Limited user type, for showing public info about a user - * to another user - */ -export type LimitedUserActivityArgs = { - actionType?: InputMaybe; - after?: InputMaybe; - before?: InputMaybe; - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -/** - * Limited user type, for showing public info about a user - * to another user - */ -export type LimitedUserCommitsArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -/** - * Limited user type, for showing public info about a user - * to another user - */ -export type LimitedUserStreamsArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -/** - * Limited user type, for showing public info about a user - * to another user - */ -export type LimitedUserTimelineArgs = { - after?: InputMaybe; - before?: InputMaybe; - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -/** - * Limited user type, for showing public info about a user - * to another user - */ -export type LimitedUserWorkspaceDomainPolicyCompliantArgs = { - workspaceId?: InputMaybe; -}; - - -/** - * Limited user type, for showing public info about a user - * to another user - */ -export type LimitedUserWorkspaceRoleArgs = { - workspaceId?: InputMaybe; -}; - -/** Workspace metadata visible to non-workspace members. */ -export type LimitedWorkspace = { - __typename?: 'LimitedWorkspace'; - /** Workspace description */ - description?: Maybe; - /** Workspace id */ - id: Scalars['ID']['output']; - /** Optional base64 encoded workspace logo image */ - logo?: Maybe; - /** Workspace name */ - name: Scalars['String']['output']; - /** Unique workspace short id. Used for navigation. */ - slug: Scalars['String']['output']; -}; - -export type MarkCommentViewedInput = { - commentId: Scalars['String']['input']; - projectId: Scalars['String']['input']; -}; - -export type MarkReceivedVersionInput = { - message?: InputMaybe; - projectId: Scalars['String']['input']; - sourceApplication: Scalars['String']['input']; - versionId: Scalars['String']['input']; -}; - -export type Model = { - __typename?: 'Model'; - author?: Maybe; - automationsStatus?: Maybe; - /** Return a model tree of children */ - childrenTree: Array; - /** All comment threads in this model */ - commentThreads: CommentCollection; - createdAt: Scalars['DateTime']['output']; - description?: Maybe; - /** The shortened/display name that doesn't include the names of parent models */ - displayName: Scalars['String']['output']; - id: Scalars['ID']['output']; - /** Full name including the names of parent models delimited by forward slashes */ - name: Scalars['String']['output']; - /** Returns a list of versions that are being created from a file import */ - pendingImportedVersions: Array; - previewUrl?: Maybe; - updatedAt: Scalars['DateTime']['output']; - version: Version; - versions: VersionCollection; -}; - - -export type ModelCommentThreadsArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -export type ModelPendingImportedVersionsArgs = { - limit?: InputMaybe; -}; - - -export type ModelVersionArgs = { - id: Scalars['String']['input']; -}; - - -export type ModelVersionsArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - -export type ModelCollection = { - __typename?: 'ModelCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type ModelMutations = { - __typename?: 'ModelMutations'; - create: Model; - delete: Scalars['Boolean']['output']; - update: Model; -}; - - -export type ModelMutationsCreateArgs = { - input: CreateModelInput; -}; - - -export type ModelMutationsDeleteArgs = { - input: DeleteModelInput; -}; - - -export type ModelMutationsUpdateArgs = { - input: UpdateModelInput; -}; - -export type ModelVersionsFilter = { - /** Make sure these specified versions are always loaded first */ - priorityIds?: InputMaybe>; - /** Only return versions specified in `priorityIds` */ - priorityIdsOnly?: InputMaybe; -}; - -export type ModelsTreeItem = { - __typename?: 'ModelsTreeItem'; - children: Array; - fullName: Scalars['String']['output']; - /** Whether or not this item has nested children models */ - hasChildren: Scalars['Boolean']['output']; - id: Scalars['ID']['output']; - /** - * Nullable cause the item can represent a parent that doesn't actually exist as a model on its own. - * E.g. A model named "foo/bar" is supposed to be a child of "foo" and will be represented as such, - * even if "foo" doesn't exist as its own model. - */ - model?: Maybe; - name: Scalars['String']['output']; - updatedAt: Scalars['DateTime']['output']; -}; - -export type ModelsTreeItemCollection = { - __typename?: 'ModelsTreeItemCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type MoveVersionsInput = { - projectId: Scalars['ID']['input']; - /** If the name references a nonexistant model, it will be created */ - targetModelName: Scalars['String']['input']; - versionIds: Array; -}; - -export type Mutation = { - __typename?: 'Mutation'; - /** The void stares back. */ - _?: Maybe; - /** Various Active User oriented mutations */ - activeUserMutations: ActiveUserMutations; - admin: AdminMutations; - adminDeleteUser: Scalars['Boolean']['output']; - /** Creates an personal api token. */ - apiTokenCreate: Scalars['String']['output']; - /** Revokes (deletes) an personal api token/app token. */ - apiTokenRevoke: Scalars['Boolean']['output']; - /** Register a new third party application. */ - appCreate: Scalars['String']['output']; - /** Deletes a thirty party application. */ - appDelete: Scalars['Boolean']['output']; - /** Revokes (de-authorizes) an application that you have previously authorized. */ - appRevokeAccess?: Maybe; - /** Create an app token. Only apps can create app tokens and they don't show up under personal access tokens. */ - appTokenCreate: Scalars['String']['output']; - /** Update an existing third party application. **Note: This will invalidate all existing tokens, refresh tokens and access codes and will require existing users to re-authorize it.** */ - appUpdate: Scalars['Boolean']['output']; - automateFunctionRunStatusReport: Scalars['Boolean']['output']; - automateMutations: AutomateMutations; - /** @deprecated Part of the old API surface and will be removed in the future. Use ModelMutations.create instead. */ - branchCreate: Scalars['String']['output']; - /** @deprecated Part of the old API surface and will be removed in the future. Use ModelMutations.delete instead. */ - branchDelete: Scalars['Boolean']['output']; - /** @deprecated Part of the old API surface and will be removed in the future. Use ModelMutations.update instead. */ - branchUpdate: Scalars['Boolean']['output']; - /** Broadcast user activity in the viewer */ - broadcastViewerUserActivity: Scalars['Boolean']['output']; - /** - * Archives a comment. - * @deprecated Use commentMutations version - */ - commentArchive: Scalars['Boolean']['output']; - /** - * Creates a comment - * @deprecated Use commentMutations version - */ - commentCreate: Scalars['String']['output']; - /** - * Edits a comment. - * @deprecated Use commentMutations version - */ - commentEdit: Scalars['Boolean']['output']; - commentMutations: CommentMutations; - /** - * Adds a reply to a comment. - * @deprecated Use commentMutations version - */ - commentReply: Scalars['String']['output']; - /** - * Flags a comment as viewed by you (the logged in user). - * @deprecated Use commentMutations version - */ - commentView: Scalars['Boolean']['output']; - /** @deprecated Part of the old API surface and will be removed in the future. Use VersionMutations.create instead. */ - commitCreate: Scalars['String']['output']; - /** @deprecated Part of the old API surface and will be removed in the future. Use VersionMutations.delete instead. */ - commitDelete: Scalars['Boolean']['output']; - /** @deprecated Part of the old API surface and will be removed in the future. Use VersionMutations.markReceived instead. */ - commitReceive: Scalars['Boolean']['output']; - /** @deprecated Part of the old API surface and will be removed in the future. Use VersionMutations.update/moveToModel instead. */ - commitUpdate: Scalars['Boolean']['output']; - /** - * Delete a batch of commits - * @deprecated Part of the old API surface and will be removed in the future. Use VersionMutations.delete instead. - */ - commitsDelete: Scalars['Boolean']['output']; - /** - * Move a batch of commits to a new branch - * @deprecated Part of the old API surface and will be removed in the future. Use VersionMutations.moveToModel instead. - */ - commitsMove: Scalars['Boolean']['output']; - /** - * Delete a pending invite - * Note: The required scope to invoke this is not given out to app or personal access tokens - */ - inviteDelete: Scalars['Boolean']['output']; - /** - * Re-send a pending invite - * Note: The required scope to invoke this is not given out to app or personal access tokens - */ - inviteResend: Scalars['Boolean']['output']; - modelMutations: ModelMutations; - /** @deprecated Part of the old API surface and will be removed in the future. */ - objectCreate: Array; - projectMutations: ProjectMutations; - /** (Re-)send the account verification e-mail */ - requestVerification: Scalars['Boolean']['output']; - requestVerificationByEmail: Scalars['Boolean']['output']; - serverInfoMutations: ServerInfoMutations; - serverInfoUpdate?: Maybe; - /** Note: The required scope to invoke this is not given out to app or personal access tokens */ - serverInviteBatchCreate: Scalars['Boolean']['output']; - /** Invite a new user to the speckle server and return the invite ID */ - serverInviteCreate: Scalars['Boolean']['output']; - /** - * Request access to a specific stream - * @deprecated Part of the old API surface and will be removed in the future. Use ProjectAccessRequestMutations.create instead. - */ - streamAccessRequestCreate: StreamAccessRequest; - /** - * Accept or decline a stream access request. Must be a stream owner to invoke this. - * @deprecated Part of the old API surface and will be removed in the future. Use ProjectAccessRequestMutations.use instead. - */ - streamAccessRequestUse: Scalars['Boolean']['output']; - /** - * Creates a new stream. - * @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.create instead. - */ - streamCreate?: Maybe; - /** - * Deletes an existing stream. - * @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.delete instead. - */ - streamDelete: Scalars['Boolean']['output']; - /** @deprecated Part of the old API surface and will be removed in the future. */ - streamFavorite?: Maybe; - /** - * Note: The required scope to invoke this is not given out to app or personal access tokens - * @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.batchCreate instead. - */ - streamInviteBatchCreate: Scalars['Boolean']['output']; - /** - * Cancel a pending stream invite. Can only be invoked by a stream owner. - * Note: The required scope to invoke this is not given out to app or personal access tokens - * @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.cancel instead. - */ - streamInviteCancel: Scalars['Boolean']['output']; - /** - * Invite a new or registered user to the specified stream - * Note: The required scope to invoke this is not given out to app or personal access tokens - * @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.create instead. - */ - streamInviteCreate: Scalars['Boolean']['output']; - /** - * Accept or decline a stream invite - * @deprecated Part of the old API surface and will be removed in the future. Use ProjectInviteMutations.use instead. - */ - streamInviteUse: Scalars['Boolean']['output']; - /** - * Remove yourself from stream collaborators (not possible for the owner) - * @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.leave instead. - */ - streamLeave: Scalars['Boolean']['output']; - /** - * Revokes the permissions of a user on a given stream. - * @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.updateRole instead. - */ - streamRevokePermission?: Maybe; - /** - * Updates an existing stream. - * @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.update instead. - */ - streamUpdate: Scalars['Boolean']['output']; - /** - * Update permissions of a user on a given stream. - * @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.updateRole instead. - */ - streamUpdatePermission?: Maybe; - /** @deprecated Part of the old API surface and will be removed in the future. Use ProjectMutations.batchDelete instead. */ - streamsDelete: Scalars['Boolean']['output']; - /** - * Used for broadcasting real time typing status in comment threads. Does not persist any info. - * @deprecated Use broadcastViewerUserActivity - */ - userCommentThreadActivityBroadcast: Scalars['Boolean']['output']; - /** Delete a user's account. */ - userDelete: Scalars['Boolean']['output']; - userNotificationPreferencesUpdate?: Maybe; - userRoleChange: Scalars['Boolean']['output']; - /** - * Edits a user's profile. - * @deprecated Use activeUserMutations version - */ - userUpdate: Scalars['Boolean']['output']; - /** - * Used for broadcasting real time chat head bubbles and status. Does not persist any info. - * @deprecated Use broadcastViewerUserActivity - */ - userViewerActivityBroadcast: Scalars['Boolean']['output']; - versionMutations: VersionMutations; - /** Creates a new webhook on a stream */ - webhookCreate: Scalars['String']['output']; - /** Deletes an existing webhook */ - webhookDelete: Scalars['String']['output']; - /** Updates an existing webhook */ - webhookUpdate: Scalars['String']['output']; - workspaceJoinRequestMutations: WorkspaceJoinRequestMutations; - workspaceMutations: WorkspaceMutations; -}; - - -export type MutationAdminDeleteUserArgs = { - userConfirmation: UserDeleteInput; -}; - - -export type MutationApiTokenCreateArgs = { - token: ApiTokenCreateInput; -}; - - -export type MutationApiTokenRevokeArgs = { - token: Scalars['String']['input']; -}; - - -export type MutationAppCreateArgs = { - app: AppCreateInput; -}; - - -export type MutationAppDeleteArgs = { - appId: Scalars['String']['input']; -}; - - -export type MutationAppRevokeAccessArgs = { - appId: Scalars['String']['input']; -}; - - -export type MutationAppTokenCreateArgs = { - token: AppTokenCreateInput; -}; - - -export type MutationAppUpdateArgs = { - app: AppUpdateInput; -}; - - -export type MutationAutomateFunctionRunStatusReportArgs = { - input: AutomateFunctionRunStatusReportInput; -}; - - -export type MutationBranchCreateArgs = { - branch: BranchCreateInput; -}; - - -export type MutationBranchDeleteArgs = { - branch: BranchDeleteInput; -}; - - -export type MutationBranchUpdateArgs = { - branch: BranchUpdateInput; -}; - - -export type MutationBroadcastViewerUserActivityArgs = { - message: ViewerUserActivityMessageInput; - projectId: Scalars['String']['input']; - resourceIdString: Scalars['String']['input']; -}; - - -export type MutationCommentArchiveArgs = { - archived?: Scalars['Boolean']['input']; - commentId: Scalars['String']['input']; - streamId: Scalars['String']['input']; -}; - - -export type MutationCommentCreateArgs = { - input: CommentCreateInput; -}; - - -export type MutationCommentEditArgs = { - input: CommentEditInput; -}; - - -export type MutationCommentReplyArgs = { - input: ReplyCreateInput; -}; - - -export type MutationCommentViewArgs = { - commentId: Scalars['String']['input']; - streamId: Scalars['String']['input']; -}; - - -export type MutationCommitCreateArgs = { - commit: CommitCreateInput; -}; - - -export type MutationCommitDeleteArgs = { - commit: CommitDeleteInput; -}; - - -export type MutationCommitReceiveArgs = { - input: CommitReceivedInput; -}; - - -export type MutationCommitUpdateArgs = { - commit: CommitUpdateInput; -}; - - -export type MutationCommitsDeleteArgs = { - input: CommitsDeleteInput; -}; - - -export type MutationCommitsMoveArgs = { - input: CommitsMoveInput; -}; - - -export type MutationInviteDeleteArgs = { - inviteId: Scalars['String']['input']; -}; - - -export type MutationInviteResendArgs = { - inviteId: Scalars['String']['input']; -}; - - -export type MutationObjectCreateArgs = { - objectInput: ObjectCreateInput; -}; - - -export type MutationRequestVerificationByEmailArgs = { - email: Scalars['String']['input']; -}; - - -export type MutationServerInfoUpdateArgs = { - info: ServerInfoUpdateInput; -}; - - -export type MutationServerInviteBatchCreateArgs = { - input: Array; -}; - - -export type MutationServerInviteCreateArgs = { - input: ServerInviteCreateInput; -}; - - -export type MutationStreamAccessRequestCreateArgs = { - streamId: Scalars['String']['input']; -}; - - -export type MutationStreamAccessRequestUseArgs = { - accept: Scalars['Boolean']['input']; - requestId: Scalars['String']['input']; - role?: StreamRole; -}; - - -export type MutationStreamCreateArgs = { - stream: StreamCreateInput; -}; - - -export type MutationStreamDeleteArgs = { - id: Scalars['String']['input']; -}; - - -export type MutationStreamFavoriteArgs = { - favorited: Scalars['Boolean']['input']; - streamId: Scalars['String']['input']; -}; - - -export type MutationStreamInviteBatchCreateArgs = { - input: Array; -}; - - -export type MutationStreamInviteCancelArgs = { - inviteId: Scalars['String']['input']; - streamId: Scalars['String']['input']; -}; - - -export type MutationStreamInviteCreateArgs = { - input: StreamInviteCreateInput; -}; - - -export type MutationStreamInviteUseArgs = { - accept: Scalars['Boolean']['input']; - streamId: Scalars['String']['input']; - token: Scalars['String']['input']; -}; - - -export type MutationStreamLeaveArgs = { - streamId: Scalars['String']['input']; -}; - - -export type MutationStreamRevokePermissionArgs = { - permissionParams: StreamRevokePermissionInput; -}; - - -export type MutationStreamUpdateArgs = { - stream: StreamUpdateInput; -}; - - -export type MutationStreamUpdatePermissionArgs = { - permissionParams: StreamUpdatePermissionInput; -}; - - -export type MutationStreamsDeleteArgs = { - ids?: InputMaybe>; -}; - - -export type MutationUserCommentThreadActivityBroadcastArgs = { - commentId: Scalars['String']['input']; - data?: InputMaybe; - streamId: Scalars['String']['input']; -}; - - -export type MutationUserDeleteArgs = { - userConfirmation: UserDeleteInput; -}; - - -export type MutationUserNotificationPreferencesUpdateArgs = { - preferences: Scalars['JSONObject']['input']; -}; - - -export type MutationUserRoleChangeArgs = { - userRoleInput: UserRoleInput; -}; - - -export type MutationUserUpdateArgs = { - user: UserUpdateInput; -}; - - -export type MutationUserViewerActivityBroadcastArgs = { - data?: InputMaybe; - resourceId: Scalars['String']['input']; - streamId: Scalars['String']['input']; -}; - - -export type MutationWebhookCreateArgs = { - webhook: WebhookCreateInput; -}; - - -export type MutationWebhookDeleteArgs = { - webhook: WebhookDeleteInput; -}; - - -export type MutationWebhookUpdateArgs = { - webhook: WebhookUpdateInput; -}; - -export type Object = { - __typename?: 'Object'; - /** @deprecated Not implemented. */ - applicationId?: Maybe; - /** - * Get any objects that this object references. In the case of commits, this will give you a commit's constituent objects. - * **NOTE**: Providing any of the two last arguments ( `query`, `orderBy` ) will trigger a different code branch that executes a much more expensive SQL query. It is not recommended to do so for basic clients that are interested in purely getting all the objects of a given commit. - */ - children: ObjectCollection; - /** - * The total number of comments for this commit. To actually get the comments, use the comments query and pass in a resource array consisting of of this object's id. - * E.g., - * ``` - * query{ - * comments(streamId:"streamId" resources:[{resourceType: object, resourceId:"objectId"}] ){ - * ... - * } - * ``` - * @deprecated Part of the old API surface and will be removed in the future. - */ - commentCount: Scalars['Int']['output']; - createdAt?: Maybe; - /** The full object, with all its props & other things. **NOTE:** If you're requesting objects for the purpose of recreating & displaying, you probably only want to request this specific field. */ - data?: Maybe; - id: Scalars['String']['output']; - speckleType?: Maybe; - totalChildrenCount?: Maybe; -}; - - -export type ObjectChildrenArgs = { - cursor?: InputMaybe; - depth?: Scalars['Int']['input']; - limit?: Scalars['Int']['input']; - orderBy?: InputMaybe; - query?: InputMaybe>; - select?: InputMaybe>>; -}; - -export type ObjectCollection = { - __typename?: 'ObjectCollection'; - cursor?: Maybe; - objects: Array; - totalCount: Scalars['Int']['output']; -}; - -export type ObjectCreateInput = { - /** The objects you want to create. */ - objects: Array>; - /** The stream against which these objects will be created. */ - streamId: Scalars['String']['input']; -}; - -export enum PaidWorkspacePlans { - Business = 'business', - Plus = 'plus', - Starter = 'starter' -} - -export type PasswordStrengthCheckFeedback = { - __typename?: 'PasswordStrengthCheckFeedback'; - suggestions: Array; - warning?: Maybe; -}; - -export type PasswordStrengthCheckResults = { - __typename?: 'PasswordStrengthCheckResults'; - /** Verbal feedback to help choose better passwords. set when score <= 2. */ - feedback: PasswordStrengthCheckFeedback; - /** - * Integer from 0-4 (useful for implementing a strength bar): - * 0 too guessable: risky password. (guesses < 10^3) - * 1 very guessable: protection from throttled online attacks. (guesses < 10^6) - * 2 somewhat guessable: protection from unthrottled online attacks. (guesses < 10^8) - * 3 safely unguessable: moderate protection from offline slow-hash scenario. (guesses < 10^10) - * 4 very unguessable: strong protection from offline slow-hash scenario. (guesses >= 10^10) - */ - score: Scalars['Int']['output']; -}; - -export type PendingStreamCollaborator = { - __typename?: 'PendingStreamCollaborator'; - id: Scalars['String']['output']; - inviteId: Scalars['String']['output']; - invitedBy: LimitedUser; - projectId: Scalars['String']['output']; - projectName: Scalars['String']['output']; - role: Scalars['String']['output']; - /** @deprecated Use projectId instead */ - streamId: Scalars['String']['output']; - /** @deprecated Use projectName instead */ - streamName: Scalars['String']['output']; - /** E-mail address or name of the invited user */ - title: Scalars['String']['output']; - /** Only available if the active user is the pending stream collaborator */ - token?: Maybe; - /** Set only if user is registered */ - user?: Maybe; -}; - -export type PendingWorkspaceCollaborator = { - __typename?: 'PendingWorkspaceCollaborator'; - /** - * E-mail address if target is unregistered or primary e-mail of target registered user - * if token was specified to retrieve this invite - */ - email?: Maybe; - id: Scalars['ID']['output']; - inviteId: Scalars['String']['output']; - invitedBy: LimitedUser; - /** Target workspace role */ - role: Scalars['String']['output']; - /** E-mail address or name of the invited user */ - title: Scalars['String']['output']; - /** - * Only available if the active user is the pending workspace collaborator or if it was already - * specified when retrieving this invite - */ - token?: Maybe; - updatedAt: Scalars['DateTime']['output']; - /** Set only if user is registered */ - user?: Maybe; - workspaceId: Scalars['String']['output']; - workspaceName: Scalars['String']['output']; - workspaceSlug: Scalars['String']['output']; -}; - -export type PendingWorkspaceCollaboratorsFilter = { - search?: InputMaybe; -}; - -export type Project = { - __typename?: 'Project'; - allowPublicComments: Scalars['Boolean']['output']; - /** Get a single automation by id. Error will be thrown if automation is not found or inaccessible. */ - automation: Automation; - automations: AutomationCollection; - blob?: Maybe; - /** Get the metadata collection of blobs stored for this stream. */ - blobs?: Maybe; - /** Get specific project comment/thread by ID */ - comment?: Maybe; - /** All comment threads in this project */ - commentThreads: ProjectCommentCollection; - createdAt: Scalars['DateTime']['output']; - description?: Maybe; - id: Scalars['ID']['output']; - /** Collaborators who have been invited, but not yet accepted. */ - invitedTeam?: Maybe>; - /** Returns a specific model by its ID */ - model: Model; - /** Retrieve a specific project model by its ID */ - modelByName: Model; - /** Return a model tree of children for the specified model name */ - modelChildrenTree: Array; - /** Returns a flat list of all models */ - models: ModelCollection; - /** - * Return's a project's models in a tree view with submodels being nested under parent models - * real or fake (e.g., with a foo/bar model, it will be nested under foo even if such a model doesn't actually exist) - */ - modelsTree: ModelsTreeItemCollection; - name: Scalars['String']['output']; - object?: Maybe; - /** Pending project access requests */ - pendingAccessRequests?: Maybe>; - /** Returns a list models that are being created from a file import */ - pendingImportedModels: Array; - /** Active user's role for this project. `null` if request is not authenticated, or the project is not explicitly shared with you. */ - role?: Maybe; - /** Source apps used in any models of this project */ - sourceApps: Array; - team: Array; - updatedAt: Scalars['DateTime']['output']; - /** Retrieve a specific project version by its ID */ - version: Version; - /** Returns a flat list of all project versions */ - versions: VersionCollection; - /** Return metadata about resources being requested in the viewer */ - viewerResources: Array; - visibility: ProjectVisibility; - webhooks: WebhookCollection; - workspace?: Maybe; - workspaceId?: Maybe; -}; - - -export type ProjectAutomationArgs = { - id: Scalars['String']['input']; -}; - - -export type ProjectAutomationsArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: InputMaybe; -}; - - -export type ProjectBlobArgs = { - id: Scalars['String']['input']; -}; - - -export type ProjectBlobsArgs = { - cursor?: InputMaybe; - limit?: InputMaybe; - query?: InputMaybe; -}; - - -export type ProjectCommentArgs = { - id: Scalars['String']['input']; -}; - - -export type ProjectCommentThreadsArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: InputMaybe; -}; - - -export type ProjectModelArgs = { - id: Scalars['String']['input']; -}; - - -export type ProjectModelByNameArgs = { - name: Scalars['String']['input']; -}; - - -export type ProjectModelChildrenTreeArgs = { - fullName: Scalars['String']['input']; -}; - - -export type ProjectModelsArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -export type ProjectModelsTreeArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -export type ProjectObjectArgs = { - id: Scalars['String']['input']; -}; - - -export type ProjectPendingImportedModelsArgs = { - limit?: InputMaybe; -}; - - -export type ProjectVersionArgs = { - id: Scalars['String']['input']; -}; - - -export type ProjectVersionsArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -export type ProjectViewerResourcesArgs = { - loadedVersionsOnly?: InputMaybe; - resourceIdString: Scalars['String']['input']; -}; - - -export type ProjectWebhooksArgs = { - id?: InputMaybe; -}; - -/** Created when a user requests to become a contributor on a project */ -export type ProjectAccessRequest = { - __typename?: 'ProjectAccessRequest'; - createdAt: Scalars['DateTime']['output']; - id: Scalars['ID']['output']; - /** Can only be selected if authed user has proper access */ - project: Project; - projectId: Scalars['String']['output']; - requester: LimitedUser; - requesterId: Scalars['String']['output']; -}; - -export type ProjectAccessRequestMutations = { - __typename?: 'ProjectAccessRequestMutations'; - /** Request access to a specific project */ - create: ProjectAccessRequest; - /** Accept or decline a project access request. Must be a project owner to invoke this. */ - use: Project; -}; - - -export type ProjectAccessRequestMutationsCreateArgs = { - projectId: Scalars['String']['input']; -}; - - -export type ProjectAccessRequestMutationsUseArgs = { - accept: Scalars['Boolean']['input']; - requestId: Scalars['String']['input']; - role?: StreamRole; -}; - -export type ProjectAutomationCreateInput = { - enabled: Scalars['Boolean']['input']; - name: Scalars['String']['input']; -}; - -export type ProjectAutomationMutations = { - __typename?: 'ProjectAutomationMutations'; - create: Automation; - createRevision: AutomationRevision; - createTestAutomation: Automation; - createTestAutomationRun: TestAutomationRun; - /** - * Trigger an automation with a fake "version created" trigger. The "version created" will - * just refer to the last version of the model. - */ - trigger: Scalars['String']['output']; - update: Automation; -}; - - -export type ProjectAutomationMutationsCreateArgs = { - input: ProjectAutomationCreateInput; -}; - - -export type ProjectAutomationMutationsCreateRevisionArgs = { - input: ProjectAutomationRevisionCreateInput; -}; - - -export type ProjectAutomationMutationsCreateTestAutomationArgs = { - input: ProjectTestAutomationCreateInput; -}; - - -export type ProjectAutomationMutationsCreateTestAutomationRunArgs = { - automationId: Scalars['ID']['input']; -}; - - -export type ProjectAutomationMutationsTriggerArgs = { - automationId: Scalars['ID']['input']; -}; - - -export type ProjectAutomationMutationsUpdateArgs = { - input: ProjectAutomationUpdateInput; -}; - -export type ProjectAutomationRevisionCreateInput = { - automationId: Scalars['ID']['input']; - functions: Array; - /** AutomateTypes.TriggerDefinitionsSchema type from @speckle/shared */ - triggerDefinitions: Scalars['JSONObject']['input']; -}; - -export type ProjectAutomationUpdateInput = { - enabled?: InputMaybe; - id: Scalars['ID']['input']; - name?: InputMaybe; -}; - -export type ProjectAutomationsUpdatedMessage = { - __typename?: 'ProjectAutomationsUpdatedMessage'; - automation?: Maybe; - automationId: Scalars['String']['output']; - /** Only set if type === CREATED_REVISION */ - revision?: Maybe; - type: ProjectAutomationsUpdatedMessageType; -}; - -export enum ProjectAutomationsUpdatedMessageType { - Created = 'CREATED', - CreatedRevision = 'CREATED_REVISION', - Updated = 'UPDATED' -} - -export type ProjectCollaborator = { - __typename?: 'ProjectCollaborator'; - id: Scalars['ID']['output']; - role: Scalars['String']['output']; - user: LimitedUser; -}; - -export type ProjectCollection = { - __typename?: 'ProjectCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type ProjectCommentCollection = { - __typename?: 'ProjectCommentCollection'; - cursor?: Maybe; - items: Array; - totalArchivedCount: Scalars['Int']['output']; - totalCount: Scalars['Int']['output']; -}; - -export type ProjectCommentsFilter = { - /** Whether or not to include archived/resolved threads */ - includeArchived?: InputMaybe; - /** - * By default if resourceIdString is set, the "versionId" part of model resource identifiers will be ignored - * and all comments of all versions of any of the referenced models will be returned. If `loadedVersionsOnly` is - * enabled, then only comment threads of loaded/referenced versions in resourceIdString will be returned. - */ - loadedVersionsOnly?: InputMaybe; - /** - * Only request comments belonging to the resources identified by this - * comma-delimited resouce string (same format that's used in the viewer URL) - */ - resourceIdString?: InputMaybe; -}; - -export type ProjectCommentsUpdatedMessage = { - __typename?: 'ProjectCommentsUpdatedMessage'; - /** Null if deleted */ - comment?: Maybe; - id: Scalars['String']['output']; - type: ProjectCommentsUpdatedMessageType; -}; - -export enum ProjectCommentsUpdatedMessageType { - Archived = 'ARCHIVED', - Created = 'CREATED', - Updated = 'UPDATED' -} - -/** Any values left null will be ignored */ -export type ProjectCreateInput = { - description?: InputMaybe; - name?: InputMaybe; - visibility?: InputMaybe; -}; - -export type ProjectFileImportUpdatedMessage = { - __typename?: 'ProjectFileImportUpdatedMessage'; - /** Upload ID */ - id: Scalars['String']['output']; - type: ProjectFileImportUpdatedMessageType; - upload: FileUpload; -}; - -export enum ProjectFileImportUpdatedMessageType { - Created = 'CREATED', - Updated = 'UPDATED' -} - -export type ProjectInviteCreateInput = { - /** Either this or userId must be filled */ - email?: InputMaybe; - /** Defaults to the contributor role, if not specified */ - role?: InputMaybe; - /** Can only be specified if guest mode is on or if the user is an admin */ - serverRole?: InputMaybe; - /** Either this or email must be filled */ - userId?: InputMaybe; -}; - -export type ProjectInviteMutations = { - __typename?: 'ProjectInviteMutations'; - /** Batch invite to project */ - batchCreate: Project; - /** Cancel a pending stream invite. Can only be invoked by a project owner. */ - cancel: Project; - /** Invite a new or registered user to be a project collaborator. Can only be invoked by a project owner. */ - create: Project; - /** - * Create invite(-s) for a project in a workspace. Unlike the base create() mutation, this allows - * configuring the workspace role. - */ - createForWorkspace: Project; - /** Accept or decline a project invite */ - use: Scalars['Boolean']['output']; -}; - - -export type ProjectInviteMutationsBatchCreateArgs = { - input: Array; - projectId: Scalars['ID']['input']; -}; - - -export type ProjectInviteMutationsCancelArgs = { - inviteId: Scalars['String']['input']; - projectId: Scalars['ID']['input']; -}; - - -export type ProjectInviteMutationsCreateArgs = { - input: ProjectInviteCreateInput; - projectId: Scalars['ID']['input']; -}; - - -export type ProjectInviteMutationsCreateForWorkspaceArgs = { - inputs: Array; - projectId: Scalars['ID']['input']; -}; - - -export type ProjectInviteMutationsUseArgs = { - input: ProjectInviteUseInput; -}; - -export type ProjectInviteUseInput = { - accept: Scalars['Boolean']['input']; - projectId: Scalars['ID']['input']; - token: Scalars['String']['input']; -}; - -export type ProjectModelsFilter = { - /** Filter by IDs of contributors who participated in models */ - contributors?: InputMaybe>; - /** Excldue models w/ the specified IDs */ - excludeIds?: InputMaybe>; - /** Only select models w/ the specified IDs */ - ids?: InputMaybe>; - /** Filter out models that don't have any versions */ - onlyWithVersions?: InputMaybe; - /** Filter by model names */ - search?: InputMaybe; - /** Filter by source apps used in models */ - sourceApps?: InputMaybe>; -}; - -export type ProjectModelsTreeFilter = { - /** Filter by IDs of contributors who participated in models */ - contributors?: InputMaybe>; - /** Search for specific models. If used, tree items from different levels may be mixed. */ - search?: InputMaybe; - /** Filter by source apps used in models */ - sourceApps?: InputMaybe>; -}; - -export type ProjectModelsUpdatedMessage = { - __typename?: 'ProjectModelsUpdatedMessage'; - /** Model ID */ - id: Scalars['String']['output']; - /** Null if model was deleted */ - model?: Maybe; - type: ProjectModelsUpdatedMessageType; -}; - -export enum ProjectModelsUpdatedMessageType { - Created = 'CREATED', - Deleted = 'DELETED', - Updated = 'UPDATED' -} - -export type ProjectMutations = { - __typename?: 'ProjectMutations'; - /** Access request related mutations */ - accessRequestMutations: ProjectAccessRequestMutations; - automationMutations: ProjectAutomationMutations; - /** Batch delete projects */ - batchDelete: Scalars['Boolean']['output']; - /** Create new project */ - create: Project; - /** - * Create onboarding/tutorial project. If one is already created for the active user, that - * one will be returned instead. - */ - createForOnboarding: Project; - /** Delete an existing project */ - delete: Scalars['Boolean']['output']; - /** Invite related mutations */ - invites: ProjectInviteMutations; - /** Leave a project. Only possible if you're not the last remaining owner. */ - leave: Scalars['Boolean']['output']; - /** Updates an existing project */ - update: Project; - /** Update role for a collaborator */ - updateRole: Project; -}; - - -export type ProjectMutationsAutomationMutationsArgs = { - projectId: Scalars['ID']['input']; -}; - - -export type ProjectMutationsBatchDeleteArgs = { - ids: Array; -}; - - -export type ProjectMutationsCreateArgs = { - input?: InputMaybe; -}; - - -export type ProjectMutationsDeleteArgs = { - id: Scalars['String']['input']; -}; - - -export type ProjectMutationsLeaveArgs = { - id: Scalars['String']['input']; -}; - - -export type ProjectMutationsUpdateArgs = { - update: ProjectUpdateInput; -}; - - -export type ProjectMutationsUpdateRoleArgs = { - input: ProjectUpdateRoleInput; -}; - -export type ProjectPendingModelsUpdatedMessage = { - __typename?: 'ProjectPendingModelsUpdatedMessage'; - /** Upload ID */ - id: Scalars['String']['output']; - model: FileUpload; - type: ProjectPendingModelsUpdatedMessageType; -}; - -export enum ProjectPendingModelsUpdatedMessageType { - Created = 'CREATED', - Updated = 'UPDATED' -} - -export type ProjectPendingVersionsUpdatedMessage = { - __typename?: 'ProjectPendingVersionsUpdatedMessage'; - /** Upload ID */ - id: Scalars['String']['output']; - type: ProjectPendingVersionsUpdatedMessageType; - version: FileUpload; -}; - -export enum ProjectPendingVersionsUpdatedMessageType { - Created = 'CREATED', - Updated = 'UPDATED' -} - -export type ProjectRole = { - __typename?: 'ProjectRole'; - project: Project; - role: Scalars['String']['output']; -}; - -export type ProjectTestAutomationCreateInput = { - functionId: Scalars['String']['input']; - modelId: Scalars['String']['input']; - name: Scalars['String']['input']; -}; - -export type ProjectTriggeredAutomationsStatusUpdatedMessage = { - __typename?: 'ProjectTriggeredAutomationsStatusUpdatedMessage'; - model: Model; - project: Project; - run: AutomateRun; - type: ProjectTriggeredAutomationsStatusUpdatedMessageType; - version: Version; -}; - -export enum ProjectTriggeredAutomationsStatusUpdatedMessageType { - RunCreated = 'RUN_CREATED', - RunUpdated = 'RUN_UPDATED' -} - -/** Any values left null will be ignored, so only set the properties that you want updated */ -export type ProjectUpdateInput = { - allowPublicComments?: InputMaybe; - description?: InputMaybe; - id: Scalars['ID']['input']; - name?: InputMaybe; - visibility?: InputMaybe; -}; - -export type ProjectUpdateRoleInput = { - projectId: Scalars['String']['input']; - /** Leave role as null to revoke access entirely */ - role?: InputMaybe; - userId: Scalars['String']['input']; -}; - -export type ProjectUpdatedMessage = { - __typename?: 'ProjectUpdatedMessage'; - /** Project ID */ - id: Scalars['String']['output']; - /** Project entity, null if project was deleted */ - project?: Maybe; - /** Message type */ - type: ProjectUpdatedMessageType; -}; - -export enum ProjectUpdatedMessageType { - Deleted = 'DELETED', - Updated = 'UPDATED' -} - -export type ProjectVersionsPreviewGeneratedMessage = { - __typename?: 'ProjectVersionsPreviewGeneratedMessage'; - objectId: Scalars['String']['output']; - projectId: Scalars['String']['output']; - versionId: Scalars['String']['output']; -}; - -export type ProjectVersionsUpdatedMessage = { - __typename?: 'ProjectVersionsUpdatedMessage'; - /** Version ID */ - id: Scalars['String']['output']; - /** Version's model ID */ - modelId: Scalars['String']['output']; - type: ProjectVersionsUpdatedMessageType; - /** Null if version was deleted */ - version?: Maybe; -}; - -export enum ProjectVersionsUpdatedMessageType { - Created = 'CREATED', - Deleted = 'DELETED', - Updated = 'UPDATED' -} - -export enum ProjectVisibility { - Private = 'PRIVATE', - Public = 'PUBLIC', - Unlisted = 'UNLISTED' -} - -export type Query = { - __typename?: 'Query'; - /** Stare into the void. */ - _?: Maybe; - /** Gets the profile of the authenticated user or null if not authenticated */ - activeUser?: Maybe; - admin: AdminQueries; - /** - * All the streams of the server. Available to admins only. - * @deprecated use admin.projectList instead - */ - adminStreams?: Maybe; - /** - * Get all (or search for specific) users, registered or invited, from the server in a paginated view. - * The query looks for matches in name, company and email. - * @deprecated use admin.UserList instead - */ - adminUsers?: Maybe; - /** Gets a specific app from the server. */ - app?: Maybe; - /** - * Returns all the publicly available apps on this server. - * @deprecated Part of the old API surface and will be removed in the future. - */ - apps?: Maybe>>; - /** If user is authenticated using an app token, this will describe the app */ - authenticatedAsApp?: Maybe; - /** Get a single automate function by id. Error will be thrown if function is not found or inaccessible. */ - automateFunction: AutomateFunction; - automateFunctions: AutomateFunctionCollection; - /** Part of the automation/function creation handshake mechanism */ - automateValidateAuthCode: Scalars['Boolean']['output']; - /** @deprecated Part of the old API surface and will be removed in the future. Use Project.comment instead. */ - comment?: Maybe; - /** - * This query can be used in the following ways: - * - get all the comments for a stream: **do not pass in any resource identifiers**. - * - get the comments targeting any of a set of provided resources (comments/objects): **pass in an array of resources.** - * @deprecated Use Project/Version/Model 'commentThreads' fields instead - */ - comments?: Maybe; - /** Commit/Object viewer state (local-only) */ - commitObjectViewerState: CommitObjectViewerState; - /** - * All of the discoverable streams of the server - * @deprecated Part of the old API surface and will be removed in the future. - */ - discoverableStreams?: Maybe; - /** Get the (limited) profile information of another server user */ - otherUser?: Maybe; - /** - * Find a specific project. Will throw an authorization error if active user isn't authorized - * to see it, for example, if a project isn't public and the user doesn't have the appropriate rights. - */ - project: Project; - /** - * Look for an invitation to a project, for the current user (authed or not). If token - * isn't specified, the server will look for any valid invite. - */ - projectInvite?: Maybe; - serverInfo: ServerInfo; - /** Receive metadata about an invite by the invite token */ - serverInviteByToken?: Maybe; - /** @deprecated use admin.serverStatistics instead */ - serverStats: ServerStats; - /** - * Returns a specific stream. Will throw an authorization error if active user isn't authorized - * to see it, for example, if a stream isn't public and the user doesn't have the appropriate rights. - * @deprecated Part of the old API surface and will be removed in the future. Use Query.project instead. - */ - stream?: Maybe; - /** - * Get authed user's stream access request - * @deprecated Part of the old API surface and will be removed in the future. Use User.projectAccessRequest instead. - */ - streamAccessRequest?: Maybe; - /** - * Look for an invitation to a stream, for the current user (authed or not). If token - * isn't specified, the server will look for any valid invite. - * @deprecated Part of the old API surface and will be removed in the future. Use Query.projectInvite instead. - */ - streamInvite?: Maybe; - /** - * Get all invitations to streams that the active user has - * @deprecated Part of the old API surface and will be removed in the future. Use User.projectInvites instead. - */ - streamInvites: Array; - /** - * Returns all streams that the active user is a collaborator on. - * Pass in the `query` parameter to search by name, description or ID. - * @deprecated Part of the old API surface and will be removed in the future. Use User.projects instead. - */ - streams?: Maybe; - /** - * Gets the profile of a user. If no id argument is provided, will return the current authenticated user's profile (as extracted from the authorization header). - * @deprecated To be removed in the near future! Use 'activeUser' to get info about the active user or 'otherUser' to get info about another user. - */ - user?: Maybe; - /** - * Validate password strength - * @deprecated Part of the old API surface and will be removed in the future. - */ - userPwdStrength: PasswordStrengthCheckResults; - /** - * Search for users and return limited metadata about them, if you have the server:user role. - * The query looks for matches in name & email - * @deprecated Use users() instead. - */ - userSearch: UserSearchResultCollection; - /** Look up server users */ - users: UserSearchResultCollection; - /** Look up server users with a collection of emails */ - usersByEmail: Array>; - /** Validates the slug, to make sure it contains only valid characters and its not taken. */ - validateWorkspaceSlug: Scalars['Boolean']['output']; - workspace: Workspace; - workspaceBySlug: Workspace; - /** - * Look for an invitation to a workspace, for the current user (authed or not). - * - * If token is specified, it will return the corresponding invite even if it belongs to a different user. - * - * Either token or workspaceId must be specified, or both - */ - workspaceInvite?: Maybe; - workspacePricingPlans: Scalars['JSONObject']['output']; - /** Find workspaces a given user email can use SSO to sign with */ - workspaceSsoByEmail: Array; -}; - - -export type QueryAdminStreamsArgs = { - limit?: InputMaybe; - offset?: InputMaybe; - orderBy?: InputMaybe; - query?: InputMaybe; - visibility?: InputMaybe; -}; - - -export type QueryAdminUsersArgs = { - limit?: Scalars['Int']['input']; - offset?: Scalars['Int']['input']; - query?: InputMaybe; -}; - - -export type QueryAppArgs = { - id: Scalars['String']['input']; -}; - - -export type QueryAutomateFunctionArgs = { - id: Scalars['ID']['input']; -}; - - -export type QueryAutomateFunctionsArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: InputMaybe; -}; - - -export type QueryAutomateValidateAuthCodeArgs = { - payload: AutomateAuthCodePayloadTest; -}; - - -export type QueryCommentArgs = { - id: Scalars['String']['input']; - streamId: Scalars['String']['input']; -}; - - -export type QueryCommentsArgs = { - archived?: Scalars['Boolean']['input']; - cursor?: InputMaybe; - limit?: InputMaybe; - resources?: InputMaybe>>; - streamId: Scalars['String']['input']; -}; - - -export type QueryDiscoverableStreamsArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; - sort?: InputMaybe; -}; - - -export type QueryOtherUserArgs = { - id: Scalars['String']['input']; -}; - - -export type QueryProjectArgs = { - id: Scalars['String']['input']; -}; - - -export type QueryProjectInviteArgs = { - projectId: Scalars['String']['input']; - token?: InputMaybe; -}; - - -export type QueryServerInviteByTokenArgs = { - token?: InputMaybe; -}; - - -export type QueryStreamArgs = { - id: Scalars['String']['input']; -}; - - -export type QueryStreamAccessRequestArgs = { - streamId: Scalars['String']['input']; -}; - - -export type QueryStreamInviteArgs = { - streamId: Scalars['String']['input']; - token?: InputMaybe; -}; - - -export type QueryStreamsArgs = { - cursor?: InputMaybe; - limit?: InputMaybe; - query?: InputMaybe; -}; - - -export type QueryUserArgs = { - id?: InputMaybe; -}; - - -export type QueryUserPwdStrengthArgs = { - pwd: Scalars['String']['input']; -}; - - -export type QueryUserSearchArgs = { - archived?: InputMaybe; - cursor?: InputMaybe; - emailOnly?: InputMaybe; - limit?: Scalars['Int']['input']; - query: Scalars['String']['input']; -}; - - -export type QueryUsersArgs = { - input: UsersRetrievalInput; -}; - - -export type QueryUsersByEmailArgs = { - input: BulkUsersRetrievalInput; -}; - - -export type QueryValidateWorkspaceSlugArgs = { - slug: Scalars['String']['input']; -}; - - -export type QueryWorkspaceArgs = { - id: Scalars['String']['input']; -}; - - -export type QueryWorkspaceBySlugArgs = { - slug: Scalars['String']['input']; -}; - - -export type QueryWorkspaceInviteArgs = { - options?: InputMaybe; - token?: InputMaybe; - workspaceId?: InputMaybe; -}; - - -export type QueryWorkspaceSsoByEmailArgs = { - email: Scalars['String']['input']; -}; - -/** Deprecated: Used by old stream-based mutations */ -export type ReplyCreateInput = { - /** IDs of uploaded blobs that should be attached to this reply */ - blobIds: Array; - data?: InputMaybe; - parentComment: Scalars['String']['input']; - streamId: Scalars['String']['input']; - /** ProseMirror document object */ - text?: InputMaybe; -}; - -export type ResourceIdentifier = { - __typename?: 'ResourceIdentifier'; - resourceId: Scalars['String']['output']; - resourceType: ResourceType; -}; - -export type ResourceIdentifierInput = { - resourceId: Scalars['String']['input']; - resourceType: ResourceType; -}; - -export enum ResourceType { - Comment = 'comment', - Commit = 'commit', - Object = 'object', - Stream = 'stream' -} - -export type Role = { - __typename?: 'Role'; - description: Scalars['String']['output']; - name: Scalars['String']['output']; - resourceTarget: Scalars['String']['output']; -}; - -/** Available scopes. */ -export type Scope = { - __typename?: 'Scope'; - description: Scalars['String']['output']; - name: Scalars['String']['output']; -}; - -export type SelectedCommentMetaData = { - __typename?: 'SelectedCommentMetaData'; - id: Scalars['String']['output']; - selectionLocation: Scalars['JSONObject']['output']; -}; - -export type ServerApp = { - __typename?: 'ServerApp'; - author?: Maybe; - createdAt: Scalars['DateTime']['output']; - description?: Maybe; - id: Scalars['String']['output']; - logo?: Maybe; - name: Scalars['String']['output']; - public?: Maybe; - redirectUrl: Scalars['String']['output']; - scopes: Array; - secret?: Maybe; - termsAndConditionsLink?: Maybe; - trustByDefault?: Maybe; -}; - -export type ServerAppListItem = { - __typename?: 'ServerAppListItem'; - author?: Maybe; - description?: Maybe; - id: Scalars['String']['output']; - logo?: Maybe; - name: Scalars['String']['output']; - redirectUrl: Scalars['String']['output']; - termsAndConditionsLink?: Maybe; - trustByDefault?: Maybe; -}; - -export type ServerAutomateInfo = { - __typename?: 'ServerAutomateInfo'; - availableFunctionTemplates: Array; -}; - -/** Server configuration. */ -export type ServerConfiguration = { - __typename?: 'ServerConfiguration'; - blobSizeLimitBytes: Scalars['Int']['output']; - objectMultipartUploadSizeLimitBytes: Scalars['Int']['output']; - objectSizeLimitBytes: Scalars['Int']['output']; -}; - -/** Information about this server. */ -export type ServerInfo = { - __typename?: 'ServerInfo'; - adminContact?: Maybe; - /** The authentication strategies available on this server. */ - authStrategies: Array; - automate: ServerAutomateInfo; - /** Base URL of Speckle Automate, if set */ - automateUrl?: Maybe; - /** @deprecated Use the ServerInfo{configuration{blobSizeLimitBytes}} field instead. */ - blobSizeLimitBytes: Scalars['Int']['output']; - canonicalUrl?: Maybe; - company?: Maybe; - /** - * Configuration values that are specific to this server. - * These are read-only and can only be adjusted during server setup. - * Please contact your server administrator if you wish to suggest a change to these values. - */ - configuration: ServerConfiguration; - description?: Maybe; - /** Whether or not to show messaging about FE2 (banners etc.) */ - enableNewWebUiMessaging?: Maybe; - guestModeEnabled: Scalars['Boolean']['output']; - inviteOnly?: Maybe; - /** Server relocation / migration info */ - migration?: Maybe; - /** Info about server regions */ - multiRegion: ServerMultiRegionConfiguration; - name: Scalars['String']['output']; - /** @deprecated Use role constants from the @speckle/shared npm package instead */ - roles: Array; - scopes: Array; - serverRoles: Array; - termsOfService?: Maybe; - version?: Maybe; - workspaces: ServerWorkspacesInfo; -}; - -export type ServerInfoMutations = { - __typename?: 'ServerInfoMutations'; - multiRegion: ServerRegionMutations; -}; - -export type ServerInfoUpdateInput = { - adminContact?: InputMaybe; - company?: InputMaybe; - description?: InputMaybe; - guestModeEnabled?: InputMaybe; - inviteOnly?: InputMaybe; - name: Scalars['String']['input']; - termsOfService?: InputMaybe; -}; - -export type ServerInvite = { - __typename?: 'ServerInvite'; - email: Scalars['String']['output']; - id: Scalars['String']['output']; - invitedBy: LimitedUser; -}; - -export type ServerInviteCreateInput = { - email: Scalars['String']['input']; - message?: InputMaybe; - /** Can only be specified if guest mode is on or if the user is an admin */ - serverRole?: InputMaybe; -}; - -export type ServerMigration = { - __typename?: 'ServerMigration'; - movedFrom?: Maybe; - movedTo?: Maybe; -}; - -export type ServerMultiRegionConfiguration = { - __typename?: 'ServerMultiRegionConfiguration'; - /** - * Keys of available regions defined in the multi region config file. Used keys will - * be filtered out from the result. - */ - availableKeys: Array; - /** Regions available for project data residency */ - regions: Array; -}; - -export type ServerRegionItem = { - __typename?: 'ServerRegionItem'; - description?: Maybe; - id: Scalars['String']['output']; - key: Scalars['String']['output']; - name: Scalars['String']['output']; -}; - -export type ServerRegionMutations = { - __typename?: 'ServerRegionMutations'; - create: ServerRegionItem; - update: ServerRegionItem; -}; - - -export type ServerRegionMutationsCreateArgs = { - input: CreateServerRegionInput; -}; - - -export type ServerRegionMutationsUpdateArgs = { - input: UpdateServerRegionInput; -}; - -export enum ServerRole { - ServerAdmin = 'SERVER_ADMIN', - ServerArchivedUser = 'SERVER_ARCHIVED_USER', - ServerGuest = 'SERVER_GUEST', - ServerUser = 'SERVER_USER' -} - -export type ServerRoleItem = { - __typename?: 'ServerRoleItem'; - id: Scalars['String']['output']; - title: Scalars['String']['output']; -}; - -export type ServerStatistics = { - __typename?: 'ServerStatistics'; - totalPendingInvites: Scalars['Int']['output']; - totalProjectCount: Scalars['Int']['output']; - totalUserCount: Scalars['Int']['output']; -}; - -export type ServerStats = { - __typename?: 'ServerStats'; - /** An array of objects currently structured as { created_month: Date, count: int }. */ - commitHistory?: Maybe>>; - /** An array of objects currently structured as { created_month: Date, count: int }. */ - objectHistory?: Maybe>>; - /** An array of objects currently structured as { created_month: Date, count: int }. */ - streamHistory?: Maybe>>; - totalCommitCount: Scalars['Int']['output']; - totalObjectCount: Scalars['Int']['output']; - totalStreamCount: Scalars['Int']['output']; - totalUserCount: Scalars['Int']['output']; - /** An array of objects currently structured as { created_month: Date, count: int }. */ - userHistory?: Maybe>>; -}; - -export type ServerWorkspacesInfo = { - __typename?: 'ServerWorkspacesInfo'; - /** - * This is a backend control variable for the workspaces feature set. - * Since workspaces need a backend logic to be enabled, this is not enough as a feature flag. - */ - workspacesEnabled: Scalars['Boolean']['output']; -}; - -export enum SessionPaymentStatus { - Paid = 'paid', - Unpaid = 'unpaid' -} - -export type SetPrimaryUserEmailInput = { - id: Scalars['ID']['input']; -}; - -export type SmartTextEditorValue = { - __typename?: 'SmartTextEditorValue'; - /** File attachments, if any */ - attachments?: Maybe>; - /** - * The actual (ProseMirror) document representing the text. Can be empty, - * if there are attachments. - */ - doc?: Maybe; - /** The type of editor value (comment, blog post etc.) */ - type: Scalars['String']['output']; - /** The version of the schema */ - version: Scalars['String']['output']; -}; - -export enum SortDirection { - Asc = 'ASC', - Desc = 'DESC' -} - -export type Stream = { - __typename?: 'Stream'; - /** - * All the recent activity on this stream in chronological order - * @deprecated Part of the old API surface and will be removed in the future. - */ - activity?: Maybe; - allowPublicComments: Scalars['Boolean']['output']; - /** @deprecated Part of the old API surface and will be removed in the future. Use Project.blob instead. */ - blob?: Maybe; - /** - * Get the metadata collection of blobs stored for this stream. - * @deprecated Part of the old API surface and will be removed in the future. Use Project.blobs instead. - */ - blobs?: Maybe; - /** @deprecated Part of the old API surface and will be removed in the future. Use Project.model or Project.modelByName instead. */ - branch?: Maybe; - /** @deprecated Part of the old API surface and will be removed in the future. Use Project.models or Project.modelsTree instead. */ - branches?: Maybe; - collaborators: Array; - /** - * The total number of comments for this stream. To actually get the comments, use the comments query without passing in a resource array. E.g.: - * - * ``` - * query{ - * comments(streamId:"streamId"){ - * ... - * } - * ``` - * @deprecated Part of the old API surface and will be removed in the future. - */ - commentCount: Scalars['Int']['output']; - /** @deprecated Part of the old API surface and will be removed in the future. Use Project.version instead. */ - commit?: Maybe; - /** @deprecated Part of the old API surface and will be removed in the future. Use Project.versions instead. */ - commits?: Maybe; - createdAt: Scalars['DateTime']['output']; - description?: Maybe; - /** Date when you favorited this stream. `null` if stream isn't viewed from a specific user's perspective or if it isn't favorited. */ - favoritedDate?: Maybe; - favoritesCount: Scalars['Int']['output']; - /** - * Returns a specific file upload that belongs to this stream. - * @deprecated Part of the old API surface and will be removed in the future. Use Project.pendingImportedModels or Model.pendingImportedVersions instead. - */ - fileUpload?: Maybe; - /** - * Returns a list of all the file uploads for this stream. - * @deprecated Part of the old API surface and will be removed in the future. Use Project.pendingImportedModels or Model.pendingImportedVersions instead. - */ - fileUploads: Array; - id: Scalars['String']['output']; - /** - * Whether the stream (if public) can be found on public stream exploration pages - * and searches - */ - isDiscoverable: Scalars['Boolean']['output']; - /** Whether the stream can be viewed by non-contributors */ - isPublic: Scalars['Boolean']['output']; - name: Scalars['String']['output']; - /** @deprecated Part of the old API surface and will be removed in the future. Use Project.object instead. */ - object?: Maybe; - /** - * Pending stream access requests - * @deprecated Part of the old API surface and will be removed in the future. Use Project.pendingAccessRequests instead. - */ - pendingAccessRequests?: Maybe>; - /** Collaborators who have been invited, but not yet accepted. */ - pendingCollaborators?: Maybe>; - /** Your role for this stream. `null` if request is not authenticated, or the stream is not explicitly shared with you. */ - role?: Maybe; - size?: Maybe; - updatedAt: Scalars['DateTime']['output']; - /** @deprecated Part of the old API surface and will be removed in the future. Use Project.webhooks instead. */ - webhooks: WebhookCollection; -}; - - -export type StreamActivityArgs = { - actionType?: InputMaybe; - after?: InputMaybe; - before?: InputMaybe; - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -export type StreamBlobArgs = { - id: Scalars['String']['input']; -}; - - -export type StreamBlobsArgs = { - cursor?: InputMaybe; - limit?: InputMaybe; - query?: InputMaybe; -}; - - -export type StreamBranchArgs = { - name?: InputMaybe; -}; - - -export type StreamBranchesArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -export type StreamCommitArgs = { - id?: InputMaybe; -}; - - -export type StreamCommitsArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -export type StreamFileUploadArgs = { - id: Scalars['String']['input']; -}; - - -export type StreamObjectArgs = { - id: Scalars['String']['input']; -}; - - -export type StreamWebhooksArgs = { - id?: InputMaybe; -}; - -/** Created when a user requests to become a contributor on a stream */ -export type StreamAccessRequest = { - __typename?: 'StreamAccessRequest'; - createdAt: Scalars['DateTime']['output']; - id: Scalars['ID']['output']; - requester: LimitedUser; - requesterId: Scalars['String']['output']; - /** Can only be selected if authed user has proper access */ - stream: Stream; - streamId: Scalars['String']['output']; -}; - -export type StreamCollaborator = { - __typename?: 'StreamCollaborator'; - avatar?: Maybe; - company?: Maybe; - id: Scalars['String']['output']; - name: Scalars['String']['output']; - role: Scalars['String']['output']; - serverRole: Scalars['String']['output']; -}; - -export type StreamCollection = { - __typename?: 'StreamCollection'; - cursor?: Maybe; - items?: Maybe>; - totalCount: Scalars['Int']['output']; -}; - -export type StreamCreateInput = { - description?: InputMaybe; - /** - * Whether the stream (if public) can be found on public stream exploration pages - * and searches - */ - isDiscoverable?: InputMaybe; - /** Whether the stream can be viewed by non-contributors */ - isPublic?: InputMaybe; - name?: InputMaybe; - /** Optionally specify user IDs of users that you want to invite to be contributors to this stream */ - withContributors?: InputMaybe>; -}; - -export type StreamInviteCreateInput = { - email?: InputMaybe; - message?: InputMaybe; - /** Defaults to the contributor role, if not specified */ - role?: InputMaybe; - /** Can only be specified if guest mode is on or if the user is an admin */ - serverRole?: InputMaybe; - streamId: Scalars['String']['input']; - userId?: InputMaybe; -}; - -export type StreamRevokePermissionInput = { - streamId: Scalars['String']['input']; - userId: Scalars['String']['input']; -}; - -export enum StreamRole { - StreamContributor = 'STREAM_CONTRIBUTOR', - StreamOwner = 'STREAM_OWNER', - StreamReviewer = 'STREAM_REVIEWER' -} - -export type StreamUpdateInput = { - allowPublicComments?: InputMaybe; - description?: InputMaybe; - id: Scalars['String']['input']; - /** - * Whether the stream (if public) can be found on public stream exploration pages - * and searches - */ - isDiscoverable?: InputMaybe; - /** Whether the stream can be viewed by non-contributors */ - isPublic?: InputMaybe; - name?: InputMaybe; -}; - -export type StreamUpdatePermissionInput = { - role: Scalars['String']['input']; - streamId: Scalars['String']['input']; - userId: Scalars['String']['input']; -}; - -export type Subscription = { - __typename?: 'Subscription'; - /** It's lonely in the void. */ - _?: Maybe; - /** - * Subscribe to branch created event - * @deprecated Part of the old API surface and will be removed in the future. Use 'projectModelsUpdated' instead. - */ - branchCreated?: Maybe; - /** - * Subscribe to branch deleted event - * @deprecated Part of the old API surface and will be removed in the future. Use 'projectModelsUpdated' instead. - */ - branchDeleted?: Maybe; - /** - * Subscribe to branch updated event. - * @deprecated Part of the old API surface and will be removed in the future. Use 'projectModelsUpdated' instead. - */ - branchUpdated?: Maybe; - /** - * Subscribe to new comment events. There's two ways to use this subscription: - * - for a whole stream: do not pass in any resourceIds; this sub will get called whenever a comment (not reply) is added to any of the stream's resources. - * - for a specific resource/set of resources: pass in a list of resourceIds (commit or object ids); this sub will get called when *any* of the resources provided get a comment. - * @deprecated Use projectCommentsUpdated - */ - commentActivity: CommentActivityMessage; - /** - * Subscribes to events on a specific comment. Use to find out when: - * - a top level comment is deleted (trigger a deletion event outside) - * - a top level comment receives a reply. - * @deprecated Use projectCommentsUpdated or viewerUserActivityBroadcasted for reply status - */ - commentThreadActivity: CommentThreadActivityMessage; - /** - * Subscribe to commit created event - * @deprecated Part of the old API surface and will be removed in the future. Use 'projectVersionsUpdated' instead. - */ - commitCreated?: Maybe; - /** - * Subscribe to commit deleted event - * @deprecated Part of the old API surface and will be removed in the future. Use 'projectVersionsUpdated' instead. - */ - commitDeleted?: Maybe; - /** - * Subscribe to commit updated event. - * @deprecated Part of the old API surface and will be removed in the future. Use 'projectVersionsUpdated' instead. - */ - commitUpdated?: Maybe; - /** - * Cyclically sends a message to the client, used for testing - * Note: Only works in test environment - */ - ping: Scalars['String']['output']; - /** Subscribe to updates to automations in the project */ - projectAutomationsUpdated: ProjectAutomationsUpdatedMessage; - /** - * Subscribe to updates to resource comments/threads. Optionally specify resource ID string to only receive - * updates regarding comments for those resources. - */ - projectCommentsUpdated: ProjectCommentsUpdatedMessage; - /** - * Subscribe to changes to any of a project's file imports - * @deprecated Part of the old API surface and will be removed in the future. Use projectPendingModelsUpdated or projectPendingVersionsUpdated instead. - */ - projectFileImportUpdated: ProjectFileImportUpdatedMessage; - /** Subscribe to changes to a project's models. Optionally specify modelIds to track. */ - projectModelsUpdated: ProjectModelsUpdatedMessage; - /** Subscribe to changes to a project's pending models */ - projectPendingModelsUpdated: ProjectPendingModelsUpdatedMessage; - /** Subscribe to changes to a project's pending versions */ - projectPendingVersionsUpdated: ProjectPendingVersionsUpdatedMessage; - /** Subscribe to updates to any triggered automations statuses in the project */ - projectTriggeredAutomationsStatusUpdated: ProjectTriggeredAutomationsStatusUpdatedMessage; - /** Track updates to a specific project */ - projectUpdated: ProjectUpdatedMessage; - projectVersionGendoAIRenderCreated: GendoAiRender; - projectVersionGendoAIRenderUpdated: GendoAiRender; - /** Subscribe to when a project's versions get their preview image fully generated. */ - projectVersionsPreviewGenerated: ProjectVersionsPreviewGeneratedMessage; - /** Subscribe to changes to a project's versions. */ - projectVersionsUpdated: ProjectVersionsUpdatedMessage; - /** - * Subscribes to stream deleted event. Use this in clients/components that pertain only to this stream. - * @deprecated Part of the old API surface and will be removed in the future. Use projectUpdated instead. - */ - streamDeleted?: Maybe; - /** - * Subscribes to stream updated event. Use this in clients/components that pertain only to this stream. - * @deprecated Part of the old API surface and will be removed in the future. Use projectUpdated instead. - */ - streamUpdated?: Maybe; - /** Track newly added or deleted projects owned by the active user */ - userProjectsUpdated: UserProjectsUpdatedMessage; - /** - * Subscribes to new stream added event for your profile. Use this to display an up-to-date list of streams. - * **NOTE**: If someone shares a stream with you, this subscription will be triggered with an extra value of `sharedBy` in the payload. - * @deprecated Part of the old API surface and will be removed in the future. Use userProjectsUpdated instead. - */ - userStreamAdded?: Maybe; - /** - * Subscribes to stream removed event for your profile. Use this to display an up-to-date list of streams for your profile. - * **NOTE**: If someone revokes your permissions on a stream, this subscription will be triggered with an extra value of `revokedBy` in the payload. - * @deprecated Part of the old API surface and will be removed in the future. Use userProjectsUpdated instead. - */ - userStreamRemoved?: Maybe; - /** - * Broadcasts "real-time" location data for viewer users. - * @deprecated Use viewerUserActivityBroadcasted - */ - userViewerActivity?: Maybe; - /** Track user activities in the viewer relating to the specified resources */ - viewerUserActivityBroadcasted: ViewerUserActivityMessage; - /** - * Track newly added or deleted projects in a specific workspace. - * Either slug or id must be set. - */ - workspaceProjectsUpdated: WorkspaceProjectsUpdatedMessage; - /** - * Track updates to a specific workspace. - * Either slug or id must be set. - */ - workspaceUpdated: WorkspaceUpdatedMessage; -}; - - -export type SubscriptionBranchCreatedArgs = { - streamId: Scalars['String']['input']; -}; - - -export type SubscriptionBranchDeletedArgs = { - streamId: Scalars['String']['input']; -}; - - -export type SubscriptionBranchUpdatedArgs = { - branchId?: InputMaybe; - streamId: Scalars['String']['input']; -}; - - -export type SubscriptionCommentActivityArgs = { - resourceIds?: InputMaybe>>; - streamId: Scalars['String']['input']; -}; - - -export type SubscriptionCommentThreadActivityArgs = { - commentId: Scalars['String']['input']; - streamId: Scalars['String']['input']; -}; - - -export type SubscriptionCommitCreatedArgs = { - streamId: Scalars['String']['input']; -}; - - -export type SubscriptionCommitDeletedArgs = { - streamId: Scalars['String']['input']; -}; - - -export type SubscriptionCommitUpdatedArgs = { - commitId?: InputMaybe; - streamId: Scalars['String']['input']; -}; - - -export type SubscriptionProjectAutomationsUpdatedArgs = { - projectId: Scalars['String']['input']; -}; - - -export type SubscriptionProjectCommentsUpdatedArgs = { - target: ViewerUpdateTrackingTarget; -}; - - -export type SubscriptionProjectFileImportUpdatedArgs = { - id: Scalars['String']['input']; -}; - - -export type SubscriptionProjectModelsUpdatedArgs = { - id: Scalars['String']['input']; - modelIds?: InputMaybe>; -}; - - -export type SubscriptionProjectPendingModelsUpdatedArgs = { - id: Scalars['String']['input']; -}; - - -export type SubscriptionProjectPendingVersionsUpdatedArgs = { - id: Scalars['String']['input']; -}; - - -export type SubscriptionProjectTriggeredAutomationsStatusUpdatedArgs = { - projectId: Scalars['String']['input']; -}; - - -export type SubscriptionProjectUpdatedArgs = { - id: Scalars['String']['input']; -}; - - -export type SubscriptionProjectVersionGendoAiRenderCreatedArgs = { - id: Scalars['String']['input']; - versionId: Scalars['String']['input']; -}; - - -export type SubscriptionProjectVersionGendoAiRenderUpdatedArgs = { - id: Scalars['String']['input']; - versionId: Scalars['String']['input']; -}; - - -export type SubscriptionProjectVersionsPreviewGeneratedArgs = { - id: Scalars['String']['input']; -}; - - -export type SubscriptionProjectVersionsUpdatedArgs = { - id: Scalars['String']['input']; -}; - - -export type SubscriptionStreamDeletedArgs = { - streamId?: InputMaybe; -}; - - -export type SubscriptionStreamUpdatedArgs = { - streamId?: InputMaybe; -}; - - -export type SubscriptionUserViewerActivityArgs = { - resourceId: Scalars['String']['input']; - streamId: Scalars['String']['input']; -}; - - -export type SubscriptionViewerUserActivityBroadcastedArgs = { - sessionId?: InputMaybe; - target: ViewerUpdateTrackingTarget; -}; - - -export type SubscriptionWorkspaceProjectsUpdatedArgs = { - workspaceId?: InputMaybe; - workspaceSlug?: InputMaybe; -}; - - -export type SubscriptionWorkspaceUpdatedArgs = { - workspaceId?: InputMaybe; - workspaceSlug?: InputMaybe; -}; - -export type TestAutomationRun = { - __typename?: 'TestAutomationRun'; - automationRunId: Scalars['String']['output']; - functionRunId: Scalars['String']['output']; - triggers: Array; -}; - -export type TestAutomationRunTrigger = { - __typename?: 'TestAutomationRunTrigger'; - payload: TestAutomationRunTriggerPayload; - triggerType: Scalars['String']['output']; -}; - -export type TestAutomationRunTriggerPayload = { - __typename?: 'TestAutomationRunTriggerPayload'; - modelId: Scalars['String']['output']; - versionId: Scalars['String']['output']; -}; - -export type TokenResourceIdentifier = { - __typename?: 'TokenResourceIdentifier'; - id: Scalars['String']['output']; - type: TokenResourceIdentifierType; -}; - -export type TokenResourceIdentifierInput = { - id: Scalars['String']['input']; - type: TokenResourceIdentifierType; -}; - -export enum TokenResourceIdentifierType { - Project = 'project', - Workspace = 'workspace' -} - -export type TriggeredAutomationsStatus = { - __typename?: 'TriggeredAutomationsStatus'; - automationRuns: Array; - id: Scalars['ID']['output']; - status: AutomateRunStatus; - statusMessage?: Maybe; -}; - -/** Any null values will be ignored */ -export type UpdateAutomateFunctionInput = { - description?: InputMaybe; - id: Scalars['ID']['input']; - logo?: InputMaybe; - name?: InputMaybe; - /** SourceAppNames values from @speckle/shared */ - supportedSourceApps?: InputMaybe>; - tags?: InputMaybe>; - workspaceIds?: InputMaybe>; -}; - -export type UpdateModelInput = { - description?: InputMaybe; - id: Scalars['ID']['input']; - name?: InputMaybe; - projectId: Scalars['ID']['input']; -}; - -export type UpdateServerRegionInput = { - description?: InputMaybe; - key: Scalars['String']['input']; - name?: InputMaybe; -}; - -/** Only non-null values will be updated */ -export type UpdateVersionInput = { - message?: InputMaybe; - projectId: Scalars['ID']['input']; - versionId: Scalars['ID']['input']; -}; - -export type UpgradePlanInput = { - billingInterval: BillingInterval; - workspaceId: Scalars['ID']['input']; - workspacePlan: PaidWorkspacePlans; -}; - -/** - * Full user type, should only be used in the context of admin operations or - * when a user is reading/writing info about himself - */ -export type User = { - __typename?: 'User'; - /** - * All the recent activity from this user in chronological order - * @deprecated Part of the old API surface and will be removed in the future. - */ - activity?: Maybe; - /** Returns a list of your personal api tokens. */ - apiTokens: Array; - /** Returns the apps you have authorized. */ - authorizedApps?: Maybe>; - automateFunctions: AutomateFunctionCollection; - automateInfo: UserAutomateInfo; - avatar?: Maybe; - bio?: Maybe; - /** - * Get commits authored by the user. If requested for another user, then only commits - * from public streams will be returned. - * @deprecated Part of the old API surface and will be removed in the future. Use User.versions instead. - */ - commits?: Maybe; - company?: Maybe; - /** Returns the apps you have created. */ - createdApps?: Maybe>; - createdAt?: Maybe; - /** Get discoverable workspaces with verified domains that match the active user's */ - discoverableWorkspaces: Array; - /** Only returned if API user is the user being requested or an admin */ - email?: Maybe; - emails: Array; - /** - * A list of workspaces for the active user where: - * (1) The user is a member or admin - * (2) The workspace has SSO provider enabled - * (3) The user does not have a valid SSO session for the given SSO provider - */ - expiredSsoSessions: Array; - /** - * All the streams that a active user has favorited. - * Note: You can't use this to retrieve another user's favorite streams. - * @deprecated Part of the old API surface and will be removed in the future. - */ - favoriteStreams: StreamCollection; - gendoAICredits: UserGendoAiCredits; - /** Whether the user has a pending/active email verification token */ - hasPendingVerification?: Maybe; - id: Scalars['ID']['output']; - /** Whether post-sign up onboarding has been finished or skipped entirely */ - isOnboardingFinished?: Maybe; - name: Scalars['String']['output']; - notificationPreferences: Scalars['JSONObject']['output']; - profiles?: Maybe; - /** Get pending project access request, that the user made */ - projectAccessRequest?: Maybe; - /** Get all invitations to projects that the active user has */ - projectInvites: Array; - /** Get projects that the user participates in */ - projects: UserProjectCollection; - role?: Maybe; - /** - * Returns all streams that the user is a collaborator on. If requested for a user, who isn't the - * authenticated user, then this will only return discoverable streams. - * @deprecated Part of the old API surface and will be removed in the future. Use User.projects instead. - */ - streams: UserStreamCollection; - /** - * The user's timeline in chronological order - * @deprecated Part of the old API surface and will be removed in the future. - */ - timeline?: Maybe; - /** - * Total amount of favorites attached to streams owned by the user - * @deprecated Part of the old API surface and will be removed in the future. - */ - totalOwnedStreamsFavorites: Scalars['Int']['output']; - verified?: Maybe; - /** - * Get (count of) user's versions. By default gets all versions of all projects the user has access to. - * Set authoredOnly=true to only retrieve versions authored by the user. - * - * Note: Only count resolution is currently implemented - */ - versions: CountOnlyCollection; - /** Get all invitations to workspaces that the active user has */ - workspaceInvites: Array; - /** Get the workspaces for the user */ - workspaces: WorkspaceCollection; -}; - - -/** - * Full user type, should only be used in the context of admin operations or - * when a user is reading/writing info about himself - */ -export type UserActivityArgs = { - actionType?: InputMaybe; - after?: InputMaybe; - before?: InputMaybe; - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -/** - * Full user type, should only be used in the context of admin operations or - * when a user is reading/writing info about himself - */ -export type UserAutomateFunctionsArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: InputMaybe; -}; - - -/** - * Full user type, should only be used in the context of admin operations or - * when a user is reading/writing info about himself - */ -export type UserCommitsArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -/** - * Full user type, should only be used in the context of admin operations or - * when a user is reading/writing info about himself - */ -export type UserFavoriteStreamsArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -/** - * Full user type, should only be used in the context of admin operations or - * when a user is reading/writing info about himself - */ -export type UserProjectAccessRequestArgs = { - projectId: Scalars['String']['input']; -}; - - -/** - * Full user type, should only be used in the context of admin operations or - * when a user is reading/writing info about himself - */ -export type UserProjectsArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -/** - * Full user type, should only be used in the context of admin operations or - * when a user is reading/writing info about himself - */ -export type UserStreamsArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -/** - * Full user type, should only be used in the context of admin operations or - * when a user is reading/writing info about himself - */ -export type UserTimelineArgs = { - after?: InputMaybe; - before?: InputMaybe; - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -/** - * Full user type, should only be used in the context of admin operations or - * when a user is reading/writing info about himself - */ -export type UserVersionsArgs = { - authoredOnly?: Scalars['Boolean']['input']; - limit?: Scalars['Int']['input']; -}; - - -/** - * Full user type, should only be used in the context of admin operations or - * when a user is reading/writing info about himself - */ -export type UserWorkspacesArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - -export type UserAutomateInfo = { - __typename?: 'UserAutomateInfo'; - availableGithubOrgs: Array; - hasAutomateGithubApp: Scalars['Boolean']['output']; -}; - -export type UserDeleteInput = { - email: Scalars['String']['input']; -}; - -export type UserEmail = { - __typename?: 'UserEmail'; - email: Scalars['String']['output']; - id: Scalars['ID']['output']; - primary: Scalars['Boolean']['output']; - userId: Scalars['ID']['output']; - verified: Scalars['Boolean']['output']; -}; - -export type UserEmailMutations = { - __typename?: 'UserEmailMutations'; - create: User; - delete: User; - requestNewEmailVerification?: Maybe; - setPrimary: User; - verify?: Maybe; -}; - - -export type UserEmailMutationsCreateArgs = { - input: CreateUserEmailInput; -}; - - -export type UserEmailMutationsDeleteArgs = { - input: DeleteUserEmailInput; -}; - - -export type UserEmailMutationsRequestNewEmailVerificationArgs = { - input: EmailVerificationRequestInput; -}; - - -export type UserEmailMutationsSetPrimaryArgs = { - input: SetPrimaryUserEmailInput; -}; - - -export type UserEmailMutationsVerifyArgs = { - input: VerifyUserEmailInput; -}; - -export type UserGendoAiCredits = { - __typename?: 'UserGendoAICredits'; - limit: Scalars['Int']['output']; - resetDate: Scalars['DateTime']['output']; - used: Scalars['Int']['output']; -}; - -export type UserProjectCollection = { - __typename?: 'UserProjectCollection'; - cursor?: Maybe; - items: Array; - numberOfHidden: Scalars['Int']['output']; - totalCount: Scalars['Int']['output']; -}; - -export type UserProjectsFilter = { - /** Only include projects where user has the specified roles */ - onlyWithRoles?: InputMaybe>; - /** Filter out projects by name */ - search?: InputMaybe; - workspaceId?: InputMaybe; -}; - -export type UserProjectsUpdatedMessage = { - __typename?: 'UserProjectsUpdatedMessage'; - /** Project ID */ - id: Scalars['String']['output']; - /** Project entity, null if project was deleted */ - project?: Maybe; - /** Message type */ - type: UserProjectsUpdatedMessageType; -}; - -export enum UserProjectsUpdatedMessageType { - Added = 'ADDED', - Removed = 'REMOVED' -} - -export type UserRoleInput = { - id: Scalars['String']['input']; - role: Scalars['String']['input']; -}; - -export type UserSearchResultCollection = { - __typename?: 'UserSearchResultCollection'; - cursor?: Maybe; - items: Array; -}; - -export type UserStreamCollection = { - __typename?: 'UserStreamCollection'; - cursor?: Maybe; - items?: Maybe>; - numberOfHidden: Scalars['Int']['output']; - totalCount: Scalars['Int']['output']; -}; - -export type UserUpdateInput = { - avatar?: InputMaybe; - bio?: InputMaybe; - company?: InputMaybe; - name?: InputMaybe; -}; - -export type UserWorkspacesFilter = { - search?: InputMaybe; -}; - -export type UsersRetrievalInput = { - cursor?: InputMaybe; - /** Only find users with directly matching emails */ - emailOnly?: InputMaybe; - /** Limit defaults to 10 */ - limit?: InputMaybe; - /** Only find users that are collaborators of the specified project */ - projectId?: InputMaybe; - /** The query looks for matches in user name & email */ - query: Scalars['String']['input']; -}; - -export type VerifyUserEmailInput = { - code: Scalars['String']['input']; - email: Scalars['String']['input']; -}; - -export type Version = { - __typename?: 'Version'; - authorUser?: Maybe; - automationsStatus?: Maybe; - /** All comment threads in this version */ - commentThreads: CommentCollection; - createdAt: Scalars['DateTime']['output']; - gendoAIRender: GendoAiRender; - gendoAIRenders: GendoAiRenderCollection; - id: Scalars['ID']['output']; - message?: Maybe; - model: Model; - parents?: Maybe>>; - previewUrl: Scalars['String']['output']; - referencedObject: Scalars['String']['output']; - sourceApplication?: Maybe; - totalChildrenCount?: Maybe; -}; - - -export type VersionCommentThreadsArgs = { - cursor?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -export type VersionGendoAiRenderArgs = { - id: Scalars['String']['input']; -}; - -export type VersionCollection = { - __typename?: 'VersionCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type VersionCreatedTrigger = { - __typename?: 'VersionCreatedTrigger'; - model?: Maybe; - type: AutomateRunTriggerType; - version?: Maybe; -}; - -export type VersionCreatedTriggerDefinition = { - __typename?: 'VersionCreatedTriggerDefinition'; - model?: Maybe; - type: AutomateRunTriggerType; -}; - -export type VersionMutations = { - __typename?: 'VersionMutations'; - create: Version; - delete: Scalars['Boolean']['output']; - markReceived: Scalars['Boolean']['output']; - moveToModel: Model; - requestGendoAIRender: Scalars['Boolean']['output']; - update: Version; -}; - - -export type VersionMutationsCreateArgs = { - input: CreateVersionInput; -}; - - -export type VersionMutationsDeleteArgs = { - input: DeleteVersionsInput; -}; - - -export type VersionMutationsMarkReceivedArgs = { - input: MarkReceivedVersionInput; -}; - - -export type VersionMutationsMoveToModelArgs = { - input: MoveVersionsInput; -}; - - -export type VersionMutationsRequestGendoAiRenderArgs = { - input: GendoAiRenderInput; -}; - - -export type VersionMutationsUpdateArgs = { - input: UpdateVersionInput; -}; - -export type ViewerResourceGroup = { - __typename?: 'ViewerResourceGroup'; - /** Resource identifier used to refer to a collection of resource items */ - identifier: Scalars['String']['output']; - /** Viewer resources that the identifier refers to */ - items: Array; -}; - -export type ViewerResourceItem = { - __typename?: 'ViewerResourceItem'; - /** Null if resource represents an object */ - modelId?: Maybe; - objectId: Scalars['String']['output']; - /** Null if resource represents an object */ - versionId?: Maybe; -}; - -export type ViewerUpdateTrackingTarget = { - /** - * By default if resourceIdString is set, the "versionId" part of model resource identifiers will be ignored - * and all updates to of all versions of any of the referenced models will be returned. If `loadedVersionsOnly` is - * enabled, then only updates of loaded/referenced versions in resourceIdString will be returned. - */ - loadedVersionsOnly?: InputMaybe; - projectId: Scalars['String']['input']; - /** - * Only request updates to the resources identified by this - * comma-delimited resouce string (same format that's used in the viewer URL) - */ - resourceIdString: Scalars['String']['input']; -}; - -export type ViewerUserActivityMessage = { - __typename?: 'ViewerUserActivityMessage'; - sessionId: Scalars['String']['output']; - /** SerializedViewerState, only null if DISCONNECTED */ - state?: Maybe; - status: ViewerUserActivityStatus; - user?: Maybe; - userId?: Maybe; - userName: Scalars['String']['output']; -}; - -export type ViewerUserActivityMessageInput = { - sessionId: Scalars['String']['input']; - /** SerializedViewerState, only null if DISCONNECTED */ - state?: InputMaybe; - status: ViewerUserActivityStatus; - userId?: InputMaybe; - userName: Scalars['String']['input']; -}; - -export enum ViewerUserActivityStatus { - Disconnected = 'DISCONNECTED', - Viewing = 'VIEWING' -} - -export type Webhook = { - __typename?: 'Webhook'; - description?: Maybe; - enabled?: Maybe; - hasSecret: Scalars['Boolean']['output']; - history?: Maybe; - id: Scalars['String']['output']; - projectId: Scalars['String']['output']; - streamId: Scalars['String']['output']; - triggers: Array; - url: Scalars['String']['output']; -}; - - -export type WebhookHistoryArgs = { - limit?: Scalars['Int']['input']; -}; - -export type WebhookCollection = { - __typename?: 'WebhookCollection'; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type WebhookCreateInput = { - description?: InputMaybe; - enabled?: InputMaybe; - secret?: InputMaybe; - streamId: Scalars['String']['input']; - triggers: Array; - url: Scalars['String']['input']; -}; - -export type WebhookDeleteInput = { - id: Scalars['String']['input']; - streamId: Scalars['String']['input']; -}; - -export type WebhookEvent = { - __typename?: 'WebhookEvent'; - id: Scalars['String']['output']; - lastUpdate: Scalars['DateTime']['output']; - payload: Scalars['String']['output']; - retryCount: Scalars['Int']['output']; - status: Scalars['Int']['output']; - statusInfo: Scalars['String']['output']; - webhookId: Scalars['String']['output']; -}; - -export type WebhookEventCollection = { - __typename?: 'WebhookEventCollection'; - items?: Maybe>>; - totalCount?: Maybe; -}; - -export type WebhookUpdateInput = { - description?: InputMaybe; - enabled?: InputMaybe; - id: Scalars['String']['input']; - secret?: InputMaybe; - streamId: Scalars['String']['input']; - triggers?: InputMaybe>; - url?: InputMaybe; -}; - -export type Workspace = { - __typename?: 'Workspace'; - /** Get all join requests for all the workspaces the user is an admin of */ - adminWorkspacesJoinRequests?: Maybe; - automateFunctions: AutomateFunctionCollection; - createdAt: Scalars['DateTime']['output']; - /** Info about the workspace creation state */ - creationState?: Maybe; - customerPortalUrl?: Maybe; - /** The default role workspace members will receive for workspace projects. */ - defaultProjectRole: Scalars['String']['output']; - /** - * The default region where project data will be stored, if set. If undefined, defaults to main/default - * region. - */ - defaultRegion?: Maybe; - description?: Maybe; - /** Enable/Disable discovery of the workspace */ - discoverabilityEnabled: Scalars['Boolean']['output']; - /** Enable/Disable restriction to invite users to workspace as Guests only */ - domainBasedMembershipProtectionEnabled: Scalars['Boolean']['output']; - /** Verified workspace domains */ - domains?: Maybe>; - hasAccessToFeature: Scalars['Boolean']['output']; - id: Scalars['ID']['output']; - /** Only available to workspace owners/members */ - invitedTeam?: Maybe>; - /** Logo image as base64-encoded string */ - logo?: Maybe; - name: Scalars['String']['output']; - plan?: Maybe; - projects: ProjectCollection; - /** A Workspace is marked as readOnly if its trial period is finished or a paid plan is subscribed but payment has failed */ - readOnly: Scalars['Boolean']['output']; - /** Active user's role for this workspace. `null` if request is not authenticated, or the workspace is not explicitly shared with you. */ - role?: Maybe; - slug: Scalars['String']['output']; - /** Information about the workspace's SSO configuration and the current user's SSO session, if present */ - sso?: Maybe; - subscription?: Maybe; - team: WorkspaceCollaboratorCollection; - updatedAt: Scalars['DateTime']['output']; -}; - - -export type WorkspaceAdminWorkspacesJoinRequestsArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -export type WorkspaceAutomateFunctionsArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -export type WorkspaceHasAccessToFeatureArgs = { - featureName: WorkspaceFeatureName; -}; - - -export type WorkspaceInvitedTeamArgs = { - filter?: InputMaybe; -}; - - -export type WorkspaceProjectsArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - - -export type WorkspaceTeamArgs = { - cursor?: InputMaybe; - filter?: InputMaybe; - limit?: Scalars['Int']['input']; -}; - -export type WorkspaceBillingMutations = { - __typename?: 'WorkspaceBillingMutations'; - cancelCheckoutSession: Scalars['Boolean']['output']; - createCheckoutSession: CheckoutSession; - upgradePlan: Scalars['Boolean']['output']; -}; - - -export type WorkspaceBillingMutationsCancelCheckoutSessionArgs = { - input: CancelCheckoutSessionInput; -}; - - -export type WorkspaceBillingMutationsCreateCheckoutSessionArgs = { - input: CheckoutSessionInput; -}; - - -export type WorkspaceBillingMutationsUpgradePlanArgs = { - input: UpgradePlanInput; -}; - -/** Overridden by `WorkspaceCollaboratorGraphQLReturn` */ -export type WorkspaceCollaborator = { - __typename?: 'WorkspaceCollaborator'; - id: Scalars['ID']['output']; - projectRoles: Array; - role: Scalars['String']['output']; - user: LimitedUser; -}; - -export type WorkspaceCollaboratorCollection = { - __typename?: 'WorkspaceCollaboratorCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type WorkspaceCollection = { - __typename?: 'WorkspaceCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type WorkspaceCreateInput = { - description?: InputMaybe; - /** Logo image as base64-encoded string */ - logo?: InputMaybe; - name: Scalars['String']['input']; - slug?: InputMaybe; -}; - -export type WorkspaceCreationState = { - __typename?: 'WorkspaceCreationState'; - completed: Scalars['Boolean']['output']; - state: Scalars['JSONObject']['output']; -}; - -export type WorkspaceCreationStateInput = { - completed: Scalars['Boolean']['input']; - state: Scalars['JSONObject']['input']; - workspaceId: Scalars['ID']['input']; -}; - -export type WorkspaceDismissInput = { - workspaceId: Scalars['ID']['input']; -}; - -export type WorkspaceDomain = { - __typename?: 'WorkspaceDomain'; - domain: Scalars['String']['output']; - id: Scalars['ID']['output']; -}; - -export type WorkspaceDomainDeleteInput = { - id: Scalars['ID']['input']; - workspaceId: Scalars['ID']['input']; -}; - -export enum WorkspaceFeatureName { - DomainBasedSecurityPolicies = 'domainBasedSecurityPolicies', - OidcSso = 'oidcSso', - WorkspaceDataRegionSpecificity = 'workspaceDataRegionSpecificity' -} - -export type WorkspaceInviteCreateInput = { - /** Either this or userId must be filled */ - email?: InputMaybe; - /** Defaults to the member role, if not specified */ - role?: InputMaybe; - /** Defaults to User, if not specified */ - serverRole?: InputMaybe; - /** Either this or email must be filled */ - userId?: InputMaybe; -}; - -export type WorkspaceInviteLookupOptions = { - /** If true, the query will assume workspaceId is actually the workspace slug, and do the lookup by slug */ - useSlug?: InputMaybe; -}; - -export type WorkspaceInviteMutations = { - __typename?: 'WorkspaceInviteMutations'; - batchCreate: Workspace; - cancel: Workspace; - create: Workspace; - resend: Scalars['Boolean']['output']; - use: Scalars['Boolean']['output']; -}; - - -export type WorkspaceInviteMutationsBatchCreateArgs = { - input: Array; - workspaceId: Scalars['String']['input']; -}; - - -export type WorkspaceInviteMutationsCancelArgs = { - inviteId: Scalars['String']['input']; - workspaceId: Scalars['String']['input']; -}; - - -export type WorkspaceInviteMutationsCreateArgs = { - input: WorkspaceInviteCreateInput; - workspaceId: Scalars['String']['input']; -}; - - -export type WorkspaceInviteMutationsResendArgs = { - input: WorkspaceInviteResendInput; -}; - - -export type WorkspaceInviteMutationsUseArgs = { - input: WorkspaceInviteUseInput; -}; - -export type WorkspaceInviteResendInput = { - inviteId: Scalars['String']['input']; - workspaceId: Scalars['String']['input']; -}; - -export type WorkspaceInviteUseInput = { - accept: Scalars['Boolean']['input']; - /** - * If invite is attached to an unregistered email, the invite can only be used if this is set to true. - * Upon accepting such an invite, the unregistered email will be added to the user's account as well. - */ - addNewEmail?: InputMaybe; - token: Scalars['String']['input']; -}; - -export type WorkspaceJoinRequest = { - __typename?: 'WorkspaceJoinRequest'; - createdAt: Scalars['DateTime']['output']; - id: Scalars['String']['output']; - status: WorkspaceJoinRequestStatus; - user: LimitedUser; - workspace: Workspace; -}; - -export type WorkspaceJoinRequestCollection = { - __typename?: 'WorkspaceJoinRequestCollection'; - cursor?: Maybe; - items: Array; - totalCount: Scalars['Int']['output']; -}; - -export type WorkspaceJoinRequestMutations = { - __typename?: 'WorkspaceJoinRequestMutations'; - approve: Scalars['Boolean']['output']; - deny: Scalars['Boolean']['output']; -}; - - -export type WorkspaceJoinRequestMutationsApproveArgs = { - input: ApproveWorkspaceJoinRequestInput; -}; - - -export type WorkspaceJoinRequestMutationsDenyArgs = { - input: DenyWorkspaceJoinRequestInput; -}; - -export enum WorkspaceJoinRequestStatus { - Approved = 'approved', - Denied = 'denied', - Pending = 'pending' -} - -export type WorkspaceMutations = { - __typename?: 'WorkspaceMutations'; - addDomain: Workspace; - billing: WorkspaceBillingMutations; - create: Workspace; - delete: Scalars['Boolean']['output']; - deleteDomain: Workspace; - deleteSsoProvider: Scalars['Boolean']['output']; - /** Dismiss a workspace from the discoverable list, behind the scene a join request is created with the status "dismissed" */ - dismiss: Scalars['Boolean']['output']; - invites: WorkspaceInviteMutations; - join: Workspace; - leave: Scalars['Boolean']['output']; - projects: WorkspaceProjectMutations; - requestToJoin: Scalars['Boolean']['output']; - /** Set the default region where project data will be stored. Only available to admins. */ - setDefaultRegion: Workspace; - update: Workspace; - updateCreationState: Scalars['Boolean']['output']; - updateRole: Workspace; -}; - - -export type WorkspaceMutationsAddDomainArgs = { - input: AddDomainToWorkspaceInput; -}; - - -export type WorkspaceMutationsCreateArgs = { - input: WorkspaceCreateInput; -}; - - -export type WorkspaceMutationsDeleteArgs = { - workspaceId: Scalars['String']['input']; -}; - - -export type WorkspaceMutationsDeleteDomainArgs = { - input: WorkspaceDomainDeleteInput; -}; - - -export type WorkspaceMutationsDeleteSsoProviderArgs = { - workspaceId: Scalars['String']['input']; -}; - - -export type WorkspaceMutationsDismissArgs = { - input: WorkspaceDismissInput; -}; - - -export type WorkspaceMutationsJoinArgs = { - input: JoinWorkspaceInput; -}; - - -export type WorkspaceMutationsLeaveArgs = { - id: Scalars['ID']['input']; -}; - - -export type WorkspaceMutationsRequestToJoinArgs = { - input: WorkspaceRequestToJoinInput; -}; - - -export type WorkspaceMutationsSetDefaultRegionArgs = { - regionKey: Scalars['String']['input']; - workspaceId: Scalars['String']['input']; -}; - - -export type WorkspaceMutationsUpdateArgs = { - input: WorkspaceUpdateInput; -}; - - -export type WorkspaceMutationsUpdateCreationStateArgs = { - input: WorkspaceCreationStateInput; -}; - - -export type WorkspaceMutationsUpdateRoleArgs = { - input: WorkspaceRoleUpdateInput; -}; - -export enum WorkspacePaymentMethod { - Billing = 'billing', - Invoice = 'invoice', - Unpaid = 'unpaid' -} - -export type WorkspacePlan = { - __typename?: 'WorkspacePlan'; - createdAt: Scalars['DateTime']['output']; - name: WorkspacePlans; - paymentMethod: WorkspacePaymentMethod; - status: WorkspacePlanStatuses; -}; - -export enum WorkspacePlanStatuses { - CancelationScheduled = 'cancelationScheduled', - Canceled = 'canceled', - Expired = 'expired', - PaymentFailed = 'paymentFailed', - Trial = 'trial', - Valid = 'valid' -} - -export enum WorkspacePlans { - Academia = 'academia', - Business = 'business', - BusinessInvoiced = 'businessInvoiced', - Plus = 'plus', - PlusInvoiced = 'plusInvoiced', - Starter = 'starter', - StarterInvoiced = 'starterInvoiced', - Unlimited = 'unlimited' -} - -export type WorkspaceProjectCreateInput = { - description?: InputMaybe; - name?: InputMaybe; - visibility?: InputMaybe; - workspaceId: Scalars['String']['input']; -}; - -export type WorkspaceProjectInviteCreateInput = { - /** Either this or userId must be filled */ - email?: InputMaybe; - /** Defaults to the contributor role, if not specified */ - role?: InputMaybe; - /** Can only be specified if guest mode is on or if the user is an admin */ - serverRole?: InputMaybe; - /** Either this or email must be filled */ - userId?: InputMaybe; - /** Only taken into account, if project belongs to a workspace. Defaults to guest access. */ - workspaceRole?: InputMaybe; -}; - -export type WorkspaceProjectMutations = { - __typename?: 'WorkspaceProjectMutations'; - create: Project; - moveToWorkspace: Project; - updateRole: Project; -}; - - -export type WorkspaceProjectMutationsCreateArgs = { - input: WorkspaceProjectCreateInput; -}; - - -export type WorkspaceProjectMutationsMoveToWorkspaceArgs = { - projectId: Scalars['String']['input']; - workspaceId: Scalars['String']['input']; -}; - - -export type WorkspaceProjectMutationsUpdateRoleArgs = { - input: ProjectUpdateRoleInput; -}; - -export type WorkspaceProjectsFilter = { - /** Filter out projects by name */ - search?: InputMaybe; -}; - -export type WorkspaceProjectsUpdatedMessage = { - __typename?: 'WorkspaceProjectsUpdatedMessage'; - /** Project entity, null if project was deleted */ - project?: Maybe; - /** Project ID */ - projectId: Scalars['String']['output']; - /** Message type */ - type: WorkspaceProjectsUpdatedMessageType; - /** Workspace ID */ - workspaceId: Scalars['String']['output']; -}; - -export enum WorkspaceProjectsUpdatedMessageType { - Added = 'ADDED', - Removed = 'REMOVED' -} - -export type WorkspaceRequestToJoinInput = { - workspaceId: Scalars['ID']['input']; -}; - -export enum WorkspaceRole { - Admin = 'ADMIN', - Guest = 'GUEST', - Member = 'MEMBER' -} - -export type WorkspaceRoleDeleteInput = { - userId: Scalars['String']['input']; - workspaceId: Scalars['String']['input']; -}; - -export type WorkspaceRoleUpdateInput = { - /** Leave role null to revoke access entirely */ - role?: InputMaybe; - userId: Scalars['String']['input']; - workspaceId: Scalars['String']['input']; -}; - -export type WorkspaceSso = { - __typename?: 'WorkspaceSso'; - /** If null, the workspace does not have SSO configured */ - provider?: Maybe; - session?: Maybe; -}; - -export type WorkspaceSsoProvider = { - __typename?: 'WorkspaceSsoProvider'; - clientId: Scalars['String']['output']; - id: Scalars['ID']['output']; - issuerUrl: Scalars['String']['output']; - name: Scalars['String']['output']; -}; - -export type WorkspaceSsoSession = { - __typename?: 'WorkspaceSsoSession'; - createdAt: Scalars['DateTime']['output']; - validUntil: Scalars['DateTime']['output']; -}; - -export type WorkspaceSubscription = { - __typename?: 'WorkspaceSubscription'; - billingInterval: BillingInterval; - createdAt: Scalars['DateTime']['output']; - currentBillingCycleEnd: Scalars['DateTime']['output']; - seats: WorkspaceSubscriptionSeats; - updatedAt: Scalars['DateTime']['output']; -}; - -export type WorkspaceSubscriptionSeats = { - __typename?: 'WorkspaceSubscriptionSeats'; - guest: Scalars['Int']['output']; - plan: Scalars['Int']['output']; -}; - -export type WorkspaceTeamFilter = { - /** Limit team members to provided role(s) */ - roles?: InputMaybe>; - /** Search for team members by name or email */ - search?: InputMaybe; -}; - -export type WorkspaceUpdateInput = { - defaultProjectRole?: InputMaybe; - description?: InputMaybe; - discoverabilityEnabled?: InputMaybe; - domainBasedMembershipProtectionEnabled?: InputMaybe; - id: Scalars['String']['input']; - /** Logo image as base64-encoded string */ - logo?: InputMaybe; - name?: InputMaybe; - slug?: InputMaybe; -}; - -export type WorkspaceUpdatedMessage = { - __typename?: 'WorkspaceUpdatedMessage'; - /** Workspace ID */ - id: Scalars['String']['output']; - /** Workspace itself */ - workspace: Workspace; -}; - -export type GetStreamAccessRequestQueryVariables = Exact<{ - streamId: Scalars['String']['input']; -}>; - - -export type GetStreamAccessRequestQuery = { __typename?: 'Query', streamAccessRequest?: { __typename?: 'StreamAccessRequest', id: string, streamId: string, createdAt: string } | null }; - -export type CreateStreamAccessRequestMutationVariables = Exact<{ - streamId: Scalars['String']['input']; -}>; - - -export type CreateStreamAccessRequestMutation = { __typename?: 'Mutation', streamAccessRequestCreate: { __typename?: 'StreamAccessRequest', id: string, streamId: string, createdAt: string } }; - -export type UseStreamAccessRequestMutationVariables = Exact<{ - requestId: Scalars['String']['input']; - accept: Scalars['Boolean']['input']; - role?: InputMaybe; -}>; - - -export type UseStreamAccessRequestMutation = { __typename?: 'Mutation', streamAccessRequestUse: boolean }; - -export type StreamWithBranchQueryVariables = Exact<{ - streamId: Scalars['String']['input']; - branchName: Scalars['String']['input']; - cursor?: InputMaybe; -}>; - - -export type StreamWithBranchQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, name: string, role?: string | null, branch?: { __typename?: 'Branch', id: string, name: string, description?: string | null, commits?: { __typename?: 'CommitCollection', totalCount: number, cursor?: string | null, items?: Array<{ __typename?: 'Commit', id: string, authorName?: string | null, authorId?: string | null, authorAvatar?: string | null, sourceApplication?: string | null, message?: string | null, referencedObject: string, createdAt?: string | null, commentCount: number }> | null } | null } | null } | null }; - -export type BranchCreatedSubscriptionVariables = Exact<{ - streamId: Scalars['String']['input']; -}>; - - -export type BranchCreatedSubscription = { __typename?: 'Subscription', branchCreated?: Record | null }; - -export type StreamAllBranchesQueryVariables = Exact<{ - streamId: Scalars['String']['input']; - cursor?: InputMaybe; -}>; - - -export type StreamAllBranchesQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, branches?: { __typename?: 'BranchCollection', totalCount: number, cursor?: string | null, items?: Array<{ __typename?: 'Branch', id: string, name: string, description?: string | null, createdAt?: string | null, author?: { __typename?: 'User', id: string, name: string } | null, commits?: { __typename?: 'CommitCollection', totalCount: number } | null }> | null } | null } | null }; - -export type CommentFullInfoFragment = { __typename?: 'Comment', id: string, archived: boolean, authorId: string, data?: Record | null, screenshot?: string | null, createdAt: string, updatedAt: string, viewedAt?: string | null, text: { __typename?: 'SmartTextEditorValue', doc?: Record | null, attachments?: Array<{ __typename?: 'BlobMetadata', id: string, fileName: string, streamId: string, fileType: string, fileSize?: number | null }> | null }, replies: { __typename?: 'CommentCollection', totalCount: number }, resources: Array<{ __typename?: 'ResourceIdentifier', resourceId: string, resourceType: ResourceType }> }; - -export type StreamCommitQueryQueryVariables = Exact<{ - streamId: Scalars['String']['input']; - id: Scalars['String']['input']; -}>; - - -export type StreamCommitQueryQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, name: string, role?: string | null, commit?: { __typename?: 'Commit', id: string, message?: string | null, referencedObject: string, authorName?: string | null, authorId?: string | null, authorAvatar?: string | null, createdAt?: string | null, branchName?: string | null, sourceApplication?: string | null } | null } | null }; - -export type StreamBranchesSelectorQueryVariables = Exact<{ - streamId: Scalars['String']['input']; -}>; - - -export type StreamBranchesSelectorQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, branches?: { __typename?: 'BranchCollection', items?: Array<{ __typename?: 'Branch', name: string }> | null } | null } | null }; - -export type MoveCommitsMutationVariables = Exact<{ - input: CommitsMoveInput; -}>; - - -export type MoveCommitsMutation = { __typename?: 'Mutation', commitsMove: boolean }; - -export type DeleteCommitsMutationVariables = Exact<{ - input: CommitsDeleteInput; -}>; - - -export type DeleteCommitsMutation = { __typename?: 'Mutation', commitsDelete: boolean }; - -export type BasicStreamAccessRequestFieldsFragment = { __typename?: 'StreamAccessRequest', id: string, streamId: string, createdAt: string }; - -export type FullStreamAccessRequestFieldsFragment = { __typename?: 'StreamAccessRequest', id: string, streamId: string, createdAt: string, requester: { __typename?: 'LimitedUser', id: string, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null } }; - -export type ActivityMainFieldsFragment = { __typename?: 'Activity', id: string, actionType: string, info: Record, userId: string, streamId?: string | null, resourceId: string, resourceType: string, time: string, message: string }; - -export type LimitedCommitActivityFieldsFragment = { __typename?: 'Activity', id: string, info: Record, time: string, userId: string, message: string }; - -export type StreamPendingAccessRequestsFragment = { __typename?: 'Stream', pendingAccessRequests?: Array<{ __typename?: 'StreamAccessRequest', id: string, streamId: string, createdAt: string, requester: { __typename?: 'LimitedUser', id: string, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null } }> | null }; - -export type StreamFileUploadFragment = { __typename?: 'FileUpload', id: string, convertedCommitId?: string | null, userId: string, convertedStatus: number, convertedMessage?: string | null, fileName: string, fileType: string, uploadComplete: boolean, uploadDate: string, convertedLastUpdate: string }; - -export type LimitedUserFieldsFragment = { __typename?: 'LimitedUser', id: string, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null }; - -export type StreamCollaboratorFieldsFragment = { __typename?: 'StreamCollaborator', id: string, name: string, role: string, company?: string | null, avatar?: string | null, serverRole: string }; - -export type UsersOwnInviteFieldsFragment = { __typename?: 'PendingStreamCollaborator', id: string, inviteId: string, streamId: string, streamName: string, token?: string | null, invitedBy: { __typename?: 'LimitedUser', id: string, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null } }; - -export type StreamInviteQueryVariables = Exact<{ - streamId: Scalars['String']['input']; - token?: InputMaybe; -}>; - - -export type StreamInviteQuery = { __typename?: 'Query', streamInvite?: { __typename?: 'PendingStreamCollaborator', id: string, inviteId: string, streamId: string, streamName: string, token?: string | null, invitedBy: { __typename?: 'LimitedUser', id: string, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null } } | null }; - -export type UserStreamInvitesQueryVariables = Exact<{ [key: string]: never; }>; - - -export type UserStreamInvitesQuery = { __typename?: 'Query', streamInvites: Array<{ __typename?: 'PendingStreamCollaborator', id: string, inviteId: string, streamId: string, streamName: string, token?: string | null, invitedBy: { __typename?: 'LimitedUser', id: string, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null } }> }; - -export type UseStreamInviteMutationVariables = Exact<{ - accept: Scalars['Boolean']['input']; - streamId: Scalars['String']['input']; - token: Scalars['String']['input']; -}>; - - -export type UseStreamInviteMutation = { __typename?: 'Mutation', streamInviteUse: boolean }; - -export type CancelStreamInviteMutationVariables = Exact<{ - streamId: Scalars['String']['input']; - inviteId: Scalars['String']['input']; -}>; - - -export type CancelStreamInviteMutation = { __typename?: 'Mutation', streamInviteCancel: boolean }; - -export type DeleteInviteMutationVariables = Exact<{ - inviteId: Scalars['String']['input']; -}>; - - -export type DeleteInviteMutation = { __typename?: 'Mutation', inviteDelete: boolean }; - -export type ResendInviteMutationVariables = Exact<{ - inviteId: Scalars['String']['input']; -}>; - - -export type ResendInviteMutation = { __typename?: 'Mutation', inviteResend: boolean }; - -export type BatchInviteToServerMutationVariables = Exact<{ - paramsArray: Array | ServerInviteCreateInput; -}>; - - -export type BatchInviteToServerMutation = { __typename?: 'Mutation', serverInviteBatchCreate: boolean }; - -export type BatchInviteToStreamsMutationVariables = Exact<{ - paramsArray: Array | StreamInviteCreateInput; -}>; - - -export type BatchInviteToStreamsMutation = { __typename?: 'Mutation', streamInviteBatchCreate: boolean }; - -export type StreamObjectQueryVariables = Exact<{ - streamId: Scalars['String']['input']; - id: Scalars['String']['input']; -}>; - - -export type StreamObjectQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, object?: { __typename?: 'Object', totalChildrenCount?: number | null, id: string, speckleType?: string | null, data?: Record | null } | null } | null }; - -export type StreamObjectNoDataQueryVariables = Exact<{ - streamId: Scalars['String']['input']; - id: Scalars['String']['input']; -}>; - - -export type StreamObjectNoDataQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, name: string, object?: { __typename?: 'Object', totalChildrenCount?: number | null, id: string, speckleType?: string | null } | null } | null }; - -export type ServerInfoBlobSizeFieldsFragment = { __typename?: 'ServerInfo', configuration: { __typename?: 'ServerConfiguration', blobSizeLimitBytes: number } }; - -export type MainServerInfoFieldsFragment = { __typename?: 'ServerInfo', name: string, company?: string | null, description?: string | null, adminContact?: string | null, canonicalUrl?: string | null, termsOfService?: string | null, inviteOnly?: boolean | null, version?: string | null, guestModeEnabled: boolean, enableNewWebUiMessaging?: boolean | null, migration?: { __typename?: 'ServerMigration', movedTo?: string | null } | null }; - -export type ServerInfoRolesFieldsFragment = { __typename?: 'ServerInfo', serverRoles: Array<{ __typename?: 'ServerRoleItem', id: string, title: string }> }; - -export type ServerInfoScopesFieldsFragment = { __typename?: 'ServerInfo', scopes: Array<{ __typename?: 'Scope', name: string, description: string }> }; - -export type MainServerInfoQueryVariables = Exact<{ [key: string]: never; }>; - - -export type MainServerInfoQuery = { __typename?: 'Query', serverInfo: { __typename?: 'ServerInfo', name: string, company?: string | null, description?: string | null, adminContact?: string | null, canonicalUrl?: string | null, termsOfService?: string | null, inviteOnly?: boolean | null, version?: string | null, guestModeEnabled: boolean, enableNewWebUiMessaging?: boolean | null, migration?: { __typename?: 'ServerMigration', movedTo?: string | null } | null } }; - -export type FullServerInfoQueryVariables = Exact<{ [key: string]: never; }>; - - -export type FullServerInfoQuery = { __typename?: 'Query', serverInfo: { __typename?: 'ServerInfo', name: string, company?: string | null, description?: string | null, adminContact?: string | null, canonicalUrl?: string | null, termsOfService?: string | null, inviteOnly?: boolean | null, version?: string | null, guestModeEnabled: boolean, enableNewWebUiMessaging?: boolean | null, migration?: { __typename?: 'ServerMigration', movedTo?: string | null } | null, serverRoles: Array<{ __typename?: 'ServerRoleItem', id: string, title: string }>, scopes: Array<{ __typename?: 'Scope', name: string, description: string }>, configuration: { __typename?: 'ServerConfiguration', blobSizeLimitBytes: number } } }; - -export type ServerInfoBlobSizeLimitQueryVariables = Exact<{ [key: string]: never; }>; - - -export type ServerInfoBlobSizeLimitQuery = { __typename?: 'Query', serverInfo: { __typename?: 'ServerInfo', configuration: { __typename?: 'ServerConfiguration', blobSizeLimitBytes: number } } }; - -export type AvailableServerRolesQueryVariables = Exact<{ [key: string]: never; }>; - - -export type AvailableServerRolesQuery = { __typename?: 'Query', serverInfo: { __typename?: 'ServerInfo', guestModeEnabled: boolean, serverRoles: Array<{ __typename?: 'ServerRoleItem', id: string, title: string }> } }; - -export type StreamCommitsQueryVariables = Exact<{ - id: Scalars['String']['input']; -}>; - - -export type StreamCommitsQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, role?: string | null, commits?: { __typename?: 'CommitCollection', totalCount: number, items?: Array<{ __typename?: 'Commit', id: string, authorId?: string | null, authorName?: string | null, authorAvatar?: string | null, createdAt?: string | null, message?: string | null, referencedObject: string, branchName?: string | null, sourceApplication?: string | null }> | null } | null } | null }; - -export type StreamsQueryVariables = Exact<{ - cursor?: InputMaybe; -}>; - - -export type StreamsQuery = { __typename?: 'Query', streams?: { __typename?: 'UserStreamCollection', totalCount: number, cursor?: string | null, items?: Array<{ __typename?: 'Stream', id: string, name: string, description?: string | null, role?: string | null, isPublic: boolean, createdAt: string, updatedAt: string, commentCount: number, favoritedDate?: string | null, favoritesCount: number, collaborators: Array<{ __typename?: 'StreamCollaborator', id: string, name: string, company?: string | null, avatar?: string | null, role: string }>, commits?: { __typename?: 'CommitCollection', totalCount: number, items?: Array<{ __typename?: 'Commit', id: string, createdAt?: string | null, message?: string | null, authorId?: string | null, branchName?: string | null, authorName?: string | null, authorAvatar?: string | null, referencedObject: string }> | null } | null, branches?: { __typename?: 'BranchCollection', totalCount: number } | null }> | null } | null }; - -export type CommonStreamFieldsFragment = { __typename?: 'Stream', id: string, name: string, description?: string | null, role?: string | null, isPublic: boolean, createdAt: string, updatedAt: string, commentCount: number, favoritedDate?: string | null, favoritesCount: number, collaborators: Array<{ __typename?: 'StreamCollaborator', id: string, name: string, role: string, company?: string | null, avatar?: string | null, serverRole: string }>, commits?: { __typename?: 'CommitCollection', totalCount: number } | null, branches?: { __typename?: 'BranchCollection', totalCount: number } | null }; - -export type StreamQueryVariables = Exact<{ - id: Scalars['String']['input']; -}>; - - -export type StreamQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, name: string, description?: string | null, role?: string | null, isPublic: boolean, createdAt: string, updatedAt: string, commentCount: number, favoritedDate?: string | null, favoritesCount: number, collaborators: Array<{ __typename?: 'StreamCollaborator', id: string, name: string, role: string, company?: string | null, avatar?: string | null, serverRole: string }>, commits?: { __typename?: 'CommitCollection', totalCount: number } | null, branches?: { __typename?: 'BranchCollection', totalCount: number } | null } | null }; - -export type StreamWithCollaboratorsQueryVariables = Exact<{ - id: Scalars['String']['input']; -}>; - - -export type StreamWithCollaboratorsQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, name: string, isPublic: boolean, role?: string | null, collaborators: Array<{ __typename?: 'StreamCollaborator', id: string, name: string, role: string, company?: string | null, avatar?: string | null, serverRole: string }>, pendingCollaborators?: Array<{ __typename?: 'PendingStreamCollaborator', title: string, inviteId: string, role: string, user?: { __typename?: 'LimitedUser', id: string, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null } | null }> | null, pendingAccessRequests?: Array<{ __typename?: 'StreamAccessRequest', id: string, streamId: string, createdAt: string, requester: { __typename?: 'LimitedUser', id: string, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null } }> | null } | null }; - -export type StreamWithActivityQueryVariables = Exact<{ - id: Scalars['String']['input']; - cursor?: InputMaybe; -}>; - - -export type StreamWithActivityQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, name: string, createdAt: string, commits?: { __typename?: 'CommitCollection', totalCount: number } | null, branches?: { __typename?: 'BranchCollection', totalCount: number } | null, activity?: { __typename?: 'ActivityCollection', totalCount: number, cursor?: string | null, items: Array<{ __typename?: 'Activity', id: string, actionType: string, info: Record, userId: string, streamId?: string | null, resourceId: string, resourceType: string, time: string, message: string }> } | null } | null }; - -export type LeaveStreamMutationVariables = Exact<{ - streamId: Scalars['String']['input']; -}>; - - -export type LeaveStreamMutation = { __typename?: 'Mutation', streamLeave: boolean }; - -export type UpdateStreamPermissionMutationVariables = Exact<{ - params: StreamUpdatePermissionInput; -}>; - - -export type UpdateStreamPermissionMutation = { __typename?: 'Mutation', streamUpdatePermission?: boolean | null }; - -export type StreamFirstCommitQueryVariables = Exact<{ - id: Scalars['String']['input']; -}>; - - -export type StreamFirstCommitQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, commits?: { __typename?: 'CommitCollection', totalCount: number, items?: Array<{ __typename?: 'Commit', id: string, referencedObject: string }> | null } | null } | null }; - -export type StreamBranchFirstCommitQueryVariables = Exact<{ - id: Scalars['String']['input']; - branch: Scalars['String']['input']; -}>; - - -export type StreamBranchFirstCommitQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, branch?: { __typename?: 'Branch', commits?: { __typename?: 'CommitCollection', totalCount: number, items?: Array<{ __typename?: 'Commit', id: string, referencedObject: string }> | null } | null } | null } | null }; - -export type StreamSettingsQueryVariables = Exact<{ - id: Scalars['String']['input']; -}>; - - -export type StreamSettingsQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, name: string, description?: string | null, isPublic: boolean, isDiscoverable: boolean, allowPublicComments: boolean, role?: string | null } | null }; - -export type SearchStreamsQueryVariables = Exact<{ - query?: InputMaybe; -}>; - - -export type SearchStreamsQuery = { __typename?: 'Query', streams?: { __typename?: 'UserStreamCollection', totalCount: number, cursor?: string | null, items?: Array<{ __typename?: 'Stream', id: string, name: string, updatedAt: string }> | null } | null }; - -export type UpdateStreamSettingsMutationVariables = Exact<{ - input: StreamUpdateInput; -}>; - - -export type UpdateStreamSettingsMutation = { __typename?: 'Mutation', streamUpdate: boolean }; - -export type DeleteStreamMutationVariables = Exact<{ - id: Scalars['String']['input']; -}>; - - -export type DeleteStreamMutation = { __typename?: 'Mutation', streamDelete: boolean }; - -export type ShareableStreamQueryVariables = Exact<{ - id: Scalars['String']['input']; -}>; - - -export type ShareableStreamQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, isPublic: boolean, role?: string | null, collaborators: Array<{ __typename?: 'StreamCollaborator', id: string, name: string, role: string, company?: string | null, avatar?: string | null, serverRole: string }> } | null }; - -export type StreamFileUploadsUpdatedSubscriptionVariables = Exact<{ - id: Scalars['String']['input']; -}>; - - -export type StreamFileUploadsUpdatedSubscription = { __typename?: 'Subscription', projectFileImportUpdated: { __typename?: 'ProjectFileImportUpdatedMessage', type: ProjectFileImportUpdatedMessageType, id: string, upload: { __typename?: 'FileUpload', id: string, convertedCommitId?: string | null, userId: string, convertedStatus: number, convertedMessage?: string | null, fileName: string, fileType: string, uploadComplete: boolean, uploadDate: string, convertedLastUpdate: string } } }; - -export type CommonUserFieldsFragment = { __typename?: 'User', id: string, email?: string | null, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null, hasPendingVerification?: boolean | null, profiles?: Record | null, role?: string | null, streams: { __typename?: 'UserStreamCollection', totalCount: number }, commits?: { __typename?: 'CommitCollection', totalCount: number, items?: Array<{ __typename?: 'Commit', id: string, createdAt?: string | null }> | null } | null }; - -export type UserFavoriteStreamsQueryVariables = Exact<{ - cursor?: InputMaybe; -}>; - - -export type UserFavoriteStreamsQuery = { __typename?: 'Query', activeUser?: { __typename?: 'User', id: string, email?: string | null, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null, hasPendingVerification?: boolean | null, profiles?: Record | null, role?: string | null, favoriteStreams: { __typename?: 'StreamCollection', totalCount: number, cursor?: string | null, items?: Array<{ __typename?: 'Stream', id: string, name: string, description?: string | null, role?: string | null, isPublic: boolean, createdAt: string, updatedAt: string, commentCount: number, favoritedDate?: string | null, favoritesCount: number, collaborators: Array<{ __typename?: 'StreamCollaborator', id: string, name: string, role: string, company?: string | null, avatar?: string | null, serverRole: string }>, commits?: { __typename?: 'CommitCollection', totalCount: number } | null, branches?: { __typename?: 'BranchCollection', totalCount: number } | null }> | null }, streams: { __typename?: 'UserStreamCollection', totalCount: number }, commits?: { __typename?: 'CommitCollection', totalCount: number, items?: Array<{ __typename?: 'Commit', id: string, createdAt?: string | null }> | null } | null } | null }; - -export type MainUserDataQueryVariables = Exact<{ [key: string]: never; }>; - - -export type MainUserDataQuery = { __typename?: 'Query', activeUser?: { __typename?: 'User', id: string, email?: string | null, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null, hasPendingVerification?: boolean | null, profiles?: Record | null, role?: string | null, streams: { __typename?: 'UserStreamCollection', totalCount: number }, commits?: { __typename?: 'CommitCollection', totalCount: number, items?: Array<{ __typename?: 'Commit', id: string, createdAt?: string | null }> | null } | null } | null }; - -export type ProfileSelfQueryVariables = Exact<{ [key: string]: never; }>; - - -export type ProfileSelfQuery = { __typename?: 'Query', activeUser?: { __typename?: 'User', totalOwnedStreamsFavorites: number, notificationPreferences: Record, id: string, email?: string | null, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null, hasPendingVerification?: boolean | null, profiles?: Record | null, role?: string | null, streams: { __typename?: 'UserStreamCollection', totalCount: number }, commits?: { __typename?: 'CommitCollection', totalCount: number, items?: Array<{ __typename?: 'Commit', id: string, createdAt?: string | null }> | null } | null } | null }; - -export type UserSearchQueryVariables = Exact<{ - query: Scalars['String']['input']; - limit: Scalars['Int']['input']; - cursor?: InputMaybe; - archived?: InputMaybe; -}>; - - -export type UserSearchQuery = { __typename?: 'Query', userSearch: { __typename?: 'UserSearchResultCollection', cursor?: string | null, items: Array<{ __typename?: 'LimitedUser', id: string, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null }> } }; - -export type IsLoggedInQueryVariables = Exact<{ [key: string]: never; }>; - - -export type IsLoggedInQuery = { __typename?: 'Query', activeUser?: { __typename?: 'User', id: string } | null }; - -export type AdminUsersListQueryVariables = Exact<{ - limit?: InputMaybe; - offset?: InputMaybe; - query?: InputMaybe; -}>; - - -export type AdminUsersListQuery = { __typename?: 'Query', adminUsers?: { __typename?: 'AdminUsersListCollection', totalCount: number, items: Array<{ __typename?: 'AdminUsersListItem', id: string, registeredUser?: { __typename?: 'User', id: string, email?: string | null, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null, profiles?: Record | null, role?: string | null, authorizedApps?: Array<{ __typename?: 'ServerAppListItem', name: string }> | null } | null, invitedUser?: { __typename?: 'ServerInvite', id: string, email: string, invitedBy: { __typename?: 'LimitedUser', id: string, name: string } } | null }> } | null }; - -export type UserTimelineQueryVariables = Exact<{ - cursor?: InputMaybe; -}>; - - -export type UserTimelineQuery = { __typename?: 'Query', activeUser?: { __typename?: 'User', id: string, timeline?: { __typename?: 'ActivityCollection', totalCount: number, cursor?: string | null, items: Array<{ __typename?: 'Activity', id: string, actionType: string, info: Record, userId: string, streamId?: string | null, resourceId: string, resourceType: string, time: string, message: string }> } | null } | null }; - -export type ValidatePasswordStrengthQueryVariables = Exact<{ - pwd: Scalars['String']['input']; -}>; - - -export type ValidatePasswordStrengthQuery = { __typename?: 'Query', userPwdStrength: { __typename?: 'PasswordStrengthCheckResults', score: number, feedback: { __typename?: 'PasswordStrengthCheckFeedback', warning?: string | null, suggestions: Array } } }; - -export type EmailVerificationBannerStateQueryVariables = Exact<{ [key: string]: never; }>; - - -export type EmailVerificationBannerStateQuery = { __typename?: 'Query', activeUser?: { __typename?: 'User', id: string, email?: string | null, verified?: boolean | null, hasPendingVerification?: boolean | null } | null }; - -export type RequestVerificationMutationVariables = Exact<{ [key: string]: never; }>; - - -export type RequestVerificationMutation = { __typename?: 'Mutation', requestVerification: boolean }; - -export type UpdateUserNotificationPreferencesMutationVariables = Exact<{ - preferences: Scalars['JSONObject']['input']; -}>; - - -export type UpdateUserNotificationPreferencesMutation = { __typename?: 'Mutation', userNotificationPreferencesUpdate?: boolean | null }; - -export type UserByIdQueryVariables = Exact<{ - id: Scalars['String']['input']; -}>; - - -export type UserByIdQuery = { __typename?: 'Query', otherUser?: { __typename?: 'LimitedUser', id: string, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null } | null }; - -export type UserProfileQueryVariables = Exact<{ - id: Scalars['String']['input']; -}>; - - -export type UserProfileQuery = { __typename?: 'Query', otherUser?: { __typename?: 'LimitedUser', id: string, name: string, bio?: string | null, company?: string | null, avatar?: string | null, verified?: boolean | null } | null }; - -export type WebhookQueryVariables = Exact<{ - streamId: Scalars['String']['input']; - webhookId: Scalars['String']['input']; -}>; - - -export type WebhookQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, role?: string | null, webhooks: { __typename?: 'WebhookCollection', items: Array<{ __typename?: 'Webhook', id: string, streamId: string, url: string, description?: string | null, triggers: Array, enabled?: boolean | null, history?: { __typename?: 'WebhookEventCollection', items?: Array<{ __typename?: 'WebhookEvent', status: number, statusInfo: string } | null> | null } | null }> } } | null }; - -export type WebhooksQueryVariables = Exact<{ - streamId: Scalars['String']['input']; -}>; - - -export type WebhooksQuery = { __typename?: 'Query', stream?: { __typename?: 'Stream', id: string, name: string, role?: string | null, webhooks: { __typename?: 'WebhookCollection', items: Array<{ __typename?: 'Webhook', id: string, streamId: string, url: string, description?: string | null, triggers: Array, enabled?: boolean | null, history?: { __typename?: 'WebhookEventCollection', items?: Array<{ __typename?: 'WebhookEvent', status: number, statusInfo: string, lastUpdate: string } | null> | null } | null }> } } | null }; - -export const CommentFullInfo = gql` - fragment CommentFullInfo on Comment { - id - archived - authorId - text { - doc - attachments { - id - fileName - streamId - fileType - fileSize - } - } - data - screenshot - replies { - totalCount - } - resources { - resourceId - resourceType - } - createdAt - updatedAt - viewedAt -} - `; -export const ActivityMainFields = gql` - fragment ActivityMainFields on Activity { - id - actionType - info - userId - streamId - resourceId - resourceType - time - message -} - `; -export const LimitedCommitActivityFields = gql` - fragment LimitedCommitActivityFields on Activity { - id - info - time - userId - message -} - `; -export const BasicStreamAccessRequestFields = gql` - fragment BasicStreamAccessRequestFields on StreamAccessRequest { - id - streamId - createdAt -} - `; -export const LimitedUserFields = gql` - fragment LimitedUserFields on LimitedUser { - id - name - bio - company - avatar - verified -} - `; -export const FullStreamAccessRequestFields = gql` - fragment FullStreamAccessRequestFields on StreamAccessRequest { - ...BasicStreamAccessRequestFields - requester { - ...LimitedUserFields - } -} - `; -export const StreamPendingAccessRequests = gql` - fragment StreamPendingAccessRequests on Stream { - pendingAccessRequests { - ...FullStreamAccessRequestFields - } -} - `; -export const StreamFileUpload = gql` - fragment StreamFileUpload on FileUpload { - id - convertedCommitId - userId - convertedStatus - convertedMessage - fileName - fileType - uploadComplete - uploadDate - convertedLastUpdate -} - `; -export const UsersOwnInviteFields = gql` - fragment UsersOwnInviteFields on PendingStreamCollaborator { - id - inviteId - streamId - streamName - token - invitedBy { - ...LimitedUserFields - } -} - `; -export const ServerInfoBlobSizeFields = gql` - fragment ServerInfoBlobSizeFields on ServerInfo { - configuration { - blobSizeLimitBytes - } -} - `; -export const MainServerInfoFields = gql` - fragment MainServerInfoFields on ServerInfo { - name - company - description - adminContact - canonicalUrl - termsOfService - inviteOnly - version - guestModeEnabled - enableNewWebUiMessaging - migration { - movedTo - } -} - `; -export const ServerInfoRolesFields = gql` - fragment ServerInfoRolesFields on ServerInfo { - serverRoles { - id - title - } -} - `; -export const ServerInfoScopesFields = gql` - fragment ServerInfoScopesFields on ServerInfo { - scopes { - name - description - } -} - `; -export const StreamCollaboratorFields = gql` - fragment StreamCollaboratorFields on StreamCollaborator { - id - name - role - company - avatar - serverRole -} - `; -export const CommonStreamFields = gql` - fragment CommonStreamFields on Stream { - id - name - description - role - isPublic - createdAt - updatedAt - commentCount - collaborators { - ...StreamCollaboratorFields - } - commits(limit: 1) { - totalCount - } - branches { - totalCount - } - favoritedDate - favoritesCount -} - `; -export const CommonUserFields = gql` - fragment CommonUserFields on User { - id - email - name - bio - company - avatar - verified - hasPendingVerification - profiles - role - streams { - totalCount - } - commits(limit: 1) { - totalCount - items { - id - createdAt - } - } -} - `; -export const GetStreamAccessRequest = gql` - query GetStreamAccessRequest($streamId: String!) { - streamAccessRequest(streamId: $streamId) { - ...BasicStreamAccessRequestFields - } -} - ${BasicStreamAccessRequestFields}`; -export const CreateStreamAccessRequest = gql` - mutation CreateStreamAccessRequest($streamId: String!) { - streamAccessRequestCreate(streamId: $streamId) { - ...BasicStreamAccessRequestFields - } -} - ${BasicStreamAccessRequestFields}`; -export const UseStreamAccessRequest = gql` - mutation UseStreamAccessRequest($requestId: String!, $accept: Boolean!, $role: StreamRole = STREAM_CONTRIBUTOR) { - streamAccessRequestUse(requestId: $requestId, accept: $accept, role: $role) -} - `; -export const StreamWithBranch = gql` - query StreamWithBranch($streamId: String!, $branchName: String!, $cursor: String) { - stream(id: $streamId) { - id - name - role - branch(name: $branchName) { - id - name - description - commits(cursor: $cursor, limit: 4) { - totalCount - cursor - items { - id - authorName - authorId - authorAvatar - sourceApplication - message - referencedObject - createdAt - commentCount - } - } - } - } -} - `; -export const BranchCreated = gql` - subscription BranchCreated($streamId: String!) { - branchCreated(streamId: $streamId) -} - `; -export const StreamAllBranches = gql` - query StreamAllBranches($streamId: String!, $cursor: String) { - stream(id: $streamId) { - id - branches(limit: 500, cursor: $cursor) { - totalCount - cursor - items { - id - name - description - author { - id - name - } - commits { - totalCount - } - createdAt - } - } - } -} - `; -export const StreamCommitQuery = gql` - query StreamCommitQuery($streamId: String!, $id: String!) { - stream(id: $streamId) { - id - name - role - commit(id: $id) { - id - message - referencedObject - authorName - authorId - authorAvatar - createdAt - branchName - sourceApplication - } - } -} - `; -export const StreamBranchesSelector = gql` - query StreamBranchesSelector($streamId: String!) { - stream(id: $streamId) { - id - branches(limit: 100) { - items { - name - } - } - } -} - `; -export const MoveCommits = gql` - mutation MoveCommits($input: CommitsMoveInput!) { - commitsMove(input: $input) -} - `; -export const DeleteCommits = gql` - mutation DeleteCommits($input: CommitsDeleteInput!) { - commitsDelete(input: $input) -} - `; -export const StreamInvite = gql` - query StreamInvite($streamId: String!, $token: String) { - streamInvite(streamId: $streamId, token: $token) { - ...UsersOwnInviteFields - } -} - ${UsersOwnInviteFields} -${LimitedUserFields}`; -export const UserStreamInvites = gql` - query UserStreamInvites { - streamInvites { - ...UsersOwnInviteFields - } -} - ${UsersOwnInviteFields} -${LimitedUserFields}`; -export const UseStreamInvite = gql` - mutation UseStreamInvite($accept: Boolean!, $streamId: String!, $token: String!) { - streamInviteUse(accept: $accept, streamId: $streamId, token: $token) -} - `; -export const CancelStreamInvite = gql` - mutation CancelStreamInvite($streamId: String!, $inviteId: String!) { - streamInviteCancel(streamId: $streamId, inviteId: $inviteId) -} - `; -export const DeleteInvite = gql` - mutation DeleteInvite($inviteId: String!) { - inviteDelete(inviteId: $inviteId) -} - `; -export const ResendInvite = gql` - mutation ResendInvite($inviteId: String!) { - inviteResend(inviteId: $inviteId) -} - `; -export const BatchInviteToServer = gql` - mutation BatchInviteToServer($paramsArray: [ServerInviteCreateInput!]!) { - serverInviteBatchCreate(input: $paramsArray) -} - `; -export const BatchInviteToStreams = gql` - mutation BatchInviteToStreams($paramsArray: [StreamInviteCreateInput!]!) { - streamInviteBatchCreate(input: $paramsArray) -} - `; -export const StreamObject = gql` - query StreamObject($streamId: String!, $id: String!) { - stream(id: $streamId) { - id - object(id: $id) { - totalChildrenCount - id - speckleType - data - } - } -} - `; -export const StreamObjectNoData = gql` - query StreamObjectNoData($streamId: String!, $id: String!) { - stream(id: $streamId) { - id - name - object(id: $id) { - totalChildrenCount - id - speckleType - } - } -} - `; -export const MainServerInfo = gql` - query MainServerInfo { - serverInfo { - ...MainServerInfoFields - } -} - ${MainServerInfoFields}`; -export const FullServerInfo = gql` - query FullServerInfo { - serverInfo { - ...MainServerInfoFields - ...ServerInfoRolesFields - ...ServerInfoScopesFields - ...ServerInfoBlobSizeFields - } -} - ${MainServerInfoFields} -${ServerInfoRolesFields} -${ServerInfoScopesFields} -${ServerInfoBlobSizeFields}`; -export const ServerInfoBlobSizeLimit = gql` - query ServerInfoBlobSizeLimit { - serverInfo { - ...ServerInfoBlobSizeFields - } -} - ${ServerInfoBlobSizeFields}`; -export const AvailableServerRoles = gql` - query AvailableServerRoles { - serverInfo { - serverRoles { - id - title - } - guestModeEnabled - } -} - `; -export const StreamCommits = gql` - query StreamCommits($id: String!) { - stream(id: $id) { - id - role - commits { - totalCount - items { - id - authorId - authorName - authorAvatar - createdAt - message - referencedObject - branchName - sourceApplication - } - } - } -} - `; -export const Streams = gql` - query Streams($cursor: String) { - streams(cursor: $cursor, limit: 10) { - totalCount - cursor - items { - id - name - description - role - isPublic - createdAt - updatedAt - commentCount - collaborators { - id - name - company - avatar - role - } - commits(limit: 1) { - totalCount - items { - id - createdAt - message - authorId - branchName - authorName - authorAvatar - referencedObject - } - } - branches { - totalCount - } - favoritedDate - favoritesCount - } - } -} - `; -export const Stream = gql` - query Stream($id: String!) { - stream(id: $id) { - ...CommonStreamFields - } -} - ${CommonStreamFields} -${StreamCollaboratorFields}`; -export const StreamWithCollaborators = gql` - query StreamWithCollaborators($id: String!) { - stream(id: $id) { - id - name - isPublic - role - collaborators { - ...StreamCollaboratorFields - } - pendingCollaborators { - title - inviteId - role - user { - ...LimitedUserFields - } - } - pendingAccessRequests { - ...FullStreamAccessRequestFields - } - } -} - ${StreamCollaboratorFields} -${LimitedUserFields} -${FullStreamAccessRequestFields} -${BasicStreamAccessRequestFields}`; -export const StreamWithActivity = gql` - query StreamWithActivity($id: String!, $cursor: DateTime) { - stream(id: $id) { - id - name - createdAt - commits { - totalCount - } - branches { - totalCount - } - activity(cursor: $cursor) { - totalCount - cursor - items { - ...ActivityMainFields - } - } - } -} - ${ActivityMainFields}`; -export const LeaveStream = gql` - mutation LeaveStream($streamId: String!) { - streamLeave(streamId: $streamId) -} - `; -export const UpdateStreamPermission = gql` - mutation UpdateStreamPermission($params: StreamUpdatePermissionInput!) { - streamUpdatePermission(permissionParams: $params) -} - `; -export const StreamFirstCommit = gql` - query StreamFirstCommit($id: String!) { - stream(id: $id) { - id - commits(limit: 1) { - totalCount - items { - id - referencedObject - } - } - } -} - `; -export const StreamBranchFirstCommit = gql` - query StreamBranchFirstCommit($id: String!, $branch: String!) { - stream(id: $id) { - id - branch(name: $branch) { - commits(limit: 1) { - totalCount - items { - id - referencedObject - } - } - } - } -} - `; -export const StreamSettings = gql` - query StreamSettings($id: String!) { - stream(id: $id) { - id - name - description - isPublic - isDiscoverable - allowPublicComments - role - } -} - `; -export const SearchStreams = gql` - query SearchStreams($query: String) { - streams(query: $query) { - totalCount - cursor - items { - id - name - updatedAt - } - } -} - `; -export const UpdateStreamSettings = gql` - mutation UpdateStreamSettings($input: StreamUpdateInput!) { - streamUpdate(stream: $input) -} - `; -export const DeleteStream = gql` - mutation DeleteStream($id: String!) { - streamDelete(id: $id) -} - `; -export const ShareableStream = gql` - query ShareableStream($id: String!) { - stream(id: $id) { - id - isPublic - role - collaborators { - ...StreamCollaboratorFields - } - } -} - ${StreamCollaboratorFields}`; -export const StreamFileUploadsUpdated = gql` - subscription StreamFileUploadsUpdated($id: String!) { - projectFileImportUpdated(id: $id) { - type - id - upload { - ...StreamFileUpload - } - } -} - ${StreamFileUpload}`; -export const UserFavoriteStreams = gql` - query UserFavoriteStreams($cursor: String) { - activeUser { - ...CommonUserFields - favoriteStreams(cursor: $cursor, limit: 10) { - totalCount - cursor - items { - ...CommonStreamFields - } - } - } -} - ${CommonUserFields} -${CommonStreamFields} -${StreamCollaboratorFields}`; -export const MainUserData = gql` - query MainUserData { - activeUser { - ...CommonUserFields - } -} - ${CommonUserFields}`; -export const ProfileSelf = gql` - query ProfileSelf { - activeUser { - ...CommonUserFields - totalOwnedStreamsFavorites - notificationPreferences - } -} - ${CommonUserFields}`; -export const UserSearch = gql` - query UserSearch($query: String!, $limit: Int!, $cursor: String, $archived: Boolean) { - userSearch(query: $query, limit: $limit, cursor: $cursor, archived: $archived) { - cursor - items { - ...LimitedUserFields - } - } -} - ${LimitedUserFields}`; -export const IsLoggedIn = gql` - query IsLoggedIn { - activeUser { - id - } -} - `; -export const AdminUsersList = gql` - query AdminUsersList($limit: Int, $offset: Int, $query: String) { - adminUsers(limit: $limit, offset: $offset, query: $query) { - totalCount - items { - id - registeredUser { - id - email - name - bio - company - avatar - verified - profiles - role - authorizedApps { - name - } - } - invitedUser { - id - email - invitedBy { - id - name - } - } - } - } -} - `; -export const UserTimeline = gql` - query UserTimeline($cursor: DateTime) { - activeUser { - id - timeline(cursor: $cursor) { - totalCount - cursor - items { - ...ActivityMainFields - } - } - } -} - ${ActivityMainFields}`; -export const ValidatePasswordStrength = gql` - query ValidatePasswordStrength($pwd: String!) { - userPwdStrength(pwd: $pwd) { - score - feedback { - warning - suggestions - } - } -} - `; -export const EmailVerificationBannerState = gql` - query EmailVerificationBannerState { - activeUser { - id - email - verified - hasPendingVerification - } -} - `; -export const RequestVerification = gql` - mutation RequestVerification { - requestVerification -} - `; -export const UpdateUserNotificationPreferences = gql` - mutation UpdateUserNotificationPreferences($preferences: JSONObject!) { - userNotificationPreferencesUpdate(preferences: $preferences) -} - `; -export const UserById = gql` - query UserById($id: String!) { - otherUser(id: $id) { - id - name - bio - company - avatar - verified - } -} - `; -export const UserProfile = gql` - query UserProfile($id: String!) { - otherUser(id: $id) { - id - name - bio - company - avatar - verified - } -} - `; -export const Webhook = gql` - query webhook($streamId: String!, $webhookId: String!) { - stream(id: $streamId) { - id - role - webhooks(id: $webhookId) { - items { - id - streamId - url - description - triggers - enabled - history(limit: 1) { - items { - status - statusInfo - } - } - } - } - } -} - `; -export const Webhooks = gql` - query webhooks($streamId: String!) { - stream(id: $streamId) { - id - name - role - webhooks { - items { - id - streamId - url - description - triggers - enabled - history(limit: 50) { - items { - status - statusInfo - lastUpdate - } - } - } - } - } -} - `; -export const CommentFullInfoFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CommentFullInfo"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Comment"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"archived"}},{"kind":"Field","name":{"kind":"Name","value":"authorId"}},{"kind":"Field","name":{"kind":"Name","value":"text"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"doc"}},{"kind":"Field","name":{"kind":"Name","value":"attachments"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"fileName"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"fileType"}},{"kind":"Field","name":{"kind":"Name","value":"fileSize"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"data"}},{"kind":"Field","name":{"kind":"Name","value":"screenshot"}},{"kind":"Field","name":{"kind":"Name","value":"replies"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"resources"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"resourceId"}},{"kind":"Field","name":{"kind":"Name","value":"resourceType"}}]}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"viewedAt"}}]}}]} as unknown as DocumentNode; -export const ActivityMainFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ActivityMainFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Activity"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"actionType"}},{"kind":"Field","name":{"kind":"Name","value":"info"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"resourceId"}},{"kind":"Field","name":{"kind":"Name","value":"resourceType"}},{"kind":"Field","name":{"kind":"Name","value":"time"}},{"kind":"Field","name":{"kind":"Name","value":"message"}}]}}]} as unknown as DocumentNode; -export const LimitedCommitActivityFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LimitedCommitActivityFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Activity"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"info"}},{"kind":"Field","name":{"kind":"Name","value":"time"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}},{"kind":"Field","name":{"kind":"Name","value":"message"}}]}}]} as unknown as DocumentNode; -export const BasicStreamAccessRequestFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamAccessRequest"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode; -export const LimitedUserFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LimitedUserFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedUser"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}}]}}]} as unknown as DocumentNode; -export const FullStreamAccessRequestFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FullStreamAccessRequestFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamAccessRequest"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"}},{"kind":"Field","name":{"kind":"Name","value":"requester"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LimitedUserFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamAccessRequest"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LimitedUserFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedUser"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}}]}}]} as unknown as DocumentNode; -export const StreamPendingAccessRequestsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"StreamPendingAccessRequests"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Stream"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"pendingAccessRequests"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FullStreamAccessRequestFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamAccessRequest"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LimitedUserFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedUser"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FullStreamAccessRequestFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamAccessRequest"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"}},{"kind":"Field","name":{"kind":"Name","value":"requester"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LimitedUserFields"}}]}}]}}]} as unknown as DocumentNode; -export const StreamFileUploadFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"StreamFileUpload"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FileUpload"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"convertedCommitId"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}},{"kind":"Field","name":{"kind":"Name","value":"convertedStatus"}},{"kind":"Field","name":{"kind":"Name","value":"convertedMessage"}},{"kind":"Field","name":{"kind":"Name","value":"fileName"}},{"kind":"Field","name":{"kind":"Name","value":"fileType"}},{"kind":"Field","name":{"kind":"Name","value":"uploadComplete"}},{"kind":"Field","name":{"kind":"Name","value":"uploadDate"}},{"kind":"Field","name":{"kind":"Name","value":"convertedLastUpdate"}}]}}]} as unknown as DocumentNode; -export const UsersOwnInviteFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UsersOwnInviteFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PendingStreamCollaborator"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"inviteId"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"streamName"}},{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"invitedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LimitedUserFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LimitedUserFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedUser"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}}]}}]} as unknown as DocumentNode; -export const ServerInfoBlobSizeFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ServerInfoBlobSizeFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerInfo"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"configuration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"blobSizeLimitBytes"}}]}}]}}]} as unknown as DocumentNode; -export const MainServerInfoFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"MainServerInfoFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerInfo"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"adminContact"}},{"kind":"Field","name":{"kind":"Name","value":"canonicalUrl"}},{"kind":"Field","name":{"kind":"Name","value":"termsOfService"}},{"kind":"Field","name":{"kind":"Name","value":"inviteOnly"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"guestModeEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"enableNewWebUiMessaging"}},{"kind":"Field","name":{"kind":"Name","value":"migration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"movedTo"}}]}}]}}]} as unknown as DocumentNode; -export const ServerInfoRolesFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ServerInfoRolesFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerInfo"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"serverRoles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}}]}}]} as unknown as DocumentNode; -export const ServerInfoScopesFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ServerInfoScopesFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerInfo"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"scopes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}}]}}]}}]} as unknown as DocumentNode; -export const StreamCollaboratorFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"StreamCollaboratorFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamCollaborator"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"serverRole"}}]}}]} as unknown as DocumentNode; -export const CommonStreamFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CommonStreamFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Stream"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"isPublic"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"commentCount"}},{"kind":"Field","name":{"kind":"Name","value":"collaborators"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"StreamCollaboratorFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"1"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"branches"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"favoritedDate"}},{"kind":"Field","name":{"kind":"Name","value":"favoritesCount"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"StreamCollaboratorFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamCollaborator"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"serverRole"}}]}}]} as unknown as DocumentNode; -export const CommonUserFieldsFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CommonUserFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}},{"kind":"Field","name":{"kind":"Name","value":"hasPendingVerification"}},{"kind":"Field","name":{"kind":"Name","value":"profiles"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"streams"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"1"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]}}]}}]} as unknown as DocumentNode; -export const GetStreamAccessRequestDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetStreamAccessRequest"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamAccessRequest"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"streamId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamAccessRequest"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode; -export const CreateStreamAccessRequestDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateStreamAccessRequest"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamAccessRequestCreate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"streamId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamAccessRequest"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]} as unknown as DocumentNode; -export const UseStreamAccessRequestDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UseStreamAccessRequest"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"requestId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"accept"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"role"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"StreamRole"}},"defaultValue":{"kind":"EnumValue","value":"STREAM_CONTRIBUTOR"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamAccessRequestUse"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"requestId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"requestId"}}},{"kind":"Argument","name":{"kind":"Name","value":"accept"},"value":{"kind":"Variable","name":{"kind":"Name","value":"accept"}}},{"kind":"Argument","name":{"kind":"Name","value":"role"},"value":{"kind":"Variable","name":{"kind":"Name","value":"role"}}}]}]}}]} as unknown as DocumentNode; -export const StreamWithBranchDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamWithBranch"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"branchName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"branch"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"name"},"value":{"kind":"Variable","name":{"kind":"Name","value":"branchName"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"cursor"},"value":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}}},{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"4"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"cursor"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"authorName"}},{"kind":"Field","name":{"kind":"Name","value":"authorId"}},{"kind":"Field","name":{"kind":"Name","value":"authorAvatar"}},{"kind":"Field","name":{"kind":"Name","value":"sourceApplication"}},{"kind":"Field","name":{"kind":"Name","value":"message"}},{"kind":"Field","name":{"kind":"Name","value":"referencedObject"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"commentCount"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const BranchCreatedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"BranchCreated"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"branchCreated"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"streamId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}]}]}}]} as unknown as DocumentNode; -export const StreamAllBranchesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamAllBranches"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"branches"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"500"}},{"kind":"Argument","name":{"kind":"Name","value":"cursor"},"value":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"cursor"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"author"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const StreamCommitQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamCommitQuery"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"commit"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"message"}},{"kind":"Field","name":{"kind":"Name","value":"referencedObject"}},{"kind":"Field","name":{"kind":"Name","value":"authorName"}},{"kind":"Field","name":{"kind":"Name","value":"authorId"}},{"kind":"Field","name":{"kind":"Name","value":"authorAvatar"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"branchName"}},{"kind":"Field","name":{"kind":"Name","value":"sourceApplication"}}]}}]}}]}}]} as unknown as DocumentNode; -export const StreamBranchesSelectorDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamBranchesSelector"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"branches"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"100"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const MoveCommitsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"MoveCommits"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CommitsMoveInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"commitsMove"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}]}]}}]} as unknown as DocumentNode; -export const DeleteCommitsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteCommits"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"CommitsDeleteInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"commitsDelete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}]}]}}]} as unknown as DocumentNode; -export const StreamInviteDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamInvite"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"token"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamInvite"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"streamId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}},{"kind":"Argument","name":{"kind":"Name","value":"token"},"value":{"kind":"Variable","name":{"kind":"Name","value":"token"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"UsersOwnInviteFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LimitedUserFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedUser"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UsersOwnInviteFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PendingStreamCollaborator"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"inviteId"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"streamName"}},{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"invitedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LimitedUserFields"}}]}}]}}]} as unknown as DocumentNode; -export const UserStreamInvitesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserStreamInvites"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamInvites"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"UsersOwnInviteFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LimitedUserFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedUser"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"UsersOwnInviteFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PendingStreamCollaborator"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"inviteId"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"streamName"}},{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"invitedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LimitedUserFields"}}]}}]}}]} as unknown as DocumentNode; -export const UseStreamInviteDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UseStreamInvite"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"accept"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"token"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamInviteUse"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"accept"},"value":{"kind":"Variable","name":{"kind":"Name","value":"accept"}}},{"kind":"Argument","name":{"kind":"Name","value":"streamId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}},{"kind":"Argument","name":{"kind":"Name","value":"token"},"value":{"kind":"Variable","name":{"kind":"Name","value":"token"}}}]}]}}]} as unknown as DocumentNode; -export const CancelStreamInviteDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CancelStreamInvite"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"inviteId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamInviteCancel"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"streamId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}},{"kind":"Argument","name":{"kind":"Name","value":"inviteId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"inviteId"}}}]}]}}]} as unknown as DocumentNode; -export const DeleteInviteDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteInvite"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"inviteId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"inviteDelete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"inviteId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"inviteId"}}}]}]}}]} as unknown as DocumentNode; -export const ResendInviteDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ResendInvite"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"inviteId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"inviteResend"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"inviteId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"inviteId"}}}]}]}}]} as unknown as DocumentNode; -export const BatchInviteToServerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"BatchInviteToServer"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"paramsArray"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ServerInviteCreateInput"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"serverInviteBatchCreate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"paramsArray"}}}]}]}}]} as unknown as DocumentNode; -export const BatchInviteToStreamsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"BatchInviteToStreams"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"paramsArray"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StreamInviteCreateInput"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamInviteBatchCreate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"paramsArray"}}}]}]}}]} as unknown as DocumentNode; -export const StreamObjectDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamObject"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"object"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalChildrenCount"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"speckleType"}},{"kind":"Field","name":{"kind":"Name","value":"data"}}]}}]}}]}}]} as unknown as DocumentNode; -export const StreamObjectNoDataDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamObjectNoData"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"object"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalChildrenCount"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"speckleType"}}]}}]}}]}}]} as unknown as DocumentNode; -export const MainServerInfoDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"MainServerInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"serverInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"MainServerInfoFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"MainServerInfoFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerInfo"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"adminContact"}},{"kind":"Field","name":{"kind":"Name","value":"canonicalUrl"}},{"kind":"Field","name":{"kind":"Name","value":"termsOfService"}},{"kind":"Field","name":{"kind":"Name","value":"inviteOnly"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"guestModeEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"enableNewWebUiMessaging"}},{"kind":"Field","name":{"kind":"Name","value":"migration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"movedTo"}}]}}]}}]} as unknown as DocumentNode; -export const FullServerInfoDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"FullServerInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"serverInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"MainServerInfoFields"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"ServerInfoRolesFields"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"ServerInfoScopesFields"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"ServerInfoBlobSizeFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"MainServerInfoFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerInfo"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"adminContact"}},{"kind":"Field","name":{"kind":"Name","value":"canonicalUrl"}},{"kind":"Field","name":{"kind":"Name","value":"termsOfService"}},{"kind":"Field","name":{"kind":"Name","value":"inviteOnly"}},{"kind":"Field","name":{"kind":"Name","value":"version"}},{"kind":"Field","name":{"kind":"Name","value":"guestModeEnabled"}},{"kind":"Field","name":{"kind":"Name","value":"enableNewWebUiMessaging"}},{"kind":"Field","name":{"kind":"Name","value":"migration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"movedTo"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ServerInfoRolesFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerInfo"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"serverRoles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ServerInfoScopesFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerInfo"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"scopes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ServerInfoBlobSizeFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerInfo"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"configuration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"blobSizeLimitBytes"}}]}}]}}]} as unknown as DocumentNode; -export const ServerInfoBlobSizeLimitDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ServerInfoBlobSizeLimit"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"serverInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ServerInfoBlobSizeFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ServerInfoBlobSizeFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ServerInfo"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"configuration"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"blobSizeLimitBytes"}}]}}]}}]} as unknown as DocumentNode; -export const AvailableServerRolesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"AvailableServerRoles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"serverInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"serverRoles"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}},{"kind":"Field","name":{"kind":"Name","value":"guestModeEnabled"}}]}}]}}]} as unknown as DocumentNode; -export const StreamCommitsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamCommits"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"authorId"}},{"kind":"Field","name":{"kind":"Name","value":"authorName"}},{"kind":"Field","name":{"kind":"Name","value":"authorAvatar"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"message"}},{"kind":"Field","name":{"kind":"Name","value":"referencedObject"}},{"kind":"Field","name":{"kind":"Name","value":"branchName"}},{"kind":"Field","name":{"kind":"Name","value":"sourceApplication"}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const StreamsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"Streams"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streams"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"cursor"},"value":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}}},{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"10"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"cursor"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"isPublic"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"commentCount"}},{"kind":"Field","name":{"kind":"Name","value":"collaborators"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"role"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"1"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"message"}},{"kind":"Field","name":{"kind":"Name","value":"authorId"}},{"kind":"Field","name":{"kind":"Name","value":"branchName"}},{"kind":"Field","name":{"kind":"Name","value":"authorName"}},{"kind":"Field","name":{"kind":"Name","value":"authorAvatar"}},{"kind":"Field","name":{"kind":"Name","value":"referencedObject"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"branches"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"favoritedDate"}},{"kind":"Field","name":{"kind":"Name","value":"favoritesCount"}}]}}]}}]}}]} as unknown as DocumentNode; -export const StreamDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"Stream"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CommonStreamFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"StreamCollaboratorFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamCollaborator"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"serverRole"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CommonStreamFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Stream"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"isPublic"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"commentCount"}},{"kind":"Field","name":{"kind":"Name","value":"collaborators"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"StreamCollaboratorFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"1"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"branches"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"favoritedDate"}},{"kind":"Field","name":{"kind":"Name","value":"favoritesCount"}}]}}]} as unknown as DocumentNode; -export const StreamWithCollaboratorsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamWithCollaborators"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"isPublic"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"collaborators"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"StreamCollaboratorFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"pendingCollaborators"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"inviteId"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LimitedUserFields"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pendingAccessRequests"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FullStreamAccessRequestFields"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamAccessRequest"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LimitedUserFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedUser"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"StreamCollaboratorFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamCollaborator"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"serverRole"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FullStreamAccessRequestFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamAccessRequest"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicStreamAccessRequestFields"}},{"kind":"Field","name":{"kind":"Name","value":"requester"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LimitedUserFields"}}]}}]}}]} as unknown as DocumentNode; -export const StreamWithActivityDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamWithActivity"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"DateTime"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"branches"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"activity"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"cursor"},"value":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"cursor"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ActivityMainFields"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ActivityMainFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Activity"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"actionType"}},{"kind":"Field","name":{"kind":"Name","value":"info"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"resourceId"}},{"kind":"Field","name":{"kind":"Name","value":"resourceType"}},{"kind":"Field","name":{"kind":"Name","value":"time"}},{"kind":"Field","name":{"kind":"Name","value":"message"}}]}}]} as unknown as DocumentNode; -export const LeaveStreamDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"LeaveStream"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamLeave"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"streamId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}]}]}}]} as unknown as DocumentNode; -export const UpdateStreamPermissionDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateStreamPermission"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"params"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StreamUpdatePermissionInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamUpdatePermission"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"permissionParams"},"value":{"kind":"Variable","name":{"kind":"Name","value":"params"}}}]}]}}]} as unknown as DocumentNode; -export const StreamFirstCommitDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamFirstCommit"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"1"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"referencedObject"}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const StreamBranchFirstCommitDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamBranchFirstCommit"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"branch"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"branch"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"name"},"value":{"kind":"Variable","name":{"kind":"Name","value":"branch"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"commits"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"1"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"referencedObject"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const StreamSettingsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"StreamSettings"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"isPublic"}},{"kind":"Field","name":{"kind":"Name","value":"isDiscoverable"}},{"kind":"Field","name":{"kind":"Name","value":"allowPublicComments"}},{"kind":"Field","name":{"kind":"Name","value":"role"}}]}}]}}]} as unknown as DocumentNode; -export const SearchStreamsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"SearchStreams"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"query"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streams"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"query"},"value":{"kind":"Variable","name":{"kind":"Name","value":"query"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"cursor"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}}]}}]}}]}}]} as unknown as DocumentNode; -export const UpdateStreamSettingsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateStreamSettings"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"StreamUpdateInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamUpdate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"stream"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}]}]}}]} as unknown as DocumentNode; -export const DeleteStreamDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteStream"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"streamDelete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}]}]}}]} as unknown as DocumentNode; -export const ShareableStreamDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ShareableStream"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isPublic"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"collaborators"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"StreamCollaboratorFields"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"StreamCollaboratorFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamCollaborator"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"serverRole"}}]}}]} as unknown as DocumentNode; -export const StreamFileUploadsUpdatedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"subscription","name":{"kind":"Name","value":"StreamFileUploadsUpdated"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"projectFileImportUpdated"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"type"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"upload"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"StreamFileUpload"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"StreamFileUpload"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FileUpload"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"convertedCommitId"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}},{"kind":"Field","name":{"kind":"Name","value":"convertedStatus"}},{"kind":"Field","name":{"kind":"Name","value":"convertedMessage"}},{"kind":"Field","name":{"kind":"Name","value":"fileName"}},{"kind":"Field","name":{"kind":"Name","value":"fileType"}},{"kind":"Field","name":{"kind":"Name","value":"uploadComplete"}},{"kind":"Field","name":{"kind":"Name","value":"uploadDate"}},{"kind":"Field","name":{"kind":"Name","value":"convertedLastUpdate"}}]}}]} as unknown as DocumentNode; -export const UserFavoriteStreamsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserFavoriteStreams"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activeUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CommonUserFields"}},{"kind":"Field","name":{"kind":"Name","value":"favoriteStreams"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"cursor"},"value":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}}},{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"10"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"cursor"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CommonStreamFields"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"StreamCollaboratorFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"StreamCollaborator"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"serverRole"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CommonUserFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}},{"kind":"Field","name":{"kind":"Name","value":"hasPendingVerification"}},{"kind":"Field","name":{"kind":"Name","value":"profiles"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"streams"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"1"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CommonStreamFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Stream"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"isPublic"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"commentCount"}},{"kind":"Field","name":{"kind":"Name","value":"collaborators"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"StreamCollaboratorFields"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"1"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"branches"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"favoritedDate"}},{"kind":"Field","name":{"kind":"Name","value":"favoritesCount"}}]}}]} as unknown as DocumentNode; -export const MainUserDataDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"MainUserData"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activeUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CommonUserFields"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CommonUserFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}},{"kind":"Field","name":{"kind":"Name","value":"hasPendingVerification"}},{"kind":"Field","name":{"kind":"Name","value":"profiles"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"streams"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"1"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]}}]}}]} as unknown as DocumentNode; -export const ProfileSelfDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ProfileSelf"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activeUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"CommonUserFields"}},{"kind":"Field","name":{"kind":"Name","value":"totalOwnedStreamsFavorites"}},{"kind":"Field","name":{"kind":"Name","value":"notificationPreferences"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"CommonUserFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"User"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}},{"kind":"Field","name":{"kind":"Name","value":"hasPendingVerification"}},{"kind":"Field","name":{"kind":"Name","value":"profiles"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"streams"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}}]}},{"kind":"Field","name":{"kind":"Name","value":"commits"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"1"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}}]}}]}}]}}]} as unknown as DocumentNode; -export const UserSearchDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserSearch"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"query"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"limit"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"archived"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userSearch"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"query"},"value":{"kind":"Variable","name":{"kind":"Name","value":"query"}}},{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"Variable","name":{"kind":"Name","value":"limit"}}},{"kind":"Argument","name":{"kind":"Name","value":"cursor"},"value":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}}},{"kind":"Argument","name":{"kind":"Name","value":"archived"},"value":{"kind":"Variable","name":{"kind":"Name","value":"archived"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"cursor"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"LimitedUserFields"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"LimitedUserFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"LimitedUser"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}}]}}]} as unknown as DocumentNode; -export const IsLoggedInDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"IsLoggedIn"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activeUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; -export const AdminUsersListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"AdminUsersList"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"limit"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"offset"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"query"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"adminUsers"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"Variable","name":{"kind":"Name","value":"limit"}}},{"kind":"Argument","name":{"kind":"Name","value":"offset"},"value":{"kind":"Variable","name":{"kind":"Name","value":"offset"}}},{"kind":"Argument","name":{"kind":"Name","value":"query"},"value":{"kind":"Variable","name":{"kind":"Name","value":"query"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"registeredUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}},{"kind":"Field","name":{"kind":"Name","value":"profiles"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"authorizedApps"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"invitedUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"invitedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const UserTimelineDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserTimeline"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"DateTime"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activeUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"timeline"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"cursor"},"value":{"kind":"Variable","name":{"kind":"Name","value":"cursor"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalCount"}},{"kind":"Field","name":{"kind":"Name","value":"cursor"}},{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ActivityMainFields"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ActivityMainFields"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Activity"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"actionType"}},{"kind":"Field","name":{"kind":"Name","value":"info"}},{"kind":"Field","name":{"kind":"Name","value":"userId"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"resourceId"}},{"kind":"Field","name":{"kind":"Name","value":"resourceType"}},{"kind":"Field","name":{"kind":"Name","value":"time"}},{"kind":"Field","name":{"kind":"Name","value":"message"}}]}}]} as unknown as DocumentNode; -export const ValidatePasswordStrengthDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ValidatePasswordStrength"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pwd"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userPwdStrength"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pwd"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pwd"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"score"}},{"kind":"Field","name":{"kind":"Name","value":"feedback"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"warning"}},{"kind":"Field","name":{"kind":"Name","value":"suggestions"}}]}}]}}]}}]} as unknown as DocumentNode; -export const EmailVerificationBannerStateDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"EmailVerificationBannerState"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activeUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}},{"kind":"Field","name":{"kind":"Name","value":"hasPendingVerification"}}]}}]}}]} as unknown as DocumentNode; -export const RequestVerificationDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"RequestVerification"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"requestVerification"}}]}}]} as unknown as DocumentNode; -export const UpdateUserNotificationPreferencesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateUserNotificationPreferences"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"preferences"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"JSONObject"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"userNotificationPreferencesUpdate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"preferences"},"value":{"kind":"Variable","name":{"kind":"Name","value":"preferences"}}}]}]}}]} as unknown as DocumentNode; -export const UserByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"otherUser"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}}]}}]}}]} as unknown as DocumentNode; -export const UserProfileDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"UserProfile"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"otherUser"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"bio"}},{"kind":"Field","name":{"kind":"Name","value":"company"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"verified"}}]}}]}}]} as unknown as DocumentNode; -export const WebhookDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"webhook"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"webhookId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"webhooks"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"webhookId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"url"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"triggers"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}},{"kind":"Field","name":{"kind":"Name","value":"history"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"1"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"statusInfo"}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const WebhooksDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"webhooks"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"stream"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"streamId"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"webhooks"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"streamId"}},{"kind":"Field","name":{"kind":"Name","value":"url"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"triggers"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}},{"kind":"Field","name":{"kind":"Name","value":"history"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"limit"},"value":{"kind":"IntValue","value":"50"}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"statusInfo"}},{"kind":"Field","name":{"kind":"Name","value":"lastUpdate"}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/packages/frontend/src/graphql/invites.js b/packages/frontend/src/graphql/invites.js deleted file mode 100644 index 651aaf4f2..000000000 --- a/packages/frontend/src/graphql/invites.js +++ /dev/null @@ -1,58 +0,0 @@ -import { gql } from '@apollo/client/core' -import { usersOwnInviteFieldsFragment } from '@/graphql/fragments/user' - -export const streamInviteQuery = gql` - query StreamInvite($streamId: String!, $token: String) { - streamInvite(streamId: $streamId, token: $token) { - ...UsersOwnInviteFields - } - } - - ${usersOwnInviteFieldsFragment} -` - -export const userStreamInvitesQuery = gql` - query UserStreamInvites { - streamInvites { - ...UsersOwnInviteFields - } - } - - ${usersOwnInviteFieldsFragment} -` - -export const useStreamInviteMutation = gql` - mutation UseStreamInvite($accept: Boolean!, $streamId: String!, $token: String!) { - streamInviteUse(accept: $accept, streamId: $streamId, token: $token) - } -` - -export const cancelStreamInviteMutation = gql` - mutation CancelStreamInvite($streamId: String!, $inviteId: String!) { - streamInviteCancel(streamId: $streamId, inviteId: $inviteId) - } -` - -export const deleteInviteMutation = gql` - mutation DeleteInvite($inviteId: String!) { - inviteDelete(inviteId: $inviteId) - } -` - -export const resendInviteMutation = gql` - mutation ResendInvite($inviteId: String!) { - inviteResend(inviteId: $inviteId) - } -` - -export const batchInviteToServerMutation = gql` - mutation BatchInviteToServer($paramsArray: [ServerInviteCreateInput!]!) { - serverInviteBatchCreate(input: $paramsArray) - } -` - -export const batchInviteToStreamsMutation = gql` - mutation BatchInviteToStreams($paramsArray: [StreamInviteCreateInput!]!) { - streamInviteBatchCreate(input: $paramsArray) - } -` diff --git a/packages/frontend/src/graphql/local-only/schema.gql b/packages/frontend/src/graphql/local-only/schema.gql deleted file mode 100644 index 05a5861e3..000000000 --- a/packages/frontend/src/graphql/local-only/schema.gql +++ /dev/null @@ -1,25 +0,0 @@ -extend type Query { - """ - Commit/Object viewer state (local-only) - """ - commitObjectViewerState: CommitObjectViewerState! -} - -type CommitObjectViewerState { - viewerBusy: Boolean! - selectedCommentMetaData: SelectedCommentMetaData - addingComment: Boolean! - preventCommentCollapse: Boolean! - commentReactions: [String!]! - emojis: [String!]! - currentFilterState: JSONObject - selectedObjects: [JSONObject] - objectProperties: [JSONObject] - localFilterPropKey: String - sectionBox: Boolean -} - -type SelectedCommentMetaData { - id: String! - selectionLocation: JSONObject! -} diff --git a/packages/frontend/src/graphql/objectSingle.gql b/packages/frontend/src/graphql/objectSingle.gql deleted file mode 100644 index c43cb4f60..000000000 --- a/packages/frontend/src/graphql/objectSingle.gql +++ /dev/null @@ -1,11 +0,0 @@ -query StreamObject($streamId: String!, $id: String!) { - stream(id: $streamId) { - id - object(id: $id) { - totalChildrenCount - id - speckleType - data - } - } -} diff --git a/packages/frontend/src/graphql/objectSingleNoData.gql b/packages/frontend/src/graphql/objectSingleNoData.gql deleted file mode 100644 index 6f6c59e26..000000000 --- a/packages/frontend/src/graphql/objectSingleNoData.gql +++ /dev/null @@ -1,11 +0,0 @@ -query StreamObjectNoData($streamId: String!, $id: String!) { - stream(id: $streamId) { - id - name - object(id: $id) { - totalChildrenCount - id - speckleType - } - } -} diff --git a/packages/frontend/src/graphql/server.js b/packages/frontend/src/graphql/server.js deleted file mode 100644 index b03ae54db..000000000 --- a/packages/frontend/src/graphql/server.js +++ /dev/null @@ -1,95 +0,0 @@ -import { gql } from '@apollo/client/core' - -export const serverInfoBlobSizeFragment = gql` - fragment ServerInfoBlobSizeFields on ServerInfo { - configuration { - blobSizeLimitBytes - } - } -` - -export const mainServerInfoFieldsFragment = gql` - fragment MainServerInfoFields on ServerInfo { - name - company - description - adminContact - canonicalUrl - termsOfService - inviteOnly - version - guestModeEnabled - enableNewWebUiMessaging - migration { - movedTo - } - } -` - -export const serverInfoRolesFieldsFragment = gql` - fragment ServerInfoRolesFields on ServerInfo { - serverRoles { - id - title - } - } -` - -export const serverInfoScopesFieldsFragment = gql` - fragment ServerInfoScopesFields on ServerInfo { - scopes { - name - description - } - } -` - -/** - * Get main server info - */ -export const mainServerInfoQuery = gql` - query MainServerInfo { - serverInfo { - ...MainServerInfoFields - } - } - - ${mainServerInfoFieldsFragment} -` - -export const fullServerInfoQuery = gql` - query FullServerInfo { - serverInfo { - ...MainServerInfoFields - ...ServerInfoRolesFields - ...ServerInfoScopesFields - ...ServerInfoBlobSizeFields - } - } - - ${mainServerInfoFieldsFragment} - ${serverInfoRolesFieldsFragment} - ${serverInfoScopesFieldsFragment} - ${serverInfoBlobSizeFragment} -` - -export const serverInfoBlobSizeLimitQuery = gql` - query ServerInfoBlobSizeLimit { - serverInfo { - ...ServerInfoBlobSizeFields - } - } - ${serverInfoBlobSizeFragment} -` - -export const availableServerRolesQuery = gql` - query AvailableServerRoles { - serverInfo { - serverRoles { - id - title - } - guestModeEnabled - } - } -` diff --git a/packages/frontend/src/graphql/streamCommits.gql b/packages/frontend/src/graphql/streamCommits.gql deleted file mode 100644 index 84228afdc..000000000 --- a/packages/frontend/src/graphql/streamCommits.gql +++ /dev/null @@ -1,20 +0,0 @@ -query StreamCommits($id: String!) { - stream(id: $id) { - id - role - commits { - totalCount - items { - id - authorId - authorName - authorAvatar - createdAt - message - referencedObject - branchName - sourceApplication - } - } - } -} diff --git a/packages/frontend/src/graphql/streams.gql b/packages/frontend/src/graphql/streams.gql deleted file mode 100644 index 939d30773..000000000 --- a/packages/frontend/src/graphql/streams.gql +++ /dev/null @@ -1,41 +0,0 @@ -query Streams($cursor: String) { - streams(cursor: $cursor, limit: 10) { - totalCount - cursor - items { - id - name - description - role - isPublic - createdAt - updatedAt - commentCount - collaborators { - id - name - company - avatar - role - } - commits(limit: 1) { - totalCount - items { - id - createdAt - message - authorId - branchName - authorName - authorAvatar - referencedObject - } - } - branches { - totalCount - } - favoritedDate - favoritesCount - } - } -} diff --git a/packages/frontend/src/graphql/streams.js b/packages/frontend/src/graphql/streams.js deleted file mode 100644 index 70f78a6c2..000000000 --- a/packages/frontend/src/graphql/streams.js +++ /dev/null @@ -1,231 +0,0 @@ -import { fullStreamAccessRequestFieldsFragment } from '@/graphql/fragments/accessRequests' -import { activityMainFieldsFragment } from '@/graphql/fragments/activity' -import { - limitedUserFieldsFragment, - streamCollaboratorFieldsFragment -} from '@/graphql/fragments/user' -import { gql } from '@apollo/client/core' -import { streamFileUploadFragment } from '@/graphql/fragments/streams' - -/** - * Common stream fields when querying for streams - */ -export const commonStreamFieldsFragment = gql` - fragment CommonStreamFields on Stream { - id - name - description - role - isPublic - createdAt - updatedAt - commentCount - collaborators { - ...StreamCollaboratorFields - } - commits(limit: 1) { - totalCount - } - branches { - totalCount - } - favoritedDate - favoritesCount - } - - ${streamCollaboratorFieldsFragment} -` - -/** - * Retrieve a single stream - */ -export const streamQuery = gql` - query Stream($id: String!) { - stream(id: $id) { - ...CommonStreamFields - } - } - - ${commonStreamFieldsFragment} -` - -/** - * Retrieve stream collaborators info - */ -export const streamWithCollaboratorsQuery = gql` - query StreamWithCollaborators($id: String!) { - stream(id: $id) { - id - name - isPublic - role - collaborators { - ...StreamCollaboratorFields - } - pendingCollaborators { - title - inviteId - role - user { - ...LimitedUserFields - } - } - pendingAccessRequests { - ...FullStreamAccessRequestFields - } - } - } - ${limitedUserFieldsFragment} - ${streamCollaboratorFieldsFragment} - ${fullStreamAccessRequestFieldsFragment} -` - -export const streamWithActivityQuery = gql` - query StreamWithActivity($id: String!, $cursor: DateTime) { - stream(id: $id) { - id - name - createdAt - commits { - totalCount - } - branches { - totalCount - } - activity(cursor: $cursor) { - totalCount - cursor - items { - ...ActivityMainFields - } - } - } - } - - ${activityMainFieldsFragment} -` - -/** - * Remove authenticated user from the collaborators list - */ -export const leaveStreamMutation = gql` - mutation LeaveStream($streamId: String!) { - streamLeave(streamId: $streamId) - } -` - -/** - * Update a user's stream permission - */ -export const updateStreamPermissionMutation = gql` - mutation UpdateStreamPermission($params: StreamUpdatePermissionInput!) { - streamUpdatePermission(permissionParams: $params) - } -` - -/** - * Get a stream's first commit - */ -export const streamFirstCommitQuery = gql` - query StreamFirstCommit($id: String!) { - stream(id: $id) { - id - commits(limit: 1) { - totalCount - items { - id - referencedObject - } - } - } - } -` - -/** - * Get a stream branch's first commit - */ -export const streamBranchFirstCommitQuery = gql` - query StreamBranchFirstCommit($id: String!, $branch: String!) { - stream(id: $id) { - id - branch(name: $branch) { - commits(limit: 1) { - totalCount - items { - id - referencedObject - } - } - } - } - } -` - -export const streamSettingsQuery = gql` - query StreamSettings($id: String!) { - stream(id: $id) { - id - name - description - isPublic - isDiscoverable - allowPublicComments - role - } - } -` - -export const searchStreamsQuery = gql` - query SearchStreams($query: String) { - streams(query: $query) { - totalCount - cursor - items { - id - name - updatedAt - } - } - } -` - -export const updateStreamSettingsMutation = gql` - mutation UpdateStreamSettings($input: StreamUpdateInput!) { - streamUpdate(stream: $input) - } -` - -export const deleteStreamMutation = gql` - mutation DeleteStream($id: String!) { - streamDelete(id: $id) - } -` - -export const shareableStreamQuery = gql` - query ShareableStream($id: String!) { - stream(id: $id) { - id - isPublic - role - collaborators { - ...StreamCollaboratorFields - } - } - } - - ${streamCollaboratorFieldsFragment} -` - -export const streamFileUploadsUpdatedSubscription = gql` - subscription StreamFileUploadsUpdated($id: String!) { - projectFileImportUpdated(id: $id) { - type - id - upload { - ...StreamFileUpload - } - } - } - - ${streamFileUploadFragment} -` diff --git a/packages/frontend/src/graphql/user.js b/packages/frontend/src/graphql/user.js deleted file mode 100644 index fcac45082..000000000 --- a/packages/frontend/src/graphql/user.js +++ /dev/null @@ -1,193 +0,0 @@ -import { activityMainFieldsFragment } from '@/graphql/fragments/activity' -import { limitedUserFieldsFragment } from '@/graphql/fragments/user' -import { commonStreamFieldsFragment } from '@/graphql/streams' -import { gql } from '@apollo/client/core' - -export const commonUserFieldsFragment = gql` - fragment CommonUserFields on User { - id - email - name - bio - company - avatar - verified - hasPendingVerification - profiles - role - streams { - totalCount - } - commits(limit: 1) { - totalCount - items { - id - createdAt - } - } - } -` - -/** - * User data with favorite streams - */ -export const userFavoriteStreamsQuery = gql` - query UserFavoriteStreams($cursor: String) { - activeUser { - ...CommonUserFields - favoriteStreams(cursor: $cursor, limit: 10) { - totalCount - cursor - items { - ...CommonStreamFields - } - } - } - } - - ${commonUserFieldsFragment} - ${commonStreamFieldsFragment} -` - -/** - * Get main user metadata - */ -export const mainUserDataQuery = gql` - query MainUserData { - activeUser { - ...CommonUserFields - } - } - - ${commonUserFieldsFragment} -` - -/** - * Main metadata + extra info shown on profile page - */ -export const profileSelfQuery = gql` - query ProfileSelf { - activeUser { - ...CommonUserFields - totalOwnedStreamsFavorites - notificationPreferences - } - } - - ${commonUserFieldsFragment} -` - -/** - * (Limited, not admin) User search - */ -export const userSearchQuery = gql` - query UserSearch($query: String!, $limit: Int!, $cursor: String, $archived: Boolean) { - userSearch(query: $query, limit: $limit, cursor: $cursor, archived: $archived) { - cursor - items { - ...LimitedUserFields - } - } - } - - ${limitedUserFieldsFragment} -` - -/** - * Basic query for checking if user is logged in - */ -export const isLoggedInQuery = gql` - query IsLoggedIn { - activeUser { - id - } - } -` - -/** - * Admin panel (invited/registered) users list - */ -export const adminUsersListQuery = gql` - query AdminUsersList($limit: Int, $offset: Int, $query: String) { - adminUsers(limit: $limit, offset: $offset, query: $query) { - totalCount - items { - id - registeredUser { - id - email - name - bio - company - avatar - verified - profiles - role - authorizedApps { - name - } - } - invitedUser { - id - email - invitedBy { - id - name - } - } - } - } - } -` - -export const userTimelineQuery = gql` - query UserTimeline($cursor: DateTime) { - activeUser { - id - timeline(cursor: $cursor) { - totalCount - cursor - items { - ...ActivityMainFields - } - } - } - } - - ${activityMainFieldsFragment} -` - -export const validatePasswordStrengthQuery = gql` - query ValidatePasswordStrength($pwd: String!) { - userPwdStrength(pwd: $pwd) { - score - feedback { - warning - suggestions - } - } - } -` - -export const emailVerificationBannerStateQuery = gql` - query EmailVerificationBannerState { - activeUser { - id - email - verified - hasPendingVerification - } - } -` - -export const requestVerificationMutation = gql` - mutation RequestVerification { - requestVerification - } -` - -export const updateUserNotificationPreferencesMutation = gql` - mutation UpdateUserNotificationPreferences($preferences: JSONObject!) { - userNotificationPreferencesUpdate(preferences: $preferences) - } -` diff --git a/packages/frontend/src/graphql/userById.gql b/packages/frontend/src/graphql/userById.gql deleted file mode 100644 index 0ef343daf..000000000 --- a/packages/frontend/src/graphql/userById.gql +++ /dev/null @@ -1,10 +0,0 @@ -query UserById($id: String!) { - otherUser(id: $id) { - id - name - bio - company - avatar - verified - } -} diff --git a/packages/frontend/src/graphql/userProfile.gql b/packages/frontend/src/graphql/userProfile.gql deleted file mode 100644 index b3894f329..000000000 --- a/packages/frontend/src/graphql/userProfile.gql +++ /dev/null @@ -1,10 +0,0 @@ -query UserProfile($id: String!) { - otherUser(id: $id) { - id - name - bio - company - avatar - verified - } -} diff --git a/packages/frontend/src/graphql/webhook.gql b/packages/frontend/src/graphql/webhook.gql deleted file mode 100644 index 30f301bca..000000000 --- a/packages/frontend/src/graphql/webhook.gql +++ /dev/null @@ -1,22 +0,0 @@ -query webhook($streamId: String!, $webhookId: String!) { - stream(id: $streamId) { - id - role - webhooks(id: $webhookId) { - items { - id - streamId - url - description - triggers - enabled - history(limit: 1) { - items { - status - statusInfo - } - } - } - } - } -} diff --git a/packages/frontend/src/graphql/webhooks.gql b/packages/frontend/src/graphql/webhooks.gql deleted file mode 100644 index bb0c68b86..000000000 --- a/packages/frontend/src/graphql/webhooks.gql +++ /dev/null @@ -1,24 +0,0 @@ -query webhooks($streamId: String!) { - stream(id: $streamId) { - id - name - role - webhooks { - items { - id - streamId - url - description - triggers - enabled - history(limit: 50) { - items { - status - statusInfo - lastUpdate - } - } - } - } - } -} diff --git a/packages/frontend/src/helpers/errorHelper.ts b/packages/frontend/src/helpers/errorHelper.ts deleted file mode 100644 index 7157385e3..000000000 --- a/packages/frontend/src/helpers/errorHelper.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { ApolloError, ServerError, ServerParseError } from '@apollo/client/core' -import { NetworkError } from '@apollo/client/errors' -import { has, isString } from 'lodash' - -/** - * Base application error - */ -export abstract class BaseError extends Error { - /** - * Default message if none is passed - */ - static defaultMessage = 'Unexpected error occurred!' - - constructor(message?: string, options?: ErrorOptions) { - message ||= new.target.defaultMessage - super(message, options) - } -} - -const isServerError = (err: Error): err is ServerError => - has(err, 'response') && has(err, 'result') && has(err, 'statusCode') -const isServerParseError = (err: Error): err is ServerParseError => - has(err, 'response') && has(err, 'bodyText') && has(err, 'statusCode') - -export function isInvalidAuth(error: ApolloError | NetworkError) { - const networkError = error instanceof ApolloError ? error.networkError : error - if ( - !networkError || - (!isServerError(networkError) && !isServerParseError(networkError)) - ) - return false - - const statusCode = networkError.statusCode - const hasCorrectCode = [403].includes(statusCode) - if (!hasCorrectCode) return false - - const message: string | undefined = ( - isServerError(networkError) - ? isString(networkError.result) - ? networkError.result - : networkError.result?.error - : networkError.bodyText - ) as string | undefined - - return (message || '').toLowerCase().includes('token') -} diff --git a/packages/frontend/src/helpers/mainConstants.ts b/packages/frontend/src/helpers/mainConstants.ts deleted file mode 100644 index 088c1c89d..000000000 --- a/packages/frontend/src/helpers/mainConstants.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Roles } from '@speckle/shared' -import type { ServerRoles, StreamRoles } from '@speckle/shared' -import { StreamRole } from '@/graphql/generated/graphql' - -/** - * Keys for values stored in localStorage - */ -export const LocalStorageKeys = Object.freeze({ - AuthToken: 'AuthToken', - RefreshToken: 'RefreshToken', - Uuid: 'uuid', - ShouldRedirectTo: 'shouldRedirectTo' -}) - -/** - * Our GQL schema has a StreamRoles enum that unfortunately can't have the same exact values as our roles constants, because - * we can't use colons (:) there. So you can use this function to map from our constant value to the GQL one. - */ -export function streamRoleToGraphQLEnum(role: StreamRoles): StreamRole { - switch (role) { - case Roles.Stream.Owner: - return StreamRole.StreamOwner - case Roles.Stream.Reviewer: - return StreamRole.StreamReviewer - case Roles.Stream.Contributor: - default: - return StreamRole.StreamContributor - } -} - -export { Roles, ServerRoles, StreamRoles } diff --git a/packages/frontend/src/helpers/md5.ts b/packages/frontend/src/helpers/md5.ts deleted file mode 100644 index 15823aa52..000000000 --- a/packages/frontend/src/helpers/md5.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { md5 } from '@speckle/shared' -export default md5 -export { md5 } diff --git a/packages/frontend/src/helpers/randomHelpers.js b/packages/frontend/src/helpers/randomHelpers.js deleted file mode 100644 index b2f9850b2..000000000 --- a/packages/frontend/src/helpers/randomHelpers.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Generate a random string of any length - * @param {number} length - * @returns - */ -export function randomString(length) { - return Math.round(Math.pow(36, length + 1) - Math.random() * Math.pow(36, length)) - .toString(36) - .slice(1) -} diff --git a/packages/frontend/src/helpers/streamHelpers.js b/packages/frontend/src/helpers/streamHelpers.js deleted file mode 100644 index a0cbe2176..000000000 --- a/packages/frontend/src/helpers/streamHelpers.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Check whether or not a stream can be favorited by the active user - */ -export function canBeFavorited(stream) { - return stream && (stream.isPublic || stream.role) -} diff --git a/packages/frontend/src/helpers/typeHelpers.ts b/packages/frontend/src/helpers/typeHelpers.ts deleted file mode 100644 index 7267c900b..000000000 --- a/packages/frontend/src/helpers/typeHelpers.ts +++ /dev/null @@ -1,79 +0,0 @@ -export { isUndefinedOrVoid } from '@speckle/shared' -export type { - Nullable, - Optional, - MaybeNullOrUndefined, - MaybeAsync, - MaybeFalsy -} from '@speckle/shared' -import { ReactiveVar } from '@apollo/client/core' -import Vue, { VueConstructor } from 'vue' -import { LooseRequired } from 'vue/types/common' - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export type GetReactiveVarType> = V extends ReactiveVar< - infer T -> - ? T - : unknown - -export type SetupProps

= Readonly> - -// Copied from Vue typings & improved ergonomics -export type CombinedVueInstance< - Instance extends Vue = Vue, - Data = unknown, - Methods = unknown, - Computed = unknown, - Props = unknown -> = Data & Methods & Computed & Props & Instance - -export type ExtendedVue< - Instance extends Vue = Vue, - Data = unknown, - Methods = unknown, - Computed = unknown, - Props = unknown -> = VueConstructor & Vue> - -export type VueWithMixins< - A extends VueConstructor = VueConstructor, - B extends VueConstructor = VueConstructor, - C extends VueConstructor = VueConstructor, - D extends VueConstructor = VueConstructor, - E extends VueConstructor = VueConstructor -> = VueConstructor< - Vue & - InstanceType & - InstanceType & - InstanceType & - InstanceType & - InstanceType -> - -/** - * Create Vue base class with the specified mixins and correctly returned TypeScript types - * @deprecated Use Composition API instead - * @returns - */ -export function vueWithMixins< - A extends VueConstructor = VueConstructor, - B extends VueConstructor = VueConstructor, - C extends VueConstructor = VueConstructor, - D extends VueConstructor = VueConstructor, - E extends VueConstructor = VueConstructor ->( - mixin1?: A, - mixin2?: B, - mixin3?: C, - mixin4?: D, - mixin5?: E -): VueWithMixins { - const mixins = [mixin1, mixin2, mixin3, mixin4, mixin5].filter( - (m): m is A | B | C | D | E => !!m - ) - - return Vue.extend({ - mixins - }) as VueWithMixins -} diff --git a/packages/frontend/src/helpers/vuetifyHelpers.ts b/packages/frontend/src/helpers/vuetifyHelpers.ts deleted file mode 100644 index aeb2fb7d7..000000000 --- a/packages/frontend/src/helpers/vuetifyHelpers.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { CombinedVueInstance } from 'vue/types/vue' - -/** - * Use this to type v-form $refs instances - */ -export type VFormInstance = CombinedVueInstance< - Vue, - unknown, - { - /** - * Reset validation state - */ - resetValidation(): void - /** - * Validate the form and return whether it's valid or not - */ - validate(): boolean - }, - unknown, - unknown, - unknown -> diff --git a/packages/frontend/src/main/App.vue b/packages/frontend/src/main/App.vue deleted file mode 100644 index 52838ae43..000000000 --- a/packages/frontend/src/main/App.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - diff --git a/packages/frontend/src/main/app.js b/packages/frontend/src/main/app.js deleted file mode 100644 index cf889f891..000000000 --- a/packages/frontend/src/main/app.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Don't export anything out of this file and import it in other files, this borks Vite HMR for some reason - * (runs app.js twice in the browser)! - */ - -import '@/bootstrapper' -import Vue from 'vue' - -import App from '@/main/App.vue' -import { LocalStorageKeys } from '@/helpers/mainConstants' -import * as MixpanelManager from '@/mixpanelManager' - -import { provide } from 'vue' -import { DefaultApolloClient } from '@vue/apollo-composable' -import { createProvider, installVueApollo } from '@/config/apolloConfig' -import { - checkAccessCodeAndGetTokens, - prefetchUserAndSetID -} from '@/plugins/authHelpers' - -import router from '@/main/router/index' -import vuetify from '@/plugins/vuetify' -import VueTimeago from 'vue-timeago' - -Vue.use(VueTimeago, { locale: 'en' }) - -import VueFilterDateParse from '@vuejs-community/vue-filter-date-parse' -Vue.use(VueFilterDateParse) - -import VueFilterDateFormat from '@vuejs-community/vue-filter-date-format' -Vue.use(VueFilterDateFormat) - -// adds various helper methods -import '@/plugins/helpers' -import { AppLocalStorage } from '@/utils/localStorage' -import { InvalidAuthTokenError } from '@/main/lib/auth/errors' - -// Async ApexChart load -Vue.component('ApexChart', async () => { - const VueApexCharts = await import('vue-apexcharts') - Vue.use(VueApexCharts) - - return VueApexCharts -}) - -// Filter to capitalize words -Vue.filter('capitalize', (value) => { - if (!value) return '' - value = value.toString() - return value.charAt(0).toUpperCase() + value.slice(1) -}) - -const apolloProvider = createProvider() -installVueApollo(apolloProvider) - -function postAuthInit() { - // Init mixpanel - MixpanelManager.initialize({ - hostApp: 'web', - hostAppDisplayName: 'Web App' - }) - - new Vue({ - router, - vuetify, - setup() { - provide(DefaultApolloClient, apolloProvider.defaultClient) - }, - render: (h) => h(App) - }).$mount('#app') -} - -async function init() { - const authToken = AppLocalStorage.get(LocalStorageKeys.AuthToken) - - // no auth token - check if we can resolve it from access code - if (!authToken) { - const gotToken = await checkAccessCodeAndGetTokens() - if (gotToken) { - // Remove access_code get param from current url - const url = new URL(window.location.href) - url.searchParams.delete('access_code') - window.history.replaceState({}, document.title, url.toString()) - } - } - - // try to retrieve user info with auth token - try { - await prefetchUserAndSetID(apolloProvider.defaultClient) - } catch (e) { - if (e instanceof InvalidAuthTokenError) { - // data retrieval failed and user was logged out - go to login page - window.location = `${window.location.origin}/authn/login` - return - } - - // Log and continue - console.error(e) - } - - // Init app - postAuthInit() -} -init() diff --git a/packages/frontend/src/main/components/activity/ListItemActivity.vue b/packages/frontend/src/main/components/activity/ListItemActivity.vue deleted file mode 100644 index e3db32010..000000000 --- a/packages/frontend/src/main/components/activity/ListItemActivity.vue +++ /dev/null @@ -1,596 +0,0 @@ - - - - - diff --git a/packages/frontend/src/main/components/activity/ListItemActivityDescription.vue b/packages/frontend/src/main/components/activity/ListItemActivityDescription.vue deleted file mode 100644 index b7fc09849..000000000 --- a/packages/frontend/src/main/components/activity/ListItemActivityDescription.vue +++ /dev/null @@ -1,133 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/activity/UserPill.vue b/packages/frontend/src/main/components/activity/UserPill.vue deleted file mode 100644 index d1980a65a..000000000 --- a/packages/frontend/src/main/components/activity/UserPill.vue +++ /dev/null @@ -1,60 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/admin/ActivityCard.vue b/packages/frontend/src/main/components/admin/ActivityCard.vue deleted file mode 100644 index 7e491ae87..000000000 --- a/packages/frontend/src/main/components/admin/ActivityCard.vue +++ /dev/null @@ -1,190 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/admin/AnimatedNumber.vue b/packages/frontend/src/main/components/admin/AnimatedNumber.vue deleted file mode 100644 index ef1cc3410..000000000 --- a/packages/frontend/src/main/components/admin/AnimatedNumber.vue +++ /dev/null @@ -1,64 +0,0 @@ - - - - - diff --git a/packages/frontend/src/main/components/admin/GeneralInfoCard.vue b/packages/frontend/src/main/components/admin/GeneralInfoCard.vue deleted file mode 100644 index dc24842d6..000000000 --- a/packages/frontend/src/main/components/admin/GeneralInfoCard.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - - - diff --git a/packages/frontend/src/main/components/admin/StreamListItem.vue b/packages/frontend/src/main/components/admin/StreamListItem.vue deleted file mode 100644 index 3c65bd376..000000000 --- a/packages/frontend/src/main/components/admin/StreamListItem.vue +++ /dev/null @@ -1,66 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/admin/UsersListInviteItem.vue b/packages/frontend/src/main/components/admin/UsersListInviteItem.vue deleted file mode 100644 index 8137e93d8..000000000 --- a/packages/frontend/src/main/components/admin/UsersListInviteItem.vue +++ /dev/null @@ -1,45 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/admin/UsersListItem.vue b/packages/frontend/src/main/components/admin/UsersListItem.vue deleted file mode 100644 index 3d382b06d..000000000 --- a/packages/frontend/src/main/components/admin/UsersListItem.vue +++ /dev/null @@ -1,48 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/admin/UsersListUserItem.vue b/packages/frontend/src/main/components/admin/UsersListUserItem.vue deleted file mode 100644 index 677a8cd64..000000000 --- a/packages/frontend/src/main/components/admin/UsersListUserItem.vue +++ /dev/null @@ -1,83 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/admin/VersionInfoCard.vue b/packages/frontend/src/main/components/admin/VersionInfoCard.vue deleted file mode 100644 index 8ad9823cf..000000000 --- a/packages/frontend/src/main/components/admin/VersionInfoCard.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - - - diff --git a/packages/frontend/src/main/components/auth/AuthStrategies.vue b/packages/frontend/src/main/components/auth/AuthStrategies.vue deleted file mode 100644 index 753b3fa59..000000000 --- a/packages/frontend/src/main/components/auth/AuthStrategies.vue +++ /dev/null @@ -1,65 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/auth/LoginBlurb.vue b/packages/frontend/src/main/components/auth/LoginBlurb.vue deleted file mode 100644 index 0c8a861af..000000000 --- a/packages/frontend/src/main/components/auth/LoginBlurb.vue +++ /dev/null @@ -1,96 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/auth/UserAvatarAuthoriseApp.vue b/packages/frontend/src/main/components/auth/UserAvatarAuthoriseApp.vue deleted file mode 100644 index a00da55ff..000000000 --- a/packages/frontend/src/main/components/auth/UserAvatarAuthoriseApp.vue +++ /dev/null @@ -1,60 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/comments/CommentEditor.vue b/packages/frontend/src/main/components/comments/CommentEditor.vue deleted file mode 100644 index 73561160b..000000000 --- a/packages/frontend/src/main/components/comments/CommentEditor.vue +++ /dev/null @@ -1,251 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/comments/CommentListItem.vue b/packages/frontend/src/main/components/comments/CommentListItem.vue deleted file mode 100644 index f0a0355a8..000000000 --- a/packages/frontend/src/main/components/comments/CommentListItem.vue +++ /dev/null @@ -1,287 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/comments/CommentThreadAttachmentPreview.vue b/packages/frontend/src/main/components/comments/CommentThreadAttachmentPreview.vue deleted file mode 100644 index 102414284..000000000 --- a/packages/frontend/src/main/components/comments/CommentThreadAttachmentPreview.vue +++ /dev/null @@ -1,112 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/comments/CommentThreadReply.vue b/packages/frontend/src/main/components/comments/CommentThreadReply.vue deleted file mode 100644 index 9a410410d..000000000 --- a/packages/frontend/src/main/components/comments/CommentThreadReply.vue +++ /dev/null @@ -1,196 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/comments/CommentThreadReplyAttachments.vue b/packages/frontend/src/main/components/comments/CommentThreadReplyAttachments.vue deleted file mode 100644 index aaf0b6ccb..000000000 --- a/packages/frontend/src/main/components/comments/CommentThreadReplyAttachments.vue +++ /dev/null @@ -1,100 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/comments/CommentThreadViewer.vue b/packages/frontend/src/main/components/comments/CommentThreadViewer.vue deleted file mode 100644 index 589798b51..000000000 --- a/packages/frontend/src/main/components/comments/CommentThreadViewer.vue +++ /dev/null @@ -1,919 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/comments/CommentsViewerNavbar.vue b/packages/frontend/src/main/components/comments/CommentsViewerNavbar.vue deleted file mode 100644 index a4b8dce75..000000000 --- a/packages/frontend/src/main/components/comments/CommentsViewerNavbar.vue +++ /dev/null @@ -1,206 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/CommitPreviewCard.vue b/packages/frontend/src/main/components/common/CommitPreviewCard.vue deleted file mode 100644 index 9177cd727..000000000 --- a/packages/frontend/src/main/components/common/CommitPreviewCard.vue +++ /dev/null @@ -1,208 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/CommitReceivedReceipts.vue b/packages/frontend/src/main/components/common/CommitReceivedReceipts.vue deleted file mode 100644 index c64141c45..000000000 --- a/packages/frontend/src/main/components/common/CommitReceivedReceipts.vue +++ /dev/null @@ -1,147 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/ErrorPlaceholder.vue b/packages/frontend/src/main/components/common/ErrorPlaceholder.vue deleted file mode 100644 index e7677a6ae..000000000 --- a/packages/frontend/src/main/components/common/ErrorPlaceholder.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/GlobalLoading.vue b/packages/frontend/src/main/components/common/GlobalLoading.vue deleted file mode 100644 index 7eb4ac885..000000000 --- a/packages/frontend/src/main/components/common/GlobalLoading.vue +++ /dev/null @@ -1,20 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/GlobalToast.vue b/packages/frontend/src/main/components/common/GlobalToast.vue deleted file mode 100644 index b29c5318f..000000000 --- a/packages/frontend/src/main/components/common/GlobalToast.vue +++ /dev/null @@ -1,27 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/NoDataPlaceholder.vue b/packages/frontend/src/main/components/common/NoDataPlaceholder.vue deleted file mode 100644 index b76161793..000000000 --- a/packages/frontend/src/main/components/common/NoDataPlaceholder.vue +++ /dev/null @@ -1,190 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/PagePlaceholder.vue b/packages/frontend/src/main/components/common/PagePlaceholder.vue deleted file mode 100644 index 1670e243f..000000000 --- a/packages/frontend/src/main/components/common/PagePlaceholder.vue +++ /dev/null @@ -1,58 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/PreviewImage.vue b/packages/frontend/src/main/components/common/PreviewImage.vue deleted file mode 100644 index f25641512..000000000 --- a/packages/frontend/src/main/components/common/PreviewImage.vue +++ /dev/null @@ -1,192 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/SearchBar.vue b/packages/frontend/src/main/components/common/SearchBar.vue deleted file mode 100644 index b5edc58fe..000000000 --- a/packages/frontend/src/main/components/common/SearchBar.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/SectionCard.vue b/packages/frontend/src/main/components/common/SectionCard.vue deleted file mode 100644 index 1b94a1b5b..000000000 --- a/packages/frontend/src/main/components/common/SectionCard.vue +++ /dev/null @@ -1,59 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/SourceAppAvatar.vue b/packages/frontend/src/main/components/common/SourceAppAvatar.vue deleted file mode 100644 index 74a276194..000000000 --- a/packages/frontend/src/main/components/common/SourceAppAvatar.vue +++ /dev/null @@ -1,47 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/SpeckleViewer.vue b/packages/frontend/src/main/components/common/SpeckleViewer.vue deleted file mode 100644 index 10e5bb9f3..000000000 --- a/packages/frontend/src/main/components/common/SpeckleViewer.vue +++ /dev/null @@ -1,143 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/StreamPreviewCard.vue b/packages/frontend/src/main/components/common/StreamPreviewCard.vue deleted file mode 100644 index cd4175367..000000000 --- a/packages/frontend/src/main/components/common/StreamPreviewCard.vue +++ /dev/null @@ -1,108 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/TextDotsTyping.vue b/packages/frontend/src/main/components/common/TextDotsTyping.vue deleted file mode 100644 index 2ba37f70f..000000000 --- a/packages/frontend/src/main/components/common/TextDotsTyping.vue +++ /dev/null @@ -1,58 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/UserAvatar.vue b/packages/frontend/src/main/components/common/UserAvatar.vue deleted file mode 100644 index b79e7c44c..000000000 --- a/packages/frontend/src/main/components/common/UserAvatar.vue +++ /dev/null @@ -1,131 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/UserAvatarIcon.vue b/packages/frontend/src/main/components/common/UserAvatarIcon.vue deleted file mode 100644 index c4bda1fb4..000000000 --- a/packages/frontend/src/main/components/common/UserAvatarIcon.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/UserRoleSelect.vue b/packages/frontend/src/main/components/common/UserRoleSelect.vue deleted file mode 100644 index 661cb162c..000000000 --- a/packages/frontend/src/main/components/common/UserRoleSelect.vue +++ /dev/null @@ -1,53 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/file-upload/FileUploadProgress.vue b/packages/frontend/src/main/components/common/file-upload/FileUploadProgress.vue deleted file mode 100644 index ea06a858f..000000000 --- a/packages/frontend/src/main/components/common/file-upload/FileUploadProgress.vue +++ /dev/null @@ -1,45 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/file-upload/FileUploadProgressRow.vue b/packages/frontend/src/main/components/common/file-upload/FileUploadProgressRow.vue deleted file mode 100644 index 2318d5819..000000000 --- a/packages/frontend/src/main/components/common/file-upload/FileUploadProgressRow.vue +++ /dev/null @@ -1,112 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/file-upload/FileUploadZone.vue b/packages/frontend/src/main/components/common/file-upload/FileUploadZone.vue deleted file mode 100644 index 208774268..000000000 --- a/packages/frontend/src/main/components/common/file-upload/FileUploadZone.vue +++ /dev/null @@ -1,198 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/layout/BaseDialog.vue b/packages/frontend/src/main/components/common/layout/BaseDialog.vue deleted file mode 100644 index 22d782624..000000000 --- a/packages/frontend/src/main/components/common/layout/BaseDialog.vue +++ /dev/null @@ -1,70 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/layout/BasicPanel.vue b/packages/frontend/src/main/components/common/layout/BasicPanel.vue deleted file mode 100644 index 82fc731cf..000000000 --- a/packages/frontend/src/main/components/common/layout/BasicPanel.vue +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/packages/frontend/src/main/components/common/layout/RoundedButtonList.vue b/packages/frontend/src/main/components/common/layout/RoundedButtonList.vue deleted file mode 100644 index f9558d0de..000000000 --- a/packages/frontend/src/main/components/common/layout/RoundedButtonList.vue +++ /dev/null @@ -1,16 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/layout/rounded-button-list/RoundedButtonListItem.vue b/packages/frontend/src/main/components/common/layout/rounded-button-list/RoundedButtonListItem.vue deleted file mode 100644 index 77e1723db..000000000 --- a/packages/frontend/src/main/components/common/layout/rounded-button-list/RoundedButtonListItem.vue +++ /dev/null @@ -1,69 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/text-editor/SmartTextEditor.vue b/packages/frontend/src/main/components/common/text-editor/SmartTextEditor.vue deleted file mode 100644 index 1980e1ffc..000000000 --- a/packages/frontend/src/main/components/common/text-editor/SmartTextEditor.vue +++ /dev/null @@ -1,330 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/common/text-editor/SmartTextEditorLinkDialog.vue b/packages/frontend/src/main/components/common/text-editor/SmartTextEditorLinkDialog.vue deleted file mode 100644 index e5be6e002..000000000 --- a/packages/frontend/src/main/components/common/text-editor/SmartTextEditorLinkDialog.vue +++ /dev/null @@ -1,89 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/text-editor/SmartTextEditorMentionList.vue b/packages/frontend/src/main/components/common/text-editor/SmartTextEditorMentionList.vue deleted file mode 100644 index a663fb673..000000000 --- a/packages/frontend/src/main/components/common/text-editor/SmartTextEditorMentionList.vue +++ /dev/null @@ -1,114 +0,0 @@ - - - - - diff --git a/packages/frontend/src/main/components/common/text-editor/SmartTextEditorToolbar.vue b/packages/frontend/src/main/components/common/text-editor/SmartTextEditorToolbar.vue deleted file mode 100644 index 801a8f140..000000000 --- a/packages/frontend/src/main/components/common/text-editor/SmartTextEditorToolbar.vue +++ /dev/null @@ -1,126 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/text-editor/SmartTextEditorToolbarBtn.vue b/packages/frontend/src/main/components/common/text-editor/SmartTextEditorToolbarBtn.vue deleted file mode 100644 index 2f7fb45d1..000000000 --- a/packages/frontend/src/main/components/common/text-editor/SmartTextEditorToolbarBtn.vue +++ /dev/null @@ -1,22 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/common/utility/PrioritizedPortal.vue b/packages/frontend/src/main/components/common/utility/PrioritizedPortal.vue deleted file mode 100644 index b6bf4aeee..000000000 --- a/packages/frontend/src/main/components/common/utility/PrioritizedPortal.vue +++ /dev/null @@ -1,56 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/feed/FeedTimeline.vue b/packages/frontend/src/main/components/feed/FeedTimeline.vue deleted file mode 100644 index b6d686a4c..000000000 --- a/packages/frontend/src/main/components/feed/FeedTimeline.vue +++ /dev/null @@ -1,245 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/feed/LatestBlogposts.vue b/packages/frontend/src/main/components/feed/LatestBlogposts.vue deleted file mode 100644 index 156fd449d..000000000 --- a/packages/frontend/src/main/components/feed/LatestBlogposts.vue +++ /dev/null @@ -1,150 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/onboarding/GettingStartedSteps.vue b/packages/frontend/src/main/components/onboarding/GettingStartedSteps.vue deleted file mode 100644 index 1aae10441..000000000 --- a/packages/frontend/src/main/components/onboarding/GettingStartedSteps.vue +++ /dev/null @@ -1,395 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/CollaboratorsDisplay.vue b/packages/frontend/src/main/components/stream/CollaboratorsDisplay.vue deleted file mode 100644 index d68c5a71e..000000000 --- a/packages/frontend/src/main/components/stream/CollaboratorsDisplay.vue +++ /dev/null @@ -1,66 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/ListItemCommit.vue b/packages/frontend/src/main/components/stream/ListItemCommit.vue deleted file mode 100644 index 81932ddee..000000000 --- a/packages/frontend/src/main/components/stream/ListItemCommit.vue +++ /dev/null @@ -1,241 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/StreamAccessRequestBanner.vue b/packages/frontend/src/main/components/stream/StreamAccessRequestBanner.vue deleted file mode 100644 index f821790c9..000000000 --- a/packages/frontend/src/main/components/stream/StreamAccessRequestBanner.vue +++ /dev/null @@ -1,176 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/stream/StreamActivity.vue b/packages/frontend/src/main/components/stream/StreamActivity.vue deleted file mode 100644 index 7f150118f..000000000 --- a/packages/frontend/src/main/components/stream/StreamActivity.vue +++ /dev/null @@ -1,135 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/StreamInviteBanner.vue b/packages/frontend/src/main/components/stream/StreamInviteBanner.vue deleted file mode 100644 index 2646f09f3..000000000 --- a/packages/frontend/src/main/components/stream/StreamInviteBanner.vue +++ /dev/null @@ -1,72 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/StreamInvitePlaceholder.vue b/packages/frontend/src/main/components/stream/StreamInvitePlaceholder.vue deleted file mode 100644 index 3f23cdfce..000000000 --- a/packages/frontend/src/main/components/stream/StreamInvitePlaceholder.vue +++ /dev/null @@ -1,57 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/UserStreamInviteBanners.vue b/packages/frontend/src/main/components/stream/UserStreamInviteBanners.vue deleted file mode 100644 index 77eff6c6d..000000000 --- a/packages/frontend/src/main/components/stream/UserStreamInviteBanners.vue +++ /dev/null @@ -1,37 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/WebhookForm.vue b/packages/frontend/src/main/components/stream/WebhookForm.vue deleted file mode 100644 index bdd0d4962..000000000 --- a/packages/frontend/src/main/components/stream/WebhookForm.vue +++ /dev/null @@ -1,244 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/stream/branch/BranchSelect.vue b/packages/frontend/src/main/components/stream/branch/BranchSelect.vue deleted file mode 100644 index 586e1a6e7..000000000 --- a/packages/frontend/src/main/components/stream/branch/BranchSelect.vue +++ /dev/null @@ -1,53 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/collaborators/LeaveStreamPanel.vue b/packages/frontend/src/main/components/stream/collaborators/LeaveStreamPanel.vue deleted file mode 100644 index e1b9fc9f9..000000000 --- a/packages/frontend/src/main/components/stream/collaborators/LeaveStreamPanel.vue +++ /dev/null @@ -1,94 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/collaborators/StreamCollaboratorRow.vue b/packages/frontend/src/main/components/stream/collaborators/StreamCollaboratorRow.vue deleted file mode 100644 index 77257fc53..000000000 --- a/packages/frontend/src/main/components/stream/collaborators/StreamCollaboratorRow.vue +++ /dev/null @@ -1,75 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/collaborators/StreamPendingCollaboratorRow.vue b/packages/frontend/src/main/components/stream/collaborators/StreamPendingCollaboratorRow.vue deleted file mode 100644 index f35555a25..000000000 --- a/packages/frontend/src/main/components/stream/collaborators/StreamPendingCollaboratorRow.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/stream/collaborators/StreamRoleCollaborators.vue b/packages/frontend/src/main/components/stream/collaborators/StreamRoleCollaborators.vue deleted file mode 100644 index 40e734681..000000000 --- a/packages/frontend/src/main/components/stream/collaborators/StreamRoleCollaborators.vue +++ /dev/null @@ -1,118 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/commit/CommitMultiSelectToolbar.vue b/packages/frontend/src/main/components/stream/commit/CommitMultiSelectToolbar.vue deleted file mode 100644 index 148fdeaaa..000000000 --- a/packages/frontend/src/main/components/stream/commit/CommitMultiSelectToolbar.vue +++ /dev/null @@ -1,79 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/commit/CommitShareBtn.vue b/packages/frontend/src/main/components/stream/commit/CommitShareBtn.vue deleted file mode 100644 index 918424df1..000000000 --- a/packages/frontend/src/main/components/stream/commit/CommitShareBtn.vue +++ /dev/null @@ -1,9 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/editor/StreamVisibilityToggle.vue b/packages/frontend/src/main/components/stream/editor/StreamVisibilityToggle.vue deleted file mode 100644 index 1f3b70f74..000000000 --- a/packages/frontend/src/main/components/stream/editor/StreamVisibilityToggle.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/stream/favorites/FavoriteStreamsPlaceholder.vue b/packages/frontend/src/main/components/stream/favorites/FavoriteStreamsPlaceholder.vue deleted file mode 100644 index 3c14b5d1b..000000000 --- a/packages/frontend/src/main/components/stream/favorites/FavoriteStreamsPlaceholder.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/stream/favorites/StreamFavoriteBtn.vue b/packages/frontend/src/main/components/stream/favorites/StreamFavoriteBtn.vue deleted file mode 100644 index ca9fcfa3f..000000000 --- a/packages/frontend/src/main/components/stream/favorites/StreamFavoriteBtn.vue +++ /dev/null @@ -1,128 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/stream/globals/GlobalsBuilder.vue b/packages/frontend/src/main/components/stream/globals/GlobalsBuilder.vue deleted file mode 100644 index d23713aa3..000000000 --- a/packages/frontend/src/main/components/stream/globals/GlobalsBuilder.vue +++ /dev/null @@ -1,376 +0,0 @@ - - - - - diff --git a/packages/frontend/src/main/components/stream/globals/GlobalsEntry.vue b/packages/frontend/src/main/components/stream/globals/GlobalsEntry.vue deleted file mode 100644 index 81ef1afcc..000000000 --- a/packages/frontend/src/main/components/stream/globals/GlobalsEntry.vue +++ /dev/null @@ -1,322 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/stream/uploads/FileProcessingItem.vue b/packages/frontend/src/main/components/stream/uploads/FileProcessingItem.vue deleted file mode 100644 index be86bd030..000000000 --- a/packages/frontend/src/main/components/stream/uploads/FileProcessingItem.vue +++ /dev/null @@ -1,97 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/stream/uploads/FileUploadItem.vue b/packages/frontend/src/main/components/stream/uploads/FileUploadItem.vue deleted file mode 100644 index 33c027cb6..000000000 --- a/packages/frontend/src/main/components/stream/uploads/FileUploadItem.vue +++ /dev/null @@ -1,114 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/AppEditDialog.vue b/packages/frontend/src/main/components/user/AppEditDialog.vue deleted file mode 100644 index 30a2b4b20..000000000 --- a/packages/frontend/src/main/components/user/AppEditDialog.vue +++ /dev/null @@ -1,251 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/AppNewDialog.vue b/packages/frontend/src/main/components/user/AppNewDialog.vue deleted file mode 100644 index 9430a0338..000000000 --- a/packages/frontend/src/main/components/user/AppNewDialog.vue +++ /dev/null @@ -1,206 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/BasicUserInfoRow.vue b/packages/frontend/src/main/components/user/BasicUserInfoRow.vue deleted file mode 100644 index 9217695c4..000000000 --- a/packages/frontend/src/main/components/user/BasicUserInfoRow.vue +++ /dev/null @@ -1,60 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/EmailVerificationBanner.vue b/packages/frontend/src/main/components/user/EmailVerificationBanner.vue deleted file mode 100644 index 9f6d44b72..000000000 --- a/packages/frontend/src/main/components/user/EmailVerificationBanner.vue +++ /dev/null @@ -1,132 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/ListItemPersonalAccessToken.vue b/packages/frontend/src/main/components/user/ListItemPersonalAccessToken.vue deleted file mode 100644 index a99e5d79e..000000000 --- a/packages/frontend/src/main/components/user/ListItemPersonalAccessToken.vue +++ /dev/null @@ -1,77 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/ListItemStream.vue b/packages/frontend/src/main/components/user/ListItemStream.vue deleted file mode 100644 index febec9793..000000000 --- a/packages/frontend/src/main/components/user/ListItemStream.vue +++ /dev/null @@ -1,64 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/ListItemUserApp.vue b/packages/frontend/src/main/components/user/ListItemUserApp.vue deleted file mode 100644 index c6809c418..000000000 --- a/packages/frontend/src/main/components/user/ListItemUserApp.vue +++ /dev/null @@ -1,143 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/TokenDialog.vue b/packages/frontend/src/main/components/user/TokenDialog.vue deleted file mode 100644 index 4440edc51..000000000 --- a/packages/frontend/src/main/components/user/TokenDialog.vue +++ /dev/null @@ -1,140 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/UserAccessTokens.vue b/packages/frontend/src/main/components/user/UserAccessTokens.vue deleted file mode 100644 index fb94babdd..000000000 --- a/packages/frontend/src/main/components/user/UserAccessTokens.vue +++ /dev/null @@ -1,74 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/UserApps.vue b/packages/frontend/src/main/components/user/UserApps.vue deleted file mode 100644 index 17d4260a6..000000000 --- a/packages/frontend/src/main/components/user/UserApps.vue +++ /dev/null @@ -1,67 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/UserAuthorisedApps.vue b/packages/frontend/src/main/components/user/UserAuthorisedApps.vue deleted file mode 100644 index aebeddfd2..000000000 --- a/packages/frontend/src/main/components/user/UserAuthorisedApps.vue +++ /dev/null @@ -1,131 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/UserDeleteCard.vue b/packages/frontend/src/main/components/user/UserDeleteCard.vue deleted file mode 100644 index 24ec0a3f0..000000000 --- a/packages/frontend/src/main/components/user/UserDeleteCard.vue +++ /dev/null @@ -1,77 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/UserInfoCard.vue b/packages/frontend/src/main/components/user/UserInfoCard.vue deleted file mode 100644 index 639c0dbf2..000000000 --- a/packages/frontend/src/main/components/user/UserInfoCard.vue +++ /dev/null @@ -1,194 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/user/UserNotificationPreferences.vue b/packages/frontend/src/main/components/user/UserNotificationPreferences.vue deleted file mode 100644 index a065d3bad..000000000 --- a/packages/frontend/src/main/components/user/UserNotificationPreferences.vue +++ /dev/null @@ -1,120 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/CanonicalViews.vue b/packages/frontend/src/main/components/viewer/CanonicalViews.vue deleted file mode 100644 index 166b7502a..000000000 --- a/packages/frontend/src/main/components/viewer/CanonicalViews.vue +++ /dev/null @@ -1,67 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/CommentAddOverlay.vue b/packages/frontend/src/main/components/viewer/CommentAddOverlay.vue deleted file mode 100644 index 9df8cc353..000000000 --- a/packages/frontend/src/main/components/viewer/CommentAddOverlay.vue +++ /dev/null @@ -1,601 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/CommentsOverlay.vue b/packages/frontend/src/main/components/viewer/CommentsOverlay.vue deleted file mode 100644 index 56ab82729..000000000 --- a/packages/frontend/src/main/components/viewer/CommentsOverlay.vue +++ /dev/null @@ -1,748 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/CommitInfoResource.vue b/packages/frontend/src/main/components/viewer/CommitInfoResource.vue deleted file mode 100644 index 5e78b23ef..000000000 --- a/packages/frontend/src/main/components/viewer/CommitInfoResource.vue +++ /dev/null @@ -1,166 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/viewer/CommitObjectViewerScope.vue b/packages/frontend/src/main/components/viewer/CommitObjectViewerScope.vue deleted file mode 100644 index feaf6ba52..000000000 --- a/packages/frontend/src/main/components/viewer/CommitObjectViewerScope.vue +++ /dev/null @@ -1,35 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/viewer/FilterCategoryActive.vue b/packages/frontend/src/main/components/viewer/FilterCategoryActive.vue deleted file mode 100644 index c9ffcfe78..000000000 --- a/packages/frontend/src/main/components/viewer/FilterCategoryActive.vue +++ /dev/null @@ -1,193 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/FilterNumericActive.vue b/packages/frontend/src/main/components/viewer/FilterNumericActive.vue deleted file mode 100644 index 22ae1ab03..000000000 --- a/packages/frontend/src/main/components/viewer/FilterNumericActive.vue +++ /dev/null @@ -1,183 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/FilterRowSelect.vue b/packages/frontend/src/main/components/viewer/FilterRowSelect.vue deleted file mode 100644 index 87acb5e4c..000000000 --- a/packages/frontend/src/main/components/viewer/FilterRowSelect.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/LightsMenu.vue b/packages/frontend/src/main/components/viewer/LightsMenu.vue deleted file mode 100644 index 75a28b3bb..000000000 --- a/packages/frontend/src/main/components/viewer/LightsMenu.vue +++ /dev/null @@ -1,68 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/viewer/ObjectInfoResource.vue b/packages/frontend/src/main/components/viewer/ObjectInfoResource.vue deleted file mode 100644 index 7631cd511..000000000 --- a/packages/frontend/src/main/components/viewer/ObjectInfoResource.vue +++ /dev/null @@ -1,132 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/viewer/ObjectProperties.vue b/packages/frontend/src/main/components/viewer/ObjectProperties.vue deleted file mode 100644 index aab181a5b..000000000 --- a/packages/frontend/src/main/components/viewer/ObjectProperties.vue +++ /dev/null @@ -1,152 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/viewer/ObjectPropertiesRow.vue b/packages/frontend/src/main/components/viewer/ObjectPropertiesRow.vue deleted file mode 100644 index c668d9ddc..000000000 --- a/packages/frontend/src/main/components/viewer/ObjectPropertiesRow.vue +++ /dev/null @@ -1,324 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/ObjectSelection.vue b/packages/frontend/src/main/components/viewer/ObjectSelection.vue deleted file mode 100644 index 6da556b0b..000000000 --- a/packages/frontend/src/main/components/viewer/ObjectSelection.vue +++ /dev/null @@ -1,171 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/ResourceGroup.vue b/packages/frontend/src/main/components/viewer/ResourceGroup.vue deleted file mode 100644 index db9d89e91..000000000 --- a/packages/frontend/src/main/components/viewer/ResourceGroup.vue +++ /dev/null @@ -1,110 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/ViewerBubbles.vue b/packages/frontend/src/main/components/viewer/ViewerBubbles.vue deleted file mode 100644 index 9f0b09fbc..000000000 --- a/packages/frontend/src/main/components/viewer/ViewerBubbles.vue +++ /dev/null @@ -1,570 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/ViewerControls.vue b/packages/frontend/src/main/components/viewer/ViewerControls.vue deleted file mode 100644 index aed11ef3c..000000000 --- a/packages/frontend/src/main/components/viewer/ViewerControls.vue +++ /dev/null @@ -1,184 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/ViewerFilters.vue b/packages/frontend/src/main/components/viewer/ViewerFilters.vue deleted file mode 100644 index 28310749b..000000000 --- a/packages/frontend/src/main/components/viewer/ViewerFilters.vue +++ /dev/null @@ -1,274 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/ViewsDisplay.vue b/packages/frontend/src/main/components/viewer/ViewsDisplay.vue deleted file mode 100644 index 77c637ccc..000000000 --- a/packages/frontend/src/main/components/viewer/ViewsDisplay.vue +++ /dev/null @@ -1,75 +0,0 @@ - - - diff --git a/packages/frontend/src/main/components/viewer/dialogs/AllCommits.vue b/packages/frontend/src/main/components/viewer/dialogs/AllCommits.vue deleted file mode 100644 index 530dfa091..000000000 --- a/packages/frontend/src/main/components/viewer/dialogs/AllCommits.vue +++ /dev/null @@ -1,118 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/viewer/dialogs/AllCommitsBranch.vue b/packages/frontend/src/main/components/viewer/dialogs/AllCommitsBranch.vue deleted file mode 100644 index 99e22248a..000000000 --- a/packages/frontend/src/main/components/viewer/dialogs/AllCommitsBranch.vue +++ /dev/null @@ -1,136 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/viewer/dialogs/StreamOverlayViewer.vue b/packages/frontend/src/main/components/viewer/dialogs/StreamOverlayViewer.vue deleted file mode 100644 index 98e987d21..000000000 --- a/packages/frontend/src/main/components/viewer/dialogs/StreamOverlayViewer.vue +++ /dev/null @@ -1,189 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/viewer/dialogs/ViewerHelp.vue b/packages/frontend/src/main/components/viewer/dialogs/ViewerHelp.vue deleted file mode 100644 index 7c5aab66b..000000000 --- a/packages/frontend/src/main/components/viewer/dialogs/ViewerHelp.vue +++ /dev/null @@ -1,64 +0,0 @@ - - diff --git a/packages/frontend/src/main/components/viewer/embed/EmbeddedCommitObjectViewer.vue b/packages/frontend/src/main/components/viewer/embed/EmbeddedCommitObjectViewer.vue deleted file mode 100644 index 8ff4711f1..000000000 --- a/packages/frontend/src/main/components/viewer/embed/EmbeddedCommitObjectViewer.vue +++ /dev/null @@ -1,176 +0,0 @@ - - - diff --git a/packages/frontend/src/main/dialogs/BranchEditDialog.vue b/packages/frontend/src/main/dialogs/BranchEditDialog.vue deleted file mode 100644 index 0a3195777..000000000 --- a/packages/frontend/src/main/dialogs/BranchEditDialog.vue +++ /dev/null @@ -1,269 +0,0 @@ - - diff --git a/packages/frontend/src/main/dialogs/CommitEdit.vue b/packages/frontend/src/main/dialogs/CommitEdit.vue deleted file mode 100644 index c2e7a7d44..000000000 --- a/packages/frontend/src/main/dialogs/CommitEdit.vue +++ /dev/null @@ -1,227 +0,0 @@ - - diff --git a/packages/frontend/src/main/dialogs/InviteDialog.vue b/packages/frontend/src/main/dialogs/InviteDialog.vue deleted file mode 100644 index 8b6e29733..000000000 --- a/packages/frontend/src/main/dialogs/InviteDialog.vue +++ /dev/null @@ -1,253 +0,0 @@ - - diff --git a/packages/frontend/src/main/dialogs/NewBranch.vue b/packages/frontend/src/main/dialogs/NewBranch.vue deleted file mode 100644 index 28ba2264e..000000000 --- a/packages/frontend/src/main/dialogs/NewBranch.vue +++ /dev/null @@ -1,123 +0,0 @@ - - diff --git a/packages/frontend/src/main/dialogs/NewSpeckle.vue b/packages/frontend/src/main/dialogs/NewSpeckle.vue deleted file mode 100644 index 07d762f9b..000000000 --- a/packages/frontend/src/main/dialogs/NewSpeckle.vue +++ /dev/null @@ -1,158 +0,0 @@ - - - diff --git a/packages/frontend/src/main/dialogs/NewStream.vue b/packages/frontend/src/main/dialogs/NewStream.vue deleted file mode 100644 index ee818870f..000000000 --- a/packages/frontend/src/main/dialogs/NewStream.vue +++ /dev/null @@ -1,233 +0,0 @@ - - diff --git a/packages/frontend/src/main/dialogs/ShareStreamDialog.vue b/packages/frontend/src/main/dialogs/ShareStreamDialog.vue deleted file mode 100644 index 6d44db100..000000000 --- a/packages/frontend/src/main/dialogs/ShareStreamDialog.vue +++ /dev/null @@ -1,453 +0,0 @@ - - diff --git a/packages/frontend/src/main/dialogs/UserDeleteDialog.vue b/packages/frontend/src/main/dialogs/UserDeleteDialog.vue deleted file mode 100644 index 7f3da5330..000000000 --- a/packages/frontend/src/main/dialogs/UserDeleteDialog.vue +++ /dev/null @@ -1,108 +0,0 @@ - - diff --git a/packages/frontend/src/main/dialogs/UserEditDialog.vue b/packages/frontend/src/main/dialogs/UserEditDialog.vue deleted file mode 100644 index 775dd8fff..000000000 --- a/packages/frontend/src/main/dialogs/UserEditDialog.vue +++ /dev/null @@ -1,127 +0,0 @@ - - diff --git a/packages/frontend/src/main/dialogs/commit/CommitsBatchActionsDialog.vue b/packages/frontend/src/main/dialogs/commit/CommitsBatchActionsDialog.vue deleted file mode 100644 index a884e5b5b..000000000 --- a/packages/frontend/src/main/dialogs/commit/CommitsBatchActionsDialog.vue +++ /dev/null @@ -1,214 +0,0 @@ - - diff --git a/packages/frontend/src/main/layouts/TheAuth.vue b/packages/frontend/src/main/layouts/TheAuth.vue deleted file mode 100644 index b8636013a..000000000 --- a/packages/frontend/src/main/layouts/TheAuth.vue +++ /dev/null @@ -1,71 +0,0 @@ - - diff --git a/packages/frontend/src/main/layouts/TheBasic.vue b/packages/frontend/src/main/layouts/TheBasic.vue deleted file mode 100644 index 8e61ad665..000000000 --- a/packages/frontend/src/main/layouts/TheBasic.vue +++ /dev/null @@ -1,23 +0,0 @@ - - diff --git a/packages/frontend/src/main/layouts/TheMain.vue b/packages/frontend/src/main/layouts/TheMain.vue deleted file mode 100644 index 16fd2dfb1..000000000 --- a/packages/frontend/src/main/layouts/TheMain.vue +++ /dev/null @@ -1,185 +0,0 @@ - - - diff --git a/packages/frontend/src/main/lib/auth/composables/useValidatablePasswordEntry.ts b/packages/frontend/src/main/lib/auth/composables/useValidatablePasswordEntry.ts deleted file mode 100644 index b7792c805..000000000 --- a/packages/frontend/src/main/lib/auth/composables/useValidatablePasswordEntry.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { ValidatePasswordStrengthDocument } from '@/graphql/generated/graphql' -import { Nullable } from '@/helpers/typeHelpers' -import { useApolloClient } from '@vue/apollo-composable' -import { ref, watch } from 'vue' - -export function useValidatablePasswordEntry() { - const password = ref>(null) - const passwordConfirmation = ref>(null) - /** - * Strength value from 1 to 100. Its PasswordStrengthCheckResults.score times 25. - */ - const passwordStrength = ref>(null) - const passwordSuggestion = ref>(null) - - const apollo = useApolloClient() - - /** - * Re-check password strength - */ - const updatePasswordStrength = async () => { - if (!password.value) { - passwordStrength.value = 1 - passwordSuggestion.value = null - return - } - - const result = await apollo.client.query({ - query: ValidatePasswordStrengthDocument, - variables: { pwd: password.value } - }) - - passwordStrength.value = result.data.userPwdStrength.score * 25 - passwordSuggestion.value = - result.data.userPwdStrength.feedback.suggestions[0] || null - } - - /** - * Do basic validation - */ - const validatePassword = () => { - if (!password.value) { - throw new Error('Password is empty') - } - - if (password.value !== passwordConfirmation.value) { - throw new Error('Passwords do not match') - } - } - - /** - * Asynchronously validate that the password is strong enough - */ - const validatePasswordStrength = async () => { - await updatePasswordStrength() - if ((passwordStrength.value || 0) < 50) { - throw new Error('Password too weak') - } - } - - // Wipe old suggestion, if password is changed - watch(password, () => { - passwordStrength.value = 0 - passwordSuggestion.value = null - }) - - return { - password, - passwordConfirmation, - passwordStrength, - passwordSuggestion, - updatePasswordStrength, - validatePassword, - validatePasswordStrength - } -} diff --git a/packages/frontend/src/main/lib/auth/errors/index.ts b/packages/frontend/src/main/lib/auth/errors/index.ts deleted file mode 100644 index 1dc876515..000000000 --- a/packages/frontend/src/main/lib/auth/errors/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { BaseError } from '@/helpers/errorHelper' - -export class InvalidAuthTokenError extends BaseError { - static defaultMessage = 'Invalid auth token stored locally' -} diff --git a/packages/frontend/src/main/lib/auth/services/authService.ts b/packages/frontend/src/main/lib/auth/services/authService.ts deleted file mode 100644 index 398416a8d..000000000 --- a/packages/frontend/src/main/lib/auth/services/authService.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Nullable } from '@/helpers/typeHelpers' -import { - deletePostAuthRedirect, - getPostAuthRedirect -} from '@/main/lib/auth/utils/postAuthRedirectManager' -import { getCurrentQueryParams } from '@/main/lib/common/web-apis/helpers/urlHelper' -import { Route } from 'vue-router' - -/** - * Process a successful authentication (from login page, registration page or elsewhere) - */ -export function processSuccessfulAuth(res: Response): void { - // Redirect status means that auth was successful - if (!res.redirected) return - - // If we already have a preferred redirect URL, use that instead, but take the access_code - // from the incoming redirect URL - let redirectUrl = undefined - const postAuthRedirect = getPostAuthRedirect() - if (postAuthRedirect?.pathWithQuery) { - const accessCode = new URL(res.url).searchParams.get('access_code') - if (accessCode) { - const newUrl = new URL(postAuthRedirect.pathWithQuery, location.origin) - newUrl.searchParams.set('access_code', accessCode) - redirectUrl = newUrl.toString() - deletePostAuthRedirect() - } - } - - // Fallback to default redirect url - if (!redirectUrl) { - redirectUrl = res.url - } - - window.location.href = redirectUrl -} - -/** - * Get invite id from URL query string - */ -export function getInviteTokenFromURL(): Nullable { - const query = getCurrentQueryParams() - return query.get('token') || query.get('inviteId') -} - -/** - * Get invite id from VueRouter route, can be used instead of getInviteTokenFromURL() - * when you want the result to be reactive and dependant on the route object - */ -export function getInviteTokenFromRoute(route: Route): Nullable { - const query = route.query - return (query.token as string) || (query.inviteId as string) || null -} diff --git a/packages/frontend/src/main/lib/auth/utils/postAuthRedirectManager.ts b/packages/frontend/src/main/lib/auth/utils/postAuthRedirectManager.ts deleted file mode 100644 index 9594e532a..000000000 --- a/packages/frontend/src/main/lib/auth/utils/postAuthRedirectManager.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { LocalStorageKeys } from '@/helpers/mainConstants' -import { Optional, SafeLocalStorage } from '@speckle/shared' - -const expirationDateInSeconds = 60 * 5 // 5 min - -type PostAuthRedirectState = { - /** - * Path with querystring - */ - pathWithQuery: string - date: number -} - -export function setPostAuthRedirect(params: { pathWithQuery: string }) { - const { pathWithQuery } = params - const state: PostAuthRedirectState = { - pathWithQuery, - date: Date.now() - } - - SafeLocalStorage.set(LocalStorageKeys.ShouldRedirectTo, JSON.stringify(state)) -} - -export function getPostAuthRedirect(): Optional { - const stateString = SafeLocalStorage.get(LocalStorageKeys.ShouldRedirectTo) - if (!stateString) return undefined - - let state: Optional = undefined - try { - state = JSON.parse(stateString) as PostAuthRedirectState - if (!state?.pathWithQuery || !state.date) { - throw new Error('Invalid state struct') - } - - const currentTimestamp = Date.now() - if (state.date < currentTimestamp - expirationDateInSeconds * 1000) { - throw new Error('Expired state') - } - } catch (e) { - // wipe - deletePostAuthRedirect() - } - - return state -} - -export function deletePostAuthRedirect() { - SafeLocalStorage.remove(LocalStorageKeys.ShouldRedirectTo) -} diff --git a/packages/frontend/src/main/lib/common/apollo/helpers/apolloOperationHelper.ts b/packages/frontend/src/main/lib/common/apollo/helpers/apolloOperationHelper.ts deleted file mode 100644 index 276ee83da..000000000 --- a/packages/frontend/src/main/lib/common/apollo/helpers/apolloOperationHelper.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { isUndefinedOrVoid } from '@/helpers/typeHelpers' -import { - ApolloError, - FetchResult, - DataProxy, - ApolloCache, - defaultDataIdFromObject, - Reference -} from '@apollo/client/core' -import { GraphQLError } from 'graphql' - -/** - * Get a cached object's identifier - */ -export function getCacheId(typeName: string, id: string) { - const cachedId = defaultDataIdFromObject({ - __typename: typeName, - id - }) - if (!cachedId) throw new Error('Unable to build Apollo cache ID') - - return cachedId -} - -/** - * Convert an error thrown during $apollo.mutate() into a fetch result - */ -export function convertThrowIntoFetchResult(err: unknown): FetchResult { - let gqlErrors: readonly GraphQLError[] - if (err instanceof ApolloError) { - gqlErrors = err.graphQLErrors - } else if (err instanceof Error) { - gqlErrors = [new GraphQLError(err.message)] - } else { - gqlErrors = [new GraphQLError(`${err}` + '')] - } - - return { - data: undefined, - errors: gqlErrors - } -} - -/** - * Get first error message from a GQL errors array - */ -export function getFirstErrorMessage( - errs: readonly GraphQLError[] | undefined | null, - fallbackMessage = 'An unexpected issue occurred' -): string { - return errs?.[0]?.message || fallbackMessage -} - -/** - * Find some cached Apollo data through a fragment/query and use the updater function - * to return the replacement for the data that the fragment initially found - * @returns Whether an update was made - */ -export function updateCacheByFilter( - cache: ApolloCache, - filter: { - fragment?: DataProxy.Fragment - query?: DataProxy.Query - }, - /** - * If returns undefined/void, then updating is essentially canceled. Be careful not to - * mutate anything being passed into this function! E.g. if you want to mutate arrays, - * create new arrays through slice()/filter() instead - */ - updater: (data: TData) => TData | undefined | void, - options: Partial<{ - /** - * Whether to suppress errors that occur when the fragment being queried - * doesn't find anything - * Default: true - */ - ignoreCacheErrors: boolean - - /** - * Whether to overwrite the old cache results, instead of triggering a merge function - * to merge the old and new results. - * Default: true - */ - overwrite: boolean - }> = {} -): boolean { - const { fragment, query } = filter - const { ignoreCacheErrors = true, overwrite = true } = options - - if (!fragment && !query) { - throw new Error( - 'Either fragment or query must be specified to be able to find cached data to update' - ) - } - - const readData = (): TData | null => { - if (fragment) { - return cache.readFragment(fragment) - } else if (query) { - return cache.readQuery(query) - } else { - return null - } - } - - const writeData = (data: TData): boolean => { - if (fragment) { - cache.writeFragment({ ...fragment, data, overwrite }) - return true - } else if (query) { - cache.writeQuery({ ...query, data, overwrite }) - return true - } else { - return false - } - } - - try { - const currentData = readData() - if (!currentData) return false - - const newData = updater(currentData) - if (isUndefinedOrVoid(newData)) return false - - return writeData(newData) - } catch (e: unknown) { - if (ignoreCacheErrors) { - console.warn('Failed Apollo cache update', e) - return false - } - throw e - } -} - -/** - * Inside cache.modify calls you'll get these instead of full objects when reading fields that hold - * identifiable objects or object arrays - */ -export type CacheObjectReference = Reference - -/** - * Objects & object arrays in `cache.modify` calls are represented through reference objects, so - * if you want to add new ones you shouldn't add the entire object, but only its reference - */ -export function getObjectReference(typeName: string, id: string): CacheObjectReference { - return { - __ref: getCacheId(typeName, id) - } -} diff --git a/packages/frontend/src/main/lib/common/file-upload/blobStorageApi.ts b/packages/frontend/src/main/lib/common/file-upload/blobStorageApi.ts deleted file mode 100644 index 4f3098e0f..000000000 --- a/packages/frontend/src/main/lib/common/file-upload/blobStorageApi.ts +++ /dev/null @@ -1,220 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -import Vue from 'vue' -import { - UploadableFileItem, - UploadFileItem -} from '@/main/lib/common/file-upload/fileUploadHelper' -import { getAuthToken } from '@/plugins/authHelpers' -import { clamp } from 'lodash' -import { BaseError } from '@/helpers/errorHelper' - -export type BlobPostResultItem = { - blobId?: string - fileName?: string - fileSize?: number - formKey: string - uploadStatus: number - uploadError: string -} - -type BlobUploadPrincipal = { - streamId: string -} - -export class BlobRetrievalError extends BaseError { - static defaultMessage = 'An error occurred while trying to retrieve the blob' -} - -/** - * Initiate a browser file download of the specified blob - * @param blobId - * @param fileName Download filename - * @param principal Owner of the blob - */ -export async function downloadBlobWithUrl( - blobId: string, - fileName: string, - principal: BlobUploadPrincipal -) { - const token = getAuthToken() - const res = await fetch(`/api/stream/${principal.streamId}/blob/${blobId}`, { - headers: token - ? { - Authorization: token - } - : undefined - }) - - if (res.status !== 200) { - throw new BlobRetrievalError() - } - - const blob = await res.blob() - const fileUrl = window.URL.createObjectURL(blob) - - const a = document.createElement('a') - a.setAttribute('style', 'display: none;') - a.setAttribute('href', fileUrl) - a.setAttribute('download', fileName) - document.body.appendChild(a) - - a.click() - a.remove() - window.URL.revokeObjectURL(fileUrl) -} - -/** - * Creates a string with a URL representing the blob. Use to display image previews, etc. - * @param blobId - * @param fileName Download filename - * @param principal Owner of the blob - */ -export async function getBlobUrl(blobId: string, principal: BlobUploadPrincipal) { - const token = getAuthToken() - const res = await fetch(`/api/stream/${principal.streamId}/blob/${blobId}`, { - headers: token - ? { - Authorization: token - } - : undefined - }) - - if (res.status !== 200) { - throw new BlobRetrievalError() - } - - const blob = await res.blob() - const fileUrl = window.URL.createObjectURL(blob) - return fileUrl -} - -/** - * Upload a single file and return an UploadFileItem - * @param file File emitted from FileUploadZone - * @param principal What entity should the file be attached to on the server - * @returns A Vue Observable UploadFileItem, it's reactive so you can watch it etc. inside - * your Vue components - */ -export function uploadFile( - file: UploadFileItem, - principal: BlobUploadPrincipal, - callback?: (file: UploadFileItem) => void -): UploadFileItem { - const cbWrapper = callback - ? (files: Record) => callback(Object.values(files)[0]) - : undefined - const results = uploadFiles([file], principal, cbWrapper) - return Object.values(results)[0] -} - -/** - * Upload files and return an UploadFileItem for each file (keyed by file ID) - * @param files Files emitted from FileUploadZone - * @param principal What entity should the file be attached to on the server - * @returns A map of Vue observable UploadFileItems (they're reactive), keyed by - * file.id - */ -export function uploadFiles( - files: UploadableFileItem[], - principal: BlobUploadPrincipal, - callback?: (files: Record) => void -): Record { - const authToken = getAuthToken() - const formData = new FormData() - const uploadFiles: Record = {} - - for (const file of files) { - // Actually upload the file only if it doesn't have an attached error - // & if it isn't already added - const hasError = file.error - if (!hasError && !uploadFiles[file.id]) { - formData.append(file.id, file.file) - } - - uploadFiles[file.id] = Vue.observable({ - ...file, - result: undefined, - progress: 0 - }) - } - - // Nothing to upload, return - if (![...formData.keys()].length) return uploadFiles - - // Init req - const req = new XMLHttpRequest() - req.open('POST', `/api/stream/${principal.streamId}/blob`) - req.responseType = 'json' - - if (authToken) { - req.setRequestHeader('Authorization', `Bearer ${authToken}`) - } - - req.upload.addEventListener('progress', (e) => { - const newProgress = clamp(Math.floor((e.loaded / e.total) * 100), 0, 100) - - for (const resultItem of Object.values(uploadFiles)) { - if (resultItem.error) continue - - resultItem.progress = newProgress - } - }) - - req.addEventListener('load', () => { - const uploadResults: BlobPostResultItem[] = (req.response?.uploadResults || - []) as BlobPostResultItem[] - for (const uploadFile of Object.values(uploadFiles)) { - if (uploadFile.error) continue - - uploadFile.progress = 100 - uploadFile.result = uploadResults.find((r) => r.formKey === uploadFile.id) || { - uploadError: 'Unable to resolve upload results', - uploadStatus: 2, - formKey: uploadFile.id - } - } - - if (callback) callback(uploadFiles) - }) - - req.addEventListener('error', () => { - const uploadResults: BlobPostResultItem[] = (req.response?.uploadResults || - []) as BlobPostResultItem[] - for (const uploadFile of Object.values(uploadFiles)) { - if (uploadFile.error) continue - - uploadFile.progress = 100 - uploadFile.result = uploadResults.find((r) => r.formKey === uploadFile.id) || { - uploadError: 'Upload request failed unexpectedly', - uploadStatus: 2, - formKey: uploadFile.id - } - } - - if (callback) callback(uploadFiles) - }) - - req.send(formData) - - return uploadFiles -} - -export class BlobDeleteFailedError extends BaseError { - static defaultMessage = 'Unable to delete the file' -} - -export async function deleteBlob(blobId: string, principal: BlobUploadPrincipal) { - const { streamId } = principal - const authToken = getAuthToken() - - const res = await fetch(`/api/stream/${streamId}/blob/${blobId}`, { - method: 'DELETE', - headers: { - ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}) - } - }) - - if (res.status !== 204) { - throw new BlobDeleteFailedError() - } -} diff --git a/packages/frontend/src/main/lib/common/file-upload/fileUploadHelper.ts b/packages/frontend/src/main/lib/common/file-upload/fileUploadHelper.ts deleted file mode 100644 index dd35c712a..000000000 --- a/packages/frontend/src/main/lib/common/file-upload/fileUploadHelper.ts +++ /dev/null @@ -1,188 +0,0 @@ -import { BaseError } from '@/helpers/errorHelper' -import md5 from '@/helpers/md5' -import { Nullable, Optional } from '@/helpers/typeHelpers' -import { BlobPostResultItem } from '@/main/lib/common/file-upload/blobStorageApi' -import { difference, has, intersection } from 'lodash' - -/** - * A file, as emitted out from FileUploadZone - */ -export interface UploadableFileItem { - file: File - error: Nullable - /** - * You can use this ID to check for File equality - */ - id: string -} - -/** - * A file once it's upload has started - */ -export interface UploadFileItem extends UploadableFileItem { - /** - * Progress between 0 and 100 - */ - progress: number - - /** - * When upload has finished this contains a BlobPostResultItem - */ - result: Optional - - /** - * When a blob gets assigned to a resource, it should count as in use, and this will - * prevent it from being deleted as junk - */ - inUse?: boolean -} - -export type FilesSelectedEvent = { files: UploadableFileItem[] } - -export type FileUploadDeleteEvent = { id: string } - -export type FileTypeSpecifier = UniqueFileTypeSpecifier | `.${string}` - -export enum UniqueFileTypeSpecifier { - AnyAudio = 'audio/*', - AnyVideo = 'video/*', - AnyImage = 'image/*' -} - -function isUploadFileItem( - uploadable: UploadableFileItem -): uploadable is UploadFileItem { - return has(uploadable, 'progress') || has(uploadable, 'result') -} - -export function isSuccessfullyUploaded(upload: UploadFileItem): boolean { - return !!upload.result?.blobId -} - -/** - * Validate if the upload is fully processed (successfully or not) - */ -export function isUploadProcessed( - upload: UploadableFileItem | UploadFileItem -): boolean { - if (upload.error) return true - if (isUploadFileItem(upload)) { - return upload.progress >= 100 - } - - return false -} - -/** - * Validate if file has the allowed type. While we could also test for MIME types - * not in UniqueFileTypeSpecifier, this function is meant to be equivalent to the - * 'accept' attribute, which only allows for extensions or UniqueFileTypeSpecifier - * values. - * @param file - * @param allowedTypes The file must have one of these types - * @returns True if valid, Error object if not - */ -export function validateFileType( - file: File, - allowedTypes: FileTypeSpecifier[] -): true | Error { - // Check one of the unique file type specifiers first - const allowedUniqueTypes = intersection( - Object.values(UniqueFileTypeSpecifier), - allowedTypes - ) - for (const allowedUniqueType of allowedUniqueTypes) { - switch (allowedUniqueType) { - case UniqueFileTypeSpecifier.AnyAudio: - if (file.type.startsWith('audio')) return true - break - case UniqueFileTypeSpecifier.AnyImage: - if (file.type.startsWith('image')) return true - break - case UniqueFileTypeSpecifier.AnyVideo: - if (file.type.startsWith('video')) return true - break - } - } - - // Check file extensions - const allowedExtensions = difference(allowedTypes, allowedUniqueTypes) - const fileExt = resolveFileExtension(file.name) - if (!fileExt) return new MissingFileExtensionError() - - for (const allowedExtension of allowedExtensions) { - if (allowedExtension === fileExt.toLowerCase()) return true - } - - return new ForbiddenFileTypeError() -} - -/** - * Resolve file extension (with leading dot) - */ -export function resolveFileExtension(fileName: string): Nullable { - const ext = fileName.split('.').pop() || null - return ext ? `.${ext}` : null -} - -/** - * Check if string is a FileTypeSpecifier - */ -export function isFileTypeSpecifier(type: string): type is FileTypeSpecifier { - return ( - type.startsWith('.') || - Object.values(UniqueFileTypeSpecifier as Record).includes(type) - ) -} - -/** - * Create a human readable file size string from the numeric size in bytes - */ -export function prettyFileSize(sizeInBytes: number): string { - const removeTrailingZeroes = (fileSize: number) => - parseFloat(fileSize.toFixed(2)).toString() - - if (sizeInBytes < 1024) { - return `${sizeInBytes}bytes` - } - - const kbSize = sizeInBytes / 1024 - if (kbSize < 1024) { - return `${removeTrailingZeroes(kbSize)}KB` - } - - const mbSize = kbSize / 1024 - if (mbSize < 1024) { - return `${removeTrailingZeroes(mbSize)}MB` - } - - const gbSize = mbSize / 1024 - return `${removeTrailingZeroes(gbSize)}GB` -} - -/** - * Generate an ID that uniquely identifies a specific file. The same file - * will always have the same ID. - */ -export function generateFileId(file: File): string { - const importantData = { - name: file.name, - lastModified: file.lastModified, - size: file.size, - type: file.type - } - - return md5(JSON.stringify(importantData)) -} - -export class ForbiddenFileTypeError extends BaseError { - static defaultMessage = 'The selected file type is forbidden' -} - -export class MissingFileExtensionError extends BaseError { - static defaultMessage = 'The selected file has a missing extension' -} - -export class FileTooLargeError extends BaseError { - static defaultMessage = "The selected file's size is too large" -} diff --git a/packages/frontend/src/main/lib/common/general/helpers/errorHelper.ts b/packages/frontend/src/main/lib/common/general/helpers/errorHelper.ts deleted file mode 100644 index 368ef1ec2..000000000 --- a/packages/frontend/src/main/lib/common/general/helpers/errorHelper.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { BaseError } from '@/helpers/errorHelper' - -class UnexpectedErrorStructureError extends BaseError { - static defaultMessage = 'An unexpected error type was thrown' -} - -/** - * In JS catch clauses can receive not only Errors, but pretty much any other kind of data type, so - * you can use this helper to ensure that whatever is passed in is a real error - */ -export function ensureError(e: unknown, fallbackMessage?: string): Error { - if (e instanceof Error) return e - return new UnexpectedErrorStructureError(fallbackMessage) -} diff --git a/packages/frontend/src/main/lib/common/text-editor/documentHelper.ts b/packages/frontend/src/main/lib/common/text-editor/documentHelper.ts deleted file mode 100644 index 345d21ee8..000000000 --- a/packages/frontend/src/main/lib/common/text-editor/documentHelper.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { RichTextEditor } from '@speckle/shared' -import { JSONContent } from '@tiptap/core' - -const { isDocEmpty, documentToBasicString } = RichTextEditor -export { isDocEmpty, documentToBasicString } - -export type SmartTextEditorSchemaOptions = { - /** - * Whether the document supports multi-line input - */ - multiLine?: boolean -} - -export type SmartTextEditorOptions = { - /** - * Placeholder to show, if any - */ - placeholder?: string -} - -/** - * Create a TipTap document from basic text - */ -export function basicStringToDocument(text: string): JSONContent { - const textNode = { type: 'text', text } - return { - type: 'doc', - content: [{ type: 'paragraph', content: [textNode] }] - } -} diff --git a/packages/frontend/src/main/lib/common/text-editor/formattingHelpers.js b/packages/frontend/src/main/lib/common/text-editor/formattingHelpers.js deleted file mode 100644 index f56cc3c9f..000000000 --- a/packages/frontend/src/main/lib/common/text-editor/formattingHelpers.js +++ /dev/null @@ -1,11 +0,0 @@ -export const FormattingMarks = Object.freeze({ - Bold: 'bold', - Italic: 'italic', - Strikethrough: 'strike', - Underline: 'underline' -}) - -export const LinkOptions = Object.freeze({ - Link: 'link', - Unlink: 'unlink' -}) diff --git a/packages/frontend/src/main/lib/common/text-editor/mentionSuggestion.js b/packages/frontend/src/main/lib/common/text-editor/mentionSuggestion.js deleted file mode 100644 index 8944e4a03..000000000 --- a/packages/frontend/src/main/lib/common/text-editor/mentionSuggestion.js +++ /dev/null @@ -1,110 +0,0 @@ -import { VueRenderer } from '@tiptap/vue-2' -import SmartTextEditorMentionList from '@/main/components/common/text-editor/SmartTextEditorMentionList.vue' -import Popper from 'popper.js' -import vuetify from '@/plugins/vuetify' -import { getApolloProvider } from '@/config/apolloConfig' -import { userSearchQuery } from '@/graphql/user' - -/** - * @type {import('@tiptap/suggestion').SuggestionOptions} - */ -export const suggestion = { - items: async ({ query }) => { - if ((query?.length || 0) < 3) { - return undefined - } - - // Execute users search query - const client = getApolloProvider().defaultClient - const { data } = await client.query({ - query: userSearchQuery, - variables: { - query, - limit: 5, - archived: false - } - }) - - return data.userSearch.items - }, - - render: () => { - /** @type {import('@tiptap/vue-2').VueRenderer} */ - let component - /** @type {import('popper.js').default} */ - let popup - /** @type {Function} */ - let clickHandler - - const hidePopup = () => { - if (!popup) return - - popup.popper.style.display = 'none' - popup.update() - } - - return { - onStart: (props) => { - // Render mention list with popper.js (which we have because of v-tooltip) - component = new VueRenderer(SmartTextEditorMentionList, { - parent: undefined, - propsData: props, - vuetify - }) - document.getElementsByClassName('v-application')[0].append(component.element) - - if (!props.clientRect) { - return - } - - popup = new Popper( - { getBoundingClientRect: props.clientRect }, - component.element - ) - - // Init click handler for hiding when clicking outside of the popper - /** @param {MouseEvent} e */ - clickHandler = (e) => { - /** @type {Element} */ - const el = e.target - const popperEl = popup.popper - - if (el !== popperEl && !popperEl.contains(el)) { - hidePopup() - } - } - document.addEventListener('click', clickHandler) - document.addEventListener('touchend', clickHandler) - }, - - onUpdate(props) { - component.updateProps(props) - - if (!props.clientRect) { - return - } - - popup.reference.getBoundingClientRect = props.clientRect - popup.update() - }, - - onKeyDown(props) { - if (props.event.key === 'Escape') { - hidePopup() - return true - } - - return component.ref?.onKeyDown(props) - }, - - onExit() { - popup.destroy() - component.destroy() - component.element.remove() - - document.removeEventListener('click', clickHandler) - document.removeEventListener('touchend', clickHandler) - } - } - } -} diff --git a/packages/frontend/src/main/lib/common/text-editor/tipTapExtensions.js b/packages/frontend/src/main/lib/common/text-editor/tipTapExtensions.js deleted file mode 100644 index c15cf95f2..000000000 --- a/packages/frontend/src/main/lib/common/text-editor/tipTapExtensions.js +++ /dev/null @@ -1,223 +0,0 @@ -import Document from '@tiptap/extension-document' -import Paragraph from '@tiptap/extension-paragraph' -import Text from '@tiptap/extension-text' -import Underline from '@tiptap/extension-underline' -import Bold from '@tiptap/extension-bold' -import Italic from '@tiptap/extension-italic' -import Strike from '@tiptap/extension-strike' -import Link from '@tiptap/extension-link' -import HardBreak from '@tiptap/extension-hard-break' -import Mention from '@tiptap/extension-mention' -import History from '@tiptap/extension-history' -import Placeholder from '@tiptap/extension-placeholder' - -import { Node, Extension } from '@tiptap/core' -import { TextSelection } from 'prosemirror-state' -import { VALID_HTTP_URL } from '@/main/lib/common/vuetify/validators' - -import { suggestion } from '@/main/lib/common/text-editor/mentionSuggestion' - -/** - * Document node that only supports inline content (no paragraphs or line breaks) - */ -export const InlineDoc = Node.create({ - name: 'doc', - topNode: true, - content: 'block' -}) - -/** - * Used to track Enter events for submitting on enter etc. - */ -export const EnterKeypressTrackerExtension = Extension.create({ - name: 'enterKeypressTracker', - - addStorage() { - return { - /** - * Bizarre, but the TipTap extension storage is globally shared between all instances of - * the extension. This is why I have to store callbacks separately per editor instance - */ - editorCallbacks: new WeakMap(), - subscribe(editor, cb) { - const storage = editor.storage.enterKeypressTracker - const editorCallbacks = storage.editorCallbacks.get(editor) || [] - - const idx = editorCallbacks.indexOf(cb) - if (idx !== -1) return - - editorCallbacks.push(cb) - storage.editorCallbacks.set(editor, editorCallbacks) - }, - unsubscribe(editor, cb) { - const storage = editor.storage.enterKeypressTracker - const editorCallbacks = storage.editorCallbacks.get(editor) || [] - - const idx = editorCallbacks.indexOf(cb) - if (idx === -1) return - - editorCallbacks.splice(idx, 1) - storage.editorCallbacks.set(editor, editorCallbacks) - } - } - }, - - addKeyboardShortcuts() { - return { - Enter: () => { - const { storage, editor } = this - const callbacks = storage.editorCallbacks.get(editor) || [] - - if (!callbacks?.length) return false - - for (const cb of callbacks) { - cb() - } - - return true - } - } - } -}) - -/** - * Various useful utility commands - */ -export const UtilitiesExtension = Extension.create({ - name: 'speckleUtilities', - - /** - * Various utility functions that aren't TipTap commands - */ - addStorage() { - return { - /** - * Get currently selected text or null if no selection - * @param {import('@tiptap/core').Editor} editor - */ - getSelectedText: (editor) => { - const { from, to, empty } = editor.state.selection - - if (empty) { - return null - } - - return editor.state.doc.textBetween(from, to, ' ') - }, - - /** - * Get full text of the selected link node - * @param {import('@tiptap/core').Editor} editor - */ - getLinkText: (editor) => { - const { $from: pos } = editor.state.selection - if (!pos) return null - - // Check if link mark is inclusive, as this changes the child idx resolution algo - const isLinkInclusive = editor.schema.mark('link').type.spec.inclusive || false - - // Resolve link node's index using parent - let parentChildIdx = pos.index() - if (isLinkInclusive) { - // Since link is inclusive, if textOffset is 0 (the cursor is at the end of the link) we need - // to decrease index by 1 to get the actual link, not the next node - // Except if the cursor is at the very beginning (which is why we clamp it) - parentChildIdx = Math.max(0, pos.textOffset ? pos.index() : pos.index() - 1) - } - - const parent = pos.parent - const textNode = parent.child(parentChildIdx) - - // Check if actually a link - if (!textNode.marks.find((m) => m.type.name === 'link')) return null - - return textNode.textContent - } - } - }, - - /** - * Only add "commands" here (they should mutate the state of the editor and be transactional) - */ - addCommands() { - return { - /** - * Insert new link or update the one currently selected with a new title & URL - * @param {string} url - * @param {string} title - */ - addOrUpdateLink: (url, title) => (cmdProps) => { - const { chain } = cmdProps - const cmdChain = chain().focus() - - // Change selection to entire link, if part of it is selected - cmdChain.extendMarkRange('link') - - // Insert (& replace old, if selection isnt empty) new title - cmdChain.insertContent(title) - - // Select newly created text - cmdChain.command((cmdProps) => { - const { tr } = cmdProps - - // Select the newly added text - const selection = tr.selection - const $anchor = tr.selection.$anchor // insertContent() moves selection to the end of the new text - const $head = tr.doc.resolve(selection.anchor - title.length) - - const newSelection = new TextSelection($anchor, $head) - tr.setSelection(newSelection) - }) - - // Set it to be a link - cmdChain.setLink({ href: url }) - - // Collapse selection to point to the end of the link - cmdChain.command((cmdProps) => { - const { tr } = cmdProps - - const newSelection = new TextSelection(tr.selection.$to) - tr.setSelection(newSelection) - }) - - // Run chain - return cmdChain.run() - } - } - } -}) - -/** - * Get TipTap editor extensions that should be loaded in the editor - * @param {import('@/main/lib/common/text-editor/documentHelper').SmartTextEditorSchemaOptions} - * @param {import('@/main/lib/common/text-editor/documentHelper').SmartTextEditorOptions} - */ -export function getEditorExtensions({ multiLine = true } = {}, { placeholder } = {}) { - return [ - ...(multiLine ? [Document] : [InlineDoc, EnterKeypressTrackerExtension]), - HardBreak, - UtilitiesExtension, - Text, - Paragraph, - Bold, - Underline, - Italic, - Strike, - Link.configure({ - // Only allow http protocol links (no JS) - validate: (href) => VALID_HTTP_URL.test(href), - // Open on click would be too annoying during editing - openOnClick: false, - // Autolink off cause otherwise it's impossible to end the link - autolink: false - }), - Mention.configure({ - suggestion, - HTMLAttributes: { - class: 'editor-mention' - } - }), - History, - ...(placeholder ? [Placeholder.configure({ placeholder })] : []) - ] -} diff --git a/packages/frontend/src/main/lib/common/vuetify/validators.ts b/packages/frontend/src/main/lib/common/vuetify/validators.ts deleted file mode 100644 index 91fba6442..000000000 --- a/packages/frontend/src/main/lib/common/vuetify/validators.ts +++ /dev/null @@ -1,35 +0,0 @@ -import DOMPurify from 'dompurify' -import type { InputValidationRule } from 'vuetify' - -export const VALID_EMAIL_REGEX = - /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ - -export const VALID_HTTP_URL = /^https?:\/\// - -export const required = - (error = 'This field is required'): InputValidationRule => - (val: string) => - !!val || error - -export const email = - (error = 'Value must be a valid e-mail address'): InputValidationRule => - (val: string) => - VALID_EMAIL_REGEX.test(val) || error - -export const url = - (error = 'Value must be a valid URL'): InputValidationRule => - (val: string) => - VALID_HTTP_URL.test(val) || error - -export const maxLength = - (limit: number, error = 'Value is too long'): InputValidationRule => - (val: string) => - val.length <= limit || error - -export const noXss = - (error = 'No crazy hacks please'): InputValidationRule => - (val: string) => { - const pure = DOMPurify.sanitize(val) - if (pure !== val) return error - return true - } diff --git a/packages/frontend/src/main/lib/common/web-apis/helpers/urlHelper.ts b/packages/frontend/src/main/lib/common/web-apis/helpers/urlHelper.ts deleted file mode 100644 index 7535d5c16..000000000 --- a/packages/frontend/src/main/lib/common/web-apis/helpers/urlHelper.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function getCurrentQueryParams() { - return new URL(window.location.href).searchParams -} diff --git a/packages/frontend/src/main/lib/common/web-apis/mixins/windowResizeHandler.js b/packages/frontend/src/main/lib/common/web-apis/mixins/windowResizeHandler.js deleted file mode 100644 index 62e5cebd3..000000000 --- a/packages/frontend/src/main/lib/common/web-apis/mixins/windowResizeHandler.js +++ /dev/null @@ -1,37 +0,0 @@ -import { throttle, debounce } from 'lodash' - -/** - * Window resize handler mixin with debounce/throttle built in - */ - -export function buildResizeHandlerMixin({ shouldThrottle, wait } = {}) { - const waitTime = wait || 100 - - return { - mounted() { - this.resizeHandler = shouldThrottle - ? throttle(this.onWindowResize, waitTime) - : debounce(this.onWindowResize, waitTime) - window.addEventListener('resize', this.resizeHandler) - }, - beforeDestroy() { - window.removeEventListener('resize', this.resizeHandler) - }, - watch: { - '$vuetify.breakpoint': { - handler() { - // Vuetify breakpoint service sometimes kicks in late, so we're triggering - // a final update handler on next tick to make sure any code that depends on $vuetify.breakpoint - // can be updated as well - this.resizeHandler() - }, - deep: true - } - }, - methods: { - onWindowResize(e) { - console.warn('Resize handler mixin onWindowResize method not overridden!', e) - } - } - } -} diff --git a/packages/frontend/src/main/lib/core/composables/activeUser.ts b/packages/frontend/src/main/lib/core/composables/activeUser.ts deleted file mode 100644 index 1b52591ac..000000000 --- a/packages/frontend/src/main/lib/core/composables/activeUser.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { MainUserDataDocument } from '@/graphql/generated/graphql' -import { md5 } from '@speckle/shared' -import { useQuery } from '@vue/apollo-composable' -import { computed } from 'vue' -import { isAdmin, isGuest } from '@/main/lib/core/helpers/users' - -/** - * Get active user. - * undefined - not yet resolved - * null - resolved that user is a guest - */ -export function useActiveUser() { - const { result, refetch, onResult } = useQuery(MainUserDataDocument) - - const activeUser = computed(() => - result.value ? result.value.activeUser : undefined - ) - const isLoggedIn = computed(() => !!activeUser.value?.id) - const distinctId = computed(() => { - const user = activeUser.value - if (!user) return user // null or undefined - if (!user.email) return null - - return '@' + md5(user.email.toLowerCase()).toUpperCase() - }) - - const isAdminUser = computed(() => isAdmin(activeUser.value)) - const isServerGuest = computed(() => isGuest(activeUser.value)) - - return { - activeUser, - isLoggedIn, - distinctId, - refetch, - onResult, - isAdmin: isAdminUser, - isServerGuest - } -} diff --git a/packages/frontend/src/main/lib/core/composables/core.ts b/packages/frontend/src/main/lib/core/composables/core.ts deleted file mode 100644 index 9d4ae1597..000000000 --- a/packages/frontend/src/main/lib/core/composables/core.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { OverridedMixpanel } from 'mixpanel-browser' -import { getCurrentInstance, computed } from 'vue' -import { useQuery } from '@vue/apollo-composable' -import { IsLoggedInDocument } from '@/graphql/generated/graphql' -import { ComposableInvokedOutOfScopeError } from '@/main/lib/core/errors/composition' - -/** - * Get EventHub - */ -export function useEventHub() { - const vm = getCurrentInstance() - if (!vm) throw new ComposableInvokedOutOfScopeError() - - return vm.proxy.$eventHub -} - -/** - * Get Mixpanel instance (not reactive) - */ -export function useMixpanel(): OverridedMixpanel { - const vm = getCurrentInstance() - if (!vm) throw new ComposableInvokedOutOfScopeError() - - return vm.proxy.$mixpanel -} - -/** - * Composable that resolves user auth information through an Apollo query - */ -export function useIsLoggedIn() { - const { result } = useQuery(IsLoggedInDocument) - const userId = computed(() => result.value?.activeUser?.id) - const isLoggedIn = computed(() => !!userId.value) - return { isLoggedIn, userId } -} - -/** - * Get Vuetify - */ -export function useVuetify() { - const vm = getCurrentInstance() - if (!vm) throw new ComposableInvokedOutOfScopeError() - - return vm.proxy.$vuetify -} diff --git a/packages/frontend/src/main/lib/core/composables/dom.ts b/packages/frontend/src/main/lib/core/composables/dom.ts deleted file mode 100644 index 06eed5b70..000000000 --- a/packages/frontend/src/main/lib/core/composables/dom.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { useEventHub } from '@/main/lib/core/composables/core' -import { useRoute } from '@/main/lib/core/composables/router' -import Vue, { onBeforeUnmount, onMounted, Ref, ref, unref, watch } from 'vue' - -/** - * Sets up v-navigation-drawer autoresize (ask @dim how this works) - */ -export function useNavigationDrawerAutoResize(params: { - navRestWidth?: number - borderSize?: number - drawerRef: Ref | Vue -}) { - const { navRestWidth = 300, borderSize = 3, drawerRef } = params - const navWidth = ref(navRestWidth) - const minSize = borderSize - - const route = useRoute() - const eventHub = useEventHub() - const drawerEl = () => { - const comp = unref(drawerRef) - if (!comp) - throw new Error( - "Couldn't resolve drawer ref! Is it returned from the setup function?" - ) - - return comp.$el as HTMLElement - } - - // Adjust navigation width according to route metadata - watch( - () => route, - (to) => { - if (!to.meta?.resizableNavbar) { - navWidth.value = navRestWidth - } - if (to.meta?.resizableNavbar && window.__lastNavSize) { - navWidth.value = window.__lastNavSize - } - }, - { immediate: true } - ) - - function onMouseMove(e: MouseEvent) { - e.preventDefault() - const el = drawerEl() - - const maxWidth = document.body.offsetWidth / 2 - const minWidth = 300 - - document.body.style.cursor = 'ew-resize' - if (!(e.clientX > maxWidth || e.clientX < minWidth)) { - el.style.width = e.clientX + 'px' - window.__lastNavSize = e.clientX - } - } - - function onMouseDown(e: MouseEvent) { - e.preventDefault() - const el = drawerEl() - - if (e.offsetX < minSize) { - el.style.transition = 'initial' - document.addEventListener('mousemove', onMouseMove, false) - } - } - - function onMouseUp(e: MouseEvent) { - e.preventDefault() - const el = drawerEl() - - el.style.transition = '' - document.body.style.cursor = '' - navWidth.value = el.style.width - document.removeEventListener('mousemove', onMouseMove, false) - setTimeout(() => { - // @Dim: Why are we resizing the viewer here? We generally want to avoid needless resizes - eventHub.$emit('resize-viewer') - }, 300) - } - - // Setup resize events - onMounted(() => { - const el = drawerEl() - const drawerBorder = el.querySelector('.nav-resizer') - if (drawerBorder) { - drawerBorder.style.cursor = 'ew-resize' - drawerBorder.addEventListener('mousedown', onMouseDown, false) - } - - document.addEventListener('mouseup', onMouseUp, false) - }) - - // Unsub events - onBeforeUnmount(() => { - const el = drawerEl() - const drawerBorder = el.querySelector('.nav-resizer') - - if (drawerBorder) { - drawerBorder.removeEventListener('mousedown', onMouseDown) - } - - document.removeEventListener('mouseup', onMouseUp) - document.removeEventListener('mousemove', onMouseMove) - }) - - return { - navWidth - } -} diff --git a/packages/frontend/src/main/lib/core/composables/notifications.ts b/packages/frontend/src/main/lib/core/composables/notifications.ts deleted file mode 100644 index 0a1aee641..000000000 --- a/packages/frontend/src/main/lib/core/composables/notifications.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { Nullable } from '@/helpers/typeHelpers' -import { useEventHub } from '@/main/lib/core/composables/core' -import { - GlobalEvents, - NotificationEventPayload, - ToastNotificationType -} from '@/main/lib/core/helpers/eventHubHelper' -import Vue, { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue' - -const globalToastState = Vue.observable({ - isInitialized: false, - queuedNotifications: [] as NotificationEventPayload[] -}) - -const isInitialized = () => !!globalToastState.isInitialized -const queuedNotifications = () => globalToastState.queuedNotifications -const resetQueue = () => (globalToastState.queuedNotifications = []) -const queueNotification = (e: NotificationEventPayload) => { - const notifications = queuedNotifications().slice() - notifications.push(e) - Vue.set(globalToastState, 'queuedNotifications', notifications) -} - -/** - * Invoke this only in GlobalToast.vue to properly initialize it - */ -export function setupGlobalToast() { - const eventHub = useEventHub() - - const snack = ref(false) - const text = ref(null as Nullable) - const actionName = ref(null as Nullable) - const to = ref(null as Nullable) - const type = ref('primary' as ToastNotificationType) - - const color = computed((): ToastNotificationType => type.value || 'primary') - - watch(snack, (newVal) => { - if (!newVal) { - text.value = null - actionName.value = null - to.value = null - } - }) - - const handleEvent = (e: NotificationEventPayload) => { - // first set snack.value to false so that the previous notification gets removed - // then wait for next tick so that we're sure vuetify has reset the timeout - snack.value = false - nextTick().then(() => { - snack.value = true - text.value = e.text - actionName.value = e.action ? e.action.name : null - to.value = e.action ? e.action.to : null - type.value = e.type || 'primary' - }) - } - - onMounted(() => { - Vue.set(globalToastState, 'isInitialized', true) - - eventHub.$on(GlobalEvents.Notification, handleEvent) - - const queue = queuedNotifications() - for (const queueItem of queue) { - handleEvent(queueItem) - } - resetQueue() - }) - - onUnmounted(() => { - Vue.set(globalToastState, 'isInitialized', false) - - eventHub.$off(GlobalEvents.Notification, handleEvent) - }) - - return { - snack, - text, - actionName, - to, - type, - color - } -} - -/** - * Trigger notification or queue it up to be triggered when GlobalToast.vue is ready - */ -export async function triggerToastNotification( - eventHub: Vue, - e: NotificationEventPayload -) { - if (isInitialized()) { - eventHub.$emit(GlobalEvents.Notification, e) - } else { - queueNotification(e) - } -} - -/** - * Allows you to emit toast notifications - */ -export function useGlobalToast() { - const eventHub = useEventHub() - - return { - /** - * Trigger a toast notification - */ - triggerNotification: (args: NotificationEventPayload) => { - triggerToastNotification(eventHub, args) - } - } -} diff --git a/packages/frontend/src/main/lib/core/composables/router.ts b/packages/frontend/src/main/lib/core/composables/router.ts deleted file mode 100644 index c942d8d14..000000000 --- a/packages/frontend/src/main/lib/core/composables/router.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Optional } from '@/helpers/typeHelpers' -import { ComposableInvokedOutOfScopeError } from '@/main/lib/core/errors/composition' -import { getCurrentInstance, reactive } from 'vue' -import VueRouter, { Route } from 'vue-router' - -let currentRoute: Optional - -/** - * Get router (not reactive) - */ -export function useRouter(): VueRouter { - const vm = getCurrentInstance() - if (!vm) throw new ComposableInvokedOutOfScopeError() - - return vm.proxy.$router -} - -/** - * Get current route object (reactive) - */ -export function useRoute(): Route { - if (currentRoute) return currentRoute - - const router = useRouter() - const vm = getCurrentInstance() - if (!vm) throw new ComposableInvokedOutOfScopeError() - - const newRoute = reactive({ ...vm.proxy.$route } as Route) - router.afterEach((to) => { - Object.assign(newRoute, to) - }) - currentRoute = newRoute - - return newRoute -} diff --git a/packages/frontend/src/main/lib/core/composables/server.ts b/packages/frontend/src/main/lib/core/composables/server.ts deleted file mode 100644 index c96ee25be..000000000 --- a/packages/frontend/src/main/lib/core/composables/server.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { MainServerInfoDocument } from '@/graphql/generated/graphql' -import { useQuery } from '@vue/apollo-composable' -import { computed } from 'vue' - -export function useServerInfo() { - const { result } = useQuery(MainServerInfoDocument) - - const serverInfo = computed(() => result.value?.serverInfo) - const isGuestMode = computed(() => !!serverInfo.value?.guestModeEnabled) - - return { serverInfo, isGuestMode } -} - -export function useFE2Messaging() { - const { serverInfo } = useServerInfo() - const fe2MessagingEnabled = computed( - () => serverInfo.value?.enableNewWebUiMessaging || false - ) - const migrationMovedTo = computed( - () => serverInfo.value?.migration?.movedTo || 'https://app.speckle.systems' - ) - return { fe2MessagingEnabled, migrationMovedTo } -} diff --git a/packages/frontend/src/main/lib/core/errors/composition.ts b/packages/frontend/src/main/lib/core/errors/composition.ts deleted file mode 100644 index 8e16a4994..000000000 --- a/packages/frontend/src/main/lib/core/errors/composition.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { BaseError } from '@/helpers/errorHelper' - -export class ComposableInvokedOutOfScopeError extends BaseError { - static defaultMessage = - 'getCurrentInstance() returned null. Method must be called at the top of a setup function' -} diff --git a/packages/frontend/src/main/lib/core/helpers/apolloSetupHelper.ts b/packages/frontend/src/main/lib/core/helpers/apolloSetupHelper.ts deleted file mode 100644 index d0bb81af5..000000000 --- a/packages/frontend/src/main/lib/core/helpers/apolloSetupHelper.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Optional } from '@/helpers/typeHelpers' -import { FieldMergeFunction } from '@apollo/client/core' - -interface AbstractCollection { - __typename: T - totalCount: number - cursor: string | null - items: Record[] -} - -/** - * Build an Apollo merge function for a field that returns a collection like AbstractCollection - * @param {{}} [param0] - * @param {boolean} [param0.checkIdentity] Set to false if you want to merge incoming items without checking - * for duplicates. Usually you don't want to do this as you can introduce duplicates this way. - * @param {string} [param0.identityProp] Optionally change the prop that should be used to compare - * equality between items - */ -export function buildAbstractCollectionMergeFunction( - typeName: T, - { checkIdentity = true, identityProp = '__ref' } = {} -): FieldMergeFunction>, AbstractCollection> { - return ( - existing: Optional>, - incoming: AbstractCollection - ) => { - const existingItems = existing?.items || [] - const incomingItems = incoming?.items || [] - - let finalItems: Record[] - if (checkIdentity) { - finalItems = [...existingItems] - for (const newItem of incomingItems) { - if ( - finalItems.findIndex( - (item) => item[identityProp] === newItem[identityProp] - ) === -1 - ) { - finalItems.push(newItem) - } - } - } else { - finalItems = [...existingItems, ...incomingItems] - } - - return { - __typename: incoming?.__typename || existing?.__typename || typeName, - totalCount: incoming.totalCount || 0, - cursor: incoming.cursor || null, - items: finalItems - } - } -} - -/** - * Merge function that just takes incoming data and overrides all of old data with it - * Useful for array fields w/o pagination, where a new array response is supposed to replace - * the entire old one - */ -export const incomingOverwritesExistingMergeFunction: FieldMergeFunction = ( - _existing: unknown, - incoming: unknown -) => incoming diff --git a/packages/frontend/src/main/lib/core/helpers/eventHubHelper.ts b/packages/frontend/src/main/lib/core/helpers/eventHubHelper.ts deleted file mode 100644 index 92a48ffea..000000000 --- a/packages/frontend/src/main/lib/core/helpers/eventHubHelper.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * EVENT BRIDGE/BUS EVENTS - */ - -export type ToastNotificationType = 'primary' | 'success' | 'error' - -export type NotificationEventPayload = { - text: string - action?: { name: string; to: string } - type?: ToastNotificationType -} - -/** - * Global app events - */ -export const GlobalEvents = Object.freeze({ - /** - * For emitting a global toast notification - */ - Notification: 'notification', - /** - * Emits 'true' when moving to a new route and 'false' once loading is done - */ - PageLoading: 'page-load' -}) - -/** - * Stream page events - */ -export const StreamEvents = Object.freeze({ - /** - * For triggering a refetch of main stream data - */ - Refetch: 'stream:refetch', - - /** - * For triggering a refetch of stream collaborator data - */ - RefetchCollaborators: 'stream:refetch:collaborators', - - /** - * For triggering a refetch of stream branch data - */ - RefetchBranches: 'stream:refetch:branches' -}) diff --git a/packages/frontend/src/main/lib/core/helpers/users.ts b/packages/frontend/src/main/lib/core/helpers/users.ts deleted file mode 100644 index 78f2f4ce8..000000000 --- a/packages/frontend/src/main/lib/core/helpers/users.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Nullable, Roles } from '@speckle/shared' - -export function isGuest(user?: Nullable<{ role?: Nullable }>) { - return user?.role === Roles.Server.Guest -} - -export function isAdmin(user?: Nullable<{ role?: Nullable }>) { - return user?.role === Roles.Server.Admin -} diff --git a/packages/frontend/src/main/lib/core/mixins/isLoggedInMixin.ts b/packages/frontend/src/main/lib/core/mixins/isLoggedInMixin.ts deleted file mode 100644 index b56bcb4b0..000000000 --- a/packages/frontend/src/main/lib/core/mixins/isLoggedInMixin.ts +++ /dev/null @@ -1,21 +0,0 @@ -import Vue from 'vue' -import { IsLoggedInDocument, IsLoggedInQuery } from '@/graphql/generated/graphql' -/** - * Mixin for checking if user is logged in through Apollo Client. Use the reactive 'isLoggedIn' data property - * to check if a user is logged in. - */ -export const IsLoggedInMixin = Vue.extend({ - data: () => ({ - /** - * Whether or not the user is currently logged in. Resolved through - * the `user` query. - */ - isLoggedIn: false - }), - apollo: { - isLoggedIn: { - query: IsLoggedInDocument, - update: (data: IsLoggedInQuery) => !!data.activeUser?.id - } - } -}) diff --git a/packages/frontend/src/main/lib/core/utils/appErrorStateManager.ts b/packages/frontend/src/main/lib/core/utils/appErrorStateManager.ts deleted file mode 100644 index 2b4364bde..000000000 --- a/packages/frontend/src/main/lib/core/utils/appErrorStateManager.ts +++ /dev/null @@ -1,25 +0,0 @@ -import * as Observability from '@speckle/shared/dist/esm/observability/index' -import Vue from 'vue' - -const ENTER_STATE_AT_ERRORS_PER_MIN = 100 - -const state = Vue.observable({ - inErrorState: false -}) - -const errorRpm = Observability.simpleRpmCounter() - -export function isErrorState() { - return !!state.inErrorState -} - -export function registerError() { - const epm = errorRpm.hit() - - if (!isErrorState() && epm >= ENTER_STATE_AT_ERRORS_PER_MIN) { - console.error( - `Too many errors (${epm} errors per minute), entering app error state!` - ) - state.inErrorState = true - } -} diff --git a/packages/frontend/src/main/lib/feed/helpers/activityStream.ts b/packages/frontend/src/main/lib/feed/helpers/activityStream.ts deleted file mode 100644 index e5bed2530..000000000 --- a/packages/frontend/src/main/lib/feed/helpers/activityStream.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Activity stream item action types that shouldn't be displayed in the FE - */ -export const SKIPPABLE_ACTION_TYPES = [ - 'stream_invite_sent', - 'stream_invite_declined', - 'stream_access_request_sent', - 'stream_access_request_declined' -] - -export const STREAM_CREATED_TYPES = ['stream_create', 'stream_clone'] diff --git a/packages/frontend/src/main/lib/stream/composables/branches.ts b/packages/frontend/src/main/lib/stream/composables/branches.ts deleted file mode 100644 index 2fd106e78..000000000 --- a/packages/frontend/src/main/lib/stream/composables/branches.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { ref, Ref } from 'vue' -import { computed } from 'vue' - -import { useQuery, useQueryLoading } from '@vue/apollo-composable' -import { StreamAllBranchesDocument } from '@/graphql/generated/graphql' -import { Nullable } from '@speckle/shared' - -export function useAllStreamBranches(streamId: Ref) { - const { - result: branchesResult, - fetchMore: branchesFetchMore, - refetch: refetchBranches, - onResult - } = useQuery( - StreamAllBranchesDocument, - () => ({ streamId: streamId.value, cursor: null as Nullable }), - { fetchPolicy: 'no-cache' } - ) - - const localBranches = computed( - () => branchesResult.value?.stream?.branches?.items || [] - ) - - const totalBranchCount = computed( - () => branchesResult.value?.stream?.branches?.totalCount || 0 - ) - - const branchesLoading = useQueryLoading() - - // Keep fetching until no more branches found - const currentCursor = ref(null as Nullable) - onResult((res) => { - if (res.errors?.length) return - - const newCursor = res.data?.stream?.branches?.cursor || null - const newItems = res.data?.stream?.branches?.items || [] - - if (newItems.length && newCursor && newCursor !== currentCursor.value) { - currentCursor.value = newCursor - branchesFetchMore({ - variables: { cursor: newCursor } - }) - } - }) - - const refetchBranchesWrapper: typeof refetchBranches = (...args) => { - currentCursor.value = null - return refetchBranches(...args) - } - - return { - localBranches, - refetchBranches: refetchBranchesWrapper, - totalBranchCount, - branchesLoading - } -} diff --git a/packages/frontend/src/main/lib/stream/composables/commitMultiActions.ts b/packages/frontend/src/main/lib/stream/composables/commitMultiActions.ts deleted file mode 100644 index 29783f145..000000000 --- a/packages/frontend/src/main/lib/stream/composables/commitMultiActions.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { SetupProps } from '@/helpers/typeHelpers' -import { BatchActionType } from '@/main/lib/stream/services/commitMultiActions' -import { ref, computed, SetupContext } from 'vue' - -export { BatchActionType } - -/** - * Composable for setting up commit multi-select & actions like delete, move etc. - */ -export function useCommitMultiActions() { - const selectedCommitsState = ref({} as Record) - const selectedCommitIds = computed(() => { - const results: string[] = [] - for (const [key, val] of Object.entries(selectedCommitsState.value)) { - if (val) results.push(key) - } - - return results - }) - - const clearSelectedCommits = () => { - selectedCommitsState.value = {} - } - - const hasSelectedCommits = computed(() => selectedCommitIds.value.length > 0) - - return { - /** - * Selected commit IDs (read-only) - */ - selectedCommitIds, - /** - * Object with selected commit keys and bool values - */ - selectedCommitsState, - /** - * Whether there are any selected commit ids - */ - hasSelectedCommits, - /** - * Clear selected commits - */ - clearSelectedCommits - } -} - -/** - * Use inside a component that represents a commit that can be selected (e.g. for batch actions) - */ -export function useSelectableCommit( - props: SetupProps<{ - selectable: boolean - selectDisabled: boolean - selected: boolean - }>, - ctx: SetupContext -) { - const canBeSelected = computed(() => props.selectable && !props.selectDisabled) - - const selectedState = computed({ - get: () => (canBeSelected.value ? props.selected : false), - set: (newVal) => ctx.emit('update:selected', canBeSelected.value ? !!newVal : false) - }) - const highlighted = computed(() => selectedState.value) - const onSelect = () => ctx.emit('select', { value: selectedState.value }) - - return { - highlighted, - onSelect, - selectedState - } -} diff --git a/packages/frontend/src/main/lib/stream/helpers/branches.ts b/packages/frontend/src/main/lib/stream/helpers/branches.ts deleted file mode 100644 index 15f1da673..000000000 --- a/packages/frontend/src/main/lib/stream/helpers/branches.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const formatBranchNameForURL = (branchName: string) => - encodeURIComponent(branchName || '') diff --git a/packages/frontend/src/main/lib/stream/mixins/streamInviteMixin.ts b/packages/frontend/src/main/lib/stream/mixins/streamInviteMixin.ts deleted file mode 100644 index ae31a1861..000000000 --- a/packages/frontend/src/main/lib/stream/mixins/streamInviteMixin.ts +++ /dev/null @@ -1,180 +0,0 @@ -import { - StreamInviteQuery, - StreamInviteDocument, - UserStreamInvitesQuery, - UserStreamInvitesDocument, - UseStreamInviteDocument -} from '@/graphql/generated/graphql' -import { MaybeFalsy, Nullable, vueWithMixins } from '@/helpers/typeHelpers' -import { convertThrowIntoFetchResult } from '@/main/lib/common/apollo/helpers/apolloOperationHelper' -import { StreamEvents } from '@/main/lib/core/helpers/eventHubHelper' -import { IsLoggedInMixin } from '@/main/lib/core/mixins/isLoggedInMixin' -import type { Get } from 'type-fest' -import { PropType } from 'vue' - -export type StreamInviteType = NonNullable> - -/** - * Mixin for getting the invite to the current stream, if any, and accepting/declining it - * - * Extends isLoggedInMixin, so you have access to that as well - */ -export const UsersStreamInviteMixin = vueWithMixins(IsLoggedInMixin).extend({ - props: { - streamInvite: { - type: Object as PropType, - required: true - }, - inviteToken: { - type: String as PropType>, - default: null - }, - autoAccept: { - type: Boolean, - default: false - } - }, - data: () => ({ - streamInviteClosed: false - }), - computed: { - streamId(): string { - return this.streamInvite.streamId - }, - inviteId(): string { - return this.streamInvite.inviteId - }, - token(): Nullable { - return this.streamInvite.token || this.inviteToken || null - }, - streamInviter(): NonNullable> { - return this.streamInvite.invitedBy - }, - hasInvite(): boolean { - return !!(this.streamInvite && !this.streamInviteClosed) - }, - streamName(): string { - return this.streamInvite.streamName - }, - linkToStream(): string { - return `/streams/${this.streamId}` - } - }, - methods: { - acceptInvite() { - return this.processInvite(true) - }, - declineInvite() { - return this.processInvite(false) - }, - rememberInviteAndRedirectToLogin() { - this.$loginAndSetRedirect() - }, - async processInvite(accept: boolean) { - if (!this.token) return - - const { data, errors } = await this.$apollo - .mutate({ - mutation: UseStreamInviteDocument, - variables: { - accept, - streamId: this.streamId, - token: this.token - }, - update: (cache, { data }) => { - if (!data?.streamInviteUse) return - - // It's weird that i'm emitting from inside the update handler, but if I invoke the emit - // at the bottom of `processInvite()`, the event won't be fired because of a race condition - // between the cache updates below and the queries that rely on the cached invites in the parent - // component. Basically - I have to do it this way or the event won't be handled - this.$emit('invite-used', { accept }) - - // Remove invite from various cached queries we might have - // 1. Single stream invite query - const singleStreamInviteCacheFilter = { - query: StreamInviteDocument, - variables: { streamId: this.streamId, token: this.token } - } - let singleStreamInviteQueryData: MaybeFalsy = undefined - try { - singleStreamInviteQueryData = cache.readQuery( - singleStreamInviteCacheFilter - ) - } catch (err) { - // suppressed - } - - if (singleStreamInviteQueryData?.streamInvite) { - cache.writeQuery({ - ...singleStreamInviteCacheFilter, - data: { - streamInvite: null - }, - overwrite: true - }) - } - - // 2. All user's stream invites query - let allUsersStreamInvitesQueryData: MaybeFalsy = - undefined - try { - allUsersStreamInvitesQueryData = cache.readQuery({ - query: UserStreamInvitesDocument - }) - } catch (err) { - // suppressed - } - - if (allUsersStreamInvitesQueryData?.streamInvites) { - const removableInviteIdx = - allUsersStreamInvitesQueryData.streamInvites.findIndex( - (i) => i.inviteId === this.inviteId - ) - if (removableInviteIdx !== -1) { - const newInvites = allUsersStreamInvitesQueryData.streamInvites.slice() - newInvites.splice(removableInviteIdx, 1) - - cache.writeQuery({ - query: UserStreamInvitesDocument, - data: { - ...allUsersStreamInvitesQueryData, - streamInvites: newInvites - }, - overwrite: true - }) - } - } - } - }) - .catch(convertThrowIntoFetchResult) - - if (data?.streamInviteUse) { - this.$triggerNotification({ - text: accept - ? "You've been successfully added as a stream contributor!" - : "You've declined the invite", - type: accept ? 'success' : 'primary' - }) - - // Refetch stream operations, if accepted - if (accept) { - this.$eventHub.$emit(StreamEvents.Refetch) - } - - this.streamInviteClosed = true - } else { - const errMsg = errors?.[0].message || 'An unexpected issue occurred!' - this.$triggerNotification({ - text: errMsg, - type: 'error' - }) - } - } - }, - mounted() { - if (this.autoAccept) { - this.acceptInvite() - } - } -}) diff --git a/packages/frontend/src/main/lib/stream/services/commitMultiActions.ts b/packages/frontend/src/main/lib/stream/services/commitMultiActions.ts deleted file mode 100644 index 85a7604d7..000000000 --- a/packages/frontend/src/main/lib/stream/services/commitMultiActions.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { ApolloCache, Modifier, Reference } from '@apollo/client/cache' - -export const disabledCheckboxMessage = - "To select this commit you must be its or its stream's owner" - -export enum BatchActionType { - Move = 'move', - Delete = 'delete' -} - -export function deleteCommitsFromCachedCommitsQuery( - cache: ApolloCache, - parentObjectCacheId: string, - commitIds: string[] -) { - cache.modify({ - id: parentObjectCacheId, - fields: { - commits: (( - oldCommits: - | { - totalCount: number - items: Array<{ __ref: string }> - } - | Reference, - { isReference } - ) => { - if (isReference(oldCommits)) return oldCommits - - const newTotalCount = Math.max(oldCommits.totalCount - commitIds.length, 0) - - // old items don't hold the ID prop, but a __ref prop like this 'Commit:XXXXX' - const newItems = oldCommits.items.filter( - (c) => !commitIds.includes(c.__ref.split(':')[1]) - ) - - return { - ...oldCommits, - totalCount: newTotalCount, - items: newItems - } - }) as Modifier< - { totalCount: number; items: Array<{ __ref: string }> } | Reference - > - } - }) -} diff --git a/packages/frontend/src/main/lib/viewer/comments/commentsHelper.ts b/packages/frontend/src/main/lib/viewer/comments/commentsHelper.ts deleted file mode 100644 index 9e3487d20..000000000 --- a/packages/frontend/src/main/lib/viewer/comments/commentsHelper.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { UploadFileItem } from '@/main/lib/common/file-upload/fileUploadHelper' -import { SmartTextEditorSchemaOptions } from '@/main/lib/common/text-editor/documentHelper' -import { JSONContent } from '@tiptap/core' - -/** - * Time used for throttling viewer/window resize/etc. updates that trigger comment bubble/thread absolute repositioning - */ -export const VIEWER_UPDATE_THROTTLE_TIME = 50 - -export const SMART_EDITOR_SCHEMA: SmartTextEditorSchemaOptions = { - multiLine: false -} - -export type CommentEditorValue = { - doc: JSONContent - attachments: UploadFileItem[] -} diff --git a/packages/frontend/src/main/lib/viewer/commit-object-viewer/composables/embed.ts b/packages/frontend/src/main/lib/viewer/commit-object-viewer/composables/embed.ts deleted file mode 100644 index 2e2ccff7d..000000000 --- a/packages/frontend/src/main/lib/viewer/commit-object-viewer/composables/embed.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { useRoute } from '@/main/lib/core/composables/router' -import { - buildEmbedUrl, - EmbedParams, - wrapUrlInIFrame -} from '@/main/lib/viewer/commit-object-viewer/services/embed' -import { computed, ref, ComputedRef, unref } from 'vue' - -/** - * Get embed viewer query params - */ -export function useEmbedViewerQuery() { - const route = useRoute() - - /** - * Main url params - */ - const streamId = computed(() => (route.query.stream as string) || null) - const branchName = computed(() => (route.query.branch as string) || null) - const commitId = computed(() => (route.query.commit as string) || null) - const objectId = computed(() => (route.query.object as string) || null) - - /** - * Embed options - */ - const transparent = computed(() => route.query.transparent === 'true') - const autoload = computed(() => route.query.autoload === 'true') - const hideControls = computed(() => route.query.hidecontrols === 'true') - const noScroll = computed(() => route.query.noscroll === 'true') - const hideSidebar = computed(() => route.query.hidesidebar === 'true') - const hideSelectionInfo = computed(() => route.query.hideselectioninfo === 'true') - const hideLogo = computed(() => route.query.ilovespeckleanyway === 'true') - const commentSlideShow = computed(() => route.query.commentslideshow === 'true') - - return { - streamId, - branchName, - commitId, - objectId, - transparent, - autoload, - noScroll, - hideControls, - hideSidebar, - hideSelectionInfo, - hideLogo, - commentSlideShow - } -} - -/** - * Configure a viewer embed URL - */ -export function useEmbedViewerUrlManager(params: { - embedParams: ComputedRef -}) { - const { embedParams } = params - - const transparent = ref(false) - const autoload = ref(false) - const hideControls = ref(false) - const noScroll = ref(false) - const hideSidebar = ref(false) - const hideSelectionInfo = ref(false) - const hideLogo = ref(false) - const commentSlideshow = ref(false) - const options = { - transparent, - autoload, - hideControls, - noScroll, - hideSidebar, - hideSelectionInfo, - hideLogo, - commentSlideshow - } - - const url = computed(() => - buildEmbedUrl(unref(embedParams), { - transparent: transparent.value, - autoload: autoload.value, - hideControls: hideControls.value, - noScroll: noScroll.value, - hideSidebar: hideSidebar.value, - hideSelectionInfo: hideSelectionInfo.value, - hideLogo: hideLogo.value, - commentSlideshow: commentSlideshow.value - }) - ) - - const iFrameUrl = computed(() => wrapUrlInIFrame(url.value)) - - const resetOptions = () => { - for (const optionRef of Object.values(options)) { - optionRef.value = false - } - } - - return { - options: { - transparent, - autoload, - hideControls, - noScroll, - hideSidebar, - hideSelectionInfo, - hideLogo, - commentSlideshow - }, - url, - iFrameUrl, - resetOptions - } -} diff --git a/packages/frontend/src/main/lib/viewer/commit-object-viewer/services/embed.ts b/packages/frontend/src/main/lib/viewer/commit-object-viewer/services/embed.ts deleted file mode 100644 index 918bd4cef..000000000 --- a/packages/frontend/src/main/lib/viewer/commit-object-viewer/services/embed.ts +++ /dev/null @@ -1,157 +0,0 @@ -export type ViewerOptions = { - /** - * Extra objects to overlay on top of the base model - */ - overlay: string - /** - * Camera position - */ - c: string - /** - * Serialized viewer filters - */ - filter: string -} - -export type EmbedParams = Partial & { - /** - * The stream being embedded (required) - */ - streamId: string - - /** - * Stream branch to embed - */ - branchName?: string - - /** - * Stream object to embed - */ - objectId?: string - - /** - * Stream commit to embed - */ - commitId?: string -} - -export type EmbedOptions = { - /** - * Whether the BG of the embed should be transparent - */ - transparent: boolean - - /** - * Whether to eager-load the embed - */ - autoload: boolean - - /** - * Whether to hide viewer controls - */ - hideControls: boolean - - /** - * Whether to prevent scrolling (zooming) - */ - noScroll: boolean - - /** - * Whether to hide sidebar (filters, views, etc.) - */ - hideSidebar: boolean - - /** - * Whether to hide object selection info - */ - hideSelectionInfo: boolean - - /** - * Whether to hide the Speckle logo - */ - hideLogo: boolean - - /** - * Enable comment slideshow mode, where the browser auto-expands the 1st comment and subsequent - * comments can be easily reached by clicking arrow buttons - */ - commentSlideshow: boolean -} - -/** - * Build an embed URL - */ -export function buildEmbedUrl( - params: EmbedParams, - options?: Partial -): string { - const { streamId, branchName, objectId, commitId, overlay, c, filter } = params - const { - transparent, - autoload, - hideControls, - noScroll, - hideSidebar, - hideSelectionInfo, - hideLogo, - commentSlideshow - } = options || {} - - const baseUrl = new URL('/embed', window.location.origin) - - const queryParams = new URLSearchParams() - queryParams.set('stream', streamId) - - // Add main identifier params - if (objectId) { - queryParams.set('object', objectId) - } else if (commitId) { - queryParams.set('commit', commitId) - } else if (branchName) { - queryParams.set('branch', branchName) - } - - // Add viewer options - if (overlay) { - queryParams.set('overlay', overlay) - } - if (c) { - queryParams.set('c', c) - } - if (filter) { - queryParams.set('filter', filter) - } - - // Add embed options - if (transparent) { - queryParams.set('transparent', 'true') - } - if (autoload) { - queryParams.set('autoload', 'true') - } - if (hideControls) { - queryParams.set('hidecontrols', 'true') - } - if (noScroll) { - queryParams.set('noscroll', 'true') - } - if (hideSidebar) { - queryParams.set('hidesidebar', 'true') - } - if (hideSelectionInfo) { - queryParams.set('hideselectioninfo', 'true') - } - if (hideLogo) { - queryParams.set('ilovespeckleanyway', 'true') - } - if (commentSlideshow) { - queryParams.set('commentslideshow', 'true') - } - - baseUrl.search = queryParams.toString() - return baseUrl.toString() -} - -export function wrapUrlInIFrame(url: string) { - return `` -} diff --git a/packages/frontend/src/main/lib/viewer/commit-object-viewer/stateManager.ts b/packages/frontend/src/main/lib/viewer/commit-object-viewer/stateManager.ts deleted file mode 100644 index 2c12f2e1b..000000000 --- a/packages/frontend/src/main/lib/viewer/commit-object-viewer/stateManager.ts +++ /dev/null @@ -1,516 +0,0 @@ -// NOTE: any disabling temporary, most of the filtering stuff will go away - -import { Nullable } from '@/helpers/typeHelpers' -import { setupNewViewerInjection } from '@/main/lib/viewer/core/composables/viewer' -import { - DefaultViewerParams, - Viewer, - SelectionEvent, - PropertyInfo, - NumericPropertyInfo -} from '@speckle/viewer' -import { cloneDeep } from 'lodash' -import { computed, ComputedRef, inject, InjectionKey, provide, Ref } from 'vue' -import { - commitObjectViewerState, - StateType -} from '@/main/lib/viewer/commit-object-viewer/stateManagerCore' - -const ViewerStreamIdKey: InjectionKey> = Symbol( - 'COMMIT_OBJECT_VIEWER_STREAMID' -) -const ViewerResourceIdKey: InjectionKey> = Symbol( - 'COMMIT_OBJECT_VIEWER_RESOURCEID' -) -const ViewerIsEmbedKey: InjectionKey> = Symbol( - 'COMMIT_OBJECT_VIEWER_IS_EMBED' -) - -type UnknownObject = Record - -type GlobalViewerData = { - viewer: Viewer - container: HTMLElement - initialized: Promise -} - -/** - * Global CommitObjectViewer viewer instance & container. It's not held in commitObjectViewerState, because it's a - * complex object that keeps mutating itself (triggering Apollo Client errors) - */ -let globalViewerData: Nullable = null - -export type LocalFilterState = { - hiddenIds?: string[] - isolatedIds?: string[] - propertyInfoKey?: string - passMin?: number | null - passMax?: number | null - sectionBox?: number[] -} - -/** - * Get current global Commit Object Viewer instance or create one - */ -function getOrInitViewerData(): GlobalViewerData { - if (globalViewerData) return globalViewerData - - const container = document.createElement('div') - container.id = 'renderer' - container.className = 'viewer-container' - container.style.display = 'inline-block' - - const viewer = new Viewer(container, DefaultViewerParams) - const initPromise = viewer.init() - - globalViewerData = { - viewer, - container, - initialized: initPromise - } - - return globalViewerData -} - -function getInitializedViewer(): Viewer { - if (!globalViewerData?.viewer) { - throw new Error('Attempting to access viewer before it has been initialized') - } - - return globalViewerData.viewer -} - -/** - * Composable that returns the global Commit Object Viewer instance and injects it into child components - */ -export function setupCommitObjectViewer(reactiveMainProps: { - streamId: Ref - resourceId: Ref - isEmbed: Ref -}) { - const { streamId, resourceId, isEmbed } = reactiveMainProps - - // Set up and inject viewer - const viewerData = getOrInitViewerData() - const { viewer, container, isInitialized, isInitializedPromise } = - setupNewViewerInjection({ - viewer: viewerData.viewer, - container: viewerData.container, - initPromise: viewerData.initialized - }) - - // Inject main parameters into child components - provide(ViewerStreamIdKey, streamId) - provide(ViewerResourceIdKey, resourceId) - provide(ViewerIsEmbedKey, isEmbed) - - return { viewer, container, isInitialized, isInitializedPromise } -} - -/** - * Inject the Commit Object Viewer instance's main parameters - */ -export function useCommitObjectViewerParams() { - const injectedStreamId = inject(ViewerStreamIdKey) - const injectedResourceId = inject(ViewerResourceIdKey) - const injectedIsEmbed = inject(ViewerIsEmbedKey) - - const buildSafeRef = (ref: Ref | undefined): ComputedRef => - computed(() => { - if (!ref) { - throw new Error( - "Couldn't resolve Commit Object Viewer injected state! Is it properly set up??" - ) - } - - return ref.value - }) - - const streamId = buildSafeRef(injectedStreamId) - const resourceId = buildSafeRef(injectedResourceId) - const isEmbed = buildSafeRef(injectedIsEmbed) - - return { streamId, resourceId, isEmbed } -} - -/* - * STATE MODIFICATION FUNCTIONS: - */ - -function updateState(newValues: Partial) { - commitObjectViewerState({ - ...commitObjectViewerState(), - ...newValues - }) -} - -export function setIsViewerBusy(isBusy: boolean) { - updateState({ viewerBusy: isBusy }) -} - -export function setIsAddingComment(isAddingComment: boolean) { - updateState({ addingComment: isAddingComment }) -} - -/** - * Note: We should not set the entire comment here, because we mutate comments in multiple places - * and that would cause a cache mutation - */ -export function setSelectedCommentMetaData( - comment: { id: number; data: { location: Record } } | null -) { - updateState({ - selectedCommentMetaData: comment - ? { - id: comment.id, - // deep cloning to avoid cache mutation - selectionLocation: comment.data.location - ? cloneDeep(comment.data.location) - : {} - } - : null - }) -} - -export function setPreventCommentCollapse(shouldPrevent: boolean) { - updateState({ - preventCommentCollapse: shouldPrevent - }) -} - -// VIEWER - -/** - * - * @returns A bare minimum filtering state object for storing with comments or plopping in the url. - */ -export function getLocalFilterState(): LocalFilterState { - const state = { ...commitObjectViewerState() } - const fs = {} as LocalFilterState - fs.hiddenIds = state.currentFilterState?.hiddenObjects - fs.isolatedIds = state.currentFilterState?.isolatedObjects - fs.propertyInfoKey = state.currentFilterState?.activePropFilterKey - fs.passMax = state.currentFilterState?.passMax - fs.passMin = state.currentFilterState?.passMin - const box = getInitializedViewer().getCurrentSectionBox() - if (box) { - fs.sectionBox = [ - +box.min.x.toFixed(2), - +box.min.y.toFixed(2), - +box.min.z.toFixed(2), - +box.max.x.toFixed(2), - +box.max.y.toFixed(2), - +box.max.z.toFixed(2) - ] - } - return fs -} - -export function setSectionBox( - box?: { - min: { x: number; y: number; z: number } - max: { x: number; y: number; z: number } - }, - offset?: number -) { - getInitializedViewer().setSectionBox(box, offset) -} - -export function setSectionBoxFromObjects(objectIds: string[], offset?: number) { - getInitializedViewer().setSectionBoxFromObjects(objectIds, offset) -} - -export function toggleSectionBox() { - getInitializedViewer().toggleSectionBox() - updateState({ sectionBox: getInitializedViewer().getCurrentSectionBox() !== null }) -} - -export function sectionBoxOff() { - getInitializedViewer().sectionBoxOff() - updateState({ sectionBox: false }) -} - -export function sectionBoxOn() { - getInitializedViewer().sectionBoxOn() - updateState({ sectionBox: true }) -} - -export function loadObjectProperties() { - setIsViewerBusy(true) - const props = getInitializedViewer().getObjectProperties(undefined, true) - setIsViewerBusy(false) - updateState({ objectProperties: props }) -} - -export async function handleViewerSelection(selectionInfo: SelectionEvent) { - const state = { ...commitObjectViewerState() } - const firstVisibleHit = selectionInfo - ? getFirstVisibleSelectionHit(selectionInfo) - : null - - if (!selectionInfo || !firstVisibleHit) { - updateState({ selectedObjects: [] }) - await getInitializedViewer().resetSelection() - return - } - - if (selectionInfo.multiple) { - if (!state.selectedObjects.includes(firstVisibleHit.object)) - state.selectedObjects = [...state.selectedObjects, firstVisibleHit.object] - } else { - state.selectedObjects = [firstVisibleHit.object] - } - - getInitializedViewer().selectObjects( - state.selectedObjects.map((o) => o.id) as string[] - ) - updateState(state) -} - -export async function handleViewerDoubleClick(selectionInfo: SelectionEvent) { - if (!selectionInfo) { - await getInitializedViewer().zoom() - return - } - - const firstVisibleHit = getFirstVisibleSelectionHit(selectionInfo) - if (!firstVisibleHit) return - - await getInitializedViewer().zoom([firstVisibleHit.object.id]) -} - -function getFirstVisibleSelectionHit({ hits }: SelectionEvent) { - const { currentFilterState } = { ...commitObjectViewerState() } - const hasHiddenObjects = - !!currentFilterState?.hiddenObjects && - currentFilterState?.hiddenObjects.length !== 0 - const hasIsolatedObjects = - !!currentFilterState?.isolatedObjects && - currentFilterState?.isolatedObjects.length !== 0 - - for (const hit of hits) { - if (hasHiddenObjects) { - if (!currentFilterState?.hiddenObjects?.includes(hit.object.id)) { - return hit - } - } else if (hasIsolatedObjects) { - if (currentFilterState.isolatedObjects?.includes(hit.object.id)) return hit - } else { - return hit - } - } - return null -} - -export async function clearSelectionDisplay() { - await getInitializedViewer().resetSelection() -} - -export async function resetSelection() { - updateState({ selectedObjects: [] }) - await getInitializedViewer().resetSelection() -} - -export async function highlightObjects(objectIds: string[], ghost = false) { - await getInitializedViewer().highlightObjects(objectIds, ghost) -} - -export async function removeHighlights() { - await getInitializedViewer().resetHighlight() -} - -// FILTERING NEW - -export async function isolateObjects( - objectIds: string[], - stateKey: string, - includeDescendants = false -) { - setIsViewerBusy(true) - const result = await getInitializedViewer().isolateObjects( - objectIds, - stateKey, - includeDescendants - ) - updateState({ currentFilterState: result }) - setIsViewerBusy(false) -} - -export async function unIsolateObjects( - objectIds: string[], - stateKey: string, - includeDescendants = false -) { - setIsViewerBusy(true) - const result = await getInitializedViewer().unIsolateObjects( - objectIds, - stateKey, - includeDescendants - ) - updateState({ currentFilterState: result }) - setIsViewerBusy(false) -} - -export async function hideObjects( - objectIds: string[], - stateKey: string, - includeDescendants = false -) { - setIsViewerBusy(true) - const result = await getInitializedViewer().hideObjects( - objectIds, - stateKey, - includeDescendants - ) - updateState({ currentFilterState: result }) - setIsViewerBusy(false) -} - -export async function showObjects( - objectIds: string[], - stateKey: string, - includeDescendants = false -) { - setIsViewerBusy(true) - const result = await getInitializedViewer().showObjects( - objectIds, - stateKey, - includeDescendants - ) - updateState({ currentFilterState: result }) - setIsViewerBusy(false) -} - -export async function setColorFilter(property: PropertyInfo) { - setIsViewerBusy(true) - const result = await getInitializedViewer().setColorFilter(property) - updateState({ currentFilterState: result, localFilterPropKey: property.key }) - setIsViewerBusy(false) -} - -// FILTERING OLD - -type FilterByValue = - | { - gte: number - lte: number - } - | string[] - | { not: string[] } - -export type Filter = { - filterBy?: { - __parents?: { - includes?: string[] - excludes?: string[] - } - } & { - [by: string]: FilterByValue - } - colorBy?: { - type: string - property: string - } - ghostOthers?: boolean -} - -function isLegacyFilter(obj: UnknownObject) { - const keys = Object.keys(obj) - return ( - keys.includes('filterBy') || - keys.includes('colorBy') || - keys.includes('ghostOhters') - ) -} - -export async function setFilterDirectly(params: { filter: Filter | LocalFilterState }) { - await resetFilter() - - // Minimal support for legacy filters (old viewer filtering api) - if (isLegacyFilter(params.filter)) { - console.warn('Legacy filter type detected. Things might not appear as expected.') - const legacyFilter = params.filter as Filter - if (legacyFilter.colorBy) { - const { objectProperties } = { ...commitObjectViewerState() } - const prop = { - ...objectProperties.find((p) => p.key === legacyFilter.colorBy?.property) - } as PropertyInfo - - if (!prop) return - if ((legacyFilter.colorBy as Record).maxValue) { - ;(prop as NumericPropertyInfo).passMax = ( - legacyFilter.colorBy as Record - ).maxValue as number - } - - if ((legacyFilter.colorBy as Record).minValue) { - ;(prop as NumericPropertyInfo).passMin = ( - legacyFilter.colorBy as Record - ).minValue as number - } - - if (prop) { - setColorFilter(prop) - return - } - } - - if (legacyFilter.filterBy?.__parents?.includes) { - isolateObjects(legacyFilter.filterBy?.__parents?.includes, 'setfilter-direct') - } - - if (legacyFilter.filterBy?.__parents?.excludes) { - hideObjects(legacyFilter.filterBy?.__parents?.excludes, 'setfilter-direct') - } - - return - } - - // Current filters - const lfs = params.filter as LocalFilterState - - if (lfs.hiddenIds) { - hideObjects(lfs.hiddenIds, 'setfilter-direct', false) - } - if (lfs.isolatedIds) { - isolateObjects(lfs.isolatedIds, 'setfilter-direct', false) - } - if (lfs.propertyInfoKey) { - const { objectProperties } = { ...commitObjectViewerState() } - const prop = { ...objectProperties.find((p) => p.key === lfs.propertyInfoKey) } - - if (lfs.passMax) { - ;(prop as NumericPropertyInfo).passMax = lfs.passMax - } - if (lfs.passMin) { - ;(prop as NumericPropertyInfo).passMin = lfs.passMin - } - - if (prop) { - setColorFilter(prop as NumericPropertyInfo) - // TODO: set active filter key or something - } else console.warn(`${lfs.propertyInfoKey} property not found.`) - } - - if (lfs.sectionBox) { - const box = { - min: { x: lfs.sectionBox[0], y: lfs.sectionBox[1], z: lfs.sectionBox[2] }, - max: { x: lfs.sectionBox[3], y: lfs.sectionBox[4], z: lfs.sectionBox[5] } - } - setSectionBox(box) - sectionBoxOn() - } -} - -export async function resetFilter() { - const viewer = getInitializedViewer() - - updateState({ - preventCommentCollapse: true, - currentFilterState: null, - localFilterPropKey: null - }) - - await viewer.resetFilters() - viewer.applyFilter(null) -} diff --git a/packages/frontend/src/main/lib/viewer/commit-object-viewer/stateManagerCore.ts b/packages/frontend/src/main/lib/viewer/commit-object-viewer/stateManagerCore.ts deleted file mode 100644 index e52606b24..000000000 --- a/packages/frontend/src/main/lib/viewer/commit-object-viewer/stateManagerCore.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { GetReactiveVarType, Nullable } from '@/helpers/typeHelpers' -import { makeVar, TypePolicies } from '@apollo/client/cache' -import type { PropertyInfo, FilteringState } from '@speckle/viewer' -import emojis from '@/main/store/emojis' - -/** - * Actual state from state manager. Extracted here to ensure that we don't bundle the full viewer & three.js - * on every page just to initialize the state. - * - * BE VERY CAREFUL AND KEEP THIS MODULE LIGHTWEIGHT. IMPORTING TYPES FROM VIEWER/THREE IS FINE AS LONG - * AS YOU USE `import type {...}`. - */ - -type UnknownObject = Record - -/** - * Queryable Apollo Client state. - * - * Do not use directly! Use GQL queries to read and stateManager.ts mutators to mutate. - */ -export const commitObjectViewerState = makeVar({ - viewerBusy: false, - selectedCommentMetaData: null as Nullable<{ - id: number - selectionLocation: Record - }>, - addingComment: false, - preventCommentCollapse: false, - commentReactions: ['❤️', '✏️', '🔥', '⚠️'], - emojis, - // New viewer & filter vars - currentFilterState: null as Nullable, - selectedObjects: [] as UnknownObject[], - objectProperties: [] as PropertyInfo[], - localFilterPropKey: null as Nullable, - sectionBox: false -}) - -export type StateType = GetReactiveVarType - -/** - * Merge (through _.merge) these with the rest of your Apollo Client `typePolicies` to set up - * commit object viewer state management - */ -export const statePolicies: TypePolicies = { - Query: { - fields: { - commitObjectViewerState: { - read() { - return commitObjectViewerState() - } - } - } - } -} diff --git a/packages/frontend/src/main/lib/viewer/core/composables/viewer.ts b/packages/frontend/src/main/lib/viewer/core/composables/viewer.ts deleted file mode 100644 index 9c58f0d77..000000000 --- a/packages/frontend/src/main/lib/viewer/core/composables/viewer.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Viewer } from '@speckle/viewer' -import { inject, InjectionKey, Ref, ref, provide } from 'vue' - -// Keys you can use in the Viewer family of components to inject the viewer, its container and its init state -export const ViewerKey: InjectionKey = Symbol('VIEWER_INSTANCE') -export const ViewerInitializedKey: InjectionKey> = Symbol( - 'VIEWER_INSTANCE_INITIALIZED' -) -export const ViewerInitializedPromiseKey: InjectionKey> = Symbol( - 'VIEWER_INSTANCE_INITIALIZED_PROMISE' -) -export const ViewerContainerKey: InjectionKey = Symbol('VIEWER_CONTAINER') - -/** - * Inject viewer instance (it should be provided in an ancestor component using setupViewerInjection()) - */ -export function useInjectedViewer() { - // force casting, cause we know for a fact that these injections won't be undefined - handling the "or undefined" check everywhere - // is going to be a pain in the ass - const viewer = inject(ViewerKey) as Viewer - const container = inject(ViewerContainerKey) as HTMLElement - const isInitialized = inject(ViewerInitializedKey) as Ref - const isInitializedPromise = inject(ViewerInitializedPromiseKey) as Promise - - return { viewer, container, isInitialized, isInitializedPromise } -} - -/** - * Pass in a newly created Viewer instance and its container for injection down into child components - * (through useInjectedViewer() or the injection keys manually). - */ -export function setupNewViewerInjection(params: { - viewer: Viewer - container: HTMLElement - initPromise: Promise -}) { - const viewer = params.viewer - const container = params.container - const isInitialized = ref(false) - const isInitializedPromise = params.initPromise.then( - () => (isInitialized.value = true) - ) - - provide(ViewerKey, viewer) - provide(ViewerContainerKey, container) - provide(ViewerInitializedKey, isInitialized) - provide(ViewerInitializedPromiseKey, isInitializedPromise) - - return { viewer, container, isInitialized, isInitializedPromise } -} diff --git a/packages/frontend/src/main/lib/viewer/core/helpers/cameraHelper.ts b/packages/frontend/src/main/lib/viewer/core/helpers/cameraHelper.ts deleted file mode 100644 index f54e6acfc..000000000 --- a/packages/frontend/src/main/lib/viewer/core/helpers/cameraHelper.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Vector3 } from 'three' -import { Viewer } from '@speckle/viewer' -import { get } from 'lodash' - -export function getCamArray(viewer: Viewer) { - const controls = viewer.cameraHandler.activeCam.controls - const pos = controls.getPosition(new Vector3()) - const target = controls.getTarget(new Vector3()) - const c = [ - parseFloat(pos.x.toFixed(5)), - parseFloat(pos.y.toFixed(5)), - parseFloat(pos.z.toFixed(5)), - parseFloat(target.x.toFixed(5)), - parseFloat(target.y.toFixed(5)), - parseFloat(target.z.toFixed(5)), - viewer.cameraHandler.activeCam.name === 'ortho' ? 1 : 0, - get(controls, '_zoom') as number - ] - return c -} diff --git a/packages/frontend/src/main/lib/viewer/core/helpers/resourceHelper.ts b/packages/frontend/src/main/lib/viewer/core/helpers/resourceHelper.ts deleted file mode 100644 index b04c4f11a..000000000 --- a/packages/frontend/src/main/lib/viewer/core/helpers/resourceHelper.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type ResourceType = 'commit' | 'object' - -export function getResourceType(resourceId: string): ResourceType { - return resourceId.length === 10 ? 'commit' : 'object' -} diff --git a/packages/frontend/src/main/navigation/AdminNav.vue b/packages/frontend/src/main/navigation/AdminNav.vue deleted file mode 100644 index a734f9313..000000000 --- a/packages/frontend/src/main/navigation/AdminNav.vue +++ /dev/null @@ -1,42 +0,0 @@ - - diff --git a/packages/frontend/src/main/navigation/MainLogo.vue b/packages/frontend/src/main/navigation/MainLogo.vue deleted file mode 100644 index 975d94997..000000000 --- a/packages/frontend/src/main/navigation/MainLogo.vue +++ /dev/null @@ -1,46 +0,0 @@ - - diff --git a/packages/frontend/src/main/navigation/MainNav.vue b/packages/frontend/src/main/navigation/MainNav.vue deleted file mode 100644 index c9b194246..000000000 --- a/packages/frontend/src/main/navigation/MainNav.vue +++ /dev/null @@ -1,228 +0,0 @@ - - diff --git a/packages/frontend/src/main/navigation/MainNavBottom.vue b/packages/frontend/src/main/navigation/MainNavBottom.vue deleted file mode 100644 index dfc4eaa1d..000000000 --- a/packages/frontend/src/main/navigation/MainNavBottom.vue +++ /dev/null @@ -1,93 +0,0 @@ - - diff --git a/packages/frontend/src/main/navigation/StreamNav.vue b/packages/frontend/src/main/navigation/StreamNav.vue deleted file mode 100644 index 7c81e929b..000000000 --- a/packages/frontend/src/main/navigation/StreamNav.vue +++ /dev/null @@ -1,329 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/TheCommits.vue b/packages/frontend/src/main/pages/TheCommits.vue deleted file mode 100644 index e97d55b53..000000000 --- a/packages/frontend/src/main/pages/TheCommits.vue +++ /dev/null @@ -1,230 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/TheFavoriteStreams.vue b/packages/frontend/src/main/pages/TheFavoriteStreams.vue deleted file mode 100644 index dbfd8d5c5..000000000 --- a/packages/frontend/src/main/pages/TheFavoriteStreams.vue +++ /dev/null @@ -1,112 +0,0 @@ -usePortalState - - diff --git a/packages/frontend/src/main/pages/TheFeed.vue b/packages/frontend/src/main/pages/TheFeed.vue deleted file mode 100644 index 2d21688ff..000000000 --- a/packages/frontend/src/main/pages/TheFeed.vue +++ /dev/null @@ -1,30 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/TheStreams.vue b/packages/frontend/src/main/pages/TheStreams.vue deleted file mode 100644 index ee223498a..000000000 --- a/packages/frontend/src/main/pages/TheStreams.vue +++ /dev/null @@ -1,206 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/admin/Admin.vue b/packages/frontend/src/main/pages/admin/Admin.vue deleted file mode 100644 index 37f482638..000000000 --- a/packages/frontend/src/main/pages/admin/Admin.vue +++ /dev/null @@ -1,61 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/admin/Dashboard.vue b/packages/frontend/src/main/pages/admin/Dashboard.vue deleted file mode 100644 index 3631aa45a..000000000 --- a/packages/frontend/src/main/pages/admin/Dashboard.vue +++ /dev/null @@ -1,27 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/admin/Invites.vue b/packages/frontend/src/main/pages/admin/Invites.vue deleted file mode 100644 index 3b0493360..000000000 --- a/packages/frontend/src/main/pages/admin/Invites.vue +++ /dev/null @@ -1,266 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/admin/ServerSettings.vue b/packages/frontend/src/main/pages/admin/ServerSettings.vue deleted file mode 100644 index 46521ae20..000000000 --- a/packages/frontend/src/main/pages/admin/ServerSettings.vue +++ /dev/null @@ -1,141 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/admin/Streams.vue b/packages/frontend/src/main/pages/admin/Streams.vue deleted file mode 100644 index f998ae0fa..000000000 --- a/packages/frontend/src/main/pages/admin/Streams.vue +++ /dev/null @@ -1,301 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/admin/Users.vue b/packages/frontend/src/main/pages/admin/Users.vue deleted file mode 100644 index 013778d3f..000000000 --- a/packages/frontend/src/main/pages/admin/Users.vue +++ /dev/null @@ -1,326 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/auth/AuthorizeApp.vue b/packages/frontend/src/main/pages/auth/AuthorizeApp.vue deleted file mode 100644 index c53170dd7..000000000 --- a/packages/frontend/src/main/pages/auth/AuthorizeApp.vue +++ /dev/null @@ -1,155 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/auth/ResetPasswordFinalization.vue b/packages/frontend/src/main/pages/auth/ResetPasswordFinalization.vue deleted file mode 100644 index 81de40b86..000000000 --- a/packages/frontend/src/main/pages/auth/ResetPasswordFinalization.vue +++ /dev/null @@ -1,198 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/auth/ResetPasswordRequest.vue b/packages/frontend/src/main/pages/auth/ResetPasswordRequest.vue deleted file mode 100644 index 99baacb9d..000000000 --- a/packages/frontend/src/main/pages/auth/ResetPasswordRequest.vue +++ /dev/null @@ -1,122 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/auth/TheLogin.vue b/packages/frontend/src/main/pages/auth/TheLogin.vue deleted file mode 100644 index 3425ba239..000000000 --- a/packages/frontend/src/main/pages/auth/TheLogin.vue +++ /dev/null @@ -1,305 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/auth/TheRegistration.vue b/packages/frontend/src/main/pages/auth/TheRegistration.vue deleted file mode 100644 index cf5b1dab1..000000000 --- a/packages/frontend/src/main/pages/auth/TheRegistration.vue +++ /dev/null @@ -1,377 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/common/NotFound.vue b/packages/frontend/src/main/pages/common/NotFound.vue deleted file mode 100644 index 0fe461a48..000000000 --- a/packages/frontend/src/main/pages/common/NotFound.vue +++ /dev/null @@ -1,24 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/common/TheError.vue b/packages/frontend/src/main/pages/common/TheError.vue deleted file mode 100644 index 3472e4f2a..000000000 --- a/packages/frontend/src/main/pages/common/TheError.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/onboarding/TheOnboarding.vue b/packages/frontend/src/main/pages/onboarding/TheOnboarding.vue deleted file mode 100644 index 6be5bd530..000000000 --- a/packages/frontend/src/main/pages/onboarding/TheOnboarding.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/stream/CommitObjectViewer.vue b/packages/frontend/src/main/pages/stream/CommitObjectViewer.vue deleted file mode 100644 index 3739acc8b..000000000 --- a/packages/frontend/src/main/pages/stream/CommitObjectViewer.vue +++ /dev/null @@ -1,805 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/stream/TheBranch.vue b/packages/frontend/src/main/pages/stream/TheBranch.vue deleted file mode 100644 index cce80695a..000000000 --- a/packages/frontend/src/main/pages/stream/TheBranch.vue +++ /dev/null @@ -1,357 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/stream/TheCollaborators.vue b/packages/frontend/src/main/pages/stream/TheCollaborators.vue deleted file mode 100644 index e82cad6c5..000000000 --- a/packages/frontend/src/main/pages/stream/TheCollaborators.vue +++ /dev/null @@ -1,444 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/stream/TheComments.vue b/packages/frontend/src/main/pages/stream/TheComments.vue deleted file mode 100644 index ed5847638..000000000 --- a/packages/frontend/src/main/pages/stream/TheComments.vue +++ /dev/null @@ -1,226 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/stream/TheEmbed.vue b/packages/frontend/src/main/pages/stream/TheEmbed.vue deleted file mode 100644 index 84be2799e..000000000 --- a/packages/frontend/src/main/pages/stream/TheEmbed.vue +++ /dev/null @@ -1,328 +0,0 @@ - - - - - diff --git a/packages/frontend/src/main/pages/stream/TheGlobals.vue b/packages/frontend/src/main/pages/stream/TheGlobals.vue deleted file mode 100644 index 1159630ed..000000000 --- a/packages/frontend/src/main/pages/stream/TheGlobals.vue +++ /dev/null @@ -1,252 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/stream/TheSettings.vue b/packages/frontend/src/main/pages/stream/TheSettings.vue deleted file mode 100644 index ae443fd97..000000000 --- a/packages/frontend/src/main/pages/stream/TheSettings.vue +++ /dev/null @@ -1,443 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/stream/TheStream.vue b/packages/frontend/src/main/pages/stream/TheStream.vue deleted file mode 100644 index 0752c81bd..000000000 --- a/packages/frontend/src/main/pages/stream/TheStream.vue +++ /dev/null @@ -1,333 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/stream/TheStreamHome.vue b/packages/frontend/src/main/pages/stream/TheStreamHome.vue deleted file mode 100644 index 4cb52a0c4..000000000 --- a/packages/frontend/src/main/pages/stream/TheStreamHome.vue +++ /dev/null @@ -1,261 +0,0 @@ - - diff --git a/packages/frontend/src/main/pages/stream/TheUploads.vue b/packages/frontend/src/main/pages/stream/TheUploads.vue deleted file mode 100644 index f2b3df05b..000000000 --- a/packages/frontend/src/main/pages/stream/TheUploads.vue +++ /dev/null @@ -1,303 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/stream/TheWebhooks.vue b/packages/frontend/src/main/pages/stream/TheWebhooks.vue deleted file mode 100644 index eb8e3c7dd..000000000 --- a/packages/frontend/src/main/pages/stream/TheWebhooks.vue +++ /dev/null @@ -1,366 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/user/TheProfileSelf.vue b/packages/frontend/src/main/pages/user/TheProfileSelf.vue deleted file mode 100644 index 6d4af76e1..000000000 --- a/packages/frontend/src/main/pages/user/TheProfileSelf.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - diff --git a/packages/frontend/src/main/pages/user/TheProfileUser.vue b/packages/frontend/src/main/pages/user/TheProfileUser.vue deleted file mode 100644 index 64bb35500..000000000 --- a/packages/frontend/src/main/pages/user/TheProfileUser.vue +++ /dev/null @@ -1,108 +0,0 @@ - - - diff --git a/packages/frontend/src/main/router/index.js b/packages/frontend/src/main/router/index.js deleted file mode 100644 index a032449d2..000000000 --- a/packages/frontend/src/main/router/index.js +++ /dev/null @@ -1,437 +0,0 @@ -import { LocalStorageKeys } from '@/helpers/mainConstants' -import { AppLocalStorage } from '@/utils/localStorage' -import { GlobalEvents } from '@/main/lib/core/helpers/eventHubHelper' -import Vue from 'vue' -import VueRouter from 'vue-router' -import { getMixpanel } from '@/mixpanelManager' -import { - deletePostAuthRedirect, - getPostAuthRedirect, - setPostAuthRedirect -} from '@/main/lib/auth/utils/postAuthRedirectManager' -import { reduce } from 'lodash' - -Vue.use(VueRouter) - -const routes = [ - { - path: '/authn', - name: 'Auth', - redirect: '/authn/login', - component: () => import('@/main/layouts/TheAuth.vue'), - beforeEnter: (to, from, next) => { - // If we're in an iframe, we should not render any auth routes. - if (window.self !== window.top) { - return next('/error') - } - next() - }, - children: [ - { - path: 'login', - name: 'Login', - meta: { - title: 'Login | Speckle' - }, - component: () => import('@/main/pages/auth/TheLogin.vue') - }, - { - path: 'register', - name: 'Register', - meta: { - title: 'Register | Speckle' - }, - component: () => import('@/main/pages/auth/TheRegistration.vue') - }, - { - path: 'resetpassword', - name: 'Reset Password', - meta: { - title: 'Reset Password | Speckle' - }, - component: () => import('@/main/pages/auth/ResetPasswordRequest.vue') - }, - { - path: 'resetpassword/finalize', - name: 'Reset Password Finalization', - meta: { - title: 'Reset Password | Speckle' - }, - component: () => import('@/main/pages/auth/ResetPasswordFinalization.vue') - }, - { - path: 'verify/:appId/:challenge', - name: 'Authorize App', - meta: { - title: 'Authorizing App | Speckle' - }, - component: () => import('@/main/pages/auth/AuthorizeApp.vue') - } - ] - }, - { - path: '/', - meta: { - title: 'Home | Speckle' - }, - component: () => import('@/main/layouts/TheMain.vue'), - children: [ - { - path: '', - name: 'home', - meta: { - title: 'Home | Speckle' - }, - component: () => import('@/main/pages/TheFeed.vue') - }, - { - path: '/commits', - name: 'commits', - meta: { - title: 'Commits | Speckle' - }, - component: () => import('@/main/pages/TheCommits.vue') - }, - { - path: 'streams', - name: 'streams', - meta: { - title: 'Streams | Speckle' - }, - component: () => import('@/main/pages/TheStreams.vue') - }, - { - path: 'streams/favorite', - name: 'favorite-streams', - meta: { - title: 'Favorite Streams | Speckle' - }, - component: () => import('@/main/pages/TheFavoriteStreams.vue') - }, - { - path: 'streams/:streamId', - meta: { - title: 'Stream | Speckle' - }, - component: () => import('@/main/pages/stream/TheStream.vue'), - children: [ - { - path: '', - name: 'stream', - meta: { - title: 'Stream | Speckle' - }, - component: () => import('@/main/pages/stream/TheStreamHome.vue') - }, - { - path: 'branches/', - name: 'branches', - redirect: 'branches/main' - }, - { - path: 'branches/:branchName*', - name: 'branch', - meta: { - title: 'Branch | Speckle' - }, - component: () => import('@/main/pages/stream/TheBranch.vue'), - beforeEnter: (to, from, next) => { - if (to.params.branchName.toLowerCase() !== to.params.branchName) - return next( - `/streams/${ - to.params.streamId - }/branches/${to.params.branchName.toLowerCase()}` - ) - else next() - } - }, - { - path: 'comments/', - name: 'comments', - meta: { - title: 'Stream Comments | Speckle', - resizableNavbar: false - }, - component: () => import('@/main/pages/stream/TheComments.vue') - }, - { - path: 'commits/:resourceId*', - name: 'commit', - meta: { - title: 'Commit | Speckle', - resizableNavbar: true, - hideEmailBanner: true - }, - component: () => import('@/main/pages/stream/CommitObjectViewer.vue'), - props: (route) => ({ - streamId: route.params.streamId, - resourceId: route.params.resourceId - }) - }, - { - path: 'objects/:resourceId*', - name: 'objects', - meta: { - title: 'Object | Speckle', - resizableNavbar: true, - hideEmailBanner: true - }, - component: () => import('@/main/pages/stream/CommitObjectViewer.vue'), - props: (route) => ({ - streamId: route.params.streamId, - resourceId: route.params.resourceId - }) - }, - { - path: 'collaborators/', - name: 'collaborators', - meta: { - title: 'Stream Collaborators | Speckle' - }, - props: true, - component: () => import('@/main/pages/stream/TheCollaborators.vue') - }, - { - path: 'settings/', - name: 'settings', - meta: { - title: 'Stream Settings | Speckle' - }, - props: true, - component: () => import('@/main/pages/stream/TheSettings.vue') - }, - { - path: 'webhooks/', - name: 'webhooks', - meta: { - title: 'Webhooks | Speckle' - }, - props: true, - component: () => import('@/main/pages/stream/TheWebhooks.vue') - }, - { - path: 'uploads/', - name: 'uploads', - meta: { - title: 'Stream Uploads | Speckle' - }, - props: true, - component: () => import('@/main/pages/stream/TheUploads.vue') - }, - { - path: 'globals/', - name: 'globals', - meta: { - title: 'Globals | Speckle' - }, - props: true, - component: () => import('@/main/pages/stream/TheGlobals.vue') - }, - { - path: 'globals/:commitId', - name: 'previous globals', - meta: { - title: 'Globals | Speckle' - }, - component: () => import('@/main/pages/stream/TheGlobals.vue') - } - ] - }, - { - path: 'profile', - name: 'profile', - meta: { - title: 'Your Profile | Speckle' - }, - component: () => import('@/main/pages/user/TheProfileSelf.vue') - }, - { - path: 'profile/:userId', - name: 'user profile', - meta: { - title: 'User Profile | Speckle' - }, - component: () => import('@/main/pages/user/TheProfileUser.vue') - }, - { - path: 'admin', - meta: { - title: 'Admin | Overview' - }, - redirect: 'admin/dashboard', - component: () => import('@/main/pages/admin/Admin.vue'), - children: [ - { - name: 'Admin | Overview', - path: 'dashboard', - component: () => import('@/main/pages/admin/Dashboard.vue') - }, - { - name: 'Admin | Users', - path: 'users', - component: () => import('@/main/pages/admin/Users.vue'), - props: (route) => ({ ...route.query }) - }, - { - name: 'Admin | Streams', - path: 'streams', - component: () => import('@/main/pages/admin/Streams.vue'), - props: (route) => ({ ...route.query }) - }, - { - name: 'Admin | Settings', - path: 'settings', - component: () => import('@/main/pages/admin/ServerSettings.vue') - }, - { - name: 'Admin | Invites', - path: 'invites', - component: () => import('@/main/pages/admin/Invites.vue') - } - ] - } - ] - }, - { - path: '/error', - name: 'Error', - meta: { - title: 'Error | Speckle' - }, - component: () => import('@/main/pages/common/TheError.vue') - }, - { - path: '/onboarding', - name: 'Onboarding | Speckle', - meta: { - title: 'Getting Started | Speckle' - }, - component: () => import('@/main/pages/onboarding/TheOnboarding.vue') - }, - { - path: '*', - name: 'notfound', - meta: { - title: 'Not Found | Speckle' - }, - component: () => import('@/main/pages/common/NotFound.vue') - }, - { - path: '/embed', - meta: { - title: 'Embed View | Speckle' - }, - component: () => import('@/main/layouts/TheBasic.vue'), - children: [ - { - path: '/', - name: 'viewer-embed', - meta: { - title: 'Embed View | Speckle' - }, - component: () => import('@/main/pages/stream/TheEmbed.vue') - } - ] - } -] - -const router = new VueRouter({ - mode: 'history', - routes, - scrollBehavior(to, from, savedPosition) { - if (savedPosition) { - return savedPosition - } else { - return { x: 0, y: 0 } - } - } -}) - -function shouldForceToLogin(isLoggedIn, to) { - if (isLoggedIn) return false - - const allowedForUnauthedNames = [ - 'stream', - 'branch', - 'commit', - 'objects', - 'Embedded Viewer', - 'Login', - 'Register', - 'Error', - 'Reset Password', - 'Reset Password Finalization', - 'viewer-embed' - ] - - // Check if any of the new routes (nested or not) is one of the routes that is allowed for unauthed users - // If it is - we shouldnt force a redirect - const isAllowedRoute = to.matched.some( - ({ name }) => name && allowedForUnauthedNames.includes(name) - ) - return !isAllowedRoute -} - -router.beforeEach((to, _from, next) => { - const uuid = AppLocalStorage.get(LocalStorageKeys.Uuid) - const redirect = getPostAuthRedirect() - - router.app.$eventHub.$emit(GlobalEvents.PageLoading, true) - - // Redirect to log in page if not authed and on private pages - if (shouldForceToLogin(!!uuid, to)) { - // Redirect back here afterwards, unless if there's an already pending redirect - if (!redirect?.pathWithQuery) { - // Ignore home page - its already the default redirect - if (to.name !== 'home') { - setPostAuthRedirect({ pathWithQuery: to.fullPath }) - } - } - - return next({ name: 'Login' }) - } - - // Redirect to home if in one of the routes that are guest only - if ((to.name === 'Login' || to.name === 'Register') && uuid) { - return next({ name: 'home' }) - } - - // If we're logged in, we should redirect to the stored redirect path - if (uuid && redirect && redirect?.pathWithQuery) { - deletePostAuthRedirect() - const redirectUrl = new URL(redirect.pathWithQuery, window.location.origin) - return next({ - path: redirectUrl.pathname, - query: reduce( - [...redirectUrl.searchParams.entries()], - (result, entry) => { - result[entry[0]] = entry[1] - return result - }, - {} - ) - }) - } - - return next() -}) - -//TODO: include stream name in page title eg `My Cool Stream | Speckle` -router.afterEach((to) => { - router.app.$eventHub.$emit(GlobalEvents.PageLoading, false) - - Vue.nextTick(() => { - document.title = (to.meta && to.meta.title) || 'Speckle' - }) - - // Report route to mixpanel - const mp = getMixpanel() - const pathDefinition = to.matched[to.matched.length - 1].path - const path = to.path - mp.track('Route Visited', { - path, - pathDefinition - }) -}) - -export default router diff --git a/packages/frontend/src/main/store/emojis.js b/packages/frontend/src/main/store/emojis.js deleted file mode 100644 index 84a9fc888..000000000 --- a/packages/frontend/src/main/store/emojis.js +++ /dev/null @@ -1,2414 +0,0 @@ -export default [ - '😀', - '😁', - '😂', - '🤣', - '😃', - '😄', - '😅', - '😆', - '😉', - '😊', - '😋', - '😎', - '😍', - '😘', - '🥰', - '😗', - '😙', - '😚', - '☺️', - '🙂', - '🤗', - '🤩', - '🤔', - '🤨', - '😐', - '😑', - '😶', - '🙄', - '😏', - '😣', - '😥', - '😮', - '🤐', - '😯', - '😪', - '😫', - '😴', - '😌', - '😛', - '😜', - '😝', - '🤤', - '😒', - '😓', - '😔', - '😕', - '🙃', - '🤑', - '😲', - '☹️', - '🙁', - '😖', - '😞', - '😟', - '😤', - '😢', - '😭', - '😦', - '😧', - '😨', - '😩', - '🤯', - '😬', - '😰', - '😱', - '🥵', - '🥶', - '😳', - '🤪', - '😵', - '😡', - '😠', - '🤬', - '😷', - '🤒', - '🤕', - '🤢', - '🤮', - '🤧', - '😇', - '🤠', - '🤡', - '🥳', - '🥴', - '🥺', - '🤥', - '🤫', - '🤭', - '🧐', - '🤓', - '😈', - '👿', - '👹', - '👺', - '💀', - '👻', - '👽', - '🤖', - '💩', - '😺', - '😸', - '😹', - '😻', - '😼', - '😽', - '🙀', - '😿', - '😾', - '👶', - '👧', - '🧒', - '👦', - '👩', - '🧑', - '👨', - '👵', - '🧓', - '👴', - '👲', - '👳‍♀️', - '👳‍♂️', - '🧕', - '🧔', - '👱‍♂️', - '👱‍♀️', - '👨‍🦰', - '👩‍🦰', - '👨‍🦱', - '👩‍🦱', - '👨‍🦲', - '👩‍🦲', - '👨‍🦳', - '👩‍🦳', - '🦸‍♀️', - '🦸‍♂️', - '🦹‍♀️', - '🦹‍♂️', - '👮‍♀️', - '👮‍♂️', - '👷‍♀️', - '👷‍♂️', - '💂‍♀️', - '💂‍♂️', - '🕵️‍♀️', - '🕵️‍♂️', - '👩‍⚕️', - '👨‍⚕️', - '👩‍🌾', - '👨‍🌾', - '👩‍🍳', - '👨‍🍳', - '👩‍🎓', - '👨‍🎓', - '👩‍🎤', - '👨‍🎤', - '👩‍🏫', - '👨‍🏫', - '👩‍🏭', - '👨‍🏭', - '👩‍💻', - '👨‍💻', - '👩‍💼', - '👨‍💼', - '👩‍🔧', - '👨‍🔧', - '👩‍🔬', - '👨‍🔬', - '👩‍🎨', - '👨‍🎨', - '👩‍🚒', - '👨‍🚒', - '👩‍✈️', - '👨‍✈️', - '👩‍🚀', - '👨‍🚀', - '👩‍⚖️', - '👨‍⚖️', - '👰', - '🤵', - '👸', - '🤴', - '🤶', - '🎅', - '🧙‍♀️', - '🧙‍♂️', - '🧝‍♀️', - '🧝‍♂️', - '🧛‍♀️', - '🧛‍♂️', - '🧟‍♀️', - '🧟‍♂️', - '🧞‍♀️', - '🧞‍♂️', - '🧜‍♀️', - '🧜‍♂️', - '🧚‍♀️', - '🧚‍♂️', - '👼', - '🤰', - '🤱', - '🙇‍♀️', - '🙇‍♂️', - '💁‍♀️', - '💁‍♂️', - '🙅‍♀️', - '🙅‍♂️', - '🙆‍♀️', - '🙆‍♂️', - '🙋‍♀️', - '🙋‍♂️', - '🤦‍♀️', - '🤦‍♂️', - '🤷‍♀️', - '🤷‍♂️', - '🙎‍♀️', - '🙎‍♂️', - '🙍‍♀️', - '🙍‍♂️', - '💇‍♀️', - '💇‍♂️', - '💆‍♀️', - '💆‍♂️', - '🧖‍♀️', - '🧖‍♂️', - '💅', - '🤳', - '💃', - '🕺', - '👯‍♀️', - '👯‍♂️', - '🕴', - '🚶‍♀️', - '🚶‍♂️', - '🏃‍♀️', - '🏃‍♂️', - '👫', - '👭', - '👬', - '💑', - '👩‍❤️‍👩', - '👨‍❤️‍👨', - '💏', - '👩‍❤️‍💋‍👩', - '👨‍❤️‍💋‍👨', - '👪', - '👨‍👩‍👧', - '👨‍👩‍👧‍👦', - '👨‍👩‍👦‍👦', - '👨‍👩‍👧‍👧', - '👩‍👩‍👦', - '👩‍👩‍👧', - '👩‍👩‍👧‍👦', - '👩‍👩‍👦‍👦', - '👩‍👩‍👧‍👧', - '👨‍👨‍👦', - '👨‍👨‍👧', - '👨‍👨‍👧‍👦', - '👨‍👨‍👦‍👦', - '👨‍👨‍👧‍👧', - '👩‍👦', - '👩‍👧', - '👩‍👧‍👦', - '👩‍👦‍👦', - '👩‍👧‍👧', - '👨‍👦', - '👨‍👧', - '👨‍👧‍👦', - '👨‍👦‍👦', - '👨‍👧‍👧', - '🤲', - '👐', - '🙌', - '👏', - '🤝', - '👍', - '👎', - '👊', - '✊', - '🤛', - '🤜', - '🤞', - '✌️', - '🤟', - '🤘', - '👌', - '👈', - '👉', - '👆', - '👇', - '☝️', - '✋', - '🤚', - '🖐', - '🖖', - '👋', - '🤙', - '💪', - '🦵', - '🦶', - '🖕', - '✍️', - '🙏', - '💍', - '💄', - '💋', - '👄', - '👅', - '👂', - '👃', - '👣', - '👁', - '👀', - '🧠', - '🦴', - '🦷', - '🗣', - '👤', - '👥', - '🧥', - '👚', - '👕', - '👖', - '👔', - '👗', - '👙', - '👘', - '👠', - '👡', - '👢', - '👞', - '👟', - '🥾', - '🥿', - '🧦', - '🧤', - '🧣', - '🎩', - '🧢', - '👒', - '🎓', - '⛑', - '👑', - '👝', - '👛', - '👜', - '💼', - '🎒', - '👓', - '🕶', - '🥽', - '🥼', - '🌂', - '🧵', - '🧶', - '👶🏻', - '👦🏻', - '👧🏻', - '👨🏻', - '👩🏻', - '👱🏻‍♀️', - '👱🏻', - '👴🏻', - '👵🏻', - '👲🏻', - '👳🏻‍♀️', - '👳🏻', - '👮🏻‍♀️', - '👮🏻', - '👷🏻‍♀️', - '👷🏻', - '💂🏻‍♀️', - '💂🏻', - '🕵🏻‍♀️', - '🕵🏻', - '👩🏻‍⚕️', - '👨🏻‍⚕️', - '👩🏻‍🌾', - '👨🏻‍🌾', - '👩🏻‍🍳', - '👨🏻‍🍳', - '👩🏻‍🎓', - '👨🏻‍🎓', - '👩🏻‍🎤', - '👨🏻‍🎤', - '👩🏻‍🏫', - '👨🏻‍🏫', - '👩🏻‍🏭', - '👨🏻‍🏭', - '👩🏻‍💻', - '👨🏻‍💻', - '👩🏻‍💼', - '👨🏻‍💼', - '👩🏻‍🔧', - '👨🏻‍🔧', - '👩🏻‍🔬', - '👨🏻‍🔬', - '👩🏻‍🎨', - '👨🏻‍🎨', - '👩🏻‍🚒', - '👨🏻‍🚒', - '👩🏻‍✈️', - '👨🏻‍✈️', - '👩🏻‍🚀', - '👨🏻‍🚀', - '👩🏻‍⚖️', - '👨🏻‍⚖️', - '🤶🏻', - '🎅🏻', - '👸🏻', - '🤴🏻', - '👰🏻', - '🤵🏻', - '👼🏻', - '🤰🏻', - '🙇🏻‍♀️', - '🙇🏻', - '💁🏻', - '💁🏻‍♂️', - '🙅🏻', - '🙅🏻‍♂️', - '🙆🏻', - '🙆🏻‍♂️', - '🙋🏻', - '🙋🏻‍♂️', - '🤦🏻‍♀️', - '🤦🏻‍♂️', - '🤷🏻‍♀️', - '🤷🏻‍♂️', - '🙎🏻', - '🙎🏻‍♂️', - '🙍🏻', - '🙍🏻‍♂️', - '💇🏻', - '💇🏻‍♂️', - '💆🏻', - '💆🏻‍♂️', - '🕴🏻', - '💃🏻', - '🕺🏻', - '🚶🏻‍♀️', - '🚶🏻', - '🏃🏻‍♀️', - '🏃🏻', - '🤲🏻', - '👐🏻', - '🙌🏻', - '👏🏻', - '🙏🏻', - '👍🏻', - '👎🏻', - '👊🏻', - '✊🏻', - '🤛🏻', - '🤜🏻', - '🤞🏻', - '✌🏻', - '🤟🏻', - '🤘🏻', - '👌🏻', - '👈🏻', - '👉🏻', - '👆🏻', - '👇🏻', - '☝🏻', - '✋🏻', - '🤚🏻', - '🖐🏻', - '🖖🏻', - '👋🏻', - '🤙🏻', - '💪🏻', - '🖕🏻', - '✍🏻', - '🤳🏻', - '💅🏻', - '👂🏻', - '👃🏻', - '👶🏼', - '👦🏼', - '👧🏼', - '👨🏼', - '👩🏼', - '👱🏼‍♀️', - '👱🏼', - '👴🏼', - '👵🏼', - '👲🏼', - '👳🏼‍♀️', - '👳🏼', - '👮🏼‍♀️', - '👮🏼', - '👷🏼‍♀️', - '👷🏼', - '💂🏼‍♀️', - '💂🏼', - '🕵🏼‍♀️', - '🕵🏼', - '👩🏼‍⚕️', - '👨🏼‍⚕️', - '👩🏼‍🌾', - '👨🏼‍🌾', - '👩🏼‍🍳', - '👨🏼‍🍳', - '👩🏼‍🎓', - '👨🏼‍🎓', - '👩🏼‍🎤', - '👨🏼‍🎤', - '👩🏼‍🏫', - '👨🏼‍🏫', - '👩🏼‍🏭', - '👨🏼‍🏭', - '👩🏼‍💻', - '👨🏼‍💻', - '👩🏼‍💼', - '👨🏼‍💼', - '👩🏼‍🔧', - '👨🏼‍🔧', - '👩🏼‍🔬', - '👨🏼‍🔬', - '👩🏼‍🎨', - '👨🏼‍🎨', - '👩🏼‍🚒', - '👨🏼‍🚒', - '👩🏼‍✈️', - '👨🏼‍✈️', - '👩🏼‍🚀', - '👨🏼‍🚀', - '👩🏼‍⚖️', - '👨🏼‍⚖️', - '🤶🏼', - '🎅🏼', - '👸🏼', - '🤴🏼', - '👰🏼', - '🤵🏼', - '👼🏼', - '🤰🏼', - '🙇🏼‍♀️', - '🙇🏼', - '💁🏼', - '💁🏼‍♂️', - '🙅🏼', - '🙅🏼‍♂️', - '🙆🏼', - '🙆🏼‍♂️', - '🙋🏼', - '🙋🏼‍♂️', - '🤦🏼‍♀️', - '🤦🏼‍♂️', - '🤷🏼‍♀️', - '🤷🏼‍♂️', - '🙎🏼', - '🙎🏼‍♂️', - '🙍🏼', - '🙍🏼‍♂️', - '💇🏼', - '💇🏼‍♂️', - '💆🏼', - '💆🏼‍♂️', - '🕴🏼', - '💃🏼', - '🕺🏼', - '🚶🏼‍♀️', - '🚶🏼', - '🏃🏼‍♀️', - '🏃🏼', - '🤲🏼', - '👐🏼', - '🙌🏼', - '👏🏼', - '🙏🏼', - '👍🏼', - '👎🏼', - '👊🏼', - '✊🏼', - '🤛🏼', - '🤜🏼', - '🤞🏼', - '✌🏼', - '🤟🏼', - '🤘🏼', - '👌🏼', - '👈🏼', - '👉🏼', - '👆🏼', - '👇🏼', - '☝🏼', - '✋🏼', - '🤚🏼', - '🖐🏼', - '🖖🏼', - '👋🏼', - '🤙🏼', - '💪🏼', - '🖕🏼', - '✍🏼', - '🤳🏼', - '💅🏼', - '👂🏼', - '👃🏼', - '👶🏽', - '👦🏽', - '👧🏽', - '👨🏽', - '👩🏽', - '👱🏽‍♀️', - '👱🏽', - '👴🏽', - '👵🏽', - '👲🏽', - '👳🏽‍♀️', - '👳🏽', - '👮🏽‍♀️', - '👮🏽', - '👷🏽‍♀️', - '👷🏽', - '💂🏽‍♀️', - '💂🏽', - '🕵🏽‍♀️', - '🕵🏽', - '👩🏽‍⚕️', - '👨🏽‍⚕️', - '👩🏽‍🌾', - '👨🏽‍🌾', - '👩🏽‍🍳', - '👨🏽‍🍳', - '👩🏽‍🎓', - '👨🏽‍🎓', - '👩🏽‍🎤', - '👨🏽‍🎤', - '👩🏽‍🏫', - '👨🏽‍🏫', - '👩🏽‍🏭', - '👨🏽‍🏭', - '👩🏽‍💻', - '👨🏽‍💻', - '👩🏽‍💼', - '👨🏽‍💼', - '👩🏽‍🔧', - '👨🏽‍🔧', - '👩🏽‍🔬', - '👨🏽‍🔬', - '👩🏽‍🎨', - '👨🏽‍🎨', - '👩🏽‍🚒', - '👨🏽‍🚒', - '👩🏽‍✈️', - '👨🏽‍✈️', - '👩🏽‍🚀', - '👨🏽‍🚀', - '👩🏽‍⚖️', - '👨🏽‍⚖️', - '🤶🏽', - '🎅🏽', - '👸🏽', - '🤴🏽', - '👰🏽', - '🤵🏽', - '👼🏽', - '🤰🏽', - '🙇🏽‍♀️', - '🙇🏽', - '💁🏽', - '💁🏽‍♂️', - '🙅🏽', - '🙅🏽‍♂️', - '🙆🏽', - '🙆🏽‍♂️', - '🙋🏽', - '🙋🏽‍♂️', - '🤦🏽‍♀️', - '🤦🏽‍♂️', - '🤷🏽‍♀️', - '🤷🏽‍♂️', - '🙎🏽', - '🙎🏽‍♂️', - '🙍🏽', - '🙍🏽‍♂️', - '💇🏽', - '💇🏽‍♂️', - '💆🏽', - '💆🏽‍♂️', - '🕴🏼', - '💃🏽', - '🕺🏽', - '🚶🏽‍♀️', - '🚶🏽', - '🏃🏽‍♀️', - '🏃🏽', - '🤲🏽', - '👐🏽', - '🙌🏽', - '👏🏽', - '🙏🏽', - '👍🏽', - '👎🏽', - '👊🏽', - '✊🏽', - '🤛🏽', - '🤜🏽', - '🤞🏽', - '✌🏽', - '🤟🏽', - '🤘🏽', - '👌🏽', - '👈🏽', - '👉🏽', - '👆🏽', - '👇🏽', - '☝🏽', - '✋🏽', - '🤚🏽', - '🖐🏽', - '🖖🏽', - '👋🏽', - '🤙🏽', - '💪🏽', - '🖕🏽', - '✍🏽', - '🤳🏽', - '💅🏽', - '👂🏽', - '👃🏽', - '👶🏾', - '👦🏾', - '👧🏾', - '👨🏾', - '👩🏾', - '👱🏾‍♀️', - '👱🏾', - '👴🏾', - '👵🏾', - '👲🏾', - '👳🏾‍♀️', - '👳🏾', - '👮🏾‍♀️', - '👮🏾', - '👷🏾‍♀️', - '👷🏾', - '💂🏾‍♀️', - '💂🏾', - '🕵🏾‍♀️', - '🕵🏾', - '👩🏾‍⚕️', - '👨🏾‍⚕️', - '👩🏾‍🌾', - '👨🏾‍🌾', - '👩🏾‍🍳', - '👨🏾‍🍳', - '👩🏾‍🎓', - '👨🏾‍🎓', - '👩🏾‍🎤', - '👨🏾‍🎤', - '👩🏾‍🏫', - '👨🏾‍🏫', - '👩🏾‍🏭', - '👨🏾‍🏭', - '👩🏾‍💻', - '👨🏾‍💻', - '👩🏾‍💼', - '👨🏾‍💼', - '👩🏾‍🔧', - '👨🏾‍🔧', - '👩🏾‍🔬', - '👨🏾‍🔬', - '👩🏾‍🎨', - '👨🏾‍🎨', - '👩🏾‍🚒', - '👨🏾‍🚒', - '👩🏾‍✈️', - '👨🏾‍✈️', - '👩🏾‍🚀', - '👨🏾‍🚀', - '👩🏾‍⚖️', - '👨🏾‍⚖️', - '🤶🏾', - '🎅🏾', - '👸🏾', - '🤴🏾', - '👰🏾', - '🤵🏾', - '👼🏾', - '🤰🏾', - '🙇🏾‍♀️', - '🙇🏾', - '💁🏾', - '💁🏾‍♂️', - '🙅🏾', - '🙅🏾‍♂️', - '🙆🏾', - '🙆🏾‍♂️', - '🙋🏾', - '🙋🏾‍♂️', - '🤦🏾‍♀️', - '🤦🏾‍♂️', - '🤷🏾‍♀️', - '🤷🏾‍♂️', - '🙎🏾', - '🙎🏾‍♂️', - '🙍🏾', - '🙍🏾‍♂️', - '💇🏾', - '💇🏾‍♂️', - '💆🏾', - '💆🏾‍♂️', - '🕴🏾', - '💃🏾', - '🕺🏾', - '🚶🏾‍♀️', - '🚶🏾', - '🏃🏾‍♀️', - '🏃🏾', - '🤲🏾', - '👐🏾', - '🙌🏾', - '👏🏾', - '🙏🏾', - '👍🏾', - '👎🏾', - '👊🏾', - '✊🏾', - '🤛🏾', - '🤜🏾', - '🤞🏾', - '✌🏾', - '🤟🏾', - '🤘🏾', - '👌🏾', - '👈🏾', - '👉🏾', - '👆🏾', - '👇🏾', - '☝🏾', - '✋🏾', - '🤚🏾', - '🖐🏾', - '🖖🏾', - '👋🏾', - '🤙🏾', - '💪🏾', - '🖕🏾', - '✍🏾', - '🤳🏾', - '💅🏾', - '👂🏾', - '👃🏾', - '👶🏿', - '👦🏿', - '👧🏿', - '👨🏿', - '👩🏿', - '👱🏿‍♀️', - '👱🏿', - '👴🏿', - '👵🏿', - '👲🏿', - '👳🏿‍♀️', - '👳🏿', - '👮🏿‍♀️', - '👮🏿', - '👷🏿‍♀️', - '👷🏿', - '💂🏿‍♀️', - '💂🏿', - '🕵🏿‍♀️', - '🕵🏿', - '👩🏿‍⚕️', - '👨🏿‍⚕️', - '👩🏿‍🌾', - '👨🏿‍🌾', - '👩🏿‍🍳', - '👨🏿‍🍳', - '👩🏿‍🎓', - '👨🏿‍🎓', - '👩🏿‍🎤', - '👨🏿‍🎤', - '👩🏿‍🏫', - '👨🏿‍🏫', - '👩🏿‍🏭', - '👨🏿‍🏭', - '👩🏿‍💻', - '👨🏿‍💻', - '👩🏿‍💼', - '👨🏿‍💼', - '👩🏿‍🔧', - '👨🏿‍🔧', - '👩🏿‍🔬', - '👨🏿‍🔬', - '👩🏿‍🎨', - '👨🏿‍🎨', - '👩🏿‍🚒', - '👨🏿‍🚒', - '👩🏿‍✈️', - '👨🏿‍✈️', - '👩🏿‍🚀', - '👨🏿‍🚀', - '👩🏿‍⚖️', - '👨🏿‍⚖️', - '🤶🏿', - '🎅🏿', - '👸🏿', - '🤴🏿', - '👰🏿', - '🤵🏿', - '👼🏿', - '🤰🏿', - '🙇🏿‍♀️', - '🙇🏿', - '💁🏿', - '💁🏿‍♂️', - '🙅🏿', - '🙅🏿‍♂️', - '🙆🏿', - '🙆🏿‍♂️', - '🙋🏿', - '🙋🏿‍♂️', - '🤦🏿‍♀️', - '🤦🏿‍♂️', - '🤷🏿‍♀️', - '🤷🏿‍♂️', - '🙎🏿', - '🙎🏿‍♂️', - '🙍🏿', - '🙍🏿‍♂️', - '💇🏿', - '💇🏿‍♂️', - '💆🏿', - '💆🏿‍♂️', - '🕴🏿', - '💃🏿', - '🕺🏿', - '🚶🏿‍♀️', - '🚶🏿', - '🏃🏿‍♀️', - '🏃🏿', - '🤲🏿', - '👐🏿', - '🙌🏿', - '👏🏿', - '🙏🏿', - '👍🏿', - '👎🏿', - '👊🏿', - '✊🏿', - '🤛🏿', - '🤜🏿', - '🤞🏿', - '✌🏿', - '🤟🏿', - '🤘🏿', - '👌🏿', - '👈🏿', - '👉🏿', - '👆🏿', - '👇🏿', - '☝🏿', - '✋🏿', - '🤚🏿', - '🖐🏿', - '🖖🏿', - '👋🏿', - '🤙🏿', - '💪🏿', - '🖕🏿', - '✍🏿', - '🤳🏿', - '💅🏿', - '👂🏿', - '👃🏿', - '🐶', - '🐱', - '🐭', - '🐹', - '🐰', - '🦊', - '🦝', - '🐻', - '🐼', - '🦘', - '🦡', - '🐨', - '🐯', - '🦁', - '🐮', - '🐷', - '🐽', - '🐸', - '🐵', - '🙈', - '🙉', - '🙊', - '🐒', - '🐔', - '🐧', - '🐦', - '🐤', - '🐣', - '🐥', - '🦆', - '🦢', - '🦅', - '🦉', - '🦚', - '🦜', - '🦇', - '🐺', - '🐗', - '🐴', - '🦄', - '🐝', - '🐛', - '🦋', - '🐌', - '🐚', - '🐞', - '🐜', - '🦗', - '🕷', - '🕸', - '🦂', - '🦟', - '🦠', - '🐢', - '🐍', - '🦎', - '🦖', - '🦕', - '🐙', - '🦑', - '🦐', - '🦀', - '🐡', - '🐠', - '🐟', - '🐬', - '🐳', - '🐋', - '🦈', - '🐊', - '🐅', - '🐆', - '🦓', - '🦍', - '🐘', - '🦏', - '🦛', - '🐪', - '🐫', - '🦙', - '🦒', - '🐃', - '🐂', - '🐄', - '🐎', - '🐖', - '🐏', - '🐑', - '🐐', - '🦌', - '🐕', - '🐩', - '🐈', - '🐓', - '🦃', - '🕊', - '🐇', - '🐁', - '🐀', - '🐿', - '🦔', - '🐾', - '🐉', - '🐲', - '🌵', - '🎄', - '🌲', - '🌳', - '🌴', - '🌱', - '🌿', - '☘️', - '🍀', - '🎍', - '🎋', - '🍃', - '🍂', - '🍁', - '🍄', - '🌾', - '💐', - '🌷', - '🌹', - '🥀', - '🌺', - '🌸', - '🌼', - '🌻', - '🌞', - '🌝', - '🌛', - '🌜', - '🌚', - '🌕', - '🌖', - '🌗', - '🌘', - '🌑', - '🌒', - '🌓', - '🌔', - '🌙', - '🌎', - '🌍', - '🌏', - '💫', - '⭐️', - '🌟', - '✨', - '⚡️', - '☄️', - '💥', - '🔥', - '🌪', - '🌈', - '☀️', - '🌤', - '⛅️', - '🌥', - '☁️', - '🌦', - '🌧', - '⛈', - '🌩', - '🌨', - '❄️', - '☃️', - '⛄️', - '🌬', - '💨', - '💧', - '💦', - '☔️', - '☂️', - '🌊', - '🌫', - '🍏', - '🍎', - '🍐', - '🍊', - '🍋', - '🍌', - '🍉', - '🍇', - '🍓', - '🍈', - '🍒', - '🍑', - '🍍', - '🥭', - '🥥', - '🥝', - '🍅', - '🍆', - '🥑', - '🥦', - '🥒', - '🥬', - '🌶', - '🌽', - '🥕', - '🥔', - '🍠', - '🥐', - '🍞', - '🥖', - '🥨', - '🥯', - '🧀', - '🥚', - '🍳', - '🥞', - '🥓', - '🥩', - '🍗', - '🍖', - '🌭', - '🍔', - '🍟', - '🍕', - '🥪', - '🥙', - '🌮', - '🌯', - '🥗', - '🥘', - '🥫', - '🍝', - '🍜', - '🍲', - '🍛', - '🍣', - '🍱', - '🥟', - '🍤', - '🍙', - '🍚', - '🍘', - '🍥', - '🥮', - '🥠', - '🍢', - '🍡', - '🍧', - '🍨', - '🍦', - '🥧', - '🍰', - '🎂', - '🍮', - '🍭', - '🍬', - '🍫', - '🍿', - '🧂', - '🍩', - '🍪', - '🌰', - '🥜', - '🍯', - '🥛', - '🍼', - '☕️', - '🍵', - '🥤', - '🍶', - '🍺', - '🍻', - '🥂', - '🍷', - '🥃', - '🍸', - '🍹', - '🍾', - '🥄', - '🍴', - '🍽', - '🥣', - '🥡', - '🥢', - '⚽️', - '🏀', - '🏈', - '⚾️', - '🥎', - '🏐', - '🏉', - '🎾', - '🥏', - '🎱', - '🏓', - '🏸', - '🥅', - '🏒', - '🏑', - '🥍', - '🏏', - '⛳️', - '🏹', - '🎣', - '🥊', - '🥋', - '🎽', - '⛸', - '🥌', - '🛷', - '🛹', - '🎿', - '⛷', - '🏂', - '🏋️‍♀️', - '🏋🏻‍♀️', - '🏋🏼‍♀️', - '🏋🏽‍♀️', - '🏋🏾‍♀️', - '🏋🏿‍♀️', - '🏋️‍♂️', - '🏋🏻‍♂️', - '🏋🏼‍♂️', - '🏋🏽‍♂️', - '🏋🏾‍♂️', - '🏋🏿‍♂️', - '🤼‍♀️', - '🤼‍♂️', - '🤸‍♀️', - '🤸🏻‍♀️', - '🤸🏼‍♀️', - '🤸🏽‍♀️', - '🤸🏾‍♀️', - '🤸🏿‍♀️', - '🤸‍♂️', - '🤸🏻‍♂️', - '🤸🏼‍♂️', - '🤸🏽‍♂️', - '🤸🏾‍♂️', - '🤸🏿‍♂️', - '⛹️‍♀️', - '⛹🏻‍♀️', - '⛹🏼‍♀️', - '⛹🏽‍♀️', - '⛹🏾‍♀️', - '⛹🏿‍♀️', - '⛹️‍♂️', - '⛹🏻‍♂️', - '⛹🏼‍♂️', - '⛹🏽‍♂️', - '⛹🏾‍♂️', - '⛹🏿‍♂️', - '🤺', - '🤾‍♀️', - '🤾🏻‍♀️', - '🤾🏼‍♀️', - '🤾🏾‍♀️', - '🤾🏾‍♀️', - '🤾🏿‍♀️', - '🤾‍♂️', - '🤾🏻‍♂️', - '🤾🏼‍♂️', - '🤾🏽‍♂️', - '🤾🏾‍♂️', - '🤾🏿‍♂️', - '🏌️‍♀️', - '🏌🏻‍♀️', - '🏌🏼‍♀️', - '🏌🏽‍♀️', - '🏌🏾‍♀️', - '🏌🏿‍♀️', - '🏌️‍♂️', - '🏌🏻‍♂️', - '🏌🏼‍♂️', - '🏌🏽‍♂️', - '🏌🏾‍♂️', - '🏌🏿‍♂️', - '🏇', - '🏇🏻', - '🏇🏼', - '🏇🏽', - '🏇🏾', - '🏇🏿', - '🧘‍♀️', - '🧘🏻‍♀️', - '🧘🏼‍♀️', - '🧘🏽‍♀️', - '🧘🏾‍♀️', - '🧘🏿‍♀️', - '🧘‍♂️', - '🧘🏻‍♂️', - '🧘🏼‍♂️', - '🧘🏽‍♂️', - '🧘🏾‍♂️', - '🧘🏿‍♂️', - '🏄‍♀️', - '🏄🏻‍♀️', - '🏄🏼‍♀️', - '🏄🏽‍♀️', - '🏄🏾‍♀️', - '🏄🏿‍♀️', - '🏄‍♂️', - '🏄🏻‍♂️', - '🏄🏼‍♂️', - '🏄🏽‍♂️', - '🏄🏾‍♂️', - '🏄🏿‍♂️', - '🏊‍♀️', - '🏊🏻‍♀️', - '🏊🏼‍♀️', - '🏊🏽‍♀️', - '🏊🏾‍♀️', - '🏊🏿‍♀️', - '🏊‍♂️', - '🏊🏻‍♂️', - '🏊🏼‍♂️', - '🏊🏽‍♂️', - '🏊🏾‍♂️', - '🏊🏿‍♂️', - '🤽‍♀️', - '🤽🏻‍♀️', - '🤽🏼‍♀️', - '🤽🏽‍♀️', - '🤽🏾‍♀️', - '🤽🏿‍♀️', - '🤽‍♂️', - '🤽🏻‍♂️', - '🤽🏼‍♂️', - '🤽🏽‍♂️', - '🤽🏾‍♂️', - '🤽🏿‍♂️', - '🚣‍♀️', - '🚣🏻‍♀️', - '🚣🏼‍♀️', - '🚣🏽‍♀️', - '🚣🏾‍♀️', - '🚣🏿‍♀️', - '🚣‍♂️', - '🚣🏻‍♂️', - '🚣🏼‍♂️', - '🚣🏽‍♂️', - '🚣🏾‍♂️', - '🚣🏿‍♂️', - '🧗‍♀️', - '🧗🏻‍♀️', - '🧗🏼‍♀️', - '🧗🏽‍♀️', - '🧗🏾‍♀️', - '🧗🏿‍♀️', - '🧗‍♂️', - '🧗🏻‍♂️', - '🧗🏼‍♂️', - '🧗🏽‍♂️', - '🧗🏾‍♂️', - '🧗🏿‍♂️', - '🚵‍♀️', - '🚵🏻‍♀️', - '🚵🏼‍♀️', - '🚵🏽‍♀️', - '🚵🏾‍♀️', - '🚵🏿‍♀️', - '🚵‍♂️', - '🚵🏻‍♂️', - '🚵🏼‍♂️', - '🚵🏽‍♂️', - '🚵🏾‍♂️', - '🚵🏿‍♂️', - '🚴‍♀️', - '🚴🏻‍♀️', - '🚴🏼‍♀️', - '🚴🏽‍♀️', - '🚴🏾‍♀️', - '🚴🏿‍♀️', - '🚴‍♂️', - '🚴🏻‍♂️', - '🚴🏼‍♂️', - '🚴🏽‍♂️', - '🚴🏾‍♂️', - '🚴🏿‍♂️', - '🏆', - '🥇', - '🥈', - '🥉', - '🏅', - '🎖', - '🏵', - '🎗', - '🎫', - '🎟', - '🎪', - '🤹‍♀️', - '🤹🏻‍♀️', - '🤹🏼‍♀️', - '🤹🏽‍♀️', - '🤹🏾‍♀️', - '🤹🏿‍♀️', - '🤹‍♂️', - '🤹🏻‍♂️', - '🤹🏼‍♂️', - '🤹🏽‍♂️', - '🤹🏾‍♂️', - '🤹🏿‍♂️', - '🎭', - '🎨', - '🎬', - '🎤', - '🎧', - '🎼', - '🎹', - '🥁', - '🎷', - '🎺', - '🎸', - '🎻', - '🎲', - '🧩', - '♟', - '🎯', - '🎳', - '🎮', - '🎰', - '🚗', - '🚕', - '🚙', - '🚌', - '🚎', - '🏎', - '🚓', - '🚑', - '🚒', - '🚐', - '🚚', - '🚛', - '🚜', - '🛴', - '🚲', - '🛵', - '🏍', - '🚨', - '🚔', - '🚍', - '🚘', - '🚖', - '🚡', - '🚠', - '🚟', - '🚃', - '🚋', - '🚞', - '🚝', - '🚄', - '🚅', - '🚈', - '🚂', - '🚆', - '🚇', - '🚊', - '🚉', - '✈️', - '🛫', - '🛬', - '🛩', - '💺', - '🛰', - '🚀', - '🛸', - '🚁', - '🛶', - '⛵️', - '🚤', - '🛥', - '🛳', - '⛴', - '🚢', - '⚓️', - '⛽️', - '🚧', - '🚦', - '🚥', - '🚏', - '🗺', - '🗿', - '🗽', - '🗼', - '🏰', - '🏯', - '🏟', - '🎡', - '🎢', - '🎠', - '⛲️', - '⛱', - '🏖', - '🏝', - '🏜', - '🌋', - '⛰', - '🏔', - '🗻', - '🏕', - '⛺️', - '🏠', - '🏡', - '🏘', - '🏚', - '🏗', - '🏭', - '🏢', - '🏬', - '🏣', - '🏤', - '🏥', - '🏦', - '🏨', - '🏪', - '🏫', - '🏩', - '💒', - '🏛', - '⛪️', - '🕌', - '🕍', - '🕋', - '⛩', - '🛤', - '🛣', - '🗾', - '🎑', - '🏞', - '🌅', - '🌄', - '🌠', - '🎇', - '🎆', - '🌇', - '🌆', - '🏙', - '🌃', - '🌌', - '🌉', - '🌁', - '⌚️', - '📱', - '📲', - '💻', - '⌨️', - '🖥', - '🖨', - '🖱', - '🖲', - '🕹', - '🗜', - '💽', - '💾', - '💿', - '📀', - '📼', - '📷', - '📸', - '📹', - '🎥', - '📽', - '🎞', - '📞', - '☎️', - '📟', - '📠', - '📺', - '📻', - '🎙', - '🎚', - '🎛', - '⏱', - '⏲', - '⏰', - '🕰', - '⌛️', - '⏳', - '📡', - '🔋', - '🔌', - '💡', - '🔦', - '🕯', - '🗑', - '🛢', - '💸', - '💵', - '💴', - '💶', - '💷', - '💰', - '💳', - '🧾', - '💎', - '⚖️', - '🔧', - '🔨', - '⚒', - '🛠', - '⛏', - '🔩', - '⚙️', - '⛓', - '🔫', - '💣', - '🔪', - '🗡', - '⚔️', - '🛡', - '🚬', - '⚰️', - '⚱️', - '🏺', - '🧭', - '🧱', - '🔮', - '🧿', - '🧸', - '📿', - '💈', - '⚗️', - '🔭', - '🧰', - '🧲', - '🧪', - '🧫', - '🧬', - '🧯', - '🔬', - '🕳', - '💊', - '💉', - '🌡', - '🚽', - '🚰', - '🚿', - '🛁', - '🛀', - '🛀🏻', - '🛀🏼', - '🛀🏽', - '🛀🏾', - '🛀🏿', - '🧴', - '🧵', - '🧶', - '🧷', - '🧹', - '🧺', - '🧻', - '🧼', - '🧽', - '🛎', - '🔑', - '🗝', - '🚪', - '🛋', - '🛏', - '🛌', - '🖼', - '🛍', - '🧳', - '🛒', - '🎁', - '🎈', - '🎏', - '🎀', - '🎊', - '🎉', - '🧨', - '🎎', - '🏮', - '🎐', - '🧧', - '✉️', - '📩', - '📨', - '📧', - '💌', - '📥', - '📤', - '📦', - '🏷', - '📪', - '📫', - '📬', - '📭', - '📮', - '📯', - '📜', - '📃', - '📄', - '📑', - '📊', - '📈', - '📉', - '🗒', - '🗓', - '📆', - '📅', - '📇', - '🗃', - '🗳', - '🗄', - '📋', - '📁', - '📂', - '🗂', - '🗞', - '📰', - '📓', - '📔', - '📒', - '📕', - '📗', - '📘', - '📙', - '📚', - '📖', - '🔖', - '🔗', - '📎', - '🖇', - '📐', - '📏', - '📌', - '📍', - '✂️', - '🖊', - '🖋', - '✒️', - '🖌', - '🖍', - '📝', - '✏️', - '🔍', - '🔎', - '🔏', - '🔐', - '🔒', - '🔓', - '❤️', - '🧡', - '💛', - '💚', - '💙', - '💜', - '🖤', - '💔', - '❣️', - '💕', - '💞', - '💓', - '💗', - '💖', - '💘', - '💝', - '💟', - '☮️', - '✝️', - '☪️', - '🕉', - '☸️', - '✡️', - '🔯', - '🕎', - '☯️', - '☦️', - '🛐', - '⛎', - '♈️', - '♉️', - '♊️', - '♋️', - '♌️', - '♍️', - '♎️', - '♏️', - '♐️', - '♑️', - '♒️', - '♓️', - '🆔', - '⚛️', - '🉑', - '☢️', - '☣️', - '📴', - '📳', - '🈶', - '🈚️', - '🈸', - '🈺', - '🈷️', - '✴️', - '🆚', - '💮', - '🉐', - '㊙️', - '㊗️', - '🈴', - '🈵', - '🈹', - '🈲', - '🅰️', - '🅱️', - '🆎', - '🆑', - '🅾️', - '🆘', - '❌', - '⭕️', - '🛑', - '⛔️', - '📛', - '🚫', - '💯', - '💢', - '♨️', - '🚷', - '🚯', - '🚳', - '🚱', - '🔞', - '📵', - '🚭', - '❗️', - '❕', - '❓', - '❔', - '‼️', - '⁉️', - '🔅', - '🔆', - '〽️', - '⚠️', - '🚸', - '🔱', - '⚜️', - '🔰', - '♻️', - '✅', - '🈯️', - '💹', - '❇️', - '✳️', - '❎', - '🌐', - '💠', - 'Ⓜ️', - '🌀', - '💤', - '🏧', - '🚾', - '♿️', - '🅿️', - '🈳', - '🈂️', - '🛂', - '🛃', - '🛄', - '🛅', - '🚹', - '🚺', - '🚼', - '🚻', - '🚮', - '🎦', - '📶', - '🈁', - '🔣', - 'ℹ️', - '🔤', - '🔡', - '🔠', - '🆖', - '🆗', - '🆙', - '🆒', - '🆕', - '🆓', - '0️⃣', - '1️⃣', - '2️⃣', - '3️⃣', - '4️⃣', - '5️⃣', - '6️⃣', - '7️⃣', - '8️⃣', - '9️⃣', - '🔟', - '🔢', - '#️⃣', - '*️⃣', - '⏏️', - '▶️', - '⏸', - '⏯', - '⏹', - '⏺', - '⏭', - '⏮', - '⏩', - '⏪', - '⏫', - '⏬', - '◀️', - '🔼', - '🔽', - '➡️', - '⬅️', - '⬆️', - '⬇️', - '↗️', - '↘️', - '↙️', - '↖️', - '↕️', - '↔️', - '↪️', - '↩️', - '⤴️', - '⤵️', - '🔀', - '🔁', - '🔂', - '🔄', - '🔃', - '🎵', - '🎶', - '➕', - '➖', - '➗', - '✖️', - '♾', - '💲', - '💱', - '™️', - '©️', - '®️', - '〰️', - '➰', - '➿', - '🔚', - '🔙', - '🔛', - '🔝', - '🔜', - '✔️', - '☑️', - '🔘', - '⚪️', - '⚫️', - '🔴', - '🔵', - '🔺', - '🔻', - '🔸', - '🔹', - '🔶', - '🔷', - '🔳', - '🔲', - '▪️', - '▫️', - '◾️', - '◽️', - '◼️', - '◻️', - '⬛️', - '⬜️', - '🔈', - '🔇', - '🔉', - '🔊', - '🔔', - '🔕', - '📣', - '📢', - '👁‍🗨', - '💬', - '💭', - '🗯', - '♠️', - '♣️', - '♥️', - '♦️', - '🃏', - '🎴', - '🀄️', - '🕐', - '🕑', - '🕒', - '🕓', - '🕔', - '🕕', - '🕖', - '🕗', - '🕘', - '🕙', - '🕚', - '🕛', - '🕜', - '🕝', - '🕞', - '🕟', - '🕠', - '🕡', - '🕢', - '🕣', - '🕤', - '🕥', - '🕦', - '🕧', - '🏳️', - '🏴', - '🏁', - '🚩', - '🏳️‍🌈', - '🏴‍☠️', - '🇦🇫', - '🇦🇽', - '🇦🇱', - '🇩🇿', - '🇦🇸', - '🇦🇩', - '🇦🇴', - '🇦🇮', - '🇦🇶', - '🇦🇬', - '🇦🇷', - '🇦🇲', - '🇦🇼', - '🇦🇺', - '🇦🇹', - '🇦🇿', - '🇧🇸', - '🇧🇭', - '🇧🇩', - '🇧🇧', - '🇧🇾', - '🇧🇪', - '🇧🇿', - '🇧🇯', - '🇧🇲', - '🇧🇹', - '🇧🇴', - '🇧🇦', - '🇧🇼', - '🇧🇷', - '🇮🇴', - '🇻🇬', - '🇧🇳', - '🇧🇬', - '🇧🇫', - '🇧🇮', - '🇰🇭', - '🇨🇲', - '🇨🇦', - '🇮🇨', - '🇨🇻', - '🇧🇶', - '🇰🇾', - '🇨🇫', - '🇹🇩', - '🇨🇱', - '🇨🇳', - '🇨🇽', - '🇨🇨', - '🇨🇴', - '🇰🇲', - '🇨🇬', - '🇨🇩', - '🇨🇰', - '🇨🇷', - '🇨🇮', - '🇭🇷', - '🇨🇺', - '🇨🇼', - '🇨🇾', - '🇨🇿', - '🇩🇰', - '🇩🇯', - '🇩🇲', - '🇩🇴', - '🇪🇨', - '🇪🇬', - '🇸🇻', - '🇬🇶', - '🇪🇷', - '🇪🇪', - '🇪🇹', - '🇪🇺', - '🇫🇰', - '🇫🇴', - '🇫🇯', - '🇫🇮', - '🇫🇷', - '🇬🇫', - '🇵🇫', - '🇹🇫', - '🇬🇦', - '🇬🇲', - '🇬🇪', - '🇩🇪', - '🇬🇭', - '🇬🇮', - '🇬🇷', - '🇬🇱', - '🇬🇩', - '🇬🇵', - '🇬🇺', - '🇬🇹', - '🇬🇬', - '🇬🇳', - '🇬🇼', - '🇬🇾', - '🇭🇹', - '🇭🇳', - '🇭🇰', - '🇭🇺', - '🇮🇸', - '🇮🇳', - '🇮🇩', - '🇮🇷', - '🇮🇶', - '🇮🇪', - '🇮🇲', - '🇮🇱', - '🇮🇹', - '🇯🇲', - '🇯🇵', - '🎌', - '🇯🇪', - '🇯🇴', - '🇰🇿', - '🇰🇪', - '🇰🇮', - '🇽🇰', - '🇰🇼', - '🇰🇬', - '🇱🇦', - '🇱🇻', - '🇱🇧', - '🇱🇸', - '🇱🇷', - '🇱🇾', - '🇱🇮', - '🇱🇹', - '🇱🇺', - '🇲🇴', - '🇲🇰', - '🇲🇬', - '🇲🇼', - '🇲🇾', - '🇲🇻', - '🇲🇱', - '🇲🇹', - '🇲🇭', - '🇲🇶', - '🇲🇷', - '🇲🇺', - '🇾🇹', - '🇲🇽', - '🇫🇲', - '🇲🇩', - '🇲🇨', - '🇲🇳', - '🇲🇪', - '🇲🇸', - '🇲🇦', - '🇲🇿', - '🇲🇲', - '🇳🇦', - '🇳🇷', - '🇳🇵', - '🇳🇱', - '🇳🇨', - '🇳🇿', - '🇳🇮', - '🇳🇪', - '🇳🇬', - '🇳🇺', - '🇳🇫', - '🇰🇵', - '🇲🇵', - '🇳🇴', - '🇴🇲', - '🇵🇰', - '🇵🇼', - '🇵🇸', - '🇵🇦', - '🇵🇬', - '🇵🇾', - '🇵🇪', - '🇵🇭', - '🇵🇳', - '🇵🇱', - '🇵🇹', - '🇵🇷', - '🇶🇦', - '🇷🇪', - '🇷🇴', - '🇷🇺', - '🇷🇼', - '🇼🇸', - '🇸🇲', - '🇸🇦', - '🇸🇳', - '🇷🇸', - '🇸🇨', - '🇸🇱', - '🇸🇬', - '🇸🇽', - '🇸🇰', - '🇸🇮', - '🇬🇸', - '🇸🇧', - '🇸🇴', - '🇿🇦', - '🇰🇷', - '🇸🇸', - '🇪🇸', - '🇱🇰', - '🇧🇱', - '🇸🇭', - '🇰🇳', - '🇱🇨', - '🇵🇲', - '🇻🇨', - '🇸🇩', - '🇸🇷', - '🇸🇿', - '🇸🇪', - '🇨🇭', - '🇸🇾', - '🇹🇼', - '🇹🇯', - '🇹🇿', - '🇹🇭', - '🇹🇱', - '🇹🇬', - '🇹🇰', - '🇹🇴', - '🇹🇹', - '🇹🇳', - '🇹🇷', - '🇹🇲', - '🇹🇨', - '🇹🇻', - '🇻🇮', - '🇺🇬', - '🇺🇦', - '🇦🇪', - '🇬🇧', - '🏴󠁧󠁢󠁥󠁮󠁧󠁿', - '🏴󠁧󠁢󠁳󠁣󠁴󠁿', - '🏴󠁧󠁢󠁷󠁬󠁳󠁿', - '🇺🇳', - '🇺🇸', - '🇺🇾', - '🇺🇿', - '🇻🇺', - '🇻🇦', - '🇻🇪', - '🇻🇳', - '🇼🇫', - '🇪🇭', - '🇾🇪', - '🇿🇲', - '🇿🇼', - '🥱', - '🤏', - '🦾', - '🦿', - '🦻', - '🧏', - '🧏‍♂️', - '🧏‍♀️', - '🧍', - '🧍‍♂️', - '🧍‍♀️', - '🧎', - '🧎‍♂️', - '🧎‍♀️', - '👨‍🦯', - '👩‍🦯', - '👨‍🦼', - '👩‍🦼', - '👨‍🦽', - '👩‍🦽', - '🦧', - '🦮', - '🐕‍🦺', - '🦥', - '🦦', - '🦨', - '🦩', - '🧄', - '🧅', - '🧇', - '🧆', - '🧈', - '🦪', - '🧃', - '🧉', - '🧊', - '🛕', - '🦽', - '🦼', - '🛺', - '🪂', - '🪐', - '🤿', - '🪀', - '🪁', - '🦺', - '🥻', - '🩱', - '🩲', - '🩳', - '🩰', - '🪕', - '🪔', - '🪓', - '🦯', - '🩸', - '🩹', - '🩺', - '🪑', - '🪒', - '🤎', - '🤍', - '🟠', - '🟡', - '🟢', - '🟣', - '🟤', - '🟥', - '🟧', - '🟨', - '🟩', - '🟦', - '🟪', - '🟫' -] diff --git a/packages/frontend/src/main/toolbars/BranchToolbar.vue b/packages/frontend/src/main/toolbars/BranchToolbar.vue deleted file mode 100644 index 0559971ae..000000000 --- a/packages/frontend/src/main/toolbars/BranchToolbar.vue +++ /dev/null @@ -1,119 +0,0 @@ - - diff --git a/packages/frontend/src/main/toolbars/CommitToolbar.vue b/packages/frontend/src/main/toolbars/CommitToolbar.vue deleted file mode 100644 index b211496d5..000000000 --- a/packages/frontend/src/main/toolbars/CommitToolbar.vue +++ /dev/null @@ -1,187 +0,0 @@ - - diff --git a/packages/frontend/src/main/toolbars/MultipleResourcesToolbar.vue b/packages/frontend/src/main/toolbars/MultipleResourcesToolbar.vue deleted file mode 100644 index eef934856..000000000 --- a/packages/frontend/src/main/toolbars/MultipleResourcesToolbar.vue +++ /dev/null @@ -1,48 +0,0 @@ - - diff --git a/packages/frontend/src/main/toolbars/ObjectToolbar.vue b/packages/frontend/src/main/toolbars/ObjectToolbar.vue deleted file mode 100644 index e3df38601..000000000 --- a/packages/frontend/src/main/toolbars/ObjectToolbar.vue +++ /dev/null @@ -1,74 +0,0 @@ - - diff --git a/packages/frontend/src/main/toolbars/StreamToolbar.vue b/packages/frontend/src/main/toolbars/StreamToolbar.vue deleted file mode 100644 index fa556c34b..000000000 --- a/packages/frontend/src/main/toolbars/StreamToolbar.vue +++ /dev/null @@ -1,94 +0,0 @@ - - diff --git a/packages/frontend/src/main/utils/portalStateManager.ts b/packages/frontend/src/main/utils/portalStateManager.ts deleted file mode 100644 index c44fe7c8d..000000000 --- a/packages/frontend/src/main/utils/portalStateManager.ts +++ /dev/null @@ -1,213 +0,0 @@ -import Vue, { computed, onMounted, onBeforeUnmount } from 'vue' -import { camelCase, upperFirst, reduce } from 'lodash' -import { Optional, CombinedVueInstance, ExtendedVue } from '@/helpers/typeHelpers' - -export const STANDARD_PORTAL_KEYS = { - Toolbar: 'toolbar', - Actions: 'actions', - Nav: 'nav', - SubnavAdmin: 'subnav-admin' -} - -/** - * We currently have multiple sources trying to use the same destination, which usually - * results in the source being chosen at random. To solve this, we're using this custom portal state - * manager which manages multiple claims to the same portal space and only allows one source to use it at a time. - */ - -const claims: Record> = {} - -const portalsState = Vue.observable({ - currentPortals: {} as Record -}) - -function recalculateState() { - const newPortals: Record = {} - for (const [portalKey, portalClaims] of Object.entries(claims)) { - let highestPriority: Optional<{ - identity: string - priority: number - }> = undefined - for (const [identity, data] of Object.entries(portalClaims)) { - if (!highestPriority || data.priority > highestPriority.priority) { - highestPriority = { priority: data.priority, identity } - } else if ( - highestPriority.priority === data.priority && - highestPriority.identity === identity - ) { - console.error( - 'Multiple portals with the same priority encountered, your portals might not act deterministically' - ) - } - } - - if (highestPriority?.identity) { - newPortals[portalKey] = highestPriority.identity - } - } - - Vue.set(portalsState, 'currentPortals', newPortals) -} - -/** - * Claim access to a specific toolbar - */ -export function claimPortal(portal: string, identity: string, priority: number) { - // Register claim - if (!claims[portal]) { - claims[portal] = {} - } - - claims[portal][identity] = { priority } - - recalculateState() -} - -/** - * Claim access to multiple toolbars - */ -export function claimPortals(portals: string[], identity: string, priority: number) { - for (const portal of portals) { - claimPortal(portal, identity, priority) - } -} - -/** - * Remove claim to a specific toolbar - */ -export function unclaimPortal(portal: string, identity: string) { - if (claims[portal]) { - delete claims[portal][identity] - } - recalculateState() -} - -/** - * Remove claims to multiple toolbars - */ -export function unclaimPortals(portals: string[], identity: string) { - for (const portal of portals) { - unclaimPortal(portal, identity) - } -} - -/** - * Check if portal source is allowed to render in the target portal - */ -export function canRenderPortalSource(portal: string, identity: string): boolean { - return portalsState.currentPortals[portal] === identity -} - -/** - * Build mixin for tracking whether portal targets can be rendered to - * @param portals Portal identifier keys - * @param identity The unique identity of the portal source - * @param priority Priority starting from 0. Higher priorities will take precedence - * over other portal sources. - */ -export function buildPortalStateMixin( - portals: string[], - identity: string, - priority: number -): ExtendedVue< - Vue, - unknown, - unknown, - { - allowedPortals: Record - canRenderToolbarPortal?: boolean - canRenderActionsPortal?: boolean - canRenderNavPortal?: boolean - canRenderSubnavPortal?: boolean - } -> { - return Vue.extend({ - computed: { - /** - * Object with keys of portal names and values representing if the component - * is allowed to use those portals - */ - allowedPortals() { - const res: Record = {} - for (const portal of portals) { - res[portal] = portalsState.currentPortals[portal] === identity - } - return res - }, - - /** - * Dynamically generates `canRenderXPortal` computeds - */ - ...reduce( - portals, - (res, portal) => { - const computedKey = `canRender${upperFirst(camelCase(portal))}Portal` - res[computedKey] = function ( - this: CombinedVueInstance< - Vue, - unknown, - unknown, - { allowedPortals: Record } - > - ) { - return !!this.allowedPortals[portal] - } - return res - }, - {} as Record boolean> - ) - }, - mounted() { - claimPortals(portals, identity, priority) - }, - beforeDestroy() { - unclaimPortals(portals, identity) - } - }) -} - -/** - * Composition API version of the portal state mixin - tracks whether portal targets can be rendered to - * @param portals Portal identifier keys - * @param identity The unique identity of the portal source - * @param priority Priority starting from 0. Higher priorities will take precedence - * over other portal sources. - */ -export function usePortalState(portals: string[], identity: string, priority: number) { - const allowedPortals = computed(() => { - const res: Record = {} - for (const portal of portals) { - res[portal] = portalsState.currentPortals[portal] === identity - } - return res - }) - - const canRenderToolbarPortal = computed( - () => !!allowedPortals.value[STANDARD_PORTAL_KEYS.Toolbar] - ) - const canRenderActionsPortal = computed( - () => !!allowedPortals.value[STANDARD_PORTAL_KEYS.Actions] - ) - const canRenderNavPortal = computed( - () => !!allowedPortals.value[STANDARD_PORTAL_KEYS.Nav] - ) - const canRenderSubnavPortal = computed( - () => !!allowedPortals.value[STANDARD_PORTAL_KEYS.SubnavAdmin] - ) - - onMounted(() => { - claimPortals(portals, identity, priority) - }) - - onBeforeUnmount(() => { - unclaimPortals(portals, identity) - }) - - return { - allowedPortals, - canRenderToolbarPortal, - canRenderActionsPortal, - canRenderNavPortal, - canRenderSubnavPortal - } -} diff --git a/packages/frontend/src/main/utils/themeStateManager.js b/packages/frontend/src/main/utils/themeStateManager.js deleted file mode 100644 index e70d3b0c0..000000000 --- a/packages/frontend/src/main/utils/themeStateManager.js +++ /dev/null @@ -1,39 +0,0 @@ -import { AppLocalStorage } from '@/utils/localStorage' -import Vue from 'vue' - -/** - * Global theme state manager with persistance to localStorage - */ - -const LOCAL_STORAGE_KEY = 'darkModeEnabled' -const THEME_DARK = 'dark' -const THEME_LIGHT = 'light' - -const themeState = Vue.observable({ - dark: false -}) - -export function setDarkTheme(val, save = false) { - themeState.dark = !!val - - if (!save) return - AppLocalStorage.set(LOCAL_STORAGE_KEY, val ? THEME_DARK : THEME_LIGHT) -} - -export function isDarkTheme() { - return !!themeState.dark -} - -export function initialize() { - const storageSetting = AppLocalStorage.get(LOCAL_STORAGE_KEY) - if (storageSetting) { - setDarkTheme(storageSetting === THEME_DARK) - return - } - - const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)').matches - if (darkMediaQuery) { - setDarkTheme(true) - return - } -} diff --git a/packages/frontend/src/mixpanelManager.ts b/packages/frontend/src/mixpanelManager.ts deleted file mode 100644 index 04e2e993d..000000000 --- a/packages/frontend/src/mixpanelManager.ts +++ /dev/null @@ -1,102 +0,0 @@ -/* eslint-disable camelcase */ -import mixpanel, { OverridedMixpanel } from 'mixpanel-browser' -import { Optional } from '@/helpers/typeHelpers' -import { AppLocalStorage } from '@/utils/localStorage' -import * as ThemeStateManager from '@/main/utils/themeStateManager' -import { intersection, mapKeys } from 'lodash' -import { resolveMixpanelServerId } from '@speckle/shared' - -let mixpanelInitialized = false - -const campaignKeywords = [ - 'utm_source', - 'utm_medium', - 'utm_campaign', - 'utm_content', - 'utm_term' -] - -function collectUtmTags() { - const currentUrl = new URL(window.location.href) - const foundParams = intersection( - [...currentUrl.searchParams.keys()], - campaignKeywords - ) - - const result: Record = {} - for (const campaignParam of foundParams) { - const value = currentUrl.searchParams.get(campaignParam) - if (!value) continue - result[campaignParam] = value - } - - return result -} - -/** - * Get mixpanel user ID, if user is authenticated and can be identified, or undefined otherwise - */ -export function getMixpanelUserId(): Optional { - return AppLocalStorage.get('distinct_id') || undefined -} - -/** - * Get mixpanel server identifier - */ -export function getMixpanelServerId(): string { - return resolveMixpanelServerId(window.location.hostname) -} - -/** - * Get current mixpanel instance - */ -export function getMixpanel(): OverridedMixpanel { - if (!mixpanelInitialized) { - throw new Error('Attempting to use uninitialized mixpanel instance') - } - - return mixpanel -} - -/** - * Initialize MixPanel & identify user - */ -export function initialize(params: { - hostApp: string - hostAppDisplayName: string -}): void { - const mp = mixpanel - const { hostApp, hostAppDisplayName } = params - - // Register session - const serverId = getMixpanelServerId() - mp.register({ - server_id: serverId, - hostApp - }) - - // Identify user, if any - const userId = getMixpanelUserId() - if (userId) { - mp.identify(userId) - mp.people.set('Identified', true) - mp.people.set('Theme Web', ThemeStateManager.isDarkTheme() ? 'dark' : 'light') - mp.add_group('server_id', serverId) - } - - // Track UTM - const utmParams = collectUtmTags() - if (Object.values(utmParams).length) { - const firstTouch = mapKeys(utmParams, (_val, key) => `${key} [first touch]`) - const lastTouch = mapKeys(utmParams, (_val, key) => `${key} [last touch]`) - - mp.people.set(lastTouch) - mp.people.set_once(firstTouch) - mp.register(lastTouch) - } - - // Track app visit - mp.track(`Visit ${hostAppDisplayName}`) - - mixpanelInitialized = true -} diff --git a/packages/frontend/src/plugins/authHelpers.js b/packages/frontend/src/plugins/authHelpers.js deleted file mode 100644 index 83f807bf9..000000000 --- a/packages/frontend/src/plugins/authHelpers.js +++ /dev/null @@ -1,146 +0,0 @@ -import { mainUserDataQuery } from '@/graphql/user' -import { LocalStorageKeys } from '@/helpers/mainConstants' -import { InvalidAuthTokenError } from '@/main/lib/auth/errors' -import { VALID_EMAIL_REGEX } from '@/main/lib/common/vuetify/validators' -import { AppLocalStorage } from '@/utils/localStorage' -import { has } from 'lodash' -import { deletePostAuthRedirect } from '@/main/lib/auth/utils/postAuthRedirectManager' -import { resolveMixpanelUserId } from '@speckle/shared' -import { convertThrowIntoFetchResult } from '@/main/lib/common/apollo/helpers/apolloOperationHelper' - -const appId = 'spklwebapp' -const appSecret = 'spklwebapp' - -export function getAuthToken() { - return AppLocalStorage.get(LocalStorageKeys.AuthToken) -} - -/** - * Checks for an access token in the url and tries to exchange it for a token/refresh pair. - * @return {Promise} true if everything is ok, otherwise throws an error. - */ -export async function checkAccessCodeAndGetTokens() { - const accessCode = new URLSearchParams(window.location.search).get('access_code') - if (!accessCode) return false - - const response = await getTokenFromAccessCode(accessCode) - if (has(response, 'token')) { - AppLocalStorage.set(LocalStorageKeys.AuthToken, response.token) - AppLocalStorage.set(LocalStorageKeys.RefreshToken, response.refreshToken) - return true - } -} - -/** - * Gets the user id and sets it in localStorage - * @param {import('@apollo/client/core').ApolloClient} apolloClient - * @return {Promise} The full graphql response. - */ -export async function prefetchUserAndSetID(apolloClient) { - const token = AppLocalStorage.get(LocalStorageKeys.AuthToken) - if (!token) return - - // Pull user info (& remember it in the Apollo cache) - const { data } = await apolloClient - .query({ - query: mainUserDataQuery - }) - .catch(convertThrowIntoFetchResult) - - const user = data?.activeUser - if (user) { - const distinctId = resolveMixpanelUserId(user.email) - AppLocalStorage.set('distinct_id', distinctId) - AppLocalStorage.set('uuid', user.id) - AppLocalStorage.set('stcount', user.streams.totalCount) - return data - } else { - await signOut().catch(console.error) - throw new InvalidAuthTokenError() - } -} - -export async function getTokenFromAccessCode(accessCode) { - const response = await fetch('/auth/token', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - accessCode, - appId, - appSecret, - challenge: AppLocalStorage.get('appChallenge') - }) - }) - - const data = await response.json() - return data -} - -/** - * Signs out the current session - * @return {null} - */ -export async function signOut(mixpanelInstance) { - const logoutBody = JSON.stringify({ - token: AppLocalStorage.get(LocalStorageKeys.AuthToken), - refreshToken: AppLocalStorage.get(LocalStorageKeys.RefreshToken) - }) - - await fetch('/auth/logout', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: logoutBody - }) - // Catching it cause we want to continue with logout even if tokens are invalid - .catch(console.error) - - AppLocalStorage.remove(LocalStorageKeys.AuthToken) - AppLocalStorage.remove(LocalStorageKeys.RefreshToken) - AppLocalStorage.remove('uuid') - AppLocalStorage.remove('distinct_id') - AppLocalStorage.remove('stcount') - AppLocalStorage.remove('onboarding') - deletePostAuthRedirect() - - window.location = '/' - - if (mixpanelInstance) { - mixpanelInstance.track('Log Out', { type: 'action' }) - mixpanelInstance.reset() - } -} - -export async function refreshToken() { - const refreshToken = AppLocalStorage.get(LocalStorageKeys.RefreshToken) - if (!refreshToken) throw new Error('No refresh token found') - - const refreshResponse = await fetch('/auth/token', { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - refreshToken, - appId, - appSecret - }) - }) - - const data = await refreshResponse.json() - - // eslint-disable-next-line no-prototype-builtins - if (data.hasOwnProperty('token')) { - AppLocalStorage.set(LocalStorageKeys.AuthToken, data.token) - AppLocalStorage.set(LocalStorageKeys.RefreshToken, data.refreshToken) - await prefetchUserAndSetID() - return true - } -} - -export function isEmailValid(email) { - return VALID_EMAIL_REGEX.test(email) -} diff --git a/packages/frontend/src/plugins/formatNumber.js b/packages/frontend/src/plugins/formatNumber.js deleted file mode 100644 index 61da78aec..000000000 --- a/packages/frontend/src/plugins/formatNumber.js +++ /dev/null @@ -1,15 +0,0 @@ -import numeral from 'numeral' - -export function formatNumber(value, max) { - const num = numeral(value) - const abs = Math.abs(max || num.value()) - - switch (abs) { - case abs < 1000: - return num.value() - case abs >= 1000 && abs <= 10000: - return num.format('0.0a') - default: - return num.format('0a') - } -} diff --git a/packages/frontend/src/plugins/helpers.ts b/packages/frontend/src/plugins/helpers.ts deleted file mode 100644 index 590286fb6..000000000 --- a/packages/frontend/src/plugins/helpers.ts +++ /dev/null @@ -1,58 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ -/* eslint-disable @typescript-eslint/no-unsafe-call */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -import Vue from 'vue' -import { getMixpanelUserId, getMixpanelServerId } from '@/mixpanelManager' -import { NotificationEventPayload } from '@/main/lib/core/helpers/eventHubHelper' -import { AppLocalStorage } from '@/utils/localStorage' -import { LocalStorageKeys } from '@/helpers/mainConstants' -import { getInviteTokenFromURL } from '@/main/lib/auth/services/authService' -import { triggerToastNotification } from '@/main/lib/core/composables/notifications' -import { getResourceType } from '@/main/lib/viewer/core/helpers/resourceHelper' -import { setPostAuthRedirect } from '@/main/lib/auth/utils/postAuthRedirectManager' - -Vue.prototype.$userId = function () { - return AppLocalStorage.get(LocalStorageKeys.Uuid) -} - -Vue.prototype.$mixpanelId = function () { - return getMixpanelUserId() -} - -Vue.prototype.$mixpanelServerId = function () { - return getMixpanelServerId() -} - -Vue.prototype.$loggedIn = function () { - return !!AppLocalStorage.get(LocalStorageKeys.Uuid) -} - -Vue.prototype.$isMobile = function () { - return window.matchMedia('(any-hover: none)').matches -} - -Vue.prototype.$resourceType = function (resourceId: string) { - return getResourceType(resourceId) -} - -/** - * Redirect to log in and redirect back to current page post-login - */ -Vue.prototype.$loginAndSetRedirect = function () { - if (this.$loggedIn()) return - - // Store current path with all of the query params and everything - const relativePath = window.location.href.replace(window.location.origin, '') - setPostAuthRedirect({ pathWithQuery: relativePath }) - - // Carry inviteId over - const token = getInviteTokenFromURL() - this.$router.push(token ? { path: '/authn/login', query: { token } } : '/authn/login') -} - -/** - * Trigger a toast notification from anywhere - */ -Vue.prototype.$triggerNotification = function (args: NotificationEventPayload) { - triggerToastNotification(this.$eventHub, args) -} diff --git a/packages/frontend/src/plugins/vuetify.js b/packages/frontend/src/plugins/vuetify.js deleted file mode 100644 index 6b7759567..000000000 --- a/packages/frontend/src/plugins/vuetify.js +++ /dev/null @@ -1,43 +0,0 @@ -import * as ThemeStateManager from '@/main/utils/themeStateManager' -import '@mdi/font/css/materialdesignicons.css' -import Vue from 'vue' -import Vuetify from 'vuetify/lib' - -Vue.use(Vuetify) - -ThemeStateManager.initialize() -const isDarkMode = ThemeStateManager.isDarkTheme() - -export default new Vuetify({ - icons: { - iconfont: 'mdi' - }, - theme: { - options: { customProperties: true }, - dark: isDarkMode, - themes: { - light: { - primary: '#047EFB', //blue - secondary: '#7BBCFF', //light blue - accent: '#FCF25E', //yellow - error: '#FF5555', //red - warning: '#FF9100', //orange - info: '#313BCF', //dark blue - success: '#4caf50', // green - text: '#000000', // black - background: '#f5f6f7' // white - }, - dark: { - primary: '#047EFB', //blue - secondary: '#7BBCFF', //light blue - accent: '#FCF25E', //yellow - error: '#FF5555', //red - warning: '#FF9100', //orange - info: '#9298f0', //dark blue - success: '#4caf50', // green - text: '#FFFFFF', // white - background: '#1a1a1a' // black / dark grey - } - } - } -}) diff --git a/packages/frontend/src/sass/variables.scss b/packages/frontend/src/sass/variables.scss deleted file mode 100644 index a93e26371..000000000 --- a/packages/frontend/src/sass/variables.scss +++ /dev/null @@ -1,285 +0,0 @@ -// $heading-font-family: 'Space Grotesk'; - -$primary-base: var(--v-primary-base); -$primary-darken: var(--v-secondary-base); -$primary-gradient: linear-gradient(0deg, $primary-darken 0%, $primary-base 40%); - -// By default Vuetify shows a scrollbar on all pages even the ones that don't need it, which is quite ugly -// https://github.com/vuetifyjs/vuetify/issues/1197 -html { - overflow-y: auto !important; -} - -@mixin speckle-gradient-bg { - background: $primary-base; - background: $primary-gradient; -} - -@mixin speckle-gradient-txt { - @include speckle-gradient-bg; - -webkit-background-clip: text; -} - -.background-light { - background: #8e9eab; - background: -webkit-linear-gradient(to top right, #eeeeee, #c8e8ff) !important; - background: linear-gradient(to top right, #ffffff, #c8e8ff) !important; -} - -.background-dark { - background: #141e30; - background: -webkit-linear-gradient(to top left, #243b55, #141e30) !important; - background: linear-gradient(to top left, #243b55, #141e30) !important; -} - -// TADAs -.tada-infinte { - -webkit-animation-name: tada; - animation-name: tada; - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - animation-iteration-count: infinite; -} - -.tada-once { - -webkit-animation-name: tada; - animation-name: tada; - -webkit-animation-duration: 1s; - animation-duration: 1s; - -webkit-animation-fill-mode: both; - animation-fill-mode: both; - animation-iteration-count: 2; -} - -@-webkit-keyframes tada { - 0% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - 10%, - 20% { - -webkit-transform: scale3d(0.8, 0.8, 0.8) rotate3d(0, 0, 1, -3deg); - transform: scale3d(0.8, 0.8, 0.8) rotate3d(0, 0, 1, -3deg); - } - 30%, - 50%, - 70%, - 90% { - -webkit-transform: scale3d(1.4, 1.4, 1.4) rotate3d(0, 0, 1, 3deg); - transform: scale3d(1.4, 1.4, 1.4) rotate3d(0, 0, 1, 3deg); - } - 40%, - 60%, - 80% { - -webkit-transform: scale3d(1.4, 1.4, 1.4) rotate3d(0, 0, 1, -3deg); - transform: scale3d(1.4, 1.4, 1.4) rotate3d(0, 0, 1, -3deg); - } - 100% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} -@keyframes tada { - 0% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } - 10%, - 20% { - -webkit-transform: scale3d(0.8, 0.8, 0.8) rotate3d(0, 0, 1, -3deg); - transform: scale3d(0.8, 0.8, 0.8) rotate3d(0, 0, 1, -3deg); - } - 30%, - 50%, - 70%, - 90% { - -webkit-transform: scale3d(1.4, 1.4, 1.4) rotate3d(0, 0, 1, 3deg); - transform: scale3d(1.4, 1.4, 1.4) rotate3d(0, 0, 1, 3deg); - } - 40%, - 60%, - 80% { - -webkit-transform: scale3d(1.4, 1.4, 1.4) rotate3d(0, 0, 1, -3deg); - transform: scale3d(1.4, 1.4, 1.4) rotate3d(0, 0, 1, -3deg); - } - 100% { - -webkit-transform: scale3d(1, 1, 1); - transform: scale3d(1, 1, 1); - } -} - -/* TOOLTIPs */ - -.tooltip { - display: block !important; - z-index: 10000; - font-family: 'Roboto', sans-serif !important; - font-size: 0.75rem !important; - pointer-events: none; -} - -.tooltip .tooltip-inner { - background: rgba(0, 0, 0, 1); - color: white; - border-radius: 16px; - padding: 5px 10px 4px; -} - -.tooltip .tooltip-arrow { - width: 0; - height: 0; - border-style: solid; - position: absolute; - margin: 5px; - border-color: rgba(0, 0, 0, 0.5); - z-index: 1; -} - -.tooltip[x-placement^='top'] { - margin-bottom: 5px; -} - -.tooltip[x-placement^='top'] .tooltip-arrow { - border-width: 5px 5px 0 5px; - border-left-color: transparent !important; - border-right-color: transparent !important; - border-bottom-color: transparent !important; - bottom: -5px; - left: calc(50% - 5px); - margin-top: 0; - margin-bottom: 0; -} - -.tooltip[x-placement^='bottom'] { - margin-top: 5px; -} - -.tooltip[x-placement^='bottom'] .tooltip-arrow { - border-width: 0 5px 5px 5px; - border-left-color: transparent !important; - border-right-color: transparent !important; - border-top-color: transparent !important; - top: -5px; - left: calc(50% - 5px); - margin-top: 0; - margin-bottom: 0; -} - -.tooltip[x-placement^='right'] { - margin-left: 5px; -} - -.tooltip[x-placement^='right'] .tooltip-arrow { - border-width: 5px 5px 5px 0; - border-left-color: transparent !important; - border-top-color: transparent !important; - border-bottom-color: transparent !important; - left: -5px; - top: calc(50% - 5px); - margin-left: 0; - margin-right: 0; -} - -.tooltip[x-placement^='left'] { - margin-right: 5px; -} - -.tooltip[x-placement^='left'] .tooltip-arrow { - border-width: 5px 0 5px 5px; - border-top-color: transparent !important; - border-right-color: transparent !important; - border-bottom-color: transparent !important; - right: -5px; - top: calc(50% - 5px); - margin-left: 0; - margin-right: 0; -} - -.tooltip.popover .popover-inner { - background: #f9f9f9; - color: black; - padding: 24px; - border-radius: 5px; - box-shadow: 0 5px 30px rgba(black, 0.1); -} - -.tooltip.popover .popover-arrow { - border-color: #f9f9f9; -} - -.tooltip[aria-hidden='true'] { - visibility: hidden; - opacity: 0; - transition: opacity 0.15s, visibility 0.15s; -} - -.tooltip[aria-hidden='false'] { - visibility: visible; - opacity: 1; - transition: opacity 0.15s; -} - -// Simple scrollbar (OSX-like) to use instead of the ugly browser one -@mixin simple-scrollbar { - $sb-width: 6px; - $sb-color: rgb(142, 142, 142); - - &::-webkit-scrollbar { - width: $sb-width; - height: 6px; - } - &::-webkit-scrollbar-track { - border-radius: 10px; - background: rgba(0, 0, 0, 0.1); - } - &::-webkit-scrollbar-thumb { - border-radius: 10px; - background: $sb-color; - } - &::-webkit-scrollbar-thumb:hover { - background: rgb(101, 101, 101); - } - &::-webkit-scrollbar-thumb:active { - background: rgba(90, 90, 90, 101); - } - - & { - scrollbar-width: $sb-width; - scrollbar-color: $sb-color; - } -} - -.simple-scrollbar { - @include simple-scrollbar; -} - -// Globally changing v-navigation-drawer scrollbar to the simple-scrollbar one -.v-navigation-drawer__content { - @include simple-scrollbar; -} - -// v-navigation-drawer resizer global restyle -.nav-resizer { - position: absolute; - top: 0; - right: 0; - width: 0px; - height: 100%; - z-index: 100000; - transition: all 0.6s ease; - opacity: 0.01; - border: 4px solid royalblue; -} -.nav-resizer:hover { - opacity: 0.5; - width: 0px; -} - -.no-mouse { - pointer-events: none; -} -.mouse { - pointer-events: auto; -} diff --git a/packages/frontend/src/type-augmentations/apollo.d.ts b/packages/frontend/src/type-augmentations/apollo.d.ts deleted file mode 100644 index f817f6b5b..000000000 --- a/packages/frontend/src/type-augmentations/apollo.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -declare module '@apollo/client/core' { - interface ApolloClient { - wsClient?: - | import('subscriptions-transport-ws').SubscriptionClient - | null - | undefined - } -} - -export {} diff --git a/packages/frontend/src/type-augmentations/css.d.ts b/packages/frontend/src/type-augmentations/css.d.ts deleted file mode 100644 index f60a02a5b..000000000 --- a/packages/frontend/src/type-augmentations/css.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.css' { - const src: string - export default src -} diff --git a/packages/frontend/src/type-augmentations/mixpanel.d.ts b/packages/frontend/src/type-augmentations/mixpanel.d.ts deleted file mode 100644 index cdcd74920..000000000 --- a/packages/frontend/src/type-augmentations/mixpanel.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -declare module 'vue-mixpanel' { - declare const test: string - declare const plugin: import('vue').PluginFunction - export default plugin - export { test } -} diff --git a/packages/frontend/src/type-augmentations/shims-gql.ts b/packages/frontend/src/type-augmentations/shims-gql.ts deleted file mode 100644 index a33ad43d3..000000000 --- a/packages/frontend/src/type-augmentations/shims-gql.ts +++ /dev/null @@ -1,6 +0,0 @@ -declare module '*.gql' { - import { DocumentNode } from '@apollo/client/core' - - const operation: DocumentNode - export default operation -} diff --git a/packages/frontend/src/type-augmentations/unplugin-components.d.ts b/packages/frontend/src/type-augmentations/unplugin-components.d.ts deleted file mode 100644 index 0e4c0c8ff..000000000 --- a/packages/frontend/src/type-augmentations/unplugin-components.d.ts +++ /dev/null @@ -1,88 +0,0 @@ -/* eslint-disable */ -/* prettier-ignore */ -// @ts-nocheck -// Generated by unplugin-vue-components -// Read more: https://github.com/vuejs/core/pull/3399 -export {} - -declare module 'vue' { - export interface GlobalComponents { - RouterLink: typeof import('vue-router')['RouterLink'] - RouterView: typeof import('vue-router')['RouterView'] - VAlert: typeof import('vuetify/lib')['VAlert'] - VApp: typeof import('vuetify/lib')['VApp'] - VAppBar: typeof import('vuetify/lib')['VAppBar'] - VAppBarNavIcon: typeof import('vuetify/lib')['VAppBarNavIcon'] - VAutocomplete: typeof import('vuetify/lib')['VAutocomplete'] - VAvatar: typeof import('vuetify/lib')['VAvatar'] - VBadge: typeof import('vuetify/lib')['VBadge'] - VBtn: typeof import('vuetify/lib')['VBtn'] - VBtnToggle: typeof import('vuetify/lib')['VBtnToggle'] - VCard: typeof import('vuetify/lib')['VCard'] - VCardActions: typeof import('vuetify/lib')['VCardActions'] - VCardSubtitle: typeof import('vuetify/lib')['VCardSubtitle'] - VCardText: typeof import('vuetify/lib')['VCardText'] - VCardTitle: typeof import('vuetify/lib')['VCardTitle'] - VCheckbox: typeof import('vuetify/lib')['VCheckbox'] - VChip: typeof import('vuetify/lib')['VChip'] - VCol: typeof import('vuetify/lib')['VCol'] - VCombobox: typeof import('vuetify/lib')['VCombobox'] - VContainer: typeof import('vuetify/lib')['VContainer'] - VDialog: typeof import('vuetify/lib')['VDialog'] - VDivider: typeof import('vuetify/lib')['VDivider'] - VExpandTransition: typeof import('vuetify/lib')['VExpandTransition'] - VExpansionPanel: typeof import('vuetify/lib')['VExpansionPanel'] - VExpansionPanelContent: typeof import('vuetify/lib')['VExpansionPanelContent'] - VExpansionPanelHeader: typeof import('vuetify/lib')['VExpansionPanelHeader'] - VExpansionPanels: typeof import('vuetify/lib')['VExpansionPanels'] - VFadeTransition: typeof import('vuetify/lib')['VFadeTransition'] - VForm: typeof import('vuetify/lib')['VForm'] - VHover: typeof import('vuetify/lib')['VHover'] - VIcon: typeof import('vuetify/lib')['VIcon'] - VImg: typeof import('vuetify/lib')['VImg'] - VItem: typeof import('vuetify/lib')['VItem'] - VItemGroup: typeof import('vuetify/lib')['VItemGroup'] - VList: typeof import('vuetify/lib')['VList'] - VListGroup: typeof import('vuetify/lib')['VListGroup'] - VListItem: typeof import('vuetify/lib')['VListItem'] - VListItemAction: typeof import('vuetify/lib')['VListItemAction'] - VListItemAvatar: typeof import('vuetify/lib')['VListItemAvatar'] - VListItemContent: typeof import('vuetify/lib')['VListItemContent'] - VListItemGroup: typeof import('vuetify/lib')['VListItemGroup'] - VListItemIcon: typeof import('vuetify/lib')['VListItemIcon'] - VListItemSubtitle: typeof import('vuetify/lib')['VListItemSubtitle'] - VListItemTitle: typeof import('vuetify/lib')['VListItemTitle'] - VMain: typeof import('vuetify/lib')['VMain'] - VMenu: typeof import('vuetify/lib')['VMenu'] - VNavigationDrawer: typeof import('vuetify/lib')['VNavigationDrawer'] - VOverlay: typeof import('vuetify/lib')['VOverlay'] - VPagination: typeof import('vuetify/lib')['VPagination'] - VProgressCircular: typeof import('vuetify/lib')['VProgressCircular'] - VProgressLinear: typeof import('vuetify/lib')['VProgressLinear'] - VRow: typeof import('vuetify/lib')['VRow'] - VScrollXTransition: typeof import('vuetify/lib')['VScrollXTransition'] - VScrollYTransition: typeof import('vuetify/lib')['VScrollYTransition'] - VSelect: typeof import('vuetify/lib')['VSelect'] - VSheet: typeof import('vuetify/lib')['VSheet'] - VSimpleTable: typeof import('vuetify/lib')['VSimpleTable'] - VSkeletonLoader: typeof import('vuetify/lib')['VSkeletonLoader'] - VSlider: typeof import('vuetify/lib')['VSlider'] - VSlideXTransition: typeof import('vuetify/lib')['VSlideXTransition'] - VSlideYTransition: typeof import('vuetify/lib')['VSlideYTransition'] - VSnackbar: typeof import('vuetify/lib')['VSnackbar'] - VSpacer: typeof import('vuetify/lib')['VSpacer'] - VSubheader: typeof import('vuetify/lib')['VSubheader'] - VSwitch: typeof import('vuetify/lib')['VSwitch'] - VTextarea: typeof import('vuetify/lib')['VTextarea'] - VTextField: typeof import('vuetify/lib')['VTextField'] - VThemeProvider: typeof import('vuetify/lib')['VThemeProvider'] - VTimeline: typeof import('vuetify/lib')['VTimeline'] - VTimelineItem: typeof import('vuetify/lib')['VTimelineItem'] - VToolbar: typeof import('vuetify/lib')['VToolbar'] - VToolbarItems: typeof import('vuetify/lib')['VToolbarItems'] - VToolbarTitle: typeof import('vuetify/lib')['VToolbarTitle'] - VTooltip: typeof import('vuetify/lib')['VTooltip'] - VWindow: typeof import('vuetify/lib')['VWindow'] - VWindowItem: typeof import('vuetify/lib')['VWindowItem'] - } -} diff --git a/packages/frontend/src/type-augmentations/vue-apollo-options.d.ts b/packages/frontend/src/type-augmentations/vue-apollo-options.d.ts deleted file mode 100644 index f065b8dbb..000000000 --- a/packages/frontend/src/type-augmentations/vue-apollo-options.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import Vue from 'vue' -import { CombinedVueInstance } from 'vue/types/vue' - -import { ApolloProvider } from '@vue/apollo-option' -import { DollarApollo } from '@vue/apollo-option/types/vue-apollo' -import { VueApolloComponentOptions } from '@vue/apollo-option/types/options' - -type DataDef = Data | ((this: Readonly & V) => Data) - -declare module 'vue/types/options' { - interface ComponentOptions { - apolloProvider?: ApolloProvider - apollo?: VueApolloComponentOptions< - Data extends DataDef - ? CombinedVueInstance - : CombinedVueInstance - > - } -} - -declare module 'vue/types/vue' { - interface Vue { - $apolloProvider: ApolloProvider - $apollo: DollarApollo - } -} diff --git a/packages/frontend/src/type-augmentations/vue-histogram-slider.d.ts b/packages/frontend/src/type-augmentations/vue-histogram-slider.d.ts deleted file mode 100644 index b678e5046..000000000 --- a/packages/frontend/src/type-augmentations/vue-histogram-slider.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module 'vue-histogram-slider' { - import { Component } from 'vue' - declare const comp: Component - export default comp -} diff --git a/packages/frontend/src/type-augmentations/vue-shim.d.ts b/packages/frontend/src/type-augmentations/vue-shim.d.ts deleted file mode 100644 index d9f24faa4..000000000 --- a/packages/frontend/src/type-augmentations/vue-shim.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.vue' { - import Vue from 'vue' - export default Vue -} diff --git a/packages/frontend/src/type-augmentations/vue.d.ts b/packages/frontend/src/type-augmentations/vue.d.ts deleted file mode 100644 index 487042638..000000000 --- a/packages/frontend/src/type-augmentations/vue.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -declare module 'vue/types/vue' { - import { Nullable } from '@/helpers/typeHelpers' - - export interface Vue { - /** - * Mixpanel instance - */ - $mixpanel: import('mixpanel-browser').OverridedMixpanel - /** - * Event bus, for sending & receiving events across the app - */ - $eventHub: Vue - - /** - * Trigger a toast notification - */ - $triggerNotification( - args: import('@/main/lib/core/helpers/eventHubHelper').NotificationEventPayload - ): void - - $userId: () => Nullable - - /** - * Whether the client seems to be a mobile device. Note that this doesn't check for screen size, only - * whether this is a mobile device. - */ - $isMobile: () => boolean - - /** - * Redirect to log in and redirect back to current page post-login - */ - $loginAndSetRedirect: () => void - - /** - * Check if auth token is stored in localStorage - * @deprecated Use `isLoggedInQuery`/`isLoggedInMixin`/`useIsLoggedIn` instead - */ - $loggedIn: () => boolean - - /** - * Resolve a resourceId's type - */ - $resourceType: typeof import('@/main/lib/viewer/core/helpers/resourceHelper').getResourceType - } - - export interface VueConfiguration { - /** - * To enable VueApollov4 to work - */ - globalProperties?: Record - } -} - -export {} diff --git a/packages/frontend/src/type-augmentations/window.d.ts b/packages/frontend/src/type-augmentations/window.d.ts deleted file mode 100644 index 75100d78f..000000000 --- a/packages/frontend/src/type-augmentations/window.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export {} - -declare global { - interface Window { - /** - * Used in some layout components - */ - __lastNavSize?: number - } -} diff --git a/packages/frontend/src/utils/localStorage.ts b/packages/frontend/src/utils/localStorage.ts deleted file mode 100644 index c344f2482..000000000 --- a/packages/frontend/src/utils/localStorage.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { SafeLocalStorage } from '@speckle/shared' -export const AppLocalStorage = SafeLocalStorage diff --git a/packages/frontend/tsconfig.eslint.json b/packages/frontend/tsconfig.eslint.json deleted file mode 100644 index 21d89f262..000000000 --- a/packages/frontend/tsconfig.eslint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "exclude": ["node_modules", "dist"], - "include": ["**/*", "**/*.vue"] -} diff --git a/packages/frontend/tsconfig.json b/packages/frontend/tsconfig.json deleted file mode 100644 index 38a9e9e32..000000000 --- a/packages/frontend/tsconfig.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "compilerOptions": { - "target": "es6", - "module": "es2020", - "strict": true, - "jsx": "preserve", - "importHelpers": true, - "moduleResolution": "node", - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "sourceMap": true, - "allowJs": true, - "noEmit": true, - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - }, - "lib": ["esnext", "dom", "dom.iterable", "scripthost"], - "types": [ - "vue-infinite-loading", - "type-fest", - "vue", - "@types/node", - "@types/mixpanel-browser", - "vuetify", - "@types/dompurify", - "vite/client" - ] - }, - "vueCompilerOptions": { - "target": 2.7 - }, - "ts-node": { - "swc": true - }, - "include": [ - "src/**/*.ts", - "src/**/*.js", - "src/**/*.tsx", - "src/**/*.vue", - "tests/**/*.ts", - "tests/**/*.tsx" - ], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/frontend/vite.config.js b/packages/frontend/vite.config.js deleted file mode 100644 index 3264de7db..000000000 --- a/packages/frontend/vite.config.js +++ /dev/null @@ -1,65 +0,0 @@ -import path from 'path' -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue2' -import Components from 'unplugin-vue-components/vite' -import { VuetifyResolver } from 'unplugin-vue-components/resolvers' -import gql from 'vite-plugin-simple-gql' - -const port = '8080' - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [ - vue({ - template: { - transformAssetUrls: { - // defaults - video: ['src', 'poster'], - source: ['src'], - img: ['src'], - image: ['xlink:href', 'href'], - use: ['xlink:href', 'href'], - // support for vuetify components - 'v-img': ['src'] - } - } - }), - Components({ - resolvers: [VuetifyResolver()], - dts: './src/type-augmentations/unplugin-components.d.ts' - }), - gql() - ], - server: { - host: '127.0.0.1', - port, - hmr: { - port - } - }, - resolve: { - alias: { - // eslint-disable-next-line no-undef - '@': path.resolve(__dirname, './src'), - // redirects lodash to lodash-es in prod build, for a reduced & tree-shaked bundle - lodash: 'lodash-es' - }, - extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'] - }, - css: { - // https://vitejs.dev/config/#css-preprocessoroptions - preprocessorOptions: { - sass: { - additionalData: [ - // vuetify variable overrides - '@import "@/sass/variables.scss"', - '' - ].join('\n') - } - } - }, - - optimizeDeps: { - include: ['vuetify', 'vuetify/lib'] - } -}) diff --git a/packages/server/.env-example b/packages/server/.env-example index b59e45160..e259a5a49 100644 --- a/packages/server/.env-example +++ b/packages/server/.env-example @@ -22,8 +22,6 @@ MOCKED_API_MODULES= # Settings for making the server work with Frontend 2.0 ############################################################ -# Whether server is meant to be used with Frontend 2.0 -USE_FRONTEND_2=true FRONTEND_ORIGIN="http://127.0.0.1:8081" # URL of a project on any FE2 speckle server that will be pulled in and used as the onboarding stream diff --git a/packages/server/.env.test-example b/packages/server/.env.test-example index 106f853bd..429987d08 100644 --- a/packages/server/.env.test-example +++ b/packages/server/.env.test-example @@ -5,6 +5,8 @@ PORT=0 POSTGRES_URL=postgres://speckle:speckle@127.0.0.1/speckle2_test POSTGRES_USER='' +FRONTEND_ORIGIN="http://127.0.0.1:8081" + MULTI_REGION_CONFIG_PATH="multiregion.test.json" #RUN_TESTS_IN_MULTIREGION_MODE=true RATELIMITER_ENABLED='false' diff --git a/packages/server/app.ts b/packages/server/app.ts index 53d43b719..9400e3a5b 100644 --- a/packages/server/app.ts +++ b/packages/server/app.ts @@ -44,7 +44,6 @@ import { getFileSizeLimitMB, isDevEnv, isTestEnv, - useNewFrontend, isApolloMonitoringEnabled, enableMixpanel, getPort, @@ -422,9 +421,7 @@ export async function buildApolloServer(options?: { * Initialises all server (express/subscription/http) instances */ export async function init() { - if (useNewFrontend()) { - startupLogger.info('🖼️ Serving for frontend-2...') - } + startupLogger.info('🖼️ Serving for frontend-2...') const app = express() app.disable('x-powered-by') @@ -520,12 +517,11 @@ export async function shutdown(params: { await ModulesSetup.shutdown() } -const shouldUseFrontendProxy = () => - process.env.NODE_ENV === 'development' && process.env.USE_FRONTEND_PROXY === 'true' +const shouldUseFrontendProxy = () => isDevEnv() async function createFrontendProxy() { const frontendHost = process.env.FRONTEND_HOST || '127.0.0.1' - const frontendPort = process.env.FRONTEND_PORT || 8080 + const frontendPort = process.env.FRONTEND_PORT || 8081 const { createProxyMiddleware } = await import('http-proxy-middleware') // even tho it has default values, it fixes http-proxy setting `Connection: close` on each request diff --git a/packages/server/modules/auth/services/passportService.ts b/packages/server/modules/auth/services/passportService.ts index 8c89f0e71..fe26c1a3a 100644 --- a/packages/server/modules/auth/services/passportService.ts +++ b/packages/server/modules/auth/services/passportService.ts @@ -1,6 +1,6 @@ import passport, { Strategy, AuthenticateOptions } from 'passport' import { logger } from '@/logging/logging' -import { useNewFrontend, getFrontendOrigin } from '@/modules/shared/helpers/envHelper' +import { getFrontendOrigin } from '@/modules/shared/helpers/envHelper' import { UnverifiedEmailSSOLoginError, UserInputError @@ -66,9 +66,7 @@ export const passportAuthenticateHandlerBuilderFactory = errPath = `/error-email-verify?email=${email}` } - return useNewFrontend() - ? res.redirect(new URL(errPath, getFrontendOrigin()).toString()) - : res.redirect(errPath) + res.redirect(new URL(errPath, getFrontendOrigin()).toString()) } req.user = user diff --git a/packages/server/modules/core/helpers/routeHelper.ts b/packages/server/modules/core/helpers/routeHelper.ts index 5960f7d20..b51fc5ca6 100644 --- a/packages/server/modules/core/helpers/routeHelper.ts +++ b/packages/server/modules/core/helpers/routeHelper.ts @@ -1,5 +1,5 @@ import { InvalidArgumentError } from '@/modules/shared/errors' -import { getFrontendOrigin, useNewFrontend } from '@/modules/shared/helpers/envHelper' +import { getFrontendOrigin } from '@/modules/shared/helpers/envHelper' import { MaybeNullOrUndefined } from '@/modules/shared/helpers/typeHelper' /** @@ -8,21 +8,15 @@ import { MaybeNullOrUndefined } from '@/modules/shared/helpers/typeHelper' */ export function getWorkspaceRoute(workspaceSlug: string): string { - if (!useNewFrontend()) { - // TODO: This should throw, but tests run in FE1 mode, and if we switch FE2 mode on, a bunch of old auth tests fail - return '/' - // throw new LogicError('Workspaces are not supported in the old frontend') - } - return `/workspaces/${workspaceSlug}` } export function getStreamRoute(streamId: string): string { - return useNewFrontend() ? `/projects/${streamId}` : `/streams/${streamId}` + return `/projects/${streamId}` } export function getRegistrationRoute(): string { - return useNewFrontend() ? `/authn/register` : '/authn/register' + return '/authn/register' } export function getCommentRoute( @@ -43,9 +37,7 @@ export function getCommentRoute( } export function getPasswordResetFinalizationRoute(tokenId: string): string { - return useNewFrontend() - ? `/authn/reset-password?token=${tokenId}` - : `/authn/resetpassword/finalize?t=${tokenId}` + return `/authn/reset-password?token=${tokenId}` } export function getEmailVerificationFinalizationRoute(tokenId: string): string { diff --git a/packages/server/modules/cross-server-sync/services/commit.ts b/packages/server/modules/cross-server-sync/services/commit.ts index 91ceac49c..e85743da9 100644 --- a/packages/server/modules/cross-server-sync/services/commit.ts +++ b/packages/server/modules/cross-server-sync/services/commit.ts @@ -659,11 +659,10 @@ export const downloadCommitFactory = await saveNewThreadsFactory(deps)(threads, newResources, { logger }) } - const linkToNewCommit = parsedCommitUrl.isFe2 - ? `${getFrontendOrigin(true)}/projects/${targetStreamId}/models/${ - localResources.targetBranch.id - }@${newCommitId}` - : `${getFrontendOrigin()}/streams/${targetStreamId}/commits/${newCommitId}` + const linkToNewCommit = `${getFrontendOrigin()}/projects/${targetStreamId}/models/${ + localResources.targetBranch.id + }@${newCommitId}` + logger.debug(`All done! Find your commit here: ${linkToNewCommit}`) return { diff --git a/packages/server/modules/cross-server-sync/services/project.ts b/packages/server/modules/cross-server-sync/services/project.ts index 545d8dff0..d9ffb02e1 100644 --- a/packages/server/modules/cross-server-sync/services/project.ts +++ b/packages/server/modules/cross-server-sync/services/project.ts @@ -239,7 +239,7 @@ export const downloadProjectFactory = const newProjectUrl = new URL( `/projects/${project.id}`, - getFrontendOrigin(true) + getFrontendOrigin() ).toString() logger.info(`New Project URL: ${newProjectUrl}`) diff --git a/packages/server/modules/serverinvites/services/processing.ts b/packages/server/modules/serverinvites/services/processing.ts index 29b2eb215..6d2887cce 100644 --- a/packages/server/modules/serverinvites/services/processing.ts +++ b/packages/server/modules/serverinvites/services/processing.ts @@ -1,4 +1,3 @@ -import { getStreamRoute } from '@/modules/core/helpers/routeHelper' import { InviteCreateValidationError, InviteFinalizedForNewEmail, @@ -7,12 +6,11 @@ import { } from '@/modules/serverinvites/errors' import { buildUserTarget, - isProjectResourceTarget, ResolvedTargetData, resolveTarget } from '@/modules/serverinvites/helpers/core' -import { getFrontendOrigin, useNewFrontend } from '@/modules/shared/helpers/envHelper' +import { getFrontendOrigin } from '@/modules/shared/helpers/envHelper' import { InviteResourceTargetType, ServerInviteRecord @@ -114,27 +112,10 @@ export const convertToFinalizationValidation = (params: { * Note: Important auth query string params like the access_code are added separately * in auth middlewares */ -export const resolveAuthRedirectPathFactory = - (): ResolveAuthRedirectPath => (invite?: ServerInviteRecord) => { - if (useNewFrontend()) { - // All post-auth redirects are handled by the frontend itself - return getFrontendOrigin() - } - - /** - * @deprecated Deprecated user flow, only relevant in FE1. Thus no need to update it w/ support for workspaces - * and other new features. - */ - if (invite) { - const primaryTarget = invite.resource - if (isProjectResourceTarget(primaryTarget)) { - return `${getStreamRoute(primaryTarget.resourceId)}` - } - } - - // Fall-back to base URL (for server invites) - return getFrontendOrigin() - } +export const resolveAuthRedirectPathFactory = (): ResolveAuthRedirectPath => () => { + // All post-auth redirects are handled by the frontend itself + return getFrontendOrigin() +} /** * Validate that the new user has a valid invite for registering to the server diff --git a/packages/server/modules/shared/helpers/envHelper.ts b/packages/server/modules/shared/helpers/envHelper.ts index e5c8f21ac..b1794a974 100644 --- a/packages/server/modules/shared/helpers/envHelper.ts +++ b/packages/server/modules/shared/helpers/envHelper.ts @@ -74,13 +74,6 @@ export function getMaximumObjectSizeMB() { return getIntFromEnv('MAX_OBJECT_SIZE_MB', '100') } -/** - * Whether the server is supposed to serve frontend 2.0 - */ -export function useNewFrontend() { - return getBooleanFromEnv('USE_FRONTEND_2') -} - export function enableNewFrontendMessaging() { return getBooleanFromEnv('ENABLE_FE2_MESSAGING') } @@ -181,13 +174,12 @@ export function shouldDisableNotificationsConsumption() { /** * Get frontend app origin/base URL */ -export function getFrontendOrigin(forceFe2?: boolean) { - const envKey = useNewFrontend() || forceFe2 ? 'FRONTEND_ORIGIN' : 'CANONICAL_URL' - const trimmedOrigin = trimEnd(process.env[envKey], '/') +export function getFrontendOrigin() { + const trimmedOrigin = trimEnd(process.env['FRONTEND_ORIGIN'], '/') if (!trimmedOrigin) { throw new MisconfiguredEnvironmentError( - `Frontend origin env var (${envKey}) not configured!` + `Frontend origin env var (FRONTEND_ORIGIN) not configured!` ) } diff --git a/utils/helm/speckle-server/templates/_helpers.tpl b/utils/helm/speckle-server/templates/_helpers.tpl index e38a5cfba..548eaf656 100644 --- a/utils/helm/speckle-server/templates/_helpers.tpl +++ b/utils/helm/speckle-server/templates/_helpers.tpl @@ -547,9 +547,6 @@ Generate the environment variables for Speckle server and Speckle objects deploy - name: LOG_PRETTY value: {{ .Values.server.logPretty | quote }} -- name: USE_FRONTEND_2 - value: {{ .Values.frontend_2.enabled | quote }} - - name: FRONTEND_ORIGIN {{- if .Values.ssl_canonical_url }} value: https://{{ .Values.domain }} diff --git a/utils/helm/speckle-server/templates/frontend/_helpers.tpl b/utils/helm/speckle-server/templates/frontend/_helpers.tpl deleted file mode 100644 index 5b5c6bb16..000000000 --- a/utils/helm/speckle-server/templates/frontend/_helpers.tpl +++ /dev/null @@ -1,53 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "frontend.name" -}} -{{- default "speckle-frontend" .Values.frontend.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "frontend.fullname" -}} -{{- if .Values.frontend.fullnameOverride }} -{{- .Values.frontend.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default "speckle-frontend" .Values.frontend.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "frontend.labels" -}} -{{ include "speckle.commonLabels" . }} -app.kubernetes.io/component: {{ include "frontend.name" . }} -{{ include "frontend.selectorLabels" . }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "frontend.selectorLabels" -}} -app: {{ include "frontend.name" . }} -app.kubernetes.io/name: {{ include "frontend.name" . }} -{{ include "speckle.commonSelectorLabels" . }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "frontend.serviceAccountName" -}} -{{- if .Values.frontend.serviceAccount.create }} -{{- default (include "frontend.fullname" .) .Values.frontend.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.frontend.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/utils/helm/speckle-server/templates/frontend/deployment.yml b/utils/helm/speckle-server/templates/frontend/deployment.yml deleted file mode 100644 index 112db3228..000000000 --- a/utils/helm/speckle-server/templates/frontend/deployment.yml +++ /dev/null @@ -1,99 +0,0 @@ -{{- if not .Values.frontend_2.enabled -}} -apiVersion: apps/v1 -kind: Deployment -metadata: - name: speckle-frontend - namespace: {{ .Values.namespace }} - labels: -{{ include "frontend.labels" . | indent 4 }} -spec: - replicas: {{ .Values.frontend.replicas }} - selector: - matchLabels: - app: speckle-frontend - project: speckle-server - strategy: - type: RollingUpdate - template: - metadata: - labels: -{{ include "frontend.labels" . | indent 8 }} - spec: - containers: - - name: main - image: {{ default (printf "speckle/speckle-frontend:%s" .Values.docker_image_tag) .Values.frontend.image }} - imagePullPolicy: {{ .Values.imagePullPolicy }} - - ports: - - name: www - containerPort: 8080 - protocol: TCP - - resources: - requests: - cpu: {{ .Values.frontend.requests.cpu }} - memory: {{ .Values.frontend.requests.memory }} - limits: - cpu: {{ .Values.frontend.limits.cpu }} - memory: {{ .Values.frontend.limits.memory }} - - # Allow for k8s to remove the pod from the service endpoints to stop receive traffic - lifecycle: - preStop: - exec: - command: ["sleep", "5"] - - readinessProbe: - httpGet: - path: / - port: www - initialDelaySeconds: 5 - periodSeconds: 5 - - env: - - name: FILE_SIZE_LIMIT_MB - value: {{ .Values.file_size_limit_mb | quote }} - - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - privileged: false - readOnlyRootFilesystem: true - runAsNonRoot: true - runAsUser: 20000 - - volumeMounts: - - name: openresty-temp - mountPath: /bitnami/openresty - - name: openresty-conf - mountPath: /opt/bitnami/openresty/nginx/conf/ - - name: openresty-logs - mountPath: /opt/bitnami/openresty/nginx/logs/ - - priorityClassName: high-priority - {{- if .Values.frontend.affinity }} - affinity: {{- include "speckle.renderTpl" (dict "value" .Values.frontend.affinity "context" $) | nindent 8 }} - {{- end }} - {{- if .Values.frontend.nodeSelector }} - nodeSelector: {{- include "speckle.renderTpl" (dict "value" .Values.frontend.nodeSelector "context" $) | nindent 8 }} - {{- end }} - {{- if .Values.frontend.tolerations }} - tolerations: {{- include "speckle.renderTpl" (dict "value" .Values.frontend.tolerations "context" $) | nindent 8 }} - {{- end }} - {{- if .Values.frontend.topologySpreadConstraints }} - topologySpreadConstraints: {{- include "speckle.renderTpl" (dict "value" .Values.frontend.topologySpreadConstraints "context" $) | nindent 8 }} - {{- end }} - {{- if .Values.frontend.serviceAccount.create }} - serviceAccountName: {{ include "frontend.name" $ }} - {{- end }} - - volumes: - - name: openresty-temp - emptyDir: {} - - name: openresty-conf - emptyDir: {} - - name: openresty-logs - emptyDir: {} -{{- end -}} diff --git a/utils/helm/speckle-server/templates/frontend/networkpolicy.cilium.yml b/utils/helm/speckle-server/templates/frontend/networkpolicy.cilium.yml deleted file mode 100644 index 572c412aa..000000000 --- a/utils/helm/speckle-server/templates/frontend/networkpolicy.cilium.yml +++ /dev/null @@ -1,27 +0,0 @@ -{{- if not .Values.frontend_2.enabled -}} -{{- if (and (.Values.frontend.networkPolicy.enabled) (eq .Values.networkPlugin.type "cilium")) -}} -apiVersion: cilium.io/v2 -kind: CiliumNetworkPolicy -metadata: - name: {{ include "frontend.name" $ }} - namespace: {{ .Values.namespace }} - labels: -{{ include "frontend.labels" . | indent 4 }} -spec: - endpointSelector: - matchLabels: -{{ include "frontend.selectorLabels" . | indent 6 }} - ingress: - - fromEndpoints: - - matchLabels: - io.kubernetes.pod.namespace: {{ .Values.ingress.namespace }} -{{ include "speckle.ingress.selector.pod" $ | indent 12 }} - toPorts: - - ports: - - port: "www" - protocol: TCP - egressDeny: - - toEntities: - - "all" -{{- end }} -{{- end -}} diff --git a/utils/helm/speckle-server/templates/frontend/networkpolicy.kubernetes.yml b/utils/helm/speckle-server/templates/frontend/networkpolicy.kubernetes.yml deleted file mode 100644 index ebdfe85d6..000000000 --- a/utils/helm/speckle-server/templates/frontend/networkpolicy.kubernetes.yml +++ /dev/null @@ -1,30 +0,0 @@ -{{- if not .Values.frontend_2.enabled -}} -{{- if (and (.Values.frontend.networkPolicy.enabled) (eq .Values.networkPlugin.type "kubernetes")) -}} -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: {{ include "frontend.name" $ }} - namespace: {{ .Values.namespace }} - labels: -{{ include "frontend.labels" . | indent 4 }} -spec: - podSelector: - matchLabels: -{{ include "frontend.selectorLabels" . | indent 6 }} - policyTypes: - - Ingress - - Egress - ingress: - # allow ingress from the loadbalancer - - from: - - namespaceSelector: - matchLabels: - kubernetes.io/metadata.name: {{ .Values.ingress.namespace }} - podSelector: - matchLabels: -{{ include "speckle.ingress.selector.pod" $ | indent 14 }} - ports: - - port: www - egress: [] # block all egress -{{- end -}} -{{- end -}} diff --git a/utils/helm/speckle-server/templates/frontend/service.yml b/utils/helm/speckle-server/templates/frontend/service.yml deleted file mode 100644 index 6c488e79d..000000000 --- a/utils/helm/speckle-server/templates/frontend/service.yml +++ /dev/null @@ -1,18 +0,0 @@ -{{- if not .Values.frontend_2.enabled -}} -apiVersion: v1 -kind: Service -metadata: - name: speckle-frontend - namespace: {{ .Values.namespace }} - labels: -{{ include "frontend.labels" . | indent 4 }} -spec: - selector: - app: speckle-frontend - project: speckle-server - ports: - - protocol: TCP - name: www - port: 8080 - targetPort: www -{{- end -}} diff --git a/utils/helm/speckle-server/templates/frontend/serviceaccount.yml b/utils/helm/speckle-server/templates/frontend/serviceaccount.yml deleted file mode 100644 index 92efe9a0a..000000000 --- a/utils/helm/speckle-server/templates/frontend/serviceaccount.yml +++ /dev/null @@ -1,15 +0,0 @@ -{{- if not .Values.frontend_2.enabled -}} -{{- if .Values.frontend.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "frontend.name" $ }} - namespace: {{ .Values.namespace | quote }} - labels: -{{ include "frontend.labels" $ | indent 4 }} - annotations: - "kubernetes.io/enforce-mountable-secrets": "true" -automountServiceAccountToken: false -secrets: [] # no access to any secret -{{- end -}} -{{- end -}} diff --git a/utils/helm/speckle-server/templates/tests/deployment.yml b/utils/helm/speckle-server/templates/tests/deployment.yml index 51ff1bd4a..5369f2f43 100644 --- a/utils/helm/speckle-server/templates/tests/deployment.yml +++ b/utils/helm/speckle-server/templates/tests/deployment.yml @@ -25,12 +25,6 @@ spec: value: https://{{ .Values.domain }} - name: SERVER_VERSION value: {{ .Values.docker_image_tag | quote}} - - name: FRONTEND_VERSION - {{- if .Values.frontend_2.enabled }} - value: {{ "2" | quote }} - {{- else }} - value: {{ "1" | quote }} - {{- end }} - name: VERIFY_CERTIFICATE value: {{ (default "1" .Values.tlsRejectUnauthorized) | quote }} - name: LOG_LEVEL diff --git a/utils/helm/speckle-server/values.schema.json b/utils/helm/speckle-server/values.schema.json index 066b01b1e..81c25c37d 100644 --- a/utils/helm/speckle-server/values.schema.json +++ b/utils/helm/speckle-server/values.schema.json @@ -1664,103 +1664,6 @@ } } }, - "frontend": { - "type": "object", - "properties": { - "replicas": { - "type": "number", - "description": "The number of instances of the Frontend pod to be deployed within the cluster.", - "default": 1 - }, - "logLevel": { - "type": "string", - "description": "The minimum level of logs which will be output. Suitable values are trace, debug, info, warn, error, fatal, or silent", - "default": "info" - }, - "logPretty": { - "type": "boolean", - "description": "If enabled, will output logs in a human-readable format. Otherwise, logs will be output in JSON format.", - "default": false - }, - "image": { - "type": "string", - "description": "The Docker image to be used for the Speckle Frontend component. If blank, defaults to speckle/speckle-frontend:{{ .Values.docker_image_tag }}. If provided, this value should be the full path including tag. The docker_image_tag value will be ignored.", - "default": "" - }, - "requests": { - "type": "object", - "properties": { - "cpu": { - "type": "string", - "description": "The CPU that should be available on a node when scheduling this pod.", - "default": "250m" - }, - "memory": { - "type": "string", - "description": "The Memory that should be available on a node when scheduling this pod.", - "default": "256Mi" - } - } - }, - "limits": { - "type": "object", - "properties": { - "cpu": { - "type": "string", - "description": "The maximum CPU that will be made available to the frontend Pod in a given period.", - "default": "1000m" - }, - "memory": { - "type": "string", - "description": "The maximum Memory that will be made available to the frontend Pod.", - "default": "512Mi" - } - } - }, - "networkPolicy": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "description": "If enabled, will provide additional security be limiting network traffic into and out of the pod to only the required endpoints and ports.", - "default": false - } - } - }, - "affinity": { - "type": "object", - "description": "Affinity for Speckle frontend pod scheduling", - "default": {} - }, - "nodeSelector": { - "type": "object", - "description": "Node labels for Speckle frontend pods scheduling", - "default": {} - }, - "tolerations": { - "type": "array", - "description": "Tolerations for Speckle frontend pods scheduling", - "default": [], - "items": {} - }, - "topologySpreadConstraints": { - "type": "array", - "description": "Spread Constraints for Speckle frontend pod scheduling", - "default": [], - "items": {} - }, - "serviceAccount": { - "type": "object", - "properties": { - "create": { - "type": "boolean", - "description": "If enabled, a Kubernetes Service Account will be created for this pod.", - "default": true - } - } - } - } - }, "frontend_2": { "type": "object", "properties": { diff --git a/utils/helm/speckle-server/values.yaml b/utils/helm/speckle-server/values.yaml index f22b803f8..3066e9ef4 100644 --- a/utils/helm/speckle-server/values.yaml +++ b/utils/helm/speckle-server/values.yaml @@ -977,77 +977,6 @@ objects: ## topologySpreadConstraints: [] -## @section Frontend -## @descriptionStart -## Defines parameters related to the frontend server component of Speckle. -## @descriptionEnd -## -frontend: - ## @param frontend.replicas The number of instances of the Frontend pod to be deployed within the cluster. - ## - replicas: 1 - ## @param frontend.logLevel The minimum level of logs which will be output. Suitable values are trace, debug, info, warn, error, fatal, or silent - ## - logLevel: 'info' - ## @param frontend.logPretty If enabled, will output logs in a human-readable format. Otherwise, logs will be output in JSON format. - ## - logPretty: false - - ## @param frontend.image The Docker image to be used for the Speckle Frontend component. If blank, defaults to speckle/speckle-frontend:{{ .Values.docker_image_tag }}. If provided, this value should be the full path including tag. The docker_image_tag value will be ignored. - ## - image: '' - - requests: - ## @param frontend.requests.cpu The CPU that should be available on a node when scheduling this pod. - ## ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - ## - cpu: 250m - ## @param frontend.requests.memory The Memory that should be available on a node when scheduling this pod. - ## Depending on the Kubernetes cluster's configuration, exceeding this value may result in pod eviction from a node. - ## ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - ## - memory: 256Mi - limits: - ## @param frontend.limits.cpu The maximum CPU that will be made available to the frontend Pod in a given period. - ## If this limit is exceeded, execution of the Pod will be paused until the next period. - ## ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - ## - cpu: 1000m - ## @param frontend.limits.memory The maximum Memory that will be made available to the frontend Pod. - ## If this limit is exceeded, processes within the pod that request additional memory may be stopped. - ## ref: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ - ## - memory: 512Mi - networkPolicy: - ## @param frontend.networkPolicy.enabled If enabled, will provide additional security be limiting network traffic into and out of the pod to only the required endpoints and ports. - ## If enabled, the `ingress` parameters need be configured. - ## ref: https://kubernetes.io/docs/concepts/services-networking/network-policies/ - ## - enabled: false - ## @param frontend.affinity Affinity for Speckle frontend pod scheduling - ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity - ## - affinity: {} - ## @param frontend.nodeSelector Node labels for Speckle frontend pods scheduling - ## ref: https://kubernetes.io/docs/user-guide/node-selection/ - ## - nodeSelector: {} - ## @param frontend.tolerations Tolerations for Speckle frontend pods scheduling - ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - ## - tolerations: [] - ## @param frontend.topologySpreadConstraints Spread Constraints for Speckle frontend pod scheduling - ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ - ## - topologySpreadConstraints: [] - serviceAccount: - ## @param frontend.serviceAccount.create If enabled, a Kubernetes Service Account will be created for this pod. - ## This provides additional security by limiting this pod's access to the Kubernetes API and to Secrets on the Kubernetes cluster. - ## If disabled, the default Service Account will be used which in most Kubernetes configurations will grant this pod - ## access to most secrets on the cluster and access to the Kubernetes API. - ## - create: true - ## @section frontend_2 ## @descriptionStart ## Defines parameters related to the new web application component of Speckle diff --git a/utils/test-deployment/run_tests.py b/utils/test-deployment/run_tests.py index a762d57a7..05568c7a1 100755 --- a/utils/test-deployment/run_tests.py +++ b/utils/test-deployment/run_tests.py @@ -5,7 +5,6 @@ import os import sys import requests -import urllib.parse from specklepy.api.client import SpeckleClient from specklepy.api.models import ServerInfo @@ -27,13 +26,6 @@ VERIFY_CERTIFICATE = ( True if os.getenv("VERIFY_CERTIFICATE", "1") != "0" else False ) # default to True except in very narrow case where value is explicitly "0" -FRONTEND_VERSION = os.getenv("FRONTEND_VERSION", "") -if not FRONTEND_VERSION: - print( - "❌ Error: No frontend version specified. Use FRONTEND_VERSION environment variable." - ) - exit(1) - if not SPECKLE_SERVER.startswith("http://") and not SPECKLE_SERVER.startswith( "https://" ): @@ -52,23 +44,10 @@ assert isinstance(server_info, ServerInfo), "❌ GraphQL ServerInfo query error" print(f"✅ GraphQL operation succeeded. Server name: {server_info.name}") # Test if frontend is accessible -if FRONTEND_VERSION == "1": - frontend_response = requests.get( - urllib.parse.urljoin(SPECKLE_SERVER, "logo.svg"), verify=VERIFY_CERTIFICATE - ) - # don't check for status code, the frontend app will server the 404 page with a status code 200 - # even if the rote doesn't exist - assert frontend_response.headers.get("Content-Type", "").startswith( - "image/" - ), "❌ Frontend logo Content-Type is not an image" -elif FRONTEND_VERSION == "2": - frontend_response = requests.get(SPECKLE_SERVER, verify=VERIFY_CERTIFICATE) - assert ( - frontend_response.status_code == 200 - ), f"❌ Frontend did not return a 200 status code, instead returned status code is {frontend_response.status_code}." -else: - print(f"❌ Unknown frontend version '{FRONTEND_VERSION}'") - exit(1) +frontend_response = requests.get(SPECKLE_SERVER, verify=VERIFY_CERTIFICATE) +assert ( + frontend_response.status_code == 200 +), f"❌ Frontend did not return a 200 status code, instead returned status code is {frontend_response.status_code}." print("✅ Frontend accessible") # Test that the deployed server version matches the expected version diff --git a/vetur.config.js b/vetur.config.js deleted file mode 100644 index c3637aff5..000000000 --- a/vetur.config.js +++ /dev/null @@ -1,9 +0,0 @@ -// vetur.config.js -/** @type {import('vls').VeturConfig} */ -module.exports = { - settings: { - 'vetur.useWorkspaceDependencies': true - // 'vetur.experimental.templateInterpolationService': true, // Enable for typechecking in templates - }, - projects: ['./packages/frontend'] -} diff --git a/workspace.code-workspace b/workspace.code-workspace index 9544fb4a2..885bae19c 100644 --- a/workspace.code-workspace +++ b/workspace.code-workspace @@ -4,13 +4,9 @@ "path": "packages/server", "name": "🖥️ server" }, - { - "path": "packages/frontend", - "name": "🪟 frontend" - }, { "path": "packages/frontend-2", - "name": "🏬 frontend 2.0" + "name": "🏬 frontend" }, { "path": "packages/dui3", diff --git a/yarn.lock b/yarn.lock index 137449e72..8fcc1a504 100644 --- a/yarn.lock +++ b/yarn.lock @@ -46,13 +46,6 @@ __metadata: languageName: node linkType: hard -"@antfu/utils@npm:^0.7.4": - version: 0.7.4 - resolution: "@antfu/utils@npm:0.7.4" - checksum: 10/0efae4c20e344c117d7aecf6a26ea17b266f2f4b7453ba247e557a7d5291b7570928b7387eede0e8485b0643efb4a8e9abb4d3bd059dc65e258f3add345247d5 - languageName: node - linkType: hard - "@antfu/utils@npm:^0.7.6": version: 0.7.6 resolution: "@antfu/utils@npm:0.7.6" @@ -3192,29 +3185,6 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.17.9": - version: 7.23.2 - resolution: "@babel/core@npm:7.23.2" - dependencies: - "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.22.13" - "@babel/generator": "npm:^7.23.0" - "@babel/helper-compilation-targets": "npm:^7.22.15" - "@babel/helper-module-transforms": "npm:^7.23.0" - "@babel/helpers": "npm:^7.23.2" - "@babel/parser": "npm:^7.23.0" - "@babel/template": "npm:^7.22.15" - "@babel/traverse": "npm:^7.23.2" - "@babel/types": "npm:^7.23.0" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10/b69d7008695b2ac7a3a2db83c5c712fbb79f7031c4480f6351cde327930e38873003d1d021059b729a1d0cb48093f1d384c64269b78f6189f50051fe4f64dc2d - languageName: node - linkType: hard - "@babel/core@npm:^7.18.2, @babel/core@npm:^7.24.4": version: 7.24.7 resolution: "@babel/core@npm:7.24.7" @@ -4332,7 +4302,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0-beta.49, @babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.7": +"@babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-module-imports@npm:7.16.7" dependencies: @@ -4499,7 +4469,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.23.0, @babel/helper-module-transforms@npm:^7.23.3": +"@babel/helper-module-transforms@npm:^7.23.3": version: 7.23.3 resolution: "@babel/helper-module-transforms@npm:7.23.3" dependencies: @@ -5403,15 +5373,6 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.18.4": - version: 7.18.8 - resolution: "@babel/parser@npm:7.18.8" - bin: - parser: ./bin/babel-parser.js - checksum: 10/7d3d10bf0d547a9bd5473eb497a7494e649e0e9afac4fb36e2dc94448e7b488285a6bac4c1e71a35cf0eabfe1aba466e476e4b2bf00439f1bf205a75644354e6 - languageName: node - linkType: hard - "@babel/parser@npm:^7.20.15, @babel/parser@npm:^7.21.3, @babel/parser@npm:^7.21.8": version: 7.21.8 resolution: "@babel/parser@npm:7.21.8" @@ -9187,7 +9148,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.16.0, @babel/types@npm:^7.16.7, @babel/types@npm:^7.16.8, @babel/types@npm:^7.17.0, @babel/types@npm:^7.17.10, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.0, @babel/types@npm:^7.16.7, @babel/types@npm:^7.16.8, @babel/types@npm:^7.17.0, @babel/types@npm:^7.17.10, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.17.10 resolution: "@babel/types@npm:7.17.10" dependencies: @@ -11282,19 +11243,6 @@ __metadata: languageName: node linkType: hard -"@graphql-codegen/introspection@npm:^4.0.3": - version: 4.0.3 - resolution: "@graphql-codegen/introspection@npm:4.0.3" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.0.3" - "@graphql-codegen/visitor-plugin-common": "npm:^5.0.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/58063633d0ddbfd4156f4c7c448b40a3e7f9133b209eb9525810f0f682e9e2dd9d0ee212d1df34de740d6a86f857d60a365865ffbcfc07ef5e4edf2a7049f79e - languageName: node - linkType: hard - "@graphql-codegen/plugin-helpers@npm:^5.0.3, @graphql-codegen/plugin-helpers@npm:^5.0.4": version: 5.0.4 resolution: "@graphql-codegen/plugin-helpers@npm:5.0.4" @@ -11370,20 +11318,6 @@ __metadata: languageName: node linkType: hard -"@graphql-codegen/typescript-document-nodes@npm:^4.0.7": - version: 4.0.7 - resolution: "@graphql-codegen/typescript-document-nodes@npm:4.0.7" - dependencies: - "@graphql-codegen/plugin-helpers": "npm:^5.0.4" - "@graphql-codegen/visitor-plugin-common": "npm:5.2.0" - auto-bind: "npm:~4.0.0" - tslib: "npm:~2.6.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 10/7b901bc09f2529148fc846d1d5e5afdebcfa6c2e81b51dd7defbe87945f296e12d4258c399fd1c9fc4ba90d29051b9a1ce2ca7f75f76b5f9bf599cb45479757b - languageName: node - linkType: hard - "@graphql-codegen/typescript-operations@npm:^4.2.1": version: 4.2.1 resolution: "@graphql-codegen/typescript-operations@npm:4.2.1" @@ -11460,7 +11394,7 @@ __metadata: languageName: node linkType: hard -"@graphql-codegen/visitor-plugin-common@npm:5.2.0, @graphql-codegen/visitor-plugin-common@npm:^5.0.0, @graphql-codegen/visitor-plugin-common@npm:^5.2.0": +"@graphql-codegen/visitor-plugin-common@npm:5.2.0, @graphql-codegen/visitor-plugin-common@npm:^5.2.0": version: 5.2.0 resolution: "@graphql-codegen/visitor-plugin-common@npm:5.2.0" dependencies: @@ -12756,13 +12690,6 @@ __metadata: languageName: node linkType: hard -"@mdi/font@npm:^5.8.55": - version: 5.9.55 - resolution: "@mdi/font@npm:5.9.55" - checksum: 10/8466d96ca5f6daf6daa0c4862232af7192e5933d5609f91cb80f023f97be4760a4c6466b9865fcdcd97977c97f752113e81bba123f7bcd02866c8c544485bbed - languageName: node - linkType: hard - "@mdx-js/react@npm:^3.0.0": version: 3.0.1 resolution: "@mdx-js/react@npm:3.0.1" @@ -16961,92 +16888,6 @@ __metadata: languageName: unknown linkType: soft -"@speckle/frontend@workspace:packages/frontend": - version: 0.0.0-use.local - resolution: "@speckle/frontend@workspace:packages/frontend" - dependencies: - "@apollo/client": "npm:^3.7.0" - "@graphql-codegen/cli": "npm:^5.0.2" - "@graphql-codegen/introspection": "npm:^4.0.3" - "@graphql-codegen/typed-document-node": "npm:^5.0.7" - "@graphql-codegen/typescript": "npm:^4.0.7" - "@graphql-codegen/typescript-document-nodes": "npm:^4.0.7" - "@graphql-codegen/typescript-operations": "npm:^4.2.1" - "@mdi/font": "npm:^5.8.55" - "@parcel/watcher": "npm:^2.4.1" - "@speckle/shared": "workspace:^" - "@speckle/viewer": "npm:2.17.8" - "@swc/core": "npm:^1.2.222" - "@tiptap/core": "npm:^2.0.0-beta.176" - "@tiptap/extension-bold": "npm:^2.0.0-beta.26" - "@tiptap/extension-document": "npm:^2.0.0-beta.15" - "@tiptap/extension-hard-break": "npm:^2.0.0-beta.30" - "@tiptap/extension-history": "npm:^2.0.0-beta.21" - "@tiptap/extension-italic": "npm:^2.0.0-beta.26" - "@tiptap/extension-link": "npm:^2.0.0-beta.38" - "@tiptap/extension-mention": "npm:^2.0.0-beta.97" - "@tiptap/extension-paragraph": "npm:^2.0.0-beta.23" - "@tiptap/extension-placeholder": "npm:^2.0.0-beta.48" - "@tiptap/extension-strike": "npm:^2.0.0-beta.27" - "@tiptap/extension-text": "npm:^2.0.0-beta.15" - "@tiptap/extension-underline": "npm:^2.0.0-beta.23" - "@tiptap/vue-2": "npm:^2.0.0-beta.79" - "@tryghost/content-api": "npm:^1.5.12" - "@types/apollo-upload-client": "npm:^17.0.1" - "@types/dompurify": "npm:^2.3.3" - "@types/lodash": "npm:^4.14.180" - "@types/mixpanel-browser": "npm:^2.50.2" - "@types/node": "npm:^17.0.43" - "@typescript-eslint/eslint-plugin": "npm:^7.12.0" - "@typescript-eslint/parser": "npm:^7.12.0" - "@vitejs/plugin-vue2": "npm:^2.2.0" - "@vue/apollo-composable": "npm:^4.0.0-alpha.19" - "@vue/apollo-option": "npm:^4.0.0-alpha.20" - "@vuejs-community/vue-filter-date-format": "npm:^1.6.3" - "@vuejs-community/vue-filter-date-parse": "npm:^1.2.0" - "@vueuse/core": "npm:^9.13.0" - apexcharts: "npm:^3.33.1" - apollo-upload-client: "npm:^17.0.0" - babel-plugin-lodash: "npm:^3.3.4" - dompurify: "npm:^2.5.4" - eslint: "npm:^9.4.0" - eslint-config-prettier: "npm:^9.1.0" - eslint-plugin-vue: "npm:^9.26.0" - graphql: "npm:^15.0.0" - graphql-tag: "npm:^2.12.6" - lodash: "npm:^4.17.21" - lodash-es: "npm:^4.17.21" - numeral: "npm:^2.0.6" - portal-vue: "npm:^2.1.7" - prettier: "npm:^2.5.1" - regenerator-runtime: "npm:^0.13.9" - sass: "npm:~1.32.6" - subscriptions-transport-ws: "npm:^0.11.0" - ts-node: "npm:^10.9.1" - tsconfig-paths: "npm:^4.0.0" - tween: "npm:^0.9.0" - type-fest: "npm:^2.13.1" - typescript: "npm:~4.5.5" - unplugin-vue-components: "npm:^0.25.1" - uuid: "npm:^8.3.2" - v-tooltip: "npm:^2.0.3" - vite: "npm:^5.3.4" - vite-bundle-visualizer: "npm:^0.7.0" - vite-plugin-simple-gql: "npm:^0.5.0" - vue: "npm:^2.7.5" - vue-apexcharts: "npm:^1.6.1" - vue-histogram-slider: "npm:^0.3.8" - vue-infinite-loading: "npm:^2.4.5" - vue-mixpanel: "npm:1.0.7" - vue-router: "npm:^3.4.9" - vue-timeago: "npm:^5.1.2" - vue-tsc: "npm:^1.8.8" - vuedraggable: "npm:^2.24.3" - vuetify: "npm:^2.6.10" - vuetify-image-input: "npm:^19.1.0" - languageName: unknown - linkType: soft - "@speckle/monitor-deployment@workspace:packages/monitor-deployment": version: 0.0.0-use.local resolution: "@speckle/monitor-deployment@workspace:packages/monitor-deployment" @@ -17086,18 +16927,6 @@ __metadata: languageName: unknown linkType: soft -"@speckle/objectloader@npm:^2.17.8": - version: 2.17.9 - resolution: "@speckle/objectloader@npm:2.17.9" - dependencies: - "@babel/core": "npm:^7.17.9" - "@speckle/shared": "npm:^2.17.9" - core-js: "npm:^3.21.1" - regenerator-runtime: "npm:^0.13.7" - checksum: 10/40b84b07f9634ea9b0fb4fdb38aa33e8c2890d949846a48d0eaa4d6baa92b24bcb9abbef28eb7aafd8ef845fb168b9649786c7601d4f2fdbfd88329fd90a1370 - languageName: node - linkType: hard - "@speckle/objectloader@workspace:^, @speckle/objectloader@workspace:packages/objectloader": version: 0.0.0-use.local resolution: "@speckle/objectloader@workspace:packages/objectloader" @@ -17384,21 +17213,6 @@ __metadata: languageName: unknown linkType: soft -"@speckle/shared@npm:^2.17.9": - version: 2.17.9 - resolution: "@speckle/shared@npm:2.17.9" - dependencies: - lodash: "npm:^4.17.0" - lodash-es: "npm:^4.17.21" - type-fest: "npm:^3.11.1" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.176 - pino: ^8.7.0 - pino-http: ^8.0.0 - checksum: 10/6cd69585b10f8b44b56f375a9f64fb204c1af830c9d5e04b1ab7442c3c51c5231e7db88efbb3d6f5b3076d476360cbe194b77d69fea8db0ae1bd7251d87e80c7 - languageName: node - linkType: hard - "@speckle/shared@workspace:^, @speckle/shared@workspace:packages/shared": version: 0.0.0-use.local resolution: "@speckle/shared@workspace:packages/shared" @@ -17554,28 +17368,6 @@ __metadata: languageName: unknown linkType: soft -"@speckle/viewer@npm:2.17.8": - version: 2.17.8 - resolution: "@speckle/viewer@npm:2.17.8" - dependencies: - "@speckle/objectloader": "npm:^2.17.8" - "@types/flat": "npm:^5.0.2" - camera-controls: "npm:^1.33.1" - flat: "npm:^5.0.2" - hold-event: "npm:^0.1.0" - js-logger: "npm:1.6.1" - lodash-es: "npm:^4.17.21" - rainbowvis.js: "npm:^1.0.1" - string-to-color: "npm:^2.2.2" - three: "npm:^0.140.0" - three-mesh-bvh: "npm:0.5.17" - tree-model: "npm:1.0.7" - troika-three-text: "npm:0.47.2" - underscore: "npm:1.13.6" - checksum: 10/e1771c039ba36039da22fae9c4b0c50d438a13f4ef67987e506ef11f6c55c86f794bf1f6537b270fdd3e606ccc61ca30ce49863c6f5bd45afda082146424eb60 - languageName: node - linkType: hard - "@speckle/viewer@workspace:^, @speckle/viewer@workspace:packages/viewer": version: 0.0.0-use.local resolution: "@speckle/viewer@workspace:packages/viewer" @@ -19151,28 +18943,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/extension-bold@npm:^2.0.0-beta.26": - version: 2.0.0-beta.26 - resolution: "@tiptap/extension-bold@npm:2.0.0-beta.26" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/ca510a9939c577bafd7a1bb8266b8688dacd4085fcd1af1c15fe394dbc0afd52cc5af53df4d993ff7c5ecdce70ce1789ac64bac3b86eab76fd9834709704a873 - languageName: node - linkType: hard - -"@tiptap/extension-bubble-menu@npm:^2.0.0-beta.56": - version: 2.0.0-beta.56 - resolution: "@tiptap/extension-bubble-menu@npm:2.0.0-beta.56" - dependencies: - prosemirror-state: "npm:^1.3.4" - prosemirror-view: "npm:^1.23.6" - tippy.js: "npm:^6.3.7" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/c04b9aa2b5161eecab2f1b670d3bae1a2706a4cce7595bbedb308e6d8638c2438ce1db52989554eef6700bacd13c588fe7d1368af5e43fdd1df765ba3cfd2584 - languageName: node - linkType: hard - "@tiptap/extension-bubble-menu@npm:^2.10.3": version: 2.10.3 resolution: "@tiptap/extension-bubble-menu@npm:2.10.3" @@ -19194,28 +18964,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/extension-document@npm:^2.0.0-beta.15": - version: 2.0.0-beta.15 - resolution: "@tiptap/extension-document@npm:2.0.0-beta.15" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/ec8da881374d88abb946e9e3fcd4ab76a0bc7671e9bba0a0184f2d15e27d1f50e2e2ac8647a1b53608d2cc84aa8fc1e2907adf1554e01723a71debd82d019119 - languageName: node - linkType: hard - -"@tiptap/extension-floating-menu@npm:^2.0.0-beta.51": - version: 2.0.0-beta.51 - resolution: "@tiptap/extension-floating-menu@npm:2.0.0-beta.51" - dependencies: - prosemirror-state: "npm:^1.3.4" - prosemirror-view: "npm:^1.23.6" - tippy.js: "npm:^6.3.7" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/82221f6ea35ca11fa1841bfe0a8f3ef1efcf1106c53e1f71b680dedd01141aaa55850e2b759a385bcc8f22c33352d80699a65da328a6702572c66bb5915e2f76 - languageName: node - linkType: hard - "@tiptap/extension-floating-menu@npm:^2.10.3": version: 2.10.3 resolution: "@tiptap/extension-floating-menu@npm:2.10.3" @@ -19237,15 +18985,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/extension-hard-break@npm:^2.0.0-beta.30": - version: 2.0.0-beta.30 - resolution: "@tiptap/extension-hard-break@npm:2.0.0-beta.30" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/9f69f8dcf249df8b194b06143118f351a540b1ffd24d7405e89f207e7c9ea2b8722e507f2db91f899bf6c0587c393ddc3aa68192fb632676506a382696bdbc29 - languageName: node - linkType: hard - "@tiptap/extension-history@npm:2.10.3": version: 2.10.3 resolution: "@tiptap/extension-history@npm:2.10.3" @@ -19256,18 +18995,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/extension-history@npm:^2.0.0-beta.21": - version: 2.0.0-beta.21 - resolution: "@tiptap/extension-history@npm:2.0.0-beta.21" - dependencies: - "@types/prosemirror-history": "npm:^1.0.3" - prosemirror-history: "npm:^1.2.0" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/cd95dfc8274a4830b22a95c0a691272cab1bc9e4d46c1b120b9e9f0198729d848f20205d4c810d3998f783e9c80f3e71df077ea8c4780f61a438719b6338f932 - languageName: node - linkType: hard - "@tiptap/extension-italic@npm:2.10.3": version: 2.10.3 resolution: "@tiptap/extension-italic@npm:2.10.3" @@ -19277,15 +19004,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/extension-italic@npm:^2.0.0-beta.26": - version: 2.0.0-beta.26 - resolution: "@tiptap/extension-italic@npm:2.0.0-beta.26" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/3567823fa6529a355e348c0df0f185d72e790d41cbb2b2507e2996f388232789ccb30c14ae9e340ca9706c59c2559a359a2ebccdf2704fd88a8de4474e9ae2e1 - languageName: node - linkType: hard - "@tiptap/extension-link@npm:2.10.3": version: 2.10.3 resolution: "@tiptap/extension-link@npm:2.10.3" @@ -19298,19 +19016,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/extension-link@npm:^2.0.0-beta.38": - version: 2.0.0-beta.38 - resolution: "@tiptap/extension-link@npm:2.0.0-beta.38" - dependencies: - linkifyjs: "npm:^3.0.5" - prosemirror-model: "npm:^1.16.1" - prosemirror-state: "npm:^1.3.4" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/52924872395a1fb518c1e8256463bd3505ab7a8b9558c30307802629fcd1d2a25af04693a9361d41e96b0c0134795b1bf69927c5e3d9204324772ec60b327998 - languageName: node - linkType: hard - "@tiptap/extension-mention@npm:2.10.3": version: 2.10.3 resolution: "@tiptap/extension-mention@npm:2.10.3" @@ -19322,19 +19027,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/extension-mention@npm:^2.0.0-beta.97": - version: 2.0.0-beta.97 - resolution: "@tiptap/extension-mention@npm:2.0.0-beta.97" - dependencies: - "@tiptap/suggestion": "npm:^2.0.0-beta.92" - prosemirror-model: "npm:^1.16.1" - prosemirror-state: "npm:^1.3.4" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/8cebbeaf6be464852c1aa3bb49a38e58e2502817d0b1254f4cff9b42c22aa15c9bccb11e03c438c8555a00db895a572b15e5e04679cbd674244376072036c0c0 - languageName: node - linkType: hard - "@tiptap/extension-paragraph@npm:2.10.3": version: 2.10.3 resolution: "@tiptap/extension-paragraph@npm:2.10.3" @@ -19344,15 +19036,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/extension-paragraph@npm:^2.0.0-beta.23": - version: 2.0.0-beta.23 - resolution: "@tiptap/extension-paragraph@npm:2.0.0-beta.23" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/448f0072adf7436260be400b431999055d4c104e2d104b7f592b9060bbc6e0ebf33c7f8371e07ac834af27314b5ebf66410f02bed300a6dfdcccb16b03b21d19 - languageName: node - linkType: hard - "@tiptap/extension-placeholder@npm:2.10.3": version: 2.10.3 resolution: "@tiptap/extension-placeholder@npm:2.10.3" @@ -19363,19 +19046,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/extension-placeholder@npm:^2.0.0-beta.48": - version: 2.0.0-beta.48 - resolution: "@tiptap/extension-placeholder@npm:2.0.0-beta.48" - dependencies: - prosemirror-model: "npm:^1.16.1" - prosemirror-state: "npm:^1.3.4" - prosemirror-view: "npm:^1.23.6" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/40438e3ebbe7e573c83bfd25dc3a79f2651a7bf02db00225116bd110004cfb1188780dfbc2e1f463d8920e40d796ba535698e3c3dcf5e76d6365feeaf3887c17 - languageName: node - linkType: hard - "@tiptap/extension-strike@npm:2.10.3": version: 2.10.3 resolution: "@tiptap/extension-strike@npm:2.10.3" @@ -19385,15 +19055,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/extension-strike@npm:^2.0.0-beta.27": - version: 2.0.0-beta.27 - resolution: "@tiptap/extension-strike@npm:2.0.0-beta.27" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/b43c44e3b2b59cd1008b13095f538e60c909919f698ec472df19bf1978f519e50e3a5bc4906ab39123416f1a7320f740fb5fd0813cdee8aced7bd7ee54a3ae0e - languageName: node - linkType: hard - "@tiptap/extension-text@npm:2.10.3": version: 2.10.3 resolution: "@tiptap/extension-text@npm:2.10.3" @@ -19403,15 +19064,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/extension-text@npm:^2.0.0-beta.15": - version: 2.0.0-beta.15 - resolution: "@tiptap/extension-text@npm:2.0.0-beta.15" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/df0263ac95683b9d1c61d180fc366b9f65ac0f722b332b16ac1bbde6dad0cb9a9035443d1e48c12fa70b4c07f0b70768ea16da0a56145e17a177f6928a161d5e - languageName: node - linkType: hard - "@tiptap/extension-underline@npm:2.10.3": version: 2.10.3 resolution: "@tiptap/extension-underline@npm:2.10.3" @@ -19421,15 +19073,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/extension-underline@npm:^2.0.0-beta.23": - version: 2.0.0-beta.23 - resolution: "@tiptap/extension-underline@npm:2.0.0-beta.23" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/a25a292cc620bd9c4c125121be8a436e44cb5bfa185abd3bf4932f714bd4a5896585c1e685ffe2b7d4dba8945f85728905d304cdadf5b2fa41605ba9f7b579b7 - languageName: node - linkType: hard - "@tiptap/pm@npm:2.10.3": version: 2.10.3 resolution: "@tiptap/pm@npm:2.10.3" @@ -19466,33 +19109,6 @@ __metadata: languageName: node linkType: hard -"@tiptap/suggestion@npm:^2.0.0-beta.92": - version: 2.0.0-beta.92 - resolution: "@tiptap/suggestion@npm:2.0.0-beta.92" - dependencies: - prosemirror-model: "npm:^1.16.1" - prosemirror-state: "npm:^1.3.4" - prosemirror-view: "npm:^1.23.6" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - checksum: 10/8df2aeefa954f6f6ad2dd3f73724596ca515c1fc079afda7180f8c6a729d046a40c69c1e4cf507ebb7c2d5a14e8a49f31a29dbb7971c064c4bfc59777f4cf048 - languageName: node - linkType: hard - -"@tiptap/vue-2@npm:^2.0.0-beta.79": - version: 2.0.0-beta.79 - resolution: "@tiptap/vue-2@npm:2.0.0-beta.79" - dependencies: - "@tiptap/extension-bubble-menu": "npm:^2.0.0-beta.56" - "@tiptap/extension-floating-menu": "npm:^2.0.0-beta.51" - prosemirror-view: "npm:^1.23.6" - peerDependencies: - "@tiptap/core": ^2.0.0-beta.1 - vue: ^2.6.0 - checksum: 10/d8d186ff4aeca42a20001d3ec65a3f4010d35a67a8b6514a0d40e4eac89c6e5a6993d277e0ea0f319509404cc3483046dc844ce46d0567420265d31108674502 - languageName: node - linkType: hard - "@tiptap/vue-3@npm:2.10.3": version: 2.10.3 resolution: "@tiptap/vue-3@npm:2.10.3" @@ -19537,15 +19153,6 @@ __metadata: languageName: node linkType: hard -"@tryghost/content-api@npm:^1.5.12": - version: 1.11.19 - resolution: "@tryghost/content-api@npm:1.11.19" - dependencies: - axios: "npm:^1.0.0" - checksum: 10/08e57b64bb5e474bf378949daf989aa5be52fadf57ae7f3dcfb716c2cecea8001ff287e17048fd5ecb4aebd96568b884d4e3455c67b61a1bfa86e36d203d0cb2 - languageName: node - linkType: hard - "@trysound/sax@npm:0.2.0": version: 0.2.0 resolution: "@trysound/sax@npm:0.2.0" @@ -19900,15 +19507,6 @@ __metadata: languageName: node linkType: hard -"@types/dompurify@npm:^2.3.3": - version: 2.3.3 - resolution: "@types/dompurify@npm:2.3.3" - dependencies: - "@types/trusted-types": "npm:*" - checksum: 10/fc6287cccfe1befafabf8f3e50edced8eba3c6b4974f712c18032fe97aa734a6f1a30c11b4de65d3e63f6bde615417063ed207d9bcd90f1417528bb17f6583da - languageName: node - linkType: hard - "@types/dompurify@npm:^3.0.2": version: 3.0.5 resolution: "@types/dompurify@npm:3.0.5" @@ -20535,13 +20133,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^17.0.43": - version: 17.0.43 - resolution: "@types/node@npm:17.0.43" - checksum: 10/9b4e00a355b74ef303e4bf83cafe98cff5a67fb1eaea9158a98c878c1d83026422bbbca797b773554ea9bfcfb056dd3c000e868ef3d914e929910cf76bffdf93 - languageName: node - linkType: hard - "@types/node@npm:^18": version: 18.16.12 resolution: "@types/node@npm:18.16.12" @@ -20752,16 +20343,6 @@ __metadata: languageName: node linkType: hard -"@types/prosemirror-history@npm:^1.0.3": - version: 1.0.3 - resolution: "@types/prosemirror-history@npm:1.0.3" - dependencies: - "@types/prosemirror-model": "npm:*" - "@types/prosemirror-state": "npm:*" - checksum: 10/d1c9b4d2f603ac60895db711ff6eeda6ea7d81eb65754a878a2d9f8f64e66e0737e8ac33a3a1ab22a6597fd84e954a593bf2f39c47cbdbc4bb524bdad422b432 - languageName: node - linkType: hard - "@types/prosemirror-keymap@npm:^1.0.4": version: 1.0.4 resolution: "@types/prosemirror-keymap@npm:1.0.4" @@ -21640,16 +21221,6 @@ __metadata: languageName: node linkType: hard -"@vitejs/plugin-vue2@npm:^2.2.0": - version: 2.2.0 - resolution: "@vitejs/plugin-vue2@npm:2.2.0" - peerDependencies: - vite: ^3.0.0 || ^4.0.0 - vue: ^2.7.0-0 - checksum: 10/5ccec9bd1f45a47eaee84df932a31a5cfa20e35b4242fc096175ede83d5dcc4ec8dfd2977d4f4d2f2216a93374082eb9ff46fe804f3b324c901dc00a05fab0a9 - languageName: node - linkType: hard - "@vitejs/plugin-vue@npm:^4.2.3": version: 4.2.3 resolution: "@vitejs/plugin-vue@npm:4.2.3" @@ -21879,15 +21450,6 @@ __metadata: languageName: node linkType: hard -"@volar/language-core@npm:1.10.1, @volar/language-core@npm:~1.10.0": - version: 1.10.1 - resolution: "@volar/language-core@npm:1.10.1" - dependencies: - "@volar/source-map": "npm:1.10.1" - checksum: 10/bb460667f85bf1e8420ce62a7562a82bf97a92c01a56df7d6721e08a390b1ffcec156ac4de100e6ac9ee5cf6c63cae9006fa7398309339853c4ef32fba1b9385 - languageName: node - linkType: hard - "@volar/language-core@npm:1.10.10, @volar/language-core@npm:~1.10.5": version: 1.10.10 resolution: "@volar/language-core@npm:1.10.10" @@ -21933,15 +21495,6 @@ __metadata: languageName: node linkType: hard -"@volar/source-map@npm:1.10.1, @volar/source-map@npm:~1.10.0": - version: 1.10.1 - resolution: "@volar/source-map@npm:1.10.1" - dependencies: - muggle-string: "npm:^0.3.1" - checksum: 10/5f023be5e8e5592437b7aabe070c2f017a48ff05f46c297a141f3293dab28799264806105ff5d5174aa4e43d4b7d6410d98da8e1ce99acdda0d7c3ffb42a1bf7 - languageName: node - linkType: hard - "@volar/source-map@npm:1.10.10, @volar/source-map@npm:~1.10.5": version: 1.10.10 resolution: "@volar/source-map@npm:1.10.10" @@ -21996,15 +21549,6 @@ __metadata: languageName: node linkType: hard -"@volar/typescript@npm:~1.10.0": - version: 1.10.1 - resolution: "@volar/typescript@npm:1.10.1" - dependencies: - "@volar/language-core": "npm:1.10.1" - checksum: 10/e94f6032e8c59c2b9f334db5f31ecf5e5d35fea440e0c2ee6565043364bc3a00deb0a94dbc12ba7e3a095eafbe9ceca951275eb1283249e8a735aba2dd0b3a9c - languageName: node - linkType: hard - "@volar/typescript@npm:~1.10.5": version: 1.10.10 resolution: "@volar/typescript@npm:1.10.10" @@ -22442,7 +21986,7 @@ __metadata: languageName: node linkType: hard -"@vue/apollo-composable@npm:^4.0.0-alpha.19, @vue/apollo-composable@npm:^4.0.0-beta.5": +"@vue/apollo-composable@npm:^4.0.0-beta.5": version: 4.2.1 resolution: "@vue/apollo-composable@npm:4.2.1" dependencies: @@ -22461,18 +22005,6 @@ __metadata: languageName: node linkType: hard -"@vue/apollo-option@npm:^4.0.0-alpha.20": - version: 4.0.0-alpha.20 - resolution: "@vue/apollo-option@npm:4.0.0-alpha.20" - dependencies: - throttle-debounce: "npm:^3.0.1" - peerDependencies: - "@apollo/client": ^3.2.1 - vue: ^3.1.0 - checksum: 10/7ca50f5f79fd0e30f19fb690ecb8d8b5cd140aac83101312b8e6eb95a0fda1d12fb89aff35058abbb137cc4b5c5c66f846ec1d36edec4356ad1871d0d71bb4f3 - languageName: node - linkType: hard - "@vue/apollo-ssr@npm:4.0.0": version: 4.0.0 resolution: "@vue/apollo-ssr@npm:4.0.0" @@ -22733,17 +22265,6 @@ __metadata: languageName: node linkType: hard -"@vue/compiler-sfc@npm:2.7.5": - version: 2.7.5 - resolution: "@vue/compiler-sfc@npm:2.7.5" - dependencies: - "@babel/parser": "npm:^7.18.4" - postcss: "npm:^8.4.14" - source-map: "npm:^0.6.1" - checksum: 10/e3f5d6e7a2479d94977a322544b00753473622beadacb58c376a6cafcfebc511d41d1df6e2bfa016cc345931c15abdc0d05fa45320bd95e6597c52c597f96738 - languageName: node - linkType: hard - "@vue/compiler-sfc@npm:3.4.21": version: 3.4.21 resolution: "@vue/compiler-sfc@npm:3.4.21" @@ -23007,27 +22528,6 @@ __metadata: languageName: node linkType: hard -"@vue/language-core@npm:1.8.8": - version: 1.8.8 - resolution: "@vue/language-core@npm:1.8.8" - dependencies: - "@volar/language-core": "npm:~1.10.0" - "@volar/source-map": "npm:~1.10.0" - "@vue/compiler-dom": "npm:^3.3.0" - "@vue/reactivity": "npm:^3.3.0" - "@vue/shared": "npm:^3.3.0" - minimatch: "npm:^9.0.0" - muggle-string: "npm:^0.3.1" - vue-template-compiler: "npm:^2.7.14" - peerDependencies: - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/f59bf1ec95754e1d35953d0ca3264ee021a43f454cd3e2af52ce50379500c5549cc97313dee3edcecd075f1669aa78b76d932cdbd8350985cdd31705c33659e0 - languageName: node - linkType: hard - "@vue/language-core@npm:2.0.10": version: 2.0.10 resolution: "@vue/language-core@npm:2.0.10" @@ -23147,15 +22647,6 @@ __metadata: languageName: node linkType: hard -"@vue/reactivity@npm:^3.3.0": - version: 3.3.4 - resolution: "@vue/reactivity@npm:3.3.4" - dependencies: - "@vue/shared": "npm:3.3.4" - checksum: 10/39c80d83e6e046c086f1f5db53c9e9e806ddf6e90bb2d0ea33f60da85c4747cae26d34959ae1f5b2a4b9e2822fc74701c996aa43ab1c727d2d4887e0ed0c8023 - languageName: node - linkType: hard - "@vue/runtime-core@npm:3.4.21": version: 3.4.21 resolution: "@vue/runtime-core@npm:3.4.21" @@ -23281,32 +22772,6 @@ __metadata: languageName: node linkType: hard -"@vue/typescript@npm:1.8.8": - version: 1.8.8 - resolution: "@vue/typescript@npm:1.8.8" - dependencies: - "@volar/typescript": "npm:~1.10.0" - "@vue/language-core": "npm:1.8.8" - checksum: 10/9ebffe238937dbed576a6a84f6adcea1318acda16142bb7a3dd187335e3829a9ec22c72fd93865980832c2d96d316954a5ae0abd4a56a06966a03398d0eda5a5 - languageName: node - linkType: hard - -"@vuejs-community/vue-filter-date-format@npm:^1.6.3": - version: 1.6.3 - resolution: "@vuejs-community/vue-filter-date-format@npm:1.6.3" - peerDependencies: - vue: ^2.0.0 - checksum: 10/757d2e10f891b38b97bacc038add7834e5cc09cde281ad4a4e120467d7957050aef7ac1067a95d6d04accc98a0769a7795b1803d1b41e22f500ba41f53111601 - languageName: node - linkType: hard - -"@vuejs-community/vue-filter-date-parse@npm:^1.2.0": - version: 1.2.0 - resolution: "@vuejs-community/vue-filter-date-parse@npm:1.2.0" - checksum: 10/92ad64996aef07ebba75ecb5839e6c5ddd3b8708dfd4c5eaf509c2936c368b1270714b4d98b750651cf6b19102c4878cf67dab9ddeba5e714a8a126ed88c9dcb - languageName: node - linkType: hard - "@vueuse/core@npm:^10.9.0": version: 10.9.0 resolution: "@vueuse/core@npm:10.9.0" @@ -24290,20 +23755,6 @@ __metadata: languageName: node linkType: hard -"apexcharts@npm:^3.33.1": - version: 3.35.0 - resolution: "apexcharts@npm:3.35.0" - dependencies: - svg.draggable.js: "npm:^2.2.2" - svg.easing.js: "npm:^2.0.0" - svg.filter.js: "npm:^2.0.2" - svg.pathmorphing.js: "npm:^0.1.3" - svg.resize.js: "npm:^1.4.3" - svg.select.js: "npm:^3.0.1" - checksum: 10/9419d6999d3480e4ab405929b48a6a735f13cdef053b23e4393ed2fd662b9a02164d435a8ca9803c7fdd9323c39a0f6baee8f2f4486f697626bc7c4cb1faaa9d - languageName: node - linkType: hard - "apollo-upload-client@npm:^17.0.0": version: 17.0.0 resolution: "apollo-upload-client@npm:17.0.0" @@ -25043,19 +24494,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-lodash@npm:^3.3.4": - version: 3.3.4 - resolution: "babel-plugin-lodash@npm:3.3.4" - dependencies: - "@babel/helper-module-imports": "npm:^7.0.0-beta.49" - "@babel/types": "npm:^7.0.0-beta.49" - glob: "npm:^7.1.1" - lodash: "npm:^4.17.10" - require-package-name: "npm:^2.0.1" - checksum: 10/42cd68f898df5984b11dd0cae02cb7b050915aa7581df4878b9a73cb02168faea75c53094b9ff2300affe867608deaadb1287f86c41d5cf1af07e913b72cc8b7 - languageName: node - linkType: hard - "babel-plugin-polyfill-corejs2@npm:^0.3.0": version: 0.3.1 resolution: "babel-plugin-polyfill-corejs2@npm:0.3.1" @@ -26283,15 +25721,6 @@ __metadata: languageName: node linkType: hard -"camera-controls@npm:^1.33.1": - version: 1.34.3 - resolution: "camera-controls@npm:1.34.3" - peerDependencies: - three: ">=0.126.1" - checksum: 10/3674aae6986c276dfaa20cc8a9fcf42c764594405392a5e47136f24e335092a84d087d0e0d6d92840ff853ab17571ebf1b1ece6698c5ecaa6735a1ae9cdf1ea1 - languageName: node - linkType: hard - "caniuse-api@npm:^3.0.0": version: 3.0.0 resolution: "caniuse-api@npm:3.0.0" @@ -26602,7 +26031,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:3.5.3, chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.0.0, chokidar@npm:^3.4.0, chokidar@npm:^3.5.1, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": +"chokidar@npm:3.5.3, chokidar@npm:^3.0.0, chokidar@npm:^3.4.0, chokidar@npm:^3.5.1, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3": version: 3.5.3 resolution: "chokidar@npm:3.5.3" dependencies: @@ -28400,13 +27829,6 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.1.0": - version: 3.1.0 - resolution: "csstype@npm:3.1.0" - checksum: 10/68e26f21d757bad99bd22c3887249c38828b3a9167ca781baaba6a24563c898a4d6d3bc2335ddb113e22d4a0c02349108e46221a9ad9ecb71112ef99f5992c4c - languageName: node - linkType: hard - "csstype@npm:^3.1.3": version: 3.1.3 resolution: "csstype@npm:3.1.3" @@ -28456,150 +27878,6 @@ __metadata: languageName: node linkType: hard -"d3-array@npm:2, d3-array@npm:^2.3.0, d3-array@npm:^2.3.2": - version: 2.12.1 - resolution: "d3-array@npm:2.12.1" - dependencies: - internmap: "npm:^1.0.0" - checksum: 10/9fdfb91f428915006e126090fe9aa9d5fcbecc78e925eceb32de9dfb989135f6ad940a8f1b086d0b569523679f85453c5335772aa9e6d5d41b480c2610857c7f - languageName: node - linkType: hard - -"d3-brush@npm:^1.1.3": - version: 1.1.6 - resolution: "d3-brush@npm:1.1.6" - dependencies: - d3-dispatch: "npm:1" - d3-drag: "npm:1" - d3-interpolate: "npm:1" - d3-selection: "npm:1" - d3-transition: "npm:1" - checksum: 10/44c0df7fbbd840a89983021be7ff7a415251a99fb2fbecb43e7fa1e874e792f75c445870c38e57f25ca7b5acb8dd322a7baca573e141673db2ae05dfd4a4507a - languageName: node - linkType: hard - -"d3-color@npm:1": - version: 1.4.1 - resolution: "d3-color@npm:1.4.1" - checksum: 10/f264a0ed65cfd8acdee7baeb32c71ed6a6f31d0730b320dc451050982d88ed606d4ce5aaab05a12a0afb0873209f622bed93d4d79b4095e2b063db40aceaf310 - languageName: node - linkType: hard - -"d3-color@npm:1 - 2": - version: 2.0.0 - resolution: "d3-color@npm:2.0.0" - checksum: 10/f8902fa788320e7fc6ff49254e22b4d1b22d2eef5d7c2df36d180e202bdc7fc1a2a3daefbc0cb69b3e0cf6cd331704e044568e3ded70037f39a5a50f6164238d - languageName: node - linkType: hard - -"d3-dispatch@npm:1": - version: 1.0.6 - resolution: "d3-dispatch@npm:1.0.6" - checksum: 10/c04770f3055cf3841b4640fcf41ed75f31c599b0e32a9fa8d51939a780c8bff9e849f2335960ce3f5b9b9294d26fd11b7ee4040d1668f7a7a1140925fddb3f60 - languageName: node - linkType: hard - -"d3-drag@npm:1": - version: 1.2.5 - resolution: "d3-drag@npm:1.2.5" - dependencies: - d3-dispatch: "npm:1" - d3-selection: "npm:1" - checksum: 10/e1fdc87b4e2ccb74ea18d82e423515b5781758fc773d25979efb7eba179d1912ada8348e856b2d95674936f7fa1e30a02ce8bb52fb855196adbd24fb293290e0 - languageName: node - linkType: hard - -"d3-ease@npm:1": - version: 1.0.7 - resolution: "d3-ease@npm:1.0.7" - checksum: 10/7bddd332094e4d02964f414e4b70d02db5efb920065c0a3dd850c1b16b2bd8e930d1a37d2b2f0e8322ce943710e0f395f06870a8ad0ba2d33a5835ec9356bbaa - languageName: node - linkType: hard - -"d3-format@npm:1 - 2": - version: 2.0.0 - resolution: "d3-format@npm:2.0.0" - checksum: 10/7f87226c4c649889d5d3a19fd404b4c74d4468a2a80d91c31fd149bb8b1091ed315bc2b0233f9c3346fe2d6cdc083fb1c3b4053b02d286c695edbf9bd4819019 - languageName: node - linkType: hard - -"d3-interpolate@npm:1": - version: 1.4.0 - resolution: "d3-interpolate@npm:1.4.0" - dependencies: - d3-color: "npm:1" - checksum: 10/e2978b047ea934aa46963091cd0ca03cf3c17756fe12d81bce0b2f6b50b6f5084dc54a2395acd26d8f797b8c25022cb7e16eb8e1b49a6ec0eda8f45f28f8cc4b - languageName: node - linkType: hard - -"d3-interpolate@npm:1.2.0 - 2": - version: 2.0.1 - resolution: "d3-interpolate@npm:2.0.1" - dependencies: - d3-color: "npm:1 - 2" - checksum: 10/2f59f311ea1bff8b8a5e2834752b7b7515ac2428b15ea2b8af49bdb0f13489332e6068c7f1e663ef3f01743552be15686ddc7ba51b8d13e4f9d94c860b1163a4 - languageName: node - linkType: hard - -"d3-scale@npm:^3.1.0": - version: 3.3.0 - resolution: "d3-scale@npm:3.3.0" - dependencies: - d3-array: "npm:^2.3.0" - d3-format: "npm:1 - 2" - d3-interpolate: "npm:1.2.0 - 2" - d3-time: "npm:^2.1.1" - d3-time-format: "npm:2 - 3" - checksum: 10/54eea262b5aada3b23983e2ee299df7f4afee693c564174ef3755510c5c9c505b431e5f63a51e1080827002a17477c28e8a39326300a9f68360834125fffdf37 - languageName: node - linkType: hard - -"d3-selection@npm:1, d3-selection@npm:^1.1.0, d3-selection@npm:^1.4.0": - version: 1.4.2 - resolution: "d3-selection@npm:1.4.2" - checksum: 10/fdbfffb735f76132762399e3c4297e7e21e983c984524373b2d36f06eef185424e578794a0ae17c3565be136ef1e639848c6ae378f99a91b5ac3b5a649e4c4db - languageName: node - linkType: hard - -"d3-time-format@npm:2 - 3": - version: 3.0.0 - resolution: "d3-time-format@npm:3.0.0" - dependencies: - d3-time: "npm:1 - 2" - checksum: 10/2ae8d0d432a160030d22b678320dffe8599a8ed1fa36604374123d024f953a56c5b4829170b14e2a257fc36cafc9f1fe2cf7c295463a1f5ea0617ad96751f977 - languageName: node - linkType: hard - -"d3-time@npm:1 - 2, d3-time@npm:^2.1.1": - version: 2.1.1 - resolution: "d3-time@npm:2.1.1" - dependencies: - d3-array: "npm:2" - checksum: 10/fe780d761e5a70e4afe5a13184a7011e25da4a0e56abef18ba414441cdc94fd67fdb992da72f12154efc3488da7cfde1c83b33ee60d836b5828cf75a38514afb - languageName: node - linkType: hard - -"d3-timer@npm:1": - version: 1.0.10 - resolution: "d3-timer@npm:1.0.10" - checksum: 10/aeaf0f849f1ed316ab4467b822333b22851f174faa6c7dd24735b86bf5f3dc75bb3c3ae02b99ba1f16260a7570ac59563728577ecb6083e47edbaff2ca5c9237 - languageName: node - linkType: hard - -"d3-transition@npm:1, d3-transition@npm:^1.2.0": - version: 1.3.2 - resolution: "d3-transition@npm:1.3.2" - dependencies: - d3-color: "npm:1" - d3-dispatch: "npm:1" - d3-ease: "npm:1" - d3-interpolate: "npm:1" - d3-selection: "npm:^1.1.0" - d3-timer: "npm:1" - checksum: 10/c11924ef60d134915ac691f25f5ec1cadb090a7ec02fd45748bad86dc6d20e0eaed5ec504cf2c23917163e823017c34497e5bc6062b623770d9763441d301c73 - languageName: node - linkType: hard - "dashdash@npm:^1.12.0": version: 1.14.1 resolution: "dashdash@npm:1.14.1" @@ -28682,13 +27960,6 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^1.29.0": - version: 1.30.1 - resolution: "date-fns@npm:1.30.1" - checksum: 10/24c0937f4e5704f25627c9d1e92e1fe03cd6165d9f32334b7f923a737a57ef992c287cad0694356071e617fbbfa6bd10dec9192ea9035a3e6d0745b9d1594883 - languageName: node - linkType: hard - "date-fns@npm:^2.16.1": version: 2.28.0 resolution: "date-fns@npm:2.28.0" @@ -29659,13 +28930,6 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^2.5.4": - version: 2.5.6 - resolution: "dompurify@npm:2.5.6" - checksum: 10/ef5fdc075ee448246b2b54bf8c7e2608dbaa176d9366137d2ff4e4ed4e580a2e913d5a58f1d3609f63d67871574e5fdcce534b185a1b1efdd8b931cd843b045a - languageName: node - linkType: hard - "dompurify@npm:^3.0.4": version: 3.0.11 resolution: "dompurify@npm:3.0.11" @@ -33784,13 +33048,6 @@ __metadata: languageName: node linkType: hard -"graphql@npm:^15.0.0": - version: 15.9.0 - resolution: "graphql@npm:15.9.0" - checksum: 10/ce1f50672bcb369395d07a47048bcbb429ed1ce06dbcafb7a0999df791cb7aa7206be21497907973dbc8a01df3cd7f632f43c583f248538f186f5adfa1a0d1c5 - languageName: node - linkType: hard - "gtoken@npm:^6.1.0": version: 6.1.2 resolution: "gtoken@npm:6.1.2" @@ -34167,13 +33424,6 @@ __metadata: languageName: node linkType: hard -"hold-event@npm:^0.1.0": - version: 0.1.0 - resolution: "hold-event@npm:0.1.0" - checksum: 10/3c627b6c916872367c91a7fbd79b4c08292652dc3759a590e88ee230292c6a1991863174975fd0b3e258e06803da5c6f82320643d7fc5b55c433d5b9aca593c8 - languageName: node - linkType: hard - "homedir-polyfill@npm:^1.0.0, homedir-polyfill@npm:^1.0.1": version: 1.0.3 resolution: "homedir-polyfill@npm:1.0.3" @@ -35028,13 +34278,6 @@ __metadata: languageName: node linkType: hard -"internmap@npm:^1.0.0": - version: 1.0.1 - resolution: "internmap@npm:1.0.1" - checksum: 10/429cb9e28f393f10c73a826d71ba9e359711b7e42345bd684aba708f43b8139ce90f09b15abbf977a981474ac61615294854e5b9520d3f65187d0f6a2ff27665 - languageName: node - linkType: hard - "interpret@npm:^2.2.0": version: 2.2.0 resolution: "interpret@npm:2.2.0" @@ -36900,13 +36143,6 @@ __metadata: languageName: node linkType: hard -"jquery@npm:3.5": - version: 3.5.1 - resolution: "jquery@npm:3.5.1" - checksum: 10/b301ef0561057a8f2967bb15c03ac8ed16f902f0fc3c768be90171e4f3ebf5938c4e86ffcca6424eec9ed38ea210c57252cc8777502f064c241ee7dfcb8a4cc7 - languageName: node - linkType: hard - "js-beautify@npm:^1.6.14": version: 1.14.6 resolution: "js-beautify@npm:1.14.6" @@ -37870,13 +37106,6 @@ __metadata: languageName: node linkType: hard -"linkifyjs@npm:^3.0.5": - version: 3.0.5 - resolution: "linkifyjs@npm:3.0.5" - checksum: 10/bd9641c7b7712e43a466e38cd601313cbdac058dcba0c95f62516006ccb01fbdf9f4e54cda1f4742e0b1497c310335154dd978ead9d5558c4577ace817c12d2b - languageName: node - linkType: hard - "linkifyjs@npm:^4.1.0": version: 4.1.0 resolution: "linkifyjs@npm:4.1.0" @@ -38414,7 +37643,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:^4.0.0, lodash@npm:^4.11.2, lodash@npm:^4.17.0, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.5, lodash@npm:~4.17.0, lodash@npm:~4.17.15": +"lodash@npm:4.17.21, lodash@npm:^4.0.0, lodash@npm:^4.11.2, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.5, lodash@npm:~4.17.0, lodash@npm:~4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 @@ -39310,15 +38539,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.1": - version: 9.0.1 - resolution: "minimatch@npm:9.0.1" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10/b4e98f4dc740dcf33999a99af23ae6e5e1c47632f296dc95cb649a282150f92378d41434bf64af4ea2e5975255a757d031c3bf014bad9214544ac57d97f3ba63 - languageName: node - linkType: hard - "minimatch@npm:^9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -39495,13 +38715,6 @@ __metadata: languageName: node linkType: hard -"mixpanel-browser@npm:^2.39.0": - version: 2.45.0 - resolution: "mixpanel-browser@npm:2.45.0" - checksum: 10/a3d0ce4b508c6b41f78b7cd0bcde1fa47c91f3c5efa526127ea0861d61994cc9777fce31c1243256232c4e9e0e357b09b851e5d6f76ddd590658c618c40b6551 - languageName: node - linkType: hard - "mixpanel-browser@npm:^2.58.0": version: 2.58.0 resolution: "mixpanel-browser@npm:2.58.0" @@ -41565,13 +40778,6 @@ __metadata: languageName: node linkType: hard -"numeral@npm:^2.0.6": - version: 2.0.6 - resolution: "numeral@npm:2.0.6" - checksum: 10/5d19829b5b8d6b503d3c0144fcbaf0f515f8666c87e96e9484a3742d0f6e13a14f763cad313dfaa0d968b3e1a65fc1d8162f4f0c715c3d2e1859ed27ed0834c2 - languageName: node - linkType: hard - "nuxi@npm:3.6.3": version: 3.6.3 resolution: "nuxi@npm:3.6.3" @@ -43543,22 +42749,6 @@ __metadata: languageName: node linkType: hard -"popper.js@npm:^1.16.1": - version: 1.16.1 - resolution: "popper.js@npm:1.16.1" - checksum: 10/71338c86faf9b66ce60c3cdd7fb2ed742944e5d2765a188f269239fee2980aa6223b77b41302d1b6eb7d724e611092f9a2576d0048ac2071b605291abc72c0cf - languageName: node - linkType: hard - -"portal-vue@npm:^2.1.7": - version: 2.1.7 - resolution: "portal-vue@npm:2.1.7" - peerDependencies: - vue: ^2.5.18 - checksum: 10/bbc411c567c9d522f60553de0ac3e11622f7de8fe502322f72950b81ecb5e0757bead284473a0a2c5a21573b8c4a5ca8da714bf32449fd948f6eff0541631c00 - languageName: node - linkType: hard - "portal-vue@npm:^3.0.0": version: 3.0.0 resolution: "portal-vue@npm:3.0.0" @@ -44539,7 +43729,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.1.10, postcss@npm:^8.2.15, postcss@npm:^8.3.11, postcss@npm:^8.4.0, postcss@npm:^8.4.14, postcss@npm:^8.4.23, postcss@npm:^8.4.24, postcss@npm:^8.4.27, postcss@npm:^8.4.31": +"postcss@npm:^8.1.10, postcss@npm:^8.2.15, postcss@npm:^8.3.11, postcss@npm:^8.4.0, postcss@npm:^8.4.23, postcss@npm:^8.4.24, postcss@npm:^8.4.27, postcss@npm:^8.4.31": version: 8.4.31 resolution: "postcss@npm:8.4.31" dependencies: @@ -44572,17 +43762,6 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.39": - version: 8.4.39 - resolution: "postcss@npm:8.4.39" - dependencies: - nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.1" - source-map-js: "npm:^1.2.0" - checksum: 10/ad9c1add892c96433b9a5502878201ede4a20c4ce02d056251f61f8d9a3e5426dab3683fe5a086edfa78a1a19f2b4988c8cea02c5122136d29758cb5a17e2621 - languageName: node - linkType: hard - "postcss@npm:^8.4.47, postcss@npm:^8.4.48, postcss@npm:^8.4.49": version: 8.4.49 resolution: "postcss@npm:8.4.49" @@ -44970,7 +44149,7 @@ __metadata: languageName: node linkType: hard -"prosemirror-history@npm:^1.0.0, prosemirror-history@npm:^1.2.0": +"prosemirror-history@npm:^1.0.0": version: 1.3.0 resolution: "prosemirror-history@npm:1.3.0" dependencies: @@ -45743,13 +44922,6 @@ __metadata: languageName: node linkType: hard -"rainbowvis.js@npm:^1.0.1": - version: 1.0.1 - resolution: "rainbowvis.js@npm:1.0.1" - checksum: 10/b3417714119a1219ff782b6122baf5dc618681ace706574eff0c353b59cc1604eee9fb00604cc8d78f94e32c341f95372590b06a8f61a40d5b14deb8e3559d4d - languageName: node - linkType: hard - "ramda@npm:0.29.0": version: 0.29.0 resolution: "ramda@npm:0.29.0" @@ -46323,7 +45495,7 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.4, regenerator-runtime@npm:^0.13.7, regenerator-runtime@npm:^0.13.9": +"regenerator-runtime@npm:^0.13.4, regenerator-runtime@npm:^0.13.7": version: 0.13.9 resolution: "regenerator-runtime@npm:0.13.9" checksum: 10/efbbcee420cf89b90c634ac4c53e4ac8000c80b4650d6d34560f124185d43b21b824d385ec6147657603a1ec1bed6820fc5dfb78e669f9acc7c1b5d7238b1627 @@ -46663,13 +45835,6 @@ __metadata: languageName: node linkType: hard -"require-package-name@npm:^2.0.1": - version: 2.0.1 - resolution: "require-package-name@npm:2.0.1" - checksum: 10/3332d4eec10a730627ca20f37a8a7d57badd9e8953f238472aa457b0084907f86ca5b2af94694a0c8bb2e1101bdb3ed6ddc964d2044b040fe076a9bf5b19755f - languageName: node - linkType: hard - "requireindex@npm:^1.2.0": version: 1.2.0 resolution: "requireindex@npm:1.2.0" @@ -47176,25 +46341,6 @@ __metadata: languageName: node linkType: hard -"rollup-plugin-visualizer@npm:^5.9.0": - version: 5.9.0 - resolution: "rollup-plugin-visualizer@npm:5.9.0" - dependencies: - open: "npm:^8.4.0" - picomatch: "npm:^2.3.1" - source-map: "npm:^0.7.4" - yargs: "npm:^17.5.1" - peerDependencies: - rollup: 2.x || 3.x - peerDependenciesMeta: - rollup: - optional: true - bin: - rollup-plugin-visualizer: dist/bin/cli.js - checksum: 10/08edb084b02a9c43f203b1d15b5c6a7ab74137b2b391f4f7736a2b5dc3b72f8916b129565a80638c948a41d566b1f5de81b8f004339eae8ed2180c4cc07d9edf - languageName: node - linkType: hard - "rollup-plugin-visualizer@npm:^5.9.2": version: 5.9.2 resolution: "rollup-plugin-visualizer@npm:5.9.2" @@ -47581,17 +46727,6 @@ __metadata: languageName: node linkType: hard -"sass@npm:~1.32.6": - version: 1.32.13 - resolution: "sass@npm:1.32.13" - dependencies: - chokidar: "npm:>=3.0.0 <4.0.0" - bin: - sass: sass.js - checksum: 10/7fd20734dadc367dba43f766e6fec51e0470deed7aa105f7c1ce6592012bc5955f1e3d3e177374428f1f1ed4e089653a22283c6cf8364e4071c9b1ad9e19983f - languageName: node - linkType: hard - "sax@npm:>=0.6.0": version: 1.4.1 resolution: "sax@npm:1.4.1" @@ -47748,7 +46883,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:>=5.7.2, semver@npm:^7.0.0, semver@npm:^7.1.2, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.6, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.0, semver@npm:^7.5.1, semver@npm:^7.5.3, semver@npm:^7.5.4": +"semver@npm:>=5.7.2, semver@npm:^7.0.0, semver@npm:^7.1.2, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.6, semver@npm:^7.3.7, semver@npm:^7.5.0, semver@npm:^7.5.1, semver@npm:^7.5.3, semver@npm:^7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -48424,13 +47559,6 @@ __metadata: languageName: node linkType: hard -"sortablejs@npm:1.10.2": - version: 1.10.2 - resolution: "sortablejs@npm:1.10.2" - checksum: 10/9bffed8c94980db6e3f4630d0a97a2c97a37e6e8950f787a234848242c4eca73b222b4537464ba2cd8524b61a9300ebab1af70c93dee75c9c25ff483bf644220 - languageName: node - linkType: hard - "source-map-js@npm:^1.0.1, source-map-js@npm:^1.0.2": version: 1.0.2 resolution: "source-map-js@npm:1.0.2" @@ -49574,77 +48702,6 @@ __metadata: languageName: node linkType: hard -"svg.draggable.js@npm:^2.2.2": - version: 2.2.2 - resolution: "svg.draggable.js@npm:2.2.2" - dependencies: - svg.js: "npm:^2.0.1" - checksum: 10/0200198f64a6883c88a31b8663a0bcc21bf01bdf7dfca1930dbeeeed49d4993d8ad4c3da044166205128b8835ce6d7a429e95d68fed1dce644730794beb45c23 - languageName: node - linkType: hard - -"svg.easing.js@npm:^2.0.0": - version: 2.0.0 - resolution: "svg.easing.js@npm:2.0.0" - dependencies: - svg.js: "npm:>=2.3.x" - checksum: 10/06a9f0b75e8b0625b8e3dd13ff5fb9c279fa1a098fbf5d28f8f7f298d93f280d3d8afa3737bf0304f16589d1c02b1823cefdf7d4a6a8817fd07bcb46f456c97e - languageName: node - linkType: hard - -"svg.filter.js@npm:^2.0.2": - version: 2.0.2 - resolution: "svg.filter.js@npm:2.0.2" - dependencies: - svg.js: "npm:^2.2.5" - checksum: 10/7337c780f715f1292deb93b62e29926bed3deb841d2ee253fa7cb9785ecb2ba6425169949b19bca57ea30b8455d355bc2ef84c71b476e833c2e662a4554dc917 - languageName: node - linkType: hard - -"svg.js@npm:>=2.3.x, svg.js@npm:^2.0.1, svg.js@npm:^2.2.5, svg.js@npm:^2.4.0, svg.js@npm:^2.6.5": - version: 2.7.1 - resolution: "svg.js@npm:2.7.1" - checksum: 10/28333c819aa461d20358d8cf43db6a92fd41389f0a6c5a2563d398865f541a88d9cb118d5e276c513bc307aea8aeb893725a198ec9447ca19ccf898d5c4126cd - languageName: node - linkType: hard - -"svg.pathmorphing.js@npm:^0.1.3": - version: 0.1.3 - resolution: "svg.pathmorphing.js@npm:0.1.3" - dependencies: - svg.js: "npm:^2.4.0" - checksum: 10/a958c3e2a4a1e845da443dd72b890feed5cc6a1d0a5bfcd16b5be610292b7a9c2ab8453689b416e2a8f2abe0f65e987eb981c6d2428b892b67f511d776ccc1bb - languageName: node - linkType: hard - -"svg.resize.js@npm:^1.4.3": - version: 1.4.3 - resolution: "svg.resize.js@npm:1.4.3" - dependencies: - svg.js: "npm:^2.6.5" - svg.select.js: "npm:^2.1.2" - checksum: 10/78c6973695a185fb2e3efa582f8b6a5c8c01e8a0c04a0126d0141f4eecb260c5d471cb15353b1afa8e811dee2a05f0637a75897c9c5e350c8fac7baf86f45a8e - languageName: node - linkType: hard - -"svg.select.js@npm:^2.1.2": - version: 2.1.2 - resolution: "svg.select.js@npm:2.1.2" - dependencies: - svg.js: "npm:^2.2.5" - checksum: 10/65e9b0e605fae5aaa29e5972577f4cf0e5ffc5de54d26c6e1a3c17be7fbcdc2b6faba1874735491f1c8d1caf9a50ca404422782c292080ea5eb0165af48a9ccb - languageName: node - linkType: hard - -"svg.select.js@npm:^3.0.1": - version: 3.0.1 - resolution: "svg.select.js@npm:3.0.1" - dependencies: - svg.js: "npm:^2.6.5" - checksum: 10/357e759ffb405b7ac97f50d161f1bfeb8fb145288fe0b34fc32a0347538b74cf92ef0c2cff8fe4a2acfccbd8ff10ec5ba852071400559623629ce97b56e4c8e9 - languageName: node - linkType: hard - "svgo@npm:^3.0.2": version: 3.0.2 resolution: "svgo@npm:3.0.2" @@ -50180,13 +49237,6 @@ __metadata: languageName: node linkType: hard -"throttle-debounce@npm:^3.0.1": - version: 3.0.1 - resolution: "throttle-debounce@npm:3.0.1" - checksum: 10/c2b591bc881c595d44d5ee82cc607747569a84cd9652e7d9613d92759d84ffd61eab1ca56c6a294316b8c9978ff6d46c2c94ed95de5847f3de4b6c30342cb947 - languageName: node - linkType: hard - "throttle-debounce@npm:^5.0.0": version: 5.0.0 resolution: "throttle-debounce@npm:5.0.0" @@ -50734,13 +49784,6 @@ __metadata: languageName: node linkType: hard -"tween@npm:^0.9.0": - version: 0.9.0 - resolution: "tween@npm:0.9.0" - checksum: 10/48ac9d7feeda8eefb791b8bf492a3e30ace20a53cc2b5f0aa069e27112e7037013309eae8c2a075983d6a670c6cf591ba733d0508d67d678a9538e840d093dab - languageName: node - linkType: hard - "tweetnacl-sealedbox-js@npm:^1.2.0": version: 1.2.0 resolution: "tweetnacl-sealedbox-js@npm:1.2.0" @@ -51131,13 +50174,6 @@ __metadata: languageName: node linkType: hard -"underscore@npm:1.13.6": - version: 1.13.6 - resolution: "underscore@npm:1.13.6" - checksum: 10/58cf5dc42cb0ac99c146ae4064792c0a2cc84f3a3c4ad88f5082e79057dfdff3371d896d1ec20379e9ece2450d94fa78f2ef5bfefc199ba320653e32c009bd66 - languageName: node - linkType: hard - "undici-types@npm:~5.26.4": version: 5.26.5 resolution: "undici-types@npm:5.26.5" @@ -51533,33 +50569,6 @@ __metadata: languageName: node linkType: hard -"unplugin-vue-components@npm:^0.25.1": - version: 0.25.1 - resolution: "unplugin-vue-components@npm:0.25.1" - dependencies: - "@antfu/utils": "npm:^0.7.4" - "@rollup/pluginutils": "npm:^5.0.2" - chokidar: "npm:^3.5.3" - debug: "npm:^4.3.4" - fast-glob: "npm:^3.2.12" - local-pkg: "npm:^0.4.3" - magic-string: "npm:^0.30.0" - minimatch: "npm:^9.0.1" - resolve: "npm:^1.22.2" - unplugin: "npm:^1.3.1" - peerDependencies: - "@babel/parser": ^7.15.8 - "@nuxt/kit": ^3.2.2 - vue: 2 || 3 - peerDependenciesMeta: - "@babel/parser": - optional: true - "@nuxt/kit": - optional: true - checksum: 10/77d191adb6873757e2c8e34084ebf99ff9c74444eda7376b640d54f8cd44038d99ada4beb2212dc2f9446858cb9287411c23deaa4e8a0b9009a1fee2d7af0ba5 - languageName: node - linkType: hard - "unplugin-vue-define-options@npm:1.4.0": version: 1.4.0 resolution: "unplugin-vue-define-options@npm:1.4.0" @@ -52280,18 +51289,6 @@ __metadata: languageName: node linkType: hard -"v-tooltip@npm:^2.0.3": - version: 2.1.3 - resolution: "v-tooltip@npm:2.1.3" - dependencies: - "@babel/runtime": "npm:^7.13.10" - lodash: "npm:^4.17.21" - popper.js: "npm:^1.16.1" - vue-resize: "npm:^1.0.1" - checksum: 10/4cdffa57f30a2107dd0a1e076a1e85abb55c3a01f5fd6ca5822a87ddf7f9bbb4baa46eefa41b888cc75ae3f865349318b79fc8197df5186c74d9c524529baa27 - languageName: node - linkType: hard - "v3-infinite-loading@npm:^1.2.2": version: 1.2.2 resolution: "v3-infinite-loading@npm:1.2.2" @@ -52411,18 +51408,6 @@ __metadata: languageName: node linkType: hard -"vite-bundle-visualizer@npm:^0.7.0": - version: 0.7.0 - resolution: "vite-bundle-visualizer@npm:0.7.0" - dependencies: - cac: "npm:^6.7.14" - rollup-plugin-visualizer: "npm:^5.9.0" - bin: - vite-bundle-visualizer: bin.js - checksum: 10/d07ea971a68b4297be06ab6385851a6caf7c8d82688b4d80ef338df7100ea7cac9455678e2fc9541285fa4eceb774958540879b111657d26be61e323c86b7647 - languageName: node - linkType: hard - "vite-hot-client@npm:^0.2.4": version: 0.2.4 resolution: "vite-hot-client@npm:0.2.4" @@ -52660,15 +51645,6 @@ __metadata: languageName: node linkType: hard -"vite-plugin-simple-gql@npm:^0.5.0": - version: 0.5.0 - resolution: "vite-plugin-simple-gql@npm:0.5.0" - peerDependencies: - graphql-tag: ^2.12.6 - checksum: 10/9c843aa231b59e997b26376058adc3b8b8e149aa1524d0bde3af2743e8af72f6b3e3ae5df935882dc3f08c1435c11e9fa580b9a5e4e6c381cbe5486602171599 - languageName: node - linkType: hard - "vite-plugin-vue-inspector@npm:^5.3.1": version: 5.3.1 resolution: "vite-plugin-vue-inspector@npm:5.3.1" @@ -52768,46 +51744,6 @@ __metadata: languageName: node linkType: hard -"vite@npm:^5.3.4": - version: 5.3.4 - resolution: "vite@npm:5.3.4" - dependencies: - esbuild: "npm:^0.21.3" - fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.39" - rollup: "npm:^4.13.0" - peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" - lightningcss: ^1.21.0 - sass: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - bin: - vite: bin/vite.js - checksum: 10/9eadb261be1f5f6335a67cb44a8803febd8b190202909385fd2ae7849991095ee13c5af914da53da48a421ee0901a8fedbb7519dc7d1b8ade3ea6e42bd9b2b39 - languageName: node - linkType: hard - "vite@npm:^6.0.5": version: 6.0.7 resolution: "vite@npm:6.0.7" @@ -53084,15 +52020,6 @@ __metadata: languageName: node linkType: hard -"vue-apexcharts@npm:^1.6.1": - version: 1.6.2 - resolution: "vue-apexcharts@npm:1.6.2" - peerDependencies: - apexcharts: ^3.26.0 - checksum: 10/0f5a3e17b59de5eea11d33649d747ffc226a76d376f5d11062d79aef32c1e6f82cb8c87eea84ecf1bcdcdbccf99a94dc5a0568cc1bffc32131fdf4040da5abb5 - languageName: node - linkType: hard - "vue-bundle-renderer@npm:^1.0.3": version: 1.0.3 resolution: "vue-bundle-renderer@npm:1.0.3" @@ -53269,21 +52196,6 @@ __metadata: languageName: node linkType: hard -"vue-histogram-slider@npm:^0.3.8": - version: 0.3.8 - resolution: "vue-histogram-slider@npm:0.3.8" - dependencies: - d3-array: "npm:^2.3.2" - d3-brush: "npm:^1.1.3" - d3-scale: "npm:^3.1.0" - d3-selection: "npm:^1.4.0" - d3-transition: "npm:^1.2.0" - jquery: "npm:3.5" - vue: "npm:^2.6.10" - checksum: 10/2a442a3bd1c6ae8feb9650c7e98e542c70e6300264e891dafe86e59821c728b4e44fcbbc3bd11c89402e3f579a924d0578fb47ba320fe20d67732a3fa10d3f75 - languageName: node - linkType: hard - "vue-inbrowser-compiler-independent-utils@npm:^4.69.0": version: 4.71.1 resolution: "vue-inbrowser-compiler-independent-utils@npm:4.71.1" @@ -53293,42 +52205,6 @@ __metadata: languageName: node linkType: hard -"vue-infinite-loading@npm:^2.4.5": - version: 2.4.5 - resolution: "vue-infinite-loading@npm:2.4.5" - peerDependencies: - vue: ^2.6.10 - checksum: 10/43332cf9073a33a76a6ed3babb46d5af04fa820048858c8c3d342920efed7f9e9bdf2e6cc92ca23549b8120cbaf92a0b61134e09f01c6f9a0bc3c731d069ce87 - languageName: node - linkType: hard - -"vue-mixpanel@npm:1.0.7": - version: 1.0.7 - resolution: "vue-mixpanel@npm:1.0.7" - dependencies: - mixpanel-browser: "npm:^2.39.0" - checksum: 10/91a91fb4f83dcd59eb16ad420dd3bf2917424c7ab1d183190461fab49cf01938b78cb0dbadee8b3d774fb94d700ae87bf82b08e08d87bcf1ef8d44d8a1e75b72 - languageName: node - linkType: hard - -"vue-resize@npm:^1.0.1": - version: 1.0.1 - resolution: "vue-resize@npm:1.0.1" - dependencies: - "@babel/runtime": "npm:^7.13.10" - peerDependencies: - vue: ^2.6.0 - checksum: 10/21f9234aeb90c93765098f8e9e6428c420de96b43711914e500021eb509b17ef21dea8847ed5a746aea8d6742507c54dd06ed0bda1999ab5376e3e9900fe02a2 - languageName: node - linkType: hard - -"vue-router@npm:^3.4.9": - version: 3.5.3 - resolution: "vue-router@npm:3.5.3" - checksum: 10/f6ccaa986502a4864f5f4b757f178d3f7a525d9e5703fd405a1f00928241ab555bb1de93536ac79a37d9ad66ee1ea9ab2f882ad449a6059b33133810dadb8fa8 - languageName: node - linkType: hard - "vue-router@npm:^4.2.4": version: 4.2.4 resolution: "vue-router@npm:4.2.4" @@ -53361,15 +52237,6 @@ __metadata: languageName: node linkType: hard -"vue-timeago@npm:^5.1.2": - version: 5.1.3 - resolution: "vue-timeago@npm:5.1.3" - dependencies: - date-fns: "npm:^1.29.0" - checksum: 10/1182693c35adbf63a5a5e58783e9349ce11d382981c0d0b682afae48ff5fa28bfada1ef8ec5aa1555ae41874c806278e90e0402535410aa6d74c47bb83d432db - languageName: node - linkType: hard - "vue-tippy@npm:^6.0.0": version: 6.0.0 resolution: "vue-tippy@npm:6.0.0" @@ -53451,31 +52318,6 @@ __metadata: languageName: node linkType: hard -"vue-tsc@npm:^1.8.8": - version: 1.8.8 - resolution: "vue-tsc@npm:1.8.8" - dependencies: - "@vue/language-core": "npm:1.8.8" - "@vue/typescript": "npm:1.8.8" - semver: "npm:^7.3.8" - peerDependencies: - typescript: "*" - bin: - vue-tsc: bin/vue-tsc.js - checksum: 10/9a9db110e2b83f756ac563481a54d2e2a2262a9e97e7b207741d5d9f52e156570d1fdf553418660c01dd1e1f43482919d48e1e9416b7d93e03a0dc2e4d64a828 - languageName: node - linkType: hard - -"vue@npm:^2.6.10, vue@npm:^2.7.5": - version: 2.7.5 - resolution: "vue@npm:2.7.5" - dependencies: - "@vue/compiler-sfc": "npm:2.7.5" - csstype: "npm:^3.1.0" - checksum: 10/dc68b90f729400ff9ca46abe7a3418ebd892a7bdc5c34dc6a56326acd47bd7d10615a429f0c0ee91bb5e57869bebb04bd25a2e5f4779e39373511f2b2fadbd96 - languageName: node - linkType: hard - "vue@npm:^3.3.4, vue@npm:^3.3.8": version: 3.4.21 resolution: "vue@npm:3.4.21" @@ -53512,33 +52354,6 @@ __metadata: languageName: node linkType: hard -"vuedraggable@npm:^2.24.3": - version: 2.24.3 - resolution: "vuedraggable@npm:2.24.3" - dependencies: - sortablejs: "npm:1.10.2" - checksum: 10/b7497e66eb0dce7a552e49b482884f14d158b7f5a91ef2c4f77f69dc830f42565beaa8bc45019b088ef1aa62d7dc16994d4f7595b0aabcdb3d83580f789dd545 - languageName: node - linkType: hard - -"vuetify-image-input@npm:^19.1.0": - version: 19.2.2 - resolution: "vuetify-image-input@npm:19.2.2" - peerDependencies: - vuetify: ^2 - checksum: 10/3c337382bb6c70de631894e5b1c8736a6db7a2b19a63ed2a90b3926c5e028458f284d598fe722ea766e9b973fd6d1ecfe2e65176457a1e47d438cb4e61702631 - languageName: node - linkType: hard - -"vuetify@npm:^2.6.10": - version: 2.6.12 - resolution: "vuetify@npm:2.6.12" - peerDependencies: - vue: ^2.6.4 - checksum: 10/6696287fcb2fcc64aa04f8e778c6b2301ede208ee69154ee51c433d6a30a0dd7cd66ab7c623d5755491dd7657d943885d93a38310feaa2e845b8ab0d53e97430 - languageName: node - linkType: hard - "w3c-keyname@npm:^2.2.0": version: 2.2.4 resolution: "w3c-keyname@npm:2.2.4"