Added directus api

This commit is contained in:
Samuel Andert 2023-08-21 15:34:56 +02:00
parent 0783eaa2d7
commit 0a4a793d39
6 changed files with 1545 additions and 8 deletions

View File

@ -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}

View File

@ -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",

504
pnpm-lock.yaml generated
View File

@ -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

986
schema/directus.graphql Normal file
View File

@ -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
}

33
src/fetch-schema.js Normal file
View File

@ -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);

View File

@ -1,4 +1,3 @@
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
import type { NextApiRequest, NextApiResponse } from 'next'
type Data = {