diff --git a/.meshrc.yml b/.meshrc.yml index 8be3c15..4008832 100644 --- a/.meshrc.yml +++ b/.meshrc.yml @@ -8,10 +8,17 @@ sources: source: schema/gitea.yml operationHeaders: Authorization: Bearer {env.GITEA_API} - - name: Cloudron + - name: Directus handler: - openapi: - endpoint: https://my.andert.me/api/v1 - source: schema/cloudron.json + graphql: + endpoint: https://directus.andert.me/graphql + source: schema/directus.graphql operationHeaders: - Authorization: Bearer {env.CLOUDRON_API} + Authorization: Bearer {env.DIRECTUS_API} + # - name: Cloudron + # handler: + # openapi: + # endpoint: https://my.andert.me/api/v1 + # source: schema/cloudron.json + # operationHeaders: + # Authorization: Bearer {env.CLOUDRON_API} diff --git a/package.json b/package.json index 5f64f81..5f09ebd 100644 --- a/package.json +++ b/package.json @@ -4,21 +4,31 @@ "private": true, "scripts": { "dev": "mesh build && next dev", + "schema": "dotenv -- node ./src/fetch-schema.js", "build": "mesh build && next build", "start": "next start", "lint": "next lint" }, "dependencies": { - "graphql": "^16.7.1", + "@directus/sdk": "^11.0.1", "@graphql-mesh/cli": "^0.85.1", + "@graphql-mesh/graphql": "^0.95.1", "@graphql-mesh/openapi": "^0.94.7", + "@graphql-tools/schema": "^10.0.0", "@types/node": "20.4.1", "@types/react": "18.2.14", "@types/react-dom": "18.2.6", "autoprefixer": "10.4.14", + "axios": "^1.4.0", + "dotenv": "^16.3.1", + "dotenv-cli": "^7.3.0", "eslint": "8.44.0", "eslint-config-next": "13.4.9", + "fs": "0.0.1-security", + "graphql": "^16.7.1", + "graphql-request": "^6.1.0", "next": "13.4.9", + "node-fetch": "^3.3.2", "postcss": "8.4.25", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 48d65cb..e0cca36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,12 +1,21 @@ lockfileVersion: '6.0' dependencies: + '@directus/sdk': + specifier: ^11.0.1 + version: 11.0.1 '@graphql-mesh/cli': specifier: ^0.85.1 version: 0.85.1(@babel/core@7.22.8)(@types/node@20.4.1)(graphql-tag@2.12.6)(graphql-yoga@4.0.3)(graphql@16.7.1)(react-native@0.72.3) + '@graphql-mesh/graphql': + specifier: ^0.95.1 + version: 0.95.1(@graphql-mesh/cross-helpers@0.4.0)(@graphql-mesh/store@0.94.3)(@graphql-mesh/types@0.94.3)(@graphql-mesh/utils@0.94.3)(@graphql-tools/utils@10.0.3)(@types/node@20.4.1)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0)(tslib@2.6.0) '@graphql-mesh/openapi': specifier: ^0.94.7 version: 0.94.7(@graphql-mesh/cross-helpers@0.4.0)(@graphql-mesh/store@0.94.3)(@graphql-mesh/types@0.94.3)(@graphql-mesh/utils@0.94.3)(@graphql-tools/utils@10.0.3)(graphql@16.7.1)(tslib@2.6.0) + '@graphql-tools/schema': + specifier: ^10.0.0 + version: 10.0.0(graphql@16.7.1) '@types/node': specifier: 20.4.1 version: 20.4.1 @@ -19,18 +28,36 @@ dependencies: autoprefixer: specifier: 10.4.14 version: 10.4.14(postcss@8.4.25) + axios: + specifier: ^1.4.0 + version: 1.4.0 + dotenv: + specifier: ^16.3.1 + version: 16.3.1 + dotenv-cli: + specifier: ^7.3.0 + version: 7.3.0 eslint: specifier: 8.44.0 version: 8.44.0 eslint-config-next: specifier: 13.4.9 version: 13.4.9(eslint@8.44.0)(typescript@5.1.6) + fs: + specifier: 0.0.1-security + version: 0.0.1-security graphql: specifier: ^16.7.1 version: 16.7.1 + graphql-request: + specifier: ^6.1.0 + version: 6.1.0(graphql@16.7.1) next: specifier: 13.4.9 version: 13.4.9(@babel/core@7.22.8)(react-dom@18.2.0)(react@18.2.0) + node-fetch: + specifier: ^3.3.2 + version: 3.3.2 postcss: specifier: 8.4.25 version: 8.4.25 @@ -67,6 +94,44 @@ packages: '@jridgewell/trace-mapping': 0.3.18 dev: false + /@apollo/client@3.7.17(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-0EErSHEtKPNl5wgWikHJbKFAzJ/k11O0WO2QyqZSHpdxdAnw7UWHY4YiLbHCFG7lhrD+NTQ3Z/H9Jn4rcikoJA==} + requiresBuild: true + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-ws: ^5.5.5 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + subscriptions-transport-ws: ^0.9.0 || ^0.11.0 + peerDependenciesMeta: + graphql-ws: + optional: true + react: + optional: true + react-dom: + optional: true + subscriptions-transport-ws: + optional: true + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.7.1) + '@wry/context': 0.7.3 + '@wry/equality': 0.5.6 + '@wry/trie': 0.4.3 + graphql: 16.7.1 + graphql-tag: 2.12.6(graphql@16.7.1) + hoist-non-react-statics: 3.3.2 + optimism: 0.16.2 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + response-iterator: 0.2.6 + symbol-observable: 4.0.0 + ts-invariant: 0.10.3 + tslib: 2.6.0 + zen-observable-ts: 1.2.5 + dev: false + optional: true + /@ardatan/relay-compiler@12.0.0(graphql@16.7.1): resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} hasBin: true @@ -96,6 +161,15 @@ packages: - supports-color dev: false + /@ardatan/sync-fetch@0.0.1: + resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} + engines: {node: '>=14'} + dependencies: + node-fetch: 2.6.12 + transitivePeerDependencies: + - encoding + dev: false + /@babel/code-frame@7.22.5: resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} engines: {node: '>=6.9.0'} @@ -1575,6 +1649,17 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: false + /@directus/sdk@11.0.1: + resolution: {integrity: sha512-3WTmYeFZD8uyCkSB7TL2qgFVL8x6D+Z2SdR33xXNEPpld4625ZoQzOTa3oYCC7AREkh7x6vdP9wXkY91oQ8x1g==} + engines: {node: '>=18.0.0'} + dependencies: + '@directus/types': 10.1.3 + dev: false + + /@directus/types@10.1.3: + resolution: {integrity: sha512-2n2VTfFVzHYWwTxznOTbEsQUbCy/XIlpmiYt2HU3tqZe2cQiu+z5Sw+7YsdfDTmVjW78J20MdoweSjyHheqp6A==} + dev: false + /@envelop/core@4.0.0: resolution: {integrity: sha512-6usEZO86hWT0ZajAbhOX0QXlV++lrlEmu8br6KQVvyXOxttiHADIibgfzb3GtSI7RnnJDnrcRb7Jynv6Lca3iQ==} engines: {node: '>=16.0.0'} @@ -1967,6 +2052,41 @@ packages: - react-native-windows dev: false + /@graphql-mesh/graphql@0.95.1(@graphql-mesh/cross-helpers@0.4.0)(@graphql-mesh/store@0.94.3)(@graphql-mesh/types@0.94.3)(@graphql-mesh/utils@0.94.3)(@graphql-tools/utils@10.0.3)(@types/node@20.4.1)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0)(tslib@2.6.0): + resolution: {integrity: sha512-5ZHZLmHsEFUIBdyWZTG9ANHvOYlexOheUUwfBChmVoW/GqLe7FM1TEMS/91IwnAKA6SXZm5k068WmeLBXyrpRA==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@graphql-mesh/cross-helpers': ^0.4.0 + '@graphql-mesh/store': ^0.95.1 + '@graphql-mesh/types': ^0.95.1 + '@graphql-mesh/utils': ^0.95.1 + '@graphql-tools/utils': ^9.2.1 || ^10.0.0 + graphql: '*' + tslib: ^2.4.0 + dependencies: + '@graphql-mesh/cross-helpers': 0.4.0(@graphql-tools/utils@10.0.3)(graphql@16.7.1)(react-native@0.72.3) + '@graphql-mesh/store': 0.94.3(@graphql-mesh/cross-helpers@0.4.0)(@graphql-mesh/types@0.94.3)(@graphql-mesh/utils@0.94.3)(@graphql-tools/utils@10.0.3)(graphql@16.7.1)(tslib@2.6.0) + '@graphql-mesh/string-interpolation': 0.5.1(graphql@16.7.1)(tslib@2.6.0) + '@graphql-mesh/types': 0.94.3(@graphql-mesh/store@0.94.3)(@graphql-tools/utils@10.0.3)(graphql@16.7.1)(tslib@2.6.0) + '@graphql-mesh/utils': 0.94.3(@graphql-mesh/cross-helpers@0.4.0)(@graphql-mesh/types@0.94.3)(@graphql-tools/utils@10.0.3)(graphql@16.7.1)(tslib@2.6.0) + '@graphql-tools/delegate': 10.0.0(graphql@16.7.1) + '@graphql-tools/federation': 1.1.3(@types/node@20.4.1)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0) + '@graphql-tools/url-loader': 8.0.0(@types/node@20.4.1)(graphql@16.7.1) + '@graphql-tools/utils': 10.0.3(graphql@16.7.1) + graphql: 16.7.1 + lodash.get: 4.4.2 + tslib: 2.6.0 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - graphql-ws + - react + - react-dom + - subscriptions-transport-ws + - utf-8-validate + dev: false + /@graphql-mesh/http@0.95.1(@graphql-mesh/cross-helpers@0.4.0)(@graphql-mesh/runtime@0.95.1)(@graphql-mesh/types@0.94.3)(@graphql-mesh/utils@0.94.3)(graphql@16.7.1)(tslib@2.6.0): resolution: {integrity: sha512-b8YPDNaAUmO491zO5fVlMi/64AIC1JvgM1WrjE7UiSlHpsYHBCiv6cBcCgY0k/lNWR71szUI00OSiBNp8gS1OA==} engines: {node: '>=16.0.0'} @@ -2218,6 +2338,75 @@ packages: value-or-promise: 1.0.12 dev: false + /@graphql-tools/delegate@10.0.1(graphql@16.7.1): + resolution: {integrity: sha512-WaubawRuK8pAOskUnkXJ9yA06SXODcSsBAeqXVxGuXoo2CXvj8JJRq9+TOj5Lm/MOm6CSVdsYfEDmvogMg9kgw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/batch-execute': 9.0.0(graphql@16.7.1) + '@graphql-tools/executor': 1.1.0(graphql@16.7.1) + '@graphql-tools/schema': 10.0.0(graphql@16.7.1) + '@graphql-tools/utils': 10.0.3(graphql@16.7.1) + dataloader: 2.2.2 + graphql: 16.7.1 + tslib: 2.6.0 + value-or-promise: 1.0.12 + dev: false + + /@graphql-tools/executor-graphql-ws@1.1.0(graphql@16.7.1): + resolution: {integrity: sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.3(graphql@16.7.1) + '@types/ws': 8.5.5 + graphql: 16.7.1 + graphql-ws: 5.14.0(graphql@16.7.1) + isomorphic-ws: 5.0.0(ws@8.13.0) + tslib: 2.6.0 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@graphql-tools/executor-http@1.0.2(@types/node@20.4.1)(graphql@16.7.1): + resolution: {integrity: sha512-JKTB4E3kdQM2/1NEcyrVPyQ8057ZVthCV5dFJiKktqY9IdmF00M8gupFcW3jlbM/Udn78ickeUBsUzA3EouqpA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.3(graphql@16.7.1) + '@repeaterjs/repeater': 3.0.4 + '@whatwg-node/fetch': 0.9.8 + extract-files: 11.0.0 + graphql: 16.7.1 + meros: 1.3.0(@types/node@20.4.1) + tslib: 2.6.0 + value-or-promise: 1.0.12 + transitivePeerDependencies: + - '@types/node' + dev: false + + /@graphql-tools/executor-legacy-ws@1.0.1(graphql@16.7.1): + resolution: {integrity: sha512-PQrTJ+ncHMEQspBARc2lhwiQFfRAX/z/CsOdZTFjIljOHgRWGAA1DAx7pEN0j6PflbLCfZ3NensNq2jCBwF46w==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.3(graphql@16.7.1) + '@types/ws': 8.5.5 + graphql: 16.7.1 + isomorphic-ws: 5.0.0(ws@8.13.0) + tslib: 2.6.0 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /@graphql-tools/executor@1.1.0(graphql@16.7.1): resolution: {integrity: sha512-+1wmnaUHETSYxiK/ELsT60x584Rw3QKBB7F/7fJ83HKPnLifmE2Dm/K9Eyt6L0Ppekf1jNUbWBpmBGb8P5hAeg==} engines: {node: '>=16.0.0'} @@ -2232,6 +2421,32 @@ packages: value-or-promise: 1.0.12 dev: false + /@graphql-tools/federation@1.1.3(@types/node@20.4.1)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-rLLV5e/SPuZMyzz0pby3gfffUv2cwN4VI7Sr6TTMSi0dGB0esbr35ueZOlox/HK8SKtDjp7E/4ZGOy83E5TENg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/delegate': 10.0.1(graphql@16.7.1) + '@graphql-tools/executor-http': 1.0.2(@types/node@20.4.1)(graphql@16.7.1) + '@graphql-tools/merge': 9.0.0(graphql@16.7.1) + '@graphql-tools/schema': 10.0.0(graphql@16.7.1) + '@graphql-tools/stitch': 9.0.1(graphql@16.7.1) + '@graphql-tools/utils': 10.0.3(graphql@16.7.1) + '@graphql-tools/wrap': 10.0.0(graphql@16.7.1) + graphql: 16.7.1 + tslib: 2.6.0 + value-or-promise: 1.0.12 + optionalDependencies: + '@apollo/client': 3.7.17(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0) + transitivePeerDependencies: + - '@types/node' + - graphql-ws + - react + - react-dom + - subscriptions-transport-ws + dev: false + /@graphql-tools/graphql-file-loader@8.0.0(graphql@16.7.1): resolution: {integrity: sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg==} engines: {node: '>=16.0.0'} @@ -2379,6 +2594,24 @@ packages: value-or-promise: 1.0.12 dev: false + /@graphql-tools/stitch@9.0.1(graphql@16.7.1): + resolution: {integrity: sha512-dEtv7TVQTHcUNwUZKZbL1UppcrJBRDdvEqlufXxu/ygXjuWSRm6O86UtvcyKSd2MIEr/gAgzY4e5OuMMLzHOCA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/batch-delegate': 9.0.0(graphql@16.7.1) + '@graphql-tools/delegate': 10.0.1(graphql@16.7.1) + '@graphql-tools/executor': 1.1.0(graphql@16.7.1) + '@graphql-tools/merge': 9.0.0(graphql@16.7.1) + '@graphql-tools/schema': 10.0.0(graphql@16.7.1) + '@graphql-tools/utils': 10.0.3(graphql@16.7.1) + '@graphql-tools/wrap': 10.0.0(graphql@16.7.1) + graphql: 16.7.1 + tslib: 2.6.0 + value-or-promise: 1.0.12 + dev: false + /@graphql-tools/stitching-directives@3.0.0(graphql@16.7.1): resolution: {integrity: sha512-3fElJYxeKO85Nw6G1gj7pCjcozoXuPvRPL7krKyo8jXx0OAvXkJS3XgR86W9+SRvJ+SjfAdceV7PmyGemoghsA==} engines: {node: '>=16.0.0'} @@ -2391,6 +2624,33 @@ packages: tslib: 2.6.0 dev: false + /@graphql-tools/url-loader@8.0.0(@types/node@20.4.1)(graphql@16.7.1): + resolution: {integrity: sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/delegate': 10.0.0(graphql@16.7.1) + '@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.7.1) + '@graphql-tools/executor-http': 1.0.2(@types/node@20.4.1)(graphql@16.7.1) + '@graphql-tools/executor-legacy-ws': 1.0.1(graphql@16.7.1) + '@graphql-tools/utils': 10.0.3(graphql@16.7.1) + '@graphql-tools/wrap': 10.0.0(graphql@16.7.1) + '@types/ws': 8.5.5 + '@whatwg-node/fetch': 0.9.8 + graphql: 16.7.1 + isomorphic-ws: 5.0.0(ws@8.13.0) + tslib: 2.6.0 + value-or-promise: 1.0.12 + ws: 8.13.0 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - utf-8-validate + dev: false + /@graphql-tools/utils@10.0.3(graphql@16.7.1): resolution: {integrity: sha512-6uO41urAEIs4sXQT2+CYGsUTkHkVo/2MpM/QjoHj6D6xoEF2woXHBpdAVi0HKIInDwZqWgEYOwIFez0pERxa1Q==} engines: {node: '>=16.0.0'} @@ -3175,6 +3435,12 @@ packages: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: false + /@types/ws@8.5.5: + resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} + dependencies: + '@types/node': 20.4.1 + dev: false + /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: false @@ -3291,6 +3557,38 @@ packages: tslib: 2.6.0 dev: false + /@wry/context@0.7.3: + resolution: {integrity: sha512-Nl8WTesHp89RF803Se9X3IiHjdmLBrIvPMaJkl+rKVJAYyPsz1TEUbu89943HpvujtSJgDUx9W4vZw3K1Mr3sA==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.0 + dev: false + optional: true + + /@wry/equality@0.5.6: + resolution: {integrity: sha512-D46sfMTngaYlrH+OspKf8mIJETntFnf6Hsjb0V41jAXJ7Bx2kB8Rv8RCUujuVWYttFtHkUNp7g+FwxNQAr6mXA==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.0 + dev: false + optional: true + + /@wry/trie@0.3.2: + resolution: {integrity: sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.0 + dev: false + optional: true + + /@wry/trie@0.4.3: + resolution: {integrity: sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.0 + dev: false + optional: true + /abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -3526,6 +3824,10 @@ packages: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: false + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + /auto-bind@4.0.0: resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} engines: {node: '>=8'} @@ -3557,6 +3859,16 @@ packages: engines: {node: '>=4'} dev: false + /axios@1.4.0: + resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==} + dependencies: + follow-redirects: 1.15.2 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: @@ -3985,6 +4297,13 @@ packages: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} dev: false + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + /command-exists@1.2.9: resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} dev: false @@ -4131,6 +4450,11 @@ packages: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: false + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: false + /dataloader@2.2.2: resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} dev: false @@ -4224,6 +4548,11 @@ packages: object-keys: 1.1.1 dev: false + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + /denodeify@1.2.1: resolution: {integrity: sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==} dev: false @@ -4304,6 +4633,21 @@ packages: tslib: 2.6.0 dev: false + /dotenv-cli@7.3.0: + resolution: {integrity: sha512-314CA4TyK34YEJ6ntBf80eUY+t1XaFLyem1k9P0sX1gn30qThZ5qZr/ZwE318gEnzyYP9yj9HJk6SqwE0upkfw==} + hasBin: true + dependencies: + cross-spawn: 7.0.3 + dotenv: 16.3.1 + dotenv-expand: 10.0.0 + minimist: 1.2.8 + dev: false + + /dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + dev: false + /dotenv@16.3.1: resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} @@ -4781,6 +5125,11 @@ packages: strip-final-newline: 3.0.0 dev: false + /extract-files@11.0.0: + resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} + engines: {node: ^12.20 || >= 14.13} + dev: false + /fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} dev: false @@ -4857,6 +5206,14 @@ packages: - encoding dev: false + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + dev: false + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4939,6 +5296,16 @@ packages: engines: {node: '>=0.4.0'} dev: false + /follow-redirects@1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -4957,6 +5324,22 @@ packages: signal-exit: 4.0.2 dev: false + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: false + /fraction.js@4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: false @@ -4979,6 +5362,10 @@ packages: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: false + /fs@0.0.1-security: + resolution: {integrity: sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==} + dev: false + /fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -5179,6 +5566,18 @@ packages: graphql: 16.7.1 dev: false + /graphql-request@6.1.0(graphql@16.7.1): + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.7.1) + cross-fetch: 3.1.8 + graphql: 16.7.1 + transitivePeerDependencies: + - encoding + dev: false + /graphql-scalars@1.22.2(graphql@16.7.1): resolution: {integrity: sha512-my9FB4GtghqXqi/lWSVAOPiTzTnnEzdOXCsAC2bb5V7EFNQjVjwy3cSSbUvgYOtDuDibd+ZsCDhz+4eykYOlhQ==} engines: {node: '>=10'} @@ -5309,6 +5708,13 @@ packages: source-map: 0.7.4 dev: false + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + optional: true + /http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -5668,6 +6074,14 @@ packages: engines: {node: '>=0.10.0'} dev: false + /isomorphic-ws@5.0.0(ws@8.13.0): + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: false + /jackspeak@2.2.1: resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} engines: {node: '>=14'} @@ -6148,6 +6562,18 @@ packages: engines: {node: '>= 8'} dev: false + /meros@1.3.0(@types/node@20.4.1): + resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 20.4.1 + dev: false + /metro-babel-transformer@0.76.7: resolution: {integrity: sha512-bgr2OFn0J4r0qoZcHrwEvccF7g9k3wdgTOgk6gmGHrtlZ1Jn3oCpklW/DfZ9PzHfjY2mQammKTc19g/EFGyOJw==} engines: {node: '>=16'} @@ -6637,6 +7063,11 @@ packages: minimatch: 3.1.2 dev: false + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: false + /node-fetch@2.6.12: resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} engines: {node: 4.x || >=6.0.0} @@ -6649,6 +7080,15 @@ packages: whatwg-url: 5.0.0 dev: false + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: false + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: false @@ -6833,6 +7273,14 @@ packages: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} dev: false + /optimism@0.16.2: + resolution: {integrity: sha512-zWNbgWj+3vLEjZNIh/okkY2EUfX+vB9TJopzIZwT1xxaMqC5hRLLraePod4c5n4He08xuXNH+zhKFFCu390wiQ==} + dependencies: + '@wry/context': 0.7.3 + '@wry/trie': 0.3.2 + dev: false + optional: true + /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -7184,6 +7632,10 @@ packages: react-is: 16.13.1 dev: false + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: false @@ -7330,7 +7782,7 @@ packages: dependencies: object-assign: 4.1.1 react: 18.2.0 - react-is: 16.13.1 + react-is: 18.2.0 dev: false /react@18.2.0: @@ -7502,6 +7954,12 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: false + /response-iterator@0.2.6: + resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} + engines: {node: '>=0.8'} + dev: false + optional: true + /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -7979,6 +8437,12 @@ packages: tslib: 2.6.0 dev: false + /symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + dev: false + optional: true + /synckit@0.8.5: resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} engines: {node: ^14.18.0 || >=16.0.0} @@ -8126,6 +8590,14 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: false + /ts-invariant@0.10.3: + resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.0 + dev: false + optional: true + /ts-node@10.9.1(@types/node@20.4.1)(typescript@5.1.6): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true @@ -8406,6 +8878,11 @@ packages: defaults: 1.0.4 dev: false + /web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + dev: false + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: false @@ -8521,6 +8998,19 @@ packages: optional: true dev: false + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -8601,6 +9091,18 @@ packages: engines: {node: '>=10'} dev: false + /zen-observable-ts@1.2.5: + resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} + dependencies: + zen-observable: 0.8.15 + dev: false + optional: true + + /zen-observable@0.8.15: + resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} + dev: false + optional: true + /zod@3.21.4: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} dev: false diff --git a/schema/directus.graphql b/schema/directus.graphql new file mode 100644 index 0000000..23c0d42 --- /dev/null +++ b/schema/directus.graphql @@ -0,0 +1,986 @@ +type Query { + projects(filter: projects_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): [projects!]! + projects_by_id(id: ID!): projects + projects_aggregated(groupBy: [String], filter: projects_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [projects_aggregated!]! +} + +type Mutation { + create_projects_items(filter: projects_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String, data: [create_projects_input!]): [projects!]! + create_projects_item(data: create_projects_input!): projects + update_projects_items(filter: projects_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String, ids: [ID]!, data: update_projects_input!): [projects!]! + update_projects_batch(filter: projects_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String, data: [update_projects_input!]): [projects!]! + update_projects_item(id: ID!, data: update_projects_input!): projects + delete_projects_items(ids: [ID]!): delete_many + delete_projects_item(id: ID!): delete_one +} + +type Subscription { + projects_mutated(event: EventEnum): projects_mutated + directus_dashboards_mutated(event: EventEnum): directus_dashboards_mutated + directus_activity_mutated(event: EventEnum): directus_activity_mutated + directus_notifications_mutated(event: EventEnum): directus_notifications_mutated + directus_flows_mutated(event: EventEnum): directus_flows_mutated + directus_folders_mutated(event: EventEnum): directus_folders_mutated + directus_files_mutated(event: EventEnum): directus_files_mutated + directus_panels_mutated(event: EventEnum): directus_panels_mutated + directus_roles_mutated(event: EventEnum): directus_roles_mutated + directus_presets_mutated(event: EventEnum): directus_presets_mutated + directus_revisions_mutated(event: EventEnum): directus_revisions_mutated + directus_settings_mutated(event: EventEnum): directus_settings_mutated + directus_operations_mutated(event: EventEnum): directus_operations_mutated + directus_permissions_mutated(event: EventEnum): directus_permissions_mutated + directus_translations_mutated(event: EventEnum): directus_translations_mutated + directus_users_mutated(event: EventEnum): directus_users_mutated + directus_shares_mutated(event: EventEnum): directus_shares_mutated + directus_webhooks_mutated(event: EventEnum): directus_webhooks_mutated +} + +"""The `Boolean` scalar type represents `true` or `false`.""" +scalar Boolean + +"""ISO8601 Date values""" +scalar Date + +""" +The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point). +""" +scalar Float + +"""BigInt value""" +scalar GraphQLBigInt + +"""A Float or a String""" +scalar GraphQLStringOrFloat + +"""Hashed string values""" +scalar Hash + +""" +The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"4"`) or integer (such as `4`) input value will be accepted as an ID. +""" +scalar ID + +""" +The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. +""" +scalar Int + +""" +The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). +""" +scalar JSON + +""" +The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text. +""" +scalar String + +enum EventEnum { + create + update + delete +} + +type count_functions { + count: Int +} + +type datetime_functions { + year: Int + month: Int + week: Int + day: Int + weekday: Int + hour: Int + minute: Int + second: Int +} + +type delete_many { + ids: [ID]! +} + +type delete_one { + id: ID! +} + +type directus_activity { + id: ID! + action: String! + user(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users + timestamp: Date + timestamp_func: datetime_functions + ip: String + user_agent: String + collection: String! + item: String! + comment: String + origin: String + revisions(filter: directus_revisions_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): [directus_revisions] + revisions_func: count_functions +} + +type directus_activity_mutated { + key: ID! + event: EventEnum + data: directus_activity +} + +type directus_dashboards { + id: ID! + name: String! + icon: String + note: String + date_created: Date + date_created_func: datetime_functions + user_created(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users + color: String + panels(filter: directus_panels_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): [directus_panels] + panels_func: count_functions +} + +type directus_dashboards_mutated { + key: ID! + event: EventEnum + data: directus_dashboards +} + +type directus_files { + id: ID! + storage: String! + filename_disk: String + filename_download: String! + title: String + type: String + folder(filter: directus_folders_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_folders + uploaded_by(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users + uploaded_on: Date + uploaded_on_func: datetime_functions + modified_by(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users + modified_on: Date + modified_on_func: datetime_functions + charset: String + filesize: GraphQLBigInt + width: Int + height: Int + duration: Int + embed: String + description: String + location: String + tags: JSON + tags_func: count_functions + metadata: JSON + metadata_func: count_functions +} + +type directus_files_mutated { + key: ID! + event: EventEnum + data: directus_files +} + +type directus_flows { + id: ID! + name: String! + icon: String + color: String + description: String + status: String + trigger: String + accountability: String + options: JSON + options_func: count_functions + operation(filter: directus_operations_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_operations + date_created: Date + date_created_func: datetime_functions + user_created(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users + operations(filter: directus_operations_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): [directus_operations] + operations_func: count_functions +} + +type directus_flows_mutated { + key: ID! + event: EventEnum + data: directus_flows +} + +type directus_folders { + id: ID! + name: String! + parent(filter: directus_folders_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_folders +} + +type directus_folders_mutated { + key: ID! + event: EventEnum + data: directus_folders +} + +type directus_notifications { + id: ID! + timestamp: Date + timestamp_func: datetime_functions + status: String + recipient(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users + sender(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users + subject: String! + message: String + collection: String + item: String +} + +type directus_notifications_mutated { + key: ID! + event: EventEnum + data: directus_notifications +} + +type directus_operations { + id: ID! + name: String + key: String! + type: String! + position_x: Int! + position_y: Int! + options: JSON + options_func: count_functions + resolve(filter: directus_operations_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_operations + reject(filter: directus_operations_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_operations + flow(filter: directus_flows_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_flows + date_created: Date + date_created_func: datetime_functions + user_created(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users +} + +type directus_operations_mutated { + key: ID! + event: EventEnum + data: directus_operations +} + +type directus_panels { + id: ID! + dashboard(filter: directus_dashboards_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_dashboards + name: String + icon: String + color: String + show_header: Boolean! + note: String + type: String! + position_x: Int! + position_y: Int! + width: Int! + height: Int! + options: JSON + options_func: count_functions + date_created: Date + date_created_func: datetime_functions + user_created(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users +} + +type directus_panels_mutated { + key: ID! + event: EventEnum + data: directus_panels +} + +type directus_permissions { + id: ID! + role(filter: directus_roles_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_roles + collection: String! + action: String! + permissions: JSON + permissions_func: count_functions + validation: JSON + validation_func: count_functions + presets: JSON + presets_func: count_functions + fields: [String] +} + +type directus_permissions_mutated { + key: ID! + event: EventEnum + data: directus_permissions +} + +type directus_presets { + id: ID! + bookmark: String + user(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users + role(filter: directus_roles_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_roles + collection: String + search: String + layout: String + layout_query: JSON + layout_query_func: count_functions + layout_options: JSON + layout_options_func: count_functions + refresh_interval: Int + filter: JSON + filter_func: count_functions + icon: String + color: String +} + +type directus_presets_mutated { + key: ID! + event: EventEnum + data: directus_presets +} + +type directus_revisions { + id: ID! + activity(filter: directus_activity_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_activity + collection: String! + item: String! + data: JSON + data_func: count_functions + delta: JSON + delta_func: count_functions + parent(filter: directus_revisions_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_revisions +} + +type directus_revisions_mutated { + key: ID! + event: EventEnum + data: directus_revisions +} + +type directus_roles { + id: ID! + name: String! + icon: String + description: String + ip_access: [String] + enforce_tfa: Boolean! + admin_access: Boolean! + app_access: Boolean + users(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): [directus_users] + users_func: count_functions +} + +type directus_roles_mutated { + key: ID! + event: EventEnum + data: directus_roles +} + +type directus_settings { + id: ID! + project_name: String + project_url: String + + """$t:field_options.directus_settings.project_color_note""" + project_color: String + project_logo(filter: directus_files_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_files + public_foreground(filter: directus_files_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_files + public_background(filter: directus_files_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_files + public_note: String + auth_login_attempts: Int + auth_password_policy: String + storage_asset_transform: String + storage_asset_presets: JSON + storage_asset_presets_func: count_functions + custom_css: String + storage_default_folder(filter: directus_folders_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_folders + basemaps: JSON + basemaps_func: count_functions + mapbox_key: String + module_bar: JSON + module_bar_func: count_functions + project_descriptor: String + default_language: String + custom_aspect_ratios: JSON + custom_aspect_ratios_func: count_functions +} + +type directus_settings_mutated { + key: ID! + event: EventEnum + data: directus_settings +} + +type directus_shares { + id: ID! + name: String + collection: String! + item: String! + role(filter: directus_roles_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_roles + + """$t:shared_leave_blank_for_passwordless_access""" + password: Hash + user_created(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users + date_created: Date + date_created_func: datetime_functions + + """$t:shared_leave_blank_for_unlimited""" + date_start: Date + date_start_func: datetime_functions + + """$t:shared_leave_blank_for_unlimited""" + date_end: Date + date_end_func: datetime_functions + times_used: Int + + """$t:shared_leave_blank_for_unlimited""" + max_uses: Int +} + +type directus_shares_mutated { + key: ID! + event: EventEnum + data: directus_shares +} + +type directus_translations { + id: ID! + language: String! + key: String! + value: String! +} + +type directus_translations_mutated { + key: ID! + event: EventEnum + data: directus_translations +} + +type directus_users { + id: ID! + first_name: String + last_name: String + email: String + password: Hash + location: String + title: String + description: String + tags: JSON + tags_func: count_functions + avatar(filter: directus_files_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_files + language: String + theme: String + tfa_secret: Hash + status: String + role(filter: directus_roles_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_roles + token: Hash + last_access: Date + last_access_func: datetime_functions + last_page: String + provider: String + external_identifier: String + auth_data: JSON + auth_data_func: count_functions + email_notifications: Boolean +} + +type directus_users_mutated { + key: ID! + event: EventEnum + data: directus_users +} + +type directus_webhooks { + id: ID! + name: String! + method: String + url: String! + status: String + data: Boolean + actions: [String]! + collections: [String]! + headers: JSON + headers_func: count_functions +} + +type directus_webhooks_mutated { + key: ID! + event: EventEnum + data: directus_webhooks +} + +type projects { + id: ID! + sort: Int + user_created(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users + date_created: Date + date_created_func: datetime_functions + user_updated(filter: directus_users_filter, sort: [String], limit: Int, offset: Int, page: Int, search: String): directus_users + date_updated: Date + date_updated_func: datetime_functions + text: String +} + +type projects_aggregated { + group: JSON + countAll: Int + count: projects_aggregated_count + countDistinct: projects_aggregated_count + avg: projects_aggregated_fields + sum: projects_aggregated_fields + avgDistinct: projects_aggregated_fields + sumDistinct: projects_aggregated_fields + min: projects_aggregated_fields + max: projects_aggregated_fields +} + +type projects_aggregated_count { + id: Int + sort: Int + user_created: Int + date_created: Int + user_updated: Int + date_updated: Int + text: Int +} + +type projects_aggregated_fields { + sort: Float +} + +type projects_mutated { + key: ID! + event: EventEnum + data: projects +} + +input boolean_filter_operators { + _eq: Boolean + _neq: Boolean + _null: Boolean + _nnull: Boolean +} + +input count_function_filter_operators { + count: number_filter_operators +} + +input create_directus_files_input { + id: ID + storage: String! + filename_disk: String + filename_download: String! + title: String + type: String + folder: create_directus_folders_input + uploaded_by: create_directus_users_input + uploaded_on: Date + modified_by: create_directus_users_input + modified_on: Date + charset: String + filesize: GraphQLBigInt + width: Int + height: Int + duration: Int + embed: String + description: String + location: String + tags: JSON + metadata: JSON +} + +input create_directus_folders_input { + id: ID + name: String! + parent: create_directus_folders_input +} + +input create_directus_roles_input { + id: ID + name: String! + icon: String + description: String + ip_access: [String] + enforce_tfa: Boolean! + admin_access: Boolean! + app_access: Boolean + users: [create_directus_users_input] +} + +input create_directus_users_input { + id: ID + first_name: String + last_name: String + email: String + password: Hash + location: String + title: String + description: String + tags: JSON + avatar: create_directus_files_input + language: String + theme: String + tfa_secret: Hash + status: String + role: create_directus_roles_input + token: Hash + last_access: Date + last_page: String + provider: String + external_identifier: String + auth_data: JSON + email_notifications: Boolean +} + +input create_projects_input { + id: ID + sort: Int + user_created: create_directus_users_input + date_created: Date + user_updated: create_directus_users_input + date_updated: Date + text: String +} + +input date_filter_operators { + _eq: String + _neq: String + _gt: String + _gte: String + _lt: String + _lte: String + _null: Boolean + _nnull: Boolean + _in: [String] + _nin: [String] + _between: [GraphQLStringOrFloat] + _nbetween: [GraphQLStringOrFloat] +} + +input datetime_function_filter_operators { + year: number_filter_operators + month: number_filter_operators + week: number_filter_operators + day: number_filter_operators + weekday: number_filter_operators + hour: number_filter_operators + minute: number_filter_operators + second: number_filter_operators +} + +input directus_activity_filter { + id: number_filter_operators + action: string_filter_operators + user: directus_users_filter + timestamp: date_filter_operators + timestamp_func: datetime_function_filter_operators + ip: string_filter_operators + user_agent: string_filter_operators + collection: string_filter_operators + item: string_filter_operators + comment: string_filter_operators + origin: string_filter_operators + revisions: directus_revisions_filter + revisions_func: count_function_filter_operators + _and: [directus_activity_filter] + _or: [directus_activity_filter] +} + +input directus_dashboards_filter { + id: string_filter_operators + name: string_filter_operators + icon: string_filter_operators + note: string_filter_operators + date_created: date_filter_operators + date_created_func: datetime_function_filter_operators + user_created: directus_users_filter + color: string_filter_operators + panels: directus_panels_filter + panels_func: count_function_filter_operators + _and: [directus_dashboards_filter] + _or: [directus_dashboards_filter] +} + +input directus_files_filter { + id: string_filter_operators + storage: string_filter_operators + filename_disk: string_filter_operators + filename_download: string_filter_operators + title: string_filter_operators + type: string_filter_operators + folder: directus_folders_filter + uploaded_by: directus_users_filter + uploaded_on: date_filter_operators + uploaded_on_func: datetime_function_filter_operators + modified_by: directus_users_filter + modified_on: date_filter_operators + modified_on_func: datetime_function_filter_operators + charset: string_filter_operators + filesize: number_filter_operators + width: number_filter_operators + height: number_filter_operators + duration: number_filter_operators + embed: string_filter_operators + description: string_filter_operators + location: string_filter_operators + tags: string_filter_operators + tags_func: count_function_filter_operators + metadata: string_filter_operators + metadata_func: count_function_filter_operators + _and: [directus_files_filter] + _or: [directus_files_filter] +} + +input directus_flows_filter { + id: string_filter_operators + name: string_filter_operators + icon: string_filter_operators + color: string_filter_operators + description: string_filter_operators + status: string_filter_operators + trigger: string_filter_operators + accountability: string_filter_operators + options: string_filter_operators + options_func: count_function_filter_operators + operation: directus_operations_filter + date_created: date_filter_operators + date_created_func: datetime_function_filter_operators + user_created: directus_users_filter + operations: directus_operations_filter + operations_func: count_function_filter_operators + _and: [directus_flows_filter] + _or: [directus_flows_filter] +} + +input directus_folders_filter { + id: string_filter_operators + name: string_filter_operators + parent: directus_folders_filter + _and: [directus_folders_filter] + _or: [directus_folders_filter] +} + +input directus_operations_filter { + id: string_filter_operators + name: string_filter_operators + key: string_filter_operators + type: string_filter_operators + position_x: number_filter_operators + position_y: number_filter_operators + options: string_filter_operators + options_func: count_function_filter_operators + resolve: directus_operations_filter + reject: directus_operations_filter + flow: directus_flows_filter + date_created: date_filter_operators + date_created_func: datetime_function_filter_operators + user_created: directus_users_filter + _and: [directus_operations_filter] + _or: [directus_operations_filter] +} + +input directus_panels_filter { + id: string_filter_operators + dashboard: directus_dashboards_filter + name: string_filter_operators + icon: string_filter_operators + color: string_filter_operators + show_header: boolean_filter_operators + note: string_filter_operators + type: string_filter_operators + position_x: number_filter_operators + position_y: number_filter_operators + width: number_filter_operators + height: number_filter_operators + options: string_filter_operators + options_func: count_function_filter_operators + date_created: date_filter_operators + date_created_func: datetime_function_filter_operators + user_created: directus_users_filter + _and: [directus_panels_filter] + _or: [directus_panels_filter] +} + +input directus_revisions_filter { + id: number_filter_operators + activity: directus_activity_filter + collection: string_filter_operators + item: string_filter_operators + data: string_filter_operators + data_func: count_function_filter_operators + delta: string_filter_operators + delta_func: count_function_filter_operators + parent: directus_revisions_filter + _and: [directus_revisions_filter] + _or: [directus_revisions_filter] +} + +input directus_roles_filter { + id: string_filter_operators + name: string_filter_operators + icon: string_filter_operators + description: string_filter_operators + ip_access: string_filter_operators + enforce_tfa: boolean_filter_operators + admin_access: boolean_filter_operators + app_access: boolean_filter_operators + users: directus_users_filter + users_func: count_function_filter_operators + _and: [directus_roles_filter] + _or: [directus_roles_filter] +} + +input directus_users_filter { + id: string_filter_operators + first_name: string_filter_operators + last_name: string_filter_operators + email: string_filter_operators + password: hash_filter_operators + location: string_filter_operators + title: string_filter_operators + description: string_filter_operators + tags: string_filter_operators + tags_func: count_function_filter_operators + avatar: directus_files_filter + language: string_filter_operators + theme: string_filter_operators + tfa_secret: hash_filter_operators + status: string_filter_operators + role: directus_roles_filter + token: hash_filter_operators + last_access: date_filter_operators + last_access_func: datetime_function_filter_operators + last_page: string_filter_operators + provider: string_filter_operators + external_identifier: string_filter_operators + auth_data: string_filter_operators + auth_data_func: count_function_filter_operators + email_notifications: boolean_filter_operators + _and: [directus_users_filter] + _or: [directus_users_filter] +} + +input hash_filter_operators { + _null: Boolean + _nnull: Boolean + _empty: Boolean + _nempty: Boolean +} + +input number_filter_operators { + _eq: GraphQLStringOrFloat + _neq: GraphQLStringOrFloat + _in: [GraphQLStringOrFloat] + _nin: [GraphQLStringOrFloat] + _gt: GraphQLStringOrFloat + _gte: GraphQLStringOrFloat + _lt: GraphQLStringOrFloat + _lte: GraphQLStringOrFloat + _null: Boolean + _nnull: Boolean + _between: [GraphQLStringOrFloat] + _nbetween: [GraphQLStringOrFloat] +} + +input projects_filter { + id: string_filter_operators + sort: number_filter_operators + user_created: directus_users_filter + date_created: date_filter_operators + date_created_func: datetime_function_filter_operators + user_updated: directus_users_filter + date_updated: date_filter_operators + date_updated_func: datetime_function_filter_operators + text: string_filter_operators + _and: [projects_filter] + _or: [projects_filter] +} + +input string_filter_operators { + _eq: String + _neq: String + _contains: String + _icontains: String + _ncontains: String + _starts_with: String + _nstarts_with: String + _istarts_with: String + _nistarts_with: String + _ends_with: String + _nends_with: String + _iends_with: String + _niends_with: String + _in: [String] + _nin: [String] + _null: Boolean + _nnull: Boolean + _empty: Boolean + _nempty: Boolean +} + +input update_directus_files_input { + id: ID + storage: String + filename_disk: String + filename_download: String + title: String + type: String + folder: update_directus_folders_input + uploaded_by: update_directus_users_input + uploaded_on: Date + modified_by: update_directus_users_input + modified_on: Date + charset: String + filesize: GraphQLBigInt + width: Int + height: Int + duration: Int + embed: String + description: String + location: String + tags: JSON + metadata: JSON +} + +input update_directus_folders_input { + id: ID + name: String + parent: update_directus_folders_input +} + +input update_directus_roles_input { + id: ID + name: String + icon: String + description: String + ip_access: [String] + enforce_tfa: Boolean + admin_access: Boolean + app_access: Boolean + users: [update_directus_users_input] +} + +input update_directus_users_input { + id: ID + first_name: String + last_name: String + email: String + password: Hash + location: String + title: String + description: String + tags: JSON + avatar: update_directus_files_input + language: String + theme: String + tfa_secret: Hash + status: String + role: update_directus_roles_input + token: Hash + last_access: Date + last_page: String + provider: String + external_identifier: String + auth_data: JSON + email_notifications: Boolean +} + +input update_projects_input { + id: ID + sort: Int + user_created: update_directus_users_input + date_created: Date + user_updated: update_directus_users_input + date_updated: Date + text: String +} \ No newline at end of file diff --git a/src/fetch-schema.js b/src/fetch-schema.js new file mode 100644 index 0000000..e69322a --- /dev/null +++ b/src/fetch-schema.js @@ -0,0 +1,33 @@ +const axios = require('axios'); +const fs = require('fs'); + +const path = require('path'); +require('dotenv').config({ path: path.resolve(__dirname, '../.env.local') }); + + +async function fetchSchema() { + // Define the Directus server URL and credentials + const serverUrl = 'https://directus.andert.me'; + const credentials = { + email: 'samuel@andert.me', + password: process.env.DIRECTUS_PW + }; + + // Login to the Directus server and get the access token + const { data: { data: { token } } } = await axios.post(`${serverUrl}/auth/login`, credentials); + + // Fetch the GraphQL SDL schema + const { data: schema } = await axios.get(`${serverUrl}/server/specs/graphql`, { + headers: { + 'Authorization': `Bearer ${process.env.DIRECTUS_API}` + } + }); + + // Save the schema to a file + fs.writeFileSync('./schema/directus.graphql', schema); +} + +fetchSchema().catch(console.error); + + + diff --git a/src/pages/api/hello.ts b/src/pages/api/hello.ts index f8bcc7e..838a9b1 100644 --- a/src/pages/api/hello.ts +++ b/src/pages/api/hello.ts @@ -1,4 +1,3 @@ -// Next.js API route support: https://nextjs.org/docs/api-routes/introduction import type { NextApiRequest, NextApiResponse } from 'next' type Data = {