@powerhousedao/reactor-api 6.0.0-dev.30 → 6.0.0-dev.32
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/src/graphql/document-model-subgraph.d.ts +52 -0
- package/dist/src/graphql/document-model-subgraph.d.ts.map +1 -1
- package/dist/src/graphql/document-model-subgraph.js +299 -3
- package/dist/src/graphql/document-model-subgraph.js.map +1 -1
- package/dist/src/graphql/drive-subgraph.d.ts.map +1 -1
- package/dist/src/graphql/graphql-manager.d.ts +3 -0
- package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
- package/dist/src/graphql/graphql-manager.js +64 -17
- package/dist/src/graphql/graphql-manager.js.map +1 -1
- package/dist/src/graphql/system/system-subgraph.d.ts.map +1 -1
- package/dist/src/graphql/utils.d.ts.map +1 -1
- package/dist/src/graphql/utils.js +7 -3
- package/dist/src/graphql/utils.js.map +1 -1
- package/dist/src/server.d.ts +5 -0
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +3 -2
- package/dist/src/server.js.map +1 -1
- package/dist/src/utils/create-schema.d.ts +21 -1
- package/dist/src/utils/create-schema.d.ts.map +1 -1
- package/dist/src/utils/create-schema.js +242 -21
- package/dist/src/utils/create-schema.js.map +1 -1
- package/dist/test/document-model-subgraph-permissions.test.d.ts +2 -0
- package/dist/test/document-model-subgraph-permissions.test.d.ts.map +1 -0
- package/dist/test/document-model-subgraph-permissions.test.js +635 -0
- package/dist/test/document-model-subgraph-permissions.test.js.map +1 -0
- package/dist/test/two-reactor-gql-sync.test.js +28 -19
- package/dist/test/two-reactor-gql-sync.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -1,6 +1,58 @@
|
|
|
1
1
|
import { type DocumentModelModule } from "document-model";
|
|
2
2
|
import { BaseSubgraph } from "./base-subgraph.js";
|
|
3
3
|
import type { SubgraphArgs } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* New document model subgraph that uses reactorClient instead of legacy reactor.
|
|
6
|
+
* This class auto-generates GraphQL queries and mutations for a document model.
|
|
7
|
+
*/
|
|
8
|
+
export declare class DocumentModelSubgraph extends BaseSubgraph {
|
|
9
|
+
private documentModel;
|
|
10
|
+
constructor(documentModel: DocumentModelModule, args: SubgraphArgs);
|
|
11
|
+
/**
|
|
12
|
+
* Check if user has global read access (admin, user, or guest)
|
|
13
|
+
*/
|
|
14
|
+
private hasGlobalReadAccess;
|
|
15
|
+
/**
|
|
16
|
+
* Check if user has global write access (admin or user, not guest)
|
|
17
|
+
*/
|
|
18
|
+
private hasGlobalWriteAccess;
|
|
19
|
+
/**
|
|
20
|
+
* Get the parent IDs function for hierarchical permission checks.
|
|
21
|
+
* Uses the shared createGetParentIdsFn from reactor/resolvers.
|
|
22
|
+
*/
|
|
23
|
+
private getParentIdsFn;
|
|
24
|
+
/**
|
|
25
|
+
* Check if user can read a document (with hierarchy)
|
|
26
|
+
*/
|
|
27
|
+
private canReadDocument;
|
|
28
|
+
/**
|
|
29
|
+
* Check if user can write to a document (with hierarchy)
|
|
30
|
+
*/
|
|
31
|
+
private canWriteDocument;
|
|
32
|
+
/**
|
|
33
|
+
* Throw an error if user cannot read the document
|
|
34
|
+
*/
|
|
35
|
+
private assertCanRead;
|
|
36
|
+
/**
|
|
37
|
+
* Throw an error if user cannot write to the document
|
|
38
|
+
*/
|
|
39
|
+
private assertCanWrite;
|
|
40
|
+
/**
|
|
41
|
+
* Check if user can execute a specific operation on a document.
|
|
42
|
+
* Throws an error if the operation is restricted and user lacks permission.
|
|
43
|
+
*/
|
|
44
|
+
private assertCanExecuteOperation;
|
|
45
|
+
/**
|
|
46
|
+
* Generate resolvers for this document model using reactorClient
|
|
47
|
+
* Uses flat queries (not nested) consistent with ReactorSubgraph patterns
|
|
48
|
+
*/
|
|
49
|
+
private generateResolvers;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated Use `DocumentModelSubgraph` instead. This class uses the legacy `reactor` (IDocumentDriveServer)
|
|
53
|
+
* interface. The new `DocumentModelSubgraph` class uses `reactorClient` (IReactorClient) which provides
|
|
54
|
+
* better patterns and more capabilities. Enable via `useNewDocumentModelSubgraph: true` in GraphQLManager.
|
|
55
|
+
*/
|
|
4
56
|
export declare class DocumentModelSubgraphLegacy extends BaseSubgraph {
|
|
5
57
|
private documentModel;
|
|
6
58
|
constructor(documentModel: DocumentModelModule, args: SubgraphArgs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-model-subgraph.d.ts","sourceRoot":"","sources":["../../../src/graphql/document-model-subgraph.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"document-model-subgraph.d.ts","sourceRoot":"","sources":["../../../src/graphql/document-model-subgraph.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUlD,OAAO,KAAK,EAAW,YAAY,EAAE,MAAM,YAAY,CAAC;AAGxD;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,OAAO,CAAC,aAAa,CAAsB;gBAE/B,aAAa,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY;IAWlE;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;YACW,eAAe;IAmB7B;;OAEG;YACW,gBAAgB;IAmB9B;;OAEG;YACW,aAAa;IAS3B;;OAEG;YACW,cAAc;IAY5B;;;OAGG;YACW,yBAAyB;IAmCvC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CA+S1B;AAED;;;;GAIG;AACH,qBAAa,2BAA4B,SAAQ,YAAY;IAC3D,OAAO,CAAC,aAAa,CAAsB;gBAE/B,aAAa,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY;IAUlE;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;YACW,eAAe;IAqB7B;;OAEG;YACW,gBAAgB;IAqB9B;;OAEG;YACW,aAAa;IAS3B;;OAEG;YACW,cAAc;IAY5B;;;OAGG;YACW,yBAAyB;IAuCvC;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA2K1B"}
|
|
@@ -1,17 +1,313 @@
|
|
|
1
1
|
import { camelCase, kebabCase } from "change-case";
|
|
2
2
|
import { addFile } from "document-drive";
|
|
3
|
-
import { setName } from "document-model";
|
|
3
|
+
import { setName, } from "document-model";
|
|
4
4
|
import { GraphQLError } from "graphql";
|
|
5
|
-
import {
|
|
5
|
+
import { generateDocumentModelSchema, getDocumentModelSchemaName, } from "../utils/create-schema.js";
|
|
6
6
|
import { BaseSubgraph } from "./base-subgraph.js";
|
|
7
|
+
import { toGqlPhDocument } from "./reactor/adapters.js";
|
|
8
|
+
import { createGetParentIdsFn, document as documentResolver, documentChildren as documentChildrenResolver, documentParents as documentParentsResolver, findDocuments as findDocumentsResolver, createEmptyDocument as createEmptyDocumentResolver, } from "./reactor/resolvers.js";
|
|
7
9
|
import { buildGraphQlDocument } from "./utils.js";
|
|
10
|
+
/**
|
|
11
|
+
* New document model subgraph that uses reactorClient instead of legacy reactor.
|
|
12
|
+
* This class auto-generates GraphQL queries and mutations for a document model.
|
|
13
|
+
*/
|
|
14
|
+
export class DocumentModelSubgraph extends BaseSubgraph {
|
|
15
|
+
documentModel;
|
|
16
|
+
constructor(documentModel, args) {
|
|
17
|
+
super(args);
|
|
18
|
+
this.documentModel = documentModel;
|
|
19
|
+
this.name = kebabCase(documentModel.documentModel.global.name);
|
|
20
|
+
this.typeDefs = generateDocumentModelSchema(this.documentModel.documentModel.global, { useNewApi: true });
|
|
21
|
+
this.resolvers = this.generateResolvers();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check if user has global read access (admin, user, or guest)
|
|
25
|
+
*/
|
|
26
|
+
hasGlobalReadAccess(ctx) {
|
|
27
|
+
const isGlobalAdmin = ctx.isAdmin?.(ctx.user?.address ?? "");
|
|
28
|
+
const isGlobalUser = ctx.isUser?.(ctx.user?.address ?? "");
|
|
29
|
+
const isGlobalGuest = ctx.isGuest?.(ctx.user?.address ?? "") ||
|
|
30
|
+
process.env.FREE_ENTRY === "true";
|
|
31
|
+
return !!(isGlobalAdmin || isGlobalUser || isGlobalGuest);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if user has global write access (admin or user, not guest)
|
|
35
|
+
*/
|
|
36
|
+
hasGlobalWriteAccess(ctx) {
|
|
37
|
+
const isGlobalAdmin = ctx.isAdmin?.(ctx.user?.address ?? "");
|
|
38
|
+
const isGlobalUser = ctx.isUser?.(ctx.user?.address ?? "");
|
|
39
|
+
return !!(isGlobalAdmin || isGlobalUser);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get the parent IDs function for hierarchical permission checks.
|
|
43
|
+
* Uses the shared createGetParentIdsFn from reactor/resolvers.
|
|
44
|
+
*/
|
|
45
|
+
getParentIdsFn() {
|
|
46
|
+
return createGetParentIdsFn(this.reactorClient);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if user can read a document (with hierarchy)
|
|
50
|
+
*/
|
|
51
|
+
async canReadDocument(documentId, ctx) {
|
|
52
|
+
if (this.hasGlobalReadAccess(ctx)) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
if (this.documentPermissionService) {
|
|
56
|
+
return this.documentPermissionService.canRead(documentId, ctx.user?.address, this.getParentIdsFn());
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if user can write to a document (with hierarchy)
|
|
62
|
+
*/
|
|
63
|
+
async canWriteDocument(documentId, ctx) {
|
|
64
|
+
if (this.hasGlobalWriteAccess(ctx)) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
if (this.documentPermissionService) {
|
|
68
|
+
return this.documentPermissionService.canWrite(documentId, ctx.user?.address, this.getParentIdsFn());
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Throw an error if user cannot read the document
|
|
74
|
+
*/
|
|
75
|
+
async assertCanRead(documentId, ctx) {
|
|
76
|
+
const canRead = await this.canReadDocument(documentId, ctx);
|
|
77
|
+
if (!canRead) {
|
|
78
|
+
throw new GraphQLError("Forbidden: insufficient permissions to read this document");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Throw an error if user cannot write to the document
|
|
83
|
+
*/
|
|
84
|
+
async assertCanWrite(documentId, ctx) {
|
|
85
|
+
const canWrite = await this.canWriteDocument(documentId, ctx);
|
|
86
|
+
if (!canWrite) {
|
|
87
|
+
throw new GraphQLError("Forbidden: insufficient permissions to write to this document");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check if user can execute a specific operation on a document.
|
|
92
|
+
* Throws an error if the operation is restricted and user lacks permission.
|
|
93
|
+
*/
|
|
94
|
+
async assertCanExecuteOperation(documentId, operationType, ctx) {
|
|
95
|
+
if (!this.documentPermissionService) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (ctx.isAdmin?.(ctx.user?.address ?? "")) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const isRestricted = await this.documentPermissionService.isOperationRestricted(documentId, operationType);
|
|
102
|
+
if (isRestricted) {
|
|
103
|
+
const canExecute = await this.documentPermissionService.canExecuteOperation(documentId, operationType, ctx.user?.address);
|
|
104
|
+
if (!canExecute) {
|
|
105
|
+
throw new GraphQLError(`Forbidden: insufficient permissions to execute operation "${operationType}" on this document`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Generate resolvers for this document model using reactorClient
|
|
111
|
+
* Uses flat queries (not nested) consistent with ReactorSubgraph patterns
|
|
112
|
+
*/
|
|
113
|
+
generateResolvers() {
|
|
114
|
+
const documentType = this.documentModel.documentModel.global.id;
|
|
115
|
+
const documentName = getDocumentModelSchemaName(this.documentModel.documentModel.global);
|
|
116
|
+
const operations = this.documentModel.documentModel.global.specifications
|
|
117
|
+
.at(-1)
|
|
118
|
+
?.modules.flatMap((module) => module.operations.filter((op) => op.name)) ?? [];
|
|
119
|
+
return {
|
|
120
|
+
Query: {
|
|
121
|
+
// Flat query: Get a specific document by identifier
|
|
122
|
+
// Uses shared documentResolver from reactor/resolvers.ts
|
|
123
|
+
[`${documentName}_document`]: async (_, args, ctx) => {
|
|
124
|
+
const { identifier, view } = args;
|
|
125
|
+
if (!identifier) {
|
|
126
|
+
throw new GraphQLError("Document identifier is required");
|
|
127
|
+
}
|
|
128
|
+
// Use shared resolver function
|
|
129
|
+
const result = await documentResolver(this.reactorClient, {
|
|
130
|
+
identifier,
|
|
131
|
+
view,
|
|
132
|
+
});
|
|
133
|
+
// Validate document type
|
|
134
|
+
if (result.document.documentType !== documentType) {
|
|
135
|
+
throw new GraphQLError(`Document with id ${identifier} is not of type ${documentType}`);
|
|
136
|
+
}
|
|
137
|
+
// Check permissions
|
|
138
|
+
await this.assertCanRead(result.document.id, ctx);
|
|
139
|
+
// Return shared resolver result directly (matches PHDocument format)
|
|
140
|
+
return result;
|
|
141
|
+
},
|
|
142
|
+
// Flat query: Find documents by search criteria (type is built-in)
|
|
143
|
+
// Uses shared findDocumentsResolver from reactor/resolvers.ts
|
|
144
|
+
[`${documentName}_findDocuments`]: async (_, args, ctx) => {
|
|
145
|
+
const { search, view, paging } = args;
|
|
146
|
+
// Use shared resolver function with built-in type filter
|
|
147
|
+
const result = await findDocumentsResolver(this.reactorClient, {
|
|
148
|
+
search: {
|
|
149
|
+
type: documentType, // Type is built-in for this document model subgraph
|
|
150
|
+
parentId: search.parentId,
|
|
151
|
+
},
|
|
152
|
+
view,
|
|
153
|
+
paging,
|
|
154
|
+
});
|
|
155
|
+
// Filter by permission if needed
|
|
156
|
+
if (!this.hasGlobalReadAccess(ctx) &&
|
|
157
|
+
this.documentPermissionService) {
|
|
158
|
+
const filteredItems = [];
|
|
159
|
+
for (const item of result.items) {
|
|
160
|
+
const canRead = await this.canReadDocument(item.id, ctx);
|
|
161
|
+
if (canRead) {
|
|
162
|
+
filteredItems.push(item);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
...result,
|
|
167
|
+
items: filteredItems,
|
|
168
|
+
totalCount: filteredItems.length,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// Return shared resolver result directly (matches PHDocument format)
|
|
172
|
+
return result;
|
|
173
|
+
},
|
|
174
|
+
// Flat query: Get children of a document (filtered by this document type)
|
|
175
|
+
// Uses shared documentChildrenResolver from reactor/resolvers.ts
|
|
176
|
+
[`${documentName}_documentChildren`]: async (_, args, ctx) => {
|
|
177
|
+
const { parentIdentifier, view, paging } = args;
|
|
178
|
+
await this.assertCanRead(parentIdentifier, ctx);
|
|
179
|
+
// Use shared resolver function
|
|
180
|
+
const result = await documentChildrenResolver(this.reactorClient, {
|
|
181
|
+
parentIdentifier,
|
|
182
|
+
view,
|
|
183
|
+
paging,
|
|
184
|
+
});
|
|
185
|
+
// Filter children by this document type
|
|
186
|
+
const filteredItems = result.items.filter((item) => item.documentType === documentType);
|
|
187
|
+
return {
|
|
188
|
+
...result,
|
|
189
|
+
items: filteredItems,
|
|
190
|
+
totalCount: filteredItems.length,
|
|
191
|
+
};
|
|
192
|
+
},
|
|
193
|
+
// Flat query: Get parents of a document
|
|
194
|
+
// Uses shared documentParentsResolver from reactor/resolvers.ts
|
|
195
|
+
[`${documentName}_documentParents`]: async (_, args, ctx) => {
|
|
196
|
+
const { childIdentifier, view, paging } = args;
|
|
197
|
+
await this.assertCanRead(childIdentifier, ctx);
|
|
198
|
+
// Use shared resolver function - return directly
|
|
199
|
+
return documentParentsResolver(this.reactorClient, {
|
|
200
|
+
childIdentifier,
|
|
201
|
+
view,
|
|
202
|
+
paging,
|
|
203
|
+
});
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
Mutation: {
|
|
207
|
+
// Uses shared createEmptyDocumentResolver from reactor/resolvers.ts
|
|
208
|
+
[`${documentName}_createDocument`]: async (_, args, ctx) => {
|
|
209
|
+
const { parentIdentifier, name } = args;
|
|
210
|
+
if (parentIdentifier) {
|
|
211
|
+
await this.assertCanWrite(parentIdentifier, ctx);
|
|
212
|
+
}
|
|
213
|
+
else if (!this.hasGlobalWriteAccess(ctx)) {
|
|
214
|
+
throw new GraphQLError("Forbidden: insufficient permissions to create documents");
|
|
215
|
+
}
|
|
216
|
+
// Use shared resolver function - returns PHDocument format
|
|
217
|
+
const createdDoc = await createEmptyDocumentResolver(this.reactorClient, {
|
|
218
|
+
documentType,
|
|
219
|
+
parentIdentifier,
|
|
220
|
+
});
|
|
221
|
+
if (name) {
|
|
222
|
+
const updatedDoc = await this.reactorClient.execute(createdDoc.id, "main", [setName(name)]);
|
|
223
|
+
// Use toGqlPhDocument for PHDocument format with revisionsList
|
|
224
|
+
return toGqlPhDocument(updatedDoc);
|
|
225
|
+
}
|
|
226
|
+
// Return directly - already in PHDocument format
|
|
227
|
+
return createdDoc;
|
|
228
|
+
},
|
|
229
|
+
// Uses shared createEmptyDocumentResolver from reactor/resolvers.ts
|
|
230
|
+
[`${documentName}_createEmptyDocument`]: async (_, args, ctx) => {
|
|
231
|
+
const { parentIdentifier } = args;
|
|
232
|
+
if (parentIdentifier) {
|
|
233
|
+
await this.assertCanWrite(parentIdentifier, ctx);
|
|
234
|
+
}
|
|
235
|
+
else if (!this.hasGlobalWriteAccess(ctx)) {
|
|
236
|
+
throw new GraphQLError("Forbidden: insufficient permissions to create documents");
|
|
237
|
+
}
|
|
238
|
+
// Use shared resolver function - returns PHDocument format directly
|
|
239
|
+
return createEmptyDocumentResolver(this.reactorClient, {
|
|
240
|
+
documentType,
|
|
241
|
+
parentIdentifier,
|
|
242
|
+
});
|
|
243
|
+
},
|
|
244
|
+
// Generate sync and async mutations for each operation
|
|
245
|
+
...operations.reduce((mutations, op) => {
|
|
246
|
+
// Sync mutation
|
|
247
|
+
mutations[`${documentName}_${camelCase(op.name)}`] = async (_, args, ctx) => {
|
|
248
|
+
const { docId, input } = args;
|
|
249
|
+
await this.assertCanWrite(docId, ctx);
|
|
250
|
+
await this.assertCanExecuteOperation(docId, op.name, ctx);
|
|
251
|
+
const doc = await this.reactorClient.get(docId);
|
|
252
|
+
if (doc.header.documentType !== documentType) {
|
|
253
|
+
throw new GraphQLError(`Document with id ${docId} is not of type ${documentType}`);
|
|
254
|
+
}
|
|
255
|
+
const action = this.documentModel.actions[camelCase(op.name)];
|
|
256
|
+
if (!action) {
|
|
257
|
+
throw new GraphQLError(`Action ${op.name} not found`);
|
|
258
|
+
}
|
|
259
|
+
try {
|
|
260
|
+
const updatedDoc = await this.reactorClient.execute(docId, "main", [action(input)]);
|
|
261
|
+
// Use toGqlPhDocument for PHDocument format with revisionsList
|
|
262
|
+
return toGqlPhDocument(updatedDoc);
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
throw new GraphQLError(error instanceof Error
|
|
266
|
+
? error.message
|
|
267
|
+
: `Failed to ${op.name}`);
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
// Async mutation - returns job ID
|
|
271
|
+
mutations[`${documentName}_${camelCase(op.name)}Async`] = async (_, args, ctx) => {
|
|
272
|
+
const { docId, input } = args;
|
|
273
|
+
await this.assertCanWrite(docId, ctx);
|
|
274
|
+
await this.assertCanExecuteOperation(docId, op.name, ctx);
|
|
275
|
+
const doc = await this.reactorClient.get(docId);
|
|
276
|
+
if (doc.header.documentType !== documentType) {
|
|
277
|
+
throw new GraphQLError(`Document with id ${docId} is not of type ${documentType}`);
|
|
278
|
+
}
|
|
279
|
+
const action = this.documentModel.actions[camelCase(op.name)];
|
|
280
|
+
if (!action) {
|
|
281
|
+
throw new GraphQLError(`Action ${op.name} not found`);
|
|
282
|
+
}
|
|
283
|
+
try {
|
|
284
|
+
const jobInfo = await this.reactorClient.executeAsync(docId, "main", [action(input)]);
|
|
285
|
+
return jobInfo.id;
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
throw new GraphQLError(error instanceof Error
|
|
289
|
+
? error.message
|
|
290
|
+
: `Failed to ${op.name}`);
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
return mutations;
|
|
294
|
+
}, {}),
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* @deprecated Use `DocumentModelSubgraph` instead. This class uses the legacy `reactor` (IDocumentDriveServer)
|
|
301
|
+
* interface. The new `DocumentModelSubgraph` class uses `reactorClient` (IReactorClient) which provides
|
|
302
|
+
* better patterns and more capabilities. Enable via `useNewDocumentModelSubgraph: true` in GraphQLManager.
|
|
303
|
+
*/
|
|
8
304
|
export class DocumentModelSubgraphLegacy extends BaseSubgraph {
|
|
9
305
|
documentModel;
|
|
10
306
|
constructor(documentModel, args) {
|
|
11
307
|
super(args);
|
|
12
308
|
this.documentModel = documentModel;
|
|
13
309
|
this.name = kebabCase(documentModel.documentModel.global.name);
|
|
14
|
-
this.typeDefs =
|
|
310
|
+
this.typeDefs = generateDocumentModelSchema(this.documentModel.documentModel.global);
|
|
15
311
|
this.resolvers = this.generateResolvers();
|
|
16
312
|
}
|
|
17
313
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-model-subgraph.js","sourceRoot":"","sources":["../../../src/graphql/document-model-subgraph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"document-model-subgraph.js","sourceRoot":"","sources":["../../../src/graphql/document-model-subgraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drive-subgraph.d.ts","sourceRoot":"","sources":["../../../src/graphql/drive-subgraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,KAAK,EACV,OAAO,EAEP,YAAY,EAEZ,YAAY,EACb,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAGV,QAAQ,EAMT,MAAM,gBAAgB,CAAC;AAgBxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASlD,eAAO,MAAM,sBAAsB;;6BAEV,QAAQ;;;;
|
|
1
|
+
{"version":3,"file":"drive-subgraph.d.ts","sourceRoot":"","sources":["../../../src/graphql/drive-subgraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,KAAK,EACV,OAAO,EAEP,YAAY,EAEZ,YAAY,EACb,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAGV,QAAQ,EAMT,MAAM,gBAAgB,CAAC;AAgBxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASlD,eAAO,MAAM,sBAAsB;;6BAEV,QAAQ;;;;gBA+GjB,CAAC;iBACL,CAAC;;;CAvGZ,CAAC;AAEF,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAGX;gBAES,IAAI,EAAE,YAAY;IAS9B,IAAI,SAAc;IAClB,QAAQ,iCAyKN;YAEY,oBAAoB;YASpB,kBAAkB;IAWhC,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,CA+WpC;CACH"}
|
|
@@ -9,6 +9,7 @@ import type { AuthConfig } from "../services/auth.service.js";
|
|
|
9
9
|
import type { DocumentPermissionService } from "../services/document-permission.service.js";
|
|
10
10
|
export type GraphqlManagerFeatureFlags = {
|
|
11
11
|
enableDocumentModelSubgraphs?: boolean;
|
|
12
|
+
useNewDocumentModelSubgraph?: boolean;
|
|
12
13
|
};
|
|
13
14
|
export declare class GraphQLManager {
|
|
14
15
|
#private;
|
|
@@ -33,6 +34,8 @@ export declare class GraphQLManager {
|
|
|
33
34
|
private readonly subgraphs;
|
|
34
35
|
private authService;
|
|
35
36
|
private coreApolloServer;
|
|
37
|
+
private readonly subgraphApolloServers;
|
|
38
|
+
private readonly subgraphWsDisposers;
|
|
36
39
|
private readonly logger;
|
|
37
40
|
private readonly apolloLogger;
|
|
38
41
|
constructor(path: string, app: express.Express, httpServer: http.Server, wsServer: WebSocketServer, reactor: IDocumentDriveServer, reactorClient: IReactorClient, relationalDb: IRelationalDb, analyticsStore: IAnalyticsStore, syncManager: ISyncManager, authConfig?: AuthConfig | undefined, documentPermissionService?: DocumentPermissionService | undefined, featureFlags?: GraphqlManagerFeatureFlags, port?: number);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql-manager.d.ts","sourceRoot":"","sources":["../../../src/graphql/graphql-manager.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAEV,SAAS,EACT,aAAa,EACd,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG1E,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAInC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"graphql-manager.d.ts","sourceRoot":"","sources":["../../../src/graphql/graphql-manager.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAEV,SAAS,EACT,aAAa,EACd,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG1E,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAInC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AA+E5F,MAAM,MAAM,0BAA0B,GAAG;IACvC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,qBAAa,cAAc;;IA4BvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAvCvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,gBAAgB,CAAkC;IAC1D,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,OAAO,CAAC,WAAW,CAA4B;IAE/C,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAGlC;IACJ,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAGhC;IAEJ,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmD;IAE1E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAI1B;gBAGgB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,UAAU,EAAE,IAAI,CAAC,MAAM,EACvB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,cAAc,EAC7B,YAAY,EAAE,aAAa,EAC3B,cAAc,EAAE,eAAe,EAC/B,WAAW,EAAE,YAAY,EACzB,UAAU,CAAC,EAAE,UAAU,YAAA,EACvB,yBAAyB,CAAC,EAAE,yBAAyB,YAAA,EACrD,YAAY,GAAE,0BAAgD,EAC9D,IAAI,GAAE,MAAa;IAUhC,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE;IAqMnC,gBAAgB,CACpB,QAAQ,EAAE,aAAa,EACvB,UAAU,SAAK,EACf,IAAI,UAAQ;IAgBd,YAAY,yCAAiD;YAE/C,aAAa;IAiB3B,0BAA0B,4BAExB;IAEF,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA+BtD,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE;IAWlD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAwNhC"}
|
|
@@ -11,7 +11,7 @@ import path from "node:path";
|
|
|
11
11
|
import { setTimeout } from "node:timers/promises";
|
|
12
12
|
import { AuthService } from "../services/auth.service.js";
|
|
13
13
|
import { buildSubgraphSchemaModule, createSchema, } from "../utils/create-schema.js";
|
|
14
|
-
import { DocumentModelSubgraphLegacy } from "./document-model-subgraph.js";
|
|
14
|
+
import { DocumentModelSubgraph, DocumentModelSubgraphLegacy, } from "./document-model-subgraph.js";
|
|
15
15
|
import { DriveSubgraph } from "./drive-subgraph.js";
|
|
16
16
|
import { useServer } from "./websocket.js";
|
|
17
17
|
class AuthenticatedDataSource extends RemoteGraphQLDataSource {
|
|
@@ -36,8 +36,31 @@ function hasOperationSchemas(documentModel) {
|
|
|
36
36
|
const hasValidSchema = (schema) => schema && /\b(input|type|enum|union|interface)\s+\w+/.test(schema);
|
|
37
37
|
return specification.modules.some((module) => module.operations.some((op) => hasValidSchema(op.schema)));
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Filter document models to keep only the latest version of each unique document model.
|
|
41
|
+
* When multiple versions exist with the same name, the one with the most recent specification is kept.
|
|
42
|
+
*/
|
|
43
|
+
function filterLatestDocumentModelVersions(documentModels) {
|
|
44
|
+
const latestByName = new Map();
|
|
45
|
+
for (const documentModel of documentModels) {
|
|
46
|
+
const name = documentModel.documentModel.global.name;
|
|
47
|
+
const existing = latestByName.get(name);
|
|
48
|
+
if (!existing) {
|
|
49
|
+
latestByName.set(name, documentModel);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
// Compare version numbers from the latest specification
|
|
53
|
+
const currentVersion = documentModel.documentModel.global.specifications.at(-1)?.version ?? 0;
|
|
54
|
+
const existingVersion = existing.documentModel.global.specifications.at(-1)?.version ?? 0;
|
|
55
|
+
if (currentVersion > existingVersion) {
|
|
56
|
+
latestByName.set(name, documentModel);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return Array.from(latestByName.values());
|
|
60
|
+
}
|
|
39
61
|
const DefaultFeatureFlags = {
|
|
40
62
|
enableDocumentModelSubgraphs: true,
|
|
63
|
+
useNewDocumentModelSubgraph: false,
|
|
41
64
|
};
|
|
42
65
|
export class GraphQLManager {
|
|
43
66
|
path;
|
|
@@ -61,6 +84,8 @@ export class GraphQLManager {
|
|
|
61
84
|
subgraphs = new Map();
|
|
62
85
|
authService = null;
|
|
63
86
|
coreApolloServer = null;
|
|
87
|
+
subgraphApolloServers = new Map();
|
|
88
|
+
subgraphWsDisposers = new Map();
|
|
64
89
|
logger = childLogger(["reactor-api", "graphql-manager"]);
|
|
65
90
|
apolloLogger = childLogger([
|
|
66
91
|
"reactor-api",
|
|
@@ -169,7 +194,9 @@ export class GraphQLManager {
|
|
|
169
194
|
return this.#setupSubgraphs(this.coreSubgraphsMap, this.coreRouter);
|
|
170
195
|
}
|
|
171
196
|
async #setupDocumentModelSubgraphs(supergraph, documentModels) {
|
|
172
|
-
|
|
197
|
+
// Filter to keep only the latest version of each document model
|
|
198
|
+
const latestDocumentModels = filterLatestDocumentModelVersions(documentModels);
|
|
199
|
+
for (const documentModel of latestDocumentModels) {
|
|
173
200
|
if (DOCUMENT_MODELS_TO_EXCLUDE.includes(documentModel.documentModel.global.id)) {
|
|
174
201
|
continue; // Skip the legacy document model
|
|
175
202
|
}
|
|
@@ -177,7 +204,10 @@ export class GraphQLManager {
|
|
|
177
204
|
continue; // Skip document models without operation schemas
|
|
178
205
|
}
|
|
179
206
|
try {
|
|
180
|
-
const
|
|
207
|
+
const SubgraphClass = this.featureFlags.useNewDocumentModelSubgraph
|
|
208
|
+
? DocumentModelSubgraph
|
|
209
|
+
: DocumentModelSubgraphLegacy;
|
|
210
|
+
const subgraphInstance = new SubgraphClass(documentModel, {
|
|
181
211
|
relationalDb: this.relationalDb,
|
|
182
212
|
analyticsStore: this.analyticsStore,
|
|
183
213
|
reactor: this.reactor,
|
|
@@ -199,23 +229,21 @@ export class GraphQLManager {
|
|
|
199
229
|
return this.#setupSubgraphs(this.coreSubgraphsMap, this.coreRouter);
|
|
200
230
|
}
|
|
201
231
|
async #addSubgraphInstance(subgraphInstance, supergraph = "", core = false) {
|
|
202
|
-
await subgraphInstance.onSetup?.();
|
|
203
232
|
const subgraphsMap = core ? this.coreSubgraphsMap : this.subgraphs;
|
|
204
233
|
const subgraphs = subgraphsMap.get(supergraph) ?? [];
|
|
205
234
|
const existingSubgraph = subgraphs.find((it) => it.name === subgraphInstance.name);
|
|
235
|
+
if (existingSubgraph) {
|
|
236
|
+
this.logger.debug(`Skipping duplicate subgraph: ${subgraphInstance.name}`);
|
|
237
|
+
return existingSubgraph;
|
|
238
|
+
}
|
|
239
|
+
await subgraphInstance.onSetup?.();
|
|
206
240
|
subgraphs.push(subgraphInstance);
|
|
207
241
|
subgraphsMap.set(supergraph, subgraphs);
|
|
208
242
|
// also add to global graphql supergraph
|
|
209
243
|
if (supergraph !== "" && supergraph !== "graphql") {
|
|
210
244
|
subgraphsMap.get("graphql")?.push(subgraphInstance);
|
|
211
245
|
}
|
|
212
|
-
|
|
213
|
-
if (!existingSubgraph) {
|
|
214
|
-
this.logger.info(logMessage);
|
|
215
|
-
}
|
|
216
|
-
else {
|
|
217
|
-
this.logger.debug(logMessage);
|
|
218
|
-
}
|
|
246
|
+
this.logger.info(`Registered ${this.path.endsWith("/") ? this.path : this.path + "/"}${supergraph ? supergraph + "/" : ""}${subgraphInstance.name} subgraph.`);
|
|
219
247
|
return subgraphInstance;
|
|
220
248
|
}
|
|
221
249
|
async registerSubgraph(subgraph, supergraph = "", core = false) {
|
|
@@ -318,15 +346,28 @@ export class GraphQLManager {
|
|
|
318
346
|
for (const [supergraph, subgraphs] of subgraphsMap.entries()) {
|
|
319
347
|
for (const subgraph of subgraphs) {
|
|
320
348
|
this.logger.debug(`Setting up subgraph ${subgraph.name}`);
|
|
349
|
+
const subgraphPath = this.#getSubgraphPath(subgraph, supergraph);
|
|
321
350
|
try {
|
|
351
|
+
// dispose existing websocket server before starting new one
|
|
352
|
+
const existingWsDisposer = this.subgraphWsDisposers.get(subgraphPath);
|
|
353
|
+
if (existingWsDisposer) {
|
|
354
|
+
try {
|
|
355
|
+
await existingWsDisposer.dispose();
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
// ignore error when disposing websocket server
|
|
359
|
+
}
|
|
360
|
+
this.subgraphWsDisposers.delete(subgraphPath);
|
|
361
|
+
}
|
|
322
362
|
// create subgraph schema
|
|
323
363
|
const schema = createSchema(this.reactor, subgraph.resolvers, subgraph.typeDefs);
|
|
324
364
|
// create and start apollo server
|
|
325
365
|
const server = this.#createApolloServer(schema);
|
|
326
366
|
server.startInBackgroundHandlingStartupErrorsByLoggingAndFailingAllRequests();
|
|
327
367
|
await this.#waitForServer(server);
|
|
368
|
+
this.subgraphApolloServers.set(subgraphPath, server);
|
|
328
369
|
if (subgraph.hasSubscriptions) {
|
|
329
|
-
useServer({
|
|
370
|
+
const wsDisposer = useServer({
|
|
330
371
|
schema,
|
|
331
372
|
context: async (ctx) => {
|
|
332
373
|
const connectionParams = (ctx.connectionParams ??
|
|
@@ -334,13 +375,13 @@ export class GraphQLManager {
|
|
|
334
375
|
return this.#createWebSocketContext(connectionParams);
|
|
335
376
|
},
|
|
336
377
|
}, this.wsServer);
|
|
337
|
-
this.
|
|
378
|
+
this.subgraphWsDisposers.set(subgraphPath, wsDisposer);
|
|
379
|
+
this.logger.debug(`WebSocket subscriptions enabled for ${subgraph.name}`);
|
|
338
380
|
}
|
|
339
|
-
|
|
340
|
-
this.#setupApolloExpressMiddleware(server, router, path);
|
|
381
|
+
this.#setupApolloExpressMiddleware(server, router, subgraphPath);
|
|
341
382
|
}
|
|
342
383
|
catch (error) {
|
|
343
|
-
this.logger.error("Failed to setup subgraph @name at path @path: @error", subgraph.name,
|
|
384
|
+
this.logger.error("Failed to setup subgraph @name at path @path: @error", subgraph.name, subgraphPath, error);
|
|
344
385
|
}
|
|
345
386
|
}
|
|
346
387
|
}
|
|
@@ -384,7 +425,13 @@ export class GraphQLManager {
|
|
|
384
425
|
},
|
|
385
426
|
});
|
|
386
427
|
if (this.coreApolloServer) {
|
|
387
|
-
|
|
428
|
+
try {
|
|
429
|
+
await this.#waitForServer(this.coreApolloServer);
|
|
430
|
+
await this.coreApolloServer.stop();
|
|
431
|
+
}
|
|
432
|
+
catch {
|
|
433
|
+
// ignore error when stopping apollo server
|
|
434
|
+
}
|
|
388
435
|
}
|
|
389
436
|
this.coreApolloServer = new ApolloServer({
|
|
390
437
|
gateway,
|