directus 9.23.3 → 9.23.4

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.
Files changed (113) hide show
  1. package/dist/app.js +12 -12
  2. package/dist/auth/drivers/ldap.js +22 -22
  3. package/dist/auth/drivers/local.js +7 -7
  4. package/dist/auth/drivers/oauth2.js +27 -25
  5. package/dist/auth/drivers/openid.js +32 -30
  6. package/dist/auth/drivers/saml.js +10 -10
  7. package/dist/auth.js +4 -3
  8. package/dist/cache.js +16 -11
  9. package/dist/cli/commands/bootstrap/index.js +5 -4
  10. package/dist/cli/utils/create-db-connection.js +1 -1
  11. package/dist/cli/utils/create-env/index.js +1 -1
  12. package/dist/constants.d.ts +1 -0
  13. package/dist/constants.js +6 -5
  14. package/dist/controllers/activity.js +9 -9
  15. package/dist/controllers/assets.js +19 -18
  16. package/dist/controllers/auth.js +13 -13
  17. package/dist/controllers/collections.js +10 -10
  18. package/dist/controllers/dashboards.js +9 -9
  19. package/dist/controllers/extensions.js +3 -3
  20. package/dist/controllers/fields.js +16 -16
  21. package/dist/controllers/files.js +16 -15
  22. package/dist/controllers/flows.js +11 -11
  23. package/dist/controllers/folders.js +9 -9
  24. package/dist/controllers/graphql.js +6 -6
  25. package/dist/controllers/items.js +17 -17
  26. package/dist/controllers/notifications.js +9 -9
  27. package/dist/controllers/operations.js +9 -9
  28. package/dist/controllers/panels.js +9 -9
  29. package/dist/controllers/permissions.js +9 -9
  30. package/dist/controllers/presets.js +9 -9
  31. package/dist/controllers/relations.js +10 -10
  32. package/dist/controllers/revisions.js +3 -3
  33. package/dist/controllers/roles.js +9 -9
  34. package/dist/controllers/schema.js +5 -5
  35. package/dist/controllers/server.js +7 -7
  36. package/dist/controllers/settings.js +2 -2
  37. package/dist/controllers/shares.js +13 -13
  38. package/dist/controllers/users.js +16 -16
  39. package/dist/controllers/utils.js +5 -5
  40. package/dist/controllers/webhooks.js +9 -9
  41. package/dist/database/helpers/fn/types.d.ts +0 -1
  42. package/dist/database/helpers/fn/types.js +0 -2
  43. package/dist/database/helpers/index.d.ts +3 -3
  44. package/dist/database/index.js +5 -5
  45. package/dist/database/migrations/20210805B-change-image-metadata-structure.js +15 -15
  46. package/dist/database/migrations/run.js +1 -1
  47. package/dist/database/run-ast.js +4 -4
  48. package/dist/database/system-data/collections/index.js +2 -2
  49. package/dist/database/system-data/fields/index.js +3 -3
  50. package/dist/env.js +1 -1
  51. package/dist/extensions.js +10 -10
  52. package/dist/flows.js +33 -31
  53. package/dist/logger.d.ts +1 -0
  54. package/dist/logger.js +32 -32
  55. package/dist/mailer.js +16 -16
  56. package/dist/messenger.js +4 -4
  57. package/dist/middleware/authenticate.js +1 -1
  58. package/dist/middleware/cache.js +11 -11
  59. package/dist/middleware/collection-exists.js +3 -3
  60. package/dist/middleware/cors.js +7 -7
  61. package/dist/middleware/error-handler.js +2 -2
  62. package/dist/middleware/extract-token.js +2 -2
  63. package/dist/middleware/graphql.js +12 -6
  64. package/dist/middleware/rate-limiter-global.js +5 -5
  65. package/dist/middleware/rate-limiter-ip.js +2 -2
  66. package/dist/middleware/respond.js +16 -16
  67. package/dist/middleware/sanitize-query.js +1 -1
  68. package/dist/operations/exec/index.js +2 -2
  69. package/dist/rate-limiter.js +1 -1
  70. package/dist/request/validate-ip.js +2 -2
  71. package/dist/server.js +4 -4
  72. package/dist/services/activity.js +14 -14
  73. package/dist/services/assets.js +6 -6
  74. package/dist/services/authentication.js +9 -9
  75. package/dist/services/collections.js +9 -9
  76. package/dist/services/fields.js +5 -5
  77. package/dist/services/files.js +12 -12
  78. package/dist/services/graphql/index.js +100 -98
  79. package/dist/services/import-export.js +6 -6
  80. package/dist/services/items.js +6 -6
  81. package/dist/services/mail/index.js +5 -5
  82. package/dist/services/meta.js +1 -0
  83. package/dist/services/notifications.js +4 -4
  84. package/dist/services/revisions.js +3 -3
  85. package/dist/services/roles.js +5 -5
  86. package/dist/services/server.js +27 -27
  87. package/dist/services/shares.js +9 -9
  88. package/dist/services/specifications.js +5 -3
  89. package/dist/services/users.d.ts +1 -5
  90. package/dist/services/users.js +24 -27
  91. package/dist/storage/register-locations.js +1 -1
  92. package/dist/utils/apply-query.js +2 -1
  93. package/dist/utils/dynamic-import.js +1 -1
  94. package/dist/utils/generate-hash.js +1 -1
  95. package/dist/utils/get-ast-from-query.js +1 -1
  96. package/dist/utils/get-auth-providers.js +1 -1
  97. package/dist/utils/get-cache-headers.js +3 -3
  98. package/dist/utils/get-collection-from-alias.js +1 -0
  99. package/dist/utils/get-default-value.js +1 -1
  100. package/dist/utils/get-ip-from-req.js +2 -2
  101. package/dist/utils/get-permissions.js +11 -11
  102. package/dist/utils/get-schema.js +2 -2
  103. package/dist/utils/is-url-allowed.js +5 -2
  104. package/dist/utils/sanitize-query.js +26 -26
  105. package/dist/utils/should-skip-cache.js +2 -2
  106. package/dist/utils/track.js +16 -16
  107. package/dist/utils/validate-query.js +1 -1
  108. package/dist/utils/validate-storage.js +8 -8
  109. package/dist/webhooks.js +2 -2
  110. package/package.json +13 -13
  111. package/dist/utils/redact-header-cookies.d.ts +0 -1
  112. package/dist/utils/redact-header-cookies.js +0 -11
  113. /package/dist/{utils/redact-header-cookies.test.d.ts → logger.test.d.ts} +0 -0
