@directus/api 13.2.0 → 14.0.1

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 (109) hide show
  1. package/dist/__utils__/snapshots.js +9 -0
  2. package/dist/app.js +2 -0
  3. package/dist/cli/index.js +3 -4
  4. package/dist/cli/load-extensions.d.ts +1 -0
  5. package/dist/cli/load-extensions.js +19 -0
  6. package/dist/controllers/extensions.js +28 -19
  7. package/dist/controllers/versions.d.ts +2 -0
  8. package/dist/controllers/versions.js +188 -0
  9. package/dist/database/migrations/20230823A-add-content-versioning.d.ts +3 -0
  10. package/dist/database/migrations/20230823A-add-content-versioning.js +36 -0
  11. package/dist/database/migrations/20230927A-themes.d.ts +3 -0
  12. package/dist/database/migrations/20230927A-themes.js +49 -0
  13. package/dist/database/migrations/20231009B-update-panel-options.d.ts +3 -0
  14. package/dist/database/migrations/20231009B-update-panel-options.js +77 -0
  15. package/dist/database/migrations/20231010A-add-extensions.d.ts +3 -0
  16. package/dist/database/migrations/20231010A-add-extensions.js +9 -0
  17. package/dist/database/run-ast.js +1 -1
  18. package/dist/database/system-data/app-access-permissions/app-access-permissions.yaml +5 -1
  19. package/dist/database/system-data/collections/collections.yaml +6 -0
  20. package/dist/database/system-data/fields/activity.yaml +4 -4
  21. package/dist/database/system-data/fields/collections.yaml +19 -0
  22. package/dist/database/system-data/fields/extensions.yaml +10 -0
  23. package/dist/database/system-data/fields/revisions.yaml +3 -0
  24. package/dist/database/system-data/fields/settings.yaml +73 -17
  25. package/dist/database/system-data/fields/users.yaml +50 -12
  26. package/dist/database/system-data/fields/versions.yaml +38 -0
  27. package/dist/database/system-data/fields/webhooks.yaml +9 -9
  28. package/dist/database/system-data/relations/relations.yaml +88 -20
  29. package/dist/emitter.d.ts +2 -2
  30. package/dist/env.js +4 -0
  31. package/dist/extensions/lib/get-extensions-settings.d.ts +7 -0
  32. package/dist/extensions/lib/get-extensions-settings.js +39 -0
  33. package/dist/extensions/lib/get-extensions.d.ts +1 -0
  34. package/dist/extensions/lib/get-extensions.js +11 -0
  35. package/dist/extensions/{get-shared-deps-mapping.js → lib/get-shared-deps-mapping.js} +3 -3
  36. package/dist/extensions/lib/sandbox/generate-api-extensions-sandbox-entrypoint.d.ts +31 -0
  37. package/dist/extensions/lib/sandbox/generate-api-extensions-sandbox-entrypoint.js +80 -0
  38. package/dist/extensions/lib/sandbox/generate-host-function-reference.d.ts +11 -0
  39. package/dist/extensions/lib/sandbox/generate-host-function-reference.js +28 -0
  40. package/dist/extensions/lib/sandbox/register/action.d.ts +6 -0
  41. package/dist/extensions/lib/sandbox/register/action.js +18 -0
  42. package/dist/extensions/lib/sandbox/register/call-reference.d.ts +5 -0
  43. package/dist/extensions/lib/sandbox/register/call-reference.js +20 -0
  44. package/dist/extensions/lib/sandbox/register/filter.d.ts +6 -0
  45. package/dist/extensions/lib/sandbox/register/filter.js +21 -0
  46. package/dist/extensions/lib/sandbox/register/index.d.ts +5 -0
  47. package/dist/extensions/lib/sandbox/register/index.js +5 -0
  48. package/dist/extensions/lib/sandbox/register/operation.d.ts +6 -0
  49. package/dist/extensions/lib/sandbox/register/operation.js +19 -0
  50. package/dist/extensions/lib/sandbox/register/route.d.ts +17 -0
  51. package/dist/extensions/lib/sandbox/register/route.js +44 -0
  52. package/dist/extensions/lib/sandbox/sdk/generators/index.d.ts +3 -0
  53. package/dist/extensions/lib/sandbox/sdk/generators/index.js +3 -0
  54. package/dist/extensions/lib/sandbox/sdk/generators/log.d.ts +3 -0
  55. package/dist/extensions/lib/sandbox/sdk/generators/log.js +11 -0
  56. package/dist/extensions/lib/sandbox/sdk/generators/request.d.ts +12 -0
  57. package/dist/extensions/lib/sandbox/sdk/generators/request.js +49 -0
  58. package/dist/extensions/lib/sandbox/sdk/generators/sleep.d.ts +3 -0
  59. package/dist/extensions/lib/sandbox/sdk/generators/sleep.js +11 -0
  60. package/dist/extensions/lib/sandbox/sdk/index.d.ts +2 -0
  61. package/dist/extensions/lib/sandbox/sdk/index.js +2 -0
  62. package/dist/extensions/lib/sandbox/sdk/instantiate.d.ts +11 -0
  63. package/dist/extensions/lib/sandbox/sdk/instantiate.js +28 -0
  64. package/dist/extensions/lib/sandbox/sdk/sdk.d.ts +20 -0
  65. package/dist/extensions/lib/sandbox/sdk/sdk.js +11 -0
  66. package/dist/extensions/lib/sandbox/sdk/utils/index.d.ts +1 -0
  67. package/dist/extensions/lib/sandbox/sdk/utils/index.js +1 -0
  68. package/dist/extensions/lib/sandbox/sdk/utils/wrap.d.ts +11 -0
  69. package/dist/extensions/lib/sandbox/sdk/utils/wrap.js +17 -0
  70. package/dist/extensions/manager.d.ts +128 -14
  71. package/dist/extensions/manager.js +310 -136
  72. package/dist/extensions/types.d.ts +1 -5
  73. package/dist/flows.d.ts +1 -1
  74. package/dist/flows.js +6 -6
  75. package/dist/middleware/respond.js +12 -0
  76. package/dist/server.js +2 -1
  77. package/dist/services/assets.js +1 -1
  78. package/dist/services/extensions.d.ts +31 -0
  79. package/dist/services/extensions.js +136 -0
  80. package/dist/services/graphql/index.d.ts +1 -1
  81. package/dist/services/graphql/index.js +87 -24
  82. package/dist/services/index.d.ts +2 -0
  83. package/dist/services/index.js +2 -0
  84. package/dist/services/server.js +3 -1
  85. package/dist/services/users.js +2 -0
  86. package/dist/services/versions.d.ts +21 -0
  87. package/dist/services/versions.js +238 -0
  88. package/dist/types/collection.d.ts +1 -0
  89. package/dist/utils/apply-query.d.ts +1 -1
  90. package/dist/utils/apply-query.js +30 -2
  91. package/dist/utils/delete-from-require-cache.d.ts +1 -0
  92. package/dist/utils/delete-from-require-cache.js +5 -0
  93. package/dist/utils/get-service.js +3 -1
  94. package/dist/utils/import-file-url.d.ts +5 -0
  95. package/dist/utils/import-file-url.js +6 -0
  96. package/dist/utils/job-queue.d.ts +2 -3
  97. package/dist/utils/redact-object.d.ts +1 -1
  98. package/dist/utils/redact-object.js +37 -24
  99. package/dist/utils/sanitize-query.js +3 -0
  100. package/dist/utils/validate-query.js +1 -0
  101. package/dist/worker-pool.js +8 -0
  102. package/package.json +28 -27
  103. package/dist/extensions/get-extensions.d.ts +0 -47
  104. package/dist/extensions/get-extensions.js +0 -9
  105. package/dist/extensions/normalize-extension-info.d.ts +0 -5
  106. package/dist/extensions/normalize-extension-info.js +0 -30
  107. /package/dist/extensions/{get-shared-deps-mapping.d.ts → lib/get-shared-deps-mapping.d.ts} +0 -0
  108. /package/dist/extensions/{wrap-embeds.d.ts → lib/wrap-embeds.d.ts} +0 -0
  109. /package/dist/extensions/{wrap-embeds.js → lib/wrap-embeds.js} +0 -0
