diff --git a/.eslintrc b/.eslintrc index 2f22d681a..af433d88e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -3,15 +3,26 @@ "react-app", "plugin:jsx-a11y/recommended", "eslint:recommended", + "plugin:@typescript-eslint/recommended", "plugin:react/jsx-runtime" ], + "parser": "@typescript-eslint/parser", "globals": { "JSX": "readonly" }, "root": true, - "plugins": ["jsx-a11y"], + "plugins": ["jsx-a11y", "@typescript-eslint", "react"], "rules": { - "jsx-a11y/media-has-caption": "off" + "jsx-a11y/media-has-caption": "off", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/no-namespace": "off" }, - "ignorePatterns": ["**/*.html", "node_polyfill.js"] + + "ignorePatterns": [ + "**/*.html", + "node_polyfill.js", + "src/stories/*", + ".storybook/*", + "src/gql/index.ts" + ] } diff --git a/.graphqlconfig b/.graphqlconfig new file mode 100644 index 000000000..b8552f1ef --- /dev/null +++ b/.graphqlconfig @@ -0,0 +1,15 @@ +{ + "name": "Teztok GraphQL Schema", + "schemaPath": "schema.graphql", + "extensions": { + "endpoints": { + "dev": { + "url": "https://teztok.teia.rocks/v1/graphql", + "headers": { + "user-agent": "JS GraphQL" + }, + "introspect": true + } + } + } +} diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100755 index 000000000..20d0d06e5 --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npm run lint diff --git a/codegen.ts b/codegen.ts new file mode 100644 index 000000000..df29ce3df --- /dev/null +++ b/codegen.ts @@ -0,0 +1,36 @@ +import type { CodegenConfig } from '@graphql-codegen/cli' + +const plugins = [ + 'typescript', + 'typescript-operations', + // 'typed-document-node', + 'typescript-graphql-request', + 'plugin-typescript-swr', +] +const config = { + skipTypename: false, + withHooks: true, + withHOC: false, + withComponent: false, + experimentalFragmentVariables: true, + useTypeImports: true, + commentDescriptions: true, +} +const codeGenConfig: CodegenConfig = { + ignoreNoDocuments: true, + overwrite: true, + + schema: 'https://indexer.tzprofiles.com/v1/graphql', + generates: { + './src/gql/index.ts': { + documents: ['src/data/queries.ts'], + schema: 'https://teztok.teia.rocks/v1/graphql', + + // preset: 'client', + plugins, + // schema: 'https://indexer.tzprofiles.com/v1/graphql', // this will get merged + config, + }, + }, +} +export default codeGenConfig diff --git a/package-lock.json b/package-lock.json index d2d341e9a..e5d8dbd5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,8 +18,8 @@ "compressorjs": "^1.1.1", "fflate": "^0.7.4", "framer-motion": "^9.0.1", - "graphql": "^16.4.0", - "graphql-request": "^4.2.0", + "graphql": "^16.6.0", + "graphql-request": "^4.3.0", "json5": "^2.2.3", "keyboardjs": "^2.7.0", "markdown-to-jsx": "^7.1.9", @@ -42,7 +42,13 @@ "devDependencies": { "@airgap/beacon-types": "^3.3.3", "@babel/preset-react": "^7.18.6", - "@google/model-viewer": "^3.0.1", + "@google/model-viewer": "^3.0.2", + "@graphql-codegen/cli": "^3.1.0", + "@graphql-codegen/client-preset": "^2.1.0", + "@graphql-codegen/introspection": "^3.0.1", + "@graphql-codegen/typed-document-node": "^3.0.1", + "@graphql-codegen/typescript-graphql-request": "^4.5.8", + "@graphql-typed-document-node/core": "^3.1.1", "@hookform/devtools": "^4.3.0", "@storybook/addon-essentials": "^7.0.0-beta.47", "@storybook/addon-interactions": "^7.0.0-beta.47", @@ -54,6 +60,12 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", + "@types/keyboardjs": "^2.5.0", + "@types/react-infinite-scroller": "^1.2.3", + "@types/react-lazy-load-image-component": "^1.5.2", + "@types/react-pdf": "^6.2.0", + "@typescript-eslint/eslint-plugin": "^5.53.0", + "@typescript-eslint/parser": "^5.53.0", "@vitejs/plugin-react": "^3.1.0", "assert": "^2.0.0", "buffer": "^6.0.3", @@ -65,6 +77,7 @@ "eslint-plugin-react": "^7.32.2", "fnv1a": "^1.1.1", "fs-extra": "^11.1.0", + "graphql-codegen-plugin-typescript-swr": "^0.8.3", "husky": "^7.0.4", "libsodium-wrappers": "^0.7.11", "lodash": "^4.17.21", @@ -90,6 +103,7 @@ "vite-plugin-ejs": "^1.6.4", "vite-plugin-eslint": "^1.8.1", "vite-plugin-filter-replace": "^0.1.10", + "vite-plugin-graphql-codegen": "^3.1.0", "vite-plugin-markdown": "^2.1.0", "vite-plugin-node-polyfills": "^0.7.0", "vite-plugin-node-stdlib-browser": "^0.1.1", @@ -212,6 +226,248 @@ "node": ">=6.0.0" } }, + "node_modules/@ardatan/relay-compiler": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.0.0.tgz", + "integrity": "sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.14.0", + "@babel/generator": "^7.14.0", + "@babel/parser": "^7.14.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.0.0", + "babel-preset-fbjs": "^3.4.0", + "chalk": "^4.0.0", + "fb-watchman": "^2.0.0", + "fbjs": "^3.0.0", + "glob": "^7.1.1", + "immutable": "~3.7.6", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "relay-runtime": "12.0.0", + "signedsource": "^1.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "relay-compiler": "bin/relay-compiler" + }, + "peerDependencies": { + "graphql": "*" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/immutable": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", + "integrity": "sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/@ardatan/relay-compiler/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@ardatan/relay-compiler/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@ardatan/sync-fetch": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz", + "integrity": "sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.1" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/@aw-web-design/x-default-browser": { "version": "1.4.88", "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.88.tgz", @@ -2250,6 +2506,28 @@ "node": ">=0.1.90" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@csstools/postcss-cascade-layers": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", @@ -2791,365 +3069,1298 @@ } }, "node_modules/@google/model-viewer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@google/model-viewer/-/model-viewer-3.0.1.tgz", - "integrity": "sha512-zelc/iyokFBEIQZCG0earetQGVRe/DCR0b+0qbThesGaVOCPhSz0SAikJ+IOyKd4iBTEyonnlzB+APbIUzE7VQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@google/model-viewer/-/model-viewer-3.0.2.tgz", + "integrity": "sha512-kPeb90f6+KCnqQz2NjARmrRjiFLsXuVhfLhyFbb3U7dUzQyB4k0OYIwlF49hb9CPSXq8oH/fn7KOggVBJ/YGpg==", "dev": true, "dependencies": { - "lit": "^2.2.3", - "three": "^0.149.0" + "lit": "^2.2.3" }, "engines": { "node": ">=6.0.0" + }, + "peerDependencies": { + "three": "^0.149.0" } }, - "node_modules/@hookform/devtools": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@hookform/devtools/-/devtools-4.3.0.tgz", - "integrity": "sha512-DTTTYJ9j+L4Nd/qj0k41WNbRF/qNQfZxbHwUupFeQWu6JOJ5Ak5ksxuoCbfSWrsXV5EPSmcfhpsDos0IOlwhsg==", + "node_modules/@graphql-codegen/add": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/add/-/add-4.0.1.tgz", + "integrity": "sha512-A7k+9eRfrKyyNfhWEN/0eKz09R5cp4XXxUuNLQAVm/aohmVI2xdMV4lM02rTlM6Pyou3cU/v0iZnhgo6IRpqeg==", "dev": true, "dependencies": { - "@emotion/react": "^11.1.5", - "@emotion/styled": "^11.3.0", - "@types/lodash": "^4.14.168", - "little-state-machine": "^4.1.0", - "lodash": "^4.17.21", - "react-simple-animate": "^3.3.12", - "use-deep-compare-effect": "^1.8.1", - "uuid": "^8.3.2" + "@graphql-codegen/plugin-helpers": "^4.1.0", + "tslib": "~2.5.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18", - "react-dom": "^16.8.0 || ^17 || ^18" + "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" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "node_modules/@graphql-codegen/cli": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-3.1.0.tgz", + "integrity": "sha512-MUYyHkh/n8XVuONk7AYvJV/ObZDlPGwyevl8ch21jNFNj2M5PM39WViHKmIYwVw2n4fDmoh3BNdaeHQs1wb4HA==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "@babel/generator": "^7.18.13", + "@babel/template": "^7.18.10", + "@babel/types": "^7.18.13", + "@graphql-codegen/core": "^3.1.0", + "@graphql-codegen/plugin-helpers": "^4.1.0", + "@graphql-tools/apollo-engine-loader": "^7.3.6", + "@graphql-tools/code-file-loader": "^7.3.17", + "@graphql-tools/git-loader": "^7.2.13", + "@graphql-tools/github-loader": "^7.3.20", + "@graphql-tools/graphql-file-loader": "^7.5.0", + "@graphql-tools/json-file-loader": "^7.4.1", + "@graphql-tools/load": "^7.8.0", + "@graphql-tools/prisma-loader": "^7.2.49", + "@graphql-tools/url-loader": "^7.13.2", + "@graphql-tools/utils": "^9.0.0", + "@whatwg-node/fetch": "^0.8.0", + "chalk": "^4.1.0", + "chokidar": "^3.5.2", + "cosmiconfig": "^7.0.0", + "cosmiconfig-typescript-loader": "^4.3.0", + "debounce": "^1.2.0", + "detect-indent": "^6.0.0", + "graphql-config": "^4.4.0", + "inquirer": "^8.0.0", + "is-glob": "^4.0.1", + "json-to-pretty-yaml": "^1.2.2", + "listr2": "^4.0.5", + "log-symbols": "^4.0.0", + "shell-quote": "^1.7.3", + "string-env-interpolation": "^1.0.1", + "ts-log": "^2.2.3", + "ts-node": "^10.9.1", + "tslib": "^2.4.0", + "yaml": "^1.10.0", + "yargs": "^17.0.0" }, - "engines": { - "node": ">=10.10.0" + "bin": { + "gql-gen": "cjs/bin.js", + "graphql-code-generator": "cjs/bin.js", + "graphql-codegen": "cjs/bin.js", + "graphql-codegen-esm": "esm/bin.js" + }, + "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" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@graphql-codegen/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12.22" + "node": ">=8" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@graphql-codegen/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/@graphql-codegen/cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/@graphql-codegen/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@graphql-codegen/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@graphql-codegen/cli/node_modules/yargs": { + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.0.tgz", + "integrity": "sha512-dwqOPg5trmrre9+v8SUo2q/hAwyKoVfu8OC1xPHKJGNdxAvPl4sKxL4vBnh3bQz/ZvvGAFeA5H3ou2kcOY8sQQ==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "node_modules/@graphql-codegen/cli/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@jest/expect-utils": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.2.tgz", - "integrity": "sha512-Dd3ilDJpBnqa0GiPN7QrudVs0cczMMHtehSo2CSTjm3zdHx0RcpmhFNVEltuEFeqfLIyWKFI224FsMSQ/nsJQA==", + "node_modules/@graphql-codegen/client-preset": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-2.1.0.tgz", + "integrity": "sha512-mt5CyPwZmOUP+ifC56xMjeEyfywu0P6HSWbhWPn1Jbv7n3TMILXMDfgOAufnOmrU1Ian8wu72I9A5IMRGqmW1w==", "dev": true, "dependencies": { - "jest-get-type": "^29.4.2" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7", + "@graphql-codegen/add": "^4.0.1", + "@graphql-codegen/gql-tag-operations": "2.0.1", + "@graphql-codegen/plugin-helpers": "^4.1.0", + "@graphql-codegen/typed-document-node": "^3.0.1", + "@graphql-codegen/typescript": "^3.0.1", + "@graphql-codegen/typescript-operations": "^3.0.1", + "@graphql-codegen/visitor-plugin-common": "^3.0.1", + "@graphql-tools/documents": "^0.1.0", + "@graphql-tools/utils": "^9.0.0", + "@graphql-typed-document-node/core": "3.1.1", + "tslib": "~2.5.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.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" } }, - "node_modules/@jest/schemas": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.2.tgz", - "integrity": "sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g==", + "node_modules/@graphql-codegen/core": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-3.1.0.tgz", + "integrity": "sha512-DH1/yaR7oJE6/B+c6ZF2Tbdh7LixF1K8L+8BoSubjNyQ8pNwR4a70mvc1sv6H7qgp6y1bPQ9tKE+aazRRshysw==", "dev": true, "dependencies": { - "@sinclair/typebox": "^0.25.16" + "@graphql-codegen/plugin-helpers": "^4.1.0", + "@graphql-tools/schema": "^9.0.0", + "@graphql-tools/utils": "^9.1.1", + "tslib": "~2.5.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.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" } }, - "node_modules/@jest/transform": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.2.tgz", - "integrity": "sha512-kf1v5iTJHn7p9RbOsBuc/lcwyPtJaZJt5885C98omWz79NIeD3PfoiiaPSu7JyCyFzNOIzKhmMhQLUhlTL9BvQ==", + "node_modules/@graphql-codegen/gql-tag-operations": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-2.0.1.tgz", + "integrity": "sha512-BGJRfRYJo566x3nPoEwiU0KkhbBAB2i4UsUg2wAlzC+z8uoL1JtCI2besa7RoWxjvEpmjrn23O5CnUzD933JLg==", "dev": true, "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.4.2", - "@jridgewell/trace-mapping": "^0.3.15", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.2", - "jest-regex-util": "^29.4.2", - "jest-util": "^29.4.2", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "@graphql-codegen/plugin-helpers": "^4.1.0", + "@graphql-codegen/visitor-plugin-common": "3.0.1", + "@graphql-tools/utils": "^9.0.0", + "auto-bind": "~4.0.0", + "tslib": "~2.5.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.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" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@graphql-codegen/introspection": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/introspection/-/introspection-3.0.1.tgz", + "integrity": "sha512-D6vJQTEL/np4EmeUHm5spLK59cr+AMXEoLRoTI+dagFzlHYDTfXZH6F7uhKaakxcj0SAQhIWKvGMggotUdEtyg==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@graphql-codegen/plugin-helpers": "^4.1.0", + "@graphql-codegen/visitor-plugin-common": "^3.0.1", + "tslib": "~2.5.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "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" } }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@graphql-codegen/plugin-helpers": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-4.1.0.tgz", + "integrity": "sha512-xvSHJb9OGb5CODIls0AI1rCenLz+FuiaNPCsfHMCNsLDjOZK2u0jAQ9zUBdc/Wb+21YXZujBCc0Vm1QX+Zz0nw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@graphql-tools/utils": "^9.0.0", + "change-case-all": "1.0.15", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.5.0" }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "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" } }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@graphql-codegen/schema-ast": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-3.0.1.tgz", + "integrity": "sha512-rTKTi4XiW4QFZnrEqetpiYEWVsOFNoiR/v3rY9mFSttXFbIwNXPme32EspTiGWmEEdHY8UuTDtZN3vEcs/31zw==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@graphql-codegen/plugin-helpers": "^4.1.0", + "@graphql-tools/utils": "^9.0.0", + "tslib": "~2.5.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" } }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@graphql-codegen/typed-document-node": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-3.0.1.tgz", + "integrity": "sha512-2plPBbAJZtR72BU6n07N3nIJYlwnCWbFNoe++MQ33S2ML4KwpCiflGEJnTpiwOEhCklQLWg1FEUdEOYS2iluqw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@graphql-codegen/plugin-helpers": "^4.1.0", + "@graphql-codegen/visitor-plugin-common": "3.0.1", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.15", + "tslib": "~2.5.0" }, - "engines": { - "node": ">=8" + "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" } }, - "node_modules/@jest/types": { - "version": "29.4.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.2.tgz", - "integrity": "sha512-CKlngyGP0fwlgC1BRUtPZSiWLBhyS9dKwKmyGxk8Z6M82LBEGB2aLQSg+U1MyLsU+M7UjnlLllBM2BLWKVm/Uw==", + "node_modules/@graphql-codegen/typescript": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-3.0.1.tgz", + "integrity": "sha512-HvozJg7eHqywmYvXa7+nmjw+v3+f8ilFv9VbRvmjhj/zBw3VKGT2n/85ZhVyuWjY2KrDLzl6BqeXttWsW5Wo4w==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@graphql-codegen/plugin-helpers": "^4.1.0", + "@graphql-codegen/schema-ast": "^3.0.1", + "@graphql-codegen/visitor-plugin-common": "3.0.1", + "auto-bind": "~4.0.0", + "tslib": "~2.5.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@graphql-codegen/typescript-graphql-request": { + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-graphql-request/-/typescript-graphql-request-4.5.8.tgz", + "integrity": "sha512-XsuAA35Ou03LsklNgnIWXZ5HOHsJ5w1dBuDKtvqM9rD0cAI8x0f4TY0n6O1EraSBSvyHLP3npb1lOTPZzG2TjA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@graphql-codegen/plugin-helpers": "^2.7.2", + "@graphql-codegen/visitor-plugin-common": "2.13.1", + "auto-bind": "~4.0.0", + "tslib": "~2.4.0" }, - "engines": { - "node": ">=8" + "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", + "graphql-request": "^3.4.0 || ^4.0.0 || ^5.0.0", + "graphql-tag": "^2.0.0" + } + }, + "node_modules/@graphql-codegen/typescript-graphql-request/node_modules/@graphql-codegen/plugin-helpers": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-2.7.2.tgz", + "integrity": "sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^8.8.0", + "change-case-all": "1.0.14", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.4.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "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" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@graphql-codegen/typescript-graphql-request/node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-2.13.1.tgz", + "integrity": "sha512-mD9ufZhDGhyrSaWQGrU1Q1c5f01TeWtSWy/cDwXYjJcHIj1Y/DG2x0tOflEfCvh5WcnmHNIw4lzDsg1W7iFJEg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@graphql-codegen/plugin-helpers": "^2.7.2", + "@graphql-tools/optimize": "^1.3.0", + "@graphql-tools/relay-operation-optimizer": "^6.5.0", + "@graphql-tools/utils": "^8.8.0", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.14", + "dependency-graph": "^0.11.0", + "graphql-tag": "^2.11.0", + "parse-filepath": "^1.0.2", + "tslib": "~2.4.0" }, - "engines": { - "node": ">=10" + "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" + } + }, + "node_modules/@graphql-codegen/typescript-graphql-request/node_modules/@graphql-tools/utils": { + "version": "8.13.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.13.1.tgz", + "integrity": "sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@graphql-codegen/typescript-graphql-request/node_modules/change-case-all": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.14.tgz", + "integrity": "sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "change-case": "^4.1.2", + "is-lower-case": "^2.0.2", + "is-upper-case": "^2.0.2", + "lower-case": "^2.0.2", + "lower-case-first": "^2.0.2", + "sponge-case": "^1.0.1", + "swap-case": "^2.0.2", + "title-case": "^3.0.3", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2" } }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@graphql-codegen/typescript-graphql-request/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "node_modules/@graphql-codegen/typescript-operations": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-3.0.1.tgz", + "integrity": "sha512-Td1d483cQr7XJj/zXrbqVUEi2QK56DT7EToFheZrBFArIQCUEGK+Xgw6GhEmZaTwWYODxavzy1jmTTJC2fEuTw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@graphql-codegen/plugin-helpers": "^4.1.0", + "@graphql-codegen/typescript": "^3.0.1", + "@graphql-codegen/visitor-plugin-common": "3.0.1", + "auto-bind": "~4.0.0", + "tslib": "~2.5.0" }, - "engines": { - "node": ">=8" + "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" } }, - "node_modules/@joshwooding/vite-plugin-react-docgen-typescript": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.2.1.tgz", - "integrity": "sha512-ou4ZJSXMMWHqGS4g8uNRbC5TiTWxAgQZiVucoUrOCWuPrTbkpJbmVyIi9jU72SBry7gQtuMEDp4YR8EEXAg7VQ==", + "node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-3.0.1.tgz", + "integrity": "sha512-Qek+Ywy094Km7Vc1TzKBN9ICvtYwPdqZUliPO77urMSveP+2+G2O9Tjx546dW4A1O6rhEfexbenc2DqTAe7iLQ==", "dev": true, "dependencies": { - "glob": "^7.2.0", - "glob-promise": "^4.2.0", - "magic-string": "^0.27.0", - "react-docgen-typescript": "^2.2.2" + "@graphql-codegen/plugin-helpers": "^4.1.0", + "@graphql-tools/optimize": "^1.3.0", + "@graphql-tools/relay-operation-optimizer": "^6.5.0", + "@graphql-tools/utils": "^9.0.0", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.15", + "dependency-graph": "^0.11.0", + "graphql-tag": "^2.11.0", + "parse-filepath": "^1.0.2", + "tslib": "~2.5.0" }, "peerDependencies": { - "typescript": ">= 4.3.x", - "vite": "^3.0.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "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" } }, - "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/@graphql-tools/apollo-engine-loader": { + "version": "7.3.26", + "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-7.3.26.tgz", + "integrity": "sha512-h1vfhdJFjnCYn9b5EY1Z91JTF0KB3hHVJNQIsiUV2mpQXZdeOXQoaWeYEKaiI5R6kwBw5PP9B0fv3jfUIG8LyQ==", "dev": true, "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "@ardatan/sync-fetch": "^0.0.1", + "@graphql-tools/utils": "^9.2.1", + "@whatwg-node/fetch": "^0.8.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@graphql-tools/batch-execute": { + "version": "8.5.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-8.5.18.tgz", + "integrity": "sha512-mNv5bpZMLLwhkmPA6+RP81A6u3KF4CSKLf3VX9hbomOkQR4db8pNs8BOvpZU54wKsUzMzdlws/2g/Dabyb2Vsg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", + "@graphql-tools/utils": "9.2.1", + "dataloader": "2.2.2", + "tslib": "^2.4.0", + "value-or-promise": "1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/code-file-loader": { + "version": "7.3.21", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-7.3.21.tgz", + "integrity": "sha512-dj+OLnz1b8SYkXcuiy0CUQ25DWnOEyandDlOcdBqU3WVwh5EEVbn0oXUYm90fDlq2/uut00OrtC5Wpyhi3tAvA==", + "dev": true, + "dependencies": { + "@graphql-tools/graphql-tag-pluck": "7.5.0", + "@graphql-tools/utils": "9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/delegate": { + "version": "9.0.27", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-9.0.27.tgz", + "integrity": "sha512-goYewiPls/RDXiRTl1S2tRPlsyDQCxlDWqd0uEIzQZ6aWSyiutfwQnTzdbZPXK0qOblEVMIqFhSGrB6fp0OkBA==", + "dev": true, + "dependencies": { + "@graphql-tools/batch-execute": "8.5.18", + "@graphql-tools/executor": "0.0.14", + "@graphql-tools/schema": "9.0.16", + "@graphql-tools/utils": "9.2.1", + "dataloader": "2.2.2", + "tslib": "~2.5.0", + "value-or-promise": "1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/documents": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/documents/-/documents-0.1.0.tgz", + "integrity": "sha512-1WQeovHv5S1M3xMzQxbSrG3yl6QOnsq2JUBnlg5/0aMM5R4GNMx6Ms+ROByez/dnuA81kstRuSK+2qpe+GaRIw==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/executor": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-0.0.14.tgz", + "integrity": "sha512-YiBbN9NT0FgqPJ35+Eg0ty1s5scOZTgiPf+6hLVJBd5zHEURwojEMCTKJ9e0RNZHETp2lN+YaTFGTSoRk0t4Sw==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "9.2.1", + "@graphql-typed-document-node/core": "3.1.1", + "@repeaterjs/repeater": "3.0.4", + "tslib": "^2.4.0", + "value-or-promise": "1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/executor-graphql-ws": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.11.tgz", + "integrity": "sha512-muRj6j897ks2iKqe3HchWFFzd+jFInSRuLPvHJ7e4WPrejFvaZx3BQ9gndfJvVkfYUZIFm13stCGXaJJTbVM0Q==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "9.2.1", + "@repeaterjs/repeater": "3.0.4", + "@types/ws": "^8.0.0", + "graphql-ws": "5.11.3", + "isomorphic-ws": "5.0.0", + "tslib": "^2.4.0", + "ws": "8.12.1" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/executor-http": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-0.1.9.tgz", + "integrity": "sha512-tNzMt5qc1ptlHKfpSv9wVBVKCZ7gks6Yb/JcYJluxZIT4qRV+TtOFjpptfBU63usgrGVOVcGjzWc/mt7KhmmpQ==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.2.1", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/fetch": "^0.8.1", + "dset": "^3.1.2", + "extract-files": "^11.0.0", + "meros": "^1.2.1", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/executor-http/node_modules/extract-files": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-11.0.0.tgz", + "integrity": "sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==", + "dev": true, + "engines": { + "node": "^12.20 || >= 14.13" + }, + "funding": { + "url": "https://github.com/sponsors/jaydenseric" + } + }, + "node_modules/@graphql-tools/executor-legacy-ws": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.9.tgz", + "integrity": "sha512-L7oDv7R5yoXzMH+KLKDB2WHVijfVW4dB2H+Ae1RdW3MFvwbYjhnIB6QzHqKEqksjp/FndtxZkbuTIuAOsYGTYw==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "9.2.1", + "@types/ws": "^8.0.0", + "isomorphic-ws": "5.0.0", + "tslib": "^2.4.0", + "ws": "8.12.1" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/git-loader": { + "version": "7.2.20", + "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-7.2.20.tgz", + "integrity": "sha512-D/3uwTzlXxG50HI8BEixqirT4xiUp6AesTdfotRXAs2d4CT9wC6yuIWOHkSBqgI1cwKWZb6KXZr467YPS5ob1w==", + "dev": true, + "dependencies": { + "@graphql-tools/graphql-tag-pluck": "7.5.0", + "@graphql-tools/utils": "9.2.1", + "is-glob": "4.0.3", + "micromatch": "^4.0.4", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/github-loader": { + "version": "7.3.27", + "resolved": "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-7.3.27.tgz", + "integrity": "sha512-fFFC35qenyhjb8pfcYXKknAt0CXP5CkQYtLfJXgTXSgBjIsfAVMrqxQ/Y0ejeM19XNF/C3VWJ7rE308yOX6ywA==", + "dev": true, + "dependencies": { + "@ardatan/sync-fetch": "^0.0.1", + "@graphql-tools/graphql-tag-pluck": "^7.4.6", + "@graphql-tools/utils": "^9.2.1", + "@whatwg-node/fetch": "^0.8.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/graphql-file-loader": { + "version": "7.5.16", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.16.tgz", + "integrity": "sha512-lK1N3Y2I634FS12nd4bu7oAJbai3bUc28yeX+boT+C83KTO4ujGHm+6hPC8X/FRGwhKOnZBxUM7I5nvb3HiUxw==", + "dev": true, + "dependencies": { + "@graphql-tools/import": "6.7.17", + "@graphql-tools/utils": "9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/graphql-tag-pluck": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.5.0.tgz", + "integrity": "sha512-76SYzhSlH50ZWkhWH6OI94qrxa8Ww1ZeOU04MdtpSeQZVT2rjGWeTb3xM3kjTVWQJsr/YJBhDeNPGlwNUWfX4Q==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.16.8", + "@babel/plugin-syntax-import-assertions": "7.20.0", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8", + "@graphql-tools/utils": "9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/import": { + "version": "6.7.17", + "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-6.7.17.tgz", + "integrity": "sha512-bn9SgrECXq3WIasgNP7ful/uON51wBajPXtxdY+z/ce7jLWaFE6lzwTDB/GAgiZ+jo7nb0ravlxteSAz2qZmuA==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "9.2.1", + "resolve-from": "5.0.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/json-file-loader": { + "version": "7.4.17", + "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-7.4.17.tgz", + "integrity": "sha512-KOSTP43nwjPfXgas90rLHAFgbcSep4nmiYyR9xRVz4ZAmw8VYHcKhOLTSGylCAzi7KUfyBXajoW+6Z7dQwdn3g==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "9.2.1", + "globby": "^11.0.3", + "tslib": "^2.4.0", + "unixify": "^1.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/load": { + "version": "7.8.12", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-7.8.12.tgz", + "integrity": "sha512-JwxgNS2c6i6oIdKttcbXns/lpKiyN7c6/MkkrJ9x2QE9rXk5HOhSJxRvPmOueCuAin1542xUrcDRGBXJ7thSig==", + "dev": true, + "dependencies": { + "@graphql-tools/schema": "9.0.16", + "@graphql-tools/utils": "9.2.1", + "p-limit": "3.1.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/merge": { + "version": "8.3.18", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.18.tgz", + "integrity": "sha512-R8nBglvRWPAyLpZL/f3lxsY7wjnAeE0l056zHhcO/CgpvK76KYUt9oEkR05i8Hmt8DLRycBN0FiotJ0yDQWTVA==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/optimize": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.3.1.tgz", + "integrity": "sha512-5j5CZSRGWVobt4bgRRg7zhjPiSimk+/zIuColih8E8DxuFOaJ+t0qu7eZS5KXWBkjcd4BPNuhUPpNlEmHPqVRQ==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/prisma-loader": { + "version": "7.2.64", + "resolved": "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-7.2.64.tgz", + "integrity": "sha512-W8GfzfBKiBSIEgw+/nJk6zUlF6k/jterlNoFhM27mBsbeMtWxKnm1+gEU6KA0N1PNEdq2RIa2W4AfVfVBl2GgQ==", + "dev": true, + "dependencies": { + "@graphql-tools/url-loader": "7.17.13", + "@graphql-tools/utils": "9.2.1", + "@types/js-yaml": "^4.0.0", + "@types/json-stable-stringify": "^1.0.32", + "@types/jsonwebtoken": "^9.0.0", + "chalk": "^4.1.0", + "debug": "^4.3.1", + "dotenv": "^16.0.0", + "graphql-request": "^5.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "isomorphic-fetch": "^3.0.0", + "js-yaml": "^4.0.0", + "json-stable-stringify": "^1.0.1", + "jsonwebtoken": "^9.0.0", + "lodash": "^4.17.20", + "scuid": "^1.1.0", + "tslib": "^2.4.0", + "yaml-ast-parser": "^0.0.43" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/prisma-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@graphql-tools/prisma-loader/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@graphql-tools/prisma-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@graphql-tools/prisma-loader/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@graphql-tools/prisma-loader/node_modules/graphql-request": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-5.1.0.tgz", + "integrity": "sha512-0OeRVYigVwIiXhNmqnPDt+JhMzsjinxHE7TVy3Lm6jUzav0guVcL0lfSbi6jVTRAxcbwgyr6yrZioSHxf9gHzw==", + "dev": true, + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "cross-fetch": "^3.1.5", + "extract-files": "^9.0.0", + "form-data": "^3.0.0" + }, + "peerDependencies": { + "graphql": "14 - 16" + } + }, + "node_modules/@graphql-tools/prisma-loader/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@graphql-tools/prisma-loader/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@graphql-tools/prisma-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@graphql-tools/relay-operation-optimizer": { + "version": "6.5.17", + "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.5.17.tgz", + "integrity": "sha512-hHPEX6ccRF3+9kfVz0A3In//Dej7QrHOLGZEokBmPDMDqn9CS7qUjpjyGzclbOX0tRBtLfuFUZ68ABSac3P1nA==", + "dev": true, + "dependencies": { + "@ardatan/relay-compiler": "12.0.0", + "@graphql-tools/utils": "9.2.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/schema": { + "version": "9.0.16", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-9.0.16.tgz", + "integrity": "sha512-kF+tbYPPf/6K2aHG3e1SWIbapDLQaqnIHVRG6ow3onkFoowwtKszvUyOASL6Krcv2x9bIMvd1UkvRf9OaoROQQ==", + "dev": true, + "dependencies": { + "@graphql-tools/merge": "8.3.18", + "@graphql-tools/utils": "9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/url-loader": { + "version": "7.17.13", + "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-7.17.13.tgz", + "integrity": "sha512-FEmbvw68kxeZLn4VYGAl+NuBPk09ZnxymjW07A6mCtiDayFgYfHdWeRzXn/iM5PzsEuCD73R1sExtNQ/ISiajg==", + "dev": true, + "dependencies": { + "@ardatan/sync-fetch": "^0.0.1", + "@graphql-tools/delegate": "^9.0.27", + "@graphql-tools/executor-graphql-ws": "^0.0.11", + "@graphql-tools/executor-http": "^0.1.7", + "@graphql-tools/executor-legacy-ws": "^0.0.9", + "@graphql-tools/utils": "^9.2.1", + "@graphql-tools/wrap": "^9.3.6", + "@types/ws": "^8.0.0", + "@whatwg-node/fetch": "^0.8.0", + "isomorphic-ws": "^5.0.0", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.11", + "ws": "^8.12.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/utils": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-9.2.1.tgz", + "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", + "dev": true, + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/wrap": { + "version": "9.3.6", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-9.3.6.tgz", + "integrity": "sha512-HtQIYoPz48bzpMYZzoeMmzIIYuVxcaUuLD7dH7GtIhwe2f4hpPDE+JLUPxpYiaXdY10l7kP9wycK+FtRfCsFlw==", + "dev": true, + "dependencies": { + "@graphql-tools/delegate": "9.0.27", + "@graphql-tools/schema": "9.0.16", + "@graphql-tools/utils": "9.2.1", + "tslib": "^2.4.0", + "value-or-promise": "1.0.12" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", + "integrity": "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==", + "dev": true, + "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" + } + }, + "node_modules/@hookform/devtools": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@hookform/devtools/-/devtools-4.3.0.tgz", + "integrity": "sha512-DTTTYJ9j+L4Nd/qj0k41WNbRF/qNQfZxbHwUupFeQWu6JOJ5Ak5ksxuoCbfSWrsXV5EPSmcfhpsDos0IOlwhsg==", + "dev": true, + "dependencies": { + "@emotion/react": "^11.1.5", + "@emotion/styled": "^11.3.0", + "@types/lodash": "^4.14.168", + "little-state-machine": "^4.1.0", + "lodash": "^4.17.21", + "react-simple-animate": "^3.3.12", + "use-deep-compare-effect": "^1.8.1", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18", + "react-dom": "^16.8.0 || ^17 || ^18" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.4.2", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.2.tgz", + "integrity": "sha512-Dd3ilDJpBnqa0GiPN7QrudVs0cczMMHtehSo2CSTjm3zdHx0RcpmhFNVEltuEFeqfLIyWKFI224FsMSQ/nsJQA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.4.2", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.2.tgz", + "integrity": "sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.4.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.2.tgz", + "integrity": "sha512-kf1v5iTJHn7p9RbOsBuc/lcwyPtJaZJt5885C98omWz79NIeD3PfoiiaPSu7JyCyFzNOIzKhmMhQLUhlTL9BvQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.4.2", + "@jridgewell/trace-mapping": "^0.3.15", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.4.2", + "jest-regex-util": "^29.4.2", + "jest-util": "^29.4.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "29.4.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.2.tgz", + "integrity": "sha512-CKlngyGP0fwlgC1BRUtPZSiWLBhyS9dKwKmyGxk8Z6M82LBEGB2aLQSg+U1MyLsU+M7UjnlLllBM2BLWKVm/Uw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.2.1.tgz", + "integrity": "sha512-ou4ZJSXMMWHqGS4g8uNRbC5TiTWxAgQZiVucoUrOCWuPrTbkpJbmVyIi9jU72SBry7gQtuMEDp4YR8EEXAg7VQ==", + "dev": true, + "dependencies": { + "glob": "^7.2.0", + "glob-promise": "^4.2.0", + "magic-string": "^0.27.0", + "react-docgen-typescript": "^2.2.2" + }, + "peerDependencies": { + "typescript": ">= 4.3.x", + "vite": "^3.0.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" @@ -3384,6 +4595,45 @@ "node": ">= 8" } }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.3.tgz", + "integrity": "sha512-6GptMYDMyWBHTUKndHaDsRZUO/XMSgIns2krxcm2L7SEExRHwawFvSwNBhqNPR9HJwv3MruAiF1bhN0we6j6GQ==", + "dev": true, + "dependencies": { + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.1.tgz", + "integrity": "sha512-eK4C6WTNYxoI7JOabMoZICiyqRRtJB220bh0Mbj5RwRycleZf9BPyZoxsTvpP0FpmVS2aS13NKOuh5/tN3sIRw==", + "dev": true, + "dependencies": { + "@peculiar/asn1-schema": "^2.3.0", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.3.2", + "tslib": "^2.4.1", + "webcrypto-core": "^1.7.4" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/@playwright/test": { "version": "1.30.0", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.30.0.tgz", @@ -3408,6 +4658,12 @@ "node": ">=14" } }, + "node_modules/@repeaterjs/repeater": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", + "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==", + "dev": true + }, "node_modules/@rollup/plugin-inject": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.3.tgz", @@ -5725,6 +6981,15 @@ "@testing-library/dom": ">=7.21.4" } }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -5734,6 +6999,30 @@ "node": ">=10.13.0" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, "node_modules/@types/aria-query": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", @@ -5791,6 +7080,12 @@ "@types/node": "*" } }, + "node_modules/@types/braces": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.1.tgz", + "integrity": "sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==", + "dev": true + }, "node_modules/@types/bs58check": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@types/bs58check/-/bs58check-2.1.0.tgz", @@ -5994,18 +7289,45 @@ "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==" }, + "node_modules/@types/js-yaml": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", + "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/json-stable-stringify": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.34.tgz", + "integrity": "sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==", + "dev": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", + "integrity": "sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/keyboardjs": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@types/keyboardjs/-/keyboardjs-2.5.0.tgz", + "integrity": "sha512-tGU6Lz04lDNH+N3AZYIWVeBza2ZSaLlZuSkzi38zSFSuh6DgVqBdqgkX+OS+jg1vwlw5XzS5MASY44fr9C12Yg==", + "dev": true + }, "node_modules/@types/lodash": { "version": "4.14.191", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", @@ -6018,6 +7340,15 @@ "integrity": "sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==", "dev": true }, + "node_modules/@types/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", + "dev": true, + "dependencies": { + "@types/braces": "*" + } + }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -6116,105 +7447,405 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.10", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", + "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-infinite-scroller": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/react-infinite-scroller/-/react-infinite-scroller-1.2.3.tgz", + "integrity": "sha512-l60JckVoO+dxmKW2eEG7jbliEpITsTJvRPTe97GazjF5+ylagAuyYdXl8YY9DQsTP9QjhqGKZROknzgscGJy0A==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-lazy-load-image-component": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/react-lazy-load-image-component/-/react-lazy-load-image-component-1.5.2.tgz", + "integrity": "sha512-4NLJsMJVrMv18FuMIkUUBVj/PH9A+BvLKrZC75EWiEFn1IsMrZHgL1tVKw5QBfoa0Qjz6SkWIzEvwcyZ8PgnIg==", + "dev": true, + "dependencies": { + "@types/react": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-pdf": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@types/react-pdf/-/react-pdf-6.2.0.tgz", + "integrity": "sha512-OSCYmrfaJvpXkM5V4seUMAhUDOAOqbGQf9kwv14INyTf7AjDs2ukfkkQrLWRQ8OjWrDklbXYWh5l7pT7l0N76g==", + "dev": true, + "dependencies": { + "@types/react": "*", + "pdfjs-dist": "^2.16.105" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dev": true, + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", + "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", + "dev": true, + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", + "integrity": "sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/type-utils": "5.53.0", + "@typescript-eslint/utils": "5.53.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", + "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", + "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", + "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", + "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@types/react-dom": { - "version": "18.0.10", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", - "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", + "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", "dev": true, "dependencies": { - "@types/react": "*" + "@typescript-eslint/types": "5.53.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@types/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, "dependencies": { - "@types/react": "*" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "node_modules/@typescript-eslint/eslint-plugin/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "@types/mime": "*", - "@types/node": "*" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", - "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.52.0.tgz", + "integrity": "sha512-kd8CRr04mNE3hw4et6+0T0NI5vli2H6dJCGzjX1r12s/FXUehLVadmvo2Nl3DN80YqAh1cVC6zYZAkpmGiVJ5g==", "dev": true, "dependencies": { - "@types/jest": "*" + "@typescript-eslint/utils": "5.52.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@types/trusted-types": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", - "dev": true - }, - "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true + "node_modules/@typescript-eslint/parser": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz", + "integrity": "sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } }, - "node_modules/@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", + "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", + "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz", - "integrity": "sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", + "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.52.0", - "@typescript-eslint/type-utils": "5.52.0", - "@typescript-eslint/utils": "5.52.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", + "globby": "^11.1.0", + "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" }, @@ -6225,17 +7856,30 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", + "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", @@ -6247,7 +7891,7 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "node_modules/@typescript-eslint/parser/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", @@ -6262,41 +7906,99 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "node_modules/@typescript-eslint/parser/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/@typescript-eslint/experimental-utils": { + "node_modules/@typescript-eslint/scope-manager": { "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.52.0.tgz", - "integrity": "sha512-kd8CRr04mNE3hw4et6+0T0NI5vli2H6dJCGzjX1r12s/FXUehLVadmvo2Nl3DN80YqAh1cVC6zYZAkpmGiVJ5g==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz", + "integrity": "sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.53.0", + "@typescript-eslint/utils": "5.53.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", + "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", + "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.52.0" - }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz", - "integrity": "sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", + "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.52.0", - "@typescript-eslint/types": "5.52.0", - "@typescript-eslint/typescript-estree": "5.52.0", - "debug": "^4.3.4" + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6305,23 +8007,26 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", - "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", + "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.52.0", - "@typescript-eslint/visitor-keys": "5.52.0" + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6329,18 +8034,19 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz", - "integrity": "sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", + "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.52.0", - "@typescript-eslint/utils": "5.52.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "@typescript-eslint/types": "5.53.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -6348,16 +8054,63 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, - "peerDependencies": { - "eslint": "*" + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, + "node_modules/@typescript-eslint/type-utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/types": { "version": "5.52.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", @@ -6556,6 +8309,41 @@ "vite": "^4.1.0-beta.0" } }, + "node_modules/@whatwg-node/events": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.0.2.tgz", + "integrity": "sha512-WKj/lI4QjnLuPrim0cfO7i+HsDSXHxNv1y0CrJhdntuO3hxWZmnXCwNDnwOvry11OjRin6cgWNF+j/9Pn8TN4w==", + "dev": true + }, + "node_modules/@whatwg-node/fetch": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.8.1.tgz", + "integrity": "sha512-Fkd1qQHK2tAWxKlC85h9L86Lgbq3BzxMnHSnTsnzNZMMzn6Xi+HlN8/LJ90LxorhSqD54td+Q864LgwUaYDj1Q==", + "dev": true, + "dependencies": { + "@peculiar/webcrypto": "^1.4.0", + "@whatwg-node/node-fetch": "^0.3.0", + "busboy": "^1.6.0", + "urlpattern-polyfill": "^6.0.2", + "web-streams-polyfill": "^3.2.1" + } + }, + "node_modules/@whatwg-node/node-fetch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.3.0.tgz", + "integrity": "sha512-mPM8WnuHiI/3kFxDeE0SQQXAElbz4onqmm64fEGCwYEcBes2UsvIDI8HwQIqaXCH42A9ajJUPv4WsYoN/9oG6w==", + "dev": true, + "dependencies": { + "@whatwg-node/events": "^0.0.2", + "busboy": "^1.6.0", + "fast-querystring": "^1.1.1", + "fast-url-parser": "^1.1.3", + "tslib": "^2.3.1" + }, + "peerDependencies": { + "@types/node": "^18.0.6" + } + }, "node_modules/@xobotyi/scrollbar-width": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", @@ -6678,6 +8466,33 @@ "string-width": "^4.1.0" } }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -6749,6 +8564,12 @@ "node": ">=10" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -6859,6 +8680,12 @@ "node": ">=0.10.0" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -6871,6 +8698,20 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/asn1js": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", + "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", + "dev": true, + "dependencies": { + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/assert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", @@ -6927,6 +8768,18 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "node_modules/auto-bind": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", + "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/autoprefixer": { "version": "10.4.13", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", @@ -7077,12 +8930,56 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", + "dev": true + }, "node_modules/babel-plugin-transform-react-remove-prop-types": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", "dev": true }, + "node_modules/babel-preset-fbjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", + "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", + "dev": true, + "dependencies": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/babel-preset-react-app": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", @@ -7175,6 +9072,41 @@ "node": ">=8" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/blakejs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", @@ -7578,6 +9510,12 @@ "node": "*" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -7596,6 +9534,18 @@ "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -7652,6 +9602,16 @@ "node": ">=6" } }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -7709,6 +9669,17 @@ } ] }, + "node_modules/capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -7730,6 +9701,50 @@ "node": ">=0.8.0" } }, + "node_modules/change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/change-case-all": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", + "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", + "dev": true, + "dependencies": { + "change-case": "^4.1.2", + "is-lower-case": "^2.0.2", + "is-upper-case": "^2.0.2", + "lower-case": "^2.0.2", + "lower-case-first": "^2.0.2", + "sponge-case": "^1.0.1", + "swap-case": "^2.0.2", + "title-case": "^3.0.3", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -7828,19 +9843,97 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "string-width": "^4.2.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "10.* || >= 12.*" + "node": ">=8" }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" } }, "node_modules/cliui": { @@ -7854,6 +9947,15 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -7945,6 +10047,15 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -8095,6 +10206,17 @@ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, + "node_modules/constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -8184,6 +10306,22 @@ "node": ">=10" } }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz", + "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=3" + } + }, "node_modules/create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", @@ -8552,6 +10690,18 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, + "node_modules/dataloader": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", + "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==", + "dev": true + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -8652,6 +10802,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -8728,6 +10890,15 @@ "node": ">= 0.8" } }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -8792,6 +10963,15 @@ "detect-port": "bin/detect-port.js" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { "version": "29.4.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.2.tgz", @@ -8924,6 +11104,16 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/dotenv": { "version": "16.0.3", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", @@ -8942,12 +11132,30 @@ "node": ">=12" } }, + "node_modules/dset": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", + "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -10012,6 +12220,20 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/extract-files": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz", @@ -10053,6 +12275,12 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "dev": true + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -10102,11 +12330,29 @@ "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.3.tgz", "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==" }, + "node_modules/fast-querystring": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.1.tgz", + "integrity": "sha512-qR2r+e3HvhEFmpdHMv//U8FnFlnYjaC6QKDuaXALDkw2kvHO8WDjxH+f/rHGR4Me4pnk8p9JAkRNTjYHAKRn2Q==", + "dev": true, + "dependencies": { + "fast-decode-uri-component": "^1.0.1" + } + }, "node_modules/fast-shallow-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz", "integrity": "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==" }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "dev": true, + "dependencies": { + "punycode": "^1.3.2" + } + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -10139,6 +12385,27 @@ "bser": "2.1.1" } }, + "node_modules/fbjs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", + "dev": true, + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.30" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "dev": true + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -10159,6 +12426,30 @@ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz", "integrity": "sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==" }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -10900,30 +13191,222 @@ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphql": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", + "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-codegen-plugin-typescript-swr": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/graphql-codegen-plugin-typescript-swr/-/graphql-codegen-plugin-typescript-swr-0.8.3.tgz", + "integrity": "sha512-6PH4z34oZMgvDkYIiBFHetZEgnkNrzUQ+F0pivGjOpsjgRZSESFXYa2h9kPXuCCAQbwn4Sp6yMuWUnlnm55Gaw==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^2.3.1", + "@graphql-codegen/visitor-plugin-common": "^2.5.1", + "@types/micromatch": "^4.0.1", + "graphql-request": "^4.0.0", + "micromatch": "^4.0.4", + "pascal-case": "^3.1.2", + "swr": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "graphql": "<17.0.0" + } + }, + "node_modules/graphql-codegen-plugin-typescript-swr/node_modules/@graphql-codegen/plugin-helpers": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-2.7.2.tgz", + "integrity": "sha512-kln2AZ12uii6U59OQXdjLk5nOlh1pHis1R98cDZGFnfaiAbX9V3fxcZ1MMJkB7qFUymTALzyjZoXXdyVmPMfRg==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^8.8.0", + "change-case-all": "1.0.14", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.4.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" + } + }, + "node_modules/graphql-codegen-plugin-typescript-swr/node_modules/@graphql-codegen/plugin-helpers/node_modules/@graphql-tools/utils": { + "version": "8.13.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.13.1.tgz", + "integrity": "sha512-qIh9yYpdUFmctVqovwMdheVNJqFh+DQNWIhX87FJStfXYnmweBUDATok9fWPleKeFwxnW8IapKmY8m8toJEkAw==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/graphql-codegen-plugin-typescript-swr/node_modules/@graphql-codegen/plugin-helpers/node_modules/change-case-all": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.14.tgz", + "integrity": "sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==", + "dev": true, + "dependencies": { + "change-case": "^4.1.2", + "is-lower-case": "^2.0.2", + "is-upper-case": "^2.0.2", + "lower-case": "^2.0.2", + "lower-case-first": "^2.0.2", + "sponge-case": "^1.0.1", + "swap-case": "^2.0.2", + "title-case": "^3.0.3", + "upper-case": "^2.0.2", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/graphql-codegen-plugin-typescript-swr/node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "2.13.8", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-2.13.8.tgz", + "integrity": "sha512-IQWu99YV4wt8hGxIbBQPtqRuaWZhkQRG2IZKbMoSvh0vGeWb3dB0n0hSgKaOOxDY+tljtOf9MTcUYvJslQucMQ==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^3.1.2", + "@graphql-tools/optimize": "^1.3.0", + "@graphql-tools/relay-operation-optimizer": "^6.5.0", + "@graphql-tools/utils": "^9.0.0", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.15", + "dependency-graph": "^0.11.0", + "graphql-tag": "^2.11.0", + "parse-filepath": "^1.0.2", + "tslib": "~2.4.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" + } + }, + "node_modules/graphql-codegen-plugin-typescript-swr/node_modules/@graphql-codegen/visitor-plugin-common/node_modules/@graphql-codegen/plugin-helpers": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-3.1.2.tgz", + "integrity": "sha512-emOQiHyIliVOIjKVKdsI5MXj312zmRDwmHpyUTZMjfpvxq/UVAHUJIVdVf+lnjjrI+LXBTgMlTWTgHQfmICxjg==", + "dev": true, + "dependencies": { + "@graphql-tools/utils": "^9.0.0", + "change-case-all": "1.0.15", + "common-tags": "1.8.2", + "import-from": "4.0.0", + "lodash": "~4.17.0", + "tslib": "~2.4.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" + } + }, + "node_modules/graphql-codegen-plugin-typescript-swr/node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "node_modules/graphql-config": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-4.4.1.tgz", + "integrity": "sha512-B8wlvfBHZ5WnI4IiuQZRqql6s+CKz7S+xpUeTb28Z8nRBi8tH9ChEBgT5FnTyE05PUhHlrS2jK9ICJ4YBl9OtQ==", + "dev": true, + "dependencies": { + "@graphql-tools/graphql-file-loader": "^7.3.7", + "@graphql-tools/json-file-loader": "^7.3.7", + "@graphql-tools/load": "^7.5.5", + "@graphql-tools/merge": "^8.2.6", + "@graphql-tools/url-loader": "^7.9.7", + "@graphql-tools/utils": "^9.0.0", + "cosmiconfig": "8.0.0", + "minimatch": "4.2.1", + "string-env-interpolation": "1.0.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "cosmiconfig-toml-loader": "^1.0.0", + "cosmiconfig-typescript-loader": "^4.0.0", + "graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + }, + "peerDependenciesMeta": { + "cosmiconfig-toml-loader": { + "optional": true + }, + "cosmiconfig-typescript-loader": { + "optional": true + } + } + }, + "node_modules/graphql-config/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/graphql-config/node_modules/cosmiconfig": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz", + "integrity": "sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/graphql-config/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/graphql": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", - "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==", + "node_modules/graphql-config/node_modules/minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + "node": ">=10" } }, "node_modules/graphql-request": { @@ -10952,6 +13435,33 @@ "node": ">= 6" } }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-ws": { + "version": "5.11.3", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.11.3.tgz", + "integrity": "sha512-fU8zwSgAX2noXAsuFiCZ8BtXeXZOzXyK5u1LloCdacsVth4skdBMPO74EG51lBoWSIZ8beUocdpV8+cQHBODnQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": ">=0.11 <=16" + } + }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -11113,6 +13623,16 @@ "minimalistic-assert": "^1.0.1" } }, + "node_modules/header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dev": true, + "dependencies": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/hey-listen": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", @@ -11219,6 +13739,20 @@ "node": ">= 0.8" } }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -11336,6 +13870,18 @@ "node": ">=4" } }, + "node_modules/import-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", + "dev": true, + "engines": { + "node": ">=12.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/import-lazy": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", @@ -11393,6 +13939,93 @@ "fast-loops": "^1.1.3" } }, + "node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", @@ -11416,6 +14049,15 @@ "node": ">= 0.10" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", @@ -11431,6 +14073,19 @@ "node": ">= 0.10" } }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-absolute-url": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", @@ -11624,6 +14279,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz", + "integrity": "sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -11728,6 +14401,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-set": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", @@ -11810,6 +14495,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz", + "integrity": "sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", @@ -11844,6 +14562,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -11877,6 +14604,16 @@ "node": ">=0.10.0" } }, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, "node_modules/isomorphic-timers-promises": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", @@ -11896,6 +14633,15 @@ "unfetch": "^4.2.0" } }, + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "dev": true, + "peerDependencies": { + "ws": "*" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -12813,12 +15559,37 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/json-stable-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", + "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", + "dev": true, + "dependencies": { + "jsonify": "^0.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json-to-pretty-yaml": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz", + "integrity": "sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==", + "dev": true, + "dependencies": { + "remedial": "^1.0.7", + "remove-trailing-spaces": "^1.0.6" + }, + "engines": { + "node": ">= 0.2.0" + } + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -12838,10 +15609,68 @@ "dependencies": { "universalify": "^2.0.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "dev": true, + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, + "node_modules/jsonwebtoken/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/jsx-ast-utils": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", @@ -12855,6 +15684,27 @@ "node": ">=4.0" } }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/keyboardjs": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/keyboardjs/-/keyboardjs-2.7.0.tgz", @@ -12973,6 +15823,42 @@ "uc.micro": "^1.0.1" } }, + "node_modules/listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/lit": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/lit/-/lit-2.6.1.tgz", @@ -13050,6 +15936,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, "node_modules/lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", @@ -13067,6 +15959,121 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -13078,6 +16085,24 @@ "loose-envify": "cli.js" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lower-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz", + "integrity": "sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -13131,6 +16156,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/make-event-props": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.4.2.tgz", @@ -13149,6 +16180,15 @@ "tmpl": "1.0.5" } }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -13357,6 +16397,23 @@ "node": ">= 8" } }, + "node_modules/meros": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/meros/-/meros-1.2.1.tgz", + "integrity": "sha512-R2f/jxYqCAGI19KhAvaxSOxALBMkaXWH2a7rOyqQw+ZmizX5bKkEYWLzdhC+U82ZVVPVp6MCXe3EkVligh+12g==", + "dev": true, + "engines": { + "node": ">=13" + }, + "peerDependencies": { + "@types/node": ">=13" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -13561,6 +16618,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "node_modules/nano-css": { "version": "5.3.5", "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.3.5.tgz", @@ -13625,6 +16688,16 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/node-dir": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", @@ -13849,6 +16922,12 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -14082,12 +17161,96 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -14148,6 +17311,16 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -14172,6 +17345,20 @@ "safe-buffer": "^5.1.1" } }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -14198,12 +17385,32 @@ "node": ">= 0.8" } }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, + "node_modules/path-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -14236,6 +17443,27 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dev": true, + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -15499,6 +18727,15 @@ "node": ">=0.4.0" } }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "dependencies": { + "asap": "~2.0.3" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -15657,6 +18894,24 @@ "async-limiter": "~1.0.0" } }, + "node_modules/pvtsutils": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.2.tgz", + "integrity": "sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/qrcode-generator": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", @@ -16419,6 +19674,17 @@ "jsesc": "bin/jsesc" } }, + "node_modules/relay-runtime": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-12.0.0.tgz", + "integrity": "sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.0.0", + "fbjs": "^3.0.0", + "invariant": "^2.2.4" + } + }, "node_modules/remark-external-links": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", @@ -16451,6 +19717,27 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remedial": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz", + "integrity": "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/remove-trailing-spaces": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz", + "integrity": "sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==", + "dev": true + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -16469,6 +19756,12 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", @@ -16499,6 +19792,19 @@ "node": ">=8" } }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -16509,6 +19815,12 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -16640,6 +19952,15 @@ "@babel/runtime": "^7.1.2" } }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -16754,6 +20075,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/scuid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/scuid/-/scuid-1.1.0.tgz", + "integrity": "sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==", + "dev": true + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -16807,6 +20134,17 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, "node_modules/serve-favicon": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", @@ -16921,6 +20259,15 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", @@ -16978,6 +20325,12 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/signedsource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz", + "integrity": "sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==", + "dev": true + }, "node_modules/simple-update-notifier": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", @@ -17046,6 +20399,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -17238,6 +20601,15 @@ "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, + "node_modules/sponge-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sponge-case/-/sponge-case-1.0.1.tgz", + "integrity": "sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -17378,6 +20750,15 @@ "xtend": "^4.0.2" } }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -17386,6 +20767,12 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-env-interpolation": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz", + "integrity": "sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==", + "dev": true + }, "node_modules/string-natural-compare": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", @@ -17776,6 +21163,15 @@ "node": ">= 10" } }, + "node_modules/swap-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-2.0.2.tgz", + "integrity": "sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/swr": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/swr/-/swr-1.3.0.tgz", @@ -18001,7 +21397,8 @@ "version": "0.149.0", "resolved": "https://registry.npmjs.org/three/-/three-0.149.0.tgz", "integrity": "sha512-tohpUxPDht0qExRLDTM8sjRLc5d9STURNrdnK3w9A+V4pxaTBfKWWT/IqtiLfg23Vfc3Z+ImNfvRw1/0CtxrkQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/throttle-debounce": { "version": "3.0.1", @@ -18011,6 +21408,12 @@ "node": ">=10" } }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, "node_modules/timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -18035,6 +21438,27 @@ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "dev": true }, + "node_modules/title-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", + "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -18103,6 +21527,76 @@ "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" }, + "node_modules/ts-log": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/ts-log/-/ts-log-2.2.5.tgz", + "integrity": "sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==", + "dev": true + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/tsconfck": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-2.0.2.tgz", @@ -18331,6 +21825,25 @@ "node": ">=4.2.0" } }, + "node_modules/ua-parser-js": { + "version": "0.7.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", + "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -18365,6 +21878,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/unfetch": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", @@ -18471,6 +21993,30 @@ "node": ">= 10.0.0" } }, + "node_modules/unixify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", + "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", + "dev": true, + "dependencies": { + "normalize-path": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unixify/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -18538,6 +22084,24 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -18572,6 +22136,15 @@ "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", "dev": true }, + "node_modules/urlpattern-polyfill": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-6.0.2.tgz", + "integrity": "sha512-5vZjFlH9ofROmuWmXM9yj2wljYKgWstGwe8YTyiqM7hVum/g9LyCizPZtb3UqsuppVwety9QJmfc42VggLpTgg==", + "dev": true, + "dependencies": { + "braces": "^3.0.2" + } + }, "node_modules/use-deep-compare-effect": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz", @@ -18672,6 +22245,12 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "node_modules/v8-to-istanbul": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", @@ -18696,6 +22275,15 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -18819,6 +22407,17 @@ "integrity": "sha512-4S1Jr5a7jJmyz2JFQaMMRNGmk/hT3zsQ2gFVdiSoSTsM/kZHGxbn0YlJsjMmJyTZCemebAJN6BvSKtW4oTbk1Q==", "dev": true }, + "node_modules/vite-plugin-graphql-codegen": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vite-plugin-graphql-codegen/-/vite-plugin-graphql-codegen-3.1.0.tgz", + "integrity": "sha512-X3rUGe8SLD0Kg1NOspmxg/1/eEa7vc+mVhUGAsqti9gNWNRXE8VJYJgSTAkvruTsIsrAplyXPN4lb5SilFn/lg==", + "dev": true, + "peerDependencies": { + "@graphql-codegen/cli": "^1.0.0 || ^2.0.0 || ^3.0.0", + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0", + "vite": "^2.7.0 || ^3.0.0 || ^4.0.0" + } + }, "node_modules/vite-plugin-markdown": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/vite-plugin-markdown/-/vite-plugin-markdown-2.1.0.tgz", @@ -19063,6 +22662,15 @@ "node": ">=10.13.0" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", @@ -19072,6 +22680,19 @@ "node": ">= 8" } }, + "node_modules/webcrypto-core": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.6.tgz", + "integrity": "sha512-TBPiewB4Buw+HI3EQW+Bexm19/W4cP/qZG/02QJCXN+iN+T5sl074vZ3rJcle/ZtDBQSgjkbsQO/1eFcxnSBUA==", + "dev": true, + "dependencies": { + "@peculiar/asn1-schema": "^2.1.6", + "@peculiar/json-schema": "^1.1.12", + "asn1js": "^3.0.1", + "pvtsutils": "^1.3.2", + "tslib": "^2.4.0" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -19092,6 +22713,12 @@ "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", "dev": true }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -19147,6 +22774,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, "node_modules/which-typed-array": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", @@ -19306,6 +22939,12 @@ "node": ">= 6" } }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", + "dev": true + }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -19343,6 +22982,15 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 29738b59a..3dc51858f 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "compressorjs": "^1.1.1", "fflate": "^0.7.4", "framer-motion": "^9.0.1", - "graphql": "^16.4.0", - "graphql-request": "^4.2.0", + "graphql": "^16.6.0", + "graphql-request": "^4.3.0", "json5": "^2.2.3", "keyboardjs": "^2.7.0", "markdown-to-jsx": "^7.1.9", @@ -36,6 +36,8 @@ }, "scripts": { "analyze": "source-map-explorer 'build/assets/*.js'", + "check-types": "tsc --noEmit", + "gen-api": "graphql-codegen", "start": "vite", "serve": "vite preview", "build": "vite build", @@ -43,9 +45,9 @@ "test": "vite test", "screenshots": "playwright test", "eject": "react-scripts eject", - "format": "prettier --write \"./src/**/*.{js,jsx,scss}\"", + "format": "prettier --write \"./src/**/*.{js,jsx,scss,ts,tsx}\"", "prepare": "husky install", - "lint": "eslint src --ext .js,.jsx", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build" }, @@ -70,7 +72,13 @@ "devDependencies": { "@airgap/beacon-types": "^3.3.3", "@babel/preset-react": "^7.18.6", - "@google/model-viewer": "^3.0.1", + "@google/model-viewer": "^3.0.2", + "@graphql-codegen/cli": "^3.1.0", + "@graphql-codegen/client-preset": "^2.1.0", + "@graphql-codegen/introspection": "^3.0.1", + "@graphql-codegen/typed-document-node": "^3.0.1", + "@graphql-codegen/typescript-graphql-request": "^4.5.8", + "@graphql-typed-document-node/core": "^3.1.1", "@hookform/devtools": "^4.3.0", "@storybook/addon-essentials": "^7.0.0-beta.47", "@storybook/addon-interactions": "^7.0.0-beta.47", @@ -82,6 +90,12 @@ "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", + "@types/keyboardjs": "^2.5.0", + "@types/react-infinite-scroller": "^1.2.3", + "@types/react-lazy-load-image-component": "^1.5.2", + "@types/react-pdf": "^6.2.0", + "@typescript-eslint/eslint-plugin": "^5.53.0", + "@typescript-eslint/parser": "^5.53.0", "@vitejs/plugin-react": "^3.1.0", "assert": "^2.0.0", "buffer": "^6.0.3", @@ -93,6 +107,7 @@ "eslint-plugin-react": "^7.32.2", "fnv1a": "^1.1.1", "fs-extra": "^11.1.0", + "graphql-codegen-plugin-typescript-swr": "^0.8.3", "husky": "^7.0.4", "libsodium-wrappers": "^0.7.11", "lodash": "^4.17.21", @@ -118,6 +133,7 @@ "vite-plugin-ejs": "^1.6.4", "vite-plugin-eslint": "^1.8.1", "vite-plugin-filter-replace": "^0.1.10", + "vite-plugin-graphql-codegen": "^3.1.0", "vite-plugin-markdown": "^2.1.0", "vite-plugin-node-polyfills": "^0.7.0", "vite-plugin-node-stdlib-browser": "^0.1.1", diff --git a/src/atoms/button/Button.tsx b/src/atoms/button/Button.tsx index cfa4d3a1d..8dc62243c 100644 --- a/src/atoms/button/Button.tsx +++ b/src/atoms/button/Button.tsx @@ -1,43 +1,8 @@ import classnames from 'classnames' import styles from '@style' -import { NavLink, To } from 'react-router-dom' +import { NavLink } from 'react-router-dom' import { motion } from 'framer-motion' -import React from 'react' - -interface ButtonProps { - /**Used for accessibility (aria-label) */ - alt?: string - /** If provided return a "NavLink" */ - to?: To - /** If provided return a "a" */ - href?: string - /**onClick callback, ignore if to is provided */ - onClick?: () => void - /**@deprecated onClick for NavLinks */ - onTo?: () => void - children?: string | React.ReactNode - /**Extra classes to apply to the button */ - className?: string - style?: React.CSSProperties - /** Disables the button */ - disabled?: boolean - selected?: boolean - /**(Style) Fit */ - fit?: boolean - /**(Style) Full */ - full?: boolean - /**(Style) Box (adds nesting) */ - box?: boolean - strong?: boolean - /**(Style) Shadow Box (adds nesting)*/ - shadow_box?: boolean - secondary?: boolean - small?: boolean - inline?: boolean - activeClass?: string - //props - [x: string]: any -} +import type React from 'react' /** * Core button style (used for links, buttons, and ) diff --git a/src/atoms/button/types.d.ts b/src/atoms/button/types.d.ts new file mode 100644 index 000000000..21866c9d7 --- /dev/null +++ b/src/atoms/button/types.d.ts @@ -0,0 +1,34 @@ +interface ButtonProps { + /**Used for accessibility (aria-label) */ + alt?: string + /** If provided return a "NavLink" */ + to?: To + /** If provided return a "a" */ + href?: string + /**onClick callback, ignore if to is provided */ + onClick?: () => void + /**@deprecated onClick for NavLinks */ + onTo?: () => void + children?: string | React.ReactNode + /**Extra classes to apply to the button */ + className?: string + style?: React.CSSProperties + /** Disables the button */ + disabled?: boolean + selected?: boolean + /**(Style) Fit */ + fit?: boolean + /**(Style) Full */ + full?: boolean + /**(Style) Box (adds nesting) */ + box?: boolean + strong?: boolean + /**(Style) Shadow Box (adds nesting)*/ + shadow_box?: boolean + secondary?: boolean + small?: boolean + inline?: boolean + activeClass?: string + //props + [x: string]: any +} diff --git a/src/atoms/dropdown/Dropdown.tsx b/src/atoms/dropdown/Dropdown.tsx index 836fd4703..1b638d6fa 100644 --- a/src/atoms/dropdown/Dropdown.tsx +++ b/src/atoms/dropdown/Dropdown.tsx @@ -9,15 +9,6 @@ import { useClickOutside } from '@hooks/use-click-outside' import classnames from 'classnames' import { useTwemoji } from '@hooks/use-twemoji' -interface DropdownProps { - menuID: string - /** Callback when dropdown closed/clicked outside */ - setOpen: (isOpen: boolean) => void - children: JSX.Element | JSX.Element[] - vertical?: boolean - left?: boolean -} - function DropDown({ children, setOpen, @@ -32,7 +23,7 @@ function DropDown({ useClickOutside( dropdownRef, () => { - setOpen(false) + setOpen?.(false) }, true ) diff --git a/src/atoms/dropdown/DropdownButton.tsx b/src/atoms/dropdown/DropdownButton.tsx index 5c20bb83a..282079eca 100644 --- a/src/atoms/dropdown/DropdownButton.tsx +++ b/src/atoms/dropdown/DropdownButton.tsx @@ -4,21 +4,7 @@ import { AnimatePresence, motion } from 'framer-motion' import classnames from 'classnames' import Button from '@atoms/button/Button' import { useTwemoji } from '@hooks/use-twemoji' -interface DropdownButtonProps { - menuID: string - direction: 'left' | 'right' - label: string - alt: string - icon?: React.ReactNode - toggled: boolean - children: React.ReactNode - onClick: () => void - className?: string -} - -interface ChildProps { - left?: boolean -} +import type { WithCompChildren } from '@types' function DropdownButton({ menuID, @@ -30,7 +16,7 @@ function DropdownButton({ children, onClick, className, -}: DropdownButtonProps) { +}: WithCompChildren) { const [open, setOpen] = useState(false) useTwemoji() @@ -60,7 +46,9 @@ function DropdownButton({ data-toggle={menuID} onClick={() => { toggle() - if (onClick) onClick() + if (onClick) { + onClick() + } }} > <> diff --git a/src/atoms/dropdown/types.d.ts b/src/atoms/dropdown/types.d.ts new file mode 100644 index 000000000..8e3aaa029 --- /dev/null +++ b/src/atoms/dropdown/types.d.ts @@ -0,0 +1,23 @@ +interface DropdownProps { + menuID: string + /** Callback when dropdown closed/clicked outside */ + setOpen?: (isOpen: boolean) => void + children: JSX.Element | JSX.Element[] + vertical?: boolean + left?: boolean +} + +interface DropdownButtonProps { + menuID: string + direction?: 'left' | 'right' + label: string + alt?: string + icon?: React.ReactNode + toggled?: boolean + onClick?: () => void + className?: string +} + +interface ChildProps { + left?: boolean +} diff --git a/src/atoms/identicons/index.tsx b/src/atoms/identicons/index.tsx index a52a93d02..bd1ab4d6c 100644 --- a/src/atoms/identicons/index.tsx +++ b/src/atoms/identicons/index.tsx @@ -435,7 +435,7 @@ export const Identicon = ({ src={resolvedLogo} alt="identicon" onLoad={onLoad} - onError={(e: ErrorEvent) => { + onError={(e) => { console.error(e) setIsVideo(true) }} diff --git a/src/atoms/input/Checkbox.jsx b/src/atoms/input/Checkbox.jsx deleted file mode 100644 index 3e0ebc0b0..000000000 --- a/src/atoms/input/Checkbox.jsx +++ /dev/null @@ -1,74 +0,0 @@ -import { useControlled } from '@hooks/use-controlled' -import styles from '@style' -import classNames from 'classnames' -import { forwardRef, useCallback } from 'react' -import { memo } from 'react' - -/** - * Core checkbox - * @param {Object} checkboxProps - * @param {string} checkboxProps.label - The text or icon used for the toggle - * @param {boolean} checkboxProps.initial - The initial value - * @param {boolean} checkboxProps.checked - If set the control becomes controlled - * @param {boolean} checkboxProps.style - Style object (as a last resort) - * @param {React.EffectCallback} checkboxProps.onCheck - * @param {boolean} checkboxProps.disabled - Disables the checkbox - * - */ -const Checkbox = forwardRef( - ( - { - name, - label, - alt, - initial, - onCheck = () => null, - onBlur = () => null, - onWheel = () => null, - disabled, - checked: checkedProp, - autoFocus = false, - className, - small, - }, - ref - ) => { - const [checked, setChecked] = useControlled(checkedProp, initial) - - const handleCheck = useCallback( - (e) => { - const c = e.target.checked - setChecked(c) - onCheck?.(c) - }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [checked] - ) - - const classes = classNames({ - [styles.check_container]: true, - [styles.small]: small, - }) - - return ( - - ) - } -) - -export default memo(Checkbox) diff --git a/src/atoms/input/Checkbox.tsx b/src/atoms/input/Checkbox.tsx new file mode 100644 index 000000000..f29a8955d --- /dev/null +++ b/src/atoms/input/Checkbox.tsx @@ -0,0 +1,62 @@ +import { useControlled } from '@hooks/use-controlled' +import styles from '@style' +import classNames from 'classnames' +import React, { useCallback } from 'react' + +import './types.d.ts' + +const Checkbox = ( + { + name, + label, + alt, + initial, + onCheck = () => null, + onBlur = () => null, + onWheel = () => null, + // disabled, + checked: checkedProp, + // autoFocus = false, + className, + small, + }: CheckboxProps, + ref: React.ForwardedRef +) => { + const [checked, setChecked] = useControlled(checkedProp, initial) + + const handleCheck = useCallback( + (e: React.ChangeEvent) => { + const c = e.target.checked + setChecked(c) + onCheck?.(c) + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [checked] + ) + + const classes = classNames({ + [styles.check_container]: true, + [styles.small]: small, + }) + + return ( + + ) +} + +export default React.memo(React.forwardRef(Checkbox)) diff --git a/src/atoms/input/Input.tsx b/src/atoms/input/Input.tsx index 848b5f344..e89d61249 100644 --- a/src/atoms/input/Input.tsx +++ b/src/atoms/input/Input.tsx @@ -1,7 +1,9 @@ import styles from '@style' import { memo, useCallback } from 'react' import { useControlled } from '@hooks/use-controlled' -import React, { KeyboardEvent } from 'react' +import type { WithChildren } from '@types' +import type { KeyboardEvent } from 'react' +import React from 'react' // TODO: properly handle validation. Either on pattern (regex) or a prop onValidate @@ -56,7 +58,7 @@ interface InputProps { className?: string } -function Input( +function Input( { type = 'text', placeholder = 'placeholder', @@ -65,8 +67,8 @@ function Input( max, maxlength = 500, label, - onChange = (value) => null, - onBlur = () => null, + onChange, + onBlur, // onWheel = () => null, disabled, value: valueProp, @@ -74,16 +76,16 @@ function Input( defaultValue, pattern, onKeyDown, - className, - }: InputProps, + className = '', + }: WithChildren>, ref: React.ForwardedRef ) { - const [value, setValue] = useControlled(valueProp, defaultValue) + const [value, setValue] = useControlled(valueProp, defaultValue) const handleInput = useCallback( (e: React.FormEvent) => { if (ref) { - onChange(e) + onChange?.(e) return } const target = e.target as HTMLInputElement @@ -95,8 +97,8 @@ function Input( : target.value : target.value - setValue(v) - onChange(v) + setValue(v as T) + onChange?.(v as T) } }, // eslint-disable-next-line react-hooks/exhaustive-deps @@ -104,7 +106,7 @@ function Input( ) return ( -
+
{price} @@ -18,7 +19,7 @@ const Price = ({ price }) => ( * @param {Object} itemInfoCompactOptions * @param {import("@types").NFT} itemInfoCompactOptions.nft **/ -const ItemInfoCompact = ({ nft }) => { +const ItemInfoCompact = ({ nft }: { nft: Partial }) => { const [zen, viewMode] = useLocalSettings((st) => [st.zen, st.viewMode]) const param = useParams() diff --git a/src/components/listings/index.tsx b/src/components/listings/index.tsx index b3fb48cdd..332425552 100644 --- a/src/components/listings/index.tsx +++ b/src/components/listings/index.tsx @@ -1,5 +1,6 @@ import get from 'lodash/get' -import React, { useMemo, useState } from 'react' +import type React from 'react' +import { useMemo, useState } from 'react' import { Button } from '@atoms/button' import { walletPreview } from '@utils/string' @@ -7,8 +8,8 @@ import styles from '@style' import MarketplaceLabel, { RestrictedLabel } from '@atoms/marketplace-labels' import useSettings from '@hooks/use-settings' import { Line } from '@atoms/line' -import { Listing, NFT } from '@types' import { useUserStore } from '@context/userStore' +import type { Listings, Tokens } from 'gql' // TODO: add support for all kind of listings function ListingRow({ @@ -20,17 +21,18 @@ function ListingRow({ proxyAdminAddress, rowId, }: { - nft: NFT - listing: Listing - proxyAddress: string - onCollectClick: (listing: Listing) => void + nft: Tokens & { restricted: boolean } + listing: Listings + // restricted: boolean + // proxyAddress: string + onCollectClick: (listing: Listings) => void reswapPrices: { [key: string]: number } setReswapPrices: React.Dispatch< React.SetStateAction<{ [key: string]: string }> > - reswap: (nft: NFT, price: number, listing: Listing) => void - cancel: (contract: string, swap_id: string) => void - address: string + // reswap: (nft: Tokens, price: number, listing: Listing) => void + // cancel: (contract: string, swap_id: string) => void + // address: string proxyAdminAddress: string rowId: string }) { @@ -51,6 +53,8 @@ function ListingRow({ return nft.restricted || walletBlockMap.get(listing.seller_address) === 1 }, [nft.restricted, walletBlockMap, listing.seller_address]) + if (!walletBlockMap) return null + return (
@@ -134,7 +138,7 @@ function ListingRow({ ) } -export const Listings = ({ +const ListingsComponent = ({ // id, // listings, proxyAdminAddress, @@ -148,8 +152,8 @@ export const Listings = ({ // reswap, { proxyAdminAddress: string - nft: NFT - handleCollect: (listing: Listing) => void + nft: Tokens & { restricted: boolean } + handleCollect: (listing: Listings) => void }) => { const [reswapPrices, setReswapPrices] = useState({}) const listingsWithKeys = nft.listings?.map((listing) => ({ @@ -164,7 +168,7 @@ export const Listings = ({ ) } + +export { ListingsComponent as Listings } diff --git a/src/components/markdown/index.jsx b/src/components/markdown/index.tsx similarity index 73% rename from src/components/markdown/index.jsx rename to src/components/markdown/index.tsx index ee0fa939b..857d8adb4 100644 --- a/src/components/markdown/index.jsx +++ b/src/components/markdown/index.tsx @@ -1,7 +1,8 @@ import { default as MarkdownToJSX } from 'markdown-to-jsx' import styles from '@style' +import type { WithChildren } from '@types' -const LinkRenderer = (props) => { +const LinkRenderer = (props: WithChildren<{ href: string }>) => { return ( {props.children} @@ -9,7 +10,13 @@ const LinkRenderer = (props) => { ) } -export const Markdown = ({ children, className }) => { +export const Markdown = ({ + children, + className = '', +}: { + children: string + className?: string +}) => { return ( { +}: MediaTypeProps) => { // const visualiser = useRef() // const [userTouched, setUserTouched] = useState(false) - const audioElement = useRef() + const audioElement = useRef(null) const [play, setPlay] = useState(false) const togglePlay = () => { setPlay(!play) - } - - useEffect(() => { if (!audioElement.current) return - if (play) audioElement.current.play() + if (!play) audioElement.current.play() else audioElement.current.pause() - }, [play]) + } // user interaction // useEffect(() => { diff --git a/src/components/media-types/audio/visualiser.jsx b/src/components/media-types/audio/visualiser.tsx similarity index 63% rename from src/components/media-types/audio/visualiser.jsx rename to src/components/media-types/audio/visualiser.tsx index 52c3e4e59..b40b39945 100644 --- a/src/components/media-types/audio/visualiser.jsx +++ b/src/components/media-types/audio/visualiser.tsx @@ -1,16 +1,16 @@ import { createRef, useEffect, useState } from 'react' -export const Visualiser = ({ src }) => { - const ref = createRef() - const [ctx, setCtx] = useState() +export const Visualiser = ({ src }: { src: string }) => { + const ref = createRef() + const [ctx, setCtx] = useState(null) const [ratio, setRatio] = useState(1) - const [audio, setAudio] = useState() - const [raf, setRaf] = useState() - const [data, setData] = useState() - const [analyser, setAnalyser] = useState() + const [audio, setAudio] = useState() + const [raf, setRaf] = useState(0) + const [data, setData] = useState() + const [analyser, setAnalyser] = useState() useEffect(() => { - setCtx(ref.current.getContext('2d')) + setCtx(ref.current?.getContext('2d') || null) setRatio(Math.max(1, Math.min(global.devicePixelRatio, 2))) return () => { @@ -23,7 +23,7 @@ export const Visualiser = ({ src }) => { }) useEffect(() => { - let _audio = new Audio() + const _audio = new Audio() _audio.src = src _audio.controls = false _audio.loop = true @@ -32,32 +32,34 @@ export const Visualiser = ({ src }) => { setAudio(_audio) - let audioCtx = new AudioContext() + const audioCtx = new AudioContext() setAnalyser(audioCtx.createAnalyser()) // analyser.fftSize = 2048 - let source = audioCtx.createMediaElementSource(audio) - source.connect(analyser) - source.connect(audioCtx.destination) - - setData(new Float32Array(analyser.frequencyBinCount)) - analyser.getFloatTimeDomainData(data) + if (audio && analyser) { + const source = audioCtx.createMediaElementSource(audio) + source.connect(analyser) + source.connect(audioCtx.destination) + const _data = new Float32Array(analyser.frequencyBinCount) + setData(_data) + analyser.getFloatTimeDomainData(_data) + } //style = getComputedStyle(document.body) }, [analyser, audio, src, data]) const play = () => { - audio.play() + audio?.play() setRaf(requestAnimationFrame(update)) } - const pause = (reset) => { - audio.pause() + const pause = (reset?: boolean) => { + audio?.pause() cancelAnimationFrame(raf) - if (reset) { + if (reset && audio) { audio.currentTime = 0 } } @@ -65,13 +67,16 @@ export const Visualiser = ({ src }) => { const resize = () => { const width = 320 const height = 320 - ctx.canvas.width = width * ratio - ctx.canvas.height = height * ratio - ctx.canvas.style.width = `${width}px` - ctx.canvas.style.height = `${height}px` + if (ctx) { + ctx.canvas.width = width * ratio + ctx.canvas.height = height * ratio + ctx.canvas.style.width = `${width}px` + ctx.canvas.style.height = `${height}px` + } } const update = () => { + if (!analyser || !ctx || !data) return // analyser.getByteFrequencyData(data) analyser.getFloatTimeDomainData(data) @@ -112,7 +117,7 @@ export const Visualiser = ({ src }) => { return ( { - if (audio.paused) { + if (audio?.paused) { play() } else { pause() diff --git a/src/components/media-types/container.tsx b/src/components/media-types/container.tsx index 5f21a8d9a..ac22ac259 100644 --- a/src/components/media-types/container.tsx +++ b/src/components/media-types/container.tsx @@ -7,7 +7,7 @@ import { iOS } from '@utils/os' import styles from '@style' import './style.css' import { FullScreenEnterIcon, FullScreenExitIcon } from '@icons' -import { NFT } from '@types' +import type { NFT } from '@types' import { Button } from '@atoms/button' import { MIMETYPE } from '@constants' diff --git a/src/components/media-types/glb/index.jsx b/src/components/media-types/glb/index.tsx similarity index 67% rename from src/components/media-types/glb/index.jsx rename to src/components/media-types/glb/index.tsx index 945083d2c..b8ee00941 100644 --- a/src/components/media-types/glb/index.jsx +++ b/src/components/media-types/glb/index.tsx @@ -4,22 +4,38 @@ import styles from '@style' import { ImageComponent } from '../image' import '@google/model-viewer' -/** - * @param {import("@types").MediaTypeProps} renderOptions - Th options for the media renderer - */ +import type { MediaTypeProps } from '@types' +import type { ModelViewerElement } from '@google/model-viewer' + +/** The types coming from model viewer are camel cased, this does not work */ + +declare global { + namespace JSX { + interface IntrinsicElements { + 'model-viewer': ModelViewerElement + } + } +} + export const GLBComponent = ({ artifactUri, displayUri, previewUri, displayView, nft, -}) => { +}: MediaTypeProps) => { // const ref = useRef() // const [width, setWidth] = useState('100px') // const [height, setHeight] = useState('100px') - let props = { - src: previewUri ? previewUri : artifactUri, + let props: Partial & { + 'auto-rotate'?: boolean + 'data-js-focus-visible'?: boolean + 'interaction-prompt'?: string + 'ar-modes'?: string + src: string | undefined + } = { + src: previewUri ? previewUri : artifactUri || undefined, } if (displayView) { @@ -31,7 +47,8 @@ export const GLBComponent = ({ 'interaction-prompt': 'none', ar: true, 'ar-modes': 'webxr scene-viewer quick-look', - 'camera-controls': true, + cameraControls: true, + // 'camera-controls': true, } } @@ -52,9 +69,14 @@ export const GLBComponent = ({ // } // }, [width, height]) return displayView ? ( - + ) : ( diff --git a/src/components/media-types/html/index.jsx b/src/components/media-types/html/index.tsx similarity index 71% rename from src/components/media-types/html/index.jsx rename to src/components/media-types/html/index.tsx index a8cfd3468..624b90458 100644 --- a/src/components/media-types/html/index.jsx +++ b/src/components/media-types/html/index.tsx @@ -12,6 +12,8 @@ import { GenerativeIcon } from '@icons' // import './styles.css' import { useUserStore } from '@context/userStore' import { useModalStore } from '@context/modalStore' +import type { MediaTypeProps } from '@types' +import type { FileBlobs } from '@utils/types' const uid = Math.round(Math.random() * 1e8).toString() @@ -20,18 +22,15 @@ const allowed_features = const sandbox_features = 'allow-scripts allow-same-origin allow-modals allow-pointer-lock' -/** - * @param {import("@types").MediaTypeProps} renderOptions - Th options for the media renderer - */ -export const HTMLComponent = (props) => { +export const HTMLComponent = (props: MediaTypeProps) => { const { artifactUri, displayUri, previewUri, nft, displayView } = props const address = useUserStore((st) => st.address) const showModal = useModalStore((st) => st.show) - let _creator_ = false - let _viewer_ = false - let _objectId_ = false + let _creator_ + let _viewer_ + let _objectId_ if (nft.artist_address) { _creator_ = nft.artist_address @@ -46,36 +45,41 @@ export const HTMLComponent = (props) => { } // preview - const iframeRef = useRef(null) - const unpackedFiles = useRef(null) - const unpacking = useRef(false) - const [validHTML, setValidHTML] = useState(null) - const [validationError, setValidationError] = useState(null) + const iframeRef = useRef(null) + const [unpackedFiles, setUnpackedFiles] = useState(null) + const [unpacking, setUnpacking] = useState(false) + const [validHTML, setValidHTML] = useState(false) + const [validationError, setValidationError] = useState() const unpackZipFiles = async () => { - unpacking.current = true + if (!previewUri) + throw Error('unpackZip can only be called in preview', { + cause: 'Wrong call to teia method', + }) + setUnpacking(true) const buffer = dataRUIToBuffer(previewUri) try { const filesArr = await prepareFilesFromZIP(buffer) const files = filesArr.reduce( - (memo, f) => ({ ...memo, [f.path]: f.blob }), + (rest, f) => ({ ...rest, [f.path]: f.blob }), {} ) - unpackedFiles.current = files + // unpackedFiles.current = files + setUnpackedFiles(files) - const result = await validateFiles(unpackedFiles.current) + const result = await validateFiles(files) if (result.error) { console.error(result.error) setValidationError(result.error) } else { - setValidationError(null) + setValidationError(undefined) } setValidHTML(result.valid) - unpacking.current = false + setUnpacking(false) } catch (e) { showModal(`Couldn't unpack ZIP file: ${e}`) console.error(e) @@ -83,29 +87,30 @@ export const HTMLComponent = (props) => { } } - if (previewUri && !unpackedFiles.current && !unpacking.current) { + if (previewUri && !unpackedFiles && !unpacking) { unpackZipFiles() } useEffect(() => { - const handler = async (event) => { + const handler = async (event: MessageEvent) => { if (event.data !== uid) { return } - - iframeRef.current.contentWindow.postMessage( - { - target: 'hicetnunc-html-preview', - data: unpackedFiles.current, - }, - '*' - ) + if (iframeRef.current?.contentWindow) { + iframeRef.current.contentWindow.postMessage( + { + target: 'hicetnunc-html-preview', + data: unpackedFiles, + }, + '*' + ) + } } window.addEventListener('message', handler) return () => window.removeEventListener('message', handler) - }, [previewUri]) + }, [previewUri, unpackedFiles]) const classes = classnames({ [styles.container]: true, diff --git a/src/components/media-types/html/warning.jsx b/src/components/media-types/html/warning.tsx similarity index 100% rename from src/components/media-types/html/warning.jsx rename to src/components/media-types/html/warning.tsx diff --git a/src/components/media-types/image/index.tsx b/src/components/media-types/image/index.tsx index 2ab1aa561..3e077b359 100644 --- a/src/components/media-types/image/index.tsx +++ b/src/components/media-types/image/index.tsx @@ -1,7 +1,8 @@ +import type { ReactEventHandler } from 'react' import { useState } from 'react' import { LazyLoadImage } from 'react-lazy-load-image-component' import styles from '@style' -import { MediaTypeProps } from '@types' +import type { MediaTypeProps } from '@types' export const ImageComponent = ({ artifactUri, @@ -28,12 +29,15 @@ export const ImageComponent = ({ console.error(error) } - const onLoad = ({ target: img }: { target: HTMLImageElement }) => { + const onLoad: ReactEventHandler = (e) => { // Do whatever you want here - const w = img.naturalWidth - const h = img.naturalHeight - if (w + h < 256) { - setSmol(true) + if (e?.target) { + const img = e.target as HTMLImageElement + const w = img.naturalWidth + const h = img.naturalHeight + if (w + h < 256) { + setSmol(true) + } } } // useEffect(() => { diff --git a/src/components/media-types/index.tsx b/src/components/media-types/index.tsx index 5d219d3dd..656c03f4f 100644 --- a/src/components/media-types/index.tsx +++ b/src/components/media-types/index.tsx @@ -12,15 +12,15 @@ import { PdfComponent } from './pdf' import { Container } from './container' import { MD } from './md' import { useMemo } from 'react' -import { NFT } from '@types' +import type { Tokens } from 'gql' interface RenderMediaTypeProps { /**The nft with the core fragments*/ - nft: NFT + nft: Partial /**When minting this is a base64 (or ObjectURL) representation of the image/video */ - previewUri?: string + previewUri?: string | ArrayBuffer | null /**When minting this is a base64 (or ObjectURL) representation of the cover image/video */ - previewDisplayUri?: string + previewDisplayUri?: string | ArrayBuffer | null /**false on feeds, true on objkt detail view. */ displayView?: boolean /**hacky way to pass the details hover for now... */ @@ -186,7 +186,7 @@ export const RenderMediaType = ({ ) default: - return + return } // eslint-disable-next-line react-hooks/exhaustive-deps }, [nft.mime_type]) diff --git a/src/components/media-types/md/index.jsx b/src/components/media-types/md/index.tsx similarity index 79% rename from src/components/media-types/md/index.jsx rename to src/components/media-types/md/index.tsx index 2aacee165..30ebf28c3 100644 --- a/src/components/media-types/md/index.jsx +++ b/src/components/media-types/md/index.tsx @@ -1,10 +1,10 @@ import React from 'react' import Markdown from 'markdown-to-jsx' -import { Container } from '@atoms/layout' import { Button } from '@atoms/button' import styles from '@style' import axios from 'axios' +import type { MediaTypeProps } from '@types' /** * @param {import("@types").MediaTypeProps} renderOptions - Th options for the media renderer @@ -14,9 +14,8 @@ export const MD = ({ displayUri, artifactUri, previewUri, - preview, - objktID, -}) => { + nft, +}: MediaTypeProps) => { const [content, setContent] = React.useState('') React.useEffect(() => { @@ -30,7 +29,7 @@ export const MD = ({ }) } - if (preview && previewUri) { + if (previewUri) { if (previewUri.startsWith('data:text/markdown;base64,')) { const base64_md = previewUri.replace('data:text/markdown;base64,', '') setContent(atob(base64_md)) @@ -38,12 +37,15 @@ export const MD = ({ console.error('previewUri is not a base64 encoded markdown', previewUri) } } - }, [artifactUri, previewUri, displayView, displayUri, preview]) + }, [artifactUri, previewUri, displayView, displayUri]) return displayView ? (
- {`cover + {`cover
@@ -51,9 +53,7 @@ export const MD = ({
) : (
- - {content} - + {content}
) } diff --git a/src/components/media-types/pdf/index.tsx b/src/components/media-types/pdf/index.tsx index 79f503341..2fee907a5 100644 --- a/src/components/media-types/pdf/index.tsx +++ b/src/components/media-types/pdf/index.tsx @@ -6,7 +6,7 @@ import 'react-pdf/dist/esm/Page/AnnotationLayer.css' import { ImageComponent } from '../image' import { Button } from '@atoms/button' -import { MediaTypeProps } from '@types' +import type { MediaTypeProps } from '@types' // pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js` // pdfjs.GlobalWorkerOptions.workerSrc = 'pdf.worker.min.js' const options = { @@ -103,7 +103,7 @@ export const PdfComponent = memo(function ({ loading={cover} onLoadSuccess={onDocumentLoadSuccess} onLoadError={onDocumentLoadError} - title={`PDF object ${nft.token_id}`} + key={`PDF object ${nft.token_id}`} options={options} > {renderedPageNumber && renderedPageNumber !== pageNumber && ( diff --git a/src/components/media-types/unknown/index.jsx b/src/components/media-types/unknown/index.tsx similarity index 77% rename from src/components/media-types/unknown/index.jsx rename to src/components/media-types/unknown/index.tsx index 076304d20..ecbfa23c0 100644 --- a/src/components/media-types/unknown/index.jsx +++ b/src/components/media-types/unknown/index.tsx @@ -1,6 +1,7 @@ import styles from '@style' +import type { NFT } from '@types' -export const UnknownComponent = ({ mimeType }) => { +export const UnknownComponent = ({ nft }: { nft: NFT }) => { /* const [queue, updateQueue] = useState() updateQueue(await axios.post(import.meta.env.VITE_GRAPHQL_STATUS).then(res => res.data)) */ diff --git a/src/components/media-types/vector/index.jsx b/src/components/media-types/vector/index.tsx similarity index 91% rename from src/components/media-types/vector/index.jsx rename to src/components/media-types/vector/index.tsx index dd2870cd6..cc23b15d9 100644 --- a/src/components/media-types/vector/index.jsx +++ b/src/components/media-types/vector/index.tsx @@ -2,16 +2,14 @@ import classnames from 'classnames' import styles from '@style' import './index.css' import { useUserStore } from '@context/userStore' +import type { MediaTypeProps } from '@types' -/** - * @param {import("@types").MediaTypeProps} renderOptions - Th options for the media renderer - */ export const VectorComponent = ({ artifactUri, previewUri, displayView, nft, -}) => { +}: MediaTypeProps) => { const address = useUserStore((st) => st.address) const classes = classnames({ [styles.container]: true, @@ -19,8 +17,8 @@ export const VectorComponent = ({ [styles.display]: displayView, }) - let _viewer_ = false - let _objkt_ = false + let _viewer_ = '' + let _objkt_ = '' if (address) { _viewer_ = address diff --git a/src/components/media-types/video/index.jsx b/src/components/media-types/video/index.tsx similarity index 81% rename from src/components/media-types/video/index.jsx rename to src/components/media-types/video/index.tsx index f318f0d6e..48d685120 100644 --- a/src/components/media-types/video/index.jsx +++ b/src/components/media-types/video/index.tsx @@ -3,6 +3,7 @@ import { iOS } from '@utils/os' import styles from '@style' import ImageComponent from '../image/index' import { VideoIcon } from '@icons/refs' +import type { MediaTypeProps } from '@types' /** * @param {import("@types").MediaTypeProps} renderOptions - Th options for the media renderer @@ -15,16 +16,18 @@ export const VideoComponent = ({ displayView, nft, forceVideo: force, -}) => { - const domElement = useRef() +}: MediaTypeProps) => { + const domElement = useRef() useEffect(() => { if (!displayView) { return } - const isVideoAvailable = (video) => iOS || video.readyState > 2 + const isVideoAvailable = (video?: HTMLVideoElement) => + video && (iOS || video.readyState > 2) - const isVideoPlaying = (video) => + const isVideoPlaying = (video?: HTMLVideoElement) => + video && video.currentTime > 0 && !video.paused && !video.ended && @@ -34,7 +37,7 @@ export const VideoComponent = ({ // play if (isVideoAvailable(domElement.current)) { try { - domElement.current.play() + if (domElement.current) domElement.current.play() } catch (err) { console.error(err) } @@ -43,10 +46,10 @@ export const VideoComponent = ({ // pause if ( isVideoAvailable(domElement.current) && - isVideoPlaying(domElement.current) + isVideoPlaying(domElement?.current) ) { try { - domElement.current.pause() + if (domElement.current) domElement.current.pause() } catch (err) { console.error(err) } diff --git a/src/components/owner-list/index.jsx b/src/components/owner-list/index.tsx similarity index 91% rename from src/components/owner-list/index.jsx rename to src/components/owner-list/index.tsx index 82a9b7244..0d2b0dfcc 100644 --- a/src/components/owner-list/index.jsx +++ b/src/components/owner-list/index.tsx @@ -3,8 +3,9 @@ import { Button } from '@atoms/button' import { BURN_ADDRESS, MARKETPLACE_CONTRACTS_TO_NAME } from '@constants' import { walletPreview } from '@utils/string' import styles from '@style' +import type { Holdings } from 'gql' -export const OwnerList = ({ owners }) => { +export const OwnerList = ({ owners }: { owners: Holdings[] }) => { const ownersWithoutBurn = owners.filter( (e) => e.holder_address !== BURN_ADDRESS ) diff --git a/src/components/preview/index.jsx b/src/components/preview/index.tsx similarity index 87% rename from src/components/preview/index.jsx rename to src/components/preview/index.tsx index 6a711e941..98a8533bf 100644 --- a/src/components/preview/index.jsx +++ b/src/components/preview/index.tsx @@ -7,7 +7,9 @@ import { motion } from 'framer-motion' import { useMintStore } from '@context/mintStore' import { Button } from '@atoms/button' import useSettings from '@hooks/use-settings' -function isHTML(mimeType) { +import type { WithChildren } from '@types' + +function isHTML(mimeType: string) { return ( mimeType === MIMETYPE.ZIP || mimeType === MIMETYPE.ZIP1 || @@ -15,26 +17,22 @@ function isHTML(mimeType) { ) } -const Attribute = ({ title, children }) => { - return ( - children && ( -
- {title}: - {children} -
- ) - ) +const Attribute = ({ title, children }: WithChildren<{ title?: string }>) => { + return children ? ( +
+ {title}: + {children} +
+ ) : null } -const Field = ({ title, value }) => { - return ( - value && ( -
- {title}: - {value} -
- ) - ) +const Field = ({ title, value }: { title: string; value?: string }) => { + return value ? ( +
+ {title}: + {value} +
+ ) : null } export const Preview = () => { // const { getValues } = useFormContext() diff --git a/src/components/responsive-masonry/index.jsx b/src/components/responsive-masonry/index.tsx similarity index 100% rename from src/components/responsive-masonry/index.jsx rename to src/components/responsive-masonry/index.tsx diff --git a/src/components/scroll-to-top/index.jsx b/src/components/scroll-to-top/index.tsx similarity index 100% rename from src/components/scroll-to-top/index.jsx rename to src/components/scroll-to-top/index.tsx diff --git a/src/components/tags/index.jsx b/src/components/tags/index.tsx similarity index 100% rename from src/components/tags/index.jsx rename to src/components/tags/index.tsx diff --git a/src/components/upload/index.jsx b/src/components/upload/index.jsx deleted file mode 100644 index ca2987a06..000000000 --- a/src/components/upload/index.jsx +++ /dev/null @@ -1,75 +0,0 @@ -import { forwardRef, useState } from 'react' -import useLanguage from '@hooks/use-language' -import styles from '@style' -import { getMimeType } from '@utils/sanitise' -// import { Buffer } from 'buffer' - -/** - * Upload component - * @param {Object} uploadProps - * @param {string} uploadProps.label - The displayed label - * @param {string} uploadProps.allowedTypes - A comma separated list of accepted types - * @param {boolean} uploadProps.allowedTypesLabel - A comma separated list of label of accepted types - * @param {import("@types").UploadCallback} uploadProps.onChange - on file change. - */ -export const Upload = forwardRef( - ( - { - label, - file: stateFile, - placeHolder, - allowedTypes, - allowedTypesLabel, - children, - onChange = () => null, - ...extra - }, - ref - ) => { - const { language } = useLanguage() - const [title, setTitle] = useState(placeHolder) - - const onFileChange = async (e) => { - const { files } = e.target - - const file = files[0] - if (!file) { - setTitle(placeHolder) - return - } - setTitle(file.name) - const mimeType = file.type === '' ? await getMimeType(file) : file.type - const buffer = Buffer.from(await file.arrayBuffer()) - - // set reader for preview - const reader = new FileReader() - reader.addEventListener('load', (e) => { - onChange({ title, mimeType, file, buffer, reader: e.target.result }) - }) - reader.readAsDataURL(file) - } - - const props = { - type: 'file', - name: extra.name || 'file', - } - - if (allowedTypes) { - props.accept = allowedTypes.join(',') - } - - return ( -
- {label} - -
- {language.mint.supports}: {allowedTypesLabel} -
- {children} -
- ) - } -) diff --git a/src/components/upload/index.tsx b/src/components/upload/index.tsx new file mode 100644 index 000000000..3f6e18ec0 --- /dev/null +++ b/src/components/upload/index.tsx @@ -0,0 +1,97 @@ +import type { ChangeEvent } from 'react' +import React, { memo, useState } from 'react' +import useLanguage from '@hooks/use-language' +import styles from '@style' +import { getMimeType } from '@utils/sanitise' +import type { FileForm, WithChildren } from '@types' +// import { Buffer } from 'buffer' + +interface UploadProps { + /**The displayed label */ + label: string + /**A list of accepted types */ + allowedTypes?: string[] + /**A comma separated list of label of accepted types*/ + allowedTypesLabel: string + + onChange: (file: FileForm) => void + + file: FileForm + placeHolder?: string + + /** Extra props */ + [x: string]: any +} + +/** + * Upload component + * @param {Object} uploadProps + * @param {string} uploadProps.label - + * @param {string} uploadProps.allowedTypes - + * @param {boolean} uploadProps.allowedTypesLabel - + * @param {import("@types").UploadCallback} uploadProps.onChange - on file change. + */ +export const Upload = ( + { + label, + file: stateFile, + placeHolder, + allowedTypes, + allowedTypesLabel, + children, + onChange, + ...extra + }: WithChildren, + ref: React.ForwardedRef +) => { + const { language } = useLanguage() + const [title, setTitle] = useState(placeHolder) + + const onFileChange = async (e: ChangeEvent) => { + const { files } = e.target + if (!files) { + setTitle(placeHolder) + return + } + + const file = files[0] + + setTitle(file.name) + const mimeType = file.type === '' ? await getMimeType(file) : file.type + const buffer = Buffer.from(await file.arrayBuffer()) + + // set reader for preview + const reader = new FileReader() + reader.addEventListener('load', (e) => { + if (e.target) + onChange({ title, mimeType, file, buffer, reader: e.target.result }) + }) + reader.readAsDataURL(file) + } + + const props: { type: string; name: string; accept?: string } = { + type: 'file', + name: extra.name || 'file', + accept: undefined, + } + + if (allowedTypes) { + props.accept = allowedTypes.join(',') + } + + return ( +
+ {label} + +
+ {language.mint.supports}: {allowedTypesLabel} +
+ {children} +
+ ) +} + +export default memo(React.forwardRef(Upload)) diff --git a/src/context/collabStore.ts b/src/context/collabStore.ts index 584f51f0a..b20bb96bf 100644 --- a/src/context/collabStore.ts +++ b/src/context/collabStore.ts @@ -19,8 +19,8 @@ interface CollabState { originatedContract?: string originationOpHash?: string originatedProxy?: string - findOriginatedContractFromOpHash: (hash: string) => void - sign: (objktID: string) => void + findOriginatedContractFromOpHash: (hash: string) => Promise + sign: (objktID: string) => Promise } export const useCollabStore = create()( diff --git a/src/context/mintStore.ts b/src/context/mintStore.ts index fc7d16704..41ba9fe8e 100644 --- a/src/context/mintStore.ts +++ b/src/context/mintStore.ts @@ -20,14 +20,10 @@ import { getImageDimensions, removeExtension, } from '@utils/mint' -import type { FileForm, Format } from '@types' +import type { FileForm } from '@types' import { prepareFilesFromZIP } from '@utils/html' import { prepareDirectory, prepareFile } from '@data/ipfs' - -interface SelectField { - label?: string - value: string -} +import '@atoms/select/types.d.ts' interface MintState { title?: string @@ -46,6 +42,7 @@ interface MintState { isValid: boolean reset: () => void + mint: (ignoreUriMap: Map) => void } const defaultValuesStored = { @@ -65,7 +62,7 @@ const defaultValues = { artifact: undefined, cover: undefined, thumbnail: undefined, - getValuesStored: () => {}, + // getValuesStored: () => ({}), } export const useMintStore = create()( @@ -87,7 +84,7 @@ export const useMintStore = create()( ) }, - mint: async (ignoreUriMap: Map) => { + mint: async (ignoreUriMap) => { const { proxyAddress, address, sync, mint } = useUserStore.getState() const { language, @@ -168,8 +165,8 @@ export const useMintStore = create()( const generated = await generateCoverAndThumbnail(cover || artifact) - let used_cover = cover || generated.cover - let used_thumb = generated.thumbnail + const used_cover = cover || generated.cover + const used_thumb = generated.thumbnail if (artifact.mimeType.indexOf('image') === 0) { const format: Format = { @@ -257,7 +254,7 @@ export const useMintStore = create()( rightUri: custom_license_uri, language: language?.value, accessibility, - contentRating, + contentRating: contentRating || undefined, formats, }) } else { @@ -275,7 +272,7 @@ export const useMintStore = create()( rightUri: custom_license_uri, language: language?.value, accessibility, - contentRating, + contentRating: contentRating || undefined, formats, }) } diff --git a/src/context/userStore.ts b/src/context/userStore.ts index b1d14f215..13e43a448 100644 --- a/src/context/userStore.ts +++ b/src/context/userStore.ts @@ -1,13 +1,11 @@ import { BeaconWallet } from '@taquito/beacon-wallet' -import { - OpKind, - MichelCodecPacker, - TezosToolkit, +import type { WalletOperationBatch, ContractMethod, Wallet, WalletParamsWithKind, } from '@taquito/taquito' +import { OpKind, MichelCodecPacker, TezosToolkit } from '@taquito/taquito' import { create } from 'zustand' import { persist, @@ -39,6 +37,7 @@ import { useModalStore } from './modalStore' // import teiaSwapLambda from '@components/collab/lambdas/teiaMarketplaceSwap.json' import teiaCancelSwapLambda from '@components/collab/lambdas/teiaMarketplaceCancelSwap.json' import type { Listing, NFT, SubjktInfo, Tx } from '@types' +import type { Listings, Tokens } from 'gql' // type OperationReturn = Promise type OperationReturn = Promise @@ -86,15 +85,9 @@ interface UserState { /** Burn Token */ burn: (objkt_id: string, amount: number) => OperationReturn /** Reswap Token */ - reswap: (nft: NFT, price: number, swap: Listing) => OperationReturn + reswap: (nft: Tokens, price: number, swap: Listings) => OperationReturn /** Collect token */ - collect: (listing: { - type: string - contract_address: string - swap_id: string - price: string - ask_id: any - }) => OperationReturn + collect: (listing: Listings) => OperationReturn /** Cancel Swap */ cancel: (contract: string, swap_id: number) => OperationReturn /** Cancel Swap from V1 */ @@ -495,7 +488,7 @@ export const useUserStore = create()( const creator = nft.artist_address const from = swap.seller_address - let proxyContract = undefined + const proxyContract = undefined if (proxyAddress) { show('Reswap', 'reswapping is not yet supported in collab mode') return @@ -534,7 +527,7 @@ export const useUserStore = create()( swap.amount_left, price, nft.royalties_total / 1e3, - creator, + creator as string, MAIN_MARKETPLACE_CONTRACT_SWAP_TYPE ), ] diff --git a/src/data/api.ts b/src/data/api.ts index 28dd001ff..df23358ad 100644 --- a/src/data/api.ts +++ b/src/data/api.ts @@ -1,50 +1,14 @@ -import { HEN_CONTRACT_FA2 } from '@constants' +// import { HEN_CONTRACT_FA2 } from '@constants' +// import axios from 'axios' import axios from 'axios' -export const BaseTokenFieldsFragment = ` -fragment baseTokenFields on tokens { - artifact_uri - display_uri - thumbnail_uri - metadata_uri +import { gql, GraphQLClient } from 'graphql-request' +import { getSdk, getSdkWithHooks } from '../gql' - artist_address - artist_profile { - name - is_split - } - description - editions - fa2_address - listings(where: {status: {_eq: "active"}}, order_by: {price: asc}) { - amount - amount_left - contract_address - price - status - type - } - mime_type - minted_at - metadata_status - name - price - - royalties - royalties_total - - royalty_receivers { - receiver_address - royalties - } - teia_meta { - accessibility - content_rating - is_signed - preview_uri - } - token_id -} -` +const client = new GraphQLClient(import.meta.env.VITE_TEIA_GRAPHQL_API) +const clientTZP = new GraphQLClient(import.meta.env.VITE_TZPROFILES_GRAPHQL_API) +export const api = getSdk(client) +export const apiTzp = getSdk(clientTZP) +export const apiSWR = getSdkWithHooks(client) export async function fetchGraphQL( operationsDoc: string, @@ -54,7 +18,9 @@ export async function fetchGraphQL( const result = await fetch(import.meta.env.VITE_TEIA_GRAPHQL_API, { method: 'POST', body: JSON.stringify({ - query: operationsDoc, + query: gql` + ${operationsDoc} + `, variables, operationName, }), @@ -63,190 +29,55 @@ export async function fetchGraphQL( return await result.json() } -export const getCollabsForAddress = `query GetCollabs($address: String!) { - split_contracts: teia_split_contracts(where: {_or: [{administrator_address: {_eq: $address}}, {shareholders: {shareholder_address: {_eq: $address}}}]}) { - contract_address - contract_profile { +export const getNameForAddress = gql` + query GetNameForAddress($address: String!) { + teia_users(where: { user_address: { _eq: $address } }) { name - metadata { - data - } } - administrator_address - shareholders { - shareholder_address - shareholder_profile { - name - } - shares - holder_type - } - } -}` - -export const getNameForAddress = `query GetNameForAddress($address: String!) { - teia_users(where: {user_address: {_eq: $address}}) { - name } -}` - -// TODO: add all supported event types -const query_objkt = ` -${BaseTokenFieldsFragment} -query objkt($id: String!) { - tokens_by_pk(fa2_address: "${HEN_CONTRACT_FA2}", token_id: $id) { - ...baseTokenFields - artist_profile { - name - is_split - split_contract { - administrator_address - shareholders { - shareholder_address - shareholder_profile { - user_address - name - } - holder_type - shares - } - } - } - signatures { - shareholder_address - } - rights - right_uri - listings(where: {status: {_eq: "active"}}, order_by: {price: asc}) { - type - contract_address - amount - amount_left - swap_id - ask_id - offer_id - price - start_price - end_price - seller_address - seller_profile { - name - } - status - } - holdings(where: {amount: {_gt: "0"}}) { - holder_address - amount - holder_profile { - name - } - } - tags { - tag - } - events(where: { _or: [{ implements: {_eq: "SALE"} }, { type: {_in: ["HEN_MINT", "TEIA_SWAP", "HEN_SWAP", "HEN_SWAP_V2", "VERSUM_SWAP", "FA2_TRANSFER", "OBJKT_ASK", "OBJKT_ASK_V2"]} }]}, order_by: [{level: desc}, {opid: desc}]) { - timestamp - implements - ophash - id - type - price - amount - editions - seller_address - seller_profile { - name - } - buyer_address - buyer_profile { - name - } - from_address - from_profile { - name - } - to_address - to_profile { - name - } - } - } -} ` -export async function getUser(addressOrName: string, type = 'user_address') { - const { data } = await fetchGraphQL( - ` - query addressQuery($addressOrName: String!) { - teia_users(where: { ${type}: {_eq: $addressOrName}}) { - user_address - name - metadata { - data - } - } - } - `, - 'addressQuery', - { - addressOrName, - } - ) +// TODO: add all supported event types +export async function getUser(addressOrSubjkt: string, type = 'user_address') { + // const { data } = await fetchGraphQL( + // type === 'name' ? userByName : userByAddress, + // 'addressQuery', + // { + // addressOrSubjkt, + // } + // ) + const query = type === 'name' ? api.userByName : api.userByAddress + const data = await query({ addressOrSubjkt }) + console.log({ data }) return data?.teia_users?.length ? data.teia_users[0] : null + + // return data?.teia_users?.length ? data.teia_users[0] : null } export async function fetchCollabCreations( - addressOrSubjkt: string, + addressOrSubjkt?: string, type = 'address' ) { - const { data } = await fetchGraphQL( - ` - ${BaseTokenFieldsFragment} - query GetCollabCreations($addressOrSubjkt: String!) { - tokens(where: {${ - type === 'address' - ? `artist_address: {_eq: $addressOrSubjkt}` - : `artist_profile: {name: {_eq: $addressOrSubjkt }}` - }, editions: {_gt: "0"}}, order_by: {token_id: desc}) { - ...baseTokenFields - tags { - tag - } - } - split_contracts: teia_split_contracts(where: {${ - type === 'address' - ? `contract_address: {_eq: $addressOrSubjkt}` - : `contract_profile: {name: {_eq: $addressOrSubjkt}}` - }}) { - administrator_address - shareholders { - shareholder_address - shareholder_profile { - name - } - holder_type - } - contract_address - contract_profile { - name - metadata { - data - } - } - } - }`, - 'GetCollabCreations', - { addressOrSubjkt } - ) - + if (!addressOrSubjkt) return + // const { data } = await fetchGraphQL( + // type === 'address' ? collabCreationsFromAddress : collabCreationsFromName, + // 'GetCollabCreations', + // { addressOrSubjkt } + // ) + const query = + type === 'address' + ? api.collabCreationsFromAddress + : api.collabCreationsFromName + const data = await query({ addressOrSubjkt }) return data } export async function fetchObjktDetails(id: string) { - const { data } = await fetchGraphQL(query_objkt, 'objkt', { - id, - }) + // const { data } = await fetchGraphQL(query_objkt, 'objkt', { + // id, + // }) + const data = await api.objkt({ id }) return data.tokens_by_pk } @@ -261,22 +92,6 @@ const GetUserClaims = async (walletAddr: string) => { }) } -interface TzpMetadata { - alias?: string - tzprofile?: string - twitter?: string - discord?: string - github?: string - dns?: string -} -interface TzktMetadata { - twitter?: string - alias?: string -} - -interface TzktData { - data?: TzktMetadata -} /** * Get User Metadata */ @@ -286,7 +101,7 @@ export const GetUserMetadata = async (walletAddr: string) => { const tzpData: TzpMetadata = {} try { const claims = await GetUserClaims(walletAddr) - if (claims.data.data.tzprofiles_by_pk !== null) + if (claims.data.data.tzprofiles_by_pk !== null) { for (const claim of claims.data.data.tzprofiles_by_pk.valid_claims) { const claimJSON = JSON.parse(claim[1]) if (claimJSON.type.includes('TwitterVerification')) { @@ -294,8 +109,12 @@ export const GetUserMetadata = async (walletAddr: string) => { tzpData.twitter = claimJSON.evidence.handle } } else if (claimJSON.type.includes('BasicProfile')) { - if (claimJSON.credentialSubject.alias !== '' && !tzktData.data?.alias) + if ( + claimJSON.credentialSubject.alias !== '' && + !tzktData.data?.alias + ) { tzpData.alias = claimJSON.credentialSubject.alias + } tzpData.tzprofile = walletAddr } else if (claimJSON.type.includes('DiscordVerification')) { if (!tzktData.data) { @@ -312,6 +131,7 @@ export const GetUserMetadata = async (walletAddr: string) => { tzpData.dns = claimJSON.credentialSubject.sameAs.slice(4) } } + } } catch (e: any) { console.error(e, e.stack) } diff --git a/src/data/ipfs.ts b/src/data/ipfs.ts index f1e9ce73f..eb294d491 100644 --- a/src/data/ipfs.ts +++ b/src/data/ipfs.ts @@ -1,17 +1,13 @@ -import { MIMETYPE, IPFS_DEFAULT_THUMBNAIL_URI } from '@constants' +import { IPFS_DEFAULT_THUMBNAIL_URI, MIMETYPE } from '@constants' import mime from 'mime-types' import axios from 'axios' import { Buffer } from 'buffer' -import { fetchGraphQL } from './api' +import { api } from './api' import { useUserStore } from '@context/userStore' import { useModalStore } from '@context/modalStore' -import { FileForm, FileMint, MintFormat } from '@types' -import { gql } from 'graphql-request' - -/** - * @typedef { {path: string?, blob: Blob} } FileHolder - */ +import type { FileMint } from '@types' +import { pickBy } from 'lodash' /** * Upload a single file through the IPFS proxy. @@ -96,67 +92,31 @@ export async function uploadMultipleFilesToIPFSProxy(files: FileMint[]) { } const isDoubleMint = async (uri: string) => { - const uriQuery = gql` - query uriQuery($address: String!, $ids: [String!] = "") { - tokens( - order_by: { minted_at: desc } - where: { - editions: { _gt: "0" } - metadata_status: { _eq: "processed" } - artifact_uri: { _in: $ids } - artist_address: { _eq: $address } - } - ) { - token_id - } - } - ` const { proxyAddress, address } = useUserStore.getState() const { show } = useModalStore.getState() - const { errors, data } = await fetchGraphQL(uriQuery, 'uriQuery', { - address: proxyAddress || address, - ids: [uri], - }) - console.debug(data) + const res = await api.uriMintedByAddress({ + address: proxyAddress || address || '', + uris: [uri], + }) + console.debug(res) - if (errors) { - show(`GraphQL Error: ${JSON.stringify(errors)}`) - return true - } else if (data) { - if (!data.tokens) return false - const areAllTokensBurned = data.tokens.every( - ({ editions }: { editions: number }) => editions === 0 - ) + if (!res.tokens) return false + const areAllTokensBurned = res.tokens.every((token) => token.editions === 0) - if (areAllTokensBurned) { - return false - } + if (areAllTokensBurned) { + return false + } - show( - `Duplicate mint detected: [#${data.tokens[0].token_id}](/objkt/${data.tokens[0].token_id}) is already minted` - ) + show( + `Duplicate mint detected: [#${res.tokens[0].token_id}](/objkt/${res.tokens[0].token_id}) is already minted` + ) - return true - } - return false + return true + // } + // return false } -interface PrepareProps { - name: string - description: string - tags: string - address: string - file: FileForm - cover: FileForm - thumbnail: FileForm - rights: string - rightUri?: string - language?: string - accessibility: string - contentRating: string - formats: any -} export const prepareFile = async ({ name, description, @@ -283,22 +243,7 @@ export const prepareDirectory = async ({ accessibility, contentRating, formats, -}: { - name?: string - description?: string - tags?: string - address: string - files: FileForm[] - cover: FileForm - thumbnail: FileForm - generateDisplayUri: string - rights: string - rightUri: string - language: string - accessibility: string - contentRating: string - formats: MintFormat[] -}) => { +}: PrepareDirectoryOptions) => { const step = useModalStore.getState().step const hashes = await uploadFilesToDirectory(files) @@ -448,21 +393,7 @@ async function buildMetadataFile({ accessibility, contentRating, formats, -}: { - name: string - description: string - tags: string - uri: string - address: string - displayUri: string - thumbnailUri: string - rights: string - rightUri?: string - language: string - accessibility: string - contentRating: string - formats: MintFormat[] -}) { +}: BuildMetadataOptions) { const metadata: TeiaMetadata = { name, description, @@ -476,7 +407,7 @@ async function buildMetadataFile({ decimals: 0, isBooleanAmount: false, shouldPreferSymbol: false, - rights, + rights: rights || 'none', date: new Date().toISOString(), mintingTool: 'https://teia.art/mint', } @@ -485,28 +416,11 @@ async function buildMetadataFile({ if (rights === 'custom') metadata.rightUri = rightUri if (language != null) metadata.language = language - return JSON.stringify(metadata) -} + // const cleaned = Object.keys(metadata).forEach( + // (key) => get(metadata,key) === undefined && delete metadata[key] + // ) + + const cleaned_metas = pickBy(metadata, (v) => v !== undefined) -interface TeiaMetadata { - name: string - description: string - tags: string[] - symbol: string - artifactUri: string - displayUri: string - thumbnailUri: string - creators: string[] - formats: MintFormat[] - decimals: number - isBooleanAmount: boolean - shouldPreferSymbol: boolean - rights: string - date: string - mintingTool: string - //optional - accessibility?: string - contentRating?: string - rightUri?: string - language?: string + return JSON.stringify(cleaned_metas) } diff --git a/src/data/queries.ts b/src/data/queries.ts new file mode 100644 index 000000000..b224c429c --- /dev/null +++ b/src/data/queries.ts @@ -0,0 +1,295 @@ +import { gql } from 'graphql-request' + +//- fragments +export const BaseTokenFieldsFragment = gql` + fragment baseTokenFields on tokens { + artifact_uri + display_uri + thumbnail_uri + metadata_uri + + artist_address + artist_profile { + name + is_split + } + description + editions + fa2_address + listings(where: { status: { _eq: "active" } }, order_by: { price: asc }) { + amount + amount_left + contract_address + price + status + type + } + mime_type + minted_at + metadata_status + name + price + + royalties + royalties_total + + royalty_receivers { + receiver_address + royalties + } + teia_meta { + accessibility + content_rating + is_signed + preview_uri + } + token_id + } +` + +//- Tokens +export const objkt = gql` + ${BaseTokenFieldsFragment} + query objkt($id: String!) { + tokens_by_pk( + fa2_address: "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton" + token_id: $id + ) { + ...baseTokenFields + artist_profile { + name + is_split + split_contract { + administrator_address + shareholders { + shareholder_address + shareholder_profile { + user_address + name + } + holder_type + shares + } + } + } + signatures { + shareholder_address + } + rights + right_uri + listings(where: { status: { _eq: "active" } }, order_by: { price: asc }) { + type + contract_address + amount + amount_left + swap_id + ask_id + offer_id + price + start_price + end_price + seller_address + seller_profile { + name + } + status + } + holdings(where: { amount: { _gt: "0" } }) { + holder_address + amount + holder_profile { + name + } + } + tags { + tag + } + events( + where: { + _or: [ + { implements: { _eq: "SALE" } } + { + type: { + _in: [ + "HEN_MINT" + "TEIA_SWAP" + "HEN_SWAP" + "HEN_SWAP_V2" + "VERSUM_SWAP" + "FA2_TRANSFER" + ] + } + } + ] + } + order_by: [{ level: desc }, { opid: desc }] + ) { + timestamp + implements + ophash + id + type + price + amount + editions + seller_address + seller_profile { + name + } + buyer_address + buyer_profile { + name + } + from_address + from_profile { + name + } + to_address + to_profile { + name + } + } + } + } +` + +//- Double Mint +export const uriMintedByAddress = gql` + query uriMintedByAddress($address: String!, $uris: [String!] = "") { + tokens( + order_by: { minted_at: desc } + where: { + metadata_status: { _eq: "processed" } + artifact_uri: { _in: $uris } + artist_address: { _eq: $address } + } + ) { + token_id + editions + } + } +` + +//- Collabs +export const getCollabsForAddress = gql` + query getCollabsForAddress($address: String!) { + split_contracts: teia_split_contracts( + where: { + _or: [ + { administrator_address: { _eq: $address } } + { shareholders: { shareholder_address: { _eq: $address } } } + ] + } + ) { + contract_address + contract_profile { + name + metadata { + data + } + } + administrator_address + shareholders { + shareholder_address + shareholder_profile { + name + } + shares + holder_type + } + } + } +` +// collab Creations +export const collabCreationsFragment = gql` + fragment collabCreationsTokens on tokens { + ${BaseTokenFieldsFragment} + ...baseTokenFields + tags{ + tag + } + } + fragment collabCreationsSplit on teia_split_contracts { + administrator_address + shareholders { + shareholder_address + shareholder_profile { + name + } + holder_type + } + contract_address + contract_profile { + name + metadata { + data + } + } + } +` +export const collabCreationsFromAddress = gql` + ${collabCreationsFragment} + query collabCreationsFromAddress($addressOrSubjkt: String!) { + tokens( + where: { + artist_address: { _eq: $addressOrSubjkt } + editions: { _gt: "0" } + } + order_by: { token_id: desc } + ) { + ...collabCreationsTokens + } + split_contracts: teia_split_contracts( + where: { contract_address: { _eq: $addressOrSubjkt } } + ) { + ...collabCreationsSplit + } + } +` +export const collabCreationsFromName = gql` + ${collabCreationsFragment} + query collabCreationsFromName($addressOrSubjkt: String!) { + tokens( + where: { + artist_profile: { name: { _eq: $addressOrSubjkt } } + editions: { _gt: "0" } + } + order_by: { token_id: desc } + ) { + ...collabCreationsTokens + } + split_contracts: teia_split_contracts( + where: { contract_profile: { name: { _eq: $addressOrSubjkt } } } + ) { + ...collabCreationsSplit + } + } +` + +// user +export const userFragment = gql` + fragment userFragment on teia_users { + user_address + name + metadata { + data + } + } +` + +export const userByName = gql` + query userByName($addressOrSubjkt: String!) { + teia_users(where: { name: { _eq: $addressOrSubjkt } }) { + ${userFragment} + ...userFragment + } + } +` +export const userByAddress = gql` + query userByAddress($addressOrSubjkt: String!) { + teia_users(where: { user_address: { _eq: $addressOrSubjkt } }) { + ${userFragment} + ...userFragment + } + } +` diff --git a/src/data/types.d.ts b/src/data/types.d.ts new file mode 100644 index 000000000..3ccb15af1 --- /dev/null +++ b/src/data/types.d.ts @@ -0,0 +1,107 @@ +// `DATA` TYPES + +// API +interface TzpMetadata { + alias?: string + tzprofile?: string + twitter?: string + discord?: string + github?: string + dns?: string +} + +interface TzktMetadata { + twitter?: string + alias?: string +} + +interface TzktData { + data?: TzktMetadata +} + +// IPFS +interface PrepareProps { + name?: string + description?: string + tags?: string + address: string + file: FileForm + cover: FileForm + thumbnail: FileForm + rights?: string + rightUri?: string + language?: string + accessibility?: AccessibilityOpts | null + contentRating?: string + formats: FormatOpts[] +} + +interface AccessibilityOpts { + hazards: string[] +} + +interface Format { + mimeType: string + fileSize: number + fileName: string + dimensions?: { + value: string + unit: 'px' | 'in' | 'cm' | 'mm' | 'pt' | 'pc' + } + /* An ipfs uri to the file */ + uri?: string +} + +interface PrepareDirectoryOptions { + name?: string + description?: string + tags?: string + address: string + files: FileMint[] + cover: FileForm + thumbnail: FileForm + formats: MintFormat[] + generateDisplayUri: boolean + rights?: string + rightUri?: string + language?: string + accessibility?: AccessibilityOpts | null + contentRating?: string +} +interface BuildMetadataOptions { + name?: string + description?: string + tags?: string + uri: string + address: string + displayUri: string + thumbnailUri: string + formats: MintFormat[] + rights?: string + rightUri?: string + language?: string + accessibility?: AccessibilityOpts | null + contentRating?: string +} +interface TeiaMetadata { + name?: string + description?: string + tags: string[] + symbol: string + artifactUri: string + displayUri: string + thumbnailUri: string + creators: string[] + formats: MintFormat[] + decimals: number + isBooleanAmount: boolean + shouldPreferSymbol: boolean + rights?: string + date: string + mintingTool: string + //optional + accessibility?: AccessibilityOpts + contentRating?: string + rightUri?: string + language?: string +} diff --git a/src/declaration.d.ts b/src/declaration.d.ts index 9f0c2e259..054bef018 100644 --- a/src/declaration.d.ts +++ b/src/declaration.d.ts @@ -1,2 +1,31 @@ +/// + +// import React from 'react' + +// declare module 'react' { +// function forwardRef( +// render: (props: P, ref: React.Ref) => React.ReactElement | null +// ): (props: P & React.RefAttributes) => React.ReactElement | null +// } + declare module '*.scss' declare module '@style' +// export declare global { +// namespace JSX { +// interface IntrinsicElements { +// 'model-viewer': React.DetailedHTMLProps< +// Partial< +// React.AllHTMLAttributes< +// Partial +// > +// >, +// Partial +// > +// } +// } +// } +// declare module 'JSX.IntisicElements' { +// interface IntrinsicElements { +// 'model-viewer': ModelViewerElement +// } +// } diff --git a/src/env.d.ts b/src/env.d.ts index e3fa1e59b..8ddda8c99 100644 --- a/src/env.d.ts +++ b/src/env.d.ts @@ -1,4 +1,17 @@ /// +/// + +declare module '*.md' { + // "unknown" would be more detailed depends on how you structure frontmatter + const attributes: Record + + // When "Mode.React" is requested. VFC could take a generic like React.VFC<{ MyComponent: TypeOfMyComponent }> + import React from 'react' + const ReactComponent: React.VFC + + // Modify below per your usage + export { attributes, ReactComponent } +} interface ImportMetaEnv { /** base url for the report lists */ diff --git a/src/gql/README.md b/src/gql/README.md new file mode 100644 index 000000000..6610032c7 --- /dev/null +++ b/src/gql/README.md @@ -0,0 +1,4 @@ +# GQL + +This `index.ts` file is auto generated and should not be manually edited. +To update it run `npm run gen-api`. This will generate types and SWR utilities to get typed responses. diff --git a/src/gql/index.ts b/src/gql/index.ts new file mode 100644 index 000000000..4dda2f7ce --- /dev/null +++ b/src/gql/index.ts @@ -0,0 +1,7453 @@ +import type { GraphQLClient } from 'graphql-request' +import type * as Dom from 'graphql-request/dist/types.dom' +import gql from 'graphql-tag' +import type { ClientError } from 'graphql-request/dist/types' +import type { + SWRConfiguration as SWRConfigInterface, + Key as SWRKeyInterface, +} from 'swr' +import useSWR from 'swr' +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 +} +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string + String: string + Boolean: boolean + Int: number + Float: number + bigint: any + jsonb: any + timestamptz: any +} + +/** Boolean expression to compare columns of type "Boolean". All fields are combined with logical 'AND'. */ +export type Boolean_Comparison_Exp = { + _eq?: InputMaybe + _gt?: InputMaybe + _gte?: InputMaybe + _in?: InputMaybe> + _is_null?: InputMaybe + _lt?: InputMaybe + _lte?: InputMaybe + _neq?: InputMaybe + _nin?: InputMaybe> +} + +/** Boolean expression to compare columns of type "Int". All fields are combined with logical 'AND'. */ +export type Int_Comparison_Exp = { + _eq?: InputMaybe + _gt?: InputMaybe + _gte?: InputMaybe + _in?: InputMaybe> + _is_null?: InputMaybe + _lt?: InputMaybe + _lte?: InputMaybe + _neq?: InputMaybe + _nin?: InputMaybe> +} + +/** Boolean expression to compare columns of type "String". All fields are combined with logical 'AND'. */ +export type String_Comparison_Exp = { + _eq?: InputMaybe + _gt?: InputMaybe + _gte?: InputMaybe + /** does the column match the given case-insensitive pattern */ + _ilike?: InputMaybe + _in?: InputMaybe> + /** does the column match the given POSIX regular expression, case insensitive */ + _iregex?: InputMaybe + _is_null?: InputMaybe + /** does the column match the given pattern */ + _like?: InputMaybe + _lt?: InputMaybe + _lte?: InputMaybe + _neq?: InputMaybe + /** does the column NOT match the given case-insensitive pattern */ + _nilike?: InputMaybe + _nin?: InputMaybe> + /** does the column NOT match the given POSIX regular expression, case insensitive */ + _niregex?: InputMaybe + /** does the column NOT match the given pattern */ + _nlike?: InputMaybe + /** does the column NOT match the given POSIX regular expression, case sensitive */ + _nregex?: InputMaybe + /** does the column NOT match the given SQL regular expression */ + _nsimilar?: InputMaybe + /** does the column match the given POSIX regular expression, case sensitive */ + _regex?: InputMaybe + /** does the column match the given SQL regular expression */ + _similar?: InputMaybe +} + +/** Boolean expression to compare columns of type "bigint". All fields are combined with logical 'AND'. */ +export type Bigint_Comparison_Exp = { + _eq?: InputMaybe + _gt?: InputMaybe + _gte?: InputMaybe + _in?: InputMaybe> + _is_null?: InputMaybe + _lt?: InputMaybe + _lte?: InputMaybe + _neq?: InputMaybe + _nin?: InputMaybe> +} + +/** ordering argument of a cursor */ +export enum Cursor_Ordering { + /** ascending ordering of the cursor */ + Asc = 'ASC', + /** descending ordering of the cursor */ + Desc = 'DESC', +} + +/** columns and relationships of "dipdup_contract" */ +export type Dipdup_Contract = { + __typename?: 'dipdup_contract' + address: Scalars['String'] + created_at: Scalars['timestamptz'] + name: Scalars['String'] + typename?: Maybe + updated_at: Scalars['timestamptz'] +} + +/** aggregated selection of "dipdup_contract" */ +export type Dipdup_Contract_Aggregate = { + __typename?: 'dipdup_contract_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "dipdup_contract" */ +export type Dipdup_Contract_Aggregate_Fields = { + __typename?: 'dipdup_contract_aggregate_fields' + count: Scalars['Int'] + max?: Maybe + min?: Maybe +} + +/** aggregate fields of "dipdup_contract" */ +export type Dipdup_Contract_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** Boolean expression to filter rows from the table "dipdup_contract". All fields are combined with a logical 'AND'. */ +export type Dipdup_Contract_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + address?: InputMaybe + created_at?: InputMaybe + name?: InputMaybe + typename?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate max on columns */ +export type Dipdup_Contract_Max_Fields = { + __typename?: 'dipdup_contract_max_fields' + address?: Maybe + created_at?: Maybe + name?: Maybe + typename?: Maybe + updated_at?: Maybe +} + +/** columns and relationships of "dipdup_contract_metadata" */ +export type Dipdup_Contract_Metadata = { + __typename?: 'dipdup_contract_metadata' + contract: Scalars['String'] + created_at: Scalars['timestamptz'] + id: Scalars['Int'] + metadata: Scalars['jsonb'] + network: Scalars['String'] + update_id: Scalars['Int'] + updated_at: Scalars['timestamptz'] +} + +/** columns and relationships of "dipdup_contract_metadata" */ +export type Dipdup_Contract_MetadataMetadataArgs = { + path?: InputMaybe +} + +/** aggregated selection of "dipdup_contract_metadata" */ +export type Dipdup_Contract_Metadata_Aggregate = { + __typename?: 'dipdup_contract_metadata_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "dipdup_contract_metadata" */ +export type Dipdup_Contract_Metadata_Aggregate_Fields = { + __typename?: 'dipdup_contract_metadata_aggregate_fields' + avg?: Maybe + count: Scalars['Int'] + max?: Maybe + min?: Maybe + stddev?: Maybe + stddev_pop?: Maybe + stddev_samp?: Maybe + sum?: Maybe + var_pop?: Maybe + var_samp?: Maybe + variance?: Maybe +} + +/** aggregate fields of "dipdup_contract_metadata" */ +export type Dipdup_Contract_Metadata_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** aggregate avg on columns */ +export type Dipdup_Contract_Metadata_Avg_Fields = { + __typename?: 'dipdup_contract_metadata_avg_fields' + id?: Maybe + update_id?: Maybe +} + +/** Boolean expression to filter rows from the table "dipdup_contract_metadata". All fields are combined with a logical 'AND'. */ +export type Dipdup_Contract_Metadata_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + contract?: InputMaybe + created_at?: InputMaybe + id?: InputMaybe + metadata?: InputMaybe + network?: InputMaybe + update_id?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate max on columns */ +export type Dipdup_Contract_Metadata_Max_Fields = { + __typename?: 'dipdup_contract_metadata_max_fields' + contract?: Maybe + created_at?: Maybe + id?: Maybe + network?: Maybe + update_id?: Maybe + updated_at?: Maybe +} + +/** aggregate min on columns */ +export type Dipdup_Contract_Metadata_Min_Fields = { + __typename?: 'dipdup_contract_metadata_min_fields' + contract?: Maybe + created_at?: Maybe + id?: Maybe + network?: Maybe + update_id?: Maybe + updated_at?: Maybe +} + +/** Ordering options when selecting data from "dipdup_contract_metadata". */ +export type Dipdup_Contract_Metadata_Order_By = { + contract?: InputMaybe + created_at?: InputMaybe + id?: InputMaybe + metadata?: InputMaybe + network?: InputMaybe + update_id?: InputMaybe + updated_at?: InputMaybe +} + +/** select columns of table "dipdup_contract_metadata" */ +export enum Dipdup_Contract_Metadata_Select_Column { + /** column name */ + Contract = 'contract', + /** column name */ + CreatedAt = 'created_at', + /** column name */ + Id = 'id', + /** column name */ + Metadata = 'metadata', + /** column name */ + Network = 'network', + /** column name */ + UpdateId = 'update_id', + /** column name */ + UpdatedAt = 'updated_at', +} + +/** aggregate stddev on columns */ +export type Dipdup_Contract_Metadata_Stddev_Fields = { + __typename?: 'dipdup_contract_metadata_stddev_fields' + id?: Maybe + update_id?: Maybe +} + +/** aggregate stddev_pop on columns */ +export type Dipdup_Contract_Metadata_Stddev_Pop_Fields = { + __typename?: 'dipdup_contract_metadata_stddev_pop_fields' + id?: Maybe + update_id?: Maybe +} + +/** aggregate stddev_samp on columns */ +export type Dipdup_Contract_Metadata_Stddev_Samp_Fields = { + __typename?: 'dipdup_contract_metadata_stddev_samp_fields' + id?: Maybe + update_id?: Maybe +} + +/** Streaming cursor of the table "dipdup_contract_metadata" */ +export type Dipdup_Contract_Metadata_Stream_Cursor_Input = { + /** Stream column input with initial value */ + initial_value: Dipdup_Contract_Metadata_Stream_Cursor_Value_Input + /** cursor ordering */ + ordering?: InputMaybe +} + +/** Initial value of the column from where the streaming should start */ +export type Dipdup_Contract_Metadata_Stream_Cursor_Value_Input = { + contract?: InputMaybe + created_at?: InputMaybe + id?: InputMaybe + metadata?: InputMaybe + network?: InputMaybe + update_id?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate sum on columns */ +export type Dipdup_Contract_Metadata_Sum_Fields = { + __typename?: 'dipdup_contract_metadata_sum_fields' + id?: Maybe + update_id?: Maybe +} + +/** aggregate var_pop on columns */ +export type Dipdup_Contract_Metadata_Var_Pop_Fields = { + __typename?: 'dipdup_contract_metadata_var_pop_fields' + id?: Maybe + update_id?: Maybe +} + +/** aggregate var_samp on columns */ +export type Dipdup_Contract_Metadata_Var_Samp_Fields = { + __typename?: 'dipdup_contract_metadata_var_samp_fields' + id?: Maybe + update_id?: Maybe +} + +/** aggregate variance on columns */ +export type Dipdup_Contract_Metadata_Variance_Fields = { + __typename?: 'dipdup_contract_metadata_variance_fields' + id?: Maybe + update_id?: Maybe +} + +/** aggregate min on columns */ +export type Dipdup_Contract_Min_Fields = { + __typename?: 'dipdup_contract_min_fields' + address?: Maybe + created_at?: Maybe + name?: Maybe + typename?: Maybe + updated_at?: Maybe +} + +/** Ordering options when selecting data from "dipdup_contract". */ +export type Dipdup_Contract_Order_By = { + address?: InputMaybe + created_at?: InputMaybe + name?: InputMaybe + typename?: InputMaybe + updated_at?: InputMaybe +} + +/** select columns of table "dipdup_contract" */ +export enum Dipdup_Contract_Select_Column { + /** column name */ + Address = 'address', + /** column name */ + CreatedAt = 'created_at', + /** column name */ + Name = 'name', + /** column name */ + Typename = 'typename', + /** column name */ + UpdatedAt = 'updated_at', +} + +/** Streaming cursor of the table "dipdup_contract" */ +export type Dipdup_Contract_Stream_Cursor_Input = { + /** Stream column input with initial value */ + initial_value: Dipdup_Contract_Stream_Cursor_Value_Input + /** cursor ordering */ + ordering?: InputMaybe +} + +/** Initial value of the column from where the streaming should start */ +export type Dipdup_Contract_Stream_Cursor_Value_Input = { + address?: InputMaybe + created_at?: InputMaybe + name?: InputMaybe + typename?: InputMaybe + updated_at?: InputMaybe +} + +/** columns and relationships of "dipdup_head" */ +export type Dipdup_Head = { + __typename?: 'dipdup_head' + created_at: Scalars['timestamptz'] + hash: Scalars['String'] + level: Scalars['Int'] + name: Scalars['String'] + timestamp: Scalars['timestamptz'] + updated_at: Scalars['timestamptz'] +} + +/** aggregated selection of "dipdup_head" */ +export type Dipdup_Head_Aggregate = { + __typename?: 'dipdup_head_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "dipdup_head" */ +export type Dipdup_Head_Aggregate_Fields = { + __typename?: 'dipdup_head_aggregate_fields' + avg?: Maybe + count: Scalars['Int'] + max?: Maybe + min?: Maybe + stddev?: Maybe + stddev_pop?: Maybe + stddev_samp?: Maybe + sum?: Maybe + var_pop?: Maybe + var_samp?: Maybe + variance?: Maybe +} + +/** aggregate fields of "dipdup_head" */ +export type Dipdup_Head_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** aggregate avg on columns */ +export type Dipdup_Head_Avg_Fields = { + __typename?: 'dipdup_head_avg_fields' + level?: Maybe +} + +/** Boolean expression to filter rows from the table "dipdup_head". All fields are combined with a logical 'AND'. */ +export type Dipdup_Head_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + created_at?: InputMaybe + hash?: InputMaybe + level?: InputMaybe + name?: InputMaybe + timestamp?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate max on columns */ +export type Dipdup_Head_Max_Fields = { + __typename?: 'dipdup_head_max_fields' + created_at?: Maybe + hash?: Maybe + level?: Maybe + name?: Maybe + timestamp?: Maybe + updated_at?: Maybe +} + +/** aggregate min on columns */ +export type Dipdup_Head_Min_Fields = { + __typename?: 'dipdup_head_min_fields' + created_at?: Maybe + hash?: Maybe + level?: Maybe + name?: Maybe + timestamp?: Maybe + updated_at?: Maybe +} + +/** Ordering options when selecting data from "dipdup_head". */ +export type Dipdup_Head_Order_By = { + created_at?: InputMaybe + hash?: InputMaybe + level?: InputMaybe + name?: InputMaybe + timestamp?: InputMaybe + updated_at?: InputMaybe +} + +/** select columns of table "dipdup_head" */ +export enum Dipdup_Head_Select_Column { + /** column name */ + CreatedAt = 'created_at', + /** column name */ + Hash = 'hash', + /** column name */ + Level = 'level', + /** column name */ + Name = 'name', + /** column name */ + Timestamp = 'timestamp', + /** column name */ + UpdatedAt = 'updated_at', +} + +/** columns and relationships of "dipdup_head_status" */ +export type Dipdup_Head_Status = { + __typename?: 'dipdup_head_status' + name?: Maybe + status?: Maybe +} + +/** aggregated selection of "dipdup_head_status" */ +export type Dipdup_Head_Status_Aggregate = { + __typename?: 'dipdup_head_status_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "dipdup_head_status" */ +export type Dipdup_Head_Status_Aggregate_Fields = { + __typename?: 'dipdup_head_status_aggregate_fields' + count: Scalars['Int'] + max?: Maybe + min?: Maybe +} + +/** aggregate fields of "dipdup_head_status" */ +export type Dipdup_Head_Status_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** Boolean expression to filter rows from the table "dipdup_head_status". All fields are combined with a logical 'AND'. */ +export type Dipdup_Head_Status_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + name?: InputMaybe + status?: InputMaybe +} + +/** aggregate max on columns */ +export type Dipdup_Head_Status_Max_Fields = { + __typename?: 'dipdup_head_status_max_fields' + name?: Maybe + status?: Maybe +} + +/** aggregate min on columns */ +export type Dipdup_Head_Status_Min_Fields = { + __typename?: 'dipdup_head_status_min_fields' + name?: Maybe + status?: Maybe +} + +/** Ordering options when selecting data from "dipdup_head_status". */ +export type Dipdup_Head_Status_Order_By = { + name?: InputMaybe + status?: InputMaybe +} + +/** select columns of table "dipdup_head_status" */ +export enum Dipdup_Head_Status_Select_Column { + /** column name */ + Name = 'name', + /** column name */ + Status = 'status', +} + +/** Streaming cursor of the table "dipdup_head_status" */ +export type Dipdup_Head_Status_Stream_Cursor_Input = { + /** Stream column input with initial value */ + initial_value: Dipdup_Head_Status_Stream_Cursor_Value_Input + /** cursor ordering */ + ordering?: InputMaybe +} + +/** Initial value of the column from where the streaming should start */ +export type Dipdup_Head_Status_Stream_Cursor_Value_Input = { + name?: InputMaybe + status?: InputMaybe +} + +/** aggregate stddev on columns */ +export type Dipdup_Head_Stddev_Fields = { + __typename?: 'dipdup_head_stddev_fields' + level?: Maybe +} + +/** aggregate stddev_pop on columns */ +export type Dipdup_Head_Stddev_Pop_Fields = { + __typename?: 'dipdup_head_stddev_pop_fields' + level?: Maybe +} + +/** aggregate stddev_samp on columns */ +export type Dipdup_Head_Stddev_Samp_Fields = { + __typename?: 'dipdup_head_stddev_samp_fields' + level?: Maybe +} + +/** Streaming cursor of the table "dipdup_head" */ +export type Dipdup_Head_Stream_Cursor_Input = { + /** Stream column input with initial value */ + initial_value: Dipdup_Head_Stream_Cursor_Value_Input + /** cursor ordering */ + ordering?: InputMaybe +} + +/** Initial value of the column from where the streaming should start */ +export type Dipdup_Head_Stream_Cursor_Value_Input = { + created_at?: InputMaybe + hash?: InputMaybe + level?: InputMaybe + name?: InputMaybe + timestamp?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate sum on columns */ +export type Dipdup_Head_Sum_Fields = { + __typename?: 'dipdup_head_sum_fields' + level?: Maybe +} + +/** aggregate var_pop on columns */ +export type Dipdup_Head_Var_Pop_Fields = { + __typename?: 'dipdup_head_var_pop_fields' + level?: Maybe +} + +/** aggregate var_samp on columns */ +export type Dipdup_Head_Var_Samp_Fields = { + __typename?: 'dipdup_head_var_samp_fields' + level?: Maybe +} + +/** aggregate variance on columns */ +export type Dipdup_Head_Variance_Fields = { + __typename?: 'dipdup_head_variance_fields' + level?: Maybe +} + +/** columns and relationships of "dipdup_index" */ +export type Dipdup_Index = { + __typename?: 'dipdup_index' + config_hash: Scalars['String'] + created_at: Scalars['timestamptz'] + level: Scalars['Int'] + name: Scalars['String'] + /** NEW: NEW\nSYNCING: SYNCING\nREALTIME: REALTIME\nROLLBACK: ROLLBACK\nONESHOT: ONESHOT */ + status: Scalars['String'] + template?: Maybe + template_values?: Maybe + /** operation: operation\nbig_map: big_map\nhead: head\ntoken_transfer: token_transfer\nevent: event */ + type: Scalars['String'] + updated_at: Scalars['timestamptz'] +} + +/** columns and relationships of "dipdup_index" */ +export type Dipdup_IndexTemplate_ValuesArgs = { + path?: InputMaybe +} + +/** aggregated selection of "dipdup_index" */ +export type Dipdup_Index_Aggregate = { + __typename?: 'dipdup_index_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "dipdup_index" */ +export type Dipdup_Index_Aggregate_Fields = { + __typename?: 'dipdup_index_aggregate_fields' + avg?: Maybe + count: Scalars['Int'] + max?: Maybe + min?: Maybe + stddev?: Maybe + stddev_pop?: Maybe + stddev_samp?: Maybe + sum?: Maybe + var_pop?: Maybe + var_samp?: Maybe + variance?: Maybe +} + +/** aggregate fields of "dipdup_index" */ +export type Dipdup_Index_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** aggregate avg on columns */ +export type Dipdup_Index_Avg_Fields = { + __typename?: 'dipdup_index_avg_fields' + level?: Maybe +} + +/** Boolean expression to filter rows from the table "dipdup_index". All fields are combined with a logical 'AND'. */ +export type Dipdup_Index_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + config_hash?: InputMaybe + created_at?: InputMaybe + level?: InputMaybe + name?: InputMaybe + status?: InputMaybe + template?: InputMaybe + template_values?: InputMaybe + type?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate max on columns */ +export type Dipdup_Index_Max_Fields = { + __typename?: 'dipdup_index_max_fields' + config_hash?: Maybe + created_at?: Maybe + level?: Maybe + name?: Maybe + /** NEW: NEW\nSYNCING: SYNCING\nREALTIME: REALTIME\nROLLBACK: ROLLBACK\nONESHOT: ONESHOT */ + status?: Maybe + template?: Maybe + /** operation: operation\nbig_map: big_map\nhead: head\ntoken_transfer: token_transfer\nevent: event */ + type?: Maybe + updated_at?: Maybe +} + +/** aggregate min on columns */ +export type Dipdup_Index_Min_Fields = { + __typename?: 'dipdup_index_min_fields' + config_hash?: Maybe + created_at?: Maybe + level?: Maybe + name?: Maybe + /** NEW: NEW\nSYNCING: SYNCING\nREALTIME: REALTIME\nROLLBACK: ROLLBACK\nONESHOT: ONESHOT */ + status?: Maybe + template?: Maybe + /** operation: operation\nbig_map: big_map\nhead: head\ntoken_transfer: token_transfer\nevent: event */ + type?: Maybe + updated_at?: Maybe +} + +/** Ordering options when selecting data from "dipdup_index". */ +export type Dipdup_Index_Order_By = { + config_hash?: InputMaybe + created_at?: InputMaybe + level?: InputMaybe + name?: InputMaybe + status?: InputMaybe + template?: InputMaybe + template_values?: InputMaybe + type?: InputMaybe + updated_at?: InputMaybe +} + +/** select columns of table "dipdup_index" */ +export enum Dipdup_Index_Select_Column { + /** column name */ + ConfigHash = 'config_hash', + /** column name */ + CreatedAt = 'created_at', + /** column name */ + Level = 'level', + /** column name */ + Name = 'name', + /** column name */ + Status = 'status', + /** column name */ + Template = 'template', + /** column name */ + TemplateValues = 'template_values', + /** column name */ + Type = 'type', + /** column name */ + UpdatedAt = 'updated_at', +} + +/** aggregate stddev on columns */ +export type Dipdup_Index_Stddev_Fields = { + __typename?: 'dipdup_index_stddev_fields' + level?: Maybe +} + +/** aggregate stddev_pop on columns */ +export type Dipdup_Index_Stddev_Pop_Fields = { + __typename?: 'dipdup_index_stddev_pop_fields' + level?: Maybe +} + +/** aggregate stddev_samp on columns */ +export type Dipdup_Index_Stddev_Samp_Fields = { + __typename?: 'dipdup_index_stddev_samp_fields' + level?: Maybe +} + +/** Streaming cursor of the table "dipdup_index" */ +export type Dipdup_Index_Stream_Cursor_Input = { + /** Stream column input with initial value */ + initial_value: Dipdup_Index_Stream_Cursor_Value_Input + /** cursor ordering */ + ordering?: InputMaybe +} + +/** Initial value of the column from where the streaming should start */ +export type Dipdup_Index_Stream_Cursor_Value_Input = { + config_hash?: InputMaybe + created_at?: InputMaybe + level?: InputMaybe + name?: InputMaybe + /** NEW: NEW\nSYNCING: SYNCING\nREALTIME: REALTIME\nROLLBACK: ROLLBACK\nONESHOT: ONESHOT */ + status?: InputMaybe + template?: InputMaybe + template_values?: InputMaybe + /** operation: operation\nbig_map: big_map\nhead: head\ntoken_transfer: token_transfer\nevent: event */ + type?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate sum on columns */ +export type Dipdup_Index_Sum_Fields = { + __typename?: 'dipdup_index_sum_fields' + level?: Maybe +} + +/** aggregate var_pop on columns */ +export type Dipdup_Index_Var_Pop_Fields = { + __typename?: 'dipdup_index_var_pop_fields' + level?: Maybe +} + +/** aggregate var_samp on columns */ +export type Dipdup_Index_Var_Samp_Fields = { + __typename?: 'dipdup_index_var_samp_fields' + level?: Maybe +} + +/** aggregate variance on columns */ +export type Dipdup_Index_Variance_Fields = { + __typename?: 'dipdup_index_variance_fields' + level?: Maybe +} + +/** Model update created within versioned transactions */ +export type Dipdup_Model_Update = { + __typename?: 'dipdup_model_update' + /** INSERT: INSERT\nUPDATE: UPDATE\nDELETE: DELETE */ + action: Scalars['String'] + created_at: Scalars['timestamptz'] + data?: Maybe + id: Scalars['Int'] + index: Scalars['String'] + level: Scalars['Int'] + model_name: Scalars['String'] + model_pk: Scalars['String'] + updated_at: Scalars['timestamptz'] +} + +/** Model update created within versioned transactions */ +export type Dipdup_Model_UpdateDataArgs = { + path?: InputMaybe +} + +/** aggregated selection of "dipdup_model_update" */ +export type Dipdup_Model_Update_Aggregate = { + __typename?: 'dipdup_model_update_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "dipdup_model_update" */ +export type Dipdup_Model_Update_Aggregate_Fields = { + __typename?: 'dipdup_model_update_aggregate_fields' + avg?: Maybe + count: Scalars['Int'] + max?: Maybe + min?: Maybe + stddev?: Maybe + stddev_pop?: Maybe + stddev_samp?: Maybe + sum?: Maybe + var_pop?: Maybe + var_samp?: Maybe + variance?: Maybe +} + +/** aggregate fields of "dipdup_model_update" */ +export type Dipdup_Model_Update_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** aggregate avg on columns */ +export type Dipdup_Model_Update_Avg_Fields = { + __typename?: 'dipdup_model_update_avg_fields' + id?: Maybe + level?: Maybe +} + +/** Boolean expression to filter rows from the table "dipdup_model_update". All fields are combined with a logical 'AND'. */ +export type Dipdup_Model_Update_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + action?: InputMaybe + created_at?: InputMaybe + data?: InputMaybe + id?: InputMaybe + index?: InputMaybe + level?: InputMaybe + model_name?: InputMaybe + model_pk?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate max on columns */ +export type Dipdup_Model_Update_Max_Fields = { + __typename?: 'dipdup_model_update_max_fields' + /** INSERT: INSERT\nUPDATE: UPDATE\nDELETE: DELETE */ + action?: Maybe + created_at?: Maybe + id?: Maybe + index?: Maybe + level?: Maybe + model_name?: Maybe + model_pk?: Maybe + updated_at?: Maybe +} + +/** aggregate min on columns */ +export type Dipdup_Model_Update_Min_Fields = { + __typename?: 'dipdup_model_update_min_fields' + /** INSERT: INSERT\nUPDATE: UPDATE\nDELETE: DELETE */ + action?: Maybe + created_at?: Maybe + id?: Maybe + index?: Maybe + level?: Maybe + model_name?: Maybe + model_pk?: Maybe + updated_at?: Maybe +} + +/** Ordering options when selecting data from "dipdup_model_update". */ +export type Dipdup_Model_Update_Order_By = { + action?: InputMaybe + created_at?: InputMaybe + data?: InputMaybe + id?: InputMaybe + index?: InputMaybe + level?: InputMaybe + model_name?: InputMaybe + model_pk?: InputMaybe + updated_at?: InputMaybe +} + +/** select columns of table "dipdup_model_update" */ +export enum Dipdup_Model_Update_Select_Column { + /** column name */ + Action = 'action', + /** column name */ + CreatedAt = 'created_at', + /** column name */ + Data = 'data', + /** column name */ + Id = 'id', + /** column name */ + Index = 'index', + /** column name */ + Level = 'level', + /** column name */ + ModelName = 'model_name', + /** column name */ + ModelPk = 'model_pk', + /** column name */ + UpdatedAt = 'updated_at', +} + +/** aggregate stddev on columns */ +export type Dipdup_Model_Update_Stddev_Fields = { + __typename?: 'dipdup_model_update_stddev_fields' + id?: Maybe + level?: Maybe +} + +/** aggregate stddev_pop on columns */ +export type Dipdup_Model_Update_Stddev_Pop_Fields = { + __typename?: 'dipdup_model_update_stddev_pop_fields' + id?: Maybe + level?: Maybe +} + +/** aggregate stddev_samp on columns */ +export type Dipdup_Model_Update_Stddev_Samp_Fields = { + __typename?: 'dipdup_model_update_stddev_samp_fields' + id?: Maybe + level?: Maybe +} + +/** Streaming cursor of the table "dipdup_model_update" */ +export type Dipdup_Model_Update_Stream_Cursor_Input = { + /** Stream column input with initial value */ + initial_value: Dipdup_Model_Update_Stream_Cursor_Value_Input + /** cursor ordering */ + ordering?: InputMaybe +} + +/** Initial value of the column from where the streaming should start */ +export type Dipdup_Model_Update_Stream_Cursor_Value_Input = { + /** INSERT: INSERT\nUPDATE: UPDATE\nDELETE: DELETE */ + action?: InputMaybe + created_at?: InputMaybe + data?: InputMaybe + id?: InputMaybe + index?: InputMaybe + level?: InputMaybe + model_name?: InputMaybe + model_pk?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate sum on columns */ +export type Dipdup_Model_Update_Sum_Fields = { + __typename?: 'dipdup_model_update_sum_fields' + id?: Maybe + level?: Maybe +} + +/** aggregate var_pop on columns */ +export type Dipdup_Model_Update_Var_Pop_Fields = { + __typename?: 'dipdup_model_update_var_pop_fields' + id?: Maybe + level?: Maybe +} + +/** aggregate var_samp on columns */ +export type Dipdup_Model_Update_Var_Samp_Fields = { + __typename?: 'dipdup_model_update_var_samp_fields' + id?: Maybe + level?: Maybe +} + +/** aggregate variance on columns */ +export type Dipdup_Model_Update_Variance_Fields = { + __typename?: 'dipdup_model_update_variance_fields' + id?: Maybe + level?: Maybe +} + +/** columns and relationships of "dipdup_schema" */ +export type Dipdup_Schema = { + __typename?: 'dipdup_schema' + created_at: Scalars['timestamptz'] + hash: Scalars['String'] + name: Scalars['String'] + /** manual: manual\nmigration: migration\nrollback: rollback\nconfig_modified: config_modified\nschema_modified: schema_modified */ + reindex?: Maybe + updated_at: Scalars['timestamptz'] +} + +/** aggregated selection of "dipdup_schema" */ +export type Dipdup_Schema_Aggregate = { + __typename?: 'dipdup_schema_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "dipdup_schema" */ +export type Dipdup_Schema_Aggregate_Fields = { + __typename?: 'dipdup_schema_aggregate_fields' + count: Scalars['Int'] + max?: Maybe + min?: Maybe +} + +/** aggregate fields of "dipdup_schema" */ +export type Dipdup_Schema_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** Boolean expression to filter rows from the table "dipdup_schema". All fields are combined with a logical 'AND'. */ +export type Dipdup_Schema_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + created_at?: InputMaybe + hash?: InputMaybe + name?: InputMaybe + reindex?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate max on columns */ +export type Dipdup_Schema_Max_Fields = { + __typename?: 'dipdup_schema_max_fields' + created_at?: Maybe + hash?: Maybe + name?: Maybe + /** manual: manual\nmigration: migration\nrollback: rollback\nconfig_modified: config_modified\nschema_modified: schema_modified */ + reindex?: Maybe + updated_at?: Maybe +} + +/** aggregate min on columns */ +export type Dipdup_Schema_Min_Fields = { + __typename?: 'dipdup_schema_min_fields' + created_at?: Maybe + hash?: Maybe + name?: Maybe + /** manual: manual\nmigration: migration\nrollback: rollback\nconfig_modified: config_modified\nschema_modified: schema_modified */ + reindex?: Maybe + updated_at?: Maybe +} + +/** Ordering options when selecting data from "dipdup_schema". */ +export type Dipdup_Schema_Order_By = { + created_at?: InputMaybe + hash?: InputMaybe + name?: InputMaybe + reindex?: InputMaybe + updated_at?: InputMaybe +} + +/** select columns of table "dipdup_schema" */ +export enum Dipdup_Schema_Select_Column { + /** column name */ + CreatedAt = 'created_at', + /** column name */ + Hash = 'hash', + /** column name */ + Name = 'name', + /** column name */ + Reindex = 'reindex', + /** column name */ + UpdatedAt = 'updated_at', +} + +/** Streaming cursor of the table "dipdup_schema" */ +export type Dipdup_Schema_Stream_Cursor_Input = { + /** Stream column input with initial value */ + initial_value: Dipdup_Schema_Stream_Cursor_Value_Input + /** cursor ordering */ + ordering?: InputMaybe +} + +/** Initial value of the column from where the streaming should start */ +export type Dipdup_Schema_Stream_Cursor_Value_Input = { + created_at?: InputMaybe + hash?: InputMaybe + name?: InputMaybe + /** manual: manual\nmigration: migration\nrollback: rollback\nconfig_modified: config_modified\nschema_modified: schema_modified */ + reindex?: InputMaybe + updated_at?: InputMaybe +} + +/** columns and relationships of "dipdup_token_metadata" */ +export type Dipdup_Token_Metadata = { + __typename?: 'dipdup_token_metadata' + contract: Scalars['String'] + created_at: Scalars['timestamptz'] + id: Scalars['Int'] + metadata: Scalars['jsonb'] + network: Scalars['String'] + token_id: Scalars['String'] + update_id: Scalars['Int'] + updated_at: Scalars['timestamptz'] +} + +/** columns and relationships of "dipdup_token_metadata" */ +export type Dipdup_Token_MetadataMetadataArgs = { + path?: InputMaybe +} + +/** aggregated selection of "dipdup_token_metadata" */ +export type Dipdup_Token_Metadata_Aggregate = { + __typename?: 'dipdup_token_metadata_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "dipdup_token_metadata" */ +export type Dipdup_Token_Metadata_Aggregate_Fields = { + __typename?: 'dipdup_token_metadata_aggregate_fields' + avg?: Maybe + count: Scalars['Int'] + max?: Maybe + min?: Maybe + stddev?: Maybe + stddev_pop?: Maybe + stddev_samp?: Maybe + sum?: Maybe + var_pop?: Maybe + var_samp?: Maybe + variance?: Maybe +} + +/** aggregate fields of "dipdup_token_metadata" */ +export type Dipdup_Token_Metadata_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** aggregate avg on columns */ +export type Dipdup_Token_Metadata_Avg_Fields = { + __typename?: 'dipdup_token_metadata_avg_fields' + id?: Maybe + update_id?: Maybe +} + +/** Boolean expression to filter rows from the table "dipdup_token_metadata". All fields are combined with a logical 'AND'. */ +export type Dipdup_Token_Metadata_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + contract?: InputMaybe + created_at?: InputMaybe + id?: InputMaybe + metadata?: InputMaybe + network?: InputMaybe + token_id?: InputMaybe + update_id?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate max on columns */ +export type Dipdup_Token_Metadata_Max_Fields = { + __typename?: 'dipdup_token_metadata_max_fields' + contract?: Maybe + created_at?: Maybe + id?: Maybe + network?: Maybe + token_id?: Maybe + update_id?: Maybe + updated_at?: Maybe +} + +/** aggregate min on columns */ +export type Dipdup_Token_Metadata_Min_Fields = { + __typename?: 'dipdup_token_metadata_min_fields' + contract?: Maybe + created_at?: Maybe + id?: Maybe + network?: Maybe + token_id?: Maybe + update_id?: Maybe + updated_at?: Maybe +} + +/** Ordering options when selecting data from "dipdup_token_metadata". */ +export type Dipdup_Token_Metadata_Order_By = { + contract?: InputMaybe + created_at?: InputMaybe + id?: InputMaybe + metadata?: InputMaybe + network?: InputMaybe + token_id?: InputMaybe + update_id?: InputMaybe + updated_at?: InputMaybe +} + +/** select columns of table "dipdup_token_metadata" */ +export enum Dipdup_Token_Metadata_Select_Column { + /** column name */ + Contract = 'contract', + /** column name */ + CreatedAt = 'created_at', + /** column name */ + Id = 'id', + /** column name */ + Metadata = 'metadata', + /** column name */ + Network = 'network', + /** column name */ + TokenId = 'token_id', + /** column name */ + UpdateId = 'update_id', + /** column name */ + UpdatedAt = 'updated_at', +} + +/** aggregate stddev on columns */ +export type Dipdup_Token_Metadata_Stddev_Fields = { + __typename?: 'dipdup_token_metadata_stddev_fields' + id?: Maybe + update_id?: Maybe +} + +/** aggregate stddev_pop on columns */ +export type Dipdup_Token_Metadata_Stddev_Pop_Fields = { + __typename?: 'dipdup_token_metadata_stddev_pop_fields' + id?: Maybe + update_id?: Maybe +} + +/** aggregate stddev_samp on columns */ +export type Dipdup_Token_Metadata_Stddev_Samp_Fields = { + __typename?: 'dipdup_token_metadata_stddev_samp_fields' + id?: Maybe + update_id?: Maybe +} + +/** Streaming cursor of the table "dipdup_token_metadata" */ +export type Dipdup_Token_Metadata_Stream_Cursor_Input = { + /** Stream column input with initial value */ + initial_value: Dipdup_Token_Metadata_Stream_Cursor_Value_Input + /** cursor ordering */ + ordering?: InputMaybe +} + +/** Initial value of the column from where the streaming should start */ +export type Dipdup_Token_Metadata_Stream_Cursor_Value_Input = { + contract?: InputMaybe + created_at?: InputMaybe + id?: InputMaybe + metadata?: InputMaybe + network?: InputMaybe + token_id?: InputMaybe + update_id?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate sum on columns */ +export type Dipdup_Token_Metadata_Sum_Fields = { + __typename?: 'dipdup_token_metadata_sum_fields' + id?: Maybe + update_id?: Maybe +} + +/** aggregate var_pop on columns */ +export type Dipdup_Token_Metadata_Var_Pop_Fields = { + __typename?: 'dipdup_token_metadata_var_pop_fields' + id?: Maybe + update_id?: Maybe +} + +/** aggregate var_samp on columns */ +export type Dipdup_Token_Metadata_Var_Samp_Fields = { + __typename?: 'dipdup_token_metadata_var_samp_fields' + id?: Maybe + update_id?: Maybe +} + +/** aggregate variance on columns */ +export type Dipdup_Token_Metadata_Variance_Fields = { + __typename?: 'dipdup_token_metadata_variance_fields' + id?: Maybe + update_id?: Maybe +} + +/** columns and relationships of "events" */ +export type Events = { + __typename?: 'events' + amount?: Maybe + artist_address?: Maybe + ask_id?: Maybe + auction_id?: Maybe + bid?: Maybe + bid_id?: Maybe + bidder_address?: Maybe + burn_on_end?: Maybe + buyer_address?: Maybe + /** An object relationship */ + buyer_profile?: Maybe + collection_id?: Maybe + contract_address?: Maybe + creator_name?: Maybe + currency?: Maybe + current_price?: Maybe + custom_data?: Maybe + editions?: Maybe + end_price?: Maybe + end_time?: Maybe + extension_time?: Maybe + fa2_address?: Maybe + from_address?: Maybe + /** An object relationship */ + from_profile?: Maybe + highest_bidder_address?: Maybe + holder_address?: Maybe + id: Scalars['String'] + implements?: Maybe + is_mint?: Maybe + is_verified_artist?: Maybe + issuer_id?: Maybe + iteration?: Maybe + kalamint_on_sale?: Maybe + ledger_type?: Maybe + level: Scalars['bigint'] + metadata?: Maybe + metadata_uri?: Maybe + offer_id?: Maybe + ophash?: Maybe + opid: Scalars['bigint'] + owner_address?: Maybe + price?: Maybe + price_in_cny?: Maybe + price_in_eur?: Maybe + price_in_gbp?: Maybe + price_in_jpy?: Maybe + price_in_krw?: Maybe + price_in_usd?: Maybe + price_increment?: Maybe + quotes?: Maybe + reserve?: Maybe + royalties?: Maybe + royalty_shares?: Maybe + seller_address?: Maybe + /** An object relationship */ + seller_profile?: Maybe + start_price?: Maybe + start_time?: Maybe + swap_id?: Maybe + timestamp: Scalars['timestamptz'] + to_address?: Maybe + /** An object relationship */ + to_profile?: Maybe + /** An object relationship */ + token?: Maybe + token_description?: Maybe + token_id?: Maybe + token_name?: Maybe + total_price?: Maybe + type?: Maybe +} + +/** columns and relationships of "events" */ +export type EventsCustom_DataArgs = { + path?: InputMaybe +} + +/** columns and relationships of "events" */ +export type EventsMetadataArgs = { + path?: InputMaybe +} + +/** columns and relationships of "events" */ +export type EventsQuotesArgs = { + path?: InputMaybe +} + +/** columns and relationships of "events" */ +export type EventsRoyalty_SharesArgs = { + path?: InputMaybe +} + +/** aggregated selection of "events" */ +export type Events_Aggregate = { + __typename?: 'events_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "events" */ +export type Events_Aggregate_Fields = { + __typename?: 'events_aggregate_fields' + avg?: Maybe + count: Scalars['Int'] + max?: Maybe + min?: Maybe + stddev?: Maybe + stddev_pop?: Maybe + stddev_samp?: Maybe + sum?: Maybe + var_pop?: Maybe + var_samp?: Maybe + variance?: Maybe +} + +/** aggregate fields of "events" */ +export type Events_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** order by aggregate values of table "events" */ +export type Events_Aggregate_Order_By = { + avg?: InputMaybe + count?: InputMaybe + max?: InputMaybe + min?: InputMaybe + stddev?: InputMaybe + stddev_pop?: InputMaybe + stddev_samp?: InputMaybe + sum?: InputMaybe + var_pop?: InputMaybe + var_samp?: InputMaybe + variance?: InputMaybe +} + +/** aggregate avg on columns */ +export type Events_Avg_Fields = { + __typename?: 'events_avg_fields' + amount?: Maybe + ask_id?: Maybe + auction_id?: Maybe + bid?: Maybe + bid_id?: Maybe + collection_id?: Maybe + current_price?: Maybe + editions?: Maybe + end_price?: Maybe + extension_time?: Maybe + issuer_id?: Maybe + iteration?: Maybe + level?: Maybe + offer_id?: Maybe + opid?: Maybe + price?: Maybe + price_in_cny?: Maybe + price_in_eur?: Maybe + price_in_gbp?: Maybe + price_in_jpy?: Maybe + price_in_krw?: Maybe + price_in_usd?: Maybe + price_increment?: Maybe + reserve?: Maybe + royalties?: Maybe + start_price?: Maybe + swap_id?: Maybe + total_price?: Maybe +} + +/** order by avg() on columns of table "events" */ +export type Events_Avg_Order_By = { + amount?: InputMaybe + ask_id?: InputMaybe + auction_id?: InputMaybe + bid?: InputMaybe + bid_id?: InputMaybe + collection_id?: InputMaybe + current_price?: InputMaybe + editions?: InputMaybe + end_price?: InputMaybe + extension_time?: InputMaybe + issuer_id?: InputMaybe + iteration?: InputMaybe + level?: InputMaybe + offer_id?: InputMaybe + opid?: InputMaybe + price?: InputMaybe + price_in_cny?: InputMaybe + price_in_eur?: InputMaybe + price_in_gbp?: InputMaybe + price_in_jpy?: InputMaybe + price_in_krw?: InputMaybe + price_in_usd?: InputMaybe + price_increment?: InputMaybe + reserve?: InputMaybe + royalties?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe + total_price?: InputMaybe +} + +/** Boolean expression to filter rows from the table "events". All fields are combined with a logical 'AND'. */ +export type Events_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + amount?: InputMaybe + artist_address?: InputMaybe + ask_id?: InputMaybe + auction_id?: InputMaybe + bid?: InputMaybe + bid_id?: InputMaybe + bidder_address?: InputMaybe + burn_on_end?: InputMaybe + buyer_address?: InputMaybe + buyer_profile?: InputMaybe + collection_id?: InputMaybe + contract_address?: InputMaybe + creator_name?: InputMaybe + currency?: InputMaybe + current_price?: InputMaybe + custom_data?: InputMaybe + editions?: InputMaybe + end_price?: InputMaybe + end_time?: InputMaybe + extension_time?: InputMaybe + fa2_address?: InputMaybe + from_address?: InputMaybe + from_profile?: InputMaybe + highest_bidder_address?: InputMaybe + holder_address?: InputMaybe + id?: InputMaybe + implements?: InputMaybe + is_mint?: InputMaybe + is_verified_artist?: InputMaybe + issuer_id?: InputMaybe + iteration?: InputMaybe + kalamint_on_sale?: InputMaybe + ledger_type?: InputMaybe + level?: InputMaybe + metadata?: InputMaybe + metadata_uri?: InputMaybe + offer_id?: InputMaybe + ophash?: InputMaybe + opid?: InputMaybe + owner_address?: InputMaybe + price?: InputMaybe + price_in_cny?: InputMaybe + price_in_eur?: InputMaybe + price_in_gbp?: InputMaybe + price_in_jpy?: InputMaybe + price_in_krw?: InputMaybe + price_in_usd?: InputMaybe + price_increment?: InputMaybe + quotes?: InputMaybe + reserve?: InputMaybe + royalties?: InputMaybe + royalty_shares?: InputMaybe + seller_address?: InputMaybe + seller_profile?: InputMaybe + start_price?: InputMaybe + start_time?: InputMaybe + swap_id?: InputMaybe + timestamp?: InputMaybe + to_address?: InputMaybe + to_profile?: InputMaybe + token?: InputMaybe + token_description?: InputMaybe + token_id?: InputMaybe + token_name?: InputMaybe + total_price?: InputMaybe + type?: InputMaybe +} + +/** aggregate max on columns */ +export type Events_Max_Fields = { + __typename?: 'events_max_fields' + amount?: Maybe + artist_address?: Maybe + ask_id?: Maybe + auction_id?: Maybe + bid?: Maybe + bid_id?: Maybe + bidder_address?: Maybe + buyer_address?: Maybe + collection_id?: Maybe + contract_address?: Maybe + creator_name?: Maybe + currency?: Maybe + current_price?: Maybe + editions?: Maybe + end_price?: Maybe + end_time?: Maybe + extension_time?: Maybe + fa2_address?: Maybe + from_address?: Maybe + highest_bidder_address?: Maybe + holder_address?: Maybe + id?: Maybe + implements?: Maybe + issuer_id?: Maybe + iteration?: Maybe + ledger_type?: Maybe + level?: Maybe + metadata_uri?: Maybe + offer_id?: Maybe + ophash?: Maybe + opid?: Maybe + owner_address?: Maybe + price?: Maybe + price_in_cny?: Maybe + price_in_eur?: Maybe + price_in_gbp?: Maybe + price_in_jpy?: Maybe + price_in_krw?: Maybe + price_in_usd?: Maybe + price_increment?: Maybe + reserve?: Maybe + royalties?: Maybe + seller_address?: Maybe + start_price?: Maybe + start_time?: Maybe + swap_id?: Maybe + timestamp?: Maybe + to_address?: Maybe + token_description?: Maybe + token_id?: Maybe + token_name?: Maybe + total_price?: Maybe + type?: Maybe +} + +/** order by max() on columns of table "events" */ +export type Events_Max_Order_By = { + amount?: InputMaybe + artist_address?: InputMaybe + ask_id?: InputMaybe + auction_id?: InputMaybe + bid?: InputMaybe + bid_id?: InputMaybe + bidder_address?: InputMaybe + buyer_address?: InputMaybe + collection_id?: InputMaybe + contract_address?: InputMaybe + creator_name?: InputMaybe + currency?: InputMaybe + current_price?: InputMaybe + editions?: InputMaybe + end_price?: InputMaybe + end_time?: InputMaybe + extension_time?: InputMaybe + fa2_address?: InputMaybe + from_address?: InputMaybe + highest_bidder_address?: InputMaybe + holder_address?: InputMaybe + id?: InputMaybe + implements?: InputMaybe + issuer_id?: InputMaybe + iteration?: InputMaybe + ledger_type?: InputMaybe + level?: InputMaybe + metadata_uri?: InputMaybe + offer_id?: InputMaybe + ophash?: InputMaybe + opid?: InputMaybe + owner_address?: InputMaybe + price?: InputMaybe + price_in_cny?: InputMaybe + price_in_eur?: InputMaybe + price_in_gbp?: InputMaybe + price_in_jpy?: InputMaybe + price_in_krw?: InputMaybe + price_in_usd?: InputMaybe + price_increment?: InputMaybe + reserve?: InputMaybe + royalties?: InputMaybe + seller_address?: InputMaybe + start_price?: InputMaybe + start_time?: InputMaybe + swap_id?: InputMaybe + timestamp?: InputMaybe + to_address?: InputMaybe + token_description?: InputMaybe + token_id?: InputMaybe + token_name?: InputMaybe + total_price?: InputMaybe + type?: InputMaybe +} + +/** aggregate min on columns */ +export type Events_Min_Fields = { + __typename?: 'events_min_fields' + amount?: Maybe + artist_address?: Maybe + ask_id?: Maybe + auction_id?: Maybe + bid?: Maybe + bid_id?: Maybe + bidder_address?: Maybe + buyer_address?: Maybe + collection_id?: Maybe + contract_address?: Maybe + creator_name?: Maybe + currency?: Maybe + current_price?: Maybe + editions?: Maybe + end_price?: Maybe + end_time?: Maybe + extension_time?: Maybe + fa2_address?: Maybe + from_address?: Maybe + highest_bidder_address?: Maybe + holder_address?: Maybe + id?: Maybe + implements?: Maybe + issuer_id?: Maybe + iteration?: Maybe + ledger_type?: Maybe + level?: Maybe + metadata_uri?: Maybe + offer_id?: Maybe + ophash?: Maybe + opid?: Maybe + owner_address?: Maybe + price?: Maybe + price_in_cny?: Maybe + price_in_eur?: Maybe + price_in_gbp?: Maybe + price_in_jpy?: Maybe + price_in_krw?: Maybe + price_in_usd?: Maybe + price_increment?: Maybe + reserve?: Maybe + royalties?: Maybe + seller_address?: Maybe + start_price?: Maybe + start_time?: Maybe + swap_id?: Maybe + timestamp?: Maybe + to_address?: Maybe + token_description?: Maybe + token_id?: Maybe + token_name?: Maybe + total_price?: Maybe + type?: Maybe +} + +/** order by min() on columns of table "events" */ +export type Events_Min_Order_By = { + amount?: InputMaybe + artist_address?: InputMaybe + ask_id?: InputMaybe + auction_id?: InputMaybe + bid?: InputMaybe + bid_id?: InputMaybe + bidder_address?: InputMaybe + buyer_address?: InputMaybe + collection_id?: InputMaybe + contract_address?: InputMaybe + creator_name?: InputMaybe + currency?: InputMaybe + current_price?: InputMaybe + editions?: InputMaybe + end_price?: InputMaybe + end_time?: InputMaybe + extension_time?: InputMaybe + fa2_address?: InputMaybe + from_address?: InputMaybe + highest_bidder_address?: InputMaybe + holder_address?: InputMaybe + id?: InputMaybe + implements?: InputMaybe + issuer_id?: InputMaybe + iteration?: InputMaybe + ledger_type?: InputMaybe + level?: InputMaybe + metadata_uri?: InputMaybe + offer_id?: InputMaybe + ophash?: InputMaybe + opid?: InputMaybe + owner_address?: InputMaybe + price?: InputMaybe + price_in_cny?: InputMaybe + price_in_eur?: InputMaybe + price_in_gbp?: InputMaybe + price_in_jpy?: InputMaybe + price_in_krw?: InputMaybe + price_in_usd?: InputMaybe + price_increment?: InputMaybe + reserve?: InputMaybe + royalties?: InputMaybe + seller_address?: InputMaybe + start_price?: InputMaybe + start_time?: InputMaybe + swap_id?: InputMaybe + timestamp?: InputMaybe + to_address?: InputMaybe + token_description?: InputMaybe + token_id?: InputMaybe + token_name?: InputMaybe + total_price?: InputMaybe + type?: InputMaybe +} + +/** Ordering options when selecting data from "events". */ +export type Events_Order_By = { + amount?: InputMaybe + artist_address?: InputMaybe + ask_id?: InputMaybe + auction_id?: InputMaybe + bid?: InputMaybe + bid_id?: InputMaybe + bidder_address?: InputMaybe + burn_on_end?: InputMaybe + buyer_address?: InputMaybe + buyer_profile?: InputMaybe + collection_id?: InputMaybe + contract_address?: InputMaybe + creator_name?: InputMaybe + currency?: InputMaybe + current_price?: InputMaybe + custom_data?: InputMaybe + editions?: InputMaybe + end_price?: InputMaybe + end_time?: InputMaybe + extension_time?: InputMaybe + fa2_address?: InputMaybe + from_address?: InputMaybe + from_profile?: InputMaybe + highest_bidder_address?: InputMaybe + holder_address?: InputMaybe + id?: InputMaybe + implements?: InputMaybe + is_mint?: InputMaybe + is_verified_artist?: InputMaybe + issuer_id?: InputMaybe + iteration?: InputMaybe + kalamint_on_sale?: InputMaybe + ledger_type?: InputMaybe + level?: InputMaybe + metadata?: InputMaybe + metadata_uri?: InputMaybe + offer_id?: InputMaybe + ophash?: InputMaybe + opid?: InputMaybe + owner_address?: InputMaybe + price?: InputMaybe + price_in_cny?: InputMaybe + price_in_eur?: InputMaybe + price_in_gbp?: InputMaybe + price_in_jpy?: InputMaybe + price_in_krw?: InputMaybe + price_in_usd?: InputMaybe + price_increment?: InputMaybe + quotes?: InputMaybe + reserve?: InputMaybe + royalties?: InputMaybe + royalty_shares?: InputMaybe + seller_address?: InputMaybe + seller_profile?: InputMaybe + start_price?: InputMaybe + start_time?: InputMaybe + swap_id?: InputMaybe + timestamp?: InputMaybe + to_address?: InputMaybe + to_profile?: InputMaybe + token?: InputMaybe + token_description?: InputMaybe + token_id?: InputMaybe + token_name?: InputMaybe + total_price?: InputMaybe + type?: InputMaybe +} + +/** select columns of table "events" */ +export enum Events_Select_Column { + /** column name */ + Amount = 'amount', + /** column name */ + ArtistAddress = 'artist_address', + /** column name */ + AskId = 'ask_id', + /** column name */ + AuctionId = 'auction_id', + /** column name */ + Bid = 'bid', + /** column name */ + BidId = 'bid_id', + /** column name */ + BidderAddress = 'bidder_address', + /** column name */ + BurnOnEnd = 'burn_on_end', + /** column name */ + BuyerAddress = 'buyer_address', + /** column name */ + CollectionId = 'collection_id', + /** column name */ + ContractAddress = 'contract_address', + /** column name */ + CreatorName = 'creator_name', + /** column name */ + Currency = 'currency', + /** column name */ + CurrentPrice = 'current_price', + /** column name */ + CustomData = 'custom_data', + /** column name */ + Editions = 'editions', + /** column name */ + EndPrice = 'end_price', + /** column name */ + EndTime = 'end_time', + /** column name */ + ExtensionTime = 'extension_time', + /** column name */ + Fa2Address = 'fa2_address', + /** column name */ + FromAddress = 'from_address', + /** column name */ + HighestBidderAddress = 'highest_bidder_address', + /** column name */ + HolderAddress = 'holder_address', + /** column name */ + Id = 'id', + /** column name */ + Implements = 'implements', + /** column name */ + IsMint = 'is_mint', + /** column name */ + IsVerifiedArtist = 'is_verified_artist', + /** column name */ + IssuerId = 'issuer_id', + /** column name */ + Iteration = 'iteration', + /** column name */ + KalamintOnSale = 'kalamint_on_sale', + /** column name */ + LedgerType = 'ledger_type', + /** column name */ + Level = 'level', + /** column name */ + Metadata = 'metadata', + /** column name */ + MetadataUri = 'metadata_uri', + /** column name */ + OfferId = 'offer_id', + /** column name */ + Ophash = 'ophash', + /** column name */ + Opid = 'opid', + /** column name */ + OwnerAddress = 'owner_address', + /** column name */ + Price = 'price', + /** column name */ + PriceInCny = 'price_in_cny', + /** column name */ + PriceInEur = 'price_in_eur', + /** column name */ + PriceInGbp = 'price_in_gbp', + /** column name */ + PriceInJpy = 'price_in_jpy', + /** column name */ + PriceInKrw = 'price_in_krw', + /** column name */ + PriceInUsd = 'price_in_usd', + /** column name */ + PriceIncrement = 'price_increment', + /** column name */ + Quotes = 'quotes', + /** column name */ + Reserve = 'reserve', + /** column name */ + Royalties = 'royalties', + /** column name */ + RoyaltyShares = 'royalty_shares', + /** column name */ + SellerAddress = 'seller_address', + /** column name */ + StartPrice = 'start_price', + /** column name */ + StartTime = 'start_time', + /** column name */ + SwapId = 'swap_id', + /** column name */ + Timestamp = 'timestamp', + /** column name */ + ToAddress = 'to_address', + /** column name */ + TokenDescription = 'token_description', + /** column name */ + TokenId = 'token_id', + /** column name */ + TokenName = 'token_name', + /** column name */ + TotalPrice = 'total_price', + /** column name */ + Type = 'type', +} + +/** aggregate stddev on columns */ +export type Events_Stddev_Fields = { + __typename?: 'events_stddev_fields' + amount?: Maybe + ask_id?: Maybe + auction_id?: Maybe + bid?: Maybe + bid_id?: Maybe + collection_id?: Maybe + current_price?: Maybe + editions?: Maybe + end_price?: Maybe + extension_time?: Maybe + issuer_id?: Maybe + iteration?: Maybe + level?: Maybe + offer_id?: Maybe + opid?: Maybe + price?: Maybe + price_in_cny?: Maybe + price_in_eur?: Maybe + price_in_gbp?: Maybe + price_in_jpy?: Maybe + price_in_krw?: Maybe + price_in_usd?: Maybe + price_increment?: Maybe + reserve?: Maybe + royalties?: Maybe + start_price?: Maybe + swap_id?: Maybe + total_price?: Maybe +} + +/** order by stddev() on columns of table "events" */ +export type Events_Stddev_Order_By = { + amount?: InputMaybe + ask_id?: InputMaybe + auction_id?: InputMaybe + bid?: InputMaybe + bid_id?: InputMaybe + collection_id?: InputMaybe + current_price?: InputMaybe + editions?: InputMaybe + end_price?: InputMaybe + extension_time?: InputMaybe + issuer_id?: InputMaybe + iteration?: InputMaybe + level?: InputMaybe + offer_id?: InputMaybe + opid?: InputMaybe + price?: InputMaybe + price_in_cny?: InputMaybe + price_in_eur?: InputMaybe + price_in_gbp?: InputMaybe + price_in_jpy?: InputMaybe + price_in_krw?: InputMaybe + price_in_usd?: InputMaybe + price_increment?: InputMaybe + reserve?: InputMaybe + royalties?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe + total_price?: InputMaybe +} + +/** aggregate stddev_pop on columns */ +export type Events_Stddev_Pop_Fields = { + __typename?: 'events_stddev_pop_fields' + amount?: Maybe + ask_id?: Maybe + auction_id?: Maybe + bid?: Maybe + bid_id?: Maybe + collection_id?: Maybe + current_price?: Maybe + editions?: Maybe + end_price?: Maybe + extension_time?: Maybe + issuer_id?: Maybe + iteration?: Maybe + level?: Maybe + offer_id?: Maybe + opid?: Maybe + price?: Maybe + price_in_cny?: Maybe + price_in_eur?: Maybe + price_in_gbp?: Maybe + price_in_jpy?: Maybe + price_in_krw?: Maybe + price_in_usd?: Maybe + price_increment?: Maybe + reserve?: Maybe + royalties?: Maybe + start_price?: Maybe + swap_id?: Maybe + total_price?: Maybe +} + +/** order by stddev_pop() on columns of table "events" */ +export type Events_Stddev_Pop_Order_By = { + amount?: InputMaybe + ask_id?: InputMaybe + auction_id?: InputMaybe + bid?: InputMaybe + bid_id?: InputMaybe + collection_id?: InputMaybe + current_price?: InputMaybe + editions?: InputMaybe + end_price?: InputMaybe + extension_time?: InputMaybe + issuer_id?: InputMaybe + iteration?: InputMaybe + level?: InputMaybe + offer_id?: InputMaybe + opid?: InputMaybe + price?: InputMaybe + price_in_cny?: InputMaybe + price_in_eur?: InputMaybe + price_in_gbp?: InputMaybe + price_in_jpy?: InputMaybe + price_in_krw?: InputMaybe + price_in_usd?: InputMaybe + price_increment?: InputMaybe + reserve?: InputMaybe + royalties?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe + total_price?: InputMaybe +} + +/** aggregate stddev_samp on columns */ +export type Events_Stddev_Samp_Fields = { + __typename?: 'events_stddev_samp_fields' + amount?: Maybe + ask_id?: Maybe + auction_id?: Maybe + bid?: Maybe + bid_id?: Maybe + collection_id?: Maybe + current_price?: Maybe + editions?: Maybe + end_price?: Maybe + extension_time?: Maybe + issuer_id?: Maybe + iteration?: Maybe + level?: Maybe + offer_id?: Maybe + opid?: Maybe + price?: Maybe + price_in_cny?: Maybe + price_in_eur?: Maybe + price_in_gbp?: Maybe + price_in_jpy?: Maybe + price_in_krw?: Maybe + price_in_usd?: Maybe + price_increment?: Maybe + reserve?: Maybe + royalties?: Maybe + start_price?: Maybe + swap_id?: Maybe + total_price?: Maybe +} + +/** order by stddev_samp() on columns of table "events" */ +export type Events_Stddev_Samp_Order_By = { + amount?: InputMaybe + ask_id?: InputMaybe + auction_id?: InputMaybe + bid?: InputMaybe + bid_id?: InputMaybe + collection_id?: InputMaybe + current_price?: InputMaybe + editions?: InputMaybe + end_price?: InputMaybe + extension_time?: InputMaybe + issuer_id?: InputMaybe + iteration?: InputMaybe + level?: InputMaybe + offer_id?: InputMaybe + opid?: InputMaybe + price?: InputMaybe + price_in_cny?: InputMaybe + price_in_eur?: InputMaybe + price_in_gbp?: InputMaybe + price_in_jpy?: InputMaybe + price_in_krw?: InputMaybe + price_in_usd?: InputMaybe + price_increment?: InputMaybe + reserve?: InputMaybe + royalties?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe + total_price?: InputMaybe +} + +/** aggregate sum on columns */ +export type Events_Sum_Fields = { + __typename?: 'events_sum_fields' + amount?: Maybe + ask_id?: Maybe + auction_id?: Maybe + bid?: Maybe + bid_id?: Maybe + collection_id?: Maybe + current_price?: Maybe + editions?: Maybe + end_price?: Maybe + extension_time?: Maybe + issuer_id?: Maybe + iteration?: Maybe + level?: Maybe + offer_id?: Maybe + opid?: Maybe + price?: Maybe + price_in_cny?: Maybe + price_in_eur?: Maybe + price_in_gbp?: Maybe + price_in_jpy?: Maybe + price_in_krw?: Maybe + price_in_usd?: Maybe + price_increment?: Maybe + reserve?: Maybe + royalties?: Maybe + start_price?: Maybe + swap_id?: Maybe + total_price?: Maybe +} + +/** order by sum() on columns of table "events" */ +export type Events_Sum_Order_By = { + amount?: InputMaybe + ask_id?: InputMaybe + auction_id?: InputMaybe + bid?: InputMaybe + bid_id?: InputMaybe + collection_id?: InputMaybe + current_price?: InputMaybe + editions?: InputMaybe + end_price?: InputMaybe + extension_time?: InputMaybe + issuer_id?: InputMaybe + iteration?: InputMaybe + level?: InputMaybe + offer_id?: InputMaybe + opid?: InputMaybe + price?: InputMaybe + price_in_cny?: InputMaybe + price_in_eur?: InputMaybe + price_in_gbp?: InputMaybe + price_in_jpy?: InputMaybe + price_in_krw?: InputMaybe + price_in_usd?: InputMaybe + price_increment?: InputMaybe + reserve?: InputMaybe + royalties?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe + total_price?: InputMaybe +} + +/** aggregate var_pop on columns */ +export type Events_Var_Pop_Fields = { + __typename?: 'events_var_pop_fields' + amount?: Maybe + ask_id?: Maybe + auction_id?: Maybe + bid?: Maybe + bid_id?: Maybe + collection_id?: Maybe + current_price?: Maybe + editions?: Maybe + end_price?: Maybe + extension_time?: Maybe + issuer_id?: Maybe + iteration?: Maybe + level?: Maybe + offer_id?: Maybe + opid?: Maybe + price?: Maybe + price_in_cny?: Maybe + price_in_eur?: Maybe + price_in_gbp?: Maybe + price_in_jpy?: Maybe + price_in_krw?: Maybe + price_in_usd?: Maybe + price_increment?: Maybe + reserve?: Maybe + royalties?: Maybe + start_price?: Maybe + swap_id?: Maybe + total_price?: Maybe +} + +/** order by var_pop() on columns of table "events" */ +export type Events_Var_Pop_Order_By = { + amount?: InputMaybe + ask_id?: InputMaybe + auction_id?: InputMaybe + bid?: InputMaybe + bid_id?: InputMaybe + collection_id?: InputMaybe + current_price?: InputMaybe + editions?: InputMaybe + end_price?: InputMaybe + extension_time?: InputMaybe + issuer_id?: InputMaybe + iteration?: InputMaybe + level?: InputMaybe + offer_id?: InputMaybe + opid?: InputMaybe + price?: InputMaybe + price_in_cny?: InputMaybe + price_in_eur?: InputMaybe + price_in_gbp?: InputMaybe + price_in_jpy?: InputMaybe + price_in_krw?: InputMaybe + price_in_usd?: InputMaybe + price_increment?: InputMaybe + reserve?: InputMaybe + royalties?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe + total_price?: InputMaybe +} + +/** aggregate var_samp on columns */ +export type Events_Var_Samp_Fields = { + __typename?: 'events_var_samp_fields' + amount?: Maybe + ask_id?: Maybe + auction_id?: Maybe + bid?: Maybe + bid_id?: Maybe + collection_id?: Maybe + current_price?: Maybe + editions?: Maybe + end_price?: Maybe + extension_time?: Maybe + issuer_id?: Maybe + iteration?: Maybe + level?: Maybe + offer_id?: Maybe + opid?: Maybe + price?: Maybe + price_in_cny?: Maybe + price_in_eur?: Maybe + price_in_gbp?: Maybe + price_in_jpy?: Maybe + price_in_krw?: Maybe + price_in_usd?: Maybe + price_increment?: Maybe + reserve?: Maybe + royalties?: Maybe + start_price?: Maybe + swap_id?: Maybe + total_price?: Maybe +} + +/** order by var_samp() on columns of table "events" */ +export type Events_Var_Samp_Order_By = { + amount?: InputMaybe + ask_id?: InputMaybe + auction_id?: InputMaybe + bid?: InputMaybe + bid_id?: InputMaybe + collection_id?: InputMaybe + current_price?: InputMaybe + editions?: InputMaybe + end_price?: InputMaybe + extension_time?: InputMaybe + issuer_id?: InputMaybe + iteration?: InputMaybe + level?: InputMaybe + offer_id?: InputMaybe + opid?: InputMaybe + price?: InputMaybe + price_in_cny?: InputMaybe + price_in_eur?: InputMaybe + price_in_gbp?: InputMaybe + price_in_jpy?: InputMaybe + price_in_krw?: InputMaybe + price_in_usd?: InputMaybe + price_increment?: InputMaybe + reserve?: InputMaybe + royalties?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe + total_price?: InputMaybe +} + +/** aggregate variance on columns */ +export type Events_Variance_Fields = { + __typename?: 'events_variance_fields' + amount?: Maybe + ask_id?: Maybe + auction_id?: Maybe + bid?: Maybe + bid_id?: Maybe + collection_id?: Maybe + current_price?: Maybe + editions?: Maybe + end_price?: Maybe + extension_time?: Maybe + issuer_id?: Maybe + iteration?: Maybe + level?: Maybe + offer_id?: Maybe + opid?: Maybe + price?: Maybe + price_in_cny?: Maybe + price_in_eur?: Maybe + price_in_gbp?: Maybe + price_in_jpy?: Maybe + price_in_krw?: Maybe + price_in_usd?: Maybe + price_increment?: Maybe + reserve?: Maybe + royalties?: Maybe + start_price?: Maybe + swap_id?: Maybe + total_price?: Maybe +} + +/** order by variance() on columns of table "events" */ +export type Events_Variance_Order_By = { + amount?: InputMaybe + ask_id?: InputMaybe + auction_id?: InputMaybe + bid?: InputMaybe + bid_id?: InputMaybe + collection_id?: InputMaybe + current_price?: InputMaybe + editions?: InputMaybe + end_price?: InputMaybe + extension_time?: InputMaybe + issuer_id?: InputMaybe + iteration?: InputMaybe + level?: InputMaybe + offer_id?: InputMaybe + opid?: InputMaybe + price?: InputMaybe + price_in_cny?: InputMaybe + price_in_eur?: InputMaybe + price_in_gbp?: InputMaybe + price_in_jpy?: InputMaybe + price_in_krw?: InputMaybe + price_in_usd?: InputMaybe + price_increment?: InputMaybe + reserve?: InputMaybe + royalties?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe + total_price?: InputMaybe +} + +/** columns and relationships of "holdings" */ +export type Holdings = { + __typename?: 'holdings' + amount: Scalars['bigint'] + fa2_address: Scalars['String'] + first_received_at?: Maybe + holder_address: Scalars['String'] + /** An object relationship */ + holder_profile?: Maybe + last_received_at?: Maybe + /** An object relationship */ + token?: Maybe + token_id: Scalars['String'] +} + +/** aggregated selection of "holdings" */ +export type Holdings_Aggregate = { + __typename?: 'holdings_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "holdings" */ +export type Holdings_Aggregate_Fields = { + __typename?: 'holdings_aggregate_fields' + avg?: Maybe + count: Scalars['Int'] + max?: Maybe + min?: Maybe + stddev?: Maybe + stddev_pop?: Maybe + stddev_samp?: Maybe + sum?: Maybe + var_pop?: Maybe + var_samp?: Maybe + variance?: Maybe +} + +/** aggregate fields of "holdings" */ +export type Holdings_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** order by aggregate values of table "holdings" */ +export type Holdings_Aggregate_Order_By = { + avg?: InputMaybe + count?: InputMaybe + max?: InputMaybe + min?: InputMaybe + stddev?: InputMaybe + stddev_pop?: InputMaybe + stddev_samp?: InputMaybe + sum?: InputMaybe + var_pop?: InputMaybe + var_samp?: InputMaybe + variance?: InputMaybe +} + +/** aggregate avg on columns */ +export type Holdings_Avg_Fields = { + __typename?: 'holdings_avg_fields' + amount?: Maybe +} + +/** order by avg() on columns of table "holdings" */ +export type Holdings_Avg_Order_By = { + amount?: InputMaybe +} + +/** Boolean expression to filter rows from the table "holdings". All fields are combined with a logical 'AND'. */ +export type Holdings_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + amount?: InputMaybe + fa2_address?: InputMaybe + first_received_at?: InputMaybe + holder_address?: InputMaybe + holder_profile?: InputMaybe + last_received_at?: InputMaybe + token?: InputMaybe + token_id?: InputMaybe +} + +/** aggregate max on columns */ +export type Holdings_Max_Fields = { + __typename?: 'holdings_max_fields' + amount?: Maybe + fa2_address?: Maybe + first_received_at?: Maybe + holder_address?: Maybe + last_received_at?: Maybe + token_id?: Maybe +} + +/** order by max() on columns of table "holdings" */ +export type Holdings_Max_Order_By = { + amount?: InputMaybe + fa2_address?: InputMaybe + first_received_at?: InputMaybe + holder_address?: InputMaybe + last_received_at?: InputMaybe + token_id?: InputMaybe +} + +/** aggregate min on columns */ +export type Holdings_Min_Fields = { + __typename?: 'holdings_min_fields' + amount?: Maybe + fa2_address?: Maybe + first_received_at?: Maybe + holder_address?: Maybe + last_received_at?: Maybe + token_id?: Maybe +} + +/** order by min() on columns of table "holdings" */ +export type Holdings_Min_Order_By = { + amount?: InputMaybe + fa2_address?: InputMaybe + first_received_at?: InputMaybe + holder_address?: InputMaybe + last_received_at?: InputMaybe + token_id?: InputMaybe +} + +/** Ordering options when selecting data from "holdings". */ +export type Holdings_Order_By = { + amount?: InputMaybe + fa2_address?: InputMaybe + first_received_at?: InputMaybe + holder_address?: InputMaybe + holder_profile?: InputMaybe + last_received_at?: InputMaybe + token?: InputMaybe + token_id?: InputMaybe +} + +/** select columns of table "holdings" */ +export enum Holdings_Select_Column { + /** column name */ + Amount = 'amount', + /** column name */ + Fa2Address = 'fa2_address', + /** column name */ + FirstReceivedAt = 'first_received_at', + /** column name */ + HolderAddress = 'holder_address', + /** column name */ + LastReceivedAt = 'last_received_at', + /** column name */ + TokenId = 'token_id', +} + +/** aggregate stddev on columns */ +export type Holdings_Stddev_Fields = { + __typename?: 'holdings_stddev_fields' + amount?: Maybe +} + +/** order by stddev() on columns of table "holdings" */ +export type Holdings_Stddev_Order_By = { + amount?: InputMaybe +} + +/** aggregate stddev_pop on columns */ +export type Holdings_Stddev_Pop_Fields = { + __typename?: 'holdings_stddev_pop_fields' + amount?: Maybe +} + +/** order by stddev_pop() on columns of table "holdings" */ +export type Holdings_Stddev_Pop_Order_By = { + amount?: InputMaybe +} + +/** aggregate stddev_samp on columns */ +export type Holdings_Stddev_Samp_Fields = { + __typename?: 'holdings_stddev_samp_fields' + amount?: Maybe +} + +/** order by stddev_samp() on columns of table "holdings" */ +export type Holdings_Stddev_Samp_Order_By = { + amount?: InputMaybe +} + +/** aggregate sum on columns */ +export type Holdings_Sum_Fields = { + __typename?: 'holdings_sum_fields' + amount?: Maybe +} + +/** order by sum() on columns of table "holdings" */ +export type Holdings_Sum_Order_By = { + amount?: InputMaybe +} + +/** aggregate var_pop on columns */ +export type Holdings_Var_Pop_Fields = { + __typename?: 'holdings_var_pop_fields' + amount?: Maybe +} + +/** order by var_pop() on columns of table "holdings" */ +export type Holdings_Var_Pop_Order_By = { + amount?: InputMaybe +} + +/** aggregate var_samp on columns */ +export type Holdings_Var_Samp_Fields = { + __typename?: 'holdings_var_samp_fields' + amount?: Maybe +} + +/** order by var_samp() on columns of table "holdings" */ +export type Holdings_Var_Samp_Order_By = { + amount?: InputMaybe +} + +/** aggregate variance on columns */ +export type Holdings_Variance_Fields = { + __typename?: 'holdings_variance_fields' + amount?: Maybe +} + +/** order by variance() on columns of table "holdings" */ +export type Holdings_Variance_Order_By = { + amount?: InputMaybe +} + +export type Jsonb_Cast_Exp = { + String?: InputMaybe +} + +/** Boolean expression to compare columns of type "jsonb". All fields are combined with logical 'AND'. */ +export type Jsonb_Comparison_Exp = { + _cast?: InputMaybe + /** is the column contained in the given json value */ + _contained_in?: InputMaybe + /** does the column contain the given json value at the top level */ + _contains?: InputMaybe + _eq?: InputMaybe + _gt?: InputMaybe + _gte?: InputMaybe + /** does the string exist as a top-level key in the column */ + _has_key?: InputMaybe + /** do all of these strings exist as top-level keys in the column */ + _has_keys_all?: InputMaybe> + /** do any of these strings exist as top-level keys in the column */ + _has_keys_any?: InputMaybe> + _in?: InputMaybe> + _is_null?: InputMaybe + _lt?: InputMaybe + _lte?: InputMaybe + _neq?: InputMaybe + _nin?: InputMaybe> +} + +/** columns and relationships of "listings" */ +export type Listings = { + __typename?: 'listings' + amount: Scalars['bigint'] + amount_left: Scalars['bigint'] + ask_id?: Maybe + burn_on_end?: Maybe + contract_address: Scalars['String'] + created_at: Scalars['timestamptz'] + currency?: Maybe + end_price?: Maybe + end_time?: Maybe + fa2_address: Scalars['String'] + offer_id?: Maybe + price: Scalars['bigint'] + seller_address: Scalars['String'] + /** An object relationship */ + seller_profile?: Maybe + start_price?: Maybe + status: Scalars['String'] + swap_id?: Maybe + /** An object relationship */ + token?: Maybe + token_id: Scalars['String'] + type: Scalars['String'] +} + +/** aggregated selection of "listings" */ +export type Listings_Aggregate = { + __typename?: 'listings_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "listings" */ +export type Listings_Aggregate_Fields = { + __typename?: 'listings_aggregate_fields' + avg?: Maybe + count: Scalars['Int'] + max?: Maybe + min?: Maybe + stddev?: Maybe + stddev_pop?: Maybe + stddev_samp?: Maybe + sum?: Maybe + var_pop?: Maybe + var_samp?: Maybe + variance?: Maybe +} + +/** aggregate fields of "listings" */ +export type Listings_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** order by aggregate values of table "listings" */ +export type Listings_Aggregate_Order_By = { + avg?: InputMaybe + count?: InputMaybe + max?: InputMaybe + min?: InputMaybe + stddev?: InputMaybe + stddev_pop?: InputMaybe + stddev_samp?: InputMaybe + sum?: InputMaybe + var_pop?: InputMaybe + var_samp?: InputMaybe + variance?: InputMaybe +} + +/** aggregate avg on columns */ +export type Listings_Avg_Fields = { + __typename?: 'listings_avg_fields' + amount?: Maybe + amount_left?: Maybe + ask_id?: Maybe + end_price?: Maybe + offer_id?: Maybe + price?: Maybe + start_price?: Maybe + swap_id?: Maybe +} + +/** order by avg() on columns of table "listings" */ +export type Listings_Avg_Order_By = { + amount?: InputMaybe + amount_left?: InputMaybe + ask_id?: InputMaybe + end_price?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe +} + +/** Boolean expression to filter rows from the table "listings". All fields are combined with a logical 'AND'. */ +export type Listings_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + amount?: InputMaybe + amount_left?: InputMaybe + ask_id?: InputMaybe + burn_on_end?: InputMaybe + contract_address?: InputMaybe + created_at?: InputMaybe + currency?: InputMaybe + end_price?: InputMaybe + end_time?: InputMaybe + fa2_address?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + seller_address?: InputMaybe + seller_profile?: InputMaybe + start_price?: InputMaybe + status?: InputMaybe + swap_id?: InputMaybe + token?: InputMaybe + token_id?: InputMaybe + type?: InputMaybe +} + +/** aggregate max on columns */ +export type Listings_Max_Fields = { + __typename?: 'listings_max_fields' + amount?: Maybe + amount_left?: Maybe + ask_id?: Maybe + contract_address?: Maybe + created_at?: Maybe + currency?: Maybe + end_price?: Maybe + end_time?: Maybe + fa2_address?: Maybe + offer_id?: Maybe + price?: Maybe + seller_address?: Maybe + start_price?: Maybe + status?: Maybe + swap_id?: Maybe + token_id?: Maybe + type?: Maybe +} + +/** order by max() on columns of table "listings" */ +export type Listings_Max_Order_By = { + amount?: InputMaybe + amount_left?: InputMaybe + ask_id?: InputMaybe + contract_address?: InputMaybe + created_at?: InputMaybe + currency?: InputMaybe + end_price?: InputMaybe + end_time?: InputMaybe + fa2_address?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + seller_address?: InputMaybe + start_price?: InputMaybe + status?: InputMaybe + swap_id?: InputMaybe + token_id?: InputMaybe + type?: InputMaybe +} + +/** aggregate min on columns */ +export type Listings_Min_Fields = { + __typename?: 'listings_min_fields' + amount?: Maybe + amount_left?: Maybe + ask_id?: Maybe + contract_address?: Maybe + created_at?: Maybe + currency?: Maybe + end_price?: Maybe + end_time?: Maybe + fa2_address?: Maybe + offer_id?: Maybe + price?: Maybe + seller_address?: Maybe + start_price?: Maybe + status?: Maybe + swap_id?: Maybe + token_id?: Maybe + type?: Maybe +} + +/** order by min() on columns of table "listings" */ +export type Listings_Min_Order_By = { + amount?: InputMaybe + amount_left?: InputMaybe + ask_id?: InputMaybe + contract_address?: InputMaybe + created_at?: InputMaybe + currency?: InputMaybe + end_price?: InputMaybe + end_time?: InputMaybe + fa2_address?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + seller_address?: InputMaybe + start_price?: InputMaybe + status?: InputMaybe + swap_id?: InputMaybe + token_id?: InputMaybe + type?: InputMaybe +} + +/** Ordering options when selecting data from "listings". */ +export type Listings_Order_By = { + amount?: InputMaybe + amount_left?: InputMaybe + ask_id?: InputMaybe + burn_on_end?: InputMaybe + contract_address?: InputMaybe + created_at?: InputMaybe + currency?: InputMaybe + end_price?: InputMaybe + end_time?: InputMaybe + fa2_address?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + seller_address?: InputMaybe + seller_profile?: InputMaybe + start_price?: InputMaybe + status?: InputMaybe + swap_id?: InputMaybe + token?: InputMaybe + token_id?: InputMaybe + type?: InputMaybe +} + +/** select columns of table "listings" */ +export enum Listings_Select_Column { + /** column name */ + Amount = 'amount', + /** column name */ + AmountLeft = 'amount_left', + /** column name */ + AskId = 'ask_id', + /** column name */ + BurnOnEnd = 'burn_on_end', + /** column name */ + ContractAddress = 'contract_address', + /** column name */ + CreatedAt = 'created_at', + /** column name */ + Currency = 'currency', + /** column name */ + EndPrice = 'end_price', + /** column name */ + EndTime = 'end_time', + /** column name */ + Fa2Address = 'fa2_address', + /** column name */ + OfferId = 'offer_id', + /** column name */ + Price = 'price', + /** column name */ + SellerAddress = 'seller_address', + /** column name */ + StartPrice = 'start_price', + /** column name */ + Status = 'status', + /** column name */ + SwapId = 'swap_id', + /** column name */ + TokenId = 'token_id', + /** column name */ + Type = 'type', +} + +/** aggregate stddev on columns */ +export type Listings_Stddev_Fields = { + __typename?: 'listings_stddev_fields' + amount?: Maybe + amount_left?: Maybe + ask_id?: Maybe + end_price?: Maybe + offer_id?: Maybe + price?: Maybe + start_price?: Maybe + swap_id?: Maybe +} + +/** order by stddev() on columns of table "listings" */ +export type Listings_Stddev_Order_By = { + amount?: InputMaybe + amount_left?: InputMaybe + ask_id?: InputMaybe + end_price?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe +} + +/** aggregate stddev_pop on columns */ +export type Listings_Stddev_Pop_Fields = { + __typename?: 'listings_stddev_pop_fields' + amount?: Maybe + amount_left?: Maybe + ask_id?: Maybe + end_price?: Maybe + offer_id?: Maybe + price?: Maybe + start_price?: Maybe + swap_id?: Maybe +} + +/** order by stddev_pop() on columns of table "listings" */ +export type Listings_Stddev_Pop_Order_By = { + amount?: InputMaybe + amount_left?: InputMaybe + ask_id?: InputMaybe + end_price?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe +} + +/** aggregate stddev_samp on columns */ +export type Listings_Stddev_Samp_Fields = { + __typename?: 'listings_stddev_samp_fields' + amount?: Maybe + amount_left?: Maybe + ask_id?: Maybe + end_price?: Maybe + offer_id?: Maybe + price?: Maybe + start_price?: Maybe + swap_id?: Maybe +} + +/** order by stddev_samp() on columns of table "listings" */ +export type Listings_Stddev_Samp_Order_By = { + amount?: InputMaybe + amount_left?: InputMaybe + ask_id?: InputMaybe + end_price?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe +} + +/** aggregate sum on columns */ +export type Listings_Sum_Fields = { + __typename?: 'listings_sum_fields' + amount?: Maybe + amount_left?: Maybe + ask_id?: Maybe + end_price?: Maybe + offer_id?: Maybe + price?: Maybe + start_price?: Maybe + swap_id?: Maybe +} + +/** order by sum() on columns of table "listings" */ +export type Listings_Sum_Order_By = { + amount?: InputMaybe + amount_left?: InputMaybe + ask_id?: InputMaybe + end_price?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe +} + +/** aggregate var_pop on columns */ +export type Listings_Var_Pop_Fields = { + __typename?: 'listings_var_pop_fields' + amount?: Maybe + amount_left?: Maybe + ask_id?: Maybe + end_price?: Maybe + offer_id?: Maybe + price?: Maybe + start_price?: Maybe + swap_id?: Maybe +} + +/** order by var_pop() on columns of table "listings" */ +export type Listings_Var_Pop_Order_By = { + amount?: InputMaybe + amount_left?: InputMaybe + ask_id?: InputMaybe + end_price?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe +} + +/** aggregate var_samp on columns */ +export type Listings_Var_Samp_Fields = { + __typename?: 'listings_var_samp_fields' + amount?: Maybe + amount_left?: Maybe + ask_id?: Maybe + end_price?: Maybe + offer_id?: Maybe + price?: Maybe + start_price?: Maybe + swap_id?: Maybe +} + +/** order by var_samp() on columns of table "listings" */ +export type Listings_Var_Samp_Order_By = { + amount?: InputMaybe + amount_left?: InputMaybe + ask_id?: InputMaybe + end_price?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe +} + +/** aggregate variance on columns */ +export type Listings_Variance_Fields = { + __typename?: 'listings_variance_fields' + amount?: Maybe + amount_left?: Maybe + ask_id?: Maybe + end_price?: Maybe + offer_id?: Maybe + price?: Maybe + start_price?: Maybe + swap_id?: Maybe +} + +/** order by variance() on columns of table "listings" */ +export type Listings_Variance_Order_By = { + amount?: InputMaybe + amount_left?: InputMaybe + ask_id?: InputMaybe + end_price?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + start_price?: InputMaybe + swap_id?: InputMaybe +} + +/** columns and relationships of "offers" */ +export type Offers = { + __typename?: 'offers' + amount?: Maybe + bid_id?: Maybe + buyer_address: Scalars['String'] + contract_address: Scalars['String'] + created_at: Scalars['timestamptz'] + currency?: Maybe + fa2_address: Scalars['String'] + offer_id?: Maybe + price: Scalars['bigint'] + status: Scalars['String'] + /** An object relationship */ + token?: Maybe + token_id: Scalars['String'] + type: Scalars['String'] +} + +/** aggregated selection of "offers" */ +export type Offers_Aggregate = { + __typename?: 'offers_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "offers" */ +export type Offers_Aggregate_Fields = { + __typename?: 'offers_aggregate_fields' + avg?: Maybe + count: Scalars['Int'] + max?: Maybe + min?: Maybe + stddev?: Maybe + stddev_pop?: Maybe + stddev_samp?: Maybe + sum?: Maybe + var_pop?: Maybe + var_samp?: Maybe + variance?: Maybe +} + +/** aggregate fields of "offers" */ +export type Offers_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** order by aggregate values of table "offers" */ +export type Offers_Aggregate_Order_By = { + avg?: InputMaybe + count?: InputMaybe + max?: InputMaybe + min?: InputMaybe + stddev?: InputMaybe + stddev_pop?: InputMaybe + stddev_samp?: InputMaybe + sum?: InputMaybe + var_pop?: InputMaybe + var_samp?: InputMaybe + variance?: InputMaybe +} + +/** aggregate avg on columns */ +export type Offers_Avg_Fields = { + __typename?: 'offers_avg_fields' + amount?: Maybe + bid_id?: Maybe + offer_id?: Maybe + price?: Maybe +} + +/** order by avg() on columns of table "offers" */ +export type Offers_Avg_Order_By = { + amount?: InputMaybe + bid_id?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe +} + +/** Boolean expression to filter rows from the table "offers". All fields are combined with a logical 'AND'. */ +export type Offers_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + amount?: InputMaybe + bid_id?: InputMaybe + buyer_address?: InputMaybe + contract_address?: InputMaybe + created_at?: InputMaybe + currency?: InputMaybe + fa2_address?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + status?: InputMaybe + token?: InputMaybe + token_id?: InputMaybe + type?: InputMaybe +} + +/** aggregate max on columns */ +export type Offers_Max_Fields = { + __typename?: 'offers_max_fields' + amount?: Maybe + bid_id?: Maybe + buyer_address?: Maybe + contract_address?: Maybe + created_at?: Maybe + currency?: Maybe + fa2_address?: Maybe + offer_id?: Maybe + price?: Maybe + status?: Maybe + token_id?: Maybe + type?: Maybe +} + +/** order by max() on columns of table "offers" */ +export type Offers_Max_Order_By = { + amount?: InputMaybe + bid_id?: InputMaybe + buyer_address?: InputMaybe + contract_address?: InputMaybe + created_at?: InputMaybe + currency?: InputMaybe + fa2_address?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + status?: InputMaybe + token_id?: InputMaybe + type?: InputMaybe +} + +/** aggregate min on columns */ +export type Offers_Min_Fields = { + __typename?: 'offers_min_fields' + amount?: Maybe + bid_id?: Maybe + buyer_address?: Maybe + contract_address?: Maybe + created_at?: Maybe + currency?: Maybe + fa2_address?: Maybe + offer_id?: Maybe + price?: Maybe + status?: Maybe + token_id?: Maybe + type?: Maybe +} + +/** order by min() on columns of table "offers" */ +export type Offers_Min_Order_By = { + amount?: InputMaybe + bid_id?: InputMaybe + buyer_address?: InputMaybe + contract_address?: InputMaybe + created_at?: InputMaybe + currency?: InputMaybe + fa2_address?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + status?: InputMaybe + token_id?: InputMaybe + type?: InputMaybe +} + +/** Ordering options when selecting data from "offers". */ +export type Offers_Order_By = { + amount?: InputMaybe + bid_id?: InputMaybe + buyer_address?: InputMaybe + contract_address?: InputMaybe + created_at?: InputMaybe + currency?: InputMaybe + fa2_address?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe + status?: InputMaybe + token?: InputMaybe + token_id?: InputMaybe + type?: InputMaybe +} + +/** select columns of table "offers" */ +export enum Offers_Select_Column { + /** column name */ + Amount = 'amount', + /** column name */ + BidId = 'bid_id', + /** column name */ + BuyerAddress = 'buyer_address', + /** column name */ + ContractAddress = 'contract_address', + /** column name */ + CreatedAt = 'created_at', + /** column name */ + Currency = 'currency', + /** column name */ + Fa2Address = 'fa2_address', + /** column name */ + OfferId = 'offer_id', + /** column name */ + Price = 'price', + /** column name */ + Status = 'status', + /** column name */ + TokenId = 'token_id', + /** column name */ + Type = 'type', +} + +/** aggregate stddev on columns */ +export type Offers_Stddev_Fields = { + __typename?: 'offers_stddev_fields' + amount?: Maybe + bid_id?: Maybe + offer_id?: Maybe + price?: Maybe +} + +/** order by stddev() on columns of table "offers" */ +export type Offers_Stddev_Order_By = { + amount?: InputMaybe + bid_id?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe +} + +/** aggregate stddev_pop on columns */ +export type Offers_Stddev_Pop_Fields = { + __typename?: 'offers_stddev_pop_fields' + amount?: Maybe + bid_id?: Maybe + offer_id?: Maybe + price?: Maybe +} + +/** order by stddev_pop() on columns of table "offers" */ +export type Offers_Stddev_Pop_Order_By = { + amount?: InputMaybe + bid_id?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe +} + +/** aggregate stddev_samp on columns */ +export type Offers_Stddev_Samp_Fields = { + __typename?: 'offers_stddev_samp_fields' + amount?: Maybe + bid_id?: Maybe + offer_id?: Maybe + price?: Maybe +} + +/** order by stddev_samp() on columns of table "offers" */ +export type Offers_Stddev_Samp_Order_By = { + amount?: InputMaybe + bid_id?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe +} + +/** aggregate sum on columns */ +export type Offers_Sum_Fields = { + __typename?: 'offers_sum_fields' + amount?: Maybe + bid_id?: Maybe + offer_id?: Maybe + price?: Maybe +} + +/** order by sum() on columns of table "offers" */ +export type Offers_Sum_Order_By = { + amount?: InputMaybe + bid_id?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe +} + +/** aggregate var_pop on columns */ +export type Offers_Var_Pop_Fields = { + __typename?: 'offers_var_pop_fields' + amount?: Maybe + bid_id?: Maybe + offer_id?: Maybe + price?: Maybe +} + +/** order by var_pop() on columns of table "offers" */ +export type Offers_Var_Pop_Order_By = { + amount?: InputMaybe + bid_id?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe +} + +/** aggregate var_samp on columns */ +export type Offers_Var_Samp_Fields = { + __typename?: 'offers_var_samp_fields' + amount?: Maybe + bid_id?: Maybe + offer_id?: Maybe + price?: Maybe +} + +/** order by var_samp() on columns of table "offers" */ +export type Offers_Var_Samp_Order_By = { + amount?: InputMaybe + bid_id?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe +} + +/** aggregate variance on columns */ +export type Offers_Variance_Fields = { + __typename?: 'offers_variance_fields' + amount?: Maybe + bid_id?: Maybe + offer_id?: Maybe + price?: Maybe +} + +/** order by variance() on columns of table "offers" */ +export type Offers_Variance_Order_By = { + amount?: InputMaybe + bid_id?: InputMaybe + offer_id?: InputMaybe + price?: InputMaybe +} + +/** column ordering options */ +export enum Order_By { + /** in ascending order, nulls last */ + Asc = 'asc', + /** in ascending order, nulls first */ + AscNullsFirst = 'asc_nulls_first', + /** in ascending order, nulls last */ + AscNullsLast = 'asc_nulls_last', + /** in descending order, nulls first */ + Desc = 'desc', + /** in descending order, nulls first */ + DescNullsFirst = 'desc_nulls_first', + /** in descending order, nulls last */ + DescNullsLast = 'desc_nulls_last', +} + +export type Query_Root = { + __typename?: 'query_root' + /** fetch data from the table: "dipdup_contract" */ + dipdup_contract: Array + /** fetch aggregated fields from the table: "dipdup_contract" */ + dipdup_contract_aggregate: Dipdup_Contract_Aggregate + /** fetch data from the table: "dipdup_contract" using primary key columns */ + dipdup_contract_by_pk?: Maybe + /** fetch data from the table: "dipdup_contract_metadata" */ + dipdup_contract_metadata: Array + /** fetch aggregated fields from the table: "dipdup_contract_metadata" */ + dipdup_contract_metadata_aggregate: Dipdup_Contract_Metadata_Aggregate + /** fetch data from the table: "dipdup_contract_metadata" using primary key columns */ + dipdup_contract_metadata_by_pk?: Maybe + /** fetch data from the table: "dipdup_head" */ + dipdup_head: Array + /** fetch aggregated fields from the table: "dipdup_head" */ + dipdup_head_aggregate: Dipdup_Head_Aggregate + /** fetch data from the table: "dipdup_head" using primary key columns */ + dipdup_head_by_pk?: Maybe + /** fetch data from the table: "dipdup_head_status" */ + dipdup_head_status: Array + /** fetch aggregated fields from the table: "dipdup_head_status" */ + dipdup_head_status_aggregate: Dipdup_Head_Status_Aggregate + /** fetch data from the table: "dipdup_index" */ + dipdup_index: Array + /** fetch aggregated fields from the table: "dipdup_index" */ + dipdup_index_aggregate: Dipdup_Index_Aggregate + /** fetch data from the table: "dipdup_index" using primary key columns */ + dipdup_index_by_pk?: Maybe + /** fetch data from the table: "dipdup_model_update" */ + dipdup_model_update: Array + /** fetch aggregated fields from the table: "dipdup_model_update" */ + dipdup_model_update_aggregate: Dipdup_Model_Update_Aggregate + /** fetch data from the table: "dipdup_model_update" using primary key columns */ + dipdup_model_update_by_pk?: Maybe + /** fetch data from the table: "dipdup_schema" */ + dipdup_schema: Array + /** fetch aggregated fields from the table: "dipdup_schema" */ + dipdup_schema_aggregate: Dipdup_Schema_Aggregate + /** fetch data from the table: "dipdup_schema" using primary key columns */ + dipdup_schema_by_pk?: Maybe + /** fetch data from the table: "dipdup_token_metadata" */ + dipdup_token_metadata: Array + /** fetch aggregated fields from the table: "dipdup_token_metadata" */ + dipdup_token_metadata_aggregate: Dipdup_Token_Metadata_Aggregate + /** fetch data from the table: "dipdup_token_metadata" using primary key columns */ + dipdup_token_metadata_by_pk?: Maybe + /** An array relationship */ + events: Array + /** An aggregate relationship */ + events_aggregate: Events_Aggregate + /** fetch data from the table: "events" using primary key columns */ + events_by_pk?: Maybe + /** An array relationship */ + holdings: Array + /** An aggregate relationship */ + holdings_aggregate: Holdings_Aggregate + /** fetch data from the table: "holdings" using primary key columns */ + holdings_by_pk?: Maybe + /** An array relationship */ + listings: Array + /** An aggregate relationship */ + listings_aggregate: Listings_Aggregate + /** An array relationship */ + offers: Array + /** An aggregate relationship */ + offers_aggregate: Offers_Aggregate + /** An array relationship */ + royalty_receivers: Array + /** fetch data from the table: "royalty_receivers" using primary key columns */ + royalty_receivers_by_pk?: Maybe + /** An array relationship */ + tags: Array + /** fetch data from the table: "tags" using primary key columns */ + tags_by_pk?: Maybe + /** fetch data from the table: "teia_shareholders" */ + teia_shareholders: Array + /** fetch data from the table: "teia_shareholders" using primary key columns */ + teia_shareholders_by_pk?: Maybe + /** fetch data from the table: "teia_signatures" */ + teia_signatures: Array + /** fetch data from the table: "teia_signatures" using primary key columns */ + teia_signatures_by_pk?: Maybe + /** fetch data from the table: "teia_split_contracts" */ + teia_split_contracts: Array + /** fetch data from the table: "teia_split_contracts" using primary key columns */ + teia_split_contracts_by_pk?: Maybe + /** fetch data from the table: "teia_tokens_meta" */ + teia_tokens_meta: Array + /** fetch data from the table: "teia_tokens_meta" using primary key columns */ + teia_tokens_meta_by_pk?: Maybe + /** fetch data from the table: "teia_users" */ + teia_users: Array + /** fetch data from the table: "teia_users" using primary key columns */ + teia_users_by_pk?: Maybe + /** fetch data from the table: "token_metadata" */ + token_metadata: Array + /** fetch data from the table: "tokens" */ + tokens: Array + /** fetch aggregated fields from the table: "tokens" */ + tokens_aggregate: Tokens_Aggregate + /** fetch data from the table: "tokens" using primary key columns */ + tokens_by_pk?: Maybe + /** fetch data from the table: "tzprofiles" */ + tzprofiles: Array + /** fetch aggregated fields from the table: "tzprofiles" */ + tzprofiles_aggregate: Tzprofiles_Aggregate + /** fetch data from the table: "tzprofiles" using primary key columns */ + tzprofiles_by_pk?: Maybe +} + +export type Query_RootDipdup_ContractArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Contract_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Contract_By_PkArgs = { + name: Scalars['String'] +} + +export type Query_RootDipdup_Contract_MetadataArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Contract_Metadata_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Contract_Metadata_By_PkArgs = { + id: Scalars['Int'] +} + +export type Query_RootDipdup_HeadArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Head_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Head_By_PkArgs = { + name: Scalars['String'] +} + +export type Query_RootDipdup_Head_StatusArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Head_Status_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_IndexArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Index_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Index_By_PkArgs = { + name: Scalars['String'] +} + +export type Query_RootDipdup_Model_UpdateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Model_Update_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Model_Update_By_PkArgs = { + id: Scalars['Int'] +} + +export type Query_RootDipdup_SchemaArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Schema_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Schema_By_PkArgs = { + name: Scalars['String'] +} + +export type Query_RootDipdup_Token_MetadataArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Token_Metadata_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootDipdup_Token_Metadata_By_PkArgs = { + id: Scalars['Int'] +} + +export type Query_RootEventsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootEvents_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootEvents_By_PkArgs = { + id: Scalars['String'] +} + +export type Query_RootHoldingsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootHoldings_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootHoldings_By_PkArgs = { + fa2_address: Scalars['String'] + holder_address: Scalars['String'] + token_id: Scalars['String'] +} + +export type Query_RootListingsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootListings_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootOffersArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootOffers_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootRoyalty_ReceiversArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootRoyalty_Receivers_By_PkArgs = { + fa2_address: Scalars['String'] + receiver_address: Scalars['String'] + token_id: Scalars['String'] +} + +export type Query_RootTagsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootTags_By_PkArgs = { + fa2_address: Scalars['String'] + tag: Scalars['String'] + token_id: Scalars['String'] +} + +export type Query_RootTeia_ShareholdersArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootTeia_Shareholders_By_PkArgs = { + contract_address: Scalars['String'] + holder_type: Scalars['String'] + shareholder_address: Scalars['String'] +} + +export type Query_RootTeia_SignaturesArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootTeia_Signatures_By_PkArgs = { + fa2_address: Scalars['String'] + shareholder_address: Scalars['String'] + token_id: Scalars['String'] +} + +export type Query_RootTeia_Split_ContractsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootTeia_Split_Contracts_By_PkArgs = { + contract_address: Scalars['String'] +} + +export type Query_RootTeia_Tokens_MetaArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootTeia_Tokens_Meta_By_PkArgs = { + fa2_address: Scalars['String'] + token_id: Scalars['String'] +} + +export type Query_RootTeia_UsersArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootTeia_Users_By_PkArgs = { + user_address: Scalars['String'] +} + +export type Query_RootToken_MetadataArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootTokensArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootTokens_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootTokens_By_PkArgs = { + fa2_address: Scalars['String'] + token_id: Scalars['String'] +} + +export type Query_RootTzprofilesArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootTzprofiles_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Query_RootTzprofiles_By_PkArgs = { + account: Scalars['String'] +} + +/** columns and relationships of "royalty_receivers" */ +export type Royalty_Receivers = { + __typename?: 'royalty_receivers' + fa2_address: Scalars['String'] + receiver_address: Scalars['String'] + royalties: Scalars['bigint'] + /** An object relationship */ + token?: Maybe + token_id: Scalars['String'] +} + +/** order by aggregate values of table "royalty_receivers" */ +export type Royalty_Receivers_Aggregate_Order_By = { + avg?: InputMaybe + count?: InputMaybe + max?: InputMaybe + min?: InputMaybe + stddev?: InputMaybe + stddev_pop?: InputMaybe + stddev_samp?: InputMaybe + sum?: InputMaybe + var_pop?: InputMaybe + var_samp?: InputMaybe + variance?: InputMaybe +} + +/** order by avg() on columns of table "royalty_receivers" */ +export type Royalty_Receivers_Avg_Order_By = { + royalties?: InputMaybe +} + +/** Boolean expression to filter rows from the table "royalty_receivers". All fields are combined with a logical 'AND'. */ +export type Royalty_Receivers_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + fa2_address?: InputMaybe + receiver_address?: InputMaybe + royalties?: InputMaybe + token?: InputMaybe + token_id?: InputMaybe +} + +/** order by max() on columns of table "royalty_receivers" */ +export type Royalty_Receivers_Max_Order_By = { + fa2_address?: InputMaybe + receiver_address?: InputMaybe + royalties?: InputMaybe + token_id?: InputMaybe +} + +/** order by min() on columns of table "royalty_receivers" */ +export type Royalty_Receivers_Min_Order_By = { + fa2_address?: InputMaybe + receiver_address?: InputMaybe + royalties?: InputMaybe + token_id?: InputMaybe +} + +/** Ordering options when selecting data from "royalty_receivers". */ +export type Royalty_Receivers_Order_By = { + fa2_address?: InputMaybe + receiver_address?: InputMaybe + royalties?: InputMaybe + token?: InputMaybe + token_id?: InputMaybe +} + +/** select columns of table "royalty_receivers" */ +export enum Royalty_Receivers_Select_Column { + /** column name */ + Fa2Address = 'fa2_address', + /** column name */ + ReceiverAddress = 'receiver_address', + /** column name */ + Royalties = 'royalties', + /** column name */ + TokenId = 'token_id', +} + +/** order by stddev() on columns of table "royalty_receivers" */ +export type Royalty_Receivers_Stddev_Order_By = { + royalties?: InputMaybe +} + +/** order by stddev_pop() on columns of table "royalty_receivers" */ +export type Royalty_Receivers_Stddev_Pop_Order_By = { + royalties?: InputMaybe +} + +/** order by stddev_samp() on columns of table "royalty_receivers" */ +export type Royalty_Receivers_Stddev_Samp_Order_By = { + royalties?: InputMaybe +} + +/** order by sum() on columns of table "royalty_receivers" */ +export type Royalty_Receivers_Sum_Order_By = { + royalties?: InputMaybe +} + +/** order by var_pop() on columns of table "royalty_receivers" */ +export type Royalty_Receivers_Var_Pop_Order_By = { + royalties?: InputMaybe +} + +/** order by var_samp() on columns of table "royalty_receivers" */ +export type Royalty_Receivers_Var_Samp_Order_By = { + royalties?: InputMaybe +} + +/** order by variance() on columns of table "royalty_receivers" */ +export type Royalty_Receivers_Variance_Order_By = { + royalties?: InputMaybe +} + +export type Subscription_Root = { + __typename?: 'subscription_root' + /** fetch data from the table: "dipdup_contract" */ + dipdup_contract: Array + /** fetch aggregated fields from the table: "dipdup_contract" */ + dipdup_contract_aggregate: Dipdup_Contract_Aggregate + /** fetch data from the table: "dipdup_contract" using primary key columns */ + dipdup_contract_by_pk?: Maybe + /** fetch data from the table: "dipdup_contract_metadata" */ + dipdup_contract_metadata: Array + /** fetch aggregated fields from the table: "dipdup_contract_metadata" */ + dipdup_contract_metadata_aggregate: Dipdup_Contract_Metadata_Aggregate + /** fetch data from the table: "dipdup_contract_metadata" using primary key columns */ + dipdup_contract_metadata_by_pk?: Maybe + /** fetch data from the table in a streaming manner: "dipdup_contract_metadata" */ + dipdup_contract_metadata_stream: Array + /** fetch data from the table in a streaming manner: "dipdup_contract" */ + dipdup_contract_stream: Array + /** fetch data from the table: "dipdup_head" */ + dipdup_head: Array + /** fetch aggregated fields from the table: "dipdup_head" */ + dipdup_head_aggregate: Dipdup_Head_Aggregate + /** fetch data from the table: "dipdup_head" using primary key columns */ + dipdup_head_by_pk?: Maybe + /** fetch data from the table: "dipdup_head_status" */ + dipdup_head_status: Array + /** fetch aggregated fields from the table: "dipdup_head_status" */ + dipdup_head_status_aggregate: Dipdup_Head_Status_Aggregate + /** fetch data from the table in a streaming manner: "dipdup_head_status" */ + dipdup_head_status_stream: Array + /** fetch data from the table in a streaming manner: "dipdup_head" */ + dipdup_head_stream: Array + /** fetch data from the table: "dipdup_index" */ + dipdup_index: Array + /** fetch aggregated fields from the table: "dipdup_index" */ + dipdup_index_aggregate: Dipdup_Index_Aggregate + /** fetch data from the table: "dipdup_index" using primary key columns */ + dipdup_index_by_pk?: Maybe + /** fetch data from the table in a streaming manner: "dipdup_index" */ + dipdup_index_stream: Array + /** fetch data from the table: "dipdup_model_update" */ + dipdup_model_update: Array + /** fetch aggregated fields from the table: "dipdup_model_update" */ + dipdup_model_update_aggregate: Dipdup_Model_Update_Aggregate + /** fetch data from the table: "dipdup_model_update" using primary key columns */ + dipdup_model_update_by_pk?: Maybe + /** fetch data from the table in a streaming manner: "dipdup_model_update" */ + dipdup_model_update_stream: Array + /** fetch data from the table: "dipdup_schema" */ + dipdup_schema: Array + /** fetch aggregated fields from the table: "dipdup_schema" */ + dipdup_schema_aggregate: Dipdup_Schema_Aggregate + /** fetch data from the table: "dipdup_schema" using primary key columns */ + dipdup_schema_by_pk?: Maybe + /** fetch data from the table in a streaming manner: "dipdup_schema" */ + dipdup_schema_stream: Array + /** fetch data from the table: "dipdup_token_metadata" */ + dipdup_token_metadata: Array + /** fetch aggregated fields from the table: "dipdup_token_metadata" */ + dipdup_token_metadata_aggregate: Dipdup_Token_Metadata_Aggregate + /** fetch data from the table: "dipdup_token_metadata" using primary key columns */ + dipdup_token_metadata_by_pk?: Maybe + /** fetch data from the table in a streaming manner: "dipdup_token_metadata" */ + dipdup_token_metadata_stream: Array + /** An array relationship */ + events: Array + /** An aggregate relationship */ + events_aggregate: Events_Aggregate + /** fetch data from the table: "events" using primary key columns */ + events_by_pk?: Maybe + /** An array relationship */ + holdings: Array + /** An aggregate relationship */ + holdings_aggregate: Holdings_Aggregate + /** fetch data from the table: "holdings" using primary key columns */ + holdings_by_pk?: Maybe + /** An array relationship */ + listings: Array + /** An aggregate relationship */ + listings_aggregate: Listings_Aggregate + /** An array relationship */ + offers: Array + /** An aggregate relationship */ + offers_aggregate: Offers_Aggregate + /** An array relationship */ + royalty_receivers: Array + /** fetch data from the table: "royalty_receivers" using primary key columns */ + royalty_receivers_by_pk?: Maybe + /** An array relationship */ + tags: Array + /** fetch data from the table: "tags" using primary key columns */ + tags_by_pk?: Maybe + /** fetch data from the table: "teia_shareholders" */ + teia_shareholders: Array + /** fetch data from the table: "teia_shareholders" using primary key columns */ + teia_shareholders_by_pk?: Maybe + /** fetch data from the table: "teia_signatures" */ + teia_signatures: Array + /** fetch data from the table: "teia_signatures" using primary key columns */ + teia_signatures_by_pk?: Maybe + /** fetch data from the table: "teia_split_contracts" */ + teia_split_contracts: Array + /** fetch data from the table: "teia_split_contracts" using primary key columns */ + teia_split_contracts_by_pk?: Maybe + /** fetch data from the table: "teia_tokens_meta" */ + teia_tokens_meta: Array + /** fetch data from the table: "teia_tokens_meta" using primary key columns */ + teia_tokens_meta_by_pk?: Maybe + /** fetch data from the table: "teia_users" */ + teia_users: Array + /** fetch data from the table: "teia_users" using primary key columns */ + teia_users_by_pk?: Maybe + /** fetch data from the table: "token_metadata" */ + token_metadata: Array + /** fetch data from the table: "tokens" */ + tokens: Array + /** fetch aggregated fields from the table: "tokens" */ + tokens_aggregate: Tokens_Aggregate + /** fetch data from the table: "tokens" using primary key columns */ + tokens_by_pk?: Maybe + /** fetch data from the table: "tzprofiles" */ + tzprofiles: Array + /** fetch aggregated fields from the table: "tzprofiles" */ + tzprofiles_aggregate: Tzprofiles_Aggregate + /** fetch data from the table: "tzprofiles" using primary key columns */ + tzprofiles_by_pk?: Maybe + /** fetch data from the table in a streaming manner: "tzprofiles" */ + tzprofiles_stream: Array +} + +export type Subscription_RootDipdup_ContractArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Contract_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Contract_By_PkArgs = { + name: Scalars['String'] +} + +export type Subscription_RootDipdup_Contract_MetadataArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Contract_Metadata_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Contract_Metadata_By_PkArgs = { + id: Scalars['Int'] +} + +export type Subscription_RootDipdup_Contract_Metadata_StreamArgs = { + batch_size: Scalars['Int'] + cursor: Array> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Contract_StreamArgs = { + batch_size: Scalars['Int'] + cursor: Array> + where?: InputMaybe +} + +export type Subscription_RootDipdup_HeadArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Head_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Head_By_PkArgs = { + name: Scalars['String'] +} + +export type Subscription_RootDipdup_Head_StatusArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Head_Status_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Head_Status_StreamArgs = { + batch_size: Scalars['Int'] + cursor: Array> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Head_StreamArgs = { + batch_size: Scalars['Int'] + cursor: Array> + where?: InputMaybe +} + +export type Subscription_RootDipdup_IndexArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Index_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Index_By_PkArgs = { + name: Scalars['String'] +} + +export type Subscription_RootDipdup_Index_StreamArgs = { + batch_size: Scalars['Int'] + cursor: Array> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Model_UpdateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Model_Update_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Model_Update_By_PkArgs = { + id: Scalars['Int'] +} + +export type Subscription_RootDipdup_Model_Update_StreamArgs = { + batch_size: Scalars['Int'] + cursor: Array> + where?: InputMaybe +} + +export type Subscription_RootDipdup_SchemaArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Schema_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Schema_By_PkArgs = { + name: Scalars['String'] +} + +export type Subscription_RootDipdup_Schema_StreamArgs = { + batch_size: Scalars['Int'] + cursor: Array> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Token_MetadataArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Token_Metadata_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootDipdup_Token_Metadata_By_PkArgs = { + id: Scalars['Int'] +} + +export type Subscription_RootDipdup_Token_Metadata_StreamArgs = { + batch_size: Scalars['Int'] + cursor: Array> + where?: InputMaybe +} + +export type Subscription_RootEventsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootEvents_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootEvents_By_PkArgs = { + id: Scalars['String'] +} + +export type Subscription_RootHoldingsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootHoldings_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootHoldings_By_PkArgs = { + fa2_address: Scalars['String'] + holder_address: Scalars['String'] + token_id: Scalars['String'] +} + +export type Subscription_RootListingsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootListings_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootOffersArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootOffers_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootRoyalty_ReceiversArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootRoyalty_Receivers_By_PkArgs = { + fa2_address: Scalars['String'] + receiver_address: Scalars['String'] + token_id: Scalars['String'] +} + +export type Subscription_RootTagsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootTags_By_PkArgs = { + fa2_address: Scalars['String'] + tag: Scalars['String'] + token_id: Scalars['String'] +} + +export type Subscription_RootTeia_ShareholdersArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootTeia_Shareholders_By_PkArgs = { + contract_address: Scalars['String'] + holder_type: Scalars['String'] + shareholder_address: Scalars['String'] +} + +export type Subscription_RootTeia_SignaturesArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootTeia_Signatures_By_PkArgs = { + fa2_address: Scalars['String'] + shareholder_address: Scalars['String'] + token_id: Scalars['String'] +} + +export type Subscription_RootTeia_Split_ContractsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootTeia_Split_Contracts_By_PkArgs = { + contract_address: Scalars['String'] +} + +export type Subscription_RootTeia_Tokens_MetaArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootTeia_Tokens_Meta_By_PkArgs = { + fa2_address: Scalars['String'] + token_id: Scalars['String'] +} + +export type Subscription_RootTeia_UsersArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootTeia_Users_By_PkArgs = { + user_address: Scalars['String'] +} + +export type Subscription_RootToken_MetadataArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootTokensArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootTokens_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootTokens_By_PkArgs = { + fa2_address: Scalars['String'] + token_id: Scalars['String'] +} + +export type Subscription_RootTzprofilesArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootTzprofiles_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +export type Subscription_RootTzprofiles_By_PkArgs = { + account: Scalars['String'] +} + +export type Subscription_RootTzprofiles_StreamArgs = { + batch_size: Scalars['Int'] + cursor: Array> + where?: InputMaybe +} + +/** columns and relationships of "tags" */ +export type Tags = { + __typename?: 'tags' + fa2_address: Scalars['String'] + tag: Scalars['String'] + /** An object relationship */ + token?: Maybe + token_id: Scalars['String'] +} + +/** order by aggregate values of table "tags" */ +export type Tags_Aggregate_Order_By = { + count?: InputMaybe + max?: InputMaybe + min?: InputMaybe +} + +/** Boolean expression to filter rows from the table "tags". All fields are combined with a logical 'AND'. */ +export type Tags_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + fa2_address?: InputMaybe + tag?: InputMaybe + token?: InputMaybe + token_id?: InputMaybe +} + +/** order by max() on columns of table "tags" */ +export type Tags_Max_Order_By = { + fa2_address?: InputMaybe + tag?: InputMaybe + token_id?: InputMaybe +} + +/** order by min() on columns of table "tags" */ +export type Tags_Min_Order_By = { + fa2_address?: InputMaybe + tag?: InputMaybe + token_id?: InputMaybe +} + +/** Ordering options when selecting data from "tags". */ +export type Tags_Order_By = { + fa2_address?: InputMaybe + tag?: InputMaybe + token?: InputMaybe + token_id?: InputMaybe +} + +/** select columns of table "tags" */ +export enum Tags_Select_Column { + /** column name */ + Fa2Address = 'fa2_address', + /** column name */ + Tag = 'tag', + /** column name */ + TokenId = 'token_id', +} + +/** columns and relationships of "teia_shareholders" */ +export type Teia_Shareholders = { + __typename?: 'teia_shareholders' + contract_address: Scalars['String'] + holder_type: Scalars['String'] + shareholder_address: Scalars['String'] + /** An object relationship */ + shareholder_profile?: Maybe + shares?: Maybe + /** An array relationship */ + signatures: Array + /** An object relationship */ + split_contract?: Maybe +} + +/** columns and relationships of "teia_shareholders" */ +export type Teia_ShareholdersSignaturesArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** order by aggregate values of table "teia_shareholders" */ +export type Teia_Shareholders_Aggregate_Order_By = { + avg?: InputMaybe + count?: InputMaybe + max?: InputMaybe + min?: InputMaybe + stddev?: InputMaybe + stddev_pop?: InputMaybe + stddev_samp?: InputMaybe + sum?: InputMaybe + var_pop?: InputMaybe + var_samp?: InputMaybe + variance?: InputMaybe +} + +/** order by avg() on columns of table "teia_shareholders" */ +export type Teia_Shareholders_Avg_Order_By = { + shares?: InputMaybe +} + +/** Boolean expression to filter rows from the table "teia_shareholders". All fields are combined with a logical 'AND'. */ +export type Teia_Shareholders_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + contract_address?: InputMaybe + holder_type?: InputMaybe + shareholder_address?: InputMaybe + shareholder_profile?: InputMaybe + shares?: InputMaybe + signatures?: InputMaybe + split_contract?: InputMaybe +} + +/** order by max() on columns of table "teia_shareholders" */ +export type Teia_Shareholders_Max_Order_By = { + contract_address?: InputMaybe + holder_type?: InputMaybe + shareholder_address?: InputMaybe + shares?: InputMaybe +} + +/** order by min() on columns of table "teia_shareholders" */ +export type Teia_Shareholders_Min_Order_By = { + contract_address?: InputMaybe + holder_type?: InputMaybe + shareholder_address?: InputMaybe + shares?: InputMaybe +} + +/** Ordering options when selecting data from "teia_shareholders". */ +export type Teia_Shareholders_Order_By = { + contract_address?: InputMaybe + holder_type?: InputMaybe + shareholder_address?: InputMaybe + shareholder_profile?: InputMaybe + shares?: InputMaybe + signatures_aggregate?: InputMaybe + split_contract?: InputMaybe +} + +/** select columns of table "teia_shareholders" */ +export enum Teia_Shareholders_Select_Column { + /** column name */ + ContractAddress = 'contract_address', + /** column name */ + HolderType = 'holder_type', + /** column name */ + ShareholderAddress = 'shareholder_address', + /** column name */ + Shares = 'shares', +} + +/** order by stddev() on columns of table "teia_shareholders" */ +export type Teia_Shareholders_Stddev_Order_By = { + shares?: InputMaybe +} + +/** order by stddev_pop() on columns of table "teia_shareholders" */ +export type Teia_Shareholders_Stddev_Pop_Order_By = { + shares?: InputMaybe +} + +/** order by stddev_samp() on columns of table "teia_shareholders" */ +export type Teia_Shareholders_Stddev_Samp_Order_By = { + shares?: InputMaybe +} + +/** order by sum() on columns of table "teia_shareholders" */ +export type Teia_Shareholders_Sum_Order_By = { + shares?: InputMaybe +} + +/** order by var_pop() on columns of table "teia_shareholders" */ +export type Teia_Shareholders_Var_Pop_Order_By = { + shares?: InputMaybe +} + +/** order by var_samp() on columns of table "teia_shareholders" */ +export type Teia_Shareholders_Var_Samp_Order_By = { + shares?: InputMaybe +} + +/** order by variance() on columns of table "teia_shareholders" */ +export type Teia_Shareholders_Variance_Order_By = { + shares?: InputMaybe +} + +/** columns and relationships of "teia_signatures" */ +export type Teia_Signatures = { + __typename?: 'teia_signatures' + fa2_address: Scalars['String'] + shareholder_address: Scalars['String'] + token_id: Scalars['String'] +} + +/** order by aggregate values of table "teia_signatures" */ +export type Teia_Signatures_Aggregate_Order_By = { + count?: InputMaybe + max?: InputMaybe + min?: InputMaybe +} + +/** Boolean expression to filter rows from the table "teia_signatures". All fields are combined with a logical 'AND'. */ +export type Teia_Signatures_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + fa2_address?: InputMaybe + shareholder_address?: InputMaybe + token_id?: InputMaybe +} + +/** order by max() on columns of table "teia_signatures" */ +export type Teia_Signatures_Max_Order_By = { + fa2_address?: InputMaybe + shareholder_address?: InputMaybe + token_id?: InputMaybe +} + +/** order by min() on columns of table "teia_signatures" */ +export type Teia_Signatures_Min_Order_By = { + fa2_address?: InputMaybe + shareholder_address?: InputMaybe + token_id?: InputMaybe +} + +/** Ordering options when selecting data from "teia_signatures". */ +export type Teia_Signatures_Order_By = { + fa2_address?: InputMaybe + shareholder_address?: InputMaybe + token_id?: InputMaybe +} + +/** select columns of table "teia_signatures" */ +export enum Teia_Signatures_Select_Column { + /** column name */ + Fa2Address = 'fa2_address', + /** column name */ + ShareholderAddress = 'shareholder_address', + /** column name */ + TokenId = 'token_id', +} + +/** columns and relationships of "teia_split_contracts" */ +export type Teia_Split_Contracts = { + __typename?: 'teia_split_contracts' + administrator_address: Scalars['String'] + contract_address: Scalars['String'] + /** An object relationship */ + contract_profile?: Maybe + /** An array relationship */ + created_tokens: Array + /** An aggregate relationship */ + created_tokens_aggregate: Tokens_Aggregate + /** An array relationship */ + shareholders: Array + total_shares?: Maybe +} + +/** columns and relationships of "teia_split_contracts" */ +export type Teia_Split_ContractsCreated_TokensArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** columns and relationships of "teia_split_contracts" */ +export type Teia_Split_ContractsCreated_Tokens_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** columns and relationships of "teia_split_contracts" */ +export type Teia_Split_ContractsShareholdersArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** Boolean expression to filter rows from the table "teia_split_contracts". All fields are combined with a logical 'AND'. */ +export type Teia_Split_Contracts_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + administrator_address?: InputMaybe + contract_address?: InputMaybe + contract_profile?: InputMaybe + created_tokens?: InputMaybe + shareholders?: InputMaybe + total_shares?: InputMaybe +} + +/** Ordering options when selecting data from "teia_split_contracts". */ +export type Teia_Split_Contracts_Order_By = { + administrator_address?: InputMaybe + contract_address?: InputMaybe + contract_profile?: InputMaybe + created_tokens_aggregate?: InputMaybe + shareholders_aggregate?: InputMaybe + total_shares?: InputMaybe +} + +/** select columns of table "teia_split_contracts" */ +export enum Teia_Split_Contracts_Select_Column { + /** column name */ + AdministratorAddress = 'administrator_address', + /** column name */ + ContractAddress = 'contract_address', + /** column name */ + TotalShares = 'total_shares', +} + +/** columns and relationships of "teia_tokens_meta" */ +export type Teia_Tokens_Meta = { + __typename?: 'teia_tokens_meta' + accessibility?: Maybe + content_rating?: Maybe + fa2_address: Scalars['String'] + is_signed: Scalars['Boolean'] + preview_uri?: Maybe + token_id: Scalars['String'] +} + +/** columns and relationships of "teia_tokens_meta" */ +export type Teia_Tokens_MetaAccessibilityArgs = { + path?: InputMaybe +} + +/** Boolean expression to filter rows from the table "teia_tokens_meta". All fields are combined with a logical 'AND'. */ +export type Teia_Tokens_Meta_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + accessibility?: InputMaybe + content_rating?: InputMaybe + fa2_address?: InputMaybe + is_signed?: InputMaybe + preview_uri?: InputMaybe + token_id?: InputMaybe +} + +/** Ordering options when selecting data from "teia_tokens_meta". */ +export type Teia_Tokens_Meta_Order_By = { + accessibility?: InputMaybe + content_rating?: InputMaybe + fa2_address?: InputMaybe + is_signed?: InputMaybe + preview_uri?: InputMaybe + token_id?: InputMaybe +} + +/** select columns of table "teia_tokens_meta" */ +export enum Teia_Tokens_Meta_Select_Column { + /** column name */ + Accessibility = 'accessibility', + /** column name */ + ContentRating = 'content_rating', + /** column name */ + Fa2Address = 'fa2_address', + /** column name */ + IsSigned = 'is_signed', + /** column name */ + PreviewUri = 'preview_uri', + /** column name */ + TokenId = 'token_id', +} + +/** columns and relationships of "teia_users" */ +export type Teia_Users = { + __typename?: 'teia_users' + is_split?: Maybe + /** An object relationship */ + metadata?: Maybe + metadata_uri?: Maybe + name?: Maybe + /** An object relationship */ + split_contract?: Maybe + user_address: Scalars['String'] +} + +/** Boolean expression to filter rows from the table "teia_users". All fields are combined with a logical 'AND'. */ +export type Teia_Users_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + is_split?: InputMaybe + metadata?: InputMaybe + metadata_uri?: InputMaybe + name?: InputMaybe + split_contract?: InputMaybe + user_address?: InputMaybe +} + +/** Ordering options when selecting data from "teia_users". */ +export type Teia_Users_Order_By = { + is_split?: InputMaybe + metadata?: InputMaybe + metadata_uri?: InputMaybe + name?: InputMaybe + split_contract?: InputMaybe + user_address?: InputMaybe +} + +/** select columns of table "teia_users" */ +export enum Teia_Users_Select_Column { + /** column name */ + IsSplit = 'is_split', + /** column name */ + MetadataUri = 'metadata_uri', + /** column name */ + Name = 'name', + /** column name */ + UserAddress = 'user_address', +} + +/** Boolean expression to compare columns of type "timestamptz". All fields are combined with logical 'AND'. */ +export type Timestamptz_Comparison_Exp = { + _eq?: InputMaybe + _gt?: InputMaybe + _gte?: InputMaybe + _in?: InputMaybe> + _is_null?: InputMaybe + _lt?: InputMaybe + _lte?: InputMaybe + _neq?: InputMaybe + _nin?: InputMaybe> +} + +/** columns and relationships of "token_metadata" */ +export type Token_Metadata = { + __typename?: 'token_metadata' + data?: Maybe + status: Scalars['String'] + uri: Scalars['String'] +} + +/** columns and relationships of "token_metadata" */ +export type Token_MetadataDataArgs = { + path?: InputMaybe +} + +/** Boolean expression to filter rows from the table "token_metadata". All fields are combined with a logical 'AND'. */ +export type Token_Metadata_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + data?: InputMaybe + status?: InputMaybe + uri?: InputMaybe +} + +/** Ordering options when selecting data from "token_metadata". */ +export type Token_Metadata_Order_By = { + data?: InputMaybe + status?: InputMaybe + uri?: InputMaybe +} + +/** select columns of table "token_metadata" */ +export enum Token_Metadata_Select_Column { + /** column name */ + Data = 'data', + /** column name */ + Status = 'status', + /** column name */ + Uri = 'uri', +} + +/** columns and relationships of "tokens" */ +export type Tokens = { + __typename?: 'tokens' + artifact_metadata?: Maybe + artifact_uri?: Maybe + artist_address?: Maybe + /** An object relationship */ + artist_profile?: Maybe + assets?: Maybe + attributes?: Maybe + burned_editions?: Maybe + contributors?: Maybe + creators?: Maybe + current_price_to_first_sales_price_diff?: Maybe + current_price_to_first_sales_price_pct?: Maybe + current_price_to_highest_sales_price_diff?: Maybe + current_price_to_highest_sales_price_pct?: Maybe + current_price_to_last_sales_price_diff?: Maybe + current_price_to_last_sales_price_pct?: Maybe + current_price_to_lowest_sales_price_diff?: Maybe + current_price_to_lowest_sales_price_pct?: Maybe + description?: Maybe + display_uri?: Maybe + editions?: Maybe + /** An array relationship */ + events: Array + /** An aggregate relationship */ + events_aggregate: Events_Aggregate + external_uri?: Maybe + fa2_address: Scalars['String'] + first_sales_price?: Maybe + formats?: Maybe + highest_offer_price?: Maybe + highest_sales_price?: Maybe + /** An array relationship */ + holdings: Array + /** An aggregate relationship */ + holdings_aggregate: Holdings_Aggregate + is_verified_artist?: Maybe + last_processed_event_id?: Maybe + last_processed_event_level?: Maybe + last_processed_event_timestamp?: Maybe + last_sale_at?: Maybe + last_sales_price?: Maybe + /** An array relationship */ + listings: Array + /** An aggregate relationship */ + listings_aggregate: Listings_Aggregate + lowest_price_listing?: Maybe + lowest_sales_price?: Maybe + metadata_status: Scalars['String'] + metadata_uri?: Maybe + mime_type?: Maybe + mint_price?: Maybe + minted_at?: Maybe + name?: Maybe + /** An array relationship */ + offers: Array + /** An aggregate relationship */ + offers_aggregate: Offers_Aggregate + platform?: Maybe + price?: Maybe + right_uri?: Maybe + rights?: Maybe + royalties?: Maybe + royalties_total?: Maybe + /** An array relationship */ + royalty_receivers: Array + sales_count?: Maybe + sales_volume?: Maybe + /** An array relationship */ + signatures: Array + symbol?: Maybe + /** An array relationship */ + tags: Array + /** An object relationship */ + teia_meta?: Maybe + thumbnail_uri?: Maybe + token_id: Scalars['String'] + updated_at?: Maybe +} + +/** columns and relationships of "tokens" */ +export type TokensArtifact_MetadataArgs = { + path?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensAssetsArgs = { + path?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensAttributesArgs = { + path?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensContributorsArgs = { + path?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensCreatorsArgs = { + path?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensEventsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensEvents_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensFormatsArgs = { + path?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensHoldingsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensHoldings_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensListingsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensListings_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensLowest_Price_ListingArgs = { + path?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensOffersArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensOffers_AggregateArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensRoyaltiesArgs = { + path?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensRoyalty_ReceiversArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensSignaturesArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** columns and relationships of "tokens" */ +export type TokensTagsArgs = { + distinct_on?: InputMaybe> + limit?: InputMaybe + offset?: InputMaybe + order_by?: InputMaybe> + where?: InputMaybe +} + +/** aggregated selection of "tokens" */ +export type Tokens_Aggregate = { + __typename?: 'tokens_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "tokens" */ +export type Tokens_Aggregate_Fields = { + __typename?: 'tokens_aggregate_fields' + avg?: Maybe + count: Scalars['Int'] + max?: Maybe + min?: Maybe + stddev?: Maybe + stddev_pop?: Maybe + stddev_samp?: Maybe + sum?: Maybe + var_pop?: Maybe + var_samp?: Maybe + variance?: Maybe +} + +/** aggregate fields of "tokens" */ +export type Tokens_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** order by aggregate values of table "tokens" */ +export type Tokens_Aggregate_Order_By = { + avg?: InputMaybe + count?: InputMaybe + max?: InputMaybe + min?: InputMaybe + stddev?: InputMaybe + stddev_pop?: InputMaybe + stddev_samp?: InputMaybe + sum?: InputMaybe + var_pop?: InputMaybe + var_samp?: InputMaybe + variance?: InputMaybe +} + +/** aggregate avg on columns */ +export type Tokens_Avg_Fields = { + __typename?: 'tokens_avg_fields' + burned_editions?: Maybe + current_price_to_first_sales_price_diff?: Maybe + current_price_to_first_sales_price_pct?: Maybe + current_price_to_highest_sales_price_diff?: Maybe + current_price_to_highest_sales_price_pct?: Maybe + current_price_to_last_sales_price_diff?: Maybe + current_price_to_last_sales_price_pct?: Maybe + current_price_to_lowest_sales_price_diff?: Maybe + current_price_to_lowest_sales_price_pct?: Maybe + editions?: Maybe + first_sales_price?: Maybe + highest_offer_price?: Maybe + highest_sales_price?: Maybe + last_processed_event_level?: Maybe + last_sales_price?: Maybe + lowest_sales_price?: Maybe + mint_price?: Maybe + price?: Maybe + royalties_total?: Maybe + sales_count?: Maybe + sales_volume?: Maybe +} + +/** order by avg() on columns of table "tokens" */ +export type Tokens_Avg_Order_By = { + burned_editions?: InputMaybe + current_price_to_first_sales_price_diff?: InputMaybe + current_price_to_first_sales_price_pct?: InputMaybe + current_price_to_highest_sales_price_diff?: InputMaybe + current_price_to_highest_sales_price_pct?: InputMaybe + current_price_to_last_sales_price_diff?: InputMaybe + current_price_to_last_sales_price_pct?: InputMaybe + current_price_to_lowest_sales_price_diff?: InputMaybe + current_price_to_lowest_sales_price_pct?: InputMaybe + editions?: InputMaybe + first_sales_price?: InputMaybe + highest_offer_price?: InputMaybe + highest_sales_price?: InputMaybe + last_processed_event_level?: InputMaybe + last_sales_price?: InputMaybe + lowest_sales_price?: InputMaybe + mint_price?: InputMaybe + price?: InputMaybe + royalties_total?: InputMaybe + sales_count?: InputMaybe + sales_volume?: InputMaybe +} + +/** Boolean expression to filter rows from the table "tokens". All fields are combined with a logical 'AND'. */ +export type Tokens_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + artifact_metadata?: InputMaybe + artifact_uri?: InputMaybe + artist_address?: InputMaybe + artist_profile?: InputMaybe + assets?: InputMaybe + attributes?: InputMaybe + burned_editions?: InputMaybe + contributors?: InputMaybe + creators?: InputMaybe + current_price_to_first_sales_price_diff?: InputMaybe + current_price_to_first_sales_price_pct?: InputMaybe + current_price_to_highest_sales_price_diff?: InputMaybe + current_price_to_highest_sales_price_pct?: InputMaybe + current_price_to_last_sales_price_diff?: InputMaybe + current_price_to_last_sales_price_pct?: InputMaybe + current_price_to_lowest_sales_price_diff?: InputMaybe + current_price_to_lowest_sales_price_pct?: InputMaybe + description?: InputMaybe + display_uri?: InputMaybe + editions?: InputMaybe + events?: InputMaybe + external_uri?: InputMaybe + fa2_address?: InputMaybe + first_sales_price?: InputMaybe + formats?: InputMaybe + highest_offer_price?: InputMaybe + highest_sales_price?: InputMaybe + holdings?: InputMaybe + is_verified_artist?: InputMaybe + last_processed_event_id?: InputMaybe + last_processed_event_level?: InputMaybe + last_processed_event_timestamp?: InputMaybe + last_sale_at?: InputMaybe + last_sales_price?: InputMaybe + listings?: InputMaybe + lowest_price_listing?: InputMaybe + lowest_sales_price?: InputMaybe + metadata_status?: InputMaybe + metadata_uri?: InputMaybe + mime_type?: InputMaybe + mint_price?: InputMaybe + minted_at?: InputMaybe + name?: InputMaybe + offers?: InputMaybe + platform?: InputMaybe + price?: InputMaybe + right_uri?: InputMaybe + rights?: InputMaybe + royalties?: InputMaybe + royalties_total?: InputMaybe + royalty_receivers?: InputMaybe + sales_count?: InputMaybe + sales_volume?: InputMaybe + signatures?: InputMaybe + symbol?: InputMaybe + tags?: InputMaybe + teia_meta?: InputMaybe + thumbnail_uri?: InputMaybe + token_id?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate max on columns */ +export type Tokens_Max_Fields = { + __typename?: 'tokens_max_fields' + artifact_uri?: Maybe + artist_address?: Maybe + burned_editions?: Maybe + current_price_to_first_sales_price_diff?: Maybe + current_price_to_first_sales_price_pct?: Maybe + current_price_to_highest_sales_price_diff?: Maybe + current_price_to_highest_sales_price_pct?: Maybe + current_price_to_last_sales_price_diff?: Maybe + current_price_to_last_sales_price_pct?: Maybe + current_price_to_lowest_sales_price_diff?: Maybe + current_price_to_lowest_sales_price_pct?: Maybe + description?: Maybe + display_uri?: Maybe + editions?: Maybe + external_uri?: Maybe + fa2_address?: Maybe + first_sales_price?: Maybe + highest_offer_price?: Maybe + highest_sales_price?: Maybe + last_processed_event_id?: Maybe + last_processed_event_level?: Maybe + last_processed_event_timestamp?: Maybe + last_sale_at?: Maybe + last_sales_price?: Maybe + lowest_sales_price?: Maybe + metadata_status?: Maybe + metadata_uri?: Maybe + mime_type?: Maybe + mint_price?: Maybe + minted_at?: Maybe + name?: Maybe + platform?: Maybe + price?: Maybe + right_uri?: Maybe + rights?: Maybe + royalties_total?: Maybe + sales_count?: Maybe + sales_volume?: Maybe + symbol?: Maybe + thumbnail_uri?: Maybe + token_id?: Maybe + updated_at?: Maybe +} + +/** order by max() on columns of table "tokens" */ +export type Tokens_Max_Order_By = { + artifact_uri?: InputMaybe + artist_address?: InputMaybe + burned_editions?: InputMaybe + current_price_to_first_sales_price_diff?: InputMaybe + current_price_to_first_sales_price_pct?: InputMaybe + current_price_to_highest_sales_price_diff?: InputMaybe + current_price_to_highest_sales_price_pct?: InputMaybe + current_price_to_last_sales_price_diff?: InputMaybe + current_price_to_last_sales_price_pct?: InputMaybe + current_price_to_lowest_sales_price_diff?: InputMaybe + current_price_to_lowest_sales_price_pct?: InputMaybe + description?: InputMaybe + display_uri?: InputMaybe + editions?: InputMaybe + external_uri?: InputMaybe + fa2_address?: InputMaybe + first_sales_price?: InputMaybe + highest_offer_price?: InputMaybe + highest_sales_price?: InputMaybe + last_processed_event_id?: InputMaybe + last_processed_event_level?: InputMaybe + last_processed_event_timestamp?: InputMaybe + last_sale_at?: InputMaybe + last_sales_price?: InputMaybe + lowest_sales_price?: InputMaybe + metadata_status?: InputMaybe + metadata_uri?: InputMaybe + mime_type?: InputMaybe + mint_price?: InputMaybe + minted_at?: InputMaybe + name?: InputMaybe + platform?: InputMaybe + price?: InputMaybe + right_uri?: InputMaybe + rights?: InputMaybe + royalties_total?: InputMaybe + sales_count?: InputMaybe + sales_volume?: InputMaybe + symbol?: InputMaybe + thumbnail_uri?: InputMaybe + token_id?: InputMaybe + updated_at?: InputMaybe +} + +/** aggregate min on columns */ +export type Tokens_Min_Fields = { + __typename?: 'tokens_min_fields' + artifact_uri?: Maybe + artist_address?: Maybe + burned_editions?: Maybe + current_price_to_first_sales_price_diff?: Maybe + current_price_to_first_sales_price_pct?: Maybe + current_price_to_highest_sales_price_diff?: Maybe + current_price_to_highest_sales_price_pct?: Maybe + current_price_to_last_sales_price_diff?: Maybe + current_price_to_last_sales_price_pct?: Maybe + current_price_to_lowest_sales_price_diff?: Maybe + current_price_to_lowest_sales_price_pct?: Maybe + description?: Maybe + display_uri?: Maybe + editions?: Maybe + external_uri?: Maybe + fa2_address?: Maybe + first_sales_price?: Maybe + highest_offer_price?: Maybe + highest_sales_price?: Maybe + last_processed_event_id?: Maybe + last_processed_event_level?: Maybe + last_processed_event_timestamp?: Maybe + last_sale_at?: Maybe + last_sales_price?: Maybe + lowest_sales_price?: Maybe + metadata_status?: Maybe + metadata_uri?: Maybe + mime_type?: Maybe + mint_price?: Maybe + minted_at?: Maybe + name?: Maybe + platform?: Maybe + price?: Maybe + right_uri?: Maybe + rights?: Maybe + royalties_total?: Maybe + sales_count?: Maybe + sales_volume?: Maybe + symbol?: Maybe + thumbnail_uri?: Maybe + token_id?: Maybe + updated_at?: Maybe +} + +/** order by min() on columns of table "tokens" */ +export type Tokens_Min_Order_By = { + artifact_uri?: InputMaybe + artist_address?: InputMaybe + burned_editions?: InputMaybe + current_price_to_first_sales_price_diff?: InputMaybe + current_price_to_first_sales_price_pct?: InputMaybe + current_price_to_highest_sales_price_diff?: InputMaybe + current_price_to_highest_sales_price_pct?: InputMaybe + current_price_to_last_sales_price_diff?: InputMaybe + current_price_to_last_sales_price_pct?: InputMaybe + current_price_to_lowest_sales_price_diff?: InputMaybe + current_price_to_lowest_sales_price_pct?: InputMaybe + description?: InputMaybe + display_uri?: InputMaybe + editions?: InputMaybe + external_uri?: InputMaybe + fa2_address?: InputMaybe + first_sales_price?: InputMaybe + highest_offer_price?: InputMaybe + highest_sales_price?: InputMaybe + last_processed_event_id?: InputMaybe + last_processed_event_level?: InputMaybe + last_processed_event_timestamp?: InputMaybe + last_sale_at?: InputMaybe + last_sales_price?: InputMaybe + lowest_sales_price?: InputMaybe + metadata_status?: InputMaybe + metadata_uri?: InputMaybe + mime_type?: InputMaybe + mint_price?: InputMaybe + minted_at?: InputMaybe + name?: InputMaybe + platform?: InputMaybe + price?: InputMaybe + right_uri?: InputMaybe + rights?: InputMaybe + royalties_total?: InputMaybe + sales_count?: InputMaybe + sales_volume?: InputMaybe + symbol?: InputMaybe + thumbnail_uri?: InputMaybe + token_id?: InputMaybe + updated_at?: InputMaybe +} + +/** Ordering options when selecting data from "tokens". */ +export type Tokens_Order_By = { + artifact_metadata?: InputMaybe + artifact_uri?: InputMaybe + artist_address?: InputMaybe + artist_profile?: InputMaybe + assets?: InputMaybe + attributes?: InputMaybe + burned_editions?: InputMaybe + contributors?: InputMaybe + creators?: InputMaybe + current_price_to_first_sales_price_diff?: InputMaybe + current_price_to_first_sales_price_pct?: InputMaybe + current_price_to_highest_sales_price_diff?: InputMaybe + current_price_to_highest_sales_price_pct?: InputMaybe + current_price_to_last_sales_price_diff?: InputMaybe + current_price_to_last_sales_price_pct?: InputMaybe + current_price_to_lowest_sales_price_diff?: InputMaybe + current_price_to_lowest_sales_price_pct?: InputMaybe + description?: InputMaybe + display_uri?: InputMaybe + editions?: InputMaybe + events_aggregate?: InputMaybe + external_uri?: InputMaybe + fa2_address?: InputMaybe + first_sales_price?: InputMaybe + formats?: InputMaybe + highest_offer_price?: InputMaybe + highest_sales_price?: InputMaybe + holdings_aggregate?: InputMaybe + is_verified_artist?: InputMaybe + last_processed_event_id?: InputMaybe + last_processed_event_level?: InputMaybe + last_processed_event_timestamp?: InputMaybe + last_sale_at?: InputMaybe + last_sales_price?: InputMaybe + listings_aggregate?: InputMaybe + lowest_price_listing?: InputMaybe + lowest_sales_price?: InputMaybe + metadata_status?: InputMaybe + metadata_uri?: InputMaybe + mime_type?: InputMaybe + mint_price?: InputMaybe + minted_at?: InputMaybe + name?: InputMaybe + offers_aggregate?: InputMaybe + platform?: InputMaybe + price?: InputMaybe + right_uri?: InputMaybe + rights?: InputMaybe + royalties?: InputMaybe + royalties_total?: InputMaybe + royalty_receivers_aggregate?: InputMaybe + sales_count?: InputMaybe + sales_volume?: InputMaybe + signatures_aggregate?: InputMaybe + symbol?: InputMaybe + tags_aggregate?: InputMaybe + teia_meta?: InputMaybe + thumbnail_uri?: InputMaybe + token_id?: InputMaybe + updated_at?: InputMaybe +} + +/** select columns of table "tokens" */ +export enum Tokens_Select_Column { + /** column name */ + ArtifactMetadata = 'artifact_metadata', + /** column name */ + ArtifactUri = 'artifact_uri', + /** column name */ + ArtistAddress = 'artist_address', + /** column name */ + Assets = 'assets', + /** column name */ + Attributes = 'attributes', + /** column name */ + BurnedEditions = 'burned_editions', + /** column name */ + Contributors = 'contributors', + /** column name */ + Creators = 'creators', + /** column name */ + CurrentPriceToFirstSalesPriceDiff = 'current_price_to_first_sales_price_diff', + /** column name */ + CurrentPriceToFirstSalesPricePct = 'current_price_to_first_sales_price_pct', + /** column name */ + CurrentPriceToHighestSalesPriceDiff = 'current_price_to_highest_sales_price_diff', + /** column name */ + CurrentPriceToHighestSalesPricePct = 'current_price_to_highest_sales_price_pct', + /** column name */ + CurrentPriceToLastSalesPriceDiff = 'current_price_to_last_sales_price_diff', + /** column name */ + CurrentPriceToLastSalesPricePct = 'current_price_to_last_sales_price_pct', + /** column name */ + CurrentPriceToLowestSalesPriceDiff = 'current_price_to_lowest_sales_price_diff', + /** column name */ + CurrentPriceToLowestSalesPricePct = 'current_price_to_lowest_sales_price_pct', + /** column name */ + Description = 'description', + /** column name */ + DisplayUri = 'display_uri', + /** column name */ + Editions = 'editions', + /** column name */ + ExternalUri = 'external_uri', + /** column name */ + Fa2Address = 'fa2_address', + /** column name */ + FirstSalesPrice = 'first_sales_price', + /** column name */ + Formats = 'formats', + /** column name */ + HighestOfferPrice = 'highest_offer_price', + /** column name */ + HighestSalesPrice = 'highest_sales_price', + /** column name */ + IsVerifiedArtist = 'is_verified_artist', + /** column name */ + LastProcessedEventId = 'last_processed_event_id', + /** column name */ + LastProcessedEventLevel = 'last_processed_event_level', + /** column name */ + LastProcessedEventTimestamp = 'last_processed_event_timestamp', + /** column name */ + LastSaleAt = 'last_sale_at', + /** column name */ + LastSalesPrice = 'last_sales_price', + /** column name */ + LowestPriceListing = 'lowest_price_listing', + /** column name */ + LowestSalesPrice = 'lowest_sales_price', + /** column name */ + MetadataStatus = 'metadata_status', + /** column name */ + MetadataUri = 'metadata_uri', + /** column name */ + MimeType = 'mime_type', + /** column name */ + MintPrice = 'mint_price', + /** column name */ + MintedAt = 'minted_at', + /** column name */ + Name = 'name', + /** column name */ + Platform = 'platform', + /** column name */ + Price = 'price', + /** column name */ + RightUri = 'right_uri', + /** column name */ + Rights = 'rights', + /** column name */ + Royalties = 'royalties', + /** column name */ + RoyaltiesTotal = 'royalties_total', + /** column name */ + SalesCount = 'sales_count', + /** column name */ + SalesVolume = 'sales_volume', + /** column name */ + Symbol = 'symbol', + /** column name */ + ThumbnailUri = 'thumbnail_uri', + /** column name */ + TokenId = 'token_id', + /** column name */ + UpdatedAt = 'updated_at', +} + +/** aggregate stddev on columns */ +export type Tokens_Stddev_Fields = { + __typename?: 'tokens_stddev_fields' + burned_editions?: Maybe + current_price_to_first_sales_price_diff?: Maybe + current_price_to_first_sales_price_pct?: Maybe + current_price_to_highest_sales_price_diff?: Maybe + current_price_to_highest_sales_price_pct?: Maybe + current_price_to_last_sales_price_diff?: Maybe + current_price_to_last_sales_price_pct?: Maybe + current_price_to_lowest_sales_price_diff?: Maybe + current_price_to_lowest_sales_price_pct?: Maybe + editions?: Maybe + first_sales_price?: Maybe + highest_offer_price?: Maybe + highest_sales_price?: Maybe + last_processed_event_level?: Maybe + last_sales_price?: Maybe + lowest_sales_price?: Maybe + mint_price?: Maybe + price?: Maybe + royalties_total?: Maybe + sales_count?: Maybe + sales_volume?: Maybe +} + +/** order by stddev() on columns of table "tokens" */ +export type Tokens_Stddev_Order_By = { + burned_editions?: InputMaybe + current_price_to_first_sales_price_diff?: InputMaybe + current_price_to_first_sales_price_pct?: InputMaybe + current_price_to_highest_sales_price_diff?: InputMaybe + current_price_to_highest_sales_price_pct?: InputMaybe + current_price_to_last_sales_price_diff?: InputMaybe + current_price_to_last_sales_price_pct?: InputMaybe + current_price_to_lowest_sales_price_diff?: InputMaybe + current_price_to_lowest_sales_price_pct?: InputMaybe + editions?: InputMaybe + first_sales_price?: InputMaybe + highest_offer_price?: InputMaybe + highest_sales_price?: InputMaybe + last_processed_event_level?: InputMaybe + last_sales_price?: InputMaybe + lowest_sales_price?: InputMaybe + mint_price?: InputMaybe + price?: InputMaybe + royalties_total?: InputMaybe + sales_count?: InputMaybe + sales_volume?: InputMaybe +} + +/** aggregate stddev_pop on columns */ +export type Tokens_Stddev_Pop_Fields = { + __typename?: 'tokens_stddev_pop_fields' + burned_editions?: Maybe + current_price_to_first_sales_price_diff?: Maybe + current_price_to_first_sales_price_pct?: Maybe + current_price_to_highest_sales_price_diff?: Maybe + current_price_to_highest_sales_price_pct?: Maybe + current_price_to_last_sales_price_diff?: Maybe + current_price_to_last_sales_price_pct?: Maybe + current_price_to_lowest_sales_price_diff?: Maybe + current_price_to_lowest_sales_price_pct?: Maybe + editions?: Maybe + first_sales_price?: Maybe + highest_offer_price?: Maybe + highest_sales_price?: Maybe + last_processed_event_level?: Maybe + last_sales_price?: Maybe + lowest_sales_price?: Maybe + mint_price?: Maybe + price?: Maybe + royalties_total?: Maybe + sales_count?: Maybe + sales_volume?: Maybe +} + +/** order by stddev_pop() on columns of table "tokens" */ +export type Tokens_Stddev_Pop_Order_By = { + burned_editions?: InputMaybe + current_price_to_first_sales_price_diff?: InputMaybe + current_price_to_first_sales_price_pct?: InputMaybe + current_price_to_highest_sales_price_diff?: InputMaybe + current_price_to_highest_sales_price_pct?: InputMaybe + current_price_to_last_sales_price_diff?: InputMaybe + current_price_to_last_sales_price_pct?: InputMaybe + current_price_to_lowest_sales_price_diff?: InputMaybe + current_price_to_lowest_sales_price_pct?: InputMaybe + editions?: InputMaybe + first_sales_price?: InputMaybe + highest_offer_price?: InputMaybe + highest_sales_price?: InputMaybe + last_processed_event_level?: InputMaybe + last_sales_price?: InputMaybe + lowest_sales_price?: InputMaybe + mint_price?: InputMaybe + price?: InputMaybe + royalties_total?: InputMaybe + sales_count?: InputMaybe + sales_volume?: InputMaybe +} + +/** aggregate stddev_samp on columns */ +export type Tokens_Stddev_Samp_Fields = { + __typename?: 'tokens_stddev_samp_fields' + burned_editions?: Maybe + current_price_to_first_sales_price_diff?: Maybe + current_price_to_first_sales_price_pct?: Maybe + current_price_to_highest_sales_price_diff?: Maybe + current_price_to_highest_sales_price_pct?: Maybe + current_price_to_last_sales_price_diff?: Maybe + current_price_to_last_sales_price_pct?: Maybe + current_price_to_lowest_sales_price_diff?: Maybe + current_price_to_lowest_sales_price_pct?: Maybe + editions?: Maybe + first_sales_price?: Maybe + highest_offer_price?: Maybe + highest_sales_price?: Maybe + last_processed_event_level?: Maybe + last_sales_price?: Maybe + lowest_sales_price?: Maybe + mint_price?: Maybe + price?: Maybe + royalties_total?: Maybe + sales_count?: Maybe + sales_volume?: Maybe +} + +/** order by stddev_samp() on columns of table "tokens" */ +export type Tokens_Stddev_Samp_Order_By = { + burned_editions?: InputMaybe + current_price_to_first_sales_price_diff?: InputMaybe + current_price_to_first_sales_price_pct?: InputMaybe + current_price_to_highest_sales_price_diff?: InputMaybe + current_price_to_highest_sales_price_pct?: InputMaybe + current_price_to_last_sales_price_diff?: InputMaybe + current_price_to_last_sales_price_pct?: InputMaybe + current_price_to_lowest_sales_price_diff?: InputMaybe + current_price_to_lowest_sales_price_pct?: InputMaybe + editions?: InputMaybe + first_sales_price?: InputMaybe + highest_offer_price?: InputMaybe + highest_sales_price?: InputMaybe + last_processed_event_level?: InputMaybe + last_sales_price?: InputMaybe + lowest_sales_price?: InputMaybe + mint_price?: InputMaybe + price?: InputMaybe + royalties_total?: InputMaybe + sales_count?: InputMaybe + sales_volume?: InputMaybe +} + +/** aggregate sum on columns */ +export type Tokens_Sum_Fields = { + __typename?: 'tokens_sum_fields' + burned_editions?: Maybe + current_price_to_first_sales_price_diff?: Maybe + current_price_to_first_sales_price_pct?: Maybe + current_price_to_highest_sales_price_diff?: Maybe + current_price_to_highest_sales_price_pct?: Maybe + current_price_to_last_sales_price_diff?: Maybe + current_price_to_last_sales_price_pct?: Maybe + current_price_to_lowest_sales_price_diff?: Maybe + current_price_to_lowest_sales_price_pct?: Maybe + editions?: Maybe + first_sales_price?: Maybe + highest_offer_price?: Maybe + highest_sales_price?: Maybe + last_processed_event_level?: Maybe + last_sales_price?: Maybe + lowest_sales_price?: Maybe + mint_price?: Maybe + price?: Maybe + royalties_total?: Maybe + sales_count?: Maybe + sales_volume?: Maybe +} + +/** order by sum() on columns of table "tokens" */ +export type Tokens_Sum_Order_By = { + burned_editions?: InputMaybe + current_price_to_first_sales_price_diff?: InputMaybe + current_price_to_first_sales_price_pct?: InputMaybe + current_price_to_highest_sales_price_diff?: InputMaybe + current_price_to_highest_sales_price_pct?: InputMaybe + current_price_to_last_sales_price_diff?: InputMaybe + current_price_to_last_sales_price_pct?: InputMaybe + current_price_to_lowest_sales_price_diff?: InputMaybe + current_price_to_lowest_sales_price_pct?: InputMaybe + editions?: InputMaybe + first_sales_price?: InputMaybe + highest_offer_price?: InputMaybe + highest_sales_price?: InputMaybe + last_processed_event_level?: InputMaybe + last_sales_price?: InputMaybe + lowest_sales_price?: InputMaybe + mint_price?: InputMaybe + price?: InputMaybe + royalties_total?: InputMaybe + sales_count?: InputMaybe + sales_volume?: InputMaybe +} + +/** aggregate var_pop on columns */ +export type Tokens_Var_Pop_Fields = { + __typename?: 'tokens_var_pop_fields' + burned_editions?: Maybe + current_price_to_first_sales_price_diff?: Maybe + current_price_to_first_sales_price_pct?: Maybe + current_price_to_highest_sales_price_diff?: Maybe + current_price_to_highest_sales_price_pct?: Maybe + current_price_to_last_sales_price_diff?: Maybe + current_price_to_last_sales_price_pct?: Maybe + current_price_to_lowest_sales_price_diff?: Maybe + current_price_to_lowest_sales_price_pct?: Maybe + editions?: Maybe + first_sales_price?: Maybe + highest_offer_price?: Maybe + highest_sales_price?: Maybe + last_processed_event_level?: Maybe + last_sales_price?: Maybe + lowest_sales_price?: Maybe + mint_price?: Maybe + price?: Maybe + royalties_total?: Maybe + sales_count?: Maybe + sales_volume?: Maybe +} + +/** order by var_pop() on columns of table "tokens" */ +export type Tokens_Var_Pop_Order_By = { + burned_editions?: InputMaybe + current_price_to_first_sales_price_diff?: InputMaybe + current_price_to_first_sales_price_pct?: InputMaybe + current_price_to_highest_sales_price_diff?: InputMaybe + current_price_to_highest_sales_price_pct?: InputMaybe + current_price_to_last_sales_price_diff?: InputMaybe + current_price_to_last_sales_price_pct?: InputMaybe + current_price_to_lowest_sales_price_diff?: InputMaybe + current_price_to_lowest_sales_price_pct?: InputMaybe + editions?: InputMaybe + first_sales_price?: InputMaybe + highest_offer_price?: InputMaybe + highest_sales_price?: InputMaybe + last_processed_event_level?: InputMaybe + last_sales_price?: InputMaybe + lowest_sales_price?: InputMaybe + mint_price?: InputMaybe + price?: InputMaybe + royalties_total?: InputMaybe + sales_count?: InputMaybe + sales_volume?: InputMaybe +} + +/** aggregate var_samp on columns */ +export type Tokens_Var_Samp_Fields = { + __typename?: 'tokens_var_samp_fields' + burned_editions?: Maybe + current_price_to_first_sales_price_diff?: Maybe + current_price_to_first_sales_price_pct?: Maybe + current_price_to_highest_sales_price_diff?: Maybe + current_price_to_highest_sales_price_pct?: Maybe + current_price_to_last_sales_price_diff?: Maybe + current_price_to_last_sales_price_pct?: Maybe + current_price_to_lowest_sales_price_diff?: Maybe + current_price_to_lowest_sales_price_pct?: Maybe + editions?: Maybe + first_sales_price?: Maybe + highest_offer_price?: Maybe + highest_sales_price?: Maybe + last_processed_event_level?: Maybe + last_sales_price?: Maybe + lowest_sales_price?: Maybe + mint_price?: Maybe + price?: Maybe + royalties_total?: Maybe + sales_count?: Maybe + sales_volume?: Maybe +} + +/** order by var_samp() on columns of table "tokens" */ +export type Tokens_Var_Samp_Order_By = { + burned_editions?: InputMaybe + current_price_to_first_sales_price_diff?: InputMaybe + current_price_to_first_sales_price_pct?: InputMaybe + current_price_to_highest_sales_price_diff?: InputMaybe + current_price_to_highest_sales_price_pct?: InputMaybe + current_price_to_last_sales_price_diff?: InputMaybe + current_price_to_last_sales_price_pct?: InputMaybe + current_price_to_lowest_sales_price_diff?: InputMaybe + current_price_to_lowest_sales_price_pct?: InputMaybe + editions?: InputMaybe + first_sales_price?: InputMaybe + highest_offer_price?: InputMaybe + highest_sales_price?: InputMaybe + last_processed_event_level?: InputMaybe + last_sales_price?: InputMaybe + lowest_sales_price?: InputMaybe + mint_price?: InputMaybe + price?: InputMaybe + royalties_total?: InputMaybe + sales_count?: InputMaybe + sales_volume?: InputMaybe +} + +/** aggregate variance on columns */ +export type Tokens_Variance_Fields = { + __typename?: 'tokens_variance_fields' + burned_editions?: Maybe + current_price_to_first_sales_price_diff?: Maybe + current_price_to_first_sales_price_pct?: Maybe + current_price_to_highest_sales_price_diff?: Maybe + current_price_to_highest_sales_price_pct?: Maybe + current_price_to_last_sales_price_diff?: Maybe + current_price_to_last_sales_price_pct?: Maybe + current_price_to_lowest_sales_price_diff?: Maybe + current_price_to_lowest_sales_price_pct?: Maybe + editions?: Maybe + first_sales_price?: Maybe + highest_offer_price?: Maybe + highest_sales_price?: Maybe + last_processed_event_level?: Maybe + last_sales_price?: Maybe + lowest_sales_price?: Maybe + mint_price?: Maybe + price?: Maybe + royalties_total?: Maybe + sales_count?: Maybe + sales_volume?: Maybe +} + +/** order by variance() on columns of table "tokens" */ +export type Tokens_Variance_Order_By = { + burned_editions?: InputMaybe + current_price_to_first_sales_price_diff?: InputMaybe + current_price_to_first_sales_price_pct?: InputMaybe + current_price_to_highest_sales_price_diff?: InputMaybe + current_price_to_highest_sales_price_pct?: InputMaybe + current_price_to_last_sales_price_diff?: InputMaybe + current_price_to_last_sales_price_pct?: InputMaybe + current_price_to_lowest_sales_price_diff?: InputMaybe + current_price_to_lowest_sales_price_pct?: InputMaybe + editions?: InputMaybe + first_sales_price?: InputMaybe + highest_offer_price?: InputMaybe + highest_sales_price?: InputMaybe + last_processed_event_level?: InputMaybe + last_sales_price?: InputMaybe + lowest_sales_price?: InputMaybe + mint_price?: InputMaybe + price?: InputMaybe + royalties_total?: InputMaybe + sales_count?: InputMaybe + sales_volume?: InputMaybe +} + +/** columns and relationships of "tzprofiles" */ +export type Tzprofiles = { + __typename?: 'tzprofiles' + account: Scalars['String'] + alias?: Maybe + contract: Scalars['String'] + description?: Maybe + discord?: Maybe + domain_name?: Maybe + ethereum?: Maybe + failed: Scalars['Boolean'] + github?: Maybe + invalid_claims: Scalars['jsonb'] + logo?: Maybe + resolved: Scalars['Boolean'] + twitter?: Maybe + unprocessed_claims: Scalars['jsonb'] + valid_claims: Scalars['jsonb'] + website?: Maybe +} + +/** columns and relationships of "tzprofiles" */ +export type TzprofilesInvalid_ClaimsArgs = { + path?: InputMaybe +} + +/** columns and relationships of "tzprofiles" */ +export type TzprofilesUnprocessed_ClaimsArgs = { + path?: InputMaybe +} + +/** columns and relationships of "tzprofiles" */ +export type TzprofilesValid_ClaimsArgs = { + path?: InputMaybe +} + +/** aggregated selection of "tzprofiles" */ +export type Tzprofiles_Aggregate = { + __typename?: 'tzprofiles_aggregate' + aggregate?: Maybe + nodes: Array +} + +/** aggregate fields of "tzprofiles" */ +export type Tzprofiles_Aggregate_Fields = { + __typename?: 'tzprofiles_aggregate_fields' + count: Scalars['Int'] + max?: Maybe + min?: Maybe +} + +/** aggregate fields of "tzprofiles" */ +export type Tzprofiles_Aggregate_FieldsCountArgs = { + columns?: InputMaybe> + distinct?: InputMaybe +} + +/** Boolean expression to filter rows from the table "tzprofiles". All fields are combined with a logical 'AND'. */ +export type Tzprofiles_Bool_Exp = { + _and?: InputMaybe> + _not?: InputMaybe + _or?: InputMaybe> + account?: InputMaybe + alias?: InputMaybe + contract?: InputMaybe + description?: InputMaybe + discord?: InputMaybe + domain_name?: InputMaybe + ethereum?: InputMaybe + failed?: InputMaybe + github?: InputMaybe + invalid_claims?: InputMaybe + logo?: InputMaybe + resolved?: InputMaybe + twitter?: InputMaybe + unprocessed_claims?: InputMaybe + valid_claims?: InputMaybe + website?: InputMaybe +} + +/** aggregate max on columns */ +export type Tzprofiles_Max_Fields = { + __typename?: 'tzprofiles_max_fields' + account?: Maybe + alias?: Maybe + contract?: Maybe + description?: Maybe + discord?: Maybe + domain_name?: Maybe + ethereum?: Maybe + github?: Maybe + logo?: Maybe + twitter?: Maybe + website?: Maybe +} + +/** aggregate min on columns */ +export type Tzprofiles_Min_Fields = { + __typename?: 'tzprofiles_min_fields' + account?: Maybe + alias?: Maybe + contract?: Maybe + description?: Maybe + discord?: Maybe + domain_name?: Maybe + ethereum?: Maybe + github?: Maybe + logo?: Maybe + twitter?: Maybe + website?: Maybe +} + +/** Ordering options when selecting data from "tzprofiles". */ +export type Tzprofiles_Order_By = { + account?: InputMaybe + alias?: InputMaybe + contract?: InputMaybe + description?: InputMaybe + discord?: InputMaybe + domain_name?: InputMaybe + ethereum?: InputMaybe + failed?: InputMaybe + github?: InputMaybe + invalid_claims?: InputMaybe + logo?: InputMaybe + resolved?: InputMaybe + twitter?: InputMaybe + unprocessed_claims?: InputMaybe + valid_claims?: InputMaybe + website?: InputMaybe +} + +/** select columns of table "tzprofiles" */ +export enum Tzprofiles_Select_Column { + /** column name */ + Account = 'account', + /** column name */ + Alias = 'alias', + /** column name */ + Contract = 'contract', + /** column name */ + Description = 'description', + /** column name */ + Discord = 'discord', + /** column name */ + DomainName = 'domain_name', + /** column name */ + Ethereum = 'ethereum', + /** column name */ + Failed = 'failed', + /** column name */ + Github = 'github', + /** column name */ + InvalidClaims = 'invalid_claims', + /** column name */ + Logo = 'logo', + /** column name */ + Resolved = 'resolved', + /** column name */ + Twitter = 'twitter', + /** column name */ + UnprocessedClaims = 'unprocessed_claims', + /** column name */ + ValidClaims = 'valid_claims', + /** column name */ + Website = 'website', +} + +/** Streaming cursor of the table "tzprofiles" */ +export type Tzprofiles_Stream_Cursor_Input = { + /** Stream column input with initial value */ + initial_value: Tzprofiles_Stream_Cursor_Value_Input + /** cursor ordering */ + ordering?: InputMaybe +} + +/** Initial value of the column from where the streaming should start */ +export type Tzprofiles_Stream_Cursor_Value_Input = { + account?: InputMaybe + alias?: InputMaybe + contract?: InputMaybe + description?: InputMaybe + discord?: InputMaybe + domain_name?: InputMaybe + ethereum?: InputMaybe + failed?: InputMaybe + github?: InputMaybe + invalid_claims?: InputMaybe + logo?: InputMaybe + resolved?: InputMaybe + twitter?: InputMaybe + unprocessed_claims?: InputMaybe + valid_claims?: InputMaybe + website?: InputMaybe +} + +export type BaseTokenFieldsFragment = { + __typename?: 'tokens' + artifact_uri?: string | null + display_uri?: string | null + thumbnail_uri?: string | null + metadata_uri?: string | null + artist_address?: string | null + description?: string | null + editions?: any | null + fa2_address: string + mime_type?: string | null + minted_at?: any | null + metadata_status: string + name?: string | null + price?: any | null + royalties?: any | null + royalties_total?: any | null + token_id: string + artist_profile?: { + __typename?: 'teia_users' + name?: string | null + is_split?: boolean | null + } | null + listings: Array<{ + __typename?: 'listings' + amount: any + amount_left: any + contract_address: string + price: any + status: string + type: string + }> + royalty_receivers: Array<{ + __typename?: 'royalty_receivers' + receiver_address: string + royalties: any + }> + teia_meta?: { + __typename?: 'teia_tokens_meta' + accessibility?: any | null + content_rating?: string | null + is_signed: boolean + preview_uri?: string | null + } | null +} + +export type BaseTokenFieldsFragmentVariables = Exact<{ [key: string]: never }> + +export type ObjktQueryVariables = Exact<{ + id: Scalars['String'] +}> + +export type ObjktQuery = { + __typename?: 'query_root' + tokens_by_pk?: { + __typename?: 'tokens' + rights?: string | null + right_uri?: string | null + artifact_uri?: string | null + display_uri?: string | null + thumbnail_uri?: string | null + metadata_uri?: string | null + artist_address?: string | null + description?: string | null + editions?: any | null + fa2_address: string + mime_type?: string | null + minted_at?: any | null + metadata_status: string + name?: string | null + price?: any | null + royalties?: any | null + royalties_total?: any | null + token_id: string + artist_profile?: { + __typename?: 'teia_users' + name?: string | null + is_split?: boolean | null + split_contract?: { + __typename?: 'teia_split_contracts' + administrator_address: string + shareholders: Array<{ + __typename?: 'teia_shareholders' + shareholder_address: string + holder_type: string + shares?: any | null + shareholder_profile?: { + __typename?: 'teia_users' + user_address: string + name?: string | null + } | null + }> + } | null + } | null + signatures: Array<{ + __typename?: 'teia_signatures' + shareholder_address: string + }> + listings: Array<{ + __typename?: 'listings' + type: string + contract_address: string + amount: any + amount_left: any + swap_id?: any | null + ask_id?: any | null + offer_id?: any | null + price: any + start_price?: any | null + end_price?: any | null + seller_address: string + status: string + seller_profile?: { + __typename?: 'teia_users' + name?: string | null + } | null + }> + holdings: Array<{ + __typename?: 'holdings' + holder_address: string + amount: any + holder_profile?: { + __typename?: 'teia_users' + name?: string | null + } | null + }> + tags: Array<{ __typename?: 'tags'; tag: string }> + events: Array<{ + __typename?: 'events' + timestamp: any + implements?: string | null + ophash?: string | null + id: string + type?: string | null + price?: any | null + amount?: any | null + editions?: any | null + seller_address?: string | null + buyer_address?: string | null + from_address?: string | null + to_address?: string | null + seller_profile?: { + __typename?: 'teia_users' + name?: string | null + } | null + buyer_profile?: { __typename?: 'teia_users'; name?: string | null } | null + from_profile?: { __typename?: 'teia_users'; name?: string | null } | null + to_profile?: { __typename?: 'teia_users'; name?: string | null } | null + }> + royalty_receivers: Array<{ + __typename?: 'royalty_receivers' + receiver_address: string + royalties: any + }> + teia_meta?: { + __typename?: 'teia_tokens_meta' + accessibility?: any | null + content_rating?: string | null + is_signed: boolean + preview_uri?: string | null + } | null + } | null +} + +export type UriMintedByAddressQueryVariables = Exact<{ + address: Scalars['String'] + uris?: InputMaybe | Scalars['String']> +}> + +export type UriMintedByAddressQuery = { + __typename?: 'query_root' + tokens: Array<{ + __typename?: 'tokens' + token_id: string + editions?: any | null + }> +} + +export type GetCollabsForAddressQueryVariables = Exact<{ + address: Scalars['String'] +}> + +export type GetCollabsForAddressQuery = { + __typename?: 'query_root' + split_contracts: Array<{ + __typename?: 'teia_split_contracts' + contract_address: string + administrator_address: string + contract_profile?: { + __typename?: 'teia_users' + name?: string | null + metadata?: { __typename?: 'token_metadata'; data?: any | null } | null + } | null + shareholders: Array<{ + __typename?: 'teia_shareholders' + shareholder_address: string + shares?: any | null + holder_type: string + shareholder_profile?: { + __typename?: 'teia_users' + name?: string | null + } | null + }> + }> +} + +export type CollabCreationsTokensFragment = { + __typename?: 'tokens' + artifact_uri?: string | null + display_uri?: string | null + thumbnail_uri?: string | null + metadata_uri?: string | null + artist_address?: string | null + description?: string | null + editions?: any | null + fa2_address: string + mime_type?: string | null + minted_at?: any | null + metadata_status: string + name?: string | null + price?: any | null + royalties?: any | null + royalties_total?: any | null + token_id: string + tags: Array<{ __typename?: 'tags'; tag: string }> + artist_profile?: { + __typename?: 'teia_users' + name?: string | null + is_split?: boolean | null + } | null + listings: Array<{ + __typename?: 'listings' + amount: any + amount_left: any + contract_address: string + price: any + status: string + type: string + }> + royalty_receivers: Array<{ + __typename?: 'royalty_receivers' + receiver_address: string + royalties: any + }> + teia_meta?: { + __typename?: 'teia_tokens_meta' + accessibility?: any | null + content_rating?: string | null + is_signed: boolean + preview_uri?: string | null + } | null +} + +export type CollabCreationsTokensFragmentVariables = Exact<{ + [key: string]: never +}> + +export type CollabCreationsSplitFragment = { + __typename?: 'teia_split_contracts' + administrator_address: string + contract_address: string + shareholders: Array<{ + __typename?: 'teia_shareholders' + shareholder_address: string + holder_type: string + shareholder_profile?: { + __typename?: 'teia_users' + name?: string | null + } | null + }> + contract_profile?: { + __typename?: 'teia_users' + name?: string | null + metadata?: { __typename?: 'token_metadata'; data?: any | null } | null + } | null +} + +export type CollabCreationsSplitFragmentVariables = Exact<{ + [key: string]: never +}> + +export type CollabCreationsFromAddressQueryVariables = Exact<{ + addressOrSubjkt: Scalars['String'] +}> + +export type CollabCreationsFromAddressQuery = { + __typename?: 'query_root' + tokens: Array<{ + __typename?: 'tokens' + artifact_uri?: string | null + display_uri?: string | null + thumbnail_uri?: string | null + metadata_uri?: string | null + artist_address?: string | null + description?: string | null + editions?: any | null + fa2_address: string + mime_type?: string | null + minted_at?: any | null + metadata_status: string + name?: string | null + price?: any | null + royalties?: any | null + royalties_total?: any | null + token_id: string + tags: Array<{ __typename?: 'tags'; tag: string }> + artist_profile?: { + __typename?: 'teia_users' + name?: string | null + is_split?: boolean | null + } | null + listings: Array<{ + __typename?: 'listings' + amount: any + amount_left: any + contract_address: string + price: any + status: string + type: string + }> + royalty_receivers: Array<{ + __typename?: 'royalty_receivers' + receiver_address: string + royalties: any + }> + teia_meta?: { + __typename?: 'teia_tokens_meta' + accessibility?: any | null + content_rating?: string | null + is_signed: boolean + preview_uri?: string | null + } | null + }> + split_contracts: Array<{ + __typename?: 'teia_split_contracts' + administrator_address: string + contract_address: string + shareholders: Array<{ + __typename?: 'teia_shareholders' + shareholder_address: string + holder_type: string + shareholder_profile?: { + __typename?: 'teia_users' + name?: string | null + } | null + }> + contract_profile?: { + __typename?: 'teia_users' + name?: string | null + metadata?: { __typename?: 'token_metadata'; data?: any | null } | null + } | null + }> +} + +export type CollabCreationsFromNameQueryVariables = Exact<{ + addressOrSubjkt: Scalars['String'] +}> + +export type CollabCreationsFromNameQuery = { + __typename?: 'query_root' + tokens: Array<{ + __typename?: 'tokens' + artifact_uri?: string | null + display_uri?: string | null + thumbnail_uri?: string | null + metadata_uri?: string | null + artist_address?: string | null + description?: string | null + editions?: any | null + fa2_address: string + mime_type?: string | null + minted_at?: any | null + metadata_status: string + name?: string | null + price?: any | null + royalties?: any | null + royalties_total?: any | null + token_id: string + tags: Array<{ __typename?: 'tags'; tag: string }> + artist_profile?: { + __typename?: 'teia_users' + name?: string | null + is_split?: boolean | null + } | null + listings: Array<{ + __typename?: 'listings' + amount: any + amount_left: any + contract_address: string + price: any + status: string + type: string + }> + royalty_receivers: Array<{ + __typename?: 'royalty_receivers' + receiver_address: string + royalties: any + }> + teia_meta?: { + __typename?: 'teia_tokens_meta' + accessibility?: any | null + content_rating?: string | null + is_signed: boolean + preview_uri?: string | null + } | null + }> + split_contracts: Array<{ + __typename?: 'teia_split_contracts' + administrator_address: string + contract_address: string + shareholders: Array<{ + __typename?: 'teia_shareholders' + shareholder_address: string + holder_type: string + shareholder_profile?: { + __typename?: 'teia_users' + name?: string | null + } | null + }> + contract_profile?: { + __typename?: 'teia_users' + name?: string | null + metadata?: { __typename?: 'token_metadata'; data?: any | null } | null + } | null + }> +} + +export type UserFragmentFragment = { + __typename?: 'teia_users' + user_address: string + name?: string | null + metadata?: { __typename?: 'token_metadata'; data?: any | null } | null +} + +export type UserFragmentFragmentVariables = Exact<{ [key: string]: never }> + +export type UserByNameQueryVariables = Exact<{ + addressOrSubjkt: Scalars['String'] +}> + +export type UserByNameQuery = { + __typename?: 'query_root' + teia_users: Array<{ + __typename?: 'teia_users' + user_address: string + name?: string | null + metadata?: { __typename?: 'token_metadata'; data?: any | null } | null + }> +} + +export type UserByAddressQueryVariables = Exact<{ + addressOrSubjkt: Scalars['String'] +}> + +export type UserByAddressQuery = { + __typename?: 'query_root' + teia_users: Array<{ + __typename?: 'teia_users' + user_address: string + name?: string | null + metadata?: { __typename?: 'token_metadata'; data?: any | null } | null + }> +} + +export const BaseTokenFieldsFragmentDoc = gql` + fragment baseTokenFields on tokens { + artifact_uri + display_uri + thumbnail_uri + metadata_uri + artist_address + artist_profile { + name + is_split + } + description + editions + fa2_address + listings(where: { status: { _eq: "active" } }, order_by: { price: asc }) { + amount + amount_left + contract_address + price + status + type + } + mime_type + minted_at + metadata_status + name + price + royalties + royalties_total + royalty_receivers { + receiver_address + royalties + } + teia_meta { + accessibility + content_rating + is_signed + preview_uri + } + token_id + } +` +export const CollabCreationsTokensFragmentDoc = gql` + fragment collabCreationsTokens on tokens { + ...baseTokenFields + tags { + tag + } + } + ${BaseTokenFieldsFragmentDoc} +` +export const CollabCreationsSplitFragmentDoc = gql` + fragment collabCreationsSplit on teia_split_contracts { + administrator_address + shareholders { + shareholder_address + shareholder_profile { + name + } + holder_type + } + contract_address + contract_profile { + name + metadata { + data + } + } + } +` +export const UserFragmentFragmentDoc = gql` + fragment userFragment on teia_users { + user_address + name + metadata { + data + } + } +` +export const ObjktDocument = gql` + query objkt($id: String!) { + tokens_by_pk( + fa2_address: "KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton" + token_id: $id + ) { + ...baseTokenFields + artist_profile { + name + is_split + split_contract { + administrator_address + shareholders { + shareholder_address + shareholder_profile { + user_address + name + } + holder_type + shares + } + } + } + signatures { + shareholder_address + } + rights + right_uri + listings(where: { status: { _eq: "active" } }, order_by: { price: asc }) { + type + contract_address + amount + amount_left + swap_id + ask_id + offer_id + price + start_price + end_price + seller_address + seller_profile { + name + } + status + } + holdings(where: { amount: { _gt: "0" } }) { + holder_address + amount + holder_profile { + name + } + } + tags { + tag + } + events( + where: { + _or: [ + { implements: { _eq: "SALE" } } + { + type: { + _in: [ + "HEN_MINT" + "TEIA_SWAP" + "HEN_SWAP" + "HEN_SWAP_V2" + "VERSUM_SWAP" + "FA2_TRANSFER" + ] + } + } + ] + } + order_by: [{ level: desc }, { opid: desc }] + ) { + timestamp + implements + ophash + id + type + price + amount + editions + seller_address + seller_profile { + name + } + buyer_address + buyer_profile { + name + } + from_address + from_profile { + name + } + to_address + to_profile { + name + } + } + } + } + ${BaseTokenFieldsFragmentDoc} +` +export const UriMintedByAddressDocument = gql` + query uriMintedByAddress($address: String!, $uris: [String!] = "") { + tokens( + order_by: { minted_at: desc } + where: { + metadata_status: { _eq: "processed" } + artifact_uri: { _in: $uris } + artist_address: { _eq: $address } + } + ) { + token_id + editions + } + } +` +export const GetCollabsForAddressDocument = gql` + query getCollabsForAddress($address: String!) { + split_contracts: teia_split_contracts( + where: { + _or: [ + { administrator_address: { _eq: $address } } + { shareholders: { shareholder_address: { _eq: $address } } } + ] + } + ) { + contract_address + contract_profile { + name + metadata { + data + } + } + administrator_address + shareholders { + shareholder_address + shareholder_profile { + name + } + shares + holder_type + } + } + } +` +export const CollabCreationsFromAddressDocument = gql` + query collabCreationsFromAddress($addressOrSubjkt: String!) { + tokens( + where: { + artist_address: { _eq: $addressOrSubjkt } + editions: { _gt: "0" } + } + order_by: { token_id: desc } + ) { + ...collabCreationsTokens + } + split_contracts: teia_split_contracts( + where: { contract_address: { _eq: $addressOrSubjkt } } + ) { + ...collabCreationsSplit + } + } + ${CollabCreationsTokensFragmentDoc} + ${CollabCreationsSplitFragmentDoc} +` +export const CollabCreationsFromNameDocument = gql` + query collabCreationsFromName($addressOrSubjkt: String!) { + tokens( + where: { + artist_profile: { name: { _eq: $addressOrSubjkt } } + editions: { _gt: "0" } + } + order_by: { token_id: desc } + ) { + ...collabCreationsTokens + } + split_contracts: teia_split_contracts( + where: { contract_profile: { name: { _eq: $addressOrSubjkt } } } + ) { + ...collabCreationsSplit + } + } + ${CollabCreationsTokensFragmentDoc} + ${CollabCreationsSplitFragmentDoc} +` +export const UserByNameDocument = gql` + query userByName($addressOrSubjkt: String!) { + teia_users(where: { name: { _eq: $addressOrSubjkt } }) { + ...userFragment + } + } + ${UserFragmentFragmentDoc} +` +export const UserByAddressDocument = gql` + query userByAddress($addressOrSubjkt: String!) { + teia_users(where: { user_address: { _eq: $addressOrSubjkt } }) { + ...userFragment + } + } + ${UserFragmentFragmentDoc} +` + +export type SdkFunctionWrapper = ( + action: (requestHeaders?: Record) => Promise, + operationName: string, + operationType?: string +) => Promise + +const defaultWrapper: SdkFunctionWrapper = ( + action, + _operationName, + _operationType +) => action() + +export function getSdk( + client: GraphQLClient, + withWrapper: SdkFunctionWrapper = defaultWrapper +) { + return { + objkt( + variables: ObjktQueryVariables, + requestHeaders?: Dom.RequestInit['headers'] + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request(ObjktDocument, variables, { + ...requestHeaders, + ...wrappedRequestHeaders, + }), + 'objkt', + 'query' + ) + }, + uriMintedByAddress( + variables: UriMintedByAddressQueryVariables, + requestHeaders?: Dom.RequestInit['headers'] + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + UriMintedByAddressDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders } + ), + 'uriMintedByAddress', + 'query' + ) + }, + getCollabsForAddress( + variables: GetCollabsForAddressQueryVariables, + requestHeaders?: Dom.RequestInit['headers'] + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + GetCollabsForAddressDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders } + ), + 'getCollabsForAddress', + 'query' + ) + }, + collabCreationsFromAddress( + variables: CollabCreationsFromAddressQueryVariables, + requestHeaders?: Dom.RequestInit['headers'] + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + CollabCreationsFromAddressDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders } + ), + 'collabCreationsFromAddress', + 'query' + ) + }, + collabCreationsFromName( + variables: CollabCreationsFromNameQueryVariables, + requestHeaders?: Dom.RequestInit['headers'] + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + CollabCreationsFromNameDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders } + ), + 'collabCreationsFromName', + 'query' + ) + }, + userByName( + variables: UserByNameQueryVariables, + requestHeaders?: Dom.RequestInit['headers'] + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request(UserByNameDocument, variables, { + ...requestHeaders, + ...wrappedRequestHeaders, + }), + 'userByName', + 'query' + ) + }, + userByAddress( + variables: UserByAddressQueryVariables, + requestHeaders?: Dom.RequestInit['headers'] + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request(UserByAddressDocument, variables, { + ...requestHeaders, + ...wrappedRequestHeaders, + }), + 'userByAddress', + 'query' + ) + }, + } +} +export type Sdk = ReturnType +export function getSdkWithHooks( + client: GraphQLClient, + withWrapper: SdkFunctionWrapper = defaultWrapper +) { + const sdk = getSdk(client, withWrapper) + return { + ...sdk, + useObjkt( + key: SWRKeyInterface, + variables: ObjktQueryVariables, + config?: SWRConfigInterface + ) { + return useSWR( + key, + () => sdk.objkt(variables), + config + ) + }, + useUriMintedByAddress( + key: SWRKeyInterface, + variables: UriMintedByAddressQueryVariables, + config?: SWRConfigInterface + ) { + return useSWR( + key, + () => sdk.uriMintedByAddress(variables), + config + ) + }, + useGetCollabsForAddress( + key: SWRKeyInterface, + variables: GetCollabsForAddressQueryVariables, + config?: SWRConfigInterface + ) { + return useSWR( + key, + () => sdk.getCollabsForAddress(variables), + config + ) + }, + useCollabCreationsFromAddress( + key: SWRKeyInterface, + variables: CollabCreationsFromAddressQueryVariables, + config?: SWRConfigInterface + ) { + return useSWR( + key, + () => sdk.collabCreationsFromAddress(variables), + config + ) + }, + useCollabCreationsFromName( + key: SWRKeyInterface, + variables: CollabCreationsFromNameQueryVariables, + config?: SWRConfigInterface + ) { + return useSWR( + key, + () => sdk.collabCreationsFromName(variables), + config + ) + }, + useUserByName( + key: SWRKeyInterface, + variables: UserByNameQueryVariables, + config?: SWRConfigInterface + ) { + return useSWR( + key, + () => sdk.userByName(variables), + config + ) + }, + useUserByAddress( + key: SWRKeyInterface, + variables: UserByAddressQueryVariables, + config?: SWRConfigInterface + ) { + return useSWR( + key, + () => sdk.userByAddress(variables), + config + ) + }, + } +} +export type SdkWithHooks = ReturnType diff --git a/src/hooks/types.d.ts b/src/hooks/types.d.ts new file mode 100644 index 000000000..5fceb1b0f --- /dev/null +++ b/src/hooks/types.d.ts @@ -0,0 +1,18 @@ +type ListMap = Map + +export interface SettingsData { + logos: string[] + walletBlockMap: ListMap + nsfwMap: ListMap + underReviewMap: ListMap + ignoreUriMap: ListMap + objktBlockMap: ListMap + feedIgnoreUriMap: ListMap + photosensitiveMap: ListMap +} + +export interface SettingsResponse { + data: SettingsData + error: Error + isLoading: boolean +} diff --git a/src/hooks/use-body-class.js b/src/hooks/use-body-class.ts similarity index 67% rename from src/hooks/use-body-class.js rename to src/hooks/use-body-class.ts index dc9dc8652..cd391b842 100644 --- a/src/hooks/use-body-class.js +++ b/src/hooks/use-body-class.ts @@ -1,13 +1,15 @@ import { useEffect } from 'react' -const addBodyClass = (className) => document.body.classList.add(className) -const removeBodyClass = (className) => document.body.classList.remove(className) +const addBodyClass = (className: string) => + document.body.classList.add(className) +const removeBodyClass = (className: string) => + document.body.classList.remove(className) /** * Hook to add a class to the body from a mounted component (used by dropdowns to dim background) * @param {string} className The class name to add. */ -export default function useBodyClass(className) { +export default function useBodyClass(className: string | string[]) { useEffect(() => { // Set up className instanceof Array diff --git a/src/hooks/use-click-outside.js b/src/hooks/use-click-outside.tsx similarity index 66% rename from src/hooks/use-click-outside.js rename to src/hooks/use-click-outside.tsx index 1c8c222f5..8221997a7 100644 --- a/src/hooks/use-click-outside.js +++ b/src/hooks/use-click-outside.tsx @@ -6,11 +6,15 @@ import { useEffect } from 'react' * @param {*} callback The callback to call when we clicked outside. * @param {boolean} ignore_parent If true, clicking on the direct parent won't trigger the callback. */ -export const useClickOutside = (ref, callback, ignore_parent = false) => { - const onClickOut = (event) => { - if (ref.current && !ref.current.contains(event.target)) { +export const useClickOutside = ( + ref: React.RefObject, + callback: () => void, + ignore_parent = false +) => { + const onClickOut = (event: MouseEvent) => { + if ((ref?.current as T) && !ref?.current?.contains(event.target as T)) { if (ignore_parent) { - if (!ref.current.parentElement.contains(event.target)) { + if (!ref.current?.parentElement?.contains(event.target as T)) { callback() } } else { diff --git a/src/hooks/use-controlled.js b/src/hooks/use-controlled.ts similarity index 74% rename from src/hooks/use-controlled.js rename to src/hooks/use-controlled.ts index 18971159d..8c4cf69f0 100644 --- a/src/hooks/use-controlled.js +++ b/src/hooks/use-controlled.ts @@ -1,6 +1,9 @@ import { useCallback, useRef, useState } from 'react' -export const useControlled = (controlled, initial) => { +export const useControlled = ( + controlled?: T, + initial?: T +): [val: T | undefined, setVal: (arg: T) => void, controlled: boolean] => { const controlledRef = useRef(false) controlledRef.current = controlled !== undefined @@ -9,7 +12,7 @@ export const useControlled = (controlled, initial) => { const value = controlledRef.current ? controlled : uncontrolledValue const setValue = useCallback( - (nextValue) => { + (nextValue: T) => { if (!controlledRef.current) { setUncontrolledValue(nextValue) } diff --git a/src/hooks/use-keyboard.js b/src/hooks/use-keyboard.ts similarity index 55% rename from src/hooks/use-keyboard.js rename to src/hooks/use-keyboard.ts index 55fd41d76..0675f7feb 100644 --- a/src/hooks/use-keyboard.js +++ b/src/hooks/use-keyboard.ts @@ -1,9 +1,17 @@ +import type keyboardjs from 'keyboardjs' import { useEffect, useState } from 'react' import { useMount, useUpdateEffect } from 'react-use' -export const useKeyboard = (combination, keydown, keyup) => { - const [state, set] = useState([false, null]) - const [keyboardJs, setKeyboardJs] = useState(null) +export const useKeyboard = ( + combination: string, + keydown?: () => void, + keyup?: () => void +) => { + const [state, set] = useState<[boolean, keyboardjs.KeyEvent | undefined]>([ + false, + undefined, + ]) + const [keyboardJs, setKeyboardJs] = useState(null) useMount(() => { import('keyboardjs').then((k) => setKeyboardJs(k.default || k)) @@ -14,8 +22,8 @@ export const useKeyboard = (combination, keydown, keyup) => { return } - const down = (event) => set([true, event]) - const up = (event) => set([false, event]) + const down = (event?: keyboardjs.KeyEvent) => set([true, event]) + const up = (event?: keyboardjs.KeyEvent) => set([false, event]) keyboardJs.bind(combination, down, up, true) return () => { diff --git a/src/hooks/use-language.js b/src/hooks/use-language.ts similarity index 100% rename from src/hooks/use-language.js rename to src/hooks/use-language.ts diff --git a/src/hooks/use-settings.js b/src/hooks/use-settings.ts similarity index 80% rename from src/hooks/use-settings.js rename to src/hooks/use-settings.ts index bbb39c9ae..f1439e4e7 100644 --- a/src/hooks/use-settings.js +++ b/src/hooks/use-settings.ts @@ -1,14 +1,9 @@ import useSWR from 'swr' import axios from 'axios' import flatten from 'lodash/flatten' +import type { SettingsData } from './types' -/** - * @typedef { Map } ListMap - * @typedef { {logos:[string], walletBlockMap:ListMap , nsfwMap: ListMap, underReviewMap:ListMap, ignoreUriMap:ListMap, feedIgnoreUriMap:ListMap, photosensitiveMap:ListMap} } SettingsData - * @typedef { {data: SettingsData, error:Error, isLoading:boolean} } UseSettingsResult - */ - -function shuffleLogos(logos) { +function shuffleLogos(logos: string[]) { // Shuffles the list daily const shuffledLogos = [...logos] let currentIndex = shuffledLogos.length @@ -39,7 +34,10 @@ function shuffleLogos(logos) { return shuffledLogos } -function filterWalletBlockList(restrictedLists, permittedLists) { +function filterWalletBlockList( + restrictedLists: string[], + permittedLists: string[] +) { const walletAllowList = flatten(permittedLists) // Override with permitted list @@ -50,7 +48,7 @@ function filterWalletBlockList(restrictedLists, permittedLists) { return mapFromList(overiddenList) } -const mapFromList = (input_list) => { +const mapFromList = (input_list: string[]) => { const out_map = new Map() input_list.forEach((element) => { out_map.set(element, 1) @@ -59,13 +57,10 @@ const mapFromList = (input_list) => { return out_map } -const report_url = (name) => `${import.meta.env.VITE_TEIA_REPORT}/${name}` +const report_url = (name: string) => + `${import.meta.env.VITE_TEIA_REPORT}/${name}` -/** - * Fetches the various lists cached with SWR - * @returns {SettingsData} - */ -async function fetchSettings() { +async function fetchSettings(): Promise { const [ objktBlockMapResponse, logosResponse, @@ -93,7 +88,7 @@ async function fetchSettings() { const logoPacks = [logosResponse, logosPrideResponse] const logos = logoPacks.flatMap((logoPack) => - logoPack.data.logos.map((logo) => ({ + logoPack.data.logos.map((logo: string) => ({ name: logo, themable: logoPack.data.themable, collection: logoPack.data.collection, @@ -101,11 +96,13 @@ async function fetchSettings() { ) const objktBlockMap = mapFromList( - objktBlockMapResponse.data.map((n) => n.toString()) + objktBlockMapResponse.data.map((n: number) => n.toString()) + ) + const nsfwMap = mapFromList( + nsfwResponse.data.map((n: number) => n.toString()) ) - const nsfwMap = mapFromList(nsfwResponse.data.map((n) => n.toString())) const photosensitiveMap = mapFromList( - photosensitiveResponse.data.map((n) => n.toString()) + photosensitiveResponse.data.map((n: number) => n.toString()) ) const underReviewMap = mapFromList(underReviewResponse.data) const ignoreUriMap = mapFromList(ignoreUriResponse.data) diff --git a/src/hooks/use-title.js b/src/hooks/use-title.ts similarity index 86% rename from src/hooks/use-title.js rename to src/hooks/use-title.ts index 037673ee1..8de9b6b48 100644 --- a/src/hooks/use-title.js +++ b/src/hooks/use-title.ts @@ -1,6 +1,6 @@ import { useEffect } from 'react' -export function useTitle(title) { +export function useTitle(title?: string) { useEffect(() => { // const prevTitle = document.title document.title = title ? `${title} - teia` : 'teia' diff --git a/src/hooks/use-twemoji.js b/src/hooks/use-twemoji.ts similarity index 100% rename from src/hooks/use-twemoji.js rename to src/hooks/use-twemoji.ts diff --git a/src/icons/index.js b/src/icons/index.ts similarity index 100% rename from src/icons/index.js rename to src/icons/index.ts diff --git a/src/icons/indexer_status.js b/src/icons/indexer_status.ts similarity index 100% rename from src/icons/indexer_status.js rename to src/icons/indexer_status.ts diff --git a/src/icons/refs.js b/src/icons/refs.ts similarity index 100% rename from src/icons/refs.js rename to src/icons/refs.ts diff --git a/src/pages/about/index.jsx b/src/pages/about/index.tsx similarity index 100% rename from src/pages/about/index.jsx rename to src/pages/about/index.tsx diff --git a/src/pages/collaborate/create.jsx b/src/pages/collaborate/create.tsx similarity index 97% rename from src/pages/collaborate/create.jsx rename to src/pages/collaborate/create.tsx index 3d7dae198..3278d2160 100644 --- a/src/pages/collaborate/create.jsx +++ b/src/pages/collaborate/create.tsx @@ -8,13 +8,14 @@ import styles from '@style' import classNames from 'classnames' import { Button, Secondary } from '@atoms/button' import { useUserStore } from '@context/userStore' +import type { Teia_Shareholders } from 'gql' export const CreateCollaboration = () => { const address = useUserStore((st) => st.address) // Core collaborators and beneficiaries const [editCollaborators, setEditCollaborators] = useState(true) - const [collaborators, setCollaborators] = useState([]) + const [collaborators, setCollaborators] = useState([]) const [beneficiaries, setBeneficiaries] = useState([]) // For adding people not directly involved with the creation diff --git a/src/pages/collaborate/index.jsx b/src/pages/collaborate/index.tsx similarity index 96% rename from src/pages/collaborate/index.jsx rename to src/pages/collaborate/index.tsx index 1aa8d7a72..d6988f3dd 100644 --- a/src/pages/collaborate/index.jsx +++ b/src/pages/collaborate/index.tsx @@ -21,7 +21,7 @@ const Collaborate = () => { // If an address is created, update the tab useEffect(() => { - const clb = (originationOpHash) => { + const clb = (originationOpHash?: string) => { console.debug({ originationOpHash }) if (originationOpHash) { navigate('/') diff --git a/src/pages/collaborate/manage.jsx b/src/pages/collaborate/manage.jsx deleted file mode 100644 index 09a7a1a2b..000000000 --- a/src/pages/collaborate/manage.jsx +++ /dev/null @@ -1,138 +0,0 @@ -import { useState, useEffect } from 'react' -import { Container } from '@atoms/layout' -import styles from '@components/collab/index.module.scss' -import { fetchGraphQL, getCollabsForAddress } from '@data/api' -// import { Input } from '@atoms/input' -import { CountdownTimer } from '@components/collab/manage/CountdownTimer' -import { CollabList } from '@components/collab/manage/CollabList' -import { useUserStore } from '@context/userStore' -import { useCollabStore } from '@context/collabStore' -import { shallow } from 'zustand/shallow' - -export const CollabContractsOverview = ({ showAdminOnly = false }) => { - const address = useUserStore((st) => st.address) - - const [ - originatedContract, - originationOpHash, - findOriginatedContractFromOpHash, - ] = useCollabStore( - (st) => [ - st.originatedContract, - st.originationOpHash, - st.findOriginatedContractFromOpHash, - ], - shallow - ) - - const [collabs, setCollabs] = useState([]) - // const [managedCollabs, setManagedCollabs] = useState([]) - const [loadingCollabs, setLoadingCollabs] = useState(true) - - const [checkInterval, setCheckInterval] = useState(30) - const [timerEndDate, setTimerEndDate] = useState() - - // TODO - maybe allow manual input of a KT address - // const [addAddressManually, setAddAddressManually] = useState(false) - // const [manualAddress, setManualAddress] = useState('') - - useEffect(() => { - // const isChecking = originationOpHash && !checkingForOrigination - // setCheckingForOrigination(isChecking) - - if (!(originationOpHash && !timerEndDate)) { - return - } - const timerDate = new Date() - timerDate.setTime(timerDate.getTime() + checkInterval * 1000) - setTimerEndDate(timerDate) - }, [originationOpHash, timerEndDate, checkInterval]) - - useEffect(() => { - if (!address) { - return - } - - setLoadingCollabs(true) - console.debug('Now checking for available collabs') - - // On boot, see what addresses the synced address can manage - fetchGraphQL(getCollabsForAddress, 'GetCollabs', { - address, - }).then(({ data }) => { - setLoadingCollabs(false) - - if (!data) { - return - } - const allCollabs = data.split_contracts || [] - const adminCollabs = allCollabs.filter( - (c) => c.administrator_address === address - ) - const participantCollabs = allCollabs.filter( - (c) => c.administrator_address !== address - ) - - // Show admin followed by participant - const availableCollabs = showAdminOnly - ? allCollabs.filter((c) => c.administrator_address === address) - : [...adminCollabs, ...participantCollabs] - - setCollabs(availableCollabs) - }) - }, [address, originatedContract, showAdminOnly]) - - const _onTimerComplete = () => { - findOriginatedContractFromOpHash(originationOpHash) - setCheckInterval(10) - } - - return ( - - {originationOpHash && timerEndDate && ( -

- Collab contract creation in progress...{' '} - -

- )} - - {originatedContract && ( -
-

- Collaborative contract created successfully! -

-

Address: {originatedContract.address}

-
- )} - - {collabs.length > 0 && ( - - )} - - {/* {collabs.length > 0 && ( - - )} */} - - {collabs.length === 0 && !originationOpHash && ( -

- {loadingCollabs - ? 'Looking for collabs...' - : 'You are not a manager of any collaborations at the moment'} -

- )} -
- ) -} diff --git a/src/pages/collaborate/manage.tsx b/src/pages/collaborate/manage.tsx new file mode 100644 index 000000000..821e6002c --- /dev/null +++ b/src/pages/collaborate/manage.tsx @@ -0,0 +1,142 @@ +import { useMemo } from 'react' +import { Container } from '@atoms/layout' +import { apiSWR } from '@data/api' +// import { Input } from '@atoms/input' +// import { CountdownTimer } from '@components/collab/manage/CountdownTimer' +import { CollabList } from '@components/collab/manage/CollabList' +import { useUserStore } from '@context/userStore' +// import { useCollabStore } from '@context/collabStore' +// import { shallow } from 'zustand/shallow' +import { Loading } from '@atoms/loading' + +export const CollabContractsOverview = ({ showAdminOnly = false }) => { + const address = useUserStore((st) => st.address) + + // const [ + // originatedContract, + // originationOpHash, + // findOriginatedContractFromOpHash, + // ] = useCollabStore( + // (st) => [ + // st.originatedContract, + // st.originationOpHash, + // st.findOriginatedContractFromOpHash, + // ], + // shallow + // ) + + // const [collabs, setCollabs] = useState([]) + // const [managedCollabs, setManagedCollabs] = useState([]) + // const [loadingCollabs, setLoadingCollabs] = useState(true) + + // const [checkInterval, setCheckInterval] = useState(30) + // const [timerEndDate, setTimerEndDate] = useState() + + // TODO - maybe allow manual input of a KT address + // const [addAddressManually, setAddAddressManually] = useState(false) + // const [manualAddress, setManualAddress] = useState('') + + // useEffect(() => { + // // const isChecking = originationOpHash && !checkingForOrigination + // // setCheckingForOrigination(isChecking) + + // if (!(originationOpHash && !timerEndDate)) { + // return + // } + // const timerDate = new Date() + // timerDate.setTime(timerDate.getTime() + checkInterval * 1000) + // setTimerEndDate(timerDate) + // }, [originationOpHash, timerEndDate, checkInterval]) + + const { error, data } = apiSWR.useGetCollabsForAddress('/collabs-manage', { + address: address || '', + }) + const collabs = useMemo(() => { + if (!address) { + return + } + console.debug('Now checking for available collabs') + + // On boot, see what addresses the synced address can manage + if (!data) { + return + } + const allCollabs = data.split_contracts || [] + const adminCollabs = allCollabs.filter( + (c) => c.administrator_address === address + ) + const participantCollabs = allCollabs.filter( + (c) => c.administrator_address !== address + ) + + // Show admin followed by participant + const availableCollabs = showAdminOnly + ? allCollabs.filter((c) => c.administrator_address === address) + : [...adminCollabs, ...participantCollabs] + + return availableCollabs + }, [data, address /*, originatedContract*/, showAdminOnly]) + if (!address) { + return null + } + if (!data) { + return + } + + if (error) { + throw error + } + // const _onTimerComplete = () => { + // findOriginatedContractFromOpHash(originationOpHash) + // // setCheckInterval(10) + // } + + return ( + + {/* {originationOpHash && timerEndDate && ( +

+ Collab contract creation in progress...{' '} + +

+ )} + + {originatedContract && ( +
+

+ Collaborative contract created successfully! +

+

Address: {originatedContract.address}

+
+ )} */} + + {collabs && collabs.length > 0 && ( + + )} + + {/* {collabs.length > 0 && ( + + )} */} + + {/* {collabs.length === 0 && !originationOpHash && ( +

+ {loadingCollabs + ? 'Looking for collabs...' + : 'You are not a manager of any collaborations at the moment'} +

+ )} */} +
+ ) +} diff --git a/src/pages/config/Settings.jsx b/src/pages/config/Settings.tsx similarity index 100% rename from src/pages/config/Settings.jsx rename to src/pages/config/Settings.tsx diff --git a/src/pages/config/Subjkt.tsx b/src/pages/config/Subjkt.tsx index 3c65a206b..863c23282 100644 --- a/src/pages/config/Subjkt.tsx +++ b/src/pages/config/Subjkt.tsx @@ -73,7 +73,7 @@ export const Subjkt = () => { console.debug('Subjkt Infos:', res) if (res) { - let { metadata, name } = res + const { metadata, name } = res if (name) setSubjkt(name) diff --git a/src/pages/config/index.jsx b/src/pages/config/index.tsx similarity index 100% rename from src/pages/config/index.jsx rename to src/pages/config/index.tsx diff --git a/src/pages/faq/index.jsx b/src/pages/faq/index.tsx similarity index 100% rename from src/pages/faq/index.jsx rename to src/pages/faq/index.tsx diff --git a/src/pages/home/feeds/friends-feed.jsx b/src/pages/home/feeds/friends-feed.tsx similarity index 97% rename from src/pages/home/feeds/friends-feed.jsx rename to src/pages/home/feeds/friends-feed.tsx index 4bcdd3dd8..86c372172 100644 --- a/src/pages/home/feeds/friends-feed.jsx +++ b/src/pages/home/feeds/friends-feed.tsx @@ -2,7 +2,7 @@ import useSWR from 'swr' import uniq from 'lodash/uniq' import TokenCollection from '@atoms/token-collection' import { fetchGraphQL } from '@data/api' -import { BaseTokenFieldsFragment } from '@data/api' +import { BaseTokenFieldsFragment } from '@data/queries' import { gql } from 'graphql-request' import { useParams } from 'react-router' import styles from '@style' diff --git a/src/pages/home/feeds/fund-feed.jsx b/src/pages/home/feeds/fund-feed.tsx similarity index 93% rename from src/pages/home/feeds/fund-feed.jsx rename to src/pages/home/feeds/fund-feed.tsx index 6cc9a64db..2c253d8c3 100644 --- a/src/pages/home/feeds/fund-feed.jsx +++ b/src/pages/home/feeds/fund-feed.tsx @@ -3,7 +3,7 @@ import orderBy from 'lodash/orderBy' import uniqBy from 'lodash/uniqBy' import flatten from 'lodash/flatten' import TokenCollection from '@atoms/token-collection' -import { BaseTokenFieldsFragment } from '@data/api' +import { BaseTokenFieldsFragment } from '@data/queries' import styles from '@style' function FundFeed({ @@ -13,7 +13,15 @@ function FundFeed({ contractAddress, cause, namepsace, - tags = null, + tags, +}: { + minShares?: number + introText: string + infoUrl: string + contractAddress: string + cause: string + namepsace: string + tags?: string[] }) { return ( <> diff --git a/src/pages/home/feeds/fund-feeds.jsx b/src/pages/home/feeds/fund-feeds.tsx similarity index 100% rename from src/pages/home/feeds/fund-feeds.jsx rename to src/pages/home/feeds/fund-feeds.tsx diff --git a/src/pages/home/feeds/lists-feed.jsx b/src/pages/home/feeds/lists-feed.tsx similarity index 90% rename from src/pages/home/feeds/lists-feed.jsx rename to src/pages/home/feeds/lists-feed.tsx index ec5fc403d..c9b0faac3 100644 --- a/src/pages/home/feeds/lists-feed.jsx +++ b/src/pages/home/feeds/lists-feed.tsx @@ -1,18 +1,18 @@ import useSWR from 'swr' import TokenCollection from '@atoms/token-collection' -import { BaseTokenFieldsFragment } from '@data/api' +import { BaseTokenFieldsFragment } from '@data/queries' import { gql } from 'graphql-request' import { Input } from '@atoms/input' import { useState } from 'react' import { Button } from '@atoms/button' import axios from 'axios' -async function fetchList(url) { - const data = await axios.get(url) - return data.data.map((e) => e.toString()) +async function fetchList(url: string): Promise { + const { data } = await axios.get(url) + return data.map((e) => e.toString()) } -const lists = { +const lists: { [key: string]: string } = { 'NSFW List': 'https://lists.teia.art/nsfw.json', 'Photo Sensitive List': 'https://lists.teia.art/photosensitive.json', 'Restricted OBJKTs (deprecated)': diff --git a/src/pages/home/feeds/mime-type-feed.jsx b/src/pages/home/feeds/mime-type-feed.tsx similarity index 85% rename from src/pages/home/feeds/mime-type-feed.jsx rename to src/pages/home/feeds/mime-type-feed.tsx index 29c370896..3d2a3ea73 100644 --- a/src/pages/home/feeds/mime-type-feed.jsx +++ b/src/pages/home/feeds/mime-type-feed.tsx @@ -1,22 +1,33 @@ import { gql } from 'graphql-request' import uniqBy from 'lodash/uniqBy' -import { BaseTokenFieldsFragment } from '@data/api' +import { BaseTokenFieldsFragment } from '@data/queries' import { HEN_CONTRACT_FA2 } from '@constants' import TokenCollection from '@atoms/token-collection' +import type { Token_Metadata } from 'gql' -function MimeTypeFeed({ label, namespace, mimeTypes }) { +function MimeTypeFeed({ + label, + namespace, + mimeTypes, +}: { + label: string + namespace: string + mimeTypes: string[] +}) { return ( uniqBy(tokens, 'artist_address')} + postProcessTokens={(tokens: Token_Metadata[]) => + uniqBy(tokens, 'artist_address') + } query={gql` ${BaseTokenFieldsFragment} query getTokensByMimeTypes($limit: Int!) { tokens(where: { mime_type: {_in : [${mimeTypes - .map((mimeType) => `"${mimeType}"`) + .map((mimeType: string) => `"${mimeType}"`) .join( ', ' )}] }, editions : { _neq : 0 }, metadata_status: { _eq: "processed" }, fa2_address: { _eq: "${HEN_CONTRACT_FA2}"}}, order_by: { minted_at: desc }, limit: $limit) { diff --git a/src/pages/home/feeds/new-objkts-feed.jsx b/src/pages/home/feeds/new-objkts-feed.tsx similarity index 79% rename from src/pages/home/feeds/new-objkts-feed.jsx rename to src/pages/home/feeds/new-objkts-feed.tsx index f00dd59aa..8d0b618e4 100644 --- a/src/pages/home/feeds/new-objkts-feed.jsx +++ b/src/pages/home/feeds/new-objkts-feed.tsx @@ -1,8 +1,9 @@ import { gql } from 'graphql-request' import uniqBy from 'lodash/uniqBy' -import { BaseTokenFieldsFragment } from '@data/api' +import { BaseTokenFieldsFragment } from '@data/queries' import { HEN_CONTRACT_FA2 } from '@constants' import TokenCollection from '@atoms/token-collection' +import type { Token_Metadata } from 'gql' export function NewObjktsFeed() { return ( @@ -11,7 +12,9 @@ export function NewObjktsFeed() { label="New OBJKTs" namespace="new-objkts-feed" maxItems={600} - postProcessTokens={(tokens) => uniqBy(tokens, 'artist_address')} + postProcessTokens={(tokens: Token_Metadata[]) => + uniqBy(tokens, 'artist_address') + } query={gql` ${BaseTokenFieldsFragment} query getNewObjkt($limit: Int!) { diff --git a/src/pages/home/feeds/one-one-feed.jsx b/src/pages/home/feeds/one-one-feed.tsx similarity index 78% rename from src/pages/home/feeds/one-one-feed.jsx rename to src/pages/home/feeds/one-one-feed.tsx index c03d75c93..bc5e99ace 100644 --- a/src/pages/home/feeds/one-one-feed.jsx +++ b/src/pages/home/feeds/one-one-feed.tsx @@ -1,8 +1,10 @@ import { gql } from 'graphql-request' import uniqBy from 'lodash/uniqBy' -import { BaseTokenFieldsFragment } from '@data/api' + import { HEN_CONTRACT_FA2 } from '@constants' import TokenCollection from '@atoms/token-collection' +import { BaseTokenFieldsFragment } from '@data/queries' +import type { Token_Metadata } from 'gql' export function OneOnOneFeed() { return ( @@ -11,7 +13,9 @@ export function OneOnOneFeed() { label="1/1 OBJKTs" namespace="one-on-one-feed" maxItems={600} - postProcessTokens={(tokens) => uniqBy(tokens, 'artist_address')} + postProcessTokens={(tokens: Token_Metadata[]) => + uniqBy(tokens, 'artist_address') + } query={gql` ${BaseTokenFieldsFragment} query getUnoUno($limit: Int!) { diff --git a/src/pages/home/feeds/random-feed.jsx b/src/pages/home/feeds/random-feed.tsx similarity index 95% rename from src/pages/home/feeds/random-feed.jsx rename to src/pages/home/feeds/random-feed.tsx index 555290c6d..8b3b4f3f2 100644 --- a/src/pages/home/feeds/random-feed.jsx +++ b/src/pages/home/feeds/random-feed.tsx @@ -1,7 +1,7 @@ import { useMemo } from 'react' import { gql } from 'graphql-request' import random from 'lodash/random' -import { BaseTokenFieldsFragment } from '@data/api' +import { BaseTokenFieldsFragment } from '@data/queries' import { HEN_CONTRACT_FA2 } from '@constants' import TokenCollection from '@atoms/token-collection' diff --git a/src/pages/home/feeds/recent-sales-feed.jsx b/src/pages/home/feeds/recent-sales-feed.tsx similarity index 86% rename from src/pages/home/feeds/recent-sales-feed.jsx rename to src/pages/home/feeds/recent-sales-feed.tsx index 2731b650c..7b2608de1 100644 --- a/src/pages/home/feeds/recent-sales-feed.jsx +++ b/src/pages/home/feeds/recent-sales-feed.tsx @@ -1,8 +1,9 @@ import { gql } from 'graphql-request' import uniqBy from 'lodash/uniqBy' import TokenCollection from '@atoms/token-collection' -import { BaseTokenFieldsFragment } from '@data/api' +import { BaseTokenFieldsFragment } from '@data/queries' import { HEN_CONTRACT_FA2 } from '@constants' +import type { Token_Metadata } from 'gql' export function RecentSalesFeed() { return ( @@ -14,7 +15,7 @@ export function RecentSalesFeed() { tokenPath="token" keyPath="token.token_id" maxItems={600} - postProcessTokens={(tokens) => + postProcessTokens={(tokens: Token_Metadata[]) => uniqBy(uniqBy(tokens, 'token_id'), 'artist_address') } query={gql` diff --git a/src/pages/home/feeds/search-feed.jsx b/src/pages/home/feeds/search-feed.tsx similarity index 100% rename from src/pages/home/feeds/search-feed.jsx rename to src/pages/home/feeds/search-feed.tsx index 6f7001d21..f93236714 100644 --- a/src/pages/home/feeds/search-feed.jsx +++ b/src/pages/home/feeds/search-feed.tsx @@ -7,8 +7,8 @@ export function SearchFeed() { return ( diff --git a/src/pages/home/feeds/tag-feed.jsx b/src/pages/home/feeds/tag-feed.tsx similarity index 79% rename from src/pages/home/feeds/tag-feed.jsx rename to src/pages/home/feeds/tag-feed.tsx index dd767573d..05fe864df 100644 --- a/src/pages/home/feeds/tag-feed.jsx +++ b/src/pages/home/feeds/tag-feed.tsx @@ -1,9 +1,18 @@ import { gql } from 'graphql-request' import TokenCollection from '@atoms/token-collection' -import { BaseTokenFieldsFragment } from '@data/api' +import { BaseTokenFieldsFragment } from '@data/queries' import { HEN_CONTRACT_FA2 } from '@constants' -export function TagFeed({ tag, ...otherProps }) { +export function TagFeed({ + tag, + ...otherProps +}: { + tag: string + label?: string + feeds_menu?: boolean + namespace?: string + [key: string]: unknown +}) { return ( + setValueAs: (v: string) => join( uniq( v @@ -107,7 +107,7 @@ export const fields = [ type: 'text', rules: { required: true, - valueAs: (f) => f.value, + valueAs: (f: { value: string; label: string }) => f.value, pattern: { value: /((https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})|(ipfs:\/\/.*))/g, @@ -119,7 +119,7 @@ export const fields = [ label: 'Language', placeholder: '(optional)', rules: { - valueAs: (f) => f.value, + valueAs: (f: { value: string; label: string }) => f.value, }, type: 'select-search', alt: 'token language', @@ -157,7 +157,7 @@ export const fields = [ }, ] -const getFields = (deps) => { +const getFields = (deps: T) => { // return () => { const keys = Object.keys(deps) return fields diff --git a/src/pages/mint/index.tsx b/src/pages/mint/index.tsx index 2e07f6981..d1a375e80 100644 --- a/src/pages/mint/index.tsx +++ b/src/pages/mint/index.tsx @@ -7,7 +7,7 @@ import { useEffect, useMemo, useState } from 'react' import { FormProvider, useForm, useFormState } from 'react-hook-form' import { Outlet } from 'react-router' -let TABS: TabOptions[] = [ +const TABS: TabOptions[] = [ { title: 'Edit', to: '' }, { title: 'Preview', to: 'preview', disabled: true }, { title: 'Mint', disabled: true }, diff --git a/src/pages/mint/types.d.ts b/src/pages/mint/types.d.ts new file mode 100644 index 000000000..58340930b --- /dev/null +++ b/src/pages/mint/types.d.ts @@ -0,0 +1,14 @@ +import '@atoms/select/types' +import '@types' + +interface MintOutletContext { + balance?: number + minterName?: string + address: string + artifact?: FileForm + license?: SelectField +} +interface ImageDimensions { + imageWidth: number + imageHeight: number +} diff --git a/src/pages/objkt-display/index.tsx b/src/pages/objkt-display/index.tsx index 365b0d4ed..05ccc741a 100644 --- a/src/pages/objkt-display/index.tsx +++ b/src/pages/objkt-display/index.tsx @@ -1,12 +1,11 @@ /* eslint-disable react-hooks/exhaustive-deps */ import { Outlet, useOutletContext, useParams } from 'react-router-dom' -import useSWR from 'swr' import { METADATA_ACCESSIBILITY_HAZARDS_PHOTOSENS, METADATA_CONTENT_RATING_MATURE, } from '@constants' -import { fetchObjktDetails } from '@data/api' +import { apiSWR } from '@data/api' import { Loading } from '@atoms/loading' import { Page } from '@atoms/layout' import { RenderMediaType } from '@components/media-types' @@ -14,9 +13,12 @@ import { ItemInfo } from '@components/item-info' import styles from '@style' import './style.css' import useSettings from '@hooks/use-settings' -import { TabOptions, Tabs } from '@atoms/tab/Tabs' +import type { TabOptions } from '@atoms/tab/Tabs' +import { Tabs } from '@atoms/tab/Tabs' import { useUserStore } from '@context/userStore' -import { NFT } from '@types' +import type { NFT } from '@types' +import laggy from '@utils/swr-laggy-middleware' +import { useMemo } from 'react' type ObjktDisplayContext = { nft: NFT @@ -67,74 +69,75 @@ export const ObjktDisplay = () => { const { walletBlockMap, nsfwMap, photosensitiveMap, underReviewMap } = useSettings() - const { data: nft, error }: { data?: NFT; error?: Error } = useSWR( + const { data, error } = apiSWR.useObjkt( ['/token', id], - async () => { - if (id) { - const objkt = (await fetchObjktDetails(id)) as NFT - - if (!objkt) { - let isNum = /^\d+$/.test(id) - if (isNum) { - throw new Error(`Cannot find an OBJKT with id: ${id}`, { - cause: 'Unknown OBJKT', - }) - } - - throw new Error( - `Received a non numeric token_id: ${id}. - This can happen if the requested SUBJKT is conflicting with a protected route. - You can still access it by its address (tz/)`, - { cause: 'Conflicting route' } - ) - } - - if ( - nsfwMap.get(objkt.token_id) === 1 || - objkt.teia_meta?.content_rating === METADATA_CONTENT_RATING_MATURE - ) { - objkt.isNSFW = true - } - if ( - photosensitiveMap.get(objkt.token_id) === 1 || - objkt.teia_meta?.accessibility?.hazards.includes( - METADATA_ACCESSIBILITY_HAZARDS_PHOTOSENS - ) - ) { - objkt.isPhotosensitive = true - } - - objkt.restricted = walletBlockMap.get(objkt.artist_address) === 1 - objkt.underReview = underReviewMap.get(objkt.artist_address) === 1 - - return objkt - } - }, + { id: id ? id : '-1' }, { revalidateIfStale: false, revalidateOnFocus: false, + use: [laggy], } ) + const nft = useMemo(() => { + if (data) { + const objkt = data.tokens_by_pk as NFT + if (!objkt && id) { + const isNum = /^\d+$/.test(id) + if (isNum) { + throw new Error(`Cannot find an OBJKT with id: ${id}`, { + cause: 'Unknown OBJKT', + }) + } - const loading = !nft && !error + throw new Error( + `Received a non numeric token_id: ${id}. + This can happen if the requested SUBJKT is conflicting with a protected route. + You can still access it by its address (tz/)`, + { cause: 'Conflicting route' } + ) + } - if (loading) { - return ( - - {loading && } - - ) - } + if ( + nsfwMap.get(objkt.token_id) === 1 || + objkt.teia_meta?.content_rating === METADATA_CONTENT_RATING_MATURE + ) { + objkt.isNSFW = true + } + if ( + photosensitiveMap.get(objkt.token_id) === 1 || + objkt.teia_meta?.accessibility?.hazards.includes( + METADATA_ACCESSIBILITY_HAZARDS_PHOTOSENS + ) + ) { + objkt.isPhotosensitive = true + } + + objkt.restricted = walletBlockMap.get(objkt.artist_address) === 1 + objkt.underReview = underReviewMap.get(objkt.artist_address) === 1 + objkt.listings = objkt.listings.filter( + ({ seller_address }: { seller_address: string }) => + walletBlockMap.get(seller_address) !== 1 + ) + + return objkt + } + }, [data?.tokens_by_pk]) + if (!id) return if (error) { throw error //new Error('Error Fetching OBJKTs for {}') } if (!nft) { - return + return ( + + + + ) } + return ( - + <> {nft.restricted ? (
@@ -194,7 +197,7 @@ export const ObjktDisplay = () => { } if (nft?.holdings && tab.private) { - let holders_arr = nft.holdings.map((e) => e.holder_address) + const holders_arr = nft.holdings.map((e) => e.holder_address) if ( holders_arr.includes(address || 'UNSYNCED') === false && diff --git a/src/pages/objkt-display/tabs/Burn.jsx b/src/pages/objkt-display/tabs/Burn.tsx similarity index 100% rename from src/pages/objkt-display/tabs/Burn.jsx rename to src/pages/objkt-display/tabs/Burn.tsx diff --git a/src/pages/objkt-display/tabs/Collectors.jsx b/src/pages/objkt-display/tabs/Collectors.tsx similarity index 100% rename from src/pages/objkt-display/tabs/Collectors.jsx rename to src/pages/objkt-display/tabs/Collectors.tsx diff --git a/src/pages/objkt-display/tabs/History.jsx b/src/pages/objkt-display/tabs/History.tsx similarity index 100% rename from src/pages/objkt-display/tabs/History.jsx rename to src/pages/objkt-display/tabs/History.tsx diff --git a/src/pages/objkt-display/tabs/Info.jsx b/src/pages/objkt-display/tabs/Info.tsx similarity index 100% rename from src/pages/objkt-display/tabs/Info.jsx rename to src/pages/objkt-display/tabs/Info.tsx diff --git a/src/pages/objkt-display/tabs/Swap.jsx b/src/pages/objkt-display/tabs/Swap.tsx similarity index 100% rename from src/pages/objkt-display/tabs/Swap.jsx rename to src/pages/objkt-display/tabs/Swap.tsx diff --git a/src/pages/objkt-display/tabs/index.js b/src/pages/objkt-display/tabs/index.ts similarity index 100% rename from src/pages/objkt-display/tabs/index.js rename to src/pages/objkt-display/tabs/index.ts diff --git a/src/pages/profile/collabs.jsx b/src/pages/profile/collabs.tsx similarity index 97% rename from src/pages/profile/collabs.jsx rename to src/pages/profile/collabs.tsx index 0eed275d5..14fc9e2ae 100644 --- a/src/pages/profile/collabs.jsx +++ b/src/pages/profile/collabs.tsx @@ -2,7 +2,7 @@ import { useState } from 'react' import get from 'lodash/get' import { gql } from 'graphql-request' import orderBy from 'lodash/orderBy' -import { BaseTokenFieldsFragment } from '@data/api' +import { BaseTokenFieldsFragment } from '@data/queries' import TokenCollection from '@atoms/token-collection' import { useOutletContext } from 'react-router' import Checkbox from '@atoms/input/Checkbox' diff --git a/src/pages/profile/collections.jsx b/src/pages/profile/collections.tsx similarity index 98% rename from src/pages/profile/collections.jsx rename to src/pages/profile/collections.tsx index 313625c95..db69b362a 100644 --- a/src/pages/profile/collections.jsx +++ b/src/pages/profile/collections.tsx @@ -3,7 +3,7 @@ import uniqBy from 'lodash/uniqBy' import { gql } from 'graphql-request' import TokenCollection from '@atoms/token-collection' import Filters from './filters' -import { BaseTokenFieldsFragment } from '@data/api' +import { BaseTokenFieldsFragment } from '@data/queries' import { useOutletContext } from 'react-router' diff --git a/src/pages/profile/creations.jsx b/src/pages/profile/creations.tsx similarity index 98% rename from src/pages/profile/creations.jsx rename to src/pages/profile/creations.tsx index d96b81308..a98f32327 100644 --- a/src/pages/profile/creations.jsx +++ b/src/pages/profile/creations.tsx @@ -1,7 +1,7 @@ import { useState } from 'react' import { gql } from 'graphql-request' import get from 'lodash/get' -import { BaseTokenFieldsFragment } from '@data/api' +import { BaseTokenFieldsFragment } from '@data/queries' import { HEN_CONTRACT_FA2 } from '@constants' import TokenCollection from '@atoms/token-collection' import Filters from './filters' diff --git a/src/pages/profile/filters.jsx b/src/pages/profile/filters.tsx similarity index 100% rename from src/pages/profile/filters.jsx rename to src/pages/profile/filters.tsx diff --git a/src/pages/profile/index.jsx b/src/pages/profile/index.tsx similarity index 99% rename from src/pages/profile/index.jsx rename to src/pages/profile/index.tsx index 98db5d5e2..bf8187272 100644 --- a/src/pages/profile/index.jsx +++ b/src/pages/profile/index.tsx @@ -71,7 +71,7 @@ export default function Display() { const [showRestricted, setShowRestricted] = useState() const [overrideProtections, setOverrideProtections] = useState() - let [searchParams] = useSearchParams() + const [searchParams] = useSearchParams() const { nsfwFriendly, photosensitiveFriendly } = useLocalSettings((st) => [ st.nsfwFriendly, diff --git a/src/pages/profile/profile.jsx b/src/pages/profile/profile.tsx similarity index 100% rename from src/pages/profile/profile.jsx rename to src/pages/profile/profile.tsx diff --git a/src/pages/profile/warning.jsx b/src/pages/profile/warning.tsx similarity index 100% rename from src/pages/profile/warning.jsx rename to src/pages/profile/warning.tsx diff --git a/src/pages/sync.jsx b/src/pages/sync.tsx similarity index 100% rename from src/pages/sync.jsx rename to src/pages/sync.tsx diff --git a/src/pages/tags/index.jsx b/src/pages/tags/index.tsx similarity index 100% rename from src/pages/tags/index.jsx rename to src/pages/tags/index.tsx diff --git a/src/pages/terms/index.jsx b/src/pages/terms/index.tsx similarity index 100% rename from src/pages/terms/index.jsx rename to src/pages/terms/index.tsx diff --git a/src/types.d.ts b/src/types.d.ts index 88ede8f03..ab282b44b 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1,13 +1,30 @@ -export interface Format { - mimeType: string - fileSize: number - fileName: string - dimensions?: { - value: string - unit: string - } +// UTILITIES + +import type { Tokens } from 'gql' +import type React from 'react' + +/** Utility type to extract a single type from an Array type */ +export type Unpacked = T extends (infer U)[] ? U : T + +/** Wrapper type for React components with childrens */ +export type WithChildren = T & { children?: React.ReactNode } + +/** Wrapper type for React components with childrens (only React components aka clonable) */ +export type WithCompChildren = T & { + children?: React.ReactElement> } +// // Global to tidy +// export interface Format { +// mimeType: string +// fileSize: number +// fileName: string +// dimensions?: { +// value: string +// unit: string +// } +// } + export type MintFormat = { mimeType: string fileSize: number @@ -33,7 +50,7 @@ export type FileForm = { /** The file object */ file?: File /** The buffer extracted from the file. */ - buffer: ArrayBuffer + buffer: Uint8Array /** The file reader*/ reader: string | ArrayBuffer | null format?: Format @@ -105,8 +122,6 @@ export type Signature = { shareholder_address?: string } -export type ListingStatus = {} - export interface Holding { holder_address: string amount: number @@ -314,3 +329,10 @@ export type MediaTypeProps = SharedMediaProps & { /** Older video tokens did not require a cover image, load the video in these cases. */ forceVideo?: boolean } + +// Tokens with extra artifacts not coming from the API +export interface ExtTokens extends Tokens { + isPhotosensitive?: boolean + isNSFW?: boolean + key?: string +} diff --git a/src/utils/html.js b/src/utils/html.ts similarity index 86% rename from src/utils/html.js rename to src/utils/html.ts index 7a2f10d28..826c80843 100644 --- a/src/utils/html.js +++ b/src/utils/html.ts @@ -1,18 +1,20 @@ import * as fflate from 'fflate' import mime from 'mime-types' + import { MIMETYPE } from '@constants' +import type { FileBlobs } from './types' -export async function prepareFilesFromZIP(buffer) { +export async function prepareFilesFromZIP(buffer: Uint8Array) { console.debug('Preparing files from ZIP') // unzip files - let files = await unzipBuffer(buffer) + const files = await unzipBuffer(buffer) // save raw index file const indexBlob = files['index.html'] files['index_raw.html'] = new Blob([indexBlob], { type: indexBlob.type }) // inject CSP meta tag in all html files - for (let k in files) { + for (const k in files) { if (k.endsWith('.html') || k.endsWith('.htm')) { const pageBuffer = await files[k].arrayBuffer() const safePageBuffer = injectCSPMetaTagIntoBuffer(pageBuffer) @@ -23,7 +25,7 @@ export async function prepareFilesFromZIP(buffer) { } // reformat - files = Object.entries(files).map((file) => { + let files_array = Object.entries(files).map((file) => { console.debug('Entry: ', file) return { path: file[0], @@ -32,15 +34,15 @@ export async function prepareFilesFromZIP(buffer) { }) // remove top level dir - files = files.filter((f) => f.path !== '') + files_array = files_array.filter((f) => f.path !== '') - return files + return files_array } -export async function unzipBuffer(buffer) { +export async function unzipBuffer(buffer: Uint8Array) { console.debug('Unzipping buffer') - let entries = fflate.unzipSync(buffer) - entries = Object.entries(entries).map((entry) => { + const unzipped = fflate.unzipSync(buffer) + const entries = Object.entries(unzipped).map((entry) => { console.debug('Entry: ', entry) return { path: entry[0], @@ -49,7 +51,7 @@ export async function unzipBuffer(buffer) { }) // Find root dir - let rootDir = null + let rootDir: string | null = null for (const entry of entries) { const filename = entry.path.replace(/^.*[\\/]/, '') if (filename === 'index.html') { @@ -69,7 +71,7 @@ export async function unzipBuffer(buffer) { console.debug('Creating file map') // Create files map - const files = {} + const files: FileBlobs = {} entries.forEach((entry, index) => { const relPath = rootDir === '/' ? entry.path : entry.path.replace(`${rootDir}`, '') @@ -85,14 +87,14 @@ export async function unzipBuffer(buffer) { } files[relPath] = new Blob([entry.buffer], { - type, + type: type || undefined, }) }) return files } -export function injectCSPMetaTagIntoDataURI(dataURI) { +export function injectCSPMetaTagIntoDataURI(dataURI: string) { // data URI -> HTML const prefix = 'data:text/html;base64,' const base64 = dataURI.replace(prefix, '') @@ -105,7 +107,7 @@ export function injectCSPMetaTagIntoDataURI(dataURI) { return `${prefix}${btoa(safeHTML)}` } -export function injectCSPMetaTagIntoBuffer(buffer) { +export function injectCSPMetaTagIntoBuffer(buffer: ArrayBuffer) { // buffer -> HTML const html = new TextDecoder().decode(buffer) @@ -116,7 +118,7 @@ export function injectCSPMetaTagIntoBuffer(buffer) { return new TextEncoder().encode(safeHTML) } -export function injectCSPMetaTagIntoHTML(html) { +export function injectCSPMetaTagIntoHTML(html: string) { // HTML -> doc const parser = new DOMParser() const doc = parser.parseFromString(html, 'text/html') @@ -238,7 +240,7 @@ export function injectCSPMetaTagIntoHTML(html) { return `${doc.documentElement.innerHTML}` } -export function getCoverImagePathFromBuffer(buffer) { +export function getCoverImagePathFromBuffer(buffer: Buffer) { // buffer -> html const html = new TextDecoder().decode(buffer) @@ -249,7 +251,7 @@ export function getCoverImagePathFromBuffer(buffer) { return getCoverImagePathFromDoc(doc) } -function getCoverImagePathFromDoc(doc) { +function getCoverImagePathFromDoc(doc: Document) { let meta = doc.head.querySelector('meta[property="cover-image"]') if (!meta) { meta = doc.head.querySelector('meta[property="og:image"]') @@ -260,7 +262,7 @@ function getCoverImagePathFromDoc(doc) { return meta.getAttribute('content') } -export async function validateFiles(files) { +export async function validateFiles(files: FileBlobs) { // check for index.html file if (!files['index.html']) { return { @@ -270,7 +272,7 @@ export async function validateFiles(files) { } const pageBlob = files['index.html'] - let htmlString = await pageBlob.text() + const htmlString = await pageBlob.text() const parser = new DOMParser() const doc = parser.parseFromString(htmlString, 'text/html') @@ -288,7 +290,7 @@ export async function validateFiles(files) { } } -export function dataRUIToBuffer(dataURI) { +export function dataRUIToBuffer(dataURI: string) { const parts = dataURI.split(',') const base64 = parts[1] const binaryStr = atob(base64) diff --git a/src/utils/index.ts b/src/utils/index.ts index 351c10720..2ec69a9e6 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,4 +1,4 @@ -import { NFT } from '@types' +import type { NFT } from '@types' import * as _ from 'lodash' /** Flip key value to value key */ diff --git a/src/utils/media.js b/src/utils/media.ts similarity index 78% rename from src/utils/media.js rename to src/utils/media.ts index 87cea2cd2..6f5e22966 100644 --- a/src/utils/media.js +++ b/src/utils/media.ts @@ -2,25 +2,29 @@ import * as fflate from 'fflate' import mime from 'mime-types' import { ALLOWED_COVER_MIMETYPES } from '@constants' -export async function unzipMedia(buffer) { +export async function unzipMedia(buffer: Buffer) { // unzip into blobs - let entries = fflate.unzipSync(buffer) - entries = Object.entries(entries).map((entry) => { + const unzipped = fflate.unzipSync(buffer) + let entries = Object.entries(unzipped).map((entry) => { const fileName = getFileName(entry[0]) return { fileName, buffer: entry[1], + mimeType: undefined as string | undefined, } }) // keep only images/videos entries = entries .map((e) => { - e.mimeType = mime.lookup(e.fileName) + e.mimeType = mime.lookup(e.fileName) || undefined return e }) .filter((e) => { - return ALLOWED_COVER_MIMETYPES.includes(e.mimeType) + if (e.mimeType) { + return ALLOWED_COVER_MIMETYPES.includes(e.mimeType) + } + return false }) // format as: { meta, blob, reader } @@ -42,7 +46,7 @@ export async function unzipMedia(buffer) { return media } -export async function getMediaMetadata(blob) { +export async function getMediaMetadata(blob: Blob) { if (blob.type.indexOf('image') === 0) { return await getImageMetadata(blob) } else if (blob.type.indexOf('video') === 0) { @@ -52,7 +56,7 @@ export async function getMediaMetadata(blob) { } } -export function getImageMetadata(blob) { +export function getImageMetadata(blob: Blob) { return new Promise((resolve, reject) => { const img = new Image() img.onload = () => { @@ -72,7 +76,7 @@ export function getImageMetadata(blob) { }) } -export function getVideoMetadata(blob) { +export function getVideoMetadata(blob: Blob) { return new Promise((resolve, reject) => { const video = document.createElement('video') video.addEventListener( @@ -98,16 +102,16 @@ export function getVideoMetadata(blob) { }) } -async function blobToDataURL(blob) { +async function blobToDataURL(blob: Blob) { return new Promise((resolve, reject) => { - let reader = new FileReader() + const reader = new FileReader() reader.onerror = reject reader.onload = (e) => resolve(reader.result) reader.readAsDataURL(blob) }) } -function getFileName(path) { +function getFileName(path: string) { const parts = path.split('/') return parts[parts.length - 1] } diff --git a/src/utils/mint.ts b/src/utils/mint.ts index 894c2f025..7890acc30 100644 --- a/src/utils/mint.ts +++ b/src/utils/mint.ts @@ -27,11 +27,6 @@ export const removeExtension = (name: string) => { return name.split('.').slice(0, -1).join('.') } -interface ImageDimensions { - imageWidth: number - imageHeight: number -} - export const getImageDimensions = async ( file: FileForm ): Promise => { @@ -60,7 +55,7 @@ export const generateCompressedImage = async ( const mimeType = blob.type const buffer = await blob.arrayBuffer() const reader = await blobToDataURL(blob) - return { mimeType, buffer, reader } + return { mimeType, buffer: new Uint8Array(buffer), reader } } const blobToDataURL = async ( diff --git a/src/utils/motion.js b/src/utils/motion.ts similarity index 100% rename from src/utils/motion.js rename to src/utils/motion.ts diff --git a/src/utils/os.js b/src/utils/os.ts similarity index 100% rename from src/utils/os.js rename to src/utils/os.ts diff --git a/src/utils/sanitise.js b/src/utils/sanitise.js deleted file mode 100644 index 9801ef708..000000000 --- a/src/utils/sanitise.js +++ /dev/null @@ -1,95 +0,0 @@ -import { MIMETYPE, MARKETPLACE_CONTRACT_V1 } from '@constants' - -/** - * If a OBJKT is missing a relevant property, we filter it out. - * As example http://localhost:3000/objkt/2862 (has no token_info) - */ -export const SanitiseOBJKT = (objkt) => { - return objkt.filter((o) => { - if (Object.keys(o).length === 0) { - // if empty object ignore - return true - } else if (!o.token_info) { - // if missing token_info flag as corrupt - console.warn('objkt flagged as corrupt', objkt) - return false - } - return true - }) -} - -export const SanitizeDipDup = (objkt) => { - objkt.token_id = objkt.owner - objkt.artifactUri = objkt.artifact_uri - return objkt -} - -// check for mymetype using FileReader API (should read any file including binaries) -export const getMimeType = (file) => { - return new Promise((resolve) => { - const filereader = new FileReader() - filereader.onloadend = function (e) { - if (e.target.readyState === FileReader.DONE) { - const uint = new Uint8Array(e.target.result) - const bytes = [] - uint.forEach((byte) => { - bytes.push(byte.toString(16)) - }) - const hex = bytes.join('').toUpperCase() - - let mimeType - - switch (hex) { - case '7BA2020': - mimeType = MIMETYPE.GLTF - break - case '676C5446': - mimeType = MIMETYPE.GLB - break - default: - mimeType = 'Unknown MimeType' - } - - resolve(mimeType) - } - } - filereader.onerror = () => resolve('Unknown MimeType') - filereader.readAsArrayBuffer(file.slice(0, 4)) - }) -} - -/** - * TODO: - * Receives an array of objects and filters them out if they're part of the blocklist (o.json) - */ -export const filterObjkts = (items) => { - return items -} - -export const getTotalSales = ({ owners, creators }) => { - if (!owners) return 0 - return Object.keys(owners).reduce((edition, ownerID) => { - // not the platform or the creator - if (ownerID !== MARKETPLACE_CONTRACT_V1 && !creators.includes(ownerID)) { - // add the count of market owned editions - return edition + Number(owners[ownerID]) - } - return edition - }, 0) -} - -/** - * Human-readable file size - * - */ -export const formatBytes = (bytes, decimals = 2) => { - if (bytes === 0) return '0 Bytes' - - const k = 1024 - const dm = decimals < 0 ? 0 : decimals - const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] - - const i = Math.floor(Math.log(bytes) / Math.log(k)) - - return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}` -} diff --git a/src/utils/sanitise.ts b/src/utils/sanitise.ts new file mode 100644 index 000000000..08e47dce1 --- /dev/null +++ b/src/utils/sanitise.ts @@ -0,0 +1,47 @@ +import { MIMETYPE } from '@constants' + +// check for mymetype using FileReader API (should read any file including binaries) +export const getMimeType = (file: Blob): Promise => { + return new Promise((resolve) => { + const filereader = new FileReader() + filereader.onloadend = function (e: ProgressEvent) { + if (e.target && e.target.readyState === FileReader.DONE) { + const uint = new Uint8Array(e.target.result as ArrayBuffer) + const bytes: string[] = [] + uint.forEach((byte) => { + bytes.push(byte.toString(16)) + }) + const hex = bytes.join('').toUpperCase() + + let mimeType + + switch (hex) { + case '7BA2020': + mimeType = MIMETYPE.GLTF + break + case '676C5446': + mimeType = MIMETYPE.GLB + break + default: + mimeType = 'Unknown MimeType' + } + + resolve(mimeType) + } + } + filereader.onerror = () => resolve('Unknown MimeType') + filereader.readAsArrayBuffer(file.slice(0, 4)) + }) +} + +export const formatBytes = (bytes: number, decimals = 2) => { + if (bytes === 0) return '0 Bytes' + + const k = 1024 + const dm = decimals < 0 ? 0 : decimals + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] + + const i = Math.floor(Math.log(bytes) / Math.log(k)) + + return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}` +} diff --git a/src/utils/storage.js b/src/utils/storage.js deleted file mode 100644 index b3ad5ff37..000000000 --- a/src/utils/storage.js +++ /dev/null @@ -1,19 +0,0 @@ -export const getItem = (prop) => { - let parsed - try { - parsed = JSON.parse(localStorage.getItem(prop)) - } catch (e) { - parsed = null - } - return parsed -} - -export const setItem = (prop, value) => { - localStorage.setItem(prop, JSON.stringify(value)) - - return getItem(prop) -} - -export const removeItem = (prop) => { - localStorage.removeItem(prop) -} diff --git a/src/utils/string.js b/src/utils/string.ts similarity index 58% rename from src/utils/string.js rename to src/utils/string.ts index b0df17392..d5c38abf0 100644 --- a/src/utils/string.js +++ b/src/utils/string.ts @@ -1,4 +1,5 @@ -export const walletPreview = (wallet) => { +export const walletPreview = (wallet?: string | null) => { + if (!wallet) return '' try { return `${wallet.slice(0, 5)}...${wallet.slice( wallet.length - 5, @@ -9,6 +10,6 @@ export const walletPreview = (wallet) => { } } -export const capitalizeFirstLetter = (word) => { +export const capitalizeFirstLetter = (word: string) => { return word[0].toUpperCase() + word.slice(1) } diff --git a/src/utils/swap.ts b/src/utils/swap.ts index e1b58ec4b..6e9f52cd8 100644 --- a/src/utils/swap.ts +++ b/src/utils/swap.ts @@ -4,20 +4,16 @@ import { SWAP_TYPE_TEIA, teiaSwapSchema, } from '@constants' -import { +import type { ContractAbstraction, - MichelCodecPacker, - OpKind, Wallet, WalletParamsWithKind, } from '@taquito/taquito' +import { MichelCodecPacker, OpKind } from '@taquito/taquito' import teiaSwapLambda from '@components/collab/lambdas/teiaMarketplaceSwap.json' import { Parser } from '@taquito/michel-codec' -import { - MichelsonMap, - MichelsonMapKey, - Schema, -} from '@taquito/michelson-encoder' +import type { MichelsonMap, MichelsonMapKey } from '@taquito/michelson-encoder' +import { Schema } from '@taquito/michelson-encoder' export const Packer = new MichelCodecPacker() diff --git a/src/utils/swr-laggy-middleware.js b/src/utils/swr-laggy-middleware.ts similarity index 76% rename from src/utils/swr-laggy-middleware.js rename to src/utils/swr-laggy-middleware.ts index 64d3840e4..881d1aebc 100644 --- a/src/utils/swr-laggy-middleware.js +++ b/src/utils/swr-laggy-middleware.ts @@ -1,12 +1,18 @@ import { useRef, useEffect, useCallback } from 'react' +import type { SWRHook } from 'swr' +import type { Middleware, PublicConfiguration } from 'swr/dist/types' // taken from https://swr.vercel.app/docs/middleware#keep-previous-result // This is a SWR middleware for keeping the data even if key changes. -function laggy(useSWRNext) { - return (key, fetcher, config) => { +function laggy(useSWRNext: SWRHook) { + return ( + key: string, + fetcher: (e: string) => any, + config: PublicConfiguration + ) => { // Use a ref to store previous returned data. - const laggyDataRef = useRef() + const laggyDataRef = useRef>() // Actual SWR hook. const swr = useSWRNext(key, fetcher, config) @@ -40,4 +46,4 @@ function laggy(useSWRNext) { } } -export default laggy +export default laggy as Middleware diff --git a/src/utils/time.js b/src/utils/time.ts similarity index 68% rename from src/utils/time.js rename to src/utils/time.ts index 2e2944ec6..814782b82 100644 --- a/src/utils/time.js +++ b/src/utils/time.ts @@ -1,21 +1,21 @@ -export function toHHMMSS(sec) { - let hours = Math.floor(sec / 3600) - let minutes = Math.floor((sec - hours * 3600) / 60) - let seconds = sec - hours * 3600 - minutes * 60 - - if (hours < 10) { +export function toHHMMSS(sec: number) { + const _hours = Math.floor(sec / 3600) + const _minutes = Math.floor((sec - _hours * 3600) / 60) + const _seconds = sec - _hours * 3600 - _minutes * 60 + let hours, minutes, seconds + if (_hours < 10) { hours = `0${hours}` } - if (minutes < 10) { + if (_minutes < 10) { minutes = `0${minutes}` } - if (seconds < 10) { + if (_seconds < 10) { seconds = `0${seconds}` } return `${hours}:${minutes}:${seconds}` } -export const getTimeAgo = (timestamp) => { +export const getTimeAgo = (timestamp: number) => { const stamp = Math.round(new Date(timestamp).getTime() / 1000) const now = Math.round(new Date().getTime() / 1000) @@ -49,17 +49,17 @@ export const getTimeAgo = (timestamp) => { return `${value} ${unit} ago` } -export const getISODate = (timestamp) => { - const pad = (n, s = 2) => `${new Array(s).fill(0)}${n}`.slice(-s) +export const getISODate = (timestamp: number) => { + const pad = (n: number, s = 2) => `${new Array(s).fill(0)}${n}`.slice(-s) const d = new Date(timestamp) return `${pad(d.getFullYear(), 4)}-${pad(d.getMonth() + 1)}-${pad( d.getDate() )} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}` } -export const getWordDate = (timestamp) => { +export const getWordDate = (timestamp: number) => { const date = new Date(timestamp) - const options = { + const options: Intl.DateTimeFormatOptions = { year: 'numeric', month: 'short', day: 'numeric', diff --git a/src/utils/types.d.ts b/src/utils/types.d.ts new file mode 100644 index 000000000..1d379d4e7 --- /dev/null +++ b/src/utils/types.d.ts @@ -0,0 +1,3 @@ +export interface FileBlobs { + [path: string]: Blob +} diff --git a/src/utils/verify.js b/src/utils/verify.ts similarity index 62% rename from src/utils/verify.js rename to src/utils/verify.ts index 21d4a0b46..6b47306f6 100644 --- a/src/utils/verify.js +++ b/src/utils/verify.ts @@ -6,20 +6,22 @@ const prefixes = { edpk: new Uint8Array([13, 15, 37, 217]), } -const hex2buf = (hex) => - new Uint8Array( - hex.match(/[\da-f]{2}/gi).map(function (h) { - return parseInt(h, 16) - }) - ) - -const b58cdecode = (enc, prefix) => { +const hex2buf = (hex: string) => { + const match = hex.match(/[\da-f]{2}/gi) + if (match) + return new Uint8Array( + match.map(function (h) { + return parseInt(h, 16) + }) + ) +} +const b58cdecode = (enc: string, prefix: Uint8Array) => { return import('bs58check').then((bs58check) => bs58check.decode(enc).slice(prefix.length) ) } -export const verify = async (bytes, sig, pk) => { +export const verify = async (bytes: string, sig, pk: string) => { const _sodium = await import('libsodium-wrappers') const sodium = await _sodium.await return sodium.crypto_sign_verify_detached( diff --git a/src/utils/with-icon.tsx b/src/utils/with-icon.tsx index b693238e7..ca2f0b181 100644 --- a/src/utils/with-icon.tsx +++ b/src/utils/with-icon.tsx @@ -7,11 +7,19 @@ export const IconCache = React.createContext<{ [key: string]: string }>({}) export const useIconCache = () => React.useContext(IconCache) interface WithIconProps { - size: number - viewBox: number + size?: number + viewBox?: number } -// SVG Icon Cache system using refs +/** SVG Icon Cache system using refs + * Resolves the first call to the actuall SVG and store it in a + * context cache. We then `useref` that svg on subsequent calls. + * + * Less optimal to use than importing SVG using the bundler (as a react component) + * for single use cases. + * + * Heavily based on https://paco.me/writing/svg-caching-with-use + */ const withIcon = (icon: string, defaultViewBox?: number) => { const Icon = (props: WithIconProps) => { const { size = 30, viewBox = defaultViewBox } = props diff --git a/tsconfig.json b/tsconfig.json index fa38c3fdc..9ca743ea3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,5 @@ { + "include": ["src/types.d.ts", "src/**/*.ts", "src/**/*.tsx"], "compilerOptions": { /* Visit https://aka.ms/tsconfig to read more about this file */ diff --git a/vite.config.js b/vite.config.js index 772de7d72..eb2097d33 100644 --- a/vite.config.js +++ b/vite.config.js @@ -11,6 +11,7 @@ import mdPlugin from 'vite-plugin-markdown' import child_process from 'child_process' import { ViteEjsPlugin } from 'vite-plugin-ejs' import filterReplace from 'vite-plugin-filter-replace' +import codegen from 'vite-plugin-graphql-codegen' // Gets the current git commit (used in ) const commitHash = child_process @@ -89,6 +90,7 @@ export default defineConfig(({ mode }) => { appType: 'mpa', plugins: [ ...prod_plugs, + codegen(), filterReplace( [ {