@directus/api 33.0.0 → 33.1.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.
Files changed (116) hide show
  1. package/dist/ai/chat/controllers/chat.post.js +19 -4
  2. package/dist/ai/chat/lib/create-ui-stream.d.ts +7 -6
  3. package/dist/ai/chat/lib/create-ui-stream.js +28 -25
  4. package/dist/ai/chat/middleware/load-settings.js +31 -7
  5. package/dist/ai/chat/models/chat-request.d.ts +135 -2
  6. package/dist/ai/chat/models/chat-request.js +56 -2
  7. package/dist/ai/chat/models/providers.d.ts +16 -2
  8. package/dist/ai/chat/models/providers.js +16 -2
  9. package/dist/ai/chat/utils/chat-request-tool-to-ai-sdk-tool.js +3 -4
  10. package/dist/ai/chat/utils/format-context.d.ts +5 -0
  11. package/dist/ai/chat/utils/format-context.js +122 -0
  12. package/dist/ai/mcp/server.d.ts +27 -1
  13. package/dist/ai/providers/index.d.ts +3 -0
  14. package/dist/ai/providers/index.js +3 -0
  15. package/dist/ai/providers/options.d.ts +14 -0
  16. package/dist/ai/providers/options.js +26 -0
  17. package/dist/ai/providers/registry.d.ts +6 -0
  18. package/dist/ai/providers/registry.js +65 -0
  19. package/dist/ai/providers/types.d.ts +34 -0
  20. package/dist/ai/providers/types.js +1 -0
  21. package/dist/ai/tools/items/index.js +4 -1
  22. package/dist/ai/tools/items/prompt.md +7 -9
  23. package/dist/ai/tools/schema.js +1 -1
  24. package/dist/app.js +4 -0
  25. package/dist/auth/drivers/ldap.d.ts +1 -1
  26. package/dist/auth/drivers/ldap.js +142 -137
  27. package/dist/cache.d.ts +12 -0
  28. package/dist/cache.js +25 -1
  29. package/dist/cli/utils/create-env/env-stub.liquid +3 -0
  30. package/dist/controllers/deployment.d.ts +2 -0
  31. package/dist/controllers/deployment.js +481 -0
  32. package/dist/controllers/fields.js +6 -4
  33. package/dist/database/get-ast-from-query/lib/parse-fields.js +2 -2
  34. package/dist/database/migrations/20260110A-add-ai-provider-settings.d.ts +3 -0
  35. package/dist/database/migrations/20260110A-add-ai-provider-settings.js +35 -0
  36. package/dist/database/migrations/20260128A-add-collaborative-editing.d.ts +3 -0
  37. package/dist/database/migrations/20260128A-add-collaborative-editing.js +10 -0
  38. package/dist/database/migrations/20260204A-add-deployment.d.ts +3 -0
  39. package/dist/database/migrations/20260204A-add-deployment.js +32 -0
  40. package/dist/database/run-ast/lib/apply-query/add-join.js +1 -1
  41. package/dist/database/run-ast/lib/apply-query/filter/get-filter-type.d.ts +2 -2
  42. package/dist/database/run-ast/lib/apply-query/filter/index.js +1 -1
  43. package/dist/database/run-ast/lib/apply-query/sort.js +1 -1
  44. package/dist/deployment/deployment.d.ts +94 -0
  45. package/dist/deployment/deployment.js +29 -0
  46. package/dist/deployment/drivers/index.d.ts +1 -0
  47. package/dist/deployment/drivers/index.js +1 -0
  48. package/dist/deployment/drivers/vercel.d.ts +32 -0
  49. package/dist/deployment/drivers/vercel.js +208 -0
  50. package/dist/deployment/index.d.ts +2 -0
  51. package/dist/deployment/index.js +2 -0
  52. package/dist/deployment.d.ts +24 -0
  53. package/dist/deployment.js +39 -0
  54. package/dist/middleware/respond.js +27 -14
  55. package/dist/permissions/modules/process-ast/utils/find-related-collection.js +1 -1
  56. package/dist/permissions/modules/validate-access/lib/validate-item-access.d.ts +1 -1
  57. package/dist/permissions/modules/validate-access/lib/validate-item-access.js +19 -8
  58. package/dist/server.js +2 -1
  59. package/dist/services/deployment-projects.d.ts +20 -0
  60. package/dist/services/deployment-projects.js +34 -0
  61. package/dist/services/deployment-runs.d.ts +13 -0
  62. package/dist/services/deployment-runs.js +6 -0
  63. package/dist/services/deployment.d.ts +40 -0
  64. package/dist/services/deployment.js +202 -0
  65. package/dist/services/graphql/resolvers/system-admin.js +2 -3
  66. package/dist/services/graphql/utils/filter-replace-m2a.js +3 -4
  67. package/dist/services/index.d.ts +3 -0
  68. package/dist/services/index.js +3 -0
  69. package/dist/services/server.js +1 -0
  70. package/dist/services/specifications.js +2 -2
  71. package/dist/services/versions.js +1 -1
  72. package/dist/telemetry/lib/get-report.js +2 -0
  73. package/dist/telemetry/types/report.d.ts +8 -0
  74. package/dist/telemetry/utils/get-settings.d.ts +2 -0
  75. package/dist/telemetry/utils/get-settings.js +5 -0
  76. package/dist/utils/deep-map-response.d.ts +1 -1
  77. package/dist/utils/deep-map-response.js +1 -1
  78. package/dist/utils/get-column-path.js +1 -1
  79. package/dist/utils/get-service.js +7 -1
  80. package/dist/utils/is-field-allowed.d.ts +4 -0
  81. package/dist/utils/is-field-allowed.js +9 -0
  82. package/dist/utils/versioning/handle-version.js +1 -1
  83. package/dist/websocket/collab/calculate-cache-metadata.d.ts +9 -0
  84. package/dist/websocket/collab/calculate-cache-metadata.js +121 -0
  85. package/dist/websocket/collab/collab.d.ts +63 -0
  86. package/dist/websocket/collab/collab.js +481 -0
  87. package/dist/websocket/collab/constants.d.ts +1 -0
  88. package/dist/websocket/collab/constants.js +13 -0
  89. package/dist/websocket/collab/filter-to-fields.d.ts +2 -0
  90. package/dist/websocket/collab/filter-to-fields.js +11 -0
  91. package/dist/websocket/collab/messenger.d.ts +43 -0
  92. package/dist/websocket/collab/messenger.js +225 -0
  93. package/dist/websocket/collab/payload-permissions.d.ts +18 -0
  94. package/dist/websocket/collab/payload-permissions.js +158 -0
  95. package/dist/websocket/collab/permissions-cache.d.ts +52 -0
  96. package/dist/websocket/collab/permissions-cache.js +204 -0
  97. package/dist/websocket/collab/room.d.ts +125 -0
  98. package/dist/websocket/collab/room.js +593 -0
  99. package/dist/websocket/collab/store.d.ts +7 -0
  100. package/dist/websocket/collab/store.js +33 -0
  101. package/dist/websocket/collab/types.d.ts +21 -0
  102. package/dist/websocket/collab/types.js +1 -0
  103. package/dist/websocket/collab/verify-permissions.d.ts +11 -0
  104. package/dist/websocket/collab/verify-permissions.js +100 -0
  105. package/dist/websocket/handlers/index.d.ts +2 -0
  106. package/dist/websocket/handlers/index.js +9 -0
  107. package/dist/websocket/utils/items.d.ts +2 -2
  108. package/dist/websocket/utils/message.d.ts +1 -1
  109. package/dist/websocket/utils/message.js +2 -2
  110. package/package.json +32 -30
  111. package/dist/utils/get-relation-info.d.ts +0 -6
  112. package/dist/utils/get-relation-info.js +0 -43
  113. package/dist/utils/get-relation-type.d.ts +0 -6
  114. package/dist/utils/get-relation-type.js +0 -18
  115. package/dist/utils/versioning/deep-map-with-schema.d.ts +0 -23
  116. package/dist/utils/versioning/deep-map-with-schema.js +0 -81
