@directus/app 9.9.1 → 9.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/@directus_extensions-sdk.83ecd947.entry.js +1 -0
- package/dist/assets/{accounts.5e4228ef.js → accounts.5730f58a.js} +1 -1
- package/dist/assets/{active-line.c47b5f35.js → active-line.ebb71fb8.js} +1 -1
- package/dist/assets/{activity-log.05fbb6b2.js → activity-log.c9235b62.js} +1 -1
- package/dist/assets/{activity.9ac0d92d.js → activity.ff4cb799.js} +1 -1
- package/dist/assets/{apl.44b147a4.js → apl.976167c0.js} +1 -1
- package/dist/assets/{asciiarmor.d9d1a74a.js → asciiarmor.45c16f31.js} +1 -1
- package/dist/assets/{asn.1.0bedcc18.js → asn.1.7f874dea.js} +1 -1
- package/dist/assets/{asterisk.9e1e2b5c.js → asterisk.55e38066.js} +1 -1
- package/dist/assets/{authentication.f55a38e7.js → authentication.37ab728d.js} +1 -1
- package/dist/assets/{autorefresh.bb3b714c.js → autorefresh.f4273b37.js} +1 -1
- package/dist/assets/{aws.1b5dfcb9.js → aws.2cbdae9b.js} +1 -1
- package/dist/assets/{backing-directus.6688e1d8.js → backing-directus.c30814b2.js} +1 -1
- package/dist/assets/{brainfuck.9f0e8180.js → brainfuck.ab8ecbbf.js} +1 -1
- package/dist/assets/{cli.0ca53593.js → cli.0a4df861.js} +2 -2
- package/dist/assets/{cli.7b4e2953.js → cli.972136c7.js} +1 -1
- package/dist/assets/{clike.99cd0401.js → clike.8c0b0d8f.js} +1 -1
- package/dist/assets/{clojure.1faf0a0a.js → clojure.e58df985.js} +1 -1
- package/dist/assets/{cloudron.e59a593d.js → cloudron.c5c97204.js} +1 -1
- package/dist/assets/cmake.77c3a78b.js +1 -0
- package/dist/assets/{cobol.94e4970e.js → cobol.5800890d.js} +1 -1
- package/dist/assets/{codebase-overview.2a6823b1.js → codebase-overview.41eb2e19.js} +1 -1
- package/dist/assets/{coffeescript.c48d036c.js → coffeescript.65bdab88.js} +1 -1
- package/dist/assets/collections.c691fda2.js +2 -0
- package/dist/assets/{collections.315f4d8c.js → collections.cf70d96a.js} +1 -1
- package/dist/assets/{commonlisp.38e77db1.js → commonlisp.fdaf9ea0.js} +1 -1
- package/dist/assets/config-options.f4fd7c46.js +138 -0
- package/dist/assets/content.a28f530b.js +1 -0
- package/dist/assets/{creating-extensions.0c8abfa1.js → creating-extensions.5b5af540.js} +2 -2
- package/dist/assets/{crystal.797d41f8.js → crystal.d36108d5.js} +1 -1
- package/dist/assets/{css.4143f596.js → css.af9df8d9.js} +1 -1
- package/dist/assets/{cypher.b8b073de.js → cypher.c083eec3.js} +1 -1
- package/dist/assets/{d.1d4ff6fe.js → d.b4f5d1f2.js} +1 -1
- package/dist/assets/{da-DK.6750ac06.js → da-DK.eafe971e.js} +1 -1
- package/dist/assets/{dart.09b87006.js → dart.af866fff.js} +1 -1
- package/dist/assets/{data-model.3e1183a6.js → data-model.5bf39838.js} +1 -1
- package/dist/assets/data-sharing.2f88743d.js +1 -0
- package/dist/assets/{diff.5151f967.js → diff.52a32496.js} +1 -1
- package/dist/assets/{digitalocean-app-platform.05c4c314.js → digitalocean-app-platform.21eddffd.js} +1 -1
- package/dist/assets/{displays.f0798610.js → displays.74c0202c.js} +1 -1
- package/dist/assets/{django.25ec1935.js → django.804afcea.js} +1 -1
- package/dist/assets/{docker.50e94433.js → docker.3fd073e7.js} +1 -1
- package/dist/assets/{dockerfile.cabedb31.js → dockerfile.8cc3eed0.js} +1 -1
- package/dist/assets/{documentation.1ed9f7a2.js → documentation.037616ed.js} +1 -1
- package/dist/assets/{dtd.82e83b59.js → dtd.5a4c5958.js} +1 -1
- package/dist/assets/{dylan.9c51410f.js → dylan.f5a1dc92.js} +1 -1
- package/dist/assets/{ebnf.ae5c413a.js → ebnf.19298dc4.js} +1 -1
- package/dist/assets/{ecl.c4cb88ea.js → ecl.1b12a71c.js} +1 -1
- package/dist/assets/{eiffel.353baac9.js → eiffel.78a4a13f.js} +1 -1
- package/dist/assets/el-GR.6cae7a1c.js +1 -0
- package/dist/assets/{elm.bd4624df.js → elm.c5b4e3d7.js} +1 -1
- package/dist/assets/{email-templates.f9a5e9df.js → email-templates.015f656b.js} +2 -2
- package/dist/assets/{endpoints.33794f8d.js → endpoints.ad718303.js} +2 -2
- package/dist/assets/{erlang.9dbc839d.js → erlang.5ba0e81e.js} +1 -1
- package/dist/assets/es-419.6fa04597.js +1 -0
- package/dist/assets/{extensions.de24a384.js → extensions.a78a0bab.js} +1 -1
- package/dist/assets/{factor.c11b1d46.js → factor.474d1346.js} +1 -1
- package/dist/assets/{faq.ac13aeaa.js → faq.79215fd0.js} +1 -1
- package/dist/assets/{fcl.a5a5f935.js → fcl.faa472c2.js} +1 -1
- package/dist/assets/{fields.bc105e57.js → fields.446cb520.js} +1 -1
- package/dist/assets/{file-library.bc6397f9.js → file-library.2eee653e.js} +1 -1
- package/dist/assets/{files.18ebb2c6.js → files.d159019e.js} +1 -1
- package/dist/assets/{filter-rules.0cd75320.js → filter-rules.da99ca6f.js} +1 -1
- package/dist/assets/{filters.ce249fa9.js → filters.50017874.js} +1 -1
- package/dist/assets/{folders.8f839f67.js → folders.8e9a04b0.js} +1 -1
- package/dist/assets/{forth.2a48338c.js → forth.f24b3d09.js} +1 -1
- package/dist/assets/{fortran.39a5d2da.js → fortran.fbb666b5.js} +1 -1
- package/dist/assets/{gas.2be39a3b.js → gas.f0748dd2.js} +1 -1
- package/dist/assets/{gcp.f6eca353.js → gcp.c7cb44ca.js} +1 -1
- package/dist/assets/{gfm.8e609735.js → gfm.877310b0.js} +1 -1
- package/dist/assets/{gherkin.7379fdd0.js → gherkin.3d7e0a5d.js} +1 -1
- package/dist/assets/{github-ci.35b5d221.js → github-ci.a7b2c801.js} +1 -1
- package/dist/assets/{glossary.0bfb8dee.js → glossary.1f1de0b0.js} +1 -1
- package/dist/assets/{glossary.50f82640.js → glossary.36456466.js} +1 -1
- package/dist/assets/{go.57e9d20a.js → go.83a7c333.js} +1 -1
- package/dist/assets/{groovy.0164fcf3.js → groovy.884233c9.js} +1 -1
- package/dist/assets/{haml.9baa3f10.js → haml.3e1c682b.js} +1 -1
- package/dist/assets/{handlebars.2ca50502.js → handlebars.bef17c70.js} +1 -1
- package/dist/assets/{haskell-literate.d6ca9fd0.js → haskell-literate.26780990.js} +1 -1
- package/dist/assets/{haskell.bc6c4772.js → haskell.fd518ccf.js} +1 -1
- package/dist/assets/{haxe.478e9912.js → haxe.4b2e78c7.js} +1 -1
- package/dist/assets/{hooks.3d981c49.js → hooks.50182523.js} +1 -1
- package/dist/assets/{htmlembedded.62531935.js → htmlembedded.d8b6ff8e.js} +1 -1
- package/dist/assets/{htmlmixed.634bf459.js → htmlmixed.97a3b948.js} +1 -1
- package/dist/assets/{http.67a323b7.js → http.86104e7d.js} +1 -1
- package/dist/assets/{idl.8238e552.js → idl.b4dc075f.js} +1 -1
- package/dist/assets/{iis.f17cd9e8.js → iis.df3e4d3b.js} +2 -2
- package/dist/assets/{import-export.37729346.js → import-export.fa969793.js} +1 -1
- package/dist/assets/{index.72f04310.js → index.03933ae1.js} +1 -1
- package/dist/assets/{index.6e68ad3a.js → index.07942b86.js} +1 -1
- package/dist/assets/{index.9a02c131.js → index.0965f2ea.js} +1 -1
- package/dist/assets/{index.20d232c4.js → index.0a4cd515.js} +1 -1
- package/dist/assets/{index.3018ece6.js → index.0ad4f3d0.js} +1 -1
- package/dist/assets/{index.2eae8e43.js → index.17154988.js} +1 -1
- package/dist/assets/{index.a3ff4cef.js → index.1bfa0805.js} +1 -1
- package/dist/assets/{index.03e82d0f.js → index.1c338ca1.js} +1 -1
- package/dist/assets/{index.66ad62bb.js → index.20fca3e7.js} +1 -1
- package/dist/assets/{index.5f8f7e76.js → index.21310180.js} +1 -1
- package/dist/assets/{index.b90a9a9e.js → index.22509b50.js} +1 -1
- package/dist/assets/{index.0898ffcc.js → index.238a3268.js} +1 -1
- package/dist/assets/{index.71c27623.js → index.23fc74ac.js} +1 -1
- package/dist/assets/{index.eca0f639.js → index.246ca0ff.js} +1 -1
- package/dist/assets/{index.39fac911.js → index.2497550e.js} +1 -1
- package/dist/assets/{index.370f33b2.js → index.287575da.js} +1 -1
- package/dist/assets/{index.e6b36791.js → index.2c02b800.js} +1 -1
- package/dist/assets/{index.61ee2548.js → index.2cbb3f8d.js} +1 -1
- package/dist/assets/{index.74831233.js → index.2ea1f7d6.js} +1 -1
- package/dist/assets/{index.e56bb3bf.js → index.31d97c88.js} +1 -1
- package/dist/assets/{index.93145a08.js → index.33033888.js} +1 -1
- package/dist/assets/{index.5836bfd3.js → index.3615276e.js} +1 -1
- package/dist/assets/{index.d67df067.js → index.3c303b00.js} +1 -1
- package/dist/assets/{index.e02bc037.js → index.42d258a4.js} +1 -1
- package/dist/assets/{index.69b05a1e.js → index.43052732.js} +1 -1
- package/dist/assets/{index.3a3a3436.js → index.47b05378.js} +1 -1
- package/dist/assets/{index.6c1cd895.js → index.496e25ca.js} +1 -1
- package/dist/assets/{index.e420cfa9.js → index.581b15b9.js} +1 -1
- package/dist/assets/{index.9f82e3be.js → index.58482880.js} +1 -1
- package/dist/assets/{index.47c4a06c.js → index.5f27ce64.js} +1 -1
- package/dist/assets/{index.a40ba614.js → index.5f7f173b.js} +1 -1
- package/dist/assets/{index.9a4eb005.js → index.5faf5621.js} +1 -1
- package/dist/assets/{index.524bdca1.js → index.63373d3a.js} +1 -1
- package/dist/assets/{index.6b991ff5.js → index.64299c43.js} +1 -1
- package/dist/assets/{index.3fcc5be7.js → index.682125dd.js} +1 -1
- package/dist/assets/{index.6a8f8e56.js → index.6bef0d6c.js} +1 -1
- package/dist/assets/{index.e9dcaf1e.js → index.6f07a11e.js} +1 -1
- package/dist/assets/{index.a585d6b9.js → index.6f66f6e6.js} +1 -1
- package/dist/assets/{index.eaede45c.js → index.7042ed95.js} +1 -1
- package/dist/assets/{index.a453d122.js → index.720d195f.js} +1 -1
- package/dist/assets/{index.6f987d91.js → index.7dcd13ec.js} +1 -1
- package/dist/assets/{index.b7eb2760.js → index.7ecee286.js} +1 -1
- package/dist/assets/{index.c6614b22.js → index.80eaa583.js} +1 -1
- package/dist/assets/{index.d05c258f.js → index.821e1d62.js} +1 -1
- package/dist/assets/{index.4d327518.js → index.8587b5df.js} +1 -1
- package/dist/assets/index.87da20e6.css +1 -0
- package/dist/assets/index.895a297f.css +1 -0
- package/dist/assets/{index.74a3bead.js → index.89e94c9c.js} +1 -1
- package/dist/assets/{index.17aaf60e.js → index.8e6150b3.js} +1 -1
- package/dist/assets/{index.66e22b6f.js → index.9aaa42b8.js} +1 -1
- package/dist/assets/{index.fd99a2e6.js → index.a0a5fe39.js} +1 -1
- package/dist/assets/{index.6146ee27.js → index.a0ae139c.js} +1 -1
- package/dist/assets/{index.199627f2.js → index.a2a6bfb1.js} +1 -1
- package/dist/assets/{index.3fd307c9.js → index.ae7d8610.js} +1 -1
- package/dist/assets/{index.7910f707.js → index.aeb2c755.js} +1 -1
- package/dist/assets/{index.fd9a5f6e.js → index.afd57094.js} +1 -1
- package/dist/assets/index.b05c71d6.js +26 -0
- package/dist/assets/{index.52478625.js → index.b298e8de.js} +1 -1
- package/dist/assets/{index.ced9e6c4.js → index.b8a7f65d.js} +1 -1
- package/dist/assets/{index.6fd7572a.js → index.b967027a.js} +1 -1
- package/dist/assets/{index.897edae9.js → index.bcb27c66.js} +1 -1
- package/dist/assets/{index.1f8cd33b.js → index.bf4dfe15.js} +1 -1
- package/dist/assets/{index.946634f1.js → index.c80ad32e.js} +1 -1
- package/dist/assets/{index.2ade6f4c.js → index.c841431b.js} +1 -1
- package/dist/assets/{index.e503db08.js → index.cb1b4143.js} +1 -1
- package/dist/assets/index.cee72373.entry.js +541 -0
- package/dist/assets/{index.73cf06c6.js → index.d1ed2a91.js} +1 -1
- package/dist/assets/{index.840dec92.js → index.d368ce15.js} +1 -1
- package/dist/assets/{index.8d30a9b7.js → index.d48ea4d8.js} +1 -1
- package/dist/assets/{index.2b376698.js → index.d58a43db.js} +1 -1
- package/dist/assets/{index.8c02ccc9.js → index.d5e9d8c8.js} +1 -1
- package/dist/assets/{index.5225bff7.js → index.de6c99b7.js} +1 -1
- package/dist/assets/{index.8cb5cecc.js → index.debe4fb7.js} +1 -1
- package/dist/assets/{index.709876ee.js → index.e3fcfd5a.js} +1 -1
- package/dist/assets/{index.f64580fa.js → index.e6ccad11.js} +1 -1
- package/dist/assets/{index.94c37923.js → index.e6d22a55.js} +1 -1
- package/dist/assets/{index.54056858.js → index.e854339b.js} +1 -1
- package/dist/assets/{index.99a868e4.js → index.ea34f437.js} +1 -1
- package/dist/assets/{index.ea7d7704.js → index.f748e411.js} +1 -1
- package/dist/assets/{index.e4d21fbc.js → index.f8814651.js} +1 -1
- package/dist/assets/{index.c62b6868.js → index.f960c87a.js} +1 -1
- package/dist/assets/{index.9c32a380.js → index.f9b96f27.js} +1 -1
- package/dist/assets/{index.aba657de.js → index.fcd87af8.js} +1 -1
- package/dist/assets/{index.d4b072f4.js → index.ff921dbe.js} +1 -1
- package/dist/assets/{input-rich-text-html.d4c2e2cf.js → input-rich-text-html.eae7c584.js} +30 -30
- package/dist/assets/{insights.4db4d732.js → insights.3d0e532e.js} +1 -1
- package/dist/assets/{installation.268919de.js → installation.4a2c097d.js} +1 -1
- package/dist/assets/{interfaces.c498302c.js → interfaces.cccc9cc1.js} +3 -3
- package/dist/assets/{introduction.d6821907.js → introduction.6527a259.js} +4 -4
- package/dist/assets/{introduction.c10f10d3.js → introduction.7a9da828.js} +1 -1
- package/dist/assets/{introduction.c5e5e21e.js → introduction.a2f61d58.js} +1 -1
- package/dist/assets/{introduction.83bcfc15.js → introduction.d55a65c8.js} +1 -1
- package/dist/assets/it-IT.36fdff8b.js +1 -0
- package/dist/assets/{items.5732b18d.js → items.7601f70b.js} +1 -1
- package/dist/assets/{items.b0a4ab61.js → items.d7eaeea0.js} +1 -1
- package/dist/assets/{javascript-hint.7ae21fbe.js → javascript-hint.4638e1df.js} +1 -1
- package/dist/assets/{javascript.4f51ecf0.js → javascript.03bf484d.js} +1 -1
- package/dist/assets/{jinja2.9bf9144f.js → jinja2.e0978b57.js} +1 -1
- package/dist/assets/{jsx.a7b4e734.js → jsx.123b4803.js} +1 -1
- package/dist/assets/{julia.5461c3cc.js → julia.5a59262e.js} +1 -1
- package/dist/assets/{layouts.effabdf0.js → layouts.41b77af2.js} +1 -1
- package/dist/assets/layouts.91e2348f.js +1 -0
- package/dist/assets/{livescript.7b500566.js → livescript.9a958350.js} +1 -1
- package/dist/assets/{localization.be7f565c.js → localization.98833475.js} +1 -1
- package/dist/assets/{lua.00c71164.js → lua.92f32265.js} +1 -1
- package/dist/assets/{manual.1c389d8b.js → manual.818edfc3.js} +3 -3
- package/dist/assets/{mark-selection.97d7037b.js → mark-selection.4a693f01.js} +1 -1
- package/dist/assets/{match-highlighter.a02da4f0.js → match-highlighter.17a81b47.js} +1 -1
- package/dist/assets/{mathematica.8f6aa856.js → mathematica.f14d4707.js} +1 -1
- package/dist/assets/{mbox.fd92e018.js → mbox.e7c08a48.js} +1 -1
- package/dist/assets/{migrations.362ff4f6.js → migrations.55476341.js} +1 -1
- package/dist/assets/{mirc.fdf10b1b.js → mirc.0311799e.js} +1 -1
- package/dist/assets/{mllike.6f004a2c.js → mllike.d7bb3f6e.js} +1 -1
- package/dist/assets/{modelica.cbd88d45.js → modelica.7e7c93c0.js} +1 -1
- package/dist/assets/{modules.b091090c.js → modules.b617791f.js} +2 -2
- package/dist/assets/{mscgen.14353b86.js → mscgen.2cc54faf.js} +1 -1
- package/dist/assets/{multiplex.cd44ee19.js → multiplex.fb681b1b.js} +1 -1
- package/dist/assets/{mumps.efe96b5e.js → mumps.674bb5e3.js} +1 -1
- package/dist/assets/{nginx.96c9c4df.js → nginx.165b607e.js} +1 -1
- package/dist/assets/{notifications.3e5cfc89.js → notifications.ccba3d4a.js} +1 -1
- package/dist/assets/{nsis.55581ab2.js → nsis.1ed5ef23.js} +1 -1
- package/dist/assets/{ntriples.aca0fe40.js → ntriples.e3148272.js} +1 -1
- package/dist/assets/{octave.62945644.js → octave.ab99cd73.js} +1 -1
- package/dist/assets/{overlay.2efdf812.js → overlay.03a5b7fa.js} +1 -1
- package/dist/assets/{overview.fb04e55f.js → overview.b3a91d76.js} +1 -1
- package/dist/assets/{overview.dfc729e7.js → overview.c76d2a06.js} +1 -1
- package/dist/assets/{overview.332df7ba.js → overview.e3f03ff4.js} +1 -1
- package/dist/assets/{oz.c7a6ef55.js → oz.e21c8060.js} +1 -1
- package/dist/assets/{panels.93ebd845.js → panels.8635347d.js} +1 -1
- package/dist/assets/{pascal.9f427f36.js → pascal.8c592490.js} +1 -1
- package/dist/assets/{pegjs.f95b4e7c.js → pegjs.e94f313a.js} +1 -1
- package/dist/assets/{perl.157b1d6a.js → perl.f7dcd896.js} +1 -1
- package/dist/assets/{permissions.3a997b1b.js → permissions.4970c519.js} +2 -2
- package/dist/assets/{php.45aaf3ff.js → php.ad6c4236.js} +1 -1
- package/dist/assets/{pig.abf158b5.js → pig.7b140cb8.js} +1 -1
- package/dist/assets/pinia.b29efb4f.entry.js +1 -0
- package/dist/assets/pl-PL.cb210ffb.js +1 -0
- package/dist/assets/{plesk.93413565.js → plesk.6409199b.js} +4 -4
- package/dist/assets/{powershell.c8483dfa.js → powershell.8d5784a6.js} +1 -1
- package/dist/assets/{presets-bookmarks.821ff603.js → presets-bookmarks.335e81c4.js} +1 -1
- package/dist/assets/{presets.e40c980c.js → presets.3fb59a7c.js} +1 -1
- package/dist/assets/{project-settings.990a7733.js → project-settings.da2b6026.js} +1 -1
- package/dist/assets/{projects.8446f9e0.js → projects.c04f28b7.js} +1 -1
- package/dist/assets/{properties.9746447f.js → properties.bd6ae04f.js} +1 -1
- package/dist/assets/{protobuf.da387992.js → protobuf.f3e4657d.js} +1 -1
- package/dist/assets/pt-BR.92a32af8.js +1 -0
- package/dist/assets/{pug.799b8b48.js → pug.3c534d03.js} +1 -1
- package/dist/assets/{puppet.50c5f4a8.js → puppet.088f8b16.js} +1 -1
- package/dist/assets/{python.24183ff4.js → python.c49e4c13.js} +1 -1
- package/dist/assets/{q.a6bde20d.js → q.61a8ab64.js} +1 -1
- package/dist/assets/{query.0b8a58bf.js → query.e6b1f07e.js} +1 -1
- package/dist/assets/{quickstart.c03909d1.js → quickstart.9c3c65b4.js} +2 -2
- package/dist/assets/{r.5ef93882.js → r.f34d7d93.js} +1 -1
- package/dist/assets/{relations.3075f46c.js → relations.77fc85a4.js} +1 -1
- package/dist/assets/{relationships.799d5eb1.js → relationships.7a8128c2.js} +1 -1
- package/dist/assets/{revisions.0fdeffdb.js → revisions.99756266.js} +2 -2
- package/dist/assets/ro-RO.83d12aa1.js +1 -0
- package/dist/assets/{roles.454d01a2.js → roles.27092a50.js} +1 -1
- package/dist/assets/{rpm.dc7eb8c7.js → rpm.6b2223a5.js} +1 -1
- package/dist/assets/rst.009c8d0d.js +1 -0
- package/dist/assets/{ruby.5f2c5d49.js → ruby.6eb0fa57.js} +1 -1
- package/dist/assets/{running-locally.b169fd6b.js → running-locally.7242ae0a.js} +1 -1
- package/dist/assets/{rust.cb883a51.js → rust.6aadde77.js} +1 -1
- package/dist/assets/{sas.d4698414.js → sas.deab0a07.js} +1 -1
- package/dist/assets/{sass.2a5b4ded.js → sass.af8ab6d2.js} +1 -1
- package/dist/assets/{scheme.03cb579f.js → scheme.18c5344a.js} +1 -1
- package/dist/assets/{sdk.b30c40c3.js → sdk.269c9e85.js} +1 -1
- package/dist/assets/{security.bb444305.js → security.862613c7.js} +1 -1
- package/dist/assets/{server.96d2684f.js → server.191bd9cd.js} +1 -1
- package/dist/assets/{settings.6ee8ba3d.js → settings.4970c672.js} +1 -1
- package/dist/assets/{settings.590609ba.js → settings.7e7b66b7.js} +1 -1
- package/dist/assets/{shell.823d1fdc.js → shell.8d43da03.js} +1 -1
- package/dist/assets/{show-hint.ed75f164.js → show-hint.5f0a75a7.js} +1 -1
- package/dist/assets/sieve.cd31ea4b.js +1 -0
- package/dist/assets/{simple.6f7c2241.js → simple.9700ddf1.js} +1 -1
- package/dist/assets/{slim.6963eba3.js → slim.61b8011a.js} +1 -1
- package/dist/assets/{smalltalk.e8a89293.js → smalltalk.936c2132.js} +1 -1
- package/dist/assets/{smarty.c1c7c7b6.js → smarty.7684a399.js} +1 -1
- package/dist/assets/{solr.d56d44ed.js → solr.351a6f56.js} +1 -1
- package/dist/assets/{soy.73095779.js → soy.a54a888b.js} +1 -1
- package/dist/assets/{sparql.3250c390.js → sparql.b38e0bef.js} +1 -1
- package/dist/assets/{spreadsheet.502aed5e.js → spreadsheet.8ae834ee.js} +1 -1
- package/dist/assets/{sql.2669a728.js → sql.bd75a39a.js} +1 -1
- package/dist/assets/sso-examples.dff690ca.js +64 -0
- package/dist/assets/{sso.3e95ead4.js → sso.ccd423a5.js} +3 -3
- package/dist/assets/{stex.805ccf9b.js → stex.751640f7.js} +1 -1
- package/dist/assets/{stylus.7a36e1a2.js → stylus.44c9a636.js} +1 -1
- package/dist/assets/{support.53f88829.js → support.a4a37514.js} +1 -1
- package/dist/assets/{swift.8e6dedf9.js → swift.6bee86b1.js} +1 -1
- package/dist/assets/{tcl.218bb297.js → tcl.d6f60bbe.js} +1 -1
- package/dist/assets/{teams.2936126f.js → teams.69678693.js} +1 -1
- package/dist/assets/{textile.6739cf22.js → textile.fd4c90e1.js} +1 -1
- package/dist/assets/{themes.99cb1672.js → themes.96c4b04e.js} +1 -1
- package/dist/assets/{tiddlywiki.9838bde4.js → tiddlywiki.7f1650d8.js} +1 -1
- package/dist/assets/{tiki.80b69321.js → tiki.f948533d.js} +1 -1
- package/dist/assets/{toml.1089d432.js → toml.9f585d06.js} +1 -1
- package/dist/assets/{tornado.43361bdb.js → tornado.c8c03b6f.js} +1 -1
- package/dist/assets/{translations.b9e0ee2e.js → translations.a57ab24c.js} +1 -1
- package/dist/assets/{troff.6fa2515b.js → troff.75929447.js} +1 -1
- package/dist/assets/{ttcn-cfg.29c11a29.js → ttcn-cfg.2a42e89c.js} +1 -1
- package/dist/assets/{ttcn.7e441eeb.js → ttcn.d2edc1c1.js} +1 -1
- package/dist/assets/{turtle.cc980bba.js → turtle.53a5c73e.js} +1 -1
- package/dist/assets/{twig.c208e31e.js → twig.ecd65687.js} +1 -1
- package/dist/assets/{ubuntu.0d81a10a.js → ubuntu.f280193a.js} +1 -1
- package/dist/assets/{upgrades-migrations.715ee1d6.js → upgrades-migrations.27ddad05.js} +1 -1
- package/dist/assets/{use-sync.1c032102.js → use-sync.bd3a1e5b.js} +1 -1
- package/dist/assets/{user-directory.1c64c935.js → user-directory.d8b4d6b4.js} +1 -1
- package/dist/assets/{users-roles-permissions.4e51ac63.js → users-roles-permissions.a2f25725.js} +1 -1
- package/dist/assets/{users.8d9b68a7.js → users.5aa98413.js} +1 -1
- package/dist/assets/{utilities.dfed4954.js → utilities.bf7f4133.js} +1 -1
- package/dist/assets/{vb.6e5aca67.js → vb.842b5727.js} +1 -1
- package/dist/assets/{vbscript.93c429fa.js → vbscript.fcc607c0.js} +1 -1
- package/dist/assets/{velocity.c1a64e08.js → velocity.efde9b99.js} +1 -1
- package/dist/assets/{vendor.c37f7cab.js → vendor.e0a21029.js} +212 -199
- package/dist/assets/{verilog.748a4e09.js → verilog.95b86b19.js} +1 -1
- package/dist/assets/{vhdl.b6c77d3f.js → vhdl.05ad780d.js} +1 -1
- package/dist/assets/vue-i18n.bb58f1d6.entry.js +1 -0
- package/dist/assets/vue-router.86ff737d.entry.js +1 -0
- package/dist/assets/vue.0442bd87.entry.js +1 -0
- package/dist/assets/{vue.f9ff97ec.js → vue.6c1e2b28.js} +1 -1
- package/dist/assets/{wast.a3dcc216.js → wast.c5c40bca.js} +1 -1
- package/dist/assets/{webhooks.006f48f5.js → webhooks.07b4ac17.js} +1 -1
- package/dist/assets/{webhooks.41585988.js → webhooks.dc830bd4.js} +1 -1
- package/dist/assets/{webidl.935b4665.js → webidl.81f09aef.js} +1 -1
- package/dist/assets/{xquery.1cd12bcf.js → xquery.4e7c6d54.js} +1 -1
- package/dist/assets/{yacas.b7fa45c7.js → yacas.70a010d5.js} +1 -1
- package/dist/assets/{yaml-frontmatter.e47634fc.js → yaml-frontmatter.2881b171.js} +1 -1
- package/dist/assets/{yaml.34a5a469.js → yaml.0a0b8dc6.js} +1 -1
- package/dist/assets/{z80.4847a5a2.js → z80.dce13765.js} +1 -1
- package/dist/index.html +4 -4
- package/package.json +10 -6
- package/dist/assets/@directus_extensions-sdk.b16f3f9c.entry.js +0 -1
- package/dist/assets/cmake.cfb44e0d.js +0 -1
- package/dist/assets/collections.709f5818.js +0 -2
- package/dist/assets/config-options.09a44368.js +0 -138
- package/dist/assets/content.8dfe4d0f.js +0 -1
- package/dist/assets/data-sharing.17c81a27.js +0 -1
- package/dist/assets/el-GR.b15e80c2.js +0 -1
- package/dist/assets/es-419.86b21e53.js +0 -1
- package/dist/assets/index.31e06860.css +0 -1
- package/dist/assets/index.5ca402ee.css +0 -1
- package/dist/assets/index.9bc985db.js +0 -26
- package/dist/assets/index.dd44fb28.entry.js +0 -541
- package/dist/assets/it-IT.c7c56676.js +0 -1
- package/dist/assets/layouts.c0d4d117.js +0 -1
- package/dist/assets/pinia.b0a7f3a9.entry.js +0 -1
- package/dist/assets/pl-PL.369789f9.js +0 -1
- package/dist/assets/pt-BR.629e0c60.js +0 -1
- package/dist/assets/ro-RO.26d41bde.js +0 -1
- package/dist/assets/rst.c0f0c052.js +0 -1
- package/dist/assets/sieve.ca0810e1.js +0 -1
- package/dist/assets/vue-i18n.38d89027.entry.js +0 -1
- package/dist/assets/vue-router.e188e24d.entry.js +0 -1
- package/dist/assets/vue.ea10f693.entry.js +0 -1
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import{w as s,y as d,z as i,A as n,E as l,C as o,W as e}from"./vendor.c37f7cab.js";const c={class:"markdown-body"},h=l("blockquote",null,[l("p",null,"Environment variables are used for all configuration within a Directus project. These variables can be defined in a number of ways, which we cover below.")],-1),_=l("p",null,[l("div",{class:"table-of-contents"},[l("ul",null,[l("li",null,[l("a",{href:"#configuration-files"},"Configuration Files")]),l("li",null,[l("a",{href:"#environment-variable-files"},"Environment Variable Files")]),l("li",null,[l("a",{href:"#type-casting-and-nesting"},"Type Casting and Nesting")]),l("li",null,[l("a",{href:"#environment-syntax-prefix"},"Environment Syntax Prefix")]),l("li",null,[l("a",{href:"#general"},"General")]),l("li",null,[l("a",{href:"#server"},"Server")]),l("li",null,[l("a",{href:"#database"},"Database")]),l("li",null,[l("a",{href:"#security"},"Security")]),l("li",null,[l("a",{href:"#cors"},"CORS")]),l("li",null,[l("a",{href:"#rate-limiting"},"Rate Limiting")]),l("li",null,[l("a",{href:"#cache"},"Cache")]),l("li",null,[l("a",{href:"#file-storage"},"File Storage")]),l("li",null,[l("a",{href:"#assets"},"Assets")]),l("li",null,[l("a",{href:"#authentication"},"Authentication")]),l("li",null,[l("a",{href:"#extensions"},"Extensions")]),l("li",null,[l("a",{href:"#email"},"Email")]),l("li",null,[l("a",{href:"#admin-account"},"Admin Account")]),l("li",null,[l("a",{href:"#telemetry"},"Telemetry")]),l("li",null,[l("a",{href:"#limits-%26-optimizations"},"Limits & Optimizations")])])])],-1),p=l("h2",{id:"configuration-files"},[e("Configuration Files "),l("a",{class:"header-anchor",href:"#configuration-files"},"#")],-1),f=l("p",null,[e("By default, Directus will read the "),l("code",null,".env"),e(" file located next to your project\u2019s "),l("code",null,"package.json"),e(" (typically in the root folder of your project) for its configuration. You can change this path and filename by setting the "),l("code",null,"CONFIG_PATH"),e(" environment variable before starting Directus. For example:")],-1),m=l("pre",null,[l("code",{class:"language-bash"},[e("CONFIG_PATH="),l("span",{class:"hljs-string"},'"/path/to/config.js"'),e(` npx directus start
|
|
2
|
-
`)])],-1),E=l("p",null,[e("In case you prefer using a configuration file instead of environment variables, you can also use the "),l("code",null,"CONFIG_PATH"),e(" environment variable to instruct Directus to use a local configuration file instead of environment variables. The config file can be one of the following formats:")],-1),g=l("ul",null,[l("li",null,[l("a",{href:"#env"},".env")]),l("li",null,[l("a",{href:"#config-json"},"config.json")]),l("li",null,[l("a",{href:"#config-yaml"},"config.yaml")]),l("li",null,[l("a",{href:"#config-js"},"config.js")])],-1),A=l("h3",{id:".env"},[e(".env "),l("a",{class:"header-anchor",href:"#.env"},"#")],-1),T=l("p",null,"If the config path has no file extension, or a file extension that\u2019s not one of the other supported formats, Directus will try reading the file config path as environment variables. This has the following structure:",-1),R=l("pre",null,[l("code",null,`HOST="0.0.0.0"
|
|
3
|
-
PORT=8055
|
|
4
|
-
|
|
5
|
-
DB_CLIENT="pg"
|
|
6
|
-
DB_HOST="localhost"
|
|
7
|
-
DB_PORT=5432
|
|
8
|
-
|
|
9
|
-
etc
|
|
10
|
-
`)],-1),b=l("h3",{id:"config.json"},[e("config.json "),l("a",{class:"header-anchor",href:"#config.json"},"#")],-1),O=l("p",null,"If you prefer a single JSON file for your configuration, create a JSON file with the environment variables as keys, for example:",-1),S=l("pre",null,[l("code",null,`CONFIG_PATH="/path/to/config.json"
|
|
11
|
-
`)],-1),I=l("pre",null,[l("code",{class:"language-json"},[e(`{
|
|
12
|
-
`),l("span",{class:"hljs-attr"},'"HOST"'),e(": "),l("span",{class:"hljs-string"},'"0.0.0.0"'),e(`,
|
|
13
|
-
`),l("span",{class:"hljs-attr"},'"PORT"'),e(": "),l("span",{class:"hljs-number"},"8055"),e(`,
|
|
14
|
-
|
|
15
|
-
`),l("span",{class:"hljs-attr"},'"DB_CLIENT"'),e(": "),l("span",{class:"hljs-string"},'"pg"'),e(`,
|
|
16
|
-
`),l("span",{class:"hljs-attr"},'"DB_HOST"'),e(": "),l("span",{class:"hljs-string"},'"localhost"'),e(`,
|
|
17
|
-
`),l("span",{class:"hljs-attr"},'"DB_PORT"'),e(": "),l("span",{class:"hljs-number"},"5432"),e(`
|
|
18
|
-
|
|
19
|
-
`),l("span",{class:"hljs-comment"},"// etc"),e(`
|
|
20
|
-
}
|
|
21
|
-
`)])],-1),y=l("h3",{id:"config.yaml"},[e("config.yaml "),l("a",{class:"header-anchor",href:"#config.yaml"},"#")],-1),D=l("p",null,[e("Similar to JSON, you can use a "),l("code",null,".yaml"),e(" (or "),l("code",null,".yml"),e(") file for your config:")],-1),v=l("pre",null,[l("code",null,`CONFIG_PATH="/path/to/config.yaml"
|
|
22
|
-
`)],-1),C=l("pre",null,[l("code",{class:"language-yaml"},[l("span",{class:"hljs-attr"},"HOST:"),e(),l("span",{class:"hljs-number"},"0.0"),l("span",{class:"hljs-number"},".0"),l("span",{class:"hljs-number"},".0"),e(`
|
|
23
|
-
`),l("span",{class:"hljs-attr"},"PORT:"),e(),l("span",{class:"hljs-number"},"8055"),e(`
|
|
24
|
-
|
|
25
|
-
`),l("span",{class:"hljs-attr"},"DB_CLIENT:"),e(),l("span",{class:"hljs-string"},"pg"),e(`
|
|
26
|
-
`),l("span",{class:"hljs-attr"},"DB_HOST:"),e(),l("span",{class:"hljs-string"},"localhost"),e(`
|
|
27
|
-
`),l("span",{class:"hljs-attr"},"DB_PORT:"),e(),l("span",{class:"hljs-number"},"5432"),e(`
|
|
28
|
-
`),l("span",{class:"hljs-comment"},"#"),e(`
|
|
29
|
-
`),l("span",{class:"hljs-comment"},"# etc"),e(`
|
|
30
|
-
`)])],-1),L=l("h3",{id:"config.js"},[e("config.js "),l("a",{class:"header-anchor",href:"#config.js"},"#")],-1),w=l("p",null,[e("Using a JavaScript file for your config allows you to dynamically generate the configuration of the project during startup. The JavaScript configuration supports two different formats, either an "),l("strong",null,"Object Structure"),e(" where the key is the environment variable name:")],-1),P=l("pre",null,[l("code",{class:"language-js"},[l("span",{class:"hljs-comment"},"// Object Sytax"),e(`
|
|
31
|
-
|
|
32
|
-
`),l("span",{class:"hljs-built_in"},"module"),e(`.exports = {
|
|
33
|
-
`),l("span",{class:"hljs-attr"},"HOST"),e(": "),l("span",{class:"hljs-string"},"'0.0.0.0'"),e(`,
|
|
34
|
-
`),l("span",{class:"hljs-attr"},"PORT"),e(": "),l("span",{class:"hljs-number"},"8055"),e(`,
|
|
35
|
-
|
|
36
|
-
`),l("span",{class:"hljs-attr"},"DB_CLIENT"),e(": "),l("span",{class:"hljs-string"},"'pg'"),e(`,
|
|
37
|
-
`),l("span",{class:"hljs-attr"},"DB_HOST"),e(": "),l("span",{class:"hljs-string"},"'localhost'"),e(`,
|
|
38
|
-
`),l("span",{class:"hljs-attr"},"DB_PORT"),e(": "),l("span",{class:"hljs-number"},"5432"),e(`,
|
|
39
|
-
|
|
40
|
-
`),l("span",{class:"hljs-comment"},"// etc"),e(`
|
|
41
|
-
};
|
|
42
|
-
`)])],-1),U=l("p",null,[e("Or a "),l("strong",null,"Function Structure"),e(" that "),l("em",null,"returns"),e(" the same object format as above. The function gets "),l("code",null,"process.env"),e(" as its parameter.")],-1),H=l("pre",null,[l("code",{class:"language-js"},[l("span",{class:"hljs-comment"},"// Function Syntax"),e(`
|
|
43
|
-
|
|
44
|
-
`),l("span",{class:"hljs-built_in"},"module"),e(".exports = "),l("span",{class:"hljs-function"},[l("span",{class:"hljs-keyword"},"function"),e(" ("),l("span",{class:"hljs-params"},"env"),e(") ")]),e(`{
|
|
45
|
-
`),l("span",{class:"hljs-keyword"},"return"),e(` {
|
|
46
|
-
`),l("span",{class:"hljs-attr"},"HOST"),e(": "),l("span",{class:"hljs-string"},"'0.0.0.0'"),e(`,
|
|
47
|
-
`),l("span",{class:"hljs-attr"},"PORT"),e(": "),l("span",{class:"hljs-number"},"8055"),e(`,
|
|
48
|
-
|
|
49
|
-
`),l("span",{class:"hljs-attr"},"DB_CLIENT"),e(": "),l("span",{class:"hljs-string"},"'pg'"),e(`,
|
|
50
|
-
`),l("span",{class:"hljs-attr"},"DB_HOST"),e(": "),l("span",{class:"hljs-string"},"'localhost'"),e(`,
|
|
51
|
-
`),l("span",{class:"hljs-attr"},"DB_PORT"),e(": "),l("span",{class:"hljs-number"},"5432"),e(`,
|
|
52
|
-
|
|
53
|
-
`),l("span",{class:"hljs-comment"},"// etc"),e(`
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
`)])],-1),N=l("h2",{id:"environment-variable-files"},[e("Environment Variable Files "),l("a",{class:"header-anchor",href:"#environment-variable-files"},"#")],-1),V=l("p",null,[e("Any of the environment variable values can be imported from a file, by appending "),l("code",null,"_FILE"),e(" to the environment variable name. This is especially useful when used in conjunction with Docker Secrets, so you can keep sensitive data out of your compose files. For example:")],-1),M=l("pre",null,[l("code",null,`DB_PASSWORD_FILE="/run/secrets/db_password"
|
|
57
|
-
`)],-1),x=l("h2",{id:"type-casting-and-nesting"},[e("Type Casting and Nesting "),l("a",{class:"header-anchor",href:"#type-casting-and-nesting"},"#")],-1),j=l("p",null,"Environment variables are automatically type cast based on the structure of the variable, for example:",-1),k=l("pre",null,[l("code",null,`PUBLIC_URL="https://example.com"
|
|
58
|
-
// "https://example.com"
|
|
59
|
-
|
|
60
|
-
DB_HOST="3306"
|
|
61
|
-
// 3306
|
|
62
|
-
|
|
63
|
-
CORS_ENABLED="false"
|
|
64
|
-
// false
|
|
65
|
-
|
|
66
|
-
STORAGE_LOCATIONS="s3,local,example"
|
|
67
|
-
// ["s3", "local", "example"]
|
|
68
|
-
`)],-1),B=l("p",null,[e("In cases where the environment variables are converted to a configuration object for third party library use, like in "),l("code",null,"DB_*"),e(" or "),l("code",null,"RATE_LIMITER_REDIS_*"),e(", the environment variable will be converted to camelCase. You can use a double underscore ("),l("code",null,"__"),e(") for nested objects:")],-1),G=l("pre",null,[l("code",null,`DB_CLIENT="pg"
|
|
69
|
-
DB_CONNECTION_STRING="postgresql://postgres:example@127.0.0.1"
|
|
70
|
-
DB_SSL__REJECT_UNAUTHORIZED="false"
|
|
71
|
-
|
|
72
|
-
{
|
|
73
|
-
client: "pg",
|
|
74
|
-
connectionString: "postgresql://postgres:example@127.0.0.1",
|
|
75
|
-
ssl: {
|
|
76
|
-
rejectUnauthorized: false
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
`)],-1),W=l("h2",{id:"environment-syntax-prefix"},[e("Environment Syntax Prefix "),l("a",{class:"header-anchor",href:"#environment-syntax-prefix"},"#")],-1),F=l("p",null,[e("Directus will attempt to "),l("a",{href:"#type-casting-and-nesting"},"automatically type cast environment variables"),e(" based on context clues. If you have a specific need for a given type, you can tell Directus what type to use for the given value by prefixing the value with "),l("code",null,"{type}:"),e(". The following types are available:")],-1),q=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Syntax Prefix"),l("th",null,"Example"),l("th",null,"Output")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"string")]),l("td",null,[l("code",null,"string:value")]),l("td",null,[l("code",null,'"value"')])]),l("tr",null,[l("td",null,[l("code",null,"number")]),l("td",null,[l("code",null,"number:3306")]),l("td",null,[l("code",null,"3306")])]),l("tr",null,[l("td",null,[l("code",null,"regex")]),l("td",null,[l("code",null,"regex:\\.example\\.com$")]),l("td",null,[l("code",null,"/\\.example\\.com$/")])]),l("tr",null,[l("td",null,[l("code",null,"array")]),l("td",null,[l("code",null,"array:https://example.com,https://example2.com"),e(),l("br"),e(),l("code",null,"array:string:https://example.com,regex:\\.example3\\.com$")]),l("td",null,[l("code",null,'["https://example.com", "https://example2.com"]'),e(),l("br"),e(),l("code",null,'["https://example.com", "https://example2.com", /\\.example3\\.com$/]')])])])],-1),Y=l("hr",null,null,-1),K=l("h2",{id:"general"},[e("General "),l("a",{class:"header-anchor",href:"#general"},"#")],-1),z=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"CONFIG_PATH")]),l("td",null,[e("Where your config file is located. See "),l("a",{href:"#configuration-files"},"Configuration Files")]),l("td",null,[l("code",null,".env")])]),l("tr",null,[l("td",null,[l("code",null,"HOST")]),l("td",null,"IP or host the API listens on."),l("td",null,[l("code",null,"0.0.0.0")])]),l("tr",null,[l("td",null,[l("code",null,"PORT")]),l("td",null,"What port to run the API under."),l("td",null,[l("code",null,"8055")])]),l("tr",null,[l("td",null,[l("code",null,"PUBLIC_URL"),l("sup",null,"[1]")]),l("td",null,"URL where your API can be reached on the web."),l("td",null,[l("code",null,"/")])]),l("tr",null,[l("td",null,[l("code",null,"LOG_LEVEL")]),l("td",null,[e("What level of detail to log. One of "),l("code",null,"fatal"),e(", "),l("code",null,"error"),e(", "),l("code",null,"warn"),e(", "),l("code",null,"info"),e(", "),l("code",null,"debug"),e(", "),l("code",null,"trace"),e(" or "),l("code",null,"silent"),e(".")]),l("td",null,[l("code",null,"info")])]),l("tr",null,[l("td",null,[l("code",null,"LOG_STYLE")]),l("td",null,[e("Render the logs human readable (pretty) or as JSON. One of "),l("code",null,"pretty"),e(", "),l("code",null,"raw"),e(".")]),l("td",null,[l("code",null,"pretty")])]),l("tr",null,[l("td",null,[l("code",null,"MAX_PAYLOAD_SIZE")]),l("td",null,"Controls the maximum request body size. Accepts number of bytes, or human readable string."),l("td",null,[l("code",null,"100kb")])]),l("tr",null,[l("td",null,[l("code",null,"ROOT_REDIRECT")]),l("td",null,[e("Where to redirect to when navigating to "),l("code",null,"/"),e(". Accepts a relative path, absolute URL, or "),l("code",null,"false"),e(" to disable.")]),l("td",null,[l("code",null,"./admin")])]),l("tr",null,[l("td",null,[l("code",null,"SERVE_APP")]),l("td",null,[e("Whether or not to serve the Admin App under "),l("code",null,"/admin"),e(".")]),l("td",null,[l("code",null,"true")])])])],-1),X=l("p",null,[l("sup",null,"[1]"),e(" The PUBLIC_URL value is used for things like OAuth redirects, forgot-password emails, and logos that needs to be publicly available on the internet.")],-1),J=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Additional Logger Variables"),l("p",null,[e("All "),l("code",null,"LOGGER_*"),e(" environment variables are passed to the "),l("code",null,"options"),e(" configuration of a "),l("a",{href:"https://github.com/pinojs/pino/blob/master/docs/api.md#options",target:"_blank",rel:"noopener noreferrer"},[l("code",null,"Pino"),e(" instance")]),e(". All "),l("code",null,"LOGGER_HTTP*"),e(" environment variables are passed to the "),l("code",null,"options"),e(" configuration of a "),l("a",{href:"https://github.com/pinojs/pino-http#api",target:"_blank",rel:"noopener noreferrer"},[l("code",null,"Pino-http"),e(" instance")]),e(". Based on your project\u2019s needs, you can extend the "),l("code",null,"LOGGER_*"),e(" environment variables with any config you need to pass to the logger instance. If a LOGGER_LEVELS key is added, these values will be passed to the logger formatter, as described "),l("a",{href:"https://github.com/pinojs/pino/blob/master/docs/help.md#mapping-pino-log-levels-to-google-cloud-logging-stackdriver-serverity-levels",target:"_blank",rel:"noopener noreferrer"},"here"),e(" for example. The format for adding LEVELS values is: "),l("code",null,'LOGGER_LEVELS="trace:DEBUG,debug:DEBUG,info:INFO,warn:WARNING,error:ERROR,fatal:CRITICAL"')])],-1),Z=l("h2",{id:"server"},[e("Server "),l("a",{class:"header-anchor",href:"#server"},"#")],-1),Q=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"SERVER_KEEP_ALIVE_TIMEOUT")]),l("td",null,"Timeout in milliseconds for socket to be destroyed"),l("td",null,[l("a",{href:"https://github.com/nodejs/node/blob/master/doc/api/http.md#serverkeepalivetimeout",target:"_blank",rel:"noopener noreferrer"},"server.keepAliveTimeout")])]),l("tr",null,[l("td",null,[l("code",null,"SERVER_HEADERS_TIMEOUT")]),l("td",null,"Timeout in milliseconds to parse HTTP headers"),l("td",null,[l("a",{href:"https://github.com/nodejs/node/blob/master/doc/api/http.md#serverheaderstimeout",target:"_blank",rel:"noopener noreferrer"},"server.headersTimeout")])])])],-1),$=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Additional Server Variables"),l("p",null,[e("All "),l("code",null,"SERVER_*"),e(" environment variables are merged with "),l("code",null,"server"),e(" instance properties created from "),l("a",{href:"https://github.com/nodejs/node/blob/master/doc/api/http.md#class-httpserver",target:"_blank",rel:"noopener noreferrer"},"http.Server"),e(". This allows to configure server behind a proxy, a load balancer, etc. Be careful to not override methods of this instance otherwise you may incur into unexpected behaviors.")])],-1),ll=l("h2",{id:"database"},[e("Database "),l("a",{class:"header-anchor",href:"#database"},"#")],-1),el=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"DB_CLIENT")]),l("td",null,[l("strong",null,"Required"),e(". What database client to use. One of "),l("code",null,"pg"),e(" or "),l("code",null,"postgres"),e(", "),l("code",null,"mysql"),e(", "),l("code",null,"oracledb"),e(", "),l("code",null,"mssql"),e(", "),l("code",null,"sqlite3"),e(", "),l("code",null,"cockroachdb"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_HOST")]),l("td",null,[e("Database host. "),l("strong",null,"Required"),e(" when using "),l("code",null,"pg"),e(", "),l("code",null,"mysql"),e(", "),l("code",null,"oracledb"),e(", or "),l("code",null,"mssql"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_PORT")]),l("td",null,[e("Database port. "),l("strong",null,"Required"),e(" when using "),l("code",null,"pg"),e(", "),l("code",null,"mysql"),e(", "),l("code",null,"oracledb"),e(", or "),l("code",null,"mssql"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_DATABASE")]),l("td",null,[e("Database name. "),l("strong",null,"Required"),e(" when using "),l("code",null,"pg"),e(", "),l("code",null,"mysql"),e(", "),l("code",null,"oracledb"),e(", or "),l("code",null,"mssql"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_USER")]),l("td",null,[e("Database user. "),l("strong",null,"Required"),e(" when using "),l("code",null,"pg"),e(", "),l("code",null,"mysql"),e(", "),l("code",null,"oracledb"),e(", or "),l("code",null,"mssql"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_PASSWORD")]),l("td",null,[e("Database user\u2019s password. "),l("strong",null,"Required"),e(" when using "),l("code",null,"pg"),e(", "),l("code",null,"mysql"),e(", "),l("code",null,"oracledb"),e(", or "),l("code",null,"mssql"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_FILENAME")]),l("td",null,[e("Where to read/write the SQLite database. "),l("strong",null,"Required"),e(" when using "),l("code",null,"sqlite3"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_CONNECTION_STRING")]),l("td",null,[e("When using "),l("code",null,"pg"),e(", you can submit a connection string instead of individual properties. Using this will ignore any of the other connection settings.")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_POOL_*")]),l("td",null,[e("Pooling settings. Passed on to "),l("a",{href:"https://github.com/vincit/tarn.js#usage",target:"_blank",rel:"noopener noreferrer"},[e("the "),l("code",null,"tarn.js")]),e(" library.")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"DB_EXCLUDE_TABLES")]),l("td",null,"CSV of tables you want Directus to ignore completely"),l("td",null,[l("code",null,"spatial_ref_sys,sysdiagrams")])]),l("tr",null,[l("td",null,[l("code",null,"DB_CHARSET")]),l("td",null,"Charset/collation to use in the connection to MySQL/MariaDB"),l("td",null,[l("code",null,"UTF8_GENERAL_CI")])]),l("tr",null,[l("td",null,[l("code",null,"DB_VERSION")]),l("td",null,"Database version, in case you use the PostgreSQL adapter to connect a non-standard database. Not normally required."),l("td",null,"\u2013")])])],-1),nl=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Additional Database Variables"),l("p",null,[e("All "),l("code",null,"DB_*"),e(" environment variables are passed to the "),l("code",null,"connection"),e(" configuration of a "),l("a",{href:"http://knexjs.org",target:"_blank",rel:"noopener noreferrer"},[l("code",null,"Knex"),e(" instance")]),e(". Based on your project\u2019s needs, you can extend the "),l("code",null,"DB_*"),e(" environment variables with any config you need to pass to the database instance.")])],-1),tl=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Pooling"),l("p",null,[e("All the "),l("code",null,"DB_POOL_"),e(" prefixed options are passed to "),l("a",{href:"https://github.com/vincit/tarn.js#usage",target:"_blank",rel:"noopener noreferrer"},[l("code",null,"tarn.js")]),e(" through "),l("a",{href:"http://knexjs.org/#Installation-pooling",target:"_blank",rel:"noopener noreferrer"},"Knex")])],-1),ol=l("h2",{id:"security"},[e("Security "),l("a",{class:"header-anchor",href:"#security"},"#")],-1),ul=l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])],-1),sl=l("tr",null,[l("td",null,[l("code",null,"KEY")]),l("td",null,"Unique identifier for the project."),l("td",null,"\u2013")],-1),al=l("tr",null,[l("td",null,[l("code",null,"SECRET")]),l("td",null,"Secret string for the project."),l("td",null,"\u2013")],-1),rl=l("tr",null,[l("td",null,[l("code",null,"ACCESS_TOKEN_TTL")]),l("td",null,"The duration that the access token is valid."),l("td",null,[l("code",null,"15m")])],-1),dl=l("tr",null,[l("td",null,[l("code",null,"REFRESH_TOKEN_TTL")]),l("td",null,"The duration that the refresh token is valid, and also how long users stay logged-in to the App."),l("td",null,[l("code",null,"7d")])],-1),il=l("tr",null,[l("td",null,[l("code",null,"REFRESH_TOKEN_COOKIE_DOMAIN")]),l("td",null,"Which domain to use for the refresh cookie. Useful for development mode."),l("td",null,"\u2013")],-1),cl=l("tr",null,[l("td",null,[l("code",null,"REFRESH_TOKEN_COOKIE_SECURE")]),l("td",null,"Whether or not to use a secure cookie for the refresh token in cookie mode."),l("td",null,[l("code",null,"false")])],-1),hl=l("tr",null,[l("td",null,[l("code",null,"REFRESH_TOKEN_COOKIE_SAME_SITE")]),l("td",null,[e("Value for "),l("code",null,"sameSite"),e(" in the refresh token cookie when in cookie mode.")]),l("td",null,[l("code",null,"lax")])],-1),_l=l("tr",null,[l("td",null,[l("code",null,"REFRESH_TOKEN_COOKIE_NAME")]),l("td",null,"Name of refresh token cookie ."),l("td",null,[l("code",null,"directus_refresh_token")])],-1),pl=l("td",null,[l("code",null,"PASSWORD_RESET_URL_ALLOW_LIST")],-1),fl=e("List of URLs that can be used "),ml=e("as "),El=l("code",null,"reset_url",-1),gl=e(" in /password/request"),Al=l("td",null,"\u2013",-1),Tl=l("td",null,[l("code",null,"USER_INVITE_URL_ALLOW_LIST")],-1),Rl=e("List of URLs that can be used "),bl=e("as "),Ol=l("code",null,"invite_url",-1),Sl=e(" in /users/invite"),Il=l("td",null,"\u2013",-1),yl=l("tr",null,[l("td",null,[l("code",null,"IP_TRUST_PROXY")]),l("td",null,[e("Settings for "),l("a",{href:"https://expressjs.com/en/guide/behind-proxies.html",target:"_blank",rel:"noopener noreferrer"},"express\u2019 trust proxy setting")]),l("td",null,"true")],-1),Dl=l("tr",null,[l("td",null,[l("code",null,"IP_CUSTOM_HEADER")]),l("td",null,"What custom request header to use for the IP address"),l("td",null,"false")],-1),vl=l("tr",null,[l("td",null,[l("code",null,"CONTENT_SECURITY_POLICY")]),l("td",null,[e("Custom overrides for the Content-Security-Policy header. See "),l("a",{href:"https://helmetjs.github.io",target:"_blank",rel:"noopener noreferrer"},"helmet\u2019s documentation"),e(" for more information.")]),l("td",null,"\u2013")],-1),Cl=l("tr",null,[l("td",null,[l("code",null,"ASSETS_CONTENT_SECURITY_POLICY")]),l("td",null,[e("Custom overrides for the Content-Security-Policy header for the /assets endpoint. See "),l("a",{href:"https://helmetjs.github.io",target:"_blank",rel:"noopener noreferrer"},"helmet\u2019s documentation"),e(" for more information.")]),l("td",null,"\u2013")],-1),Ll=l("tr",null,[l("td",null,[l("code",null,"IMPORT_IP_DENY_LIST")]),l("td",null,[e("Deny importing files from these IP addresses. Use "),l("code",null,"0.0.0.0"),e(" for any local IP address")]),l("td",null,[l("code",null,"0.0.0.0")])],-1),wl=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Cookie Strictness"),l("p",null,[e("Browser are pretty strict when it comes to third-party cookies. If you\u2019re running into unexpected problems when running your project and API on different domains, make sure to verify your configuration for "),l("code",null,"REFRESH_TOKEN_COOKIE_NAME"),e(", "),l("code",null,"REFRESH_TOKEN_COOKIE_SECURE"),e(" and "),l("code",null,"REFRESH_TOKEN_COOKIE_SAME_SITE"),e(".")])],-1),Pl=l("h3",{id:"hashing"},[e("Hashing "),l("a",{class:"header-anchor",href:"#hashing"},"#")],-1),Ul=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"HASH_MEMORY_COST")]),l("td",null,"How much memory to use when generating hashes, in KiB."),l("td",null,[l("code",null,"4096"),e(" (4 MiB)")])]),l("tr",null,[l("td",null,[l("code",null,"HASH_LENGTH")]),l("td",null,"The length of the hash function output in bytes."),l("td",null,[l("code",null,"32")])]),l("tr",null,[l("td",null,[l("code",null,"HASH_TIME_COST")]),l("td",null,"The amount of passes (iterations) used by the hash function. It increases hash strength at the cost of time required to compute."),l("td",null,[l("code",null,"3")])]),l("tr",null,[l("td",null,[l("code",null,"HASH_PARALLELISM")]),l("td",null,[e("The amount of threads to compute the hash on. Each thread has a memory pool with "),l("code",null,"HASH_MEMORY_COST"),e(" size.")]),l("td",null,[l("code",null,"1"),e(" (single thread)")])]),l("tr",null,[l("td",null,[l("code",null,"HASH_TYPE")]),l("td",null,[e("The variant of the hash function ("),l("code",null,"0"),e(": argon2d, "),l("code",null,"1"),e(": argon2i, or "),l("code",null,"2"),e(": argon2id).")]),l("td",null,[l("code",null,"1"),e(" (argon2i)")])]),l("tr",null,[l("td",null,[l("code",null,"HASH_ASSOCIATED_DATA")]),l("td",null,"An extra and optional non-secret value. The value will be included B64 encoded in the parameters portion of the digest."),l("td",null,"\u2013")])])],-1),Hl=e("Argon2\u2019s hashing function is used by Directus for three purposes: 1) hashing user passwords, 2) generating hashes for the "),Nl=l("code",null,"Hash",-1),Vl=e(" field type in collections, and 3) the "),Ml=e("generate a hash API endpoint"),xl=e("."),jl=l("p",null,[e("All "),l("code",null,"HASH_*"),e(" environment variable parameters are passed to the "),l("code",null,"argon2.hash"),e(" function. See the "),l("a",{href:"https://github.com/ranisalt/node-argon2/wiki/Options",target:"_blank",rel:"noopener noreferrer"},"node-argon2 library options page"),e(" for reference.")],-1),kl=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Memory Usage"),l("p",null,[e("Modifying "),l("code",null,"HASH_MEMORY_COST"),e(" and/or "),l("code",null,"HASH_PARALLELISM"),e(" will affect the amount of memory directus uses when computing hashes; each thread gets "),l("code",null,"HASH_MEMORY_COST"),e(" amount of memory, so the total additional memory will be these two values multiplied. This may cause out of memory errors, especially when running in containerized environments.")])],-1),Bl=l("h2",{id:"cors"},[e("CORS "),l("a",{class:"header-anchor",href:"#cors"},"#")],-1),Gl=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"CORS_ENABLED")]),l("td",null,"Whether or not to enable the CORS headers."),l("td",null,[l("code",null,"false")])]),l("tr",null,[l("td",null,[l("code",null,"CORS_ORIGIN")]),l("td",null,[e("Value for the "),l("code",null,"Access-Control-Allow-Origin"),e(" header. Use "),l("code",null,"true"),e(" to match the Origin header, or provide a domain or a CSV of domains for specific access")]),l("td",null,[l("code",null,"false")])]),l("tr",null,[l("td",null,[l("code",null,"CORS_METHODS")]),l("td",null,[e("Value for the "),l("code",null,"Access-Control-Allow-Methods"),e(" header.")]),l("td",null,[l("code",null,"GET,POST,PATCH,DELETE")])]),l("tr",null,[l("td",null,[l("code",null,"CORS_ALLOWED_HEADERS")]),l("td",null,[e("Value for the "),l("code",null,"Access-Control-Allow-Headers"),e(" header.")]),l("td",null,[l("code",null,"Content-Type,Authorization")])]),l("tr",null,[l("td",null,[l("code",null,"CORS_EXPOSED_HEADERS")]),l("td",null,[e("Value for the "),l("code",null,"Access-Control-Expose-Headers"),e(" header.")]),l("td",null,[l("code",null,"Content-Range")])]),l("tr",null,[l("td",null,[l("code",null,"CORS_CREDENTIALS")]),l("td",null,[e("Whether or not to send the "),l("code",null,"Access-Control-Allow-Credentials"),e(" header.")]),l("td",null,[l("code",null,"true")])]),l("tr",null,[l("td",null,[l("code",null,"CORS_MAX_AGE")]),l("td",null,[e("Value for the "),l("code",null,"Access-Control-Max-Age"),e(" header.")]),l("td",null,[l("code",null,"18000")])])])],-1),Wl=l("h2",{id:"rate-limiting"},[e("Rate Limiting "),l("a",{class:"header-anchor",href:"#rate-limiting"},"#")],-1),Fl=l("p",null,[e("You can use the built-in rate-limiter to prevent users from hitting the API too much. Simply enabling the rate-limiter will set a default maximum of 50 requests per second, tracked in memory. Once you have multiple copies of Directus running under a load-balancer, or your user base grows so much that memory is no longer a viable place to store the rate limiter information, you can use an external "),l("code",null,"memcache"),e(" or "),l("code",null,"redis"),e(" instance to store the rate limiter data.")],-1),ql=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_ENABLED")]),l("td",null,"Whether or not to enable rate limiting on the API."),l("td",null,[l("code",null,"false")])]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_POINTS")]),l("td",null,"The amount of allowed hits per duration."),l("td",null,[l("code",null,"50")])]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_DURATION")]),l("td",null,"The time window in seconds in which the points are counted."),l("td",null,[l("code",null,"1")])]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_STORE")]),l("td",null,[e("Where to store the rate limiter counts. One of "),l("code",null,"memory"),e(", "),l("code",null,"redis"),e(", or "),l("code",null,"memcache"),e(".")]),l("td",null,[l("code",null,"memory")])])])],-1),Yl=l("p",null,[e("Based on the "),l("code",null,"RATE_LIMITER_STORE"),e(" used, you must also provide the following configurations:")],-1),Kl=l("h3",{id:"memory"},[e("Memory "),l("a",{class:"header-anchor",href:"#memory"},"#")],-1),zl=l("p",null,"No additional configuration required.",-1),Xl=l("h3",{id:"redis"},[e("Redis "),l("a",{class:"header-anchor",href:"#redis"},"#")],-1),Jl=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_REDIS")]),l("td",null,[e("Redis connection string, eg: "),l("code",null,"redis://:authpassword@127.0.0.1:6380/4")]),l("td",null,"\u2014")])])],-1),Zl=l("p",null,"Alternatively, you can provide the individual connection parameters:",-1),Ql=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_REDIS_HOST")]),l("td",null,"Hostname of the Redis instance"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_REDIS_PORT")]),l("td",null,"Port of the Redis instance"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_REDIS_PASSWORD")]),l("td",null,"Password for your Redis instance"),l("td",null,"\u2013")])])],-1),$l=l("h3",{id:"memcache"},[e("Memcache "),l("a",{class:"header-anchor",href:"#memcache"},"#")],-1),le=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"RATE_LIMITER_MEMCACHE")]),l("td",null,[e("Location of your memcache instance. You can use "),l("a",{href:"#environment-syntax-prefix"},[l("code",null,"array:"),e(" syntax")]),e(", eg: "),l("code",null,"array:<instance-1>,<instance-2>"),e(" for multiple memcache instances.")]),l("td",null,"\u2014")])])],-1),ee=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Additional Rate Limiter Variables"),l("p",null,[e("All "),l("code",null,"RATE_LIMITER_*"),e(" variables are passed directly to a "),l("code",null,"rate-limiter-flexible"),e(" instance. Depending on your project\u2019s needs, you can extend the above environment variables to configure any of "),l("a",{href:"https://github.com/animir/node-rate-limiter-flexible/wiki/Options",target:"_blank",rel:"noopener noreferrer"},[e("the "),l("code",null,"rate-limiter-flexible"),e(" options")]),e(".")])],-1),ne=l("h3",{id:"example%3A-basic"},[e("Example: Basic "),l("a",{class:"header-anchor",href:"#example%3A-basic"},"#")],-1),te=l("pre",null,[l("code",null,`// 10 requests per 5 seconds
|
|
80
|
-
|
|
81
|
-
RATE_LIMITER_POINTS="10"
|
|
82
|
-
RATE_LIMITER_DURATION="5"
|
|
83
|
-
`)],-1),oe=l("h3",{id:"example%3A-redis"},[e("Example: Redis "),l("a",{class:"header-anchor",href:"#example%3A-redis"},"#")],-1),ue=l("pre",null,[l("code",null,`RATE_LIMITER_ENABLED="true"
|
|
84
|
-
|
|
85
|
-
RATE_LIMITER_POINTS="10"
|
|
86
|
-
RATE_LIMITER_DURATION="5"
|
|
87
|
-
|
|
88
|
-
RATE_LIMITER_STORE="redis"
|
|
89
|
-
|
|
90
|
-
RATE_LIMITER_REDIS="redis://@127.0.0.1"
|
|
91
|
-
`)],-1),se=l("h2",{id:"cache"},[e("Cache "),l("a",{class:"header-anchor",href:"#cache"},"#")],-1),ae=l("p",null,"Directus has a built-in data-caching option. Enabling this will cache the output of requests (based on the current user and exact query parameters used) into configured cache storage location. This drastically improves API performance, as subsequent requests are served straight from this cache. Enabling cache will also make Directus return accurate cache-control headers. Depending on your setup, this will further improve performance by caching the request in middleman servers (like CDNs) and even the browser.",-1),re=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"Assets Cache"),l("p",null,[l("code",null,"Cache-Control"),e(" and "),l("code",null,"Last-Modified"),e(" headers for the "),l("code",null,"/assets"),e(" endpoint are separate from the regular data-cache. "),l("code",null,"Last-Modified"),e(" comes from "),l("code",null,"modified_on"),e(" DB field. This is useful as it\u2019s often possible to cache assets for far longer than you would cache database content. "),l("a",{href:"#assets"},"Learn More")])],-1),de=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"CACHE_ENABLED")]),l("td",null,"Whether or not caching is enabled."),l("td",null,[l("code",null,"false")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_TTL"),l("sup",null,"[1]")]),l("td",null,"How long the cache is persisted."),l("td",null,[l("code",null,"5m")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_CONTROL_S_MAXAGE")]),l("td",null,[e("Whether to not to add the "),l("code",null,"s-maxage"),e(" expiration flag. Set to a number for a custom value")]),l("td",null,[l("code",null,"0")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_AUTO_PURGE"),l("sup",null,"[2]")]),l("td",null,[e("Automatically purge the cache on "),l("code",null,"create"),e(", "),l("code",null,"update"),e(", and "),l("code",null,"delete"),e(" actions.")]),l("td",null,[l("code",null,"false")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_SYSTEM_TTL"),l("sup",null,"[3]")]),l("td",null,"How long the schema caches (schema/permissions) are persisted."),l("td",null,[l("code",null,"10m")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_SCHEMA"),l("sup",null,"[3]")]),l("td",null,[e("Whether or not the database schema is cached. One of "),l("code",null,"false"),e(", "),l("code",null,"true")]),l("td",null,[l("code",null,"true")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_PERMISSIONS"),l("sup",null,"[3]")]),l("td",null,[e("Whether or not the user permissions are cached. One of "),l("code",null,"false"),e(", "),l("code",null,"true")]),l("td",null,[l("code",null,"true")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_NAMESPACE")]),l("td",null,"How to scope the cache data."),l("td",null,[l("code",null,"directus-cache")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_STORE"),l("sup",null,"[4]")]),l("td",null,[e("Where to store the cache data. Either "),l("code",null,"memory"),e(", "),l("code",null,"redis"),e(", or "),l("code",null,"memcache"),e(".")]),l("td",null,[l("code",null,"memory")])]),l("tr",null,[l("td",null,[l("code",null,"CACHE_STATUS_HEADER")]),l("td",null,[e("If set, returns the cache status in the configured header. One of "),l("code",null,"HIT"),e(", "),l("code",null,"MISS"),e(".")]),l("td",null,"\u2013")])])],-1),ie=l("p",null,[l("sup",null,"[1]"),e(),l("code",null,"CACHE_TTL"),e(" Based on your project\u2019s needs, you might be able to aggressively cache your data, only requiring new data to be fetched every hour or so. This allows you to squeeze the most performance out of your Directus instance. This can be incredibly useful for applications where you have a lot of (public) read-access and where updates aren\u2019t real-time (for example a website). "),l("code",null,"CACHE_TTL"),e(" uses "),l("a",{href:"https://www.npmjs.com/package/ms",target:"_blank",rel:"noopener noreferrer"},[l("code",null,"ms")]),e(" to parse the value, so you configure it using human readable values (like "),l("code",null,"2 days"),e(", "),l("code",null,"7 hrs"),e(", "),l("code",null,"5m"),e(").")],-1),ce=l("p",null,[l("sup",null,"[2]"),e(),l("code",null,"CACHE_AUTO_PURGE"),e(" allows you to keep the Directus API real-time, while still getting the performance benefits on quick subsequent reads.")],-1),he=l("p",null,[l("sup",null,"[3]"),e(" Not affected by the "),l("code",null,"CACHE_ENABLED"),e(" value.")],-1),_e=l("p",null,[l("sup",null,"[4]"),e(),l("code",null,"CACHE_STORE"),e(" For larger projects, you most likely don\u2019t want to rely on local memory for caching. Instead, you can use the above "),l("code",null,"CACHE_STORE"),e(" environment variable to use either "),l("code",null,"memcache"),e(" or "),l("code",null,"redis"),e(" as the cache store. Based on the chosen "),l("code",null,"CACHE_STORE"),e(", you must also provide the following configurations:")],-1),pe=l("h3",{id:"memory-2"},[e("Memory "),l("a",{class:"header-anchor",href:"#memory-2"},"#")],-1),fe=l("p",null,"No additional configuration required.",-1),me=l("h3",{id:"redis-2"},[e("Redis "),l("a",{class:"header-anchor",href:"#redis-2"},"#")],-1),Ee=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"CACHE_REDIS")]),l("td",null,[e("Redis connection string, eg: "),l("code",null,"redis://:authpassword@127.0.0.1:6380/4")]),l("td",null,"\u2014")])])],-1),ge=l("p",null,"Alternatively, you can provide the individual connection parameters:",-1),Ae=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"CACHE_REDIS_HOST")]),l("td",null,"Hostname of the Redis instance"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"CACHE_REDIS_PORT")]),l("td",null,"Port of the Redis instance"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"CACHE_REDIS_PASSWORD")]),l("td",null,"Password for your Redis instance"),l("td",null,"\u2013")])])],-1),Te=l("h3",{id:"memcache-2"},[e("Memcache "),l("a",{class:"header-anchor",href:"#memcache-2"},"#")],-1),Re=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"CACHE_MEMCACHE")]),l("td",null,[e("Location of your memcache instance. You can use "),l("a",{href:"#environment-syntax-prefix"},[l("code",null,"array:"),e(" syntax")]),e(", eg: "),l("code",null,"array:<instance-1>,<instance-2>"),e(" for multiple memcache instances.")]),l("td",null,"\u2014")])])],-1),be=l("h2",{id:"file-storage"},[e("File Storage "),l("a",{class:"header-anchor",href:"#file-storage"},"#")],-1),Oe=l("p",null,[e("By default, Directus stores all uploaded files locally on disk. However, you can also configure Directus to use S3, Google Cloud Storage, or Azure. You can also configure "),l("em",null,"multiple"),e(" storage adapters at the same time. This allows you to choose where files are being uploaded on a file-by-file basis. In the Admin App, files will automatically be uploaded to the first configured storage location (in this case "),l("code",null,"local"),e("). The used storage location is saved under "),l("code",null,"storage"),e(" in "),l("code",null,"directus_files"),e(".")],-1),Se=l("div",{class:"tip hint"},[l("div",{class:"hint-title"},"File Storage Default"),l("p",null,"If you don\u2019t provide any configuration for storage adapters, this default will be used:"),l("pre",null,[l("code",null,`STORAGE_LOCATIONS="local"
|
|
92
|
-
STORAGE_LOCAL_ROOT="./uploads"
|
|
93
|
-
`)])],-1),Ie=l("div",{class:"warning hint"},[l("div",{class:"hint-title"},"Case sensitivity"),l("p",null,"The location value(s) you specify should be capitalized when specifying the additional configuration values. For example, this will not work:"),l("pre",null,[l("code",null,`STORAGE_LOCATIONS="s3"
|
|
94
|
-
STORAGE_s3_DRIVER="s3" # Will not work, lowercase "s3" \u274C
|
|
95
|
-
`)]),l("p",null,"but this will work:"),l("pre",null,[l("code",null,`STORAGE_LOCATIONS="s3"
|
|
96
|
-
STORAGE_S3_DRIVER="s3" # Will work, "s3" is uppercased \u2705
|
|
97
|
-
`)])],-1),ye=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_LOCATIONS")]),l("td",null,[e("A CSV of storage locations (eg: "),l("code",null,"local,digitalocean,amazon"),e(") to use. You can use any names you\u2019d like for these keys.")]),l("td",null,[l("code",null,"local")])])])],-1),De=l("p",null,"For each of the storage locations listed, you must provide the following configuration:",-1),ve=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_DRIVER")]),l("td",null,[e("Which driver to use, either "),l("code",null,"local"),e(", "),l("code",null,"s3"),e(", "),l("code",null,"gcs"),e(", "),l("code",null,"azure")]),l("td")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ROOT")]),l("td",null,"Where to store the files on disk"),l("td",null,[l("code",null,"''")])])])],-1),Ce=l("p",null,"Based on your configured driver, you must also provide the following configurations:",-1),Le=l("h3",{id:"local-(local)"},[e("Local ("),l("code",null,"local"),e(") "),l("a",{class:"header-anchor",href:"#local-(local)"},"#")],-1),we=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ROOT")]),l("td",null,"Where to store the files on disk"),l("td",null,"\u2013")])])],-1),Pe=l("h3",{id:"s3-(s3)"},[e("S3 ("),l("code",null,"s3"),e(") "),l("a",{class:"header-anchor",href:"#s3-(s3)"},"#")],-1),Ue=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_KEY")]),l("td",null,"User key"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_SECRET")]),l("td",null,"User secret"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_BUCKET")]),l("td",null,"S3 Bucket"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_REGION")]),l("td",null,"S3 Region"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ENDPOINT")]),l("td",null,"S3 Endpoint"),l("td",null,[l("code",null,"s3.amazonaws.com")])]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ACL")]),l("td",null,"S3 ACL"),l("td",null,"\u2013")])])],-1),He=l("h3",{id:"azure-(azure)"},[e("Azure ("),l("code",null,"azure"),e(") "),l("a",{class:"header-anchor",href:"#azure-(azure)"},"#")],-1),Ne=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_CONTAINER_NAME")]),l("td",null,"Azure Storage container"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ACCOUNT_NAME")]),l("td",null,"Azure Storage account name"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ACCOUNT_KEY")]),l("td",null,"Azure Storage key"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_ENDPOINT")]),l("td",null,"Azure URL"),l("td",null,[l("code",null,"https://{ACCOUNT_KEY}.blob.core.windows.net")])])])],-1),Ve=l("h3",{id:"google-cloud-storage-(gcs)"},[e("Google Cloud Storage ("),l("code",null,"gcs"),e(") "),l("a",{class:"header-anchor",href:"#google-cloud-storage-(gcs)"},"#")],-1),Me=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_KEY_FILENAME")]),l("td",null,"Path to key file on disk"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"STORAGE_<LOCATION>_BUCKET")]),l("td",null,"Google Cloud Storage bucket"),l("td",null,"\u2013")])])],-1),xe=l("h3",{id:"example%3A-multiple-storage-adapters"},[e("Example: Multiple Storage Adapters "),l("a",{class:"header-anchor",href:"#example%3A-multiple-storage-adapters"},"#")],-1),je=l("p",null,"Below showcases a CSV of storage location names, with a config block for each:",-1),ke=l("pre",null,[l("code",null,`STORAGE_LOCATIONS="local,aws"
|
|
98
|
-
|
|
99
|
-
STORAGE_LOCAL_DRIVER="local"
|
|
100
|
-
STORAGE_LOCAL_ROOT="local"
|
|
101
|
-
|
|
102
|
-
STORAGE_AWS_KEY="tp15c...510vk"
|
|
103
|
-
STORAGE_AWS_SECRET="yk29b...b932n"
|
|
104
|
-
STORAGE_AWS_REGION="us-east-2"
|
|
105
|
-
STORAGE_AWS_BUCKET="my-files"
|
|
106
|
-
`)],-1),Be=l("h3",{id:"metadata"},[e("Metadata "),l("a",{class:"header-anchor",href:"#metadata"},"#")],-1),Ge=l("p",null,[e("When uploading an image, Directus persists the "),l("em",null,"description, title, and tags"),e(" from available EXIF metadata. For security purposes, collection of additional metadata must be configured:")],-1),We=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"FILE_METADATA_ALLOW_LIST")]),l("td",null,[e("A comma-separated list of metadata keys to collect during file upload. Use "),l("code",null,"*"),e(" for all"),l("sup",null,"[1]"),e(".")]),l("td",null,"ifd0.Make,ifd0.Model,exif.FNumber,exif.ExposureTime,exif.FocalLength,exif.ISO")])])],-1),Fe=l("p",null,[l("sup",null,"[1]"),e(": Extracting all metadata might cause memory issues when the file has an unusually large set of metadata")],-1),qe=l("h2",{id:"assets"},[e("Assets "),l("a",{class:"header-anchor",href:"#assets"},"#")],-1),Ye=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"ASSETS_CACHE_TTL")]),l("td",null,[e("How long assets will be cached for in the browser. Sets the "),l("code",null,"max-age"),e(" value of the "),l("code",null,"Cache-Control"),e(" header.")]),l("td",null,[l("code",null,"30m")])]),l("tr",null,[l("td",null,[l("code",null,"ASSETS_TRANSFORM_MAX_CONCURRENT")]),l("td",null,"How many file transformations can be done simultaneously"),l("td",null,[l("code",null,"4")])]),l("tr",null,[l("td",null,[l("code",null,"ASSETS_TRANSFORM_IMAGE_MAX_DIMENSION")]),l("td",null,"The max pixel dimensions size (width/height) that is allowed to be transformed"),l("td",null,[l("code",null,"6000")])]),l("tr",null,[l("td",null,[l("code",null,"ASSETS_TRANSFORM_MAX_OPERATIONS")]),l("td",null,"The max number of transform operations that is allowed to be processed (excludes saved presets)"),l("td",null,[l("code",null,"5")])]),l("tr",null,[l("td",null,[l("code",null,"ASSETS_CONTENT_SECURITY_POLICY")]),l("td",null,[e("Custom overrides for the Content-Security-Policy header. See "),l("a",{href:"https://helmetjs.github.io",target:"_blank",rel:"noopener noreferrer"},"helmet\u2019s documentation"),e(" for more information.")]),l("td",null,"\u2013")])])],-1),Ke=l("p",null,"Image transformations can be fairly heavy on memory usage. If you\u2019re using a system with 1GB or less available memory, we recommend lowering the allowed concurrent transformations to prevent you from overflowing your server.",-1),ze=l("h2",{id:"authentication"},[e("Authentication "),l("a",{class:"header-anchor",href:"#authentication"},"#")],-1),Xe=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"AUTH_PROVIDERS")]),l("td",null,"CSV of auth providers you want to use."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_DISABLE_DEFAULT")]),l("td",null,"Disable the default auth provider"),l("td",null,[l("code",null,"false")])])])],-1),Je=l("p",null,"For each of the auth providers you list, you must provide the following configuration:",-1),Ze=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_DRIVER")]),l("td",null,[e("Which driver to use, either "),l("code",null,"local"),e(", "),l("code",null,"oauth2"),e(", "),l("code",null,"openid"),e(", "),l("code",null,"ldap")]),l("td",null,"\u2013")])])],-1),Qe=l("p",null,"You must also provide a number of extra variables. These differ per auth driver service. The following is a list of common required configuration options:",-1),$e=l("h3",{id:"local-(local)-2"},[e("Local ("),l("code",null,"local"),e(") "),l("a",{class:"header-anchor",href:"#local-(local)-2"},"#")],-1),ln=l("p",null,"No additional configuration required.",-1),en=l("h3",{id:"sso-(oauth2-and-openid)"},[e("SSO ("),l("code",null,"oauth2"),e(" and "),l("code",null,"openid"),e(") "),l("a",{class:"header-anchor",href:"#sso-(oauth2-and-openid)"},"#")],-1),nn=l("p",null,"Directus\u2019 SSO integrations provide powerful alternative ways to authenticate into your project. Directus will ask you to login on the external service, and return authenticated with a Directus account linked to that service.",-1),tn=l("p",null,[e("For example, you can login to Directus using a github account by creating an "),l("a",{href:"https://github.com/settings/developers",target:"_blank",rel:"noopener noreferrer"},"OAuth 2.0 app in GitHub"),e(" and adding the following configuration to Directus:")],-1),on=l("pre",null,[l("code",null,`AUTH_PROVIDERS="github"
|
|
107
|
-
|
|
108
|
-
AUTH_GITHUB_DRIVER="oauth2"
|
|
109
|
-
AUTH_GITHUB_CLIENT_ID="99d3...c3c4"
|
|
110
|
-
AUTH_GITHUB_CLIENT_SECRET="34ae...f963"
|
|
111
|
-
AUTH_GITHUB_AUTHORIZE_URL="https://github.com/login/oauth/authorize"
|
|
112
|
-
AUTH_GITHUB_ACCESS_URL="https://github.com/login/oauth/access_token"
|
|
113
|
-
AUTH_GITHUB_PROFILE_URL="https://api.github.com/user"
|
|
114
|
-
`)],-1),un=l("div",{class:"warning hint"},[l("div",{class:"hint-title"},"PUBLIC_URL"),l("p",null,[e("These flows rely on the "),l("code",null,"PUBLIC_URL"),e(" variable for redirecting. Make sure that variable is configured correctly.")])],-1),sn=l("h4",{id:"oauth-2.0"},[e("OAuth 2.0 "),l("a",{class:"header-anchor",href:"#oauth-2.0"},"#")],-1),an=l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])],-1),rn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_CLIENT_ID")]),l("td",null,"OAuth identifier for the external service."),l("td",null,"\u2013")],-1),dn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_CLIENT_SECRET")]),l("td",null,"OAuth secret for the external service."),l("td",null,"\u2013")],-1),cn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_SCOPE")]),l("td",null,"A white-space separated list of privileges Directus will request."),l("td",null,[l("code",null,"email")])],-1),hn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_AUTHORIZE_URL")]),l("td",null,"The authorize page URL of the external service."),l("td",null,"\u2013")],-1),_n=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_ACCESS_URL")]),l("td",null,"The token access URL of the external service."),l("td",null,"\u2013")],-1),pn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_PROFILE_URL")]),l("td",null,"The user profile information URL of the external service."),l("td",null,"\u2013")],-1),fn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_EMAIL_KEY")]),l("td",null,"OAuth profile email key used to find the email address."),l("td",null,[l("code",null,"email")])],-1),mn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_IDENTIFIER_KEY")]),l("td",null,[e("OAuth profile identifier key used to verify the user. Will default to "),l("code",null,"EMAIL_KEY"),e(".")]),l("td",null,"\u2013")],-1),En=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_ALLOW_PUBLIC_REGISTRATION")]),l("td",null,"Automatically create accounts for authenticating users."),l("td",null,[l("code",null,"false")])],-1),gn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_DEFAULT_ROLE_ID")]),l("td",null,"The Directus role ID assigned to created users."),l("td",null,"\u2013")],-1),An=l("td",null,[l("code",null,"AUTH_<PROVIDER>_ICON")],-1),Tn=e("SVG icon to display with the login link. You can choose from "),Rn=e("Social icon or Material icon set"),bn=e("."),On=l("td",null,[l("code",null,"account_circle")],-1),Sn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_PARAMS")]),l("td",null,"Custom parameters to send to the auth provider"),l("td",null,"\u2013")],-1),In=l("h4",{id:"openid"},[e("OpenID "),l("a",{class:"header-anchor",href:"#openid"},"#")],-1),yn=l("p",null,"OpenID is an authentication protocol built on OAuth 2.0, and should be preferred over standard OAuth 2.0 where possible. OpenID offers better user verification and consistent profile information, allowing for more complete user registrations.",-1),Dn=l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])],-1),vn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_CLIENT_ID")]),l("td",null,"OpenID identifier for the external service."),l("td",null,"\u2013")],-1),Cn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_CLIENT_SECRET")]),l("td",null,"OpenID secret for the external service."),l("td",null,"\u2013")],-1),Ln=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_SCOPE")]),l("td",null,"A white-space separated list of privileges Directus will request."),l("td",null,[l("code",null,"openid profile email")])],-1),wn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_ISSUER_URL")]),l("td",null,[e("The OpenID "),l("code",null,".well-known"),e(" Discovery Document URL.")]),l("td",null,"\u2013")],-1),Pn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_IDENTIFIER_KEY")]),l("td",null,"OpenID profile identifier key used to verify the user."),l("td",null,[l("code",null,"sub")])],-1),Un=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_ALLOW_PUBLIC_REGISTRATION")]),l("td",null,"Automatically create accounts for authenticating users."),l("td",null,[l("code",null,"false")])],-1),Hn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_REQUIRE_VERIFIED_EMAIL")]),l("td",null,"Require users to have a verified email address."),l("td",null,[l("code",null,"false")])],-1),Nn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_DEFAULT_ROLE_ID")]),l("td",null,"The Directus role ID assigned to created users."),l("td",null,"\u2013")],-1),Vn=l("td",null,[l("code",null,"AUTH_<PROVIDER>_ICON")],-1),Mn=e("SVG icon to display with the login link. You can choose from "),xn=e("Social icon or Material icon set"),jn=e("."),kn=l("td",null,[l("code",null,"account_circle")],-1),Bn=l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_PARAMS")]),l("td",null,"Custom parameters to send to the auth provider"),l("td",null,"\u2013")],-1),Gn=l("h3",{id:"ldap-(ldap)"},[e("LDAP ("),l("code",null,"ldap"),e(") "),l("a",{class:"header-anchor",href:"#ldap-(ldap)"},"#")],-1),Wn=l("p",null,"LDAP allows Active Directory users to authenticate and use Directus without having to be manually configured. User information and roles will be assigned from Active Directory.",-1),Fn=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_CLIENT_URL")]),l("td",null,"LDAP connection URL."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_BIND_DN")]),l("td",null,[e("Bind user "),l("sup",null,"[1]"),e(" distinguished name.")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_BIND_PASSWORD")]),l("td",null,"Bind user password."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_USER_DN")]),l("td",null,"Directory path containing users."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_USER_ATTRIBUTE")]),l("td",null,"Attribute to identify users by."),l("td",null,[l("code",null,"cn")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_USER_SCOPE")]),l("td",null,[e("Scope of the user search, either "),l("code",null,"base"),e(", "),l("code",null,"one"),e(", "),l("code",null,"sub"),e(),l("sup",null,"[2]"),e(".")]),l("td",null,[l("code",null,"one")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_GROUP_DN"),l("sup",null,"[3]")]),l("td",null,"Directory path containing groups."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_GROUP_ATTRIBUTE")]),l("td",null,"Attribute to identify user as a member of a group."),l("td",null,[l("code",null,"member")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_GROUP_SCOPE")]),l("td",null,[e("Scope of the group search, either "),l("code",null,"base"),e(", "),l("code",null,"one"),e(", "),l("code",null,"sub"),e(),l("sup",null,"[2]"),e(".")]),l("td",null,[l("code",null,"one")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_MAIL_ATTRIBUTE")]),l("td",null,"Attribute containing the email of the user."),l("td",null,[l("code",null,"mail")])]),l("tr",null,[l("td",null,[l("code",null,"AUTH_<PROVIDER>_DEFAULT_ROLE_ID"),l("sup",null,"[3]")]),l("td",null,"Role to use on user sign-up. Only used when GROUP_DN isn\u2019t configured."),l("td",null,"\u2013")])])],-1),qn=l("p",null,[l("sup",null,"[1]"),e(" The bind user must have permission to query users and groups to perform authentication. To bind anonymously use "),l("code",null,'AUTH_LDAP_BIND_DN=""'),e(" and "),l("code",null,'AUTH_LDAP_BIND_PASSWORD=""')],-1),Yn=l("p",null,[l("sup",null,"[2]"),e(" The scope defines the following behaviors:")],-1),Kn=l("ul",null,[l("li",null,[l("code",null,"base"),e(": Limits the scope to a single object defined by the associated DN.")]),l("li",null,[l("code",null,"one"),e(": Searches all objects within the associated DN.")]),l("li",null,[l("code",null,"sub"),e(": Searches all objects and sub-objects within the associated DN.")])],-1),zn=l("p",null,[l("sup",null,"[3]"),e(" If you specify groupDn, the user\u2019s role will always get updated on authentication to what\u2019s configured in AD. It will fallback to the configured default role id if supplied.")],-1),Xn=l("h3",{id:"example%3A-ldap"},[e("Example: LDAP "),l("a",{class:"header-anchor",href:"#example%3A-ldap"},"#")],-1),Jn=l("pre",null,[l("code",null,`AUTH_PROVIDERS="ldap"
|
|
115
|
-
|
|
116
|
-
AUTH_LDAP_DRIVER="ldap"
|
|
117
|
-
AUTH_LDAP_CLIENT_URL="ldap://ldap.directus.io"
|
|
118
|
-
AUTH_LDAP_BIND_DN="CN=Bind User,OU=Users,DC=ldap,DC=directus,DC=io"
|
|
119
|
-
AUTH_LDAP_BIND_PASSWORD="p455w0rd"
|
|
120
|
-
AUTH_LDAP_USER_DN="OU=Users,DC=ldap,DC=directus,DC=io"
|
|
121
|
-
AUTH_LDAP_GROUP_DN="OU=Groups,DC=ldap,DC=directus,DC=io"
|
|
122
|
-
`)],-1),Zn=l("h3",{id:"example%3A-multiple-auth-providers"},[e("Example: Multiple Auth Providers "),l("a",{class:"header-anchor",href:"#example%3A-multiple-auth-providers"},"#")],-1),Qn=l("p",null,"You can configure multiple providers for handling authentication in Directus. This allows for different options when logging in. To do this, you can provide a CSV of provider names, and provide a config block for each of them:",-1),$n=l("pre",null,[l("code",null,`AUTH_PROVIDERS="google,adobe"
|
|
123
|
-
|
|
124
|
-
AUTH_GOOGLE_DRIVER="openid"
|
|
125
|
-
AUTH_GOOGLE_CLIENT_ID="<google_application_id>"
|
|
126
|
-
AUTH_GOOGLE_CLIENT_SECRET= "<google_application_secret_key>"
|
|
127
|
-
AUTH_GOOGLE_ISSUER_URL="https://accounts.google.com"
|
|
128
|
-
AUTH_GOOGLE_IDENTIFIER_KEY="email"
|
|
129
|
-
AUTH_GOOGLE_ICON="google"
|
|
130
|
-
|
|
131
|
-
AUTH_ADOBE_DRIVER="oauth2"
|
|
132
|
-
AUTH_ADOBE_CLIENT_ID="<adobe_application_id>"
|
|
133
|
-
AUTH_ADOBE_CLIENT_SECRET="<adobe_application_secret_key>"
|
|
134
|
-
AUTH_ADOBE_AUTHORIZE_URL="https://ims-na1.adobelogin.com/ims/authorize/v2"
|
|
135
|
-
AUTH_ADOBE_ACCESS_URL="https://ims-na1.adobelogin.com/ims/token/v3"
|
|
136
|
-
AUTH_ADOBE_PROFILE_URL="https://ims-na1.adobelogin.com/ims/userinfo/v2"
|
|
137
|
-
AUTH_ADOBE_ICON="adobe"
|
|
138
|
-
`)],-1),lt=l("h2",{id:"extensions"},[e("Extensions "),l("a",{class:"header-anchor",href:"#extensions"},"#")],-1),et=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EXTENSIONS_PATH")]),l("td",null,"Path to your local extensions folder."),l("td",null,[l("code",null,"./extensions")])]),l("tr",null,[l("td",null,[l("code",null,"EXTENSIONS_AUTO_RELOAD")]),l("td",null,"Automatically reload extensions when they have changed."),l("td",null,[l("code",null,"false")])])])],-1),nt=l("h2",{id:"email"},[e("Email "),l("a",{class:"header-anchor",href:"#email"},"#")],-1),tt=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EMAIL_FROM")]),l("td",null,"Email address from which emails are sent."),l("td",null,[l("code",null,"no-reply@directus.io")])]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_TRANSPORT")]),l("td",null,[e("What to use to send emails. One of "),l("code",null,"sendmail"),e(", "),l("code",null,"smtp"),e(", "),l("code",null,"mailgun"),e(", "),l("code",null,"ses"),e(".")]),l("td",null,[l("code",null,"sendmail")])])])],-1),ot=l("p",null,[e("Based on the "),l("code",null,"EMAIL_TRANSPORT"),e(" used, you must also provide the following configurations:")],-1),ut=l("h3",{id:"sendmail-(sendmail)"},[e("Sendmail ("),l("code",null,"sendmail"),e(") "),l("a",{class:"header-anchor",href:"#sendmail-(sendmail)"},"#")],-1),st=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EMAIL_SENDMAIL_NEW_LINE")]),l("td",null,"What new line style to use in sendmail."),l("td",null,[l("code",null,"unix")])]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SENDMAIL_PATH")]),l("td",null,"Path to your sendmail executable."),l("td",null,[l("code",null,"/usr/sbin/sendmail")])])])],-1),at=l("h3",{id:"smtp-(smtp)"},[e("SMTP ("),l("code",null,"smtp"),e(") "),l("a",{class:"header-anchor",href:"#smtp-(smtp)"},"#")],-1),rt=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_HOST")]),l("td",null,"SMTP Host"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_PORT")]),l("td",null,"SMTP Port"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_USER")]),l("td",null,"SMTP User"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_PASSWORD")]),l("td",null,"SMTP Password"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_POOL")]),l("td",null,"Use SMTP pooling"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_SECURE")]),l("td",null,"Enable TLS"),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SMTP_IGNORE_TLS")]),l("td",null,"Ignore TLS"),l("td",null,"\u2013")])])],-1),dt=l("h3",{id:"mailgun-(mailgun)"},[e("Mailgun ("),l("code",null,"mailgun"),e(") "),l("a",{class:"header-anchor",href:"#mailgun-(mailgun)"},"#")],-1),it=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EMAIL_MAILGUN_API_KEY")]),l("td",null,"Your Mailgun API key."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_MAILGUN_DOMAIN")]),l("td",null,[e("A domain from "),l("a",{href:"https://app.mailgun.com/app/sending/domains",target:"_blank",rel:"noopener noreferrer"},"your Mailgun account")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_MAILGUN_HOST")]),l("td",null,"Allows you to specify a custom host."),l("td",null,[l("code",null,"api.mailgun.net")])])])],-1),ct=l("h3",{id:"aws-ses-(ses)"},[e("AWS SES ("),l("code",null,"ses"),e(") "),l("a",{class:"header-anchor",href:"#aws-ses-(ses)"},"#")],-1),ht=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"EMAIL_SES_CREDENTIALS__ACCESS_KEY_ID")]),l("td",null,"Your AWS SES access key. ID."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SES_CREDENTIALS__SECRET_ACCESS_KEY")]),l("td",null,"Your AWS SES secret key."),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"EMAIL_SES_REGION")]),l("td",null,"Your AWS SES region."),l("td",null,"\u2013")])])],-1),_t=l("h2",{id:"admin-account"},[e("Admin Account "),l("a",{class:"header-anchor",href:"#admin-account"},"#")],-1),pt=l("p",null,[e("If you\u2019re relying on Docker and/or the "),l("code",null,"directus bootstrap"),e(" CLI command, you can pass the following two environment variables to automatically configure the first user:")],-1),ft=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"ADMIN_EMAIL")]),l("td",null,[e("The email address of the first user that\u2019s automatically created when using "),l("code",null,"directus bootstrap"),e(".")]),l("td",null,"\u2013")]),l("tr",null,[l("td",null,[l("code",null,"ADMIN_PASSWORD")]),l("td",null,[e("The password of the first user that\u2019s automatically created when using "),l("code",null,"directus bootstrap"),e(".")]),l("td",null,"\u2013")])])],-1),mt=l("h2",{id:"telemetry"},[e("Telemetry "),l("a",{class:"header-anchor",href:"#telemetry"},"#")],-1),Et=l("p",null,"To more accurately gauge the frequency of installation, version fragmentation, and general size of the userbase, Directus collects little and anonymized data about your environment. You can easily opt-out with the following environment variable:",-1),gt=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"TELEMETRY")]),l("td",null,"Allow Directus to collect anonymized data about your environment."),l("td",null,[l("code",null,"true")])])])],-1),At=l("h2",{id:"limits-%26-optimizations"},[e("Limits & Optimizations "),l("a",{class:"header-anchor",href:"#limits-%26-optimizations"},"#")],-1),Tt=l("p",null,"Allows you to configure hard technical limits, to prevent abuse and optimize for your particular server environment.",-1),Rt=l("table",null,[l("thead",null,[l("tr",null,[l("th",null,"Variable"),l("th",null,"Description"),l("th",null,"Default Value")])]),l("tbody",null,[l("tr",null,[l("td",null,[l("code",null,"RELATIONAL_BATCH_SIZE")]),l("td",null,"How many rows are read into memory at a time when constructing nested relational datasets"),l("td",null,"25000")]),l("tr",null,[l("td",null,[l("code",null,"EXPORT_BATCH_SIZE")]),l("td",null,"How many rows are read into memory at a time when constructing exports"),l("td",null,"5000")])])],-1),yt={setup(bt,{expose:a}){const u={title:"Configuration Options",modularExtension:!1};return a({frontmatter:u}),(Ot,St)=>{const t=s("router-link"),r=s("DocsWrapper");return d(),i(r,{frontmatter:u},{default:n(()=>[l("div",c,[h,_,p,f,m,E,g,A,T,R,b,O,S,I,y,D,v,C,L,w,P,U,H,N,V,M,x,j,k,B,G,W,F,q,Y,K,z,X,J,Z,Q,$,ll,el,nl,tl,ol,l("table",null,[ul,l("tbody",null,[sl,al,rl,dl,il,cl,hl,_l,l("tr",null,[pl,l("td",null,[fl,o(t,{to:"/docs/reference/authentication/#request-password-reset"},{default:n(()=>[ml,El,gl]),_:1})]),Al]),l("tr",null,[Tl,l("td",null,[Rl,o(t,{to:"/docs/reference/system/users/#invite-a-new-user"},{default:n(()=>[bl,Ol,Sl]),_:1})]),Il]),yl,Dl,vl,Cl,Ll])]),wl,Pl,Ul,l("p",null,[Hl,Nl,Vl,o(t,{to:"/docs/reference/system/utilities/#generate-a-hash"},{default:n(()=>[Ml]),_:1}),xl]),jl,kl,Bl,Gl,Wl,Fl,ql,Yl,Kl,zl,Xl,Jl,Zl,Ql,$l,le,ee,ne,te,oe,ue,se,ae,re,de,ie,ce,he,_e,pe,fe,me,Ee,ge,Ae,Te,Re,be,Oe,Se,Ie,ye,De,ve,Ce,Le,we,Pe,Ue,He,Ne,Ve,Me,xe,je,ke,Be,Ge,We,Fe,qe,Ye,Ke,ze,Xe,Je,Ze,Qe,$e,ln,en,nn,tn,on,un,sn,l("table",null,[an,l("tbody",null,[rn,dn,cn,hn,_n,pn,fn,mn,En,gn,l("tr",null,[An,l("td",null,[Tn,o(t,{to:"/docs/getting-started/glossary/#icons"},{default:n(()=>[Rn]),_:1}),bn]),On]),Sn])]),In,yn,l("table",null,[Dn,l("tbody",null,[vn,Cn,Ln,wn,Pn,Un,Hn,Nn,l("tr",null,[Vn,l("td",null,[Mn,o(t,{to:"/docs/getting-started/glossary/#icons"},{default:n(()=>[xn]),_:1}),jn]),kn]),Bn])]),Gn,Wn,Fn,qn,Yn,Kn,zn,Xn,Jn,Zn,Qn,$n,lt,et,nt,tt,ot,ut,st,at,rt,dt,it,ct,ht,_t,pt,ft,mt,Et,gt,At,Tt,Rt])]),_:1})}}};export{yt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{w as a,y as d,z as r,A as o,E as e,C as n,W as t}from"./vendor.c37f7cab.js";const h={class:"markdown-body"},_=e("blockquote",null,[e("p",null,[t("The Content Module is the primary way for Users to interact with Items in a Collection. Regardless of what your data model contains "),e("em",null,"(be it blog posts, event bookings, IoT fleets, geo-positions, CRM, or whatever!)"),t(" the Content Module enables Users to view and manage, sort and search, or import and export data.")])],-1),g=e("p",null,[e("div",{class:"table-of-contents"},[e("ul",null,[e("li",null,[e("a",{href:"#collection-page"},"Collection Page")]),e("li",null,[e("a",{href:"#item-page"},"Item Page")]),e("li",null,[e("a",{href:"#data-sharing"},"Data Sharing")])])])],-1),u={class:"tip hint"},p=e("div",{class:"hint-title"},"Before You Begin",-1),m=t("To efficiently use this Module, you will need to know about "),f=t("Collections"),v=t(", "),w=t("Items"),y=t(" and "),C=t("Fields"),I=t("."),b=e("h2",{id:"collection-page"},[t("Collection Page "),e("a",{class:"header-anchor",href:"#collection-page"},"#")],-1),P=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/app-guide/content/content/content-20220415A/collection-page-20220415A.webp",alt:"Collection Overview"})],-1),T=t("The Content Module is composed of Collection Pages and Item Pages. Use the Navigation Bar on the left to move between Collections. Each Collection Page displays all Items in its Collection and comes with highly configurable "),A=t("Layouts"),k=t(" for browsing, visualizing, and managing Items. The Page Header includes key action buttons for sorting, searching, filtering, creating, editing, archiving, and deleting multiple Items. To learn more, see our guide on the "),D=t("Collection Page"),M=t("."),x={class:"tip hint"},B=t("This Module is for management of Items. Collections are not managed through this Module, as that creates changes in the fundamental data model. Administrators manage Collections via the Settings menu. To learn more, see our guide on "),S=t("data model configuration"),N=t("."),U=e("h2",{id:"item-page"},[t("Item Page "),e("a",{class:"header-anchor",href:"#item-page"},"#")],-1),V=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/app-guide/content/content/content-20220415A/item-page-20220215A.webp",alt:"Article Overview"})],-1),W=t("When an Item is clicked on the Collection Page, its Item Details Page is opened. This is a form primarily for viewing, editing and deleting an Item\u2019s Field Values. Options for commenting on, sharing, archiving, and reverting the Item are included as well. To learn more, see our guide on the "),j=t("Item Page"),E=t("."),O={class:"tip hint"},R=e("div",{class:"hint-title"},"Manage Items via the API",-1),z=t("This section explains how to create, view, update, and delete Items within the Directus App. However, all actions performed in the app can also be done programmatically."),F=e("br",null,null,-1),H=t(" Learn how to "),L=t("manage Items via the API"),Y=t("."),q=e("h2",{id:"data-sharing"},[t("Data Sharing "),e("a",{class:"header-anchor",href:"#data-sharing"},"#")],-1),G=e("video",{title:"Data Sharing",autoplay:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/app-guide/content/content/content-20220415A/data-shares-20220415A.mp4",type:"video/mp4"})],-1),J=t("In a given Project, some Collections will likely be hidden for the Public as well as other Roles. There may be cases when you want to share an Item with a person "),K=e("em",null,"(or people)",-1),Q=t(" that don\u2019t have the permissions to see it. This is where Shares come in to play. You can share Item from a Collection with anyone, regardless of their permissions and even if they are not Users within the project. To learn more, see our guide on "),X=t("Data Sharing"),Z=t("."),se={setup($,{expose:l}){const i={title:"Content",modularExtension:!1};return l({frontmatter:i}),(ee,te)=>{const s=a("router-link"),c=a("DocsWrapper");return d(),r(c,{frontmatter:i},{default:o(()=>[e("div",h,[_,g,e("div",u,[p,e("p",null,[m,n(s,{to:"/docs/getting-started/glossary/#collections"},{default:o(()=>[f]),_:1}),v,n(s,{to:"/docs/getting-started/glossary/#items"},{default:o(()=>[w]),_:1}),y,n(s,{to:"/docs/getting-started/glossary/#fields"},{default:o(()=>[C]),_:1}),I])]),b,P,e("p",null,[T,n(s,{to:"/docs/getting-started/glossary/#layouts"},{default:o(()=>[A]),_:1}),k,n(s,{to:"/docs/app/content/collections"},{default:o(()=>[D]),_:1}),M]),e("div",x,[e("p",null,[B,n(s,{to:"/docs/configuration/data-model"},{default:o(()=>[S]),_:1}),N])]),U,V,e("p",null,[W,n(s,{to:"/docs/app/content/items"},{default:o(()=>[j]),_:1}),E]),e("div",O,[R,e("p",null,[z,F,H,n(s,{to:"/docs/reference/items/"},{default:o(()=>[L]),_:1}),Y])]),q,G,e("p",null,[J,K,Q,n(s,{to:"/docs/app/content/data-sharing"},{default:o(()=>[X]),_:1}),Z])])]),_:1})}}};export{se as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{w as l,y as h,z as c,A as n,E as e,C as s,W as t}from"./vendor.c37f7cab.js";const d={class:"markdown-body"},u=e("blockquote",null,[e("p",null,"Data Sharing allows you to share an Item from a Collection with anyone, regardless of their permissions, even if they are not users within the project.")],-1),p=e("video",{autoplay:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/app-guide/content/data-sharing/data-sharing-20220217A/data-shares-20220217A.mp4",type:"video/mp4"}),e("p",null,[t("Your browser is not displaying the video for some reason. Here's a "),e("a",{href:"https://cdn.directus.io/docs/v9/app-guide/content/data-sharing/data-sharing-20220217A/data-shares-20220217A.mp4"},"link to the video"),t(" instead.")])],-1),m=e("p",null,[e("div",{class:"table-of-contents"},[e("ul",null,[e("li",null,[e("a",{href:"#what's-a-share%3F"},"What's a Share?")]),e("li",null,[e("a",{href:"#how-it-works"},"How It Works")]),e("li",null,[e("a",{href:"#share-options-menu"},"Share Options Menu")]),e("li",null,[e("a",{href:"#creating-and-viewing-shares"},"Creating and Viewing Shares")]),e("li",null,[e("a",{href:"#is-data-sharing-safe%3F"},"Is Data Sharing Safe?")]),e("li",null,[e("a",{href:"#assigning-a-role"},"Assigning a Role")]),e("li",null,[e("a",{href:"#limit-sharing-by-collection"},"Limit Sharing by Collection")]),e("li",null,[e("a",{href:"#limit-sharing-by-item"},"Limit Sharing by Item")]),e("li",null,[e("a",{href:"#limit-sharing-by-field"},"Limit Sharing by Field")])])])],-1),g=e("h2",{id:"what%E2%80%99s-a-share%3F"},[t("What\u2019s a Share? "),e("a",{class:"header-anchor",href:"#what%E2%80%99s-a-share%3F"},"#")],-1),_=e("p",null,[t("In a given Project, some Collections will likely be hidden for the Public as well as other Roles. There may be cases when you want to share an Item with a person "),e("em",null,"(or people)"),t(" that don\u2019t have the permissions to see it. This is where Shares come in to play. Shares let you give anybody access to an Item. When a Share is created on an Item, you assign a Role for the Share to inherit view permissions from, then you can "),e("em",null,"share"),t(" the Item via hyperlink or email. The link leads to a page with nothing but the read-only content of that shared Item.")],-1),w={class:"tip hint"},f=e("div",{class:"hint-title"},"Read-only",-1),y=t("At this time, Shares are read-only. However, Data Sharing is an extensible feature that could support full CRUD permissions. We welcome any "),S=t("pull-requests"),b=t(" to address this or interest in "),v=t("sponsoring the feature"),k=t("."),R={class:"warning hint"},I=e("div",{class:"hint-title"},"Users, Roles and Permissions!",-1),C=t("You will need to understand how "),A=t("Users, Roles, and Permissions"),F=t(" work in Directus to configure Shares properly. That said, if you\u2019re unfamiliar with those concepts, it is quite reasonable to learn them in tandem with Data Sharing."),x=e("h2",{id:"how-it-works"},[t("How It Works "),e("a",{class:"header-anchor",href:"#how-it-works"},"#")],-1),D=e("video",{autoplay:"",muted:"",loop:"",controls:""},[e("source",{src:"https://cdn.directus.io/docs/v9/app-guide/content/data-sharing/data-sharing-20220217A/how-shares-work-20220217A.mp4",type:"video/mp4"}),e("p",null,[t("Your browser is not displaying the video for some reason. Here's a "),e("a",{href:"https://cdn.directus.io/docs/v9/app-guide/content/data-sharing/data-sharing-20220217A/how-shares-work-20220217A.mp4"},"link to the video"),t(" instead.")])],-1),N=e("ol",null,[e("li",null,[e("p",null,"Navigate to the Content Module.")]),e("li",null,[e("p",null,"Navigate to the Collection of the Item you want to share.")]),e("li",null,[e("p",null,"Click the Item to go into the Item\u2019s Editing Page.")]),e("li",null,[e("p",null,"Click the Shares button in the Sidebar.")]),e("li",null,[e("p",null,"From the dropdown, click \u201CNew Share\u201D.")]),e("li",null,[e("p",null,[t("Fill in the Share Options. Everything on the "),e("a",{href:"#share-options-menu"},"Share Options Menu"),t(" is optional, but please note:")]),e("ul",null,[e("li",null,"Without a name, it will be harder to remember the context/reason for the Share, especially with multiple shares on a single Item."),e("li",null,"If no Role is selected, it defaults to Public permissions, which provides no real benefit since anyone can access Items available to Public."),e("li",null,"The other access constraints are totally optional.")])]),e("li",null,[e("p",null,[t("Click "),e("span",{mi:"",btn:""},"check"),t(" in the Menu Header once you have set a name, a Role and constraints. You will see your new Share under \u201CShares\u201D in the Sidebar.")])]),e("li",null,[e("p",null,[t("Click the "),e("span",{mi:"",icon:""},"more_horiz"),t(" button on the right side of your Share.")])])],-1),P=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/app-guide/content/data-sharing/data-sharing-20220217A/copy-send-edit-delete-shares-menu-20220217A.webp",alt:"copy send edit delete shares menu"})],-1),M=e("ol",{start:"9"},[e("li",null,[t("Here you have 4 options: "),e("ul",null,[e("li",null,[e("strong",null,"Copy Link"),t(" \u2013 Creates a hyperlink that you can copy and paste.")]),e("li",null,[e("strong",null,"Send Link"),t(" \u2013 Creates prompt for User to add email(s) and share the link.")]),e("li",null,[e("strong",null,"Edit"),t(" \u2013 Reopens the Share Options Menu for additional edits.")]),e("li",null,[e("strong",null,"Delete"),t(" \u2013 Permanently deletes the Share.")])])])],-1),O=e("p",null,"Once the link is opened by a user, a custom page displaying the Shared Item will be rendered.",-1),E=e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"Logout to test links"),e("p",null,"If you open a Data Share link while logged in to Directus, it will redirect to the item in the regular Directus App. When testing a share, make sure to logout of the app before opening the link or simply open the link in another browser or incognito tab.")],-1),W=e("h2",{id:"share-options-menu"},[t("Share Options Menu "),e("a",{class:"header-anchor",href:"#share-options-menu"},"#")],-1),H=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/app-guide/content/data-sharing/data-sharing-20220217A/share-options-menu-20220217A.webp",alt:"Share Options Menu"})],-1),T=e("ul",null,[e("li",null,[e("strong",null,"Name"),t(" \u2013 Adds a name to describe the Share.")]),e("li",null,[e("strong",null,"Role"),t(" \u2013 "),e("a",{href:"#assigning-a-role"},"Assigns a Role"),t(" for the Share to inherit permissions from.")]),e("li",null,[e("strong",null,"Password"),t(" \u2013 Creates a password that must be used to access the shared Item.")]),e("li",null,[e("strong",null,"Start Date"),t(" \u2013 Selects the first date that the Share can be accessed.")]),e("li",null,[e("strong",null,"End Date"),t(" \u2013 Selects the last date that the Share can be accessed.")]),e("li",null,[e("strong",null,"Max Uses"),t(" \u2013 Sets total number of times the shared Item can be viewed.")]),e("li",null,[e("strong",null,"Times Used"),t(" - Displays number of times the shared Item was viewed.")])],-1),U=e("h2",{id:"creating-and-viewing-shares"},[t("Creating and Viewing Shares "),e("a",{class:"header-anchor",href:"#creating-and-viewing-shares"},"#")],-1),L=e("p",null,[t("A User\u2019s ability to create shares will be based on their Role\u2019s permissions. If you are an "),e("code",null,"Administrator"),t(", "),e("em",null,"congratulations"),t("! You can share any Item you want. However, other Roles created will likely have limits set on their Share permissions.")],-1),B=e("p",null,"Any given Share will inherit the same read permissions as the Role it was associated with in the Share Options Menu.",-1),Y=t("This system allows for absolutely granular configuration options on Shares\u2026 "),j=t("but it also means you\u2019ll need to understand "),V=t("Users, Roles, and Permissions"),q=t(" thoroughly to use Shares properly"),z=t(". Here are some highlights of what you can do:"),G=e("ul",null,[e("li",null,"Set the Collections a Role can view or share."),e("li",null,"Filter for specific Items a Role can view or share."),e("li",null,"Set specific Fields a Role can view or share."),e("li",null,"Set view permissions of relationally linked Items."),e("li",null,"Restrict Role access to specific IP address(es).")],-1),J=e("h2",{id:"is-data-sharing-safe%3F"},[t("Is Data Sharing Safe? "),e("a",{class:"header-anchor",href:"#is-data-sharing-safe%3F"},"#")],-1),K=e("p",null,[t("We obviously don\u2019t want to expose Items unless they are explicitly shared, however some Items may be linked to Items in other Collections. So, in addition to inheriting the role\u2019s permissions, the API automatically generates and injects a permissions set so that only the shared Item "),e("em",null,"(and the Items relationally linked to that shared Item)"),t(" can be viewed. But again, as noted previously, view-ability is still dependent on whether the Role associated to the Share has read permissions on those linked Collections.")],-1),Q=e("h2",{id:"assigning-a-role"},[t("Assigning a Role "),e("a",{class:"header-anchor",href:"#assigning-a-role"},"#")],-1),X=e("p",null,[t("The Role option in the "),e("a",{href:"#share-options-menu"},"Share Options Menu"),t(" lets you associate a Role to the Share. The Share will then inherit permissions of that Role.")],-1),Z=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/app-guide/content/data-sharing/data-sharing-20220217A/select-existing-role-menu-20220217A.webp",alt:"Select Role for Share"})],-1),$=e("h3",{id:"assign-an-existing-role"},[t("Assign an Existing Role "),e("a",{class:"header-anchor",href:"#assign-an-existing-role"},"#")],-1),ee=e("ol",null,[e("li",null,[t("Navigate to the "),e("strong",null,"Share Options Menu"),t(".")]),e("li",null,[t("Click the Role Input Box and a new side menu will appear "),e("em",null,"(shown above)"),t(".")]),e("li",null,"Select the Role you\u2019d like your Share to inherit permissions from."),e("li",null,[t("Click "),e("span",{mi:"",btn:""},"check"),t(" to confirm.")])],-1),te=e("h3",{id:"creating-%2F-editing-a-role"},[t("Creating / Editing a Role "),e("a",{class:"header-anchor",href:"#creating-%2F-editing-a-role"},"#")],-1),ne=e("p",null,[e("em",null,"If your Role has the correct permissions configured"),t(", you can create a new Role and assign it to a Share "),e("em",null,"\u201Con the fly\u201D"),t(" in the Share Options Menu. However, you will still need to navigate to "),e("strong",null,"Settings > Roles and Permissions > [Role Name]"),t(" to configure any read permissions.")],-1),ie=e("p",null,[e("img",{src:"https://cdn.directus.io/docs/v9/app-guide/content/data-sharing/data-sharing-20220217A/creating-and-edit-roles-menu-20220217A.webp",alt:"Creating / Editing a Role within Shares"})],-1),se=e("h3",{id:"create-a-new-role"},[t("Create a New Role "),e("a",{class:"header-anchor",href:"#create-a-new-role"},"#")],-1),oe=e("ol",null,[e("li",null,[t("Navigate to the "),e("strong",null,"Share Options Menu"),t(".")]),e("li",null,[t("Click "),e("span",{mi:"",icon:""},"add"),t(" in the Role Input Box and the Role Options Menu will appear.")]),e("li",null,"Fill out the options to create the Role according to your needs."),e("li",null,[t("Click "),e("span",{mi:"",btn:""},"check"),t(" to confirm Role creation.")])],-1),le=e("h3",{id:"edit-an-assigned-role"},[t("Edit an Assigned Role "),e("a",{class:"header-anchor",href:"#edit-an-assigned-role"},"#")],-1),ae=e("ol",null,[e("li",null,[t("Navigate to the "),e("strong",null,"Share Options Menu"),t(".")]),e("li",null,[t("Click "),e("span",{mi:"",icon:""},"open_in_new"),t(" in the Role Input Box and the Role Options Menu will appear.")]),e("li",null,"Edit Role options according to your needs."),e("li",null,[t("Click "),e("span",{mi:"",btn:""},"check"),t(" to confirm edits.")])],-1),re=e("div",{class:"warning hint"},[e("div",{class:"hint-title"},"You're creating / editing actual Roles!"),e("p",null,"If you create or edit a Role in this menu, these changes will take effect app-wide, not just in the context of the Share.")],-1),he=e("h2",{id:"limit-sharing-by-collection"},[t("Limit Sharing by Collection "),e("a",{class:"header-anchor",href:"#limit-sharing-by-collection"},"#")],-1),ce=e("p",null,"You can limit which Collections a Role is allowed to share.",-1),de=e("ol",null,[e("li",null,[t("Navigate to "),e("strong",null,"Settings > Roles and Permissions"),t(".")]),e("li",null,[t("Select the "),e("strong",null,"[Role Name]"),t(" that will be responsible for creating the Share.")]),e("li",null,[t("Find the "),e("strong",null,"[Collection]"),t(" you wish to set Filter(s) for and click the icon in the column under "),e("span",{mi:"",icon:""},"share"),t(" and a small menu will appear.")]),e("li",null,[t("Select "),e("span",{mi:""},"check"),t(" to enable and "),e("span",{mi:""},"block"),t(" to disable Shares on this collection.")])],-1),ue=e("h2",{id:"limit-sharing-by-item"},[t("Limit Sharing by Item "),e("a",{class:"header-anchor",href:"#limit-sharing-by-item"},"#")],-1),pe=e("p",null,[t("Sometimes you may want a given Role to be able to share some Items but not others. Filters allow you to control exactly which Items a Role will be able to share, enabling you to do things like "),e("em",null,"only share reports that are marked as \u2018Done\u2019"),t(".")],-1),me=e("ol",null,[e("li",null,[t("Navigate to "),e("strong",null,"Settings > Roles and Permissions"),t(".")]),e("li",null,[t("Select the "),e("strong",null,"[Role Name]"),t(" that will be responsible for creating the Share.")]),e("li",null,[t("Find the "),e("strong",null,"[Collection]"),t(" you wish to set Filter(s) for and click the icon in the column under "),e("span",{mi:"",icon:""},"share"),t(" and a small menu will appear.")]),e("li",null,[t("Select "),e("span",{mi:"",icon:""},"rule"),e("strong",null,"Use Custom"),t(" and a side menu will appear.")]),e("li",null,"Create your Filter(s) as needed.")],-1),ge=e("h2",{id:"limit-sharing-by-field"},[t("Limit Sharing by Field "),e("a",{class:"header-anchor",href:"#limit-sharing-by-field"},"#")],-1),_e=e("p",null,[t("When you create a Share on some Item, you associate a Role "),e("em",null,"(and thus the Role\u2019s permissions)"),t(" to the Item. This allows you to set read permissions for the exact fields "),e("em",null,"(including relational fields)"),t(" that get shared.")],-1),we=e("ol",null,[e("li",null,[t("Navigate to "),e("strong",null,"Settings > Roles and Permissions"),t(".")]),e("li",null,[t("Select the "),e("strong",null,"[Role Name]"),t(" that is assigned to the Share.")]),e("li",null,[t("Find the "),e("strong",null,"[Collection]"),t(" and click the icon in the column under the "),e("span",{mi:"",icon:""},"visibility"),t(" icon and a small menu will appear.")]),e("li",null,[t("Select "),e("span",{mi:"",icon:""},"rule"),e("strong",null,"Use Custom"),t(" and a side menu will appear.")]),e("li",null,[t("Click "),e("strong",null,"Field Permissions"),t(".")]),e("li",null,"Click to check the Collection Fields you\u2019d like to allow read permissions on."),e("li",null,[t("Select "),e("span",{mi:""},"check"),t(" in the side menu Header to confirm changes.")])],-1),ve={setup(fe,{expose:a}){const o={title:"Data Sharing",modularExtension:!1};return a({frontmatter:o}),(ye,Se)=>{const i=l("router-link"),r=l("DocsWrapper");return h(),c(r,{frontmatter:o},{default:n(()=>[e("div",d,[u,p,m,g,_,e("div",w,[f,e("p",null,[y,s(i,{to:"/docs/contributing/introduction/"},{default:n(()=>[S]),_:1}),b,s(i,{to:"/docs/getting-started/support/#sponsored-work"},{default:n(()=>[v]),_:1}),k])]),e("div",R,[I,e("p",null,[C,s(i,{to:"/docs/configuration/users-roles-permissions/#configuring-permissions"},{default:n(()=>[A]),_:1}),F])]),x,D,N,P,M,O,E,W,H,T,U,L,B,e("p",null,[Y,e("em",null,[j,s(i,{to:"/docs/configuration/users-roles-permissions/#configuring-permissions"},{default:n(()=>[V]),_:1}),q]),z]),G,J,K,Q,X,Z,$,ee,te,ne,ie,se,oe,le,ae,re,he,ce,de,ue,pe,me,ge,_e,we])]),_:1})}}};export{ve as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e={avatar:"\u0386\u03B2\u03B1\u03C4\u03B1\u03C1",edit_field:"\u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03A0\u03B5\u03B4\u03AF\u03BF\u03C5",item_revision:"\u0391\u03BD\u03B1\u03B8\u03B5\u03CE\u03C1\u03B7\u03C3\u03B7 \u0391\u03BD\u03C4\u03B9\u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5",duplicate_field:"\u0391\u03BD\u03C4\u03AF\u03B3\u03C1\u03B1\u03C6\u03BF \u03A0\u03B5\u03B4\u03AF\u03BF\u03C5",half_width:"\u039C\u03B9\u03C3\u03CC \u03A0\u03BB\u03AC\u03C4\u03BF\u03C2",full_width:"\u03A0\u03BB\u03AE\u03C1\u03B5\u03C2 \u03A0\u03BB\u03AC\u03C4\u03BF\u03C2",fill_width:"\u03A0\u03BB\u03AE\u03C1\u03B5\u03C2 \u03A0\u03BB\u03AC\u03C4\u03BF\u03C2",field_name_translations:"\u039C\u03B5\u03C4\u03B1\u03C6\u03C1\u03AC\u03C3\u03B5\u03B9\u03C2 \u039F\u03BD\u03CC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03A0\u03B5\u03B4\u03AF\u03BF\u03C5",enter_password_to_enable_tfa:"\u0395\u03B9\u03C3\u03AC\u03B3\u03B5\u03C4\u03B5 \u03C4\u03BF\u03BD \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03AE\u03C2 \u03C3\u03B1\u03C2 \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03C4\u03B5 \u03C4\u03BF\u03BD \u03B4\u03B9\u03C0\u03BB\u03CC \u03AD\u03BB\u03B5\u03B3\u03C7\u03BF \u03C4\u03B1\u03C5\u03C4\u03CC\u03C4\u03B7\u03C4\u03B1\u03C2",add_field:"\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03A0\u03B5\u03B4\u03AF\u03BF\u03C5",role_name:"\u038C\u03BD\u03BF\u03BC\u03B1 \u03A1\u03CC\u03BB\u03BF\u03C5",exclusive:"\u0391\u03C0\u03BF\u03BA\u03BB\u03B5\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC",children:"\u03A0\u03B1\u03B9\u03B4\u03B9\u03AC",show_archived_items:"\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u0391\u03C1\u03C7\u03B5\u03B9\u03BF\u03B8\u03B5\u03C4\u03B7\u03BC\u03AD\u03BD\u03C9\u03BD \u0391\u03BD\u03C4\u03B9\u03BA\u03B5\u03B9\u03BC\u03AD\u03BD\u03C9\u03BD",edited:"\u0397 \u03A4\u03B9\u03BC\u03AE \u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03AC\u03C3\u03C4\u03B7\u03BA\u03B5",required:"\u03A5\u03C0\u03BF\u03C7\u03C1\u03B5\u03C9\u03C4\u03B9\u03BA\u03CC",required_for_app_access:"\u0391\u03C0\u03B1\u03B9\u03C4\u03B5\u03AF\u03C4\u03B1\u03B9 \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7 \u03C3\u03C4\u03B7\u03BD \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE",requires_value:"\u0391\u03C0\u03B1\u03B9\u03C4\u03B5\u03AF \u03C4\u03B9\u03BC\u03AE",create_preset:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE\u03C2",create_role:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03C1\u03CC\u03BB\u03BF\u03C5",create_user:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03A7\u03C1\u03AE\u03C3\u03C4\u03B7",create_webhook:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 Webhook",invite_users:"\u03A0\u03C1\u03CC\u03C3\u03BA\u03BB\u03B7\u03C3\u03B7 \u03A7\u03C1\u03B7\u03C3\u03C4\u03CE\u03BD",invite:"\u03A0\u03C1\u03CC\u03C3\u03BA\u03BB\u03B7\u03C3\u03B7",email_already_invited:'To email "{email}" \u03AD\u03C7\u03B5\u03B9 \u03AE\u03B4\u03B7 \u03C0\u03C1\u03BF\u03C3\u03BA\u03BB\u03B7\u03B8\u03B5\u03AF',emails:"Emails",connection_excellent:"\u0395\u03BE\u03B1\u03B9\u03C1\u03B5\u03C4\u03B9\u03BA\u03AE \u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7",connection_good:"\u039A\u03B1\u03BB\u03AE \u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7",connection_fair:"\u039C\u03AD\u03C4\u03C1\u03B9\u03B1 \u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7",connection_poor:"\u039A\u03B1\u03BB\u03AE \u03A3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7",primary:"\u039A\u03C5\u03C1\u03AF\u03C9\u03C2",rename_folder:"\u039C\u03B5\u03C4\u03BF\u03BD\u03BF\u03BC\u03B1\u03C3\u03AF\u03B1 \u03A6\u03B1\u03BA\u03AD\u03BB\u03BF\u03C5",delete_folder:"\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03A6\u03B1\u03BA\u03AD\u03BB\u03BF\u03C5",prefix:"\u03A0\u03C1\u03CC\u03B8\u03B5\u03BC\u03B1",suffix:"\u0395\u03C0\u03AF\u03B8\u03B5\u03BC\u03B1",reset_bookmark:"\u0395\u03C0\u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u03A3\u03B5\u03BB\u03B9\u03B4\u03BF\u03B4\u03B5\u03AF\u03BA\u03C4\u03B7",update_bookmark:"\u0395\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7 \u03A3\u03B5\u03BB\u03B9\u03B4\u03BF\u03B4\u03B5\u03AF\u03BA\u03C4\u03B7",delete_bookmark:"\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C3\u03B5\u03BB\u03B9\u03B4\u03BF\u03B4\u03B5\u03AF\u03BA\u03C4\u03B7",logoutReason:{SIGN_OUT:"\u0391\u03C0\u03BF\u03C3\u03CD\u03BD\u03B4\u03B5\u03C3\u03B7",SESSION_EXPIRED:"\u0397 \u03C3\u03C5\u03BD\u03B5\u03B4\u03C1\u03AF\u03B1 \u03AD\u03BB\u03B7\u03BE\u03B5"},public_description:"\u0395\u03BB\u03AD\u03B3\u03C7\u03B5\u03B9 \u03C0\u03BF\u03B9\u03B1 \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03B1 API \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B4\u03B9\u03B1\u03B8\u03AD\u03C3\u03B9\u03BC\u03B1 \u03C7\u03C9\u03C1\u03AF\u03C2 \u03C4\u03B1\u03C5\u03C4\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7.",not_allowed:"\u0394\u03B5\u03BD \u0395\u03C0\u03B9\u03C4\u03C1\u03AD\u03C0\u03B5\u03C4\u03B1\u03B9",directus_version:"\u0388\u03BA\u03B4\u03BF\u03C3\u03B7 Directus",node_version:"\u0388\u03BA\u03B4\u03BF\u03C3\u03B7 Node",os_type:"\u039B\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03B9\u03BA\u03CC",os_version:"\u0388\u03BA\u03B4\u03BF\u03C3\u03B7 \u039B\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03B9\u03BA\u03BF\u03CD",os_uptime:"\u03A7\u03C1\u03CC\u03BD\u03BF\u03C2 \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1\u03C2 \u03C3\u03C5\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2",os_totalmem:"\u039C\u03BD\u03AE\u03BC\u03B7 \u039B\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03B9\u03BA\u03BF\u03CD",archive:"\u0391\u03C1\u03C7\u03B5\u03B9\u03BF\u03B8\u03AD\u03C4\u03B7\u03C3\u03B7",archive_confirm:"\u0395\u03AF\u03C3\u03C4\u03B5 \u03B2\u03AD\u03B2\u03B1\u03B9\u03BF\u03B9 \u03CC\u03C4\u03B9 \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B1\u03C1\u03C7\u03B5\u03B9\u03BF\u03B8\u03B5\u03C4\u03AE\u03C3\u03B5\u03C4\u03B5 \u03B1\u03C5\u03C4\u03CC \u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF;",archive_confirm_count:"\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03BF\u03C5\u03BD \u03B1\u03BD\u03C4\u03B9\u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03B1 \u03C0\u03BF\u03C5 \u03AD\u03C7\u03BF\u03C5\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03B5\u03AF | \u0395\u03AF\u03C3\u03C4\u03B5 \u03C3\u03AF\u03B3\u03BF\u03C5\u03C1\u03BF\u03B9 \u03CC\u03C4\u03B9 \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B1\u03C1\u03C7\u03B5\u03B9\u03BF\u03B8\u03B5\u03C4\u03AE\u03C3\u03B5\u03C4\u03B5 \u03B1\u03C5\u03C4\u03CC \u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF; | \u0395\u03AF\u03C3\u03C4\u03B5 \u03C3\u03AF\u03B3\u03BF\u03C5\u03C1\u03BF\u03B9 \u03CC\u03C4\u03B9 \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B1\u03C1\u03C7\u03B5\u03B9\u03BF\u03B8\u03B5\u03C4\u03AE\u03C3\u03B5\u03C4\u03B5 \u03B1\u03C5\u03C4\u03AC \u03C4\u03B1 {count} \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1;",reset_system_permissions_to:"\u0395\u03C0\u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u03B4\u03B9\u03BA\u03B1\u03B9\u03C9\u03BC\u03AC\u03C4\u03C9\u03BD \u03C3\u03C5\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C3\u03B5:",recommended_defaults:"\u03A0\u03C1\u03BF\u03C4\u03B5\u03B9\u03BD\u03CC\u03BC\u03B5\u03BD\u03B5\u03C2 \u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AD\u03C2",unarchive:"\u0395\u03C0\u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC",validationError:{eq:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 {valid}",neq:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 {invalid}",in:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03AF\u03B1 \u03B1\u03C0\u03CC \u03C4\u03B9\u03C2 {valid}",nin:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03AF\u03B1 \u03B1\u03C0\u03CC \u03C4\u03B9\u03C2 {invalid}",contains:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 {substring}",ncontains:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 {substring}",gt:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B5\u03B3\u03B1\u03BB\u03CD\u03C4\u03B5\u03C1\u03B7 \u03B1\u03C0\u03CC {valid}",gte:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B5\u03B3\u03B1\u03BB\u03CD\u03C4\u03B5\u03C1\u03B7 \u03AE \u03AF\u03C3\u03B7 \u03BC\u03B5 {valid}",lt:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B9\u03BA\u03C1\u03CC\u03C4\u03B5\u03C1\u03B7 \u03B1\u03C0\u03CC {valid}",empty:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AC\u03B4\u03B5\u03B9\u03B1",null:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B7\u03B4\u03B5\u03BD\u03B9\u03BA\u03AE",nnull:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B7\u03B4\u03B5\u03BD\u03B9\u03BA\u03AE",required:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C0\u03B1\u03C1\u03B1\u03AF\u03C4\u03B7\u03C4\u03B7",unique:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03BF\u03BD\u03B1\u03B4\u03B9\u03BA\u03AE",regex:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03B4\u03B5\u03BD \u03AD\u03C7\u03B5\u03B9 \u03C4\u03B7 \u03C3\u03C9\u03C3\u03C4\u03AE \u03BC\u03BF\u03C1\u03C6\u03AE"},all_access:"\u038C\u03BB\u03B7 \u0397 \u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7",no_access:"\u039A\u03B1\u03BC\u03AF\u03B1 \u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7",field_standard:"\u03A4\u03C5\u03C0\u03B9\u03BA\u03CC",create_field:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03C0\u03B5\u03B4\u03AF\u03BF\u03C5",hidden_on_detail:"\u039A\u03C1\u03C5\u03C6\u03CC \u03C3\u03C4\u03B9\u03C2 \u03BB\u03B5\u03C0\u03C4\u03BF\u03BC\u03AD\u03C1\u03B5\u03B9\u03B5\u03C2",text:"\u039A\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF",auto_generate:"\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1",add_note:"\u03A0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C3\u03C4\u03B5 \u03BC\u03B9\u03B1 \u03C7\u03C1\u03AE\u03C3\u03B9\u03BC\u03B7 \u03C3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7 \u03B3\u03B9\u03B1 \u03C4\u03BF\u03C5\u03C2 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B5\u03C2...",default_value:"\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE",next:"\u0395\u03C0\u03CC\u03BC\u03B5\u03BD\u03BF",note:"\u03A3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7",length:"\u039C\u03AE\u03BA\u03BF\u03C2",unique:"\u039C\u03BF\u03BD\u03B1\u03B4\u03B9\u03BA\u03CC",title:"\u03A4\u03AF\u03C4\u03BB\u03BF\u03C2",leave_comment:"\u0386\u03C6\u03B7\u03C3\u03C4\u03B5 \u03AD\u03BD\u03B1 \u03C3\u03C7\u03CC\u03BB\u03B9\u03BF...",submit:"\u03A5\u03C0\u03BF\u03B2\u03BF\u03BB\u03AE",months:{january:"\u0399\u03B1\u03BD\u03BF\u03C5\u03AC\u03C1\u03B9\u03BF\u03C2",february:"\u03A6\u03B5\u03B2\u03C1\u03BF\u03C5\u03AC\u03C1\u03B9\u03BF\u03C2",march:"\u039C\u03AC\u03C1\u03C4\u03B9\u03BF\u03C2",april:"\u0391\u03C0\u03C1\u03AF\u03BB\u03B9\u03BF\u03C2",may:"\u039C\u03AC\u03B9\u03BF\u03C2",june:"\u0399\u03BF\u03CD\u03BD\u03B9\u03BF\u03C2",july:"\u0399\u03BF\u03CD\u03BB\u03B9\u03BF\u03C2",august:"\u0391\u03CD\u03B3\u03BF\u03C5\u03C3\u03C4\u03BF\u03C2",september:"\u03A3\u03B5\u03C0\u03C4\u03AD\u03BC\u03B2\u03C1\u03B9\u03BF\u03C2",october:"\u039F\u03BA\u03C4\u03CE\u03B2\u03C1\u03B9\u03BF\u03C2",november:"\u039D\u03BF\u03AD\u03BC\u03B2\u03C1\u03B9\u03BF\u03C2",december:"\u0394\u03B5\u03BA\u03AD\u03BC\u03B2\u03C1\u03B9\u03BF\u03C2"},checksum:"\u0388\u03BB\u03B5\u03B3\u03C7\u03BF\u03C2 \u03B1\u03B8\u03C1\u03BF\u03AF\u03C3\u03BC\u03B1\u03C4\u03BF\u03C2",owner:"\u0399\u03B4\u03B9\u03BF\u03BA\u03C4\u03AE\u03C4\u03B7\u03C2",download:"\u039B\u03AE\u03C8\u03B7",name:"\u038C\u03BD\u03BF\u03BC\u03B1",created_by:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03B8\u03B7\u03BA\u03B5 \u03B1\u03C0\u03CC",created_on:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03B8\u03B7\u03BA\u03B5 \u03C3\u03C4\u03B9\u03C2",save_and_stay:"\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 \u03BA\u03B1\u03B9 \u03A0\u03B1\u03C1\u03B1\u03BC\u03BF\u03BD\u03AE",comments:"\u03A3\u03C7\u03CC\u03BB\u03B9\u03B1",create_collection:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03A3\u03C5\u03BB\u03BB\u03BF\u03B3\u03AE\u03C2",users:"\u03A7\u03C1\u03AE\u03C3\u03C4\u03B5\u03C2",activity:"\u0394\u03C1\u03B1\u03C3\u03C4\u03B7\u03C1\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1",action:"\u0395\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1",ip_address:"\u0394\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 IP",user_agent:"\u03A0\u03C1\u03AC\u03BA\u03C4\u03BF\u03C1\u03B1\u03C2 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7",field_width:"\u03A0\u03BB\u03AC\u03C4\u03BF\u03C2 \u03C0\u03B5\u03B4\u03AF\u03BF\u03C5",duration:"\u0394\u03B9\u03AC\u03C1\u03BA\u03B5\u03B9\u03B1",status:"\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7",remove:"\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE",errors:{NOT_NULL_VIOLATION:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B7\u03B4\u03B5\u03BD\u03B9\u03BA\u03AE"},bookmarks:"\u03A3\u03B5\u03BB\u03B9\u03B4\u03BF\u03B4\u03B5\u03AF\u03BA\u03C4\u03B5\u03C2",back:"\u03A0\u03AF\u03C3\u03C9",operators:{lt:"\u039B\u03B9\u03B3\u03CC\u03C4\u03B5\u03C1\u03BF \u03B1\u03C0\u03CC",gt:"\u039C\u03B5\u03B3\u03B1\u03BB\u03CD\u03C4\u03B5\u03C1\u03BF \u03B1\u03C0\u03CC",gte:"\u039C\u03B5\u03B3\u03B1\u03BB\u03CD\u03C4\u03B5\u03C1\u03BF \u03B1\u03C0\u03CC \u03AE \u03AF\u03C3\u03BF \u03BC\u03B5",contains:"\u03A0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9",empty:"\u0395\u03AF\u03BD\u03B1\u03B9 \u03BA\u03B5\u03BD\u03CC"},value_unique:"\u0397 \u03C4\u03B9\u03BC\u03AE \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03BF\u03BD\u03B1\u03B4\u03B9\u03BA\u03AE",role:"\u03A1\u03CC\u03BB\u03BF\u03C2",create:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1",read:"\u0391\u03BD\u03AC\u03B3\u03BD\u03C9\u03C3\u03B7",update:"\u0395\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7",width:"\u03A0\u03BB\u03AC\u03C4\u03BF\u03C2",height:"\u038E\u03C8\u03BF\u03C2",wysiwyg_options:{remove:"\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE",table:"\u03A0\u03AF\u03BD\u03B1\u03BA\u03B1\u03C2"},choices:"\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AD\u03C2",deselect:"\u0391\u03C0\u03BF\u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03C4\u03B5",editing_in_batch:"\u039C\u03B1\u03B6\u03B9\u03BA\u03AE \u0395\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 {count} \u03A3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03C9\u03BD",settings_project:"\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 \u0388\u03C1\u03B3\u03BF\u03C5",discard_changes:"\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7 \u03B1\u03BB\u03BB\u03B1\u03B3\u03CE\u03BD",add_new:"\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03BD\u03AD\u03BF\u03C5",all:"\u038C\u03BB\u03B1",batch_delete_confirm:"\u0394\u03B5\u03BD \u03AD\u03C7\u03BF\u03C5\u03BD \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03B5\u03AF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1. | \u0395\u03AF\u03C3\u03C4\u03B5 \u03C3\u03AF\u03B3\u03BF\u03C5\u03C1\u03BF\u03B9 \u03CC\u03C4\u03B9 \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03B5\u03C4\u03B5 \u03B1\u03C5\u03C4\u03CC \u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF; \u0391\u03C5\u03C4\u03AE \u03B7 \u03B5\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1 \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03B9\u03C1\u03B5\u03B8\u03B5\u03AF. | \u0395\u03AF\u03C3\u03C4\u03B5 \u03B2\u03AD\u03B2\u03B1\u03B9\u03BF\u03B9 \u03CC\u03C4\u03B9 \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03B5\u03C4\u03B5 \u03B1\u03C5\u03C4\u03AC \u03C4\u03B1 {count} \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1; \u0391\u03C5\u03C4\u03AE \u03B7 \u03B5\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1 \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03B9\u03C1\u03B5\u03B8\u03B5\u03AF.",cancel:"\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7",collection:"\u03A3\u03C5\u03BB\u03BB\u03BF\u03B3\u03AE",collections:"\u03A3\u03C5\u03BB\u03BB\u03BF\u03B3\u03AD\u03C2",fields:{directus_activity:{item:"\u03A3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03A0\u03C1\u03C9\u03C4\u03B5\u03CD\u03BF\u03BD \u039A\u03BB\u03B5\u03B9\u03B4\u03AF",action:"\u0395\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1",collection:"\u03A3\u03C5\u03BB\u03BB\u03BF\u03B3\u03AE",timestamp:"\u0395\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1 \u03C3\u03C4\u03B9\u03C2",user:"\u0395\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1 \u03B1\u03C0\u03CC",comment:"\u03A3\u03C7\u03CC\u03BB\u03B9\u03BF",user_agent:"\u03A0\u03C1\u03AC\u03BA\u03C4\u03BF\u03C1\u03B1\u03C2 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7",ip:"\u0394\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 IP"},directus_collections:{collection:"\u03A3\u03C5\u03BB\u03BB\u03BF\u03B3\u03AE",icon:"\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF",note:"\u03A3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7",hidden:"\u039A\u03C1\u03C5\u03C6\u03CC"},directus_files:{title:"\u03A4\u03AF\u03C4\u03BB\u03BF\u03C2",description:"\u03A0\u03B5\u03C1\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE",tags:"\u0395\u03C4\u03B9\u03BA\u03AD\u03C4\u03B5\u03C2",location:"\u03A4\u03BF\u03C0\u03BF\u03B8\u03B5\u03C3\u03AF\u03B1",metadata:"\u039C\u03B5\u03C4\u03B1\u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03B1",filesize:"\u039C\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5",created_on:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03B8\u03B7\u03BA\u03B5 \u03C3\u03C4\u03B9\u03C2",created_by:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03B8\u03B7\u03BA\u03B5 \u03B1\u03C0\u03CC",embed:"\u0395\u03BD\u03C3\u03C9\u03BC\u03AC\u03C4\u03C9\u03C3\u03B7",uploaded_by:"\u039C\u03B5\u03C4\u03B1\u03C6\u03BF\u03C1\u03C4\u03CE\u03B8\u03B7\u03BA\u03B5 \u03B1\u03C0\u03CC",width:"\u03A0\u03BB\u03AC\u03C4\u03BF\u03C2",uploaded_on:"\u039C\u03B5\u03C4\u03B1\u03C6\u03BF\u03C1\u03C4\u03CE\u03B8\u03B7\u03BA\u03B5 \u03C3\u03C4\u03B9\u03C2",height:"\u038E\u03C8\u03BF\u03C2",duration:"\u0394\u03B9\u03AC\u03C1\u03BA\u03B5\u03B9\u03B1"},directus_users:{first_name:"\u038C\u03BD\u03BF\u03BC\u03B1",last_name:"\u0395\u03C0\u03CE\u03BD\u03C5\u03BC\u03BF",email:"\u0397\u03BB\u03B5\u03BA\u03C4\u03C1\u03BF\u03BD\u03B9\u03BA\u03CC \u03C4\u03B1\u03C7\u03C5\u03B4\u03C1\u03BF\u03BC\u03B5\u03AF\u03BF",password:"\u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2",avatar:"\u0386\u03B2\u03B1\u03C4\u03B1\u03C1",location:"\u03A4\u03BF\u03C0\u03BF\u03B8\u03B5\u03C3\u03AF\u03B1",title:"\u03A4\u03AF\u03C4\u03BB\u03BF\u03C2",description:"\u03A0\u03B5\u03C1\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE",tags:"\u0395\u03C4\u03B9\u03BA\u03AD\u03C4\u03B5\u03C2",theme:"\u0398\u03AD\u03BC\u03B1",tfa_secret:"\u0388\u03BB\u03B5\u03B3\u03C7\u03BF\u03C2 \u03C4\u03B1\u03C5\u03C4\u03CC\u03C4\u03B7\u03C4\u03B1\u03C2 \u03B4\u03C5\u03BF \u03C0\u03B1\u03C1\u03B1\u03B3\u03CC\u03BD\u03C4\u03C9\u03BD",status:"\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7",role:"\u03A1\u03CC\u03BB\u03BF\u03C2"},directus_settings:{project_name:"\u038C\u03BD\u03BF\u03BC\u03B1 \u0388\u03C1\u03B3\u03BF\u03C5"},directus_shares:{name:"\u038C\u03BD\u03BF\u03BC\u03B1",role:"\u03A1\u03CC\u03BB\u03BF\u03C2",password:"\u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2"},directus_fields:{note:"\u03A3\u03B7\u03BC\u03B5\u03AF\u03C9\u03C3\u03B7",hidden:"\u039A\u03C1\u03C5\u03C6\u03CC",translation:"\u039C\u03B5\u03C4\u03B1\u03C6\u03C1\u03AC\u03C3\u03B5\u03B9\u03C2 \u039F\u03BD\u03CC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03A0\u03B5\u03B4\u03AF\u03BF\u03C5"},directus_roles:{name:"\u038C\u03BD\u03BF\u03BC\u03B1 \u03A1\u03CC\u03BB\u03BF\u03C5",description:"\u03A0\u03B5\u03C1\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE"},directus_webhooks:{name:"\u038C\u03BD\u03BF\u03BC\u03B1",status:"\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7",value:"\u03A4\u03B9\u03BC\u03AE",collections:"\u03A3\u03C5\u03BB\u03BB\u03BF\u03B3\u03AD\u03C2"}},field_options:{directus_activity:{create:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1",update:"\u0395\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7"},directus_collections:{translation:"\u039C\u03B5\u03C4\u03AC\u03C6\u03C1\u03B1\u03C3\u03B7",archive_divider:"\u0391\u03C1\u03C7\u03B5\u03B9\u03BF\u03B8\u03AD\u03C4\u03B7\u03C3\u03B7"},directus_roles:{fields:{icon_name:"\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF",name_name:"\u038C\u03BD\u03BF\u03BC\u03B1"},collections_name:"\u03A3\u03C5\u03BB\u03BB\u03BF\u03B3\u03AD\u03C2"},directus_webhooks:{actions_create:"\u0394\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1",actions_update:"\u0395\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7",headers:{value:"\u03A4\u03B9\u03BC\u03AE"}}},comment:"\u03A3\u03C7\u03CC\u03BB\u03B9\u03BF",delete_field_are_you_sure:'\u0395\u03AF\u03C3\u03B1\u03B9 \u03C3\u03AF\u03B3\u03BF\u03C5\u03C1\u03BF\u03C2 \u03CC\u03C4\u03B9 \u03B8\u03AD\u03BB\u03B5\u03B9\u03C2 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03B5\u03B9\u03C2 \u03C4\u03BF \u03C0\u03B5\u03B4\u03AF\u03BF "{field}"; \u0397 \u03B5\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1 \u03B1\u03C5\u03C4\u03AE \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03B9\u03C1\u03B5\u03B8\u03B5\u03AF.',description:"\u03A0\u03B5\u03C1\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE",done:"\u039F\u03BB\u03BF\u03BA\u03BB\u03B7\u03C1\u03CE\u03B8\u03B7\u03BA\u03B5",duplicate:"\u0391\u03BD\u03C4\u03AF\u03B3\u03C1\u03B1\u03C6\u03BF",email:"\u0397\u03BB\u03B5\u03BA\u03C4\u03C1\u03BF\u03BD\u03B9\u03BA\u03CC \u03C4\u03B1\u03C7\u03C5\u03B4\u03C1\u03BF\u03BC\u03B5\u03AF\u03BF",embed:"\u0395\u03BD\u03C3\u03C9\u03BC\u03AC\u03C4\u03C9\u03C3\u03B7",field:"\u03A0\u03B5\u03B4\u03AF\u03BF | \u03A0\u03B5\u03B4\u03AF\u03B1",file:"\u0391\u03C1\u03C7\u03B5\u03AF\u03BF",file_library:"\u0392\u03B9\u03B2\u03BB\u03B9\u03BF\u03B8\u03AE\u03BA\u03B7 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD",forgot_password:"\u039E\u03AD\u03C7\u03B1\u03C3\u03B1 \u03C4\u03BF\u03BD \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2",hidden:"\u039A\u03C1\u03C5\u03C6\u03CC",icon:"\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF",info:"\u03A0\u03BB\u03B7\u03C1\u03BF\u03C6\u03BF\u03C1\u03AF\u03B5\u03C2",latency:"\u039A\u03B1\u03B8\u03C5\u03C3\u03C4\u03AD\u03C1\u03B7\u03C3\u03B7",options:"\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AD\u03C2",otp:"\u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03BC\u03B9\u03AC\u03C2 \u03C7\u03C1\u03AE\u03C3\u03B7\u03C2",password:"\u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2",permissions:"\u0394\u03B9\u03BA\u03B1\u03B9\u03CE\u03BC\u03B1\u03C4\u03B1",relationship:"\u03A3\u03C7\u03AD\u03C3\u03B7",reset:"\u0395\u03C0\u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC",reset_password:"\u0395\u03C0\u03B1\u03BD\u03B1\u03C6\u03BF\u03C1\u03AC \u039A\u03C9\u03B4\u03B9\u03BA\u03BF\u03CD",save:"\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7",search:"\u0391\u03BD\u03B1\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7",settings:"\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2",translation:"\u039C\u03B5\u03C4\u03AC\u03C6\u03C1\u03B1\u03C3\u03B7",value:"\u03A4\u03B9\u03BC\u03AE",interfaces:{filter:{all:"\u038C\u03BB\u03B1"},"presentation-links":{primary:"\u039A\u03C5\u03C1\u03AF\u03C9\u03C2"},"system-collection":{collection:"\u03A3\u03C5\u03BB\u03BB\u03BF\u03B3\u03AE"},"system-collections":{collections:"\u03A3\u03C5\u03BB\u03BB\u03BF\u03B3\u03AD\u03C2"},file:{file:"\u0391\u03C1\u03C7\u03B5\u03AF\u03BF"},files:{files:"\u0391\u03C1\u03C7\u03B5\u03AF\u03B1"},"select-icon":{icon:"\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF"},tags:{tags:"\u0395\u03C4\u03B9\u03BA\u03AD\u03C4\u03B5\u03C2"}},displays:{collection:{collection:"\u03A3\u03C5\u03BB\u03BB\u03BF\u03B3\u03AE"},file:{file:"\u0391\u03C1\u03C7\u03B5\u03AF\u03BF"},"formatted-value":{prefix:"\u03A0\u03C1\u03CC\u03B8\u03B5\u03BC\u03B1",suffix:"\u0395\u03C0\u03AF\u03B8\u03B5\u03BC\u03B1",icon:"\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF",text:"\u039A\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF"},icon:{icon:"\u0395\u03B9\u03BA\u03BF\u03BD\u03AF\u03B4\u03B9\u03BF"},user:{avatar:"\u0386\u03B2\u03B1\u03C4\u03B1\u03C1",name:"\u038C\u03BD\u03BF\u03BC\u03B1",both:"\u039A\u03B1\u03B9 \u03C4\u03B1 \u03B4\u03CD\u03BF"}},layouts:{cards:{cards:"\u039A\u03AC\u03C1\u03C4\u03B5\u03C2",image_source:"\u03A0\u03B7\u03B3\u03AE \u03B5\u03B9\u03BA\u03CC\u03BD\u03B1\u03C2",title:"\u03A4\u03AF\u03C4\u03BB\u03BF\u03C2",subtitle:"\u03A5\u03C0\u03CC\u03C4\u03B9\u03C4\u03BB\u03BF\u03C2"},tabular:{tabular:"\u03A0\u03AF\u03BD\u03B1\u03BA\u03B1\u03C2",comfortable:"\u0386\u03BD\u03B5\u03C4\u03BF\u03C2",compact:"\u03A3\u03C5\u03BC\u03C0\u03B1\u03B3\u03AE\u03C2",cozy:"\u039A\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03CC"}}},a=e.avatar,r=e.edit_field,t=e.item_revision,i=e.duplicate_field,o=e.half_width,s=e.full_width,n=e.fill_width,l=e.field_name_translations,d=e.enter_password_to_enable_tfa,_=e.add_field,c=e.role_name,v=e.exclusive,u=e.children,m=e.show_archived_items,f=e.edited,p=e.required,h=e.required_for_app_access,b=e.requires_value,w=e.create_preset,y=e.create_role,g=e.create_user,k=e.create_webhook,x=e.invite_users,q=e.invite,I=e.email_already_invited,j=e.emails,E=e.connection_excellent,N=e.connection_good,O=e.connection_fair,P=e.connection_poor,R=e.primary,S=e.rename_folder,T=e.delete_folder,L=e.prefix,z=e.suffix,A=e.reset_bookmark,D=e.update_bookmark,U=e.delete_bookmark,G=e.logoutReason,V=e.public_description,W=e.not_allowed,X=e.directus_version,B=e.node_version,C=e.os_type,F=e.os_version,H=e.os_uptime,J=e.os_totalmem,K=e.archive,M=e.archive_confirm,Q=e.archive_confirm_count,Y=e.reset_system_permissions_to,Z=e.recommended_defaults,$=e.unarchive,ee=e.validationError,ae=e.all_access,re=e.no_access,te=e.field_standard,ie=e.create_field,oe=e.hidden_on_detail,se=e.text,ne=e.auto_generate,le=e.add_note,de=e.default_value,_e=e.next,ce=e.note,ve=e.length,ue=e.unique,me=e.title,fe=e.leave_comment,pe=e.submit,he=e.months,be=e.checksum,we=e.owner,ye=e.download,ge=e.name,ke=e.created_by,xe=e.created_on,qe=e.save_and_stay,Ie=e.comments,je=e.create_collection,Ee=e.users,Ne=e.activity,Oe=e.action,Pe=e.ip_address,Re=e.user_agent,Se=e.field_width,Te=e.duration,Le=e.status,ze=e.remove,Ae=e.errors,De=e.bookmarks,Ue=e.back,Ge=e.operators,Ve=e.value_unique,We=e.role,Xe=e.create,Be=e.read,Ce=e.update,Fe=e.width,He=e.height,Je=e.wysiwyg_options,Ke=e.choices,Me=e.deselect,Qe=e.editing_in_batch,Ye=e.settings_project,Ze=e.discard_changes,$e=e.add_new,ea=e.all,aa=e.batch_delete_confirm,ra=e.cancel,ta=e.collection,ia=e.collections,oa=e.fields,sa=e.field_options,na=e.comment,la=e.delete_field_are_you_sure,da=e.description,_a=e.done,ca=e.duplicate,va=e.email,ua=e.embed,ma=e.field,fa=e.file,pa=e.file_library,ha=e.forgot_password,ba=e.hidden,wa=e.icon,ya=e.info,ga=e.latency,ka=e.options,xa=e.otp,qa=e.password,Ia=e.permissions,ja=e.relationship,Ea=e.reset,Na=e.reset_password,Oa=e.save,Pa=e.search,Ra=e.settings,Sa=e.translation,Ta=e.value,La=e.interfaces,za=e.displays,Aa=e.layouts;export{Oe as action,Ne as activity,_ as add_field,$e as add_new,le as add_note,ea as all,ae as all_access,K as archive,M as archive_confirm,Q as archive_confirm_count,ne as auto_generate,a as avatar,Ue as back,aa as batch_delete_confirm,De as bookmarks,ra as cancel,be as checksum,u as children,Ke as choices,ta as collection,ia as collections,na as comment,Ie as comments,E as connection_excellent,O as connection_fair,N as connection_good,P as connection_poor,Xe as create,je as create_collection,ie as create_field,w as create_preset,y as create_role,g as create_user,k as create_webhook,ke as created_by,xe as created_on,e as default,de as default_value,U as delete_bookmark,la as delete_field_are_you_sure,T as delete_folder,da as description,Me as deselect,X as directus_version,Ze as discard_changes,za as displays,_a as done,ye as download,ca as duplicate,i as duplicate_field,Te as duration,r as edit_field,f as edited,Qe as editing_in_batch,va as email,I as email_already_invited,j as emails,ua as embed,d as enter_password_to_enable_tfa,Ae as errors,v as exclusive,ma as field,l as field_name_translations,sa as field_options,te as field_standard,Se as field_width,oa as fields,fa as file,pa as file_library,n as fill_width,ha as forgot_password,s as full_width,o as half_width,He as height,ba as hidden,oe as hidden_on_detail,wa as icon,ya as info,La as interfaces,q as invite,x as invite_users,Pe as ip_address,t as item_revision,ga as latency,Aa as layouts,fe as leave_comment,ve as length,G as logoutReason,he as months,ge as name,_e as next,re as no_access,B as node_version,W as not_allowed,ce as note,Ge as operators,ka as options,J as os_totalmem,C as os_type,H as os_uptime,F as os_version,xa as otp,we as owner,qa as password,Ia as permissions,L as prefix,R as primary,V as public_description,Be as read,Z as recommended_defaults,ja as relationship,ze as remove,S as rename_folder,p as required,h as required_for_app_access,b as requires_value,Ea as reset,A as reset_bookmark,Na as reset_password,Y as reset_system_permissions_to,We as role,c as role_name,Oa as save,qe as save_and_stay,Pa as search,Ra as settings,Ye as settings_project,m as show_archived_items,Le as status,pe as submit,z as suffix,se as text,me as title,Sa as translation,$ as unarchive,ue as unique,Ce as update,D as update_bookmark,Re as user_agent,Ee as users,ee as validationError,Ta as value,Ve as value_unique,Fe as width,Je as wysiwyg_options};
|