directus 9.7.0 → 9.9.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/__mocks__/cache.d.ts +5 -0
- package/dist/__mocks__/cache.js +7 -0
- package/dist/auth/drivers/ldap.js +10 -11
- package/dist/auth/drivers/oauth2.js +9 -4
- package/dist/auth/drivers/openid.js +7 -4
- package/dist/cache.js +2 -2
- package/dist/cli/commands/schema/apply.js +9 -3
- package/dist/controllers/assets.js +5 -0
- package/dist/controllers/files.d.ts +2 -0
- package/dist/controllers/files.js +10 -5
- package/dist/database/helpers/date/dialects/default.d.ts +3 -0
- package/dist/database/helpers/date/dialects/default.js +7 -0
- package/dist/database/helpers/date/dialects/mssql.d.ts +1 -9
- package/dist/database/helpers/date/dialects/mssql.js +4 -23
- package/dist/database/helpers/date/dialects/mysql.d.ts +2 -9
- package/dist/database/helpers/date/dialects/mysql.js +7 -22
- package/dist/database/helpers/date/dialects/oracle.d.ts +1 -9
- package/dist/database/helpers/date/dialects/oracle.js +7 -23
- package/dist/database/helpers/date/dialects/sqlite.d.ts +1 -9
- package/dist/database/helpers/date/dialects/sqlite.js +8 -24
- package/dist/database/helpers/date/index.d.ts +4 -4
- package/dist/database/helpers/date/index.js +9 -9
- package/dist/database/helpers/date/types.d.ts +3 -9
- package/dist/database/helpers/date/types.js +10 -0
- package/dist/database/helpers/fn/dialects/mssql.d.ts +13 -0
- package/dist/database/helpers/fn/dialects/mssql.js +42 -0
- package/dist/database/helpers/{date/dialects/postgres.d.ts → fn/dialects/mysql.d.ts} +3 -2
- package/dist/database/helpers/fn/dialects/mysql.js +42 -0
- package/dist/database/helpers/fn/dialects/oracle.d.ts +13 -0
- package/dist/database/helpers/fn/dialects/oracle.js +42 -0
- package/dist/database/helpers/fn/dialects/postgres.d.ts +13 -0
- package/dist/database/helpers/{date → fn}/dialects/postgres.js +14 -3
- package/dist/database/helpers/fn/dialects/sqlite.d.ts +13 -0
- package/dist/database/helpers/fn/dialects/sqlite.js +42 -0
- package/dist/database/helpers/fn/index.d.ts +7 -0
- package/dist/database/helpers/fn/index.js +17 -0
- package/dist/database/helpers/fn/types.d.ts +18 -0
- package/dist/database/helpers/fn/types.js +27 -0
- package/dist/database/helpers/index.d.ts +4 -1
- package/dist/database/helpers/index.js +7 -1
- package/dist/database/index.js +0 -3
- package/dist/database/migrations/20220308A-add-bookmark-icon-and-color.d.ts +3 -0
- package/dist/database/migrations/20220308A-add-bookmark-icon-and-color.js +17 -0
- package/dist/database/migrations/20220314A-add-translation-strings.d.ts +3 -0
- package/dist/database/migrations/20220314A-add-translation-strings.js +15 -0
- package/dist/database/migrations/20220322A-rename-field-typecast-flags.d.ts +3 -0
- package/dist/database/migrations/20220322A-rename-field-typecast-flags.js +77 -0
- package/dist/database/migrations/20220323A-add-field-validation.d.ts +3 -0
- package/dist/database/migrations/20220323A-add-field-validation.js +17 -0
- package/dist/database/migrations/20220325A-fix-typecast-flags.d.ts +3 -0
- package/dist/database/migrations/20220325A-fix-typecast-flags.js +49 -0
- package/dist/database/migrations/20220325B-add-default-language.d.ts +3 -0
- package/dist/database/migrations/20220325B-add-default-language.js +28 -0
- package/dist/database/migrations/20220402A-remove-default-value-panel-icon.d.ts +3 -0
- package/dist/database/migrations/20220402A-remove-default-value-panel-icon.js +22 -0
- package/dist/database/migrations/run.js +1 -1
- package/dist/database/run-ast.js +4 -2
- package/dist/database/system-data/fields/activity.yaml +4 -4
- package/dist/database/system-data/fields/collections.yaml +4 -4
- package/dist/database/system-data/fields/fields.yaml +17 -8
- package/dist/database/system-data/fields/files.yaml +2 -2
- package/dist/database/system-data/fields/panels.yaml +2 -2
- package/dist/database/system-data/fields/permissions.yaml +4 -4
- package/dist/database/system-data/fields/presets.yaml +17 -3
- package/dist/database/system-data/fields/relations.yaml +1 -1
- package/dist/database/system-data/fields/revisions.yaml +2 -2
- package/dist/database/system-data/fields/roles.yaml +4 -4
- package/dist/database/system-data/fields/settings.yaml +18 -4
- package/dist/database/system-data/fields/users.yaml +5 -2
- package/dist/database/system-data/fields/webhooks.yaml +4 -4
- package/dist/env.js +4 -1
- package/dist/exceptions/index.d.ts +1 -0
- package/dist/exceptions/index.js +1 -0
- package/dist/exceptions/token-expired.d.ts +4 -0
- package/dist/exceptions/token-expired.js +10 -0
- package/dist/logger.js +2 -1
- package/dist/middleware/cache.js +10 -0
- package/dist/services/activity.js +4 -1
- package/dist/services/authorization.d.ts +1 -1
- package/dist/services/authorization.js +198 -14
- package/dist/services/collections.d.ts +2 -0
- package/dist/services/collections.js +230 -198
- package/dist/services/fields.js +208 -174
- package/dist/services/files.d.ts +5 -1
- package/dist/services/files.js +59 -40
- package/dist/services/graphql.d.ts +2 -3
- package/dist/services/graphql.js +39 -9
- package/dist/services/items.js +1 -0
- package/dist/services/payload.d.ts +1 -0
- package/dist/services/payload.js +29 -24
- package/dist/services/relations.js +93 -81
- package/dist/services/server.js +1 -0
- package/dist/services/shares.js +2 -1
- package/dist/services/users.js +3 -1
- package/dist/types/files.d.ts +8 -0
- package/dist/utils/apply-query.js +38 -10
- package/dist/utils/apply-snapshot.d.ts +3 -1
- package/dist/utils/apply-snapshot.js +34 -5
- package/dist/utils/get-column.d.ts +6 -5
- package/dist/utils/get-column.js +16 -8
- package/dist/utils/get-graphql-type.js +1 -0
- package/dist/utils/get-local-type.js +7 -2
- package/dist/utils/get-schema.d.ts +1 -1
- package/dist/utils/get-schema.js +15 -10
- package/dist/utils/jwt.js +1 -1
- package/dist/utils/track.js +3 -2
- package/dist/utils/url.d.ts +1 -1
- package/dist/utils/url.js +1 -1
- package/dist/utils/validate-query.js +19 -15
- package/dist/utils/validate-storage.js +3 -1
- package/example.env +4 -0
- package/package.json +14 -13
|
@@ -46,19 +46,19 @@ fields:
|
|
|
46
46
|
width: half
|
|
47
47
|
|
|
48
48
|
- field: comment
|
|
49
|
-
display: formatted-
|
|
49
|
+
display: formatted-value
|
|
50
50
|
display_options:
|
|
51
|
-
|
|
51
|
+
color: 'var(--foreground-subdued)'
|
|
52
52
|
width: half
|
|
53
53
|
|
|
54
54
|
- field: user_agent
|
|
55
|
-
display: formatted-
|
|
55
|
+
display: formatted-value
|
|
56
56
|
display_options:
|
|
57
57
|
font: monospace
|
|
58
58
|
width: half
|
|
59
59
|
|
|
60
60
|
- field: ip
|
|
61
|
-
display: formatted-
|
|
61
|
+
display: formatted-value
|
|
62
62
|
display_options:
|
|
63
63
|
font: monospace
|
|
64
64
|
width: half
|
|
@@ -42,21 +42,21 @@ fields:
|
|
|
42
42
|
width: full
|
|
43
43
|
|
|
44
44
|
- field: hidden
|
|
45
|
-
special: boolean
|
|
45
|
+
special: cast-boolean
|
|
46
46
|
interface: boolean
|
|
47
47
|
options:
|
|
48
48
|
label: $t:field_options.directus_collections.hidden_label
|
|
49
49
|
width: half
|
|
50
50
|
|
|
51
51
|
- field: singleton
|
|
52
|
-
special: boolean
|
|
52
|
+
special: cast-boolean
|
|
53
53
|
interface: boolean
|
|
54
54
|
options:
|
|
55
55
|
label: $t:singleton_label
|
|
56
56
|
width: half
|
|
57
57
|
|
|
58
58
|
- field: translations
|
|
59
|
-
special: json
|
|
59
|
+
special: cast-json
|
|
60
60
|
interface: list
|
|
61
61
|
options:
|
|
62
62
|
template: '{{ translation }} ({{ language }})'
|
|
@@ -115,7 +115,7 @@ fields:
|
|
|
115
115
|
|
|
116
116
|
- field: archive_app_filter
|
|
117
117
|
interface: boolean
|
|
118
|
-
special: boolean
|
|
118
|
+
special: cast-boolean
|
|
119
119
|
options:
|
|
120
120
|
label: $t:field_options.directus_collections.archive_app_filter
|
|
121
121
|
width: half
|
|
@@ -17,7 +17,7 @@ fields:
|
|
|
17
17
|
- collection: directus_fields
|
|
18
18
|
field: special
|
|
19
19
|
hidden: true
|
|
20
|
-
special: csv
|
|
20
|
+
special: cast-csv
|
|
21
21
|
width: half
|
|
22
22
|
|
|
23
23
|
- collection: directus_fields
|
|
@@ -27,7 +27,7 @@ fields:
|
|
|
27
27
|
- collection: directus_fields
|
|
28
28
|
field: options
|
|
29
29
|
hidden: true
|
|
30
|
-
special: json
|
|
30
|
+
special: cast-json
|
|
31
31
|
width: half
|
|
32
32
|
|
|
33
33
|
- collection: directus_fields
|
|
@@ -37,25 +37,25 @@ fields:
|
|
|
37
37
|
- collection: directus_fields
|
|
38
38
|
field: display_options
|
|
39
39
|
hidden: true
|
|
40
|
-
special: json
|
|
40
|
+
special: cast-json
|
|
41
41
|
width: half
|
|
42
42
|
|
|
43
43
|
- collection: directus_fields
|
|
44
44
|
field: readonly
|
|
45
45
|
hidden: true
|
|
46
|
-
special: boolean
|
|
46
|
+
special: cast-boolean
|
|
47
47
|
width: half
|
|
48
48
|
|
|
49
49
|
- collection: directus_fields
|
|
50
50
|
field: hidden
|
|
51
51
|
hidden: true
|
|
52
|
-
special: boolean
|
|
52
|
+
special: cast-boolean
|
|
53
53
|
width: half
|
|
54
54
|
|
|
55
55
|
- collection: directus_fields
|
|
56
56
|
field: required
|
|
57
57
|
hidden: true
|
|
58
|
-
special: boolean
|
|
58
|
+
special: cast-boolean
|
|
59
59
|
width: half
|
|
60
60
|
|
|
61
61
|
- collection: directus_fields
|
|
@@ -73,7 +73,7 @@ fields:
|
|
|
73
73
|
- collection: directus_fields
|
|
74
74
|
field: translations
|
|
75
75
|
hidden: true
|
|
76
|
-
special: json
|
|
76
|
+
special: cast-json
|
|
77
77
|
width: half
|
|
78
78
|
|
|
79
79
|
- collection: directus_fields
|
|
@@ -83,4 +83,13 @@ fields:
|
|
|
83
83
|
- collection: directus_fields
|
|
84
84
|
field: conditions
|
|
85
85
|
hidden: true
|
|
86
|
-
special: json
|
|
86
|
+
special: cast-json
|
|
87
|
+
|
|
88
|
+
- collection: directus_fields
|
|
89
|
+
field: validation
|
|
90
|
+
hidden: true
|
|
91
|
+
special: cast-json
|
|
92
|
+
|
|
93
|
+
- collection: directus_fields
|
|
94
|
+
field: validation_message
|
|
95
|
+
hidden: true
|
|
@@ -23,7 +23,7 @@ fields:
|
|
|
23
23
|
interface: tags
|
|
24
24
|
options:
|
|
25
25
|
iconRight: local_offer
|
|
26
|
-
special: json
|
|
26
|
+
special: cast-json
|
|
27
27
|
width: full
|
|
28
28
|
display: labels
|
|
29
29
|
display_options:
|
|
@@ -71,7 +71,7 @@ fields:
|
|
|
71
71
|
|
|
72
72
|
- field: metadata
|
|
73
73
|
hidden: true
|
|
74
|
-
special: json
|
|
74
|
+
special: cast-json
|
|
75
75
|
|
|
76
76
|
- field: type
|
|
77
77
|
display: mime-type
|
|
@@ -9,13 +9,13 @@ fields:
|
|
|
9
9
|
- field: note
|
|
10
10
|
- field: type
|
|
11
11
|
- field: show_header
|
|
12
|
-
special: boolean
|
|
12
|
+
special: cast-boolean
|
|
13
13
|
- field: position_x
|
|
14
14
|
- field: position_y
|
|
15
15
|
- field: width
|
|
16
16
|
- field: height
|
|
17
17
|
- field: options
|
|
18
|
-
special: json
|
|
18
|
+
special: cast-json
|
|
19
19
|
- field: date_created
|
|
20
20
|
special: date-created
|
|
21
21
|
- field: user_created
|
|
@@ -4,12 +4,12 @@ table: directus_permissions
|
|
|
4
4
|
fields:
|
|
5
5
|
- field: permissions
|
|
6
6
|
hidden: true
|
|
7
|
-
special: json
|
|
7
|
+
special: cast-json
|
|
8
8
|
width: half
|
|
9
9
|
|
|
10
10
|
- field: presets
|
|
11
11
|
hidden: true
|
|
12
|
-
special: json
|
|
12
|
+
special: cast-json
|
|
13
13
|
width: half
|
|
14
14
|
|
|
15
15
|
- field: role
|
|
@@ -23,11 +23,11 @@ fields:
|
|
|
23
23
|
|
|
24
24
|
- field: fields
|
|
25
25
|
width: half
|
|
26
|
-
special: csv
|
|
26
|
+
special: cast-csv
|
|
27
27
|
|
|
28
28
|
- field: action
|
|
29
29
|
width: half
|
|
30
30
|
|
|
31
31
|
- field: validation
|
|
32
32
|
width: half
|
|
33
|
-
special: json
|
|
33
|
+
special: cast-json
|
|
@@ -3,21 +3,29 @@ table: directus_presets
|
|
|
3
3
|
fields:
|
|
4
4
|
- field: filter
|
|
5
5
|
hidden: true
|
|
6
|
-
special: json
|
|
6
|
+
special: cast-json
|
|
7
7
|
|
|
8
8
|
- field: layout_query
|
|
9
9
|
hidden: true
|
|
10
|
-
special: json
|
|
10
|
+
special: cast-json
|
|
11
11
|
|
|
12
12
|
- field: layout_options
|
|
13
13
|
hidden: true
|
|
14
|
-
special: json
|
|
14
|
+
special: cast-json
|
|
15
15
|
|
|
16
16
|
- field: role
|
|
17
17
|
width: half
|
|
18
|
+
special: m2o
|
|
19
|
+
display: related-values
|
|
20
|
+
display_options:
|
|
21
|
+
template: '{{ name }}'
|
|
18
22
|
|
|
19
23
|
- field: user
|
|
20
24
|
width: half
|
|
25
|
+
special: m2o
|
|
26
|
+
display: related-values
|
|
27
|
+
display_options:
|
|
28
|
+
template: '{{ email }}'
|
|
21
29
|
|
|
22
30
|
- field: id
|
|
23
31
|
width: half
|
|
@@ -25,6 +33,12 @@ fields:
|
|
|
25
33
|
- field: bookmark
|
|
26
34
|
width: half
|
|
27
35
|
|
|
36
|
+
- field: icon
|
|
37
|
+
width: half
|
|
38
|
+
|
|
39
|
+
- field: color
|
|
40
|
+
width: half
|
|
41
|
+
|
|
28
42
|
- field: search
|
|
29
43
|
width: half
|
|
30
44
|
|
|
@@ -25,24 +25,24 @@ fields:
|
|
|
25
25
|
|
|
26
26
|
- field: app_access
|
|
27
27
|
interface: boolean
|
|
28
|
-
special: boolean
|
|
28
|
+
special: cast-boolean
|
|
29
29
|
width: half
|
|
30
30
|
|
|
31
31
|
- field: admin_access
|
|
32
32
|
interface: boolean
|
|
33
|
-
special: boolean
|
|
33
|
+
special: cast-boolean
|
|
34
34
|
width: half
|
|
35
35
|
|
|
36
36
|
- field: ip_access
|
|
37
37
|
interface: tags
|
|
38
38
|
options:
|
|
39
39
|
placeholder: $t:field_options.directus_roles.ip_access
|
|
40
|
-
special: csv
|
|
40
|
+
special: cast-csv
|
|
41
41
|
width: full
|
|
42
42
|
|
|
43
43
|
- field: enforce_tfa
|
|
44
44
|
interface: boolean
|
|
45
|
-
special: boolean
|
|
45
|
+
special: cast-boolean
|
|
46
46
|
width: half
|
|
47
47
|
|
|
48
48
|
- field: users
|
|
@@ -32,7 +32,17 @@ fields:
|
|
|
32
32
|
translations:
|
|
33
33
|
language: en-US
|
|
34
34
|
translations: Website
|
|
35
|
-
width:
|
|
35
|
+
width: half
|
|
36
|
+
|
|
37
|
+
- field: default_language
|
|
38
|
+
interface: system-language
|
|
39
|
+
options:
|
|
40
|
+
iconRight: language
|
|
41
|
+
placeholder: en-US
|
|
42
|
+
translations:
|
|
43
|
+
language: en-US
|
|
44
|
+
translations: Default Language
|
|
45
|
+
width: half
|
|
36
46
|
|
|
37
47
|
- field: branding_divider
|
|
38
48
|
interface: presentation-divider
|
|
@@ -121,7 +131,7 @@ fields:
|
|
|
121
131
|
|
|
122
132
|
- field: module_bar
|
|
123
133
|
interface: system-modules
|
|
124
|
-
special: json
|
|
134
|
+
special: cast-json
|
|
125
135
|
|
|
126
136
|
- field: security_divider
|
|
127
137
|
interface: presentation-divider
|
|
@@ -297,7 +307,7 @@ fields:
|
|
|
297
307
|
]
|
|
298
308
|
width: full
|
|
299
309
|
template: '{{key}}'
|
|
300
|
-
special: json
|
|
310
|
+
special: cast-json
|
|
301
311
|
width: full
|
|
302
312
|
|
|
303
313
|
- field: map_divider
|
|
@@ -322,7 +332,7 @@ fields:
|
|
|
322
332
|
|
|
323
333
|
- field: basemaps
|
|
324
334
|
interface: list
|
|
325
|
-
special: json
|
|
335
|
+
special: cast-json
|
|
326
336
|
options:
|
|
327
337
|
template: '{{name}}'
|
|
328
338
|
fields:
|
|
@@ -378,3 +388,7 @@ fields:
|
|
|
378
388
|
interface: input
|
|
379
389
|
options:
|
|
380
390
|
placeholder: $t:fields.directus_settings.attribution_placeholder
|
|
391
|
+
|
|
392
|
+
- field: translation_strings
|
|
393
|
+
special: cast-json
|
|
394
|
+
hidden: true
|
|
@@ -50,7 +50,7 @@ fields:
|
|
|
50
50
|
|
|
51
51
|
- field: tags
|
|
52
52
|
interface: tags
|
|
53
|
-
special: json
|
|
53
|
+
special: cast-json
|
|
54
54
|
width: full
|
|
55
55
|
options:
|
|
56
56
|
iconRight: local_offer
|
|
@@ -72,6 +72,8 @@ fields:
|
|
|
72
72
|
- field: language
|
|
73
73
|
interface: system-language
|
|
74
74
|
width: half
|
|
75
|
+
options:
|
|
76
|
+
includeProjectDefault: true
|
|
75
77
|
|
|
76
78
|
- field: theme
|
|
77
79
|
interface: select-dropdown
|
|
@@ -93,7 +95,7 @@ fields:
|
|
|
93
95
|
- field: email_notifications
|
|
94
96
|
interface: boolean
|
|
95
97
|
width: half
|
|
96
|
-
special: boolean
|
|
98
|
+
special: cast-boolean
|
|
97
99
|
|
|
98
100
|
- field: admin_divider
|
|
99
101
|
interface: presentation-divider
|
|
@@ -152,6 +154,7 @@ fields:
|
|
|
152
154
|
- field: last_access
|
|
153
155
|
width: half
|
|
154
156
|
display: datetime
|
|
157
|
+
readonly: true
|
|
155
158
|
display_options:
|
|
156
159
|
relative: true
|
|
157
160
|
|
|
@@ -60,12 +60,12 @@ fields:
|
|
|
60
60
|
interface: boolean
|
|
61
61
|
options:
|
|
62
62
|
label: $t:fields.directus_webhooks.data_label
|
|
63
|
-
special: boolean
|
|
63
|
+
special: cast-boolean
|
|
64
64
|
width: half
|
|
65
65
|
display: boolean
|
|
66
66
|
|
|
67
67
|
- field: headers
|
|
68
|
-
special: json
|
|
68
|
+
special: cast-json
|
|
69
69
|
interface: list
|
|
70
70
|
options:
|
|
71
71
|
template: '{{ header }}: {{ value }}'
|
|
@@ -105,7 +105,7 @@ fields:
|
|
|
105
105
|
value: update
|
|
106
106
|
- text: $t:delete_label
|
|
107
107
|
value: delete
|
|
108
|
-
special: csv
|
|
108
|
+
special: cast-csv
|
|
109
109
|
width: full
|
|
110
110
|
display: labels
|
|
111
111
|
display_options:
|
|
@@ -129,7 +129,7 @@ fields:
|
|
|
129
129
|
|
|
130
130
|
- field: collections
|
|
131
131
|
interface: system-collections
|
|
132
|
-
special: csv
|
|
132
|
+
special: cast-csv
|
|
133
133
|
width: full
|
|
134
134
|
display: labels
|
|
135
135
|
display_options:
|
package/dist/env.js
CHANGED
|
@@ -14,7 +14,7 @@ const lodash_1 = require("lodash");
|
|
|
14
14
|
const path_1 = __importDefault(require("path"));
|
|
15
15
|
const require_yaml_1 = require("./utils/require-yaml");
|
|
16
16
|
const utils_1 = require("@directus/shared/utils");
|
|
17
|
-
const acceptedEnvTypes = ['string', 'number', 'regex', 'array'];
|
|
17
|
+
const acceptedEnvTypes = ['string', 'number', 'regex', 'array', 'json'];
|
|
18
18
|
const defaults = {
|
|
19
19
|
CONFIG_PATH: path_1.default.resolve(process.cwd(), '.env'),
|
|
20
20
|
HOST: '0.0.0.0',
|
|
@@ -69,6 +69,7 @@ const defaults = {
|
|
|
69
69
|
SERVE_APP: true,
|
|
70
70
|
RELATIONAL_BATCH_SIZE: 25000,
|
|
71
71
|
EXPORT_BATCH_SIZE: 5000,
|
|
72
|
+
FILE_METADATA_ALLOW_LIST: 'ifd0.Make,ifd0.Model,exif.FNumber,exif.ExposureTime,exif.FocalLength,exif.ISO',
|
|
72
73
|
};
|
|
73
74
|
// Allows us to force certain environment variable into a type, instead of relying
|
|
74
75
|
// on the auto-parsed type in processValues. ref #3705
|
|
@@ -82,6 +83,7 @@ const typeMap = {
|
|
|
82
83
|
DB_PORT: 'number',
|
|
83
84
|
DB_EXCLUDE_TABLES: 'array',
|
|
84
85
|
IMPORT_IP_DENY_LIST: 'array',
|
|
86
|
+
FILE_METADATA_ALLOW_LIST: 'array',
|
|
85
87
|
};
|
|
86
88
|
let env = {
|
|
87
89
|
...defaults,
|
|
@@ -235,6 +237,7 @@ function processValues(env) {
|
|
|
235
237
|
}
|
|
236
238
|
if (String(value).includes(',')) {
|
|
237
239
|
env[key] = (0, utils_1.toArray)(value);
|
|
240
|
+
continue;
|
|
238
241
|
}
|
|
239
242
|
// Try converting the value to a JS object. This allows JSON objects to be passed for nested
|
|
240
243
|
// config flags, or custom param names (that aren't camelCased)
|
|
@@ -13,6 +13,7 @@ export * from './method-not-allowed';
|
|
|
13
13
|
export * from './range-not-satisfiable';
|
|
14
14
|
export * from './route-not-found';
|
|
15
15
|
export * from './service-unavailable';
|
|
16
|
+
export * from './token-expired';
|
|
16
17
|
export * from './unprocessable-entity';
|
|
17
18
|
export * from './unsupported-media-type';
|
|
18
19
|
export * from './user-suspended';
|
package/dist/exceptions/index.js
CHANGED
|
@@ -25,6 +25,7 @@ __exportStar(require("./method-not-allowed"), exports);
|
|
|
25
25
|
__exportStar(require("./range-not-satisfiable"), exports);
|
|
26
26
|
__exportStar(require("./route-not-found"), exports);
|
|
27
27
|
__exportStar(require("./service-unavailable"), exports);
|
|
28
|
+
__exportStar(require("./token-expired"), exports);
|
|
28
29
|
__exportStar(require("./unprocessable-entity"), exports);
|
|
29
30
|
__exportStar(require("./unsupported-media-type"), exports);
|
|
30
31
|
__exportStar(require("./user-suspended"), exports);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TokenExpiredException = void 0;
|
|
4
|
+
const exceptions_1 = require("@directus/shared/exceptions");
|
|
5
|
+
class TokenExpiredException extends exceptions_1.BaseException {
|
|
6
|
+
constructor(message = 'Token expired.') {
|
|
7
|
+
super(message, 401, 'TOKEN_EXPIRED');
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.TokenExpiredException = TokenExpiredException;
|
package/dist/logger.js
CHANGED
|
@@ -28,6 +28,7 @@ const pino_http_1 = __importStar(require("pino-http"));
|
|
|
28
28
|
const get_config_from_env_1 = require("./utils/get-config-from-env");
|
|
29
29
|
const url_1 = require("url");
|
|
30
30
|
const env_1 = __importDefault(require("./env"));
|
|
31
|
+
const utils_1 = require("@directus/shared/utils");
|
|
31
32
|
const pinoOptions = {
|
|
32
33
|
level: env_1.default.LOG_LEVEL || 'info',
|
|
33
34
|
redact: {
|
|
@@ -43,7 +44,7 @@ const loggerEnvConfig = (0, get_config_from_env_1.getConfigFromEnv)('LOGGER_', '
|
|
|
43
44
|
// Expose custom log levels into formatter function
|
|
44
45
|
if (loggerEnvConfig.levels) {
|
|
45
46
|
const customLogLevels = {};
|
|
46
|
-
for (const el of loggerEnvConfig.levels
|
|
47
|
+
for (const el of (0, utils_1.toArray)(loggerEnvConfig.levels)) {
|
|
47
48
|
const key_val = el.split(':');
|
|
48
49
|
customLogLevels[key_val[0].trim()] = key_val[1].trim();
|
|
49
50
|
}
|
package/dist/middleware/cache.js
CHANGED
|
@@ -19,6 +19,8 @@ const checkCacheMiddleware = (0, async_handler_1.default)(async (req, res, next)
|
|
|
19
19
|
if (!cache)
|
|
20
20
|
return next();
|
|
21
21
|
if (((_a = req.headers['cache-control']) === null || _a === void 0 ? void 0 : _a.includes('no-store')) || ((_b = req.headers['Cache-Control']) === null || _b === void 0 ? void 0 : _b.includes('no-store'))) {
|
|
22
|
+
if (env_1.default.CACHE_STATUS_HEADER)
|
|
23
|
+
res.setHeader(`${env_1.default.CACHE_STATUS_HEADER}`, 'MISS');
|
|
22
24
|
return next();
|
|
23
25
|
}
|
|
24
26
|
const key = (0, get_cache_key_1.getCacheKey)(req);
|
|
@@ -28,6 +30,8 @@ const checkCacheMiddleware = (0, async_handler_1.default)(async (req, res, next)
|
|
|
28
30
|
}
|
|
29
31
|
catch (err) {
|
|
30
32
|
logger_1.default.warn(err, `[cache] Couldn't read key ${key}. ${err.message}`);
|
|
33
|
+
if (env_1.default.CACHE_STATUS_HEADER)
|
|
34
|
+
res.setHeader(`${env_1.default.CACHE_STATUS_HEADER}`, 'MISS');
|
|
31
35
|
return next();
|
|
32
36
|
}
|
|
33
37
|
if (cachedData) {
|
|
@@ -37,14 +41,20 @@ const checkCacheMiddleware = (0, async_handler_1.default)(async (req, res, next)
|
|
|
37
41
|
}
|
|
38
42
|
catch (err) {
|
|
39
43
|
logger_1.default.warn(err, `[cache] Couldn't read key ${`${key}__expires_at`}. ${err.message}`);
|
|
44
|
+
if (env_1.default.CACHE_STATUS_HEADER)
|
|
45
|
+
res.setHeader(`${env_1.default.CACHE_STATUS_HEADER}`, 'MISS');
|
|
40
46
|
return next();
|
|
41
47
|
}
|
|
42
48
|
const cacheTTL = cacheExpiryDate ? cacheExpiryDate - Date.now() : null;
|
|
43
49
|
res.setHeader('Cache-Control', (0, get_cache_headers_1.getCacheControlHeader)(req, cacheTTL));
|
|
44
50
|
res.setHeader('Vary', 'Origin, Cache-Control');
|
|
51
|
+
if (env_1.default.CACHE_STATUS_HEADER)
|
|
52
|
+
res.setHeader(`${env_1.default.CACHE_STATUS_HEADER}`, 'HIT');
|
|
45
53
|
return res.json(cachedData);
|
|
46
54
|
}
|
|
47
55
|
else {
|
|
56
|
+
if (env_1.default.CACHE_STATUS_HEADER)
|
|
57
|
+
res.setHeader(`${env_1.default.CACHE_STATUS_HEADER}`, 'MISS');
|
|
48
58
|
return next();
|
|
49
59
|
}
|
|
50
60
|
});
|
|
@@ -16,6 +16,7 @@ const user_name_1 = require("../utils/user-name");
|
|
|
16
16
|
const lodash_1 = require("lodash");
|
|
17
17
|
const env_1 = __importDefault(require("../env"));
|
|
18
18
|
const uuid_validate_1 = __importDefault(require("uuid-validate"));
|
|
19
|
+
const url_1 = require("../utils/url");
|
|
19
20
|
class ActivityService extends items_1.ItemsService {
|
|
20
21
|
constructor(options) {
|
|
21
22
|
super('directus_activity', options);
|
|
@@ -70,7 +71,9 @@ ${(0, user_name_1.userName)(sender)} has mentioned you in a comment:
|
|
|
70
71
|
|
|
71
72
|
${comment}
|
|
72
73
|
|
|
73
|
-
<a href="${env_1.default.PUBLIC_URL
|
|
74
|
+
<a href="${new url_1.Url(env_1.default.PUBLIC_URL)
|
|
75
|
+
.addPath('admin', 'content', data.collection, data.item)
|
|
76
|
+
.toString()}">Click here to view.</a>
|
|
74
77
|
`;
|
|
75
78
|
await this.notificationsService.createOne({
|
|
76
79
|
recipient: userID,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { Accountability, PermissionsAction, SchemaOverview } from '@directus/shared/types';
|
|
1
2
|
import { Knex } from 'knex';
|
|
2
3
|
import { AbstractServiceOptions, AST, Item, PrimaryKey } from '../types';
|
|
3
|
-
import { PermissionsAction, Accountability, SchemaOverview } from '@directus/shared/types';
|
|
4
4
|
import { PayloadService } from './payload';
|
|
5
5
|
export declare class AuthorizationService {
|
|
6
6
|
knex: Knex;
|