@@ -181,7 +181,7 @@ async function getASTFromQuery(collection, query, schema, options) {
181
181
  continue;
182
182
  }
183
183
  // update query alias for children parseFields
184
- const deepAlias = getDeepQuery(deep?.[fieldKey] || {})?.alias;
184
+ const deepAlias = getDeepQuery(deep?.[fieldKey] || {})?.['alias'];
185
185
  if (!(0, lodash_1.isEmpty)(deepAlias))
186
186
  query.alias = deepAlias;
187
187
  child = {
@@ -7,7 +7,7 @@ exports.getAuthProviders = void 0;
7
7
  const utils_1 = require("@directus/shared/utils");
8
8
  const env_1 = __importDefault(require("../env"));
9
9
  function getAuthProviders() {
10
- return (0, utils_1.toArray)(env_1.default.AUTH_PROVIDERS)
10
+ return (0, utils_1.toArray)(env_1.default['AUTH_PROVIDERS'])
11
11
  .filter((provider) => provider && env_1.default[`AUTH_${provider.toUpperCase()}_DRIVER`])
12
12
  .map((provider) => ({
13
13
  name: provider,
@@ -22,7 +22,7 @@ function getCacheControlHeader(req, ttl, globalCacheSettings, personalized) {
22
22
  if (ttl === undefined || ttl < 0)
23
23
  return 'no-cache';
24
24
  // When the API cache can invalidate at any moment
25
- if (globalCacheSettings && env_1.default.CACHE_AUTO_PURGE === true)
25
+ if (globalCacheSettings && env_1.default['CACHE_AUTO_PURGE'] === true)
26
26
  return 'no-cache';
27
27
  const headerValues = [];
28
28
  // When caching depends on the authentication status of the users
@@ -35,8 +35,8 @@ function getCacheControlHeader(req, ttl, globalCacheSettings, personalized) {
35
35
  const ttlSeconds = Math.round(ttl / 1000);
36
36
  headerValues.push(`max-age=${ttlSeconds}`);
37
37
  // When the s-maxage flag should be included
38
- if (globalCacheSettings && Number.isInteger(env_1.default.CACHE_CONTROL_S_MAXAGE) && env_1.default.CACHE_CONTROL_S_MAXAGE >= 0) {
39
- headerValues.push(`s-maxage=${env_1.default.CACHE_CONTROL_S_MAXAGE}`);
38
+ if (globalCacheSettings && Number.isInteger(env_1.default['CACHE_CONTROL_S_MAXAGE']) && env_1.default['CACHE_CONTROL_S_MAXAGE'] >= 0) {
39
+ headerValues.push(`s-maxage=${env_1.default['CACHE_CONTROL_S_MAXAGE']}`);
40
40
  }
41
41
  return headerValues.join(', ');
42
42
  }
@@ -11,5 +11,6 @@ function getCollectionFromAlias(alias, aliasMap) {
11
11
  return aliasValue.collection;
12
12
  }
13
13
  }
14
+ return undefined;
14
15
  }
15
16
  exports.getCollectionFromAlias = getCollectionFromAlias;
@@ -52,7 +52,7 @@ function castToObject(value) {
52
52
  return (0, utils_1.parseJSON)(value);
53
53
  }
54
54
  catch (err) {
55
- if (env_1.default.NODE_ENV === 'development') {
55
+ if (env_1.default['NODE_ENV'] === 'development') {
56
56
  logger_1.default.error(err);
57
57
  }
58
58
  return value;
@@ -9,8 +9,8 @@ const env_1 = __importDefault(require("../env"));
9
9
  const logger_1 = __importDefault(require("../logger"));
10
10
  function getIPFromReq(req) {
11
11
  let ip = req.ip;
12
- if (env_1.default.IP_CUSTOM_HEADER) {
13
- const customIPHeaderValue = req.get(env_1.default.IP_CUSTOM_HEADER);
12
+ if (env_1.default['IP_CUSTOM_HEADER']) {
13
+ const customIPHeaderValue = req.get(env_1.default['IP_CUSTOM_HEADER']);
14
14
  if (typeof customIPHeaderValue === 'string' && (0, net_1.isIP)(customIPHeaderValue) !== 0) {
15
15
  ip = customIPHeaderValue;
16
16
  }
@@ -22,7 +22,7 @@ async function getPermissions(accountability, schema) {
22
22
  let permissions = [];
23
23
  const { user, role, app, admin, share_scope } = accountability;
24
24
  const cacheKey = `permissions-${(0, object_hash_1.default)({ user, role, app, admin, share_scope })}`;
25
- if (cache && env_1.default.CACHE_PERMISSIONS !== false) {
25
+ if (cache && env_1.default['CACHE_PERMISSIONS'] !== false) {
26
26
  let cachedPermissions;
27
27
  try {
28
28
  cachedPermissions = await (0, cache_1.getSystemCache)(cacheKey);
@@ -31,20 +31,20 @@ async function getPermissions(accountability, schema) {
31
31
  logger_1.default.warn(err, `[cache] Couldn't read key ${cacheKey}. ${err.message}`);
32
32
  }
33
33
  if (cachedPermissions) {
34
- if (!cachedPermissions.containDynamicData) {
35
- return processPermissions(accountability, cachedPermissions.permissions, {});
34
+ if (!cachedPermissions['containDynamicData']) {
35
+ return processPermissions(accountability, cachedPermissions['permissions'], {});
36
36
  }
37
- const cachedFilterContext = await (0, cache_1.getCacheValue)(cache, `filterContext-${(0, object_hash_1.default)({ user, role, permissions: cachedPermissions.permissions })}`);
37
+ const cachedFilterContext = await (0, cache_1.getCacheValue)(cache, `filterContext-${(0, object_hash_1.default)({ user, role, permissions: cachedPermissions['permissions'] })}`);
38
38
  if (cachedFilterContext) {
39
- return processPermissions(accountability, cachedPermissions.permissions, cachedFilterContext);
39
+ return processPermissions(accountability, cachedPermissions['permissions'], cachedFilterContext);
40
40
  }
41
41
  else {
42
- const { permissions: parsedPermissions, requiredPermissionData, containDynamicData, } = parsePermissions(cachedPermissions.permissions);
42
+ const { permissions: parsedPermissions, requiredPermissionData, containDynamicData, } = parsePermissions(cachedPermissions['permissions']);
43
43
  permissions = parsedPermissions;
44
44
  const filterContext = containDynamicData
45
45
  ? await getFilterContext(schema, accountability, requiredPermissionData)
46
46
  : {};
47
- if (containDynamicData && env_1.default.CACHE_ENABLED !== false) {
47
+ if (containDynamicData && env_1.default['CACHE_ENABLED'] !== false) {
48
48
  await (0, cache_1.setCacheValue)(cache, `filterContext-${(0, object_hash_1.default)({ user, role, permissions })}`, filterContext);
49
49
  }
50
50
  return processPermissions(accountability, permissions, filterContext);
@@ -71,9 +71,9 @@ async function getPermissions(accountability, schema) {
71
71
  const filterContext = containDynamicData
72
72
  ? await getFilterContext(schema, accountability, requiredPermissionData)
73
73
  : {};
74
- if (cache && env_1.default.CACHE_PERMISSIONS !== false) {
74
+ if (cache && env_1.default['CACHE_PERMISSIONS'] !== false) {
75
75
  await (0, cache_1.setSystemCache)(cacheKey, { permissions, containDynamicData });
76
- if (containDynamicData && env_1.default.CACHE_ENABLED !== false) {
76
+ if (containDynamicData && env_1.default['CACHE_ENABLED'] !== false) {
77
77
  await (0, cache_1.setCacheValue)(cache, `filterContext-${(0, object_hash_1.default)({ user, role, permissions })}`, filterContext);
78
78
  }
79
79
  }
@@ -137,12 +137,12 @@ async function getFilterContext(schema, accountability, requiredPermissionData)
137
137
  const rolesService = new roles_1.RolesService({ schema });
138
138
  const filterContext = {};
139
139
  if (accountability.user && requiredPermissionData.$CURRENT_USER.length > 0) {
140
- filterContext.$CURRENT_USER = await usersService.readOne(accountability.user, {
140
+ filterContext['$CURRENT_USER'] = await usersService.readOne(accountability.user, {
141
141
  fields: requiredPermissionData.$CURRENT_USER,
142
142
  });
143
143
  }
144
144
  if (accountability.role && requiredPermissionData.$CURRENT_ROLE.length > 0) {
145
- filterContext.$CURRENT_ROLE = await rolesService.readOne(accountability.role, {
145
+ filterContext['$CURRENT_ROLE'] = await rolesService.readOne(accountability.role, {
146
146
  fields: requiredPermissionData.$CURRENT_ROLE,
147
147
  });
148
148
  }
@@ -21,7 +21,7 @@ async function getSchema(options) {
21
21
  const database = options?.database || (0, database_1.default)();
22
22
  const schemaInspector = (0, schema_1.default)(database);
23
23
  let result;
24
- if (!options?.bypassCache && env_1.default.CACHE_SCHEMA !== false) {
24
+ if (!options?.bypassCache && env_1.default['CACHE_SCHEMA'] !== false) {
25
25
  let cachedSchema;
26
26
  try {
27
27
  cachedSchema = await (0, cache_1.getSchemaCache)();
@@ -61,7 +61,7 @@ async function getDatabaseSchema(database, schemaInspector) {
61
61
  ...collections_1.systemCollectionRows,
62
62
  ];
63
63
  for (const [collection, info] of Object.entries(schemaOverview)) {
64
- if ((0, utils_1.toArray)(env_1.default.DB_EXCLUDE_TABLES).includes(collection)) {
64
+ if ((0, utils_1.toArray)(env_1.default['DB_EXCLUDE_TABLES']).includes(collection)) {
65
65
  logger_1.default.trace(`Collection "${collection}" is configured to be excluded and will be ignored`);
66
66
  continue;
67
67
  }
@@ -13,7 +13,8 @@ function isUrlAllowed(url, allowList) {
13
13
  const urlAllowList = (0, utils_1.toArray)(allowList);
14
14
  if (urlAllowList.includes(url))
15
15
  return true;
16
- const parsedWhitelist = urlAllowList.map((allowedURL) => {
16
+ const parsedWhitelist = urlAllowList
17
+ .map((allowedURL) => {
17
18
  try {
18
19
  const { hostname, pathname } = new url_1.URL(allowedURL);
19
20
  return hostname + pathname;
@@ -21,7 +22,9 @@ function isUrlAllowed(url, allowList) {
21
22
  catch {
22
23
  logger_1.default.warn(`Invalid URL used "${url}"`);
23
24
  }
24
- });
25
+ return null;
26
+ })
27
+ .filter((f) => f);
25
28
  try {
26
29
  const { hostname, pathname } = new url_1.URL(url);
27
30
  return parsedWhitelist.includes(hostname + pathname);
@@ -10,49 +10,49 @@ const logger_1 = __importDefault(require("../logger"));
10
10
  const types_1 = require("../types");
11
11
  function sanitizeQuery(rawQuery, accountability) {
12
12
  const query = {};
13
- if (rawQuery.limit !== undefined) {
14
- const limit = sanitizeLimit(rawQuery.limit);
13
+ if (rawQuery['limit'] !== undefined) {
14
+ const limit = sanitizeLimit(rawQuery['limit']);
15
15
  if (typeof limit === 'number') {
16
16
  query.limit = limit;
17
17
  }
18
18
  }
19
- if (rawQuery.fields) {
20
- query.fields = sanitizeFields(rawQuery.fields);
19
+ if (rawQuery['fields']) {
20
+ query.fields = sanitizeFields(rawQuery['fields']);
21
21
  }
22
- if (rawQuery.groupBy) {
23
- query.group = sanitizeFields(rawQuery.groupBy);
22
+ if (rawQuery['groupBy']) {
23
+ query.group = sanitizeFields(rawQuery['groupBy']);
24
24
  }
25
- if (rawQuery.aggregate) {
26
- query.aggregate = sanitizeAggregate(rawQuery.aggregate);
25
+ if (rawQuery['aggregate']) {
26
+ query.aggregate = sanitizeAggregate(rawQuery['aggregate']);
27
27
  }
28
- if (rawQuery.sort) {
29
- query.sort = sanitizeSort(rawQuery.sort);
28
+ if (rawQuery['sort']) {
29
+ query.sort = sanitizeSort(rawQuery['sort']);
30
30
  }
31
- if (rawQuery.filter) {
32
- query.filter = sanitizeFilter(rawQuery.filter, accountability || null);
31
+ if (rawQuery['filter']) {
32
+ query.filter = sanitizeFilter(rawQuery['filter'], accountability || null);
33
33
  }
34
- if (rawQuery.offset) {
35
- query.offset = sanitizeOffset(rawQuery.offset);
34
+ if (rawQuery['offset']) {
35
+ query.offset = sanitizeOffset(rawQuery['offset']);
36
36
  }
37
- if (rawQuery.page) {
38
- query.page = sanitizePage(rawQuery.page);
37
+ if (rawQuery['page']) {
38
+ query.page = sanitizePage(rawQuery['page']);
39
39
  }
40
- if (rawQuery.meta) {
41
- query.meta = sanitizeMeta(rawQuery.meta);
40
+ if (rawQuery['meta']) {
41
+ query.meta = sanitizeMeta(rawQuery['meta']);
42
42
  }
43
- if (rawQuery.search && typeof rawQuery.search === 'string') {
44
- query.search = rawQuery.search;
43
+ if (rawQuery['search'] && typeof rawQuery['search'] === 'string') {
44
+ query.search = rawQuery['search'];
45
45
  }
46
- if (rawQuery.export) {
47
- query.export = rawQuery.export;
46
+ if (rawQuery['export']) {
47
+ query.export = rawQuery['export'];
48
48
  }
49
- if (rawQuery.deep) {
49
+ if (rawQuery['deep']) {
50
50
  if (!query.deep)
51
51
  query.deep = {};
52
- query.deep = sanitizeDeep(rawQuery.deep, accountability);
52
+ query.deep = sanitizeDeep(rawQuery['deep'], accountability);
53
53
  }
54
- if (rawQuery.alias) {
55
- query.alias = sanitizeAlias(rawQuery.alias);
54
+ if (rawQuery['alias']) {
55
+ query.alias = sanitizeAlias(rawQuery['alias']);
56
56
  }
57
57
  return query;
58
58
  }
@@ -11,10 +11,10 @@ const url_1 = require("./url");
11
11
  function shouldSkipCache(req) {
12
12
  const env = (0, env_1.getEnv)();
13
13
  // Always skip cache for requests coming from the data studio based on Referer header
14
- const adminUrl = new url_1.Url(env.PUBLIC_URL).addPath('admin').toString();
14
+ const adminUrl = new url_1.Url(env['PUBLIC_URL']).addPath('admin').toString();
15
15
  if (req.get('Referer')?.startsWith(adminUrl))
16
16
  return true;
17
- if (env.CACHE_SKIP_ALLOWED && req.get('cache-control')?.includes('no-store'))
17
+ if (env['CACHE_SKIP_ALLOWED'] && req.get('cache-control')?.includes('no-store'))
18
18
  return true;
19
19
  return false;
20
20
  }
@@ -14,13 +14,13 @@ const logger_1 = __importDefault(require("../logger"));
14
14
  const get_milliseconds_1 = require("./get-milliseconds");
15
15
  async function track(event) {
16
16
  const axios = (await import('axios')).default;
17
- if (env_1.default.TELEMETRY !== false) {
17
+ if (env_1.default['TELEMETRY'] !== false) {
18
18
  const info = await getEnvInfo(event);
19
19
  try {
20
20
  await axios.post('https://telemetry.directus.io/', info);
21
21
  }
22
22
  catch (err) {
23
- if (env_1.default.NODE_ENV === 'development') {
23
+ if (env_1.default['NODE_ENV'] === 'development') {
24
24
  logger_1.default.error(err);
25
25
  }
26
26
  }
@@ -31,9 +31,9 @@ async function getEnvInfo(event) {
31
31
  return {
32
32
  version: package_json_1.version,
33
33
  event: event,
34
- project_id: env_1.default.KEY,
34
+ project_id: env_1.default['KEY'],
35
35
  machine_id: await (0, node_machine_id_1.machineId)(),
36
- environment: env_1.default.NODE_ENV,
36
+ environment: env_1.default['NODE_ENV'],
37
37
  stack: 'node',
38
38
  os: {
39
39
  arch: os_1.default.arch(),
@@ -41,36 +41,36 @@ async function getEnvInfo(event) {
41
41
  release: os_1.default.release(),
42
42
  },
43
43
  rate_limiter: {
44
- enabled: env_1.default.RATE_LIMITER_ENABLED,
45
- points: +env_1.default.RATE_LIMITER_POINTS,
46
- duration: +env_1.default.RATE_LIMITER_DURATION,
47
- store: env_1.default.RATE_LIMITER_STORE,
44
+ enabled: env_1.default['RATE_LIMITER_ENABLED'],
45
+ points: +env_1.default['RATE_LIMITER_POINTS'],
46
+ duration: +env_1.default['RATE_LIMITER_DURATION'],
47
+ store: env_1.default['RATE_LIMITER_STORE'],
48
48
  },
49
49
  cache: {
50
- enabled: env_1.default.CACHE_ENABLED,
51
- ttl: (0, get_milliseconds_1.getMilliseconds)(env_1.default.CACHE_TTL),
52
- store: env_1.default.CACHE_STORE,
50
+ enabled: env_1.default['CACHE_ENABLED'],
51
+ ttl: (0, get_milliseconds_1.getMilliseconds)(env_1.default['CACHE_TTL']),
52
+ store: env_1.default['CACHE_STORE'],
53
53
  },
54
54
  storage: {
55
55
  drivers: getStorageDrivers(),
56
56
  },
57
57
  cors: {
58
- enabled: env_1.default.CORS_ENABLED,
58
+ enabled: env_1.default['CORS_ENABLED'],
59
59
  },
60
60
  email: {
61
- transport: env_1.default.EMAIL_TRANSPORT,
61
+ transport: env_1.default['EMAIL_TRANSPORT'],
62
62
  },
63
63
  auth: {
64
- providers: (0, utils_1.toArray)(env_1.default.AUTH_PROVIDERS)
64
+ providers: (0, utils_1.toArray)(env_1.default['AUTH_PROVIDERS'])
65
65
  .map((v) => v.trim())
66
66
  .filter((v) => v),
67
67
  },
68
- db_client: env_1.default.DB_CLIENT,
68
+ db_client: env_1.default['DB_CLIENT'],
69
69
  };
70
70
  }
71
71
  function getStorageDrivers() {
72
72
  const drivers = [];
73
- const locations = (0, utils_1.toArray)(env_1.default.STORAGE_LOCATIONS)
73
+ const locations = (0, utils_1.toArray)(env_1.default['STORAGE_LOCATIONS'])
74
74
  .map((v) => v.trim())
75
75
  .filter((v) => v);
76
76
  for (const location of locations) {
@@ -157,7 +157,7 @@ function validateAlias(alias) {
157
157
  }
158
158
  }
159
159
  function validateRelationalDepth(query) {
160
- const maxRelationalDepth = Number(env_1.default.MAX_RELATIONAL_DEPTH) > 2 ? Number(env_1.default.MAX_RELATIONAL_DEPTH) : 2;
160
+ const maxRelationalDepth = Number(env_1.default['MAX_RELATIONAL_DEPTH']) > 2 ? Number(env_1.default['MAX_RELATIONAL_DEPTH']) : 2;
161
161
  // Process the fields in the same way as api/src/utils/get-ast-from-query.ts
162
162
  let fields = ['*'];
163
163
  if (query.fields) {
@@ -11,28 +11,28 @@ const fs_1 = require("fs");
11
11
  const path_1 = __importDefault(require("path"));
12
12
  const utils_1 = require("@directus/shared/utils");
13
13
  async function validateStorage() {
14
- if (env_1.default.DB_CLIENT === 'sqlite3') {
14
+ if (env_1.default['DB_CLIENT'] === 'sqlite3') {
15
15
  try {
16
- await (0, fs_extra_1.access)(path_1.default.dirname(env_1.default.DB_FILENAME), fs_1.constants.R_OK | fs_1.constants.W_OK);
16
+ await (0, fs_extra_1.access)(path_1.default.dirname(env_1.default['DB_FILENAME']), fs_1.constants.R_OK | fs_1.constants.W_OK);
17
17
  }
18
18
  catch {
19
- logger_1.default.warn(`Directory for SQLite database file (${path_1.default.resolve(path_1.default.dirname(env_1.default.DB_FILENAME))}) is not read/writeable!`);
19
+ logger_1.default.warn(`Directory for SQLite database file (${path_1.default.resolve(path_1.default.dirname(env_1.default['DB_FILENAME']))}) is not read/writeable!`);
20
20
  }
21
21
  }
22
- const usedStorageDrivers = (0, utils_1.toArray)(env_1.default.STORAGE_LOCATIONS).map((location) => env_1.default[`STORAGE_${location.toUpperCase()}_DRIVER`]);
22
+ const usedStorageDrivers = (0, utils_1.toArray)(env_1.default['STORAGE_LOCATIONS']).map((location) => env_1.default[`STORAGE_${location.toUpperCase()}_DRIVER`]);
23
23
  if (usedStorageDrivers.includes('local')) {
24
24
  try {
25
- await (0, fs_extra_1.access)(env_1.default.STORAGE_LOCAL_ROOT, fs_1.constants.R_OK | fs_1.constants.W_OK);
25
+ await (0, fs_extra_1.access)(env_1.default['STORAGE_LOCAL_ROOT'], fs_1.constants.R_OK | fs_1.constants.W_OK);
26
26
  }
27
27
  catch {
28
- logger_1.default.warn(`Upload directory (${path_1.default.resolve(env_1.default.STORAGE_LOCAL_ROOT)}) is not read/writeable!`);
28
+ logger_1.default.warn(`Upload directory (${path_1.default.resolve(env_1.default['STORAGE_LOCAL_ROOT'])}) is not read/writeable!`);
29
29
  }
30
30
  }
31
31
  try {
32
- await (0, fs_extra_1.access)(env_1.default.EXTENSIONS_PATH, fs_1.constants.R_OK);
32
+ await (0, fs_extra_1.access)(env_1.default['EXTENSIONS_PATH'], fs_1.constants.R_OK);
33
33
  }
34
34
  catch {
35
- logger_1.default.warn(`Extensions directory (${path_1.default.resolve(env_1.default.EXTENSIONS_PATH)}) is not readable!`);
35
+ logger_1.default.warn(`Extensions directory (${path_1.default.resolve(env_1.default['EXTENSIONS_PATH'])}) is not readable!`);
36
36
  }
37
37
  }
38
38
  exports.validateStorage = validateStorage;
package/dist/webhooks.js CHANGED
@@ -18,7 +18,7 @@ async function init() {
18
18
  await register();
19
19
  const messenger = (0, messenger_1.getMessenger)();
20
20
  messenger.subscribe('webhooks', (event) => {
21
- if (event.type === 'reload') {
21
+ if (event['type'] === 'reload') {
22
22
  reloadQueue.enqueue(async () => {
23
23
  await reload();
24
24
  });
@@ -53,7 +53,7 @@ function unregister() {
53
53
  exports.unregister = unregister;
54
54
  function createHandler(webhook, event) {
55
55
  return async (meta, context) => {
56
- if (webhook.collections.includes(meta.collection) === false)
56
+ if (webhook.collections.includes(meta['collection']) === false)
57
57
  return;
58
58
  const axios = await (0, index_1.getAxios)();
59
59
  const webhookPayload = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "directus",
3
- "version": "9.23.3",
3
+ "version": "9.23.4",
4
4
  "description": "Directus is a real-time API and App dashboard for managing SQL database content",
5
5
  "keywords": [
6
6
  "directus",
@@ -144,18 +144,18 @@
144
144
  "uuid-validate": "0.0.3",
145
145
  "vm2": "3.9.14",
146
146
  "wellknown": "0.5.0",
147
- "@directus/app": "9.23.3",
148
- "@directus/extensions-sdk": "9.23.3",
149
- "@directus/schema": "9.23.3",
150
- "@directus/shared": "9.23.3",
151
- "@directus/specs": "9.23.3",
152
- "@directus/storage": "9.23.3",
153
- "@directus/storage-driver-azure": "9.23.3",
154
- "@directus/storage-driver-cloudinary": "9.23.3",
155
- "@directus/storage-driver-gcs": "9.23.3",
156
- "@directus/storage-driver-local": "9.23.3",
157
- "@directus/storage-driver-s3": "9.23.3",
158
- "@directus/utils": "9.23.3"
147
+ "@directus/app": "9.23.4",
148
+ "@directus/schema": "9.23.4",
149
+ "@directus/extensions-sdk": "9.23.4",
150
+ "@directus/shared": "9.23.4",
151
+ "@directus/storage": "9.23.4",
152
+ "@directus/specs": "9.23.4",
153
+ "@directus/storage-driver-azure": "9.23.4",
154
+ "@directus/storage-driver-cloudinary": "9.23.4",
155
+ "@directus/storage-driver-gcs": "9.23.4",
156
+ "@directus/storage-driver-local": "9.23.4",
157
+ "@directus/storage-driver-s3": "9.23.4",
158
+ "@directus/utils": "9.23.4"
159
159
  },
160
160
  "devDependencies": {
161
161
  "@ngneat/falso": "6.4.0",
@@ -1 +0,0 @@
1
- export declare function redactHeaderCookie(cookieHeader: string, cookieNames: string[]): string;
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.redactHeaderCookie = void 0;
4
- function redactHeaderCookie(cookieHeader, cookieNames) {
5
- for (const cookieName of cookieNames) {
6
- const re = new RegExp(`(${cookieName}=)([^;]+)`);
7
- cookieHeader = cookieHeader.replace(re, `$1--redacted--`);
8
- }
9
- return cookieHeader;
10
- }
11
- exports.redactHeaderCookie = redactHeaderCookie;