@@ -0,0 +1,125 @@
1
+ import { type Accountability, type Item, type PrimaryKey, type WebSocketClient } from '@directus/types';
2
+ import { type BaseServerMessage, type ClientID, type Color, type ServerError } from '@directus/types/collab';
3
+ import { Messenger } from './messenger.js';
4
+ import type { JoinMessage, PermissionClient } from './types.js';
5
+ /**
6
+ * Store and manage all active collaborative editing rooms
7
+ */
8
+ export declare class RoomManager {
9
+ rooms: Record<string, Room>;
10
+ messenger: Messenger;
11
+ constructor(messenger?: Messenger);
12
+ /**
13
+ * Create a new collaborative editing room or return an existing one matching collection, item and version.
14
+ */
15
+ createRoom(collection: string, item: PrimaryKey | null, version: string | null, initialChanges?: Item): Promise<Room>;
16
+ /**
17
+ * Remove a room from local memory
18
+ */
19
+ removeRoom(uid: string): void;
20
+ /**
21
+ * Get an existing room by UID.
22
+ * If the room is not part of the local rooms, it will be loaded from shared memory.
23
+ * The room will not be persisted in local memory.
24
+ */
25
+ getRoom(uid: string): Promise<Room | undefined>;
26
+ /**
27
+ * Get all rooms a client is currently in from local memory
28
+ */
29
+ getClientRooms(uid: ClientID): Promise<Room[]>;
30
+ /**
31
+ * Returns all clients that are part of a room in the local memory
32
+ */
33
+ getLocalRoomClients(): Promise<RoomClient[]>;
34
+ /**
35
+ * Remove empty rooms from local memory
36
+ */
37
+ cleanupRooms(uids?: string[]): Promise<void>;
38
+ /**
39
+ * Forcefully close all local rooms and notify clients.
40
+ */
41
+ terminateAll(): Promise<void>;
42
+ }
43
+ type RoomClient = {
44
+ uid: ClientID;
45
+ accountability: Accountability;
46
+ color: Color;
47
+ };
48
+ type RoomData = {
49
+ uid: string;
50
+ collection: string;
51
+ item: PrimaryKey | null;
52
+ version: string | null;
53
+ changes: Item;
54
+ clients: RoomClient[];
55
+ focuses: Record<ClientID, string>;
56
+ };
57
+ /**
58
+ * Represents a single collaborative editing room for a specific item
59
+ */
60
+ export declare class Room {
61
+ uid: string;
62
+ collection: string;
63
+ item: PrimaryKey | null;
64
+ version: string | null;
65
+ initialChanges: Item | undefined;
66
+ messenger: Messenger;
67
+ store: <T>(callback: (store: import("./store.js").RedisStore<RoomData>) => Promise<T>) => Promise<T>;
68
+ onUpdateHandler: (meta: Record<string, any>, context?: any) => Promise<void>;
69
+ onDeleteHandler: (meta: Record<string, any>, context?: any) => Promise<void>;
70
+ constructor(uid: string, collection: string, item: PrimaryKey | null, version: string | null, initialChanges?: Item, messenger?: Messenger);
71
+ /**
72
+ * Ensures that foundational room state (metadata) exists in shared memory even after restarts
73
+ */
74
+ ensureInitialized(): Promise<void>;
75
+ getDisplayName(): string;
76
+ getClients(): Promise<RoomClient[]>;
77
+ getFocuses(): Promise<Record<ClientID, string>>;
78
+ getChanges(): Promise<Item>;
79
+ hasClient(id: ClientID): Promise<boolean>;
80
+ getFocusByUser(id: ClientID): Promise<string | undefined>;
81
+ getFocusByField(field: string): Promise<string | undefined>;
82
+ /**
83
+ * Client requesting to join a room. If the client hasn't entered the room already, add a new client.
84
+ * Otherwise all users just will be informed again that the user has joined.
85
+ */
86
+ join(client: WebSocketClient, color?: JoinMessage['color']): Promise<void>;
87
+ /**
88
+ * Leave the room
89
+ */
90
+ leave(uid: ClientID): Promise<void>;
91
+ /**
92
+ * Propagate an update to other clients
93
+ */
94
+ update(sender: WebSocketClient, changes: Record<string, unknown>): Promise<void>;
95
+ /**
96
+ * Propagate an unset to other clients
97
+ */
98
+ unset(sender: PermissionClient, field: string): Promise<void>;
99
+ /**
100
+ * Discard specified changes in the room and propagate to other clients
101
+ */
102
+ discard(fields: string[]): Promise<void>;
103
+ /**
104
+ * Atomically acquire or release focus and propagate focus state to other clients
105
+ */
106
+ focus(sender: PermissionClient, field: string | null): Promise<boolean>;
107
+ sendAll(message: BaseServerMessage): Promise<void>;
108
+ sendExcluding(message: BaseServerMessage, exclude: ClientID): Promise<void>;
109
+ send(client: ClientID, message: BaseServerMessage): void;
110
+ /**
111
+ * Close the room and clean up shared state
112
+ *
113
+ * @param options.force If true, close the room even if active clients are present
114
+ * @param options.reason Optional reason to be sent to clients
115
+ * @param options.terminate If true, forcefully terminate the client connection after closing
116
+ */
117
+ close(options?: {
118
+ force?: boolean;
119
+ reason?: ServerError;
120
+ terminate?: boolean;
121
+ }): Promise<boolean>;
122
+ dispose(): void;
123
+ }
124
+ export declare function getRoomHash(collection: string, item: PrimaryKey | null, version: string | null): string;
125
+ export {};