@@ -1,44 +1,158 @@
1
- import type { Extension, ExtensionType } from '@directus/extensions';
1
+ import type { Extension } from '@directus/extensions';
2
2
  import { Router } from 'express';
3
- import type { Options } from './types.js';
3
+ import type { ExtensionManagerOptions } from './types.js';
4
4
  export declare class ExtensionManager {
5
- private isLoaded;
6
5
  private options;
6
+ /**
7
+ * Whether or not the extensions have been read from disk and registered into the system
8
+ */
9
+ private isLoaded;
10
+ /**
11
+ * All extensions that are loaded within the current process
12
+ */
7
13
  private extensions;
8
- private appExtensions;
14
+ /**
15
+ * Settings for the extensions that are loaded within the current process
16
+ */
17
+ private extensionsSettings;
18
+ /**
19
+ * App extensions rolled up into a single bundle. Any chunks from the bundle will be available
20
+ * under appExtensionChunks
21
+ */
22
+ private appExtensionsBundle;
23
+ /**
24
+ * Individual filename chunks from the rollup bundle. Used to improve the performance by allowing
25
+ * extensions to split up their bundle into multiple smaller chunks
26
+ */
9
27
  private appExtensionChunks;
10
- private apiExtensions;
11
- private apiEmitter;
12
- private hookEvents;
28
+ /**
29
+ * Callbacks to be able to unregister extensions
30
+ */
31
+ private unregisterFunctionMap;
32
+ /**
33
+ * A local-to-extensions scoped emitter that can be used to fire and listen to custom events
34
+ * between extensions. These events are completely isolated from the core events that trigger
35
+ * hooks etc
36
+ */
37
+ private localEmitter;
38
+ /**
39
+ * Locally scoped express router used for custom endpoints. Allows extensions to dynamically
40
+ * register and de-register endpoints without affecting the regular global router
41
+ */
13
42
  private endpointRouter;
43
+ /**
44
+ * Custom HTML to be injected at the end of the `<head>` tag of the app's index.html
45
+ */
14
46
  private hookEmbedsHead;
47
+ /**
48
+ * Custom HTML to be injected at the end of the `<body>` tag of the app's index.html
49
+ */
15
50
  private hookEmbedsBody;
51
+ /**
52
+ * Used to prevent race conditions when reloading extensions. Forces each reload to happen in
53
+ * sequence.
54
+ */
16
55
  private reloadQueue;
56
+ /**
57
+ * Optional file system watcher to auto-reload extensions when the local file system changes
58
+ */
17
59
  private watcher;
18
- constructor();
19
- initialize(options?: Partial<Options>): Promise<void>;
60
+ /**
61
+ * Load and register all extensions
62
+ *
63
+ * @param {ExtensionManagerOptions} options - Extension manager configuration options
64
+ * @param {boolean} options.schedule - Whether or not to allow for scheduled (CRON) hook extensions
65
+ * @param {boolean} options.watch - Whether or not to watch the local extensions folder for changes
66
+ */
67
+ initialize(options?: Partial<ExtensionManagerOptions>): Promise<void>;
68
+ /**
69
+ * Load all extensions from disk and register them in their respective places
70
+ */
71
+ private load;
72
+ /**
73
+ * Unregister all extensions from the current process
74
+ */
75
+ private unload;
76
+ /**
77
+ * Reload all the extensions. Will unload if extensions have already been loaded
78
+ */
20
79
  reload(): void;
21
- getExtensionsList(type?: ExtensionType): import("@directus/extensions").ExtensionInfo[];
22
- getExtension(name: string): Extension | undefined;
23
- getAppExtensions(): string | null;
80
+ /**
81
+ * Return the previously generated app extensions bundle
82
+ */
83
+ getAppExtensionsBundle(): string | null;
84
+ /**
85
+ * Return the previously generated app extension bundle chunk by name
86
+ */
24
87
  getAppExtensionChunk(name: string): string | null;
88
+ /**
89
+ * Return the scoped router for custom endpoints
90
+ */
25
91
  getEndpointRouter(): Router;
92
+ /**
93
+ * Return the custom HTML head and body embeds wrapped in a marker comment
94
+ */
26
95
  getEmbeds(): {
27
96
  head: string;
28
97
  body: string;
29
98
  };
30
- private load;
31
- private unload;
99
+ /**
100
+ * Allow reading the installed extensions
101
+ */
102
+ getExtensions(): Extension[];
103
+ /**
104
+ * Start the chokidar watcher for extensions on the local filesystem
105
+ */
32
106
  private initializeWatcher;
107
+ /**
108
+ * Close and destroy the local filesystem watcher if enabled
109
+ */
33
110
  private closeWatcher;
111
+ /**
112
+ * Update the chokidar watcher configuration when new extensions are added or existing ones
113
+ * removed
114
+ */
34
115
  private updateWatchedExtensions;
116
+ /**
117
+ * Uses rollup to bundle the app extensions together into a single file the app can download and
118
+ * run.
119
+ */
35
120
  private generateExtensionBundle;
121
+ private registerSandboxedApiExtension;
122
+ /**
123
+ * Import the hook module code for all hook extensions, and register them individually through
124
+ * registerHook
125
+ */
36
126
  private registerHooks;
127
+ /**
128
+ * Import the endpoint module code for all endpoint extensions, and register them individually through
129
+ * registerEndpoint
130
+ */
37
131
  private registerEndpoints;
132
+ /**
133
+ * Import the operation module code for all operation extensions, and register them individually through
134
+ * registerOperation
135
+ */
38
136
  private registerOperations;
137
+ /**
138
+ * Import the module code for all hook, endpoint, and operation extensions registered within a
139
+ * bundle, and register them with their respective registration function
140
+ */
39
141
  private registerBundles;
142
+ /**
143
+ * Register a single hook
144
+ */
40
145
  private registerHook;
146
+ /**
147
+ * Register an individual endpoint
148
+ */
41
149
  private registerEndpoint;
150
+ /**
151
+ * Register an individual operation
152
+ */
42
153
  private registerOperation;
154
+ /**
155
+ * Remove the registration for all API extensions
156
+ */
43
157
  private unregisterApiExtensions;
44
158
  }