@powerhousedao/reactor-api 6.0.0-dev.102 → 6.0.0-dev.104

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 (50) hide show
  1. package/dist/src/dev.d.ts +2 -0
  2. package/dist/src/dev.d.ts.map +1 -0
  3. package/dist/src/dev.js +51 -0
  4. package/dist/src/dev.js.map +1 -0
  5. package/dist/src/graphql/document-model-subgraph.d.ts +88 -1
  6. package/dist/src/graphql/document-model-subgraph.d.ts.map +1 -1
  7. package/dist/src/graphql/document-model-subgraph.js +33 -38
  8. package/dist/src/graphql/document-model-subgraph.js.map +1 -1
  9. package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
  10. package/dist/src/graphql/graphql-manager.js +66 -1
  11. package/dist/src/graphql/graphql-manager.js.map +1 -1
  12. package/dist/src/graphql/playground.d.ts.map +1 -1
  13. package/dist/src/graphql/playground.js +19 -12
  14. package/dist/src/graphql/playground.js.map +1 -1
  15. package/dist/src/graphql/sse.d.ts +42 -0
  16. package/dist/src/graphql/sse.d.ts.map +1 -0
  17. package/dist/src/graphql/sse.js +33 -0
  18. package/dist/src/graphql/sse.js.map +1 -0
  19. package/dist/src/graphql/types.d.ts +1 -0
  20. package/dist/src/graphql/types.d.ts.map +1 -1
  21. package/dist/src/packages/import-loader.d.ts +1 -3
  22. package/dist/src/packages/import-loader.d.ts.map +1 -1
  23. package/dist/src/packages/import-loader.js +2 -17
  24. package/dist/src/packages/import-loader.js.map +1 -1
  25. package/dist/src/packages/types.d.ts +0 -2
  26. package/dist/src/packages/types.d.ts.map +1 -1
  27. package/dist/src/packages/vite-loader.d.ts +3 -4
  28. package/dist/src/packages/vite-loader.d.ts.map +1 -1
  29. package/dist/src/packages/vite-loader.js +5 -18
  30. package/dist/src/packages/vite-loader.js.map +1 -1
  31. package/dist/src/server.d.ts +7 -24
  32. package/dist/src/server.d.ts.map +1 -1
  33. package/dist/src/server.js +60 -123
  34. package/dist/src/server.js.map +1 -1
  35. package/dist/src/types.d.ts +1 -2
  36. package/dist/src/types.d.ts.map +1 -1
  37. package/dist/src/utils/create-schema.d.ts +6 -0
  38. package/dist/src/utils/create-schema.d.ts.map +1 -1
  39. package/dist/src/utils/create-schema.js +39 -25
  40. package/dist/src/utils/create-schema.js.map +1 -1
  41. package/dist/test/document-drive-subgraph.test.js +151 -88
  42. package/dist/test/document-drive-subgraph.test.js.map +1 -1
  43. package/dist/test/document-model-subgraph-permissions.test.js +34 -70
  44. package/dist/test/document-model-subgraph-permissions.test.js.map +1 -1
  45. package/dist/test/subscriptions-sse.test.d.ts +2 -0
  46. package/dist/test/subscriptions-sse.test.d.ts.map +1 -0
  47. package/dist/test/subscriptions-sse.test.js +264 -0
  48. package/dist/test/subscriptions-sse.test.js.map +1 -0
  49. package/dist/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +16 -14
@@ -1,67 +1,120 @@
1
1
  import { testSetupReactor } from "@powerhousedao/reactor-api/test";
2
2
  import { driveDocumentModelModule } from "document-drive";
3
- import { print } from "graphql";
3
+ import { Kind, print } from "graphql";
4
+ import { parse } from "graphql";
4
5
  import { beforeEach, describe, expect, it } from "vitest";
5
- import { DocumentModelSubgraph } from "../src/graphql/document-model-subgraph.js";
6
+ import { DocumentModelSubgraph, } from "../src/graphql/document-model-subgraph.js";
6
7
  import { generateDocumentModelSchema, getDocumentModelSchemaName, } from "../src/utils/create-schema.js";
7
8
  /**
8
- * Tests for document-drive subgraph auto-generation via DocumentModelSubgraph.
9
- *
10
- * Verifies that the new DocumentModelSubgraph produces valid schemas, resolvers,
11
- * and union type resolvers for the document-drive document model.
9
+ * Parse a generated DocumentNode into a map of type definitions.
10
+ * Returns { typeName -> { kind, fieldNames } } for easy assertion.
12
11
  */
12
+ function parseSchemaTypes(docNode) {
13
+ const ast = parse(print(docNode));
14
+ const types = {};
15
+ for (const def of ast.definitions) {
16
+ if (def.kind === Kind.OBJECT_TYPE_DEFINITION ||
17
+ def.kind === Kind.INPUT_OBJECT_TYPE_DEFINITION) {
18
+ types[def.name.value] = {
19
+ kind: def.kind,
20
+ fields: def.fields?.map((f) => f.name.value) ?? [],
21
+ };
22
+ }
23
+ }
24
+ return types;
25
+ }
26
+ /**
27
+ * Extract the return type name from a field definition AST node,
28
+ * stripping NonNull and List wrappers.
29
+ */
30
+ function getFieldReturnTypeName(field) {
31
+ let node = field.type;
32
+ while (node.kind === Kind.NON_NULL_TYPE || node.kind === Kind.LIST_TYPE) {
33
+ node = node.type;
34
+ }
35
+ return node.name?.value ?? "";
36
+ }
13
37
  describe("Document-Drive Subgraph", () => {
14
38
  const driveModule = driveDocumentModelModule;
15
39
  const documentName = getDocumentModelSchemaName(driveModule.documentModel.global);
16
40
  describe("schema generation", () => {
41
+ const buildTypes = () => parseSchemaTypes(generateDocumentModelSchema(driveModule.documentModel.global, {
42
+ useNewApi: true,
43
+ }));
17
44
  it("should generate a valid schema for document-drive", () => {
18
45
  expect(() => generateDocumentModelSchema(driveModule.documentModel.global, {
19
46
  useNewApi: true,
20
47
  })).not.toThrow();
21
48
  });
22
- it("should include mutations for valid operations", () => {
23
- const schema = generateDocumentModelSchema(driveModule.documentModel.global, { useNewApi: true });
24
- const printed = print(schema);
25
- // Node operations
26
- expect(printed).toContain(`${documentName}_addFile`);
27
- expect(printed).toContain(`${documentName}_addFolder`);
28
- expect(printed).toContain(`${documentName}_deleteNode`);
29
- expect(printed).toContain(`${documentName}_updateFile`);
30
- expect(printed).toContain(`${documentName}_updateNode`);
31
- expect(printed).toContain(`${documentName}_copyNode`);
32
- expect(printed).toContain(`${documentName}_moveNode`);
33
- // Drive operations
34
- expect(printed).toContain(`${documentName}_setDriveName`);
35
- expect(printed).toContain(`${documentName}_setDriveIcon`);
36
- expect(printed).toContain(`${documentName}_setSharingType`);
37
- expect(printed).toContain(`${documentName}_setAvailableOffline`);
38
- // Cleanup operations
39
- expect(printed).toContain(`${documentName}_removeListener`);
40
- expect(printed).toContain(`${documentName}_removeTrigger`);
41
- });
42
- it("should include listener and trigger operations", () => {
43
- const schema = generateDocumentModelSchema(driveModule.documentModel.global, { useNewApi: true });
44
- const printed = print(schema);
45
- // ADD_LISTENER and ADD_TRIGGER now have proper input types and should be included
46
- expect(printed).toContain(`${documentName}_addListener(`);
47
- expect(printed).toContain(`${documentName}_addTrigger(`);
48
- expect(printed).toContain(`${documentName}_addListenerAsync(`);
49
- expect(printed).toContain(`${documentName}_addTriggerAsync(`);
50
- });
51
- it("should include query types", () => {
52
- const schema = generateDocumentModelSchema(driveModule.documentModel.global, { useNewApi: true });
53
- const printed = print(schema);
54
- expect(printed).toContain(`${documentName}_document`);
55
- expect(printed).toContain(`${documentName}_findDocuments`);
56
- expect(printed).toContain(`${documentName}_documentChildren`);
57
- expect(printed).toContain(`${documentName}_documentParents`);
58
- });
59
- it("should include async mutation variants", () => {
60
- const schema = generateDocumentModelSchema(driveModule.documentModel.global, { useNewApi: true });
61
- const printed = print(schema);
62
- expect(printed).toContain(`${documentName}_addFileAsync`);
63
- expect(printed).toContain(`${documentName}_deleteNodeAsync`);
64
- expect(printed).toContain(`${documentName}_setDriveNameAsync`);
49
+ it("should have Query type with a namespace field returning the Queries type", () => {
50
+ const ast = parse(print(generateDocumentModelSchema(driveModule.documentModel.global, {
51
+ useNewApi: true,
52
+ })));
53
+ const queryDef = ast.definitions.find((d) => d.kind === Kind.OBJECT_TYPE_DEFINITION && d.name.value === "Query");
54
+ expect(queryDef).toBeDefined();
55
+ if (queryDef?.kind !== Kind.OBJECT_TYPE_DEFINITION)
56
+ throw new Error("unreachable");
57
+ const nsField = queryDef.fields?.find((f) => f.name.value === documentName);
58
+ expect(nsField).toBeDefined();
59
+ expect(getFieldReturnTypeName(nsField)).toBe(`${documentName}Queries`);
60
+ });
61
+ it("should have Mutation type with a namespace field returning the Mutations type", () => {
62
+ const ast = parse(print(generateDocumentModelSchema(driveModule.documentModel.global, {
63
+ useNewApi: true,
64
+ })));
65
+ const mutationDef = ast.definitions.find((d) => d.kind === Kind.OBJECT_TYPE_DEFINITION && d.name.value === "Mutation");
66
+ expect(mutationDef).toBeDefined();
67
+ if (mutationDef?.kind !== Kind.OBJECT_TYPE_DEFINITION)
68
+ throw new Error("unreachable");
69
+ const nsField = mutationDef.fields?.find((f) => f.name.value === documentName);
70
+ expect(nsField).toBeDefined();
71
+ expect(getFieldReturnTypeName(nsField)).toBe(`${documentName}Mutations`);
72
+ });
73
+ it("should have unprefixed query fields inside the Queries namespace type", () => {
74
+ const types = buildTypes();
75
+ const queriesType = types[`${documentName}Queries`];
76
+ expect(queriesType).toBeDefined();
77
+ expect(queriesType.fields).toContain("document");
78
+ expect(queriesType.fields).toContain("findDocuments");
79
+ expect(queriesType.fields).toContain("documentChildren");
80
+ expect(queriesType.fields).toContain("documentParents");
81
+ expect(queriesType.fields).not.toContain(`${documentName}_document`);
82
+ });
83
+ it("should have unprefixed mutation fields inside the Mutations namespace type", () => {
84
+ const types = buildTypes();
85
+ const mutationsType = types[`${documentName}Mutations`];
86
+ expect(mutationsType).toBeDefined();
87
+ expect(mutationsType.fields).toContain("createDocument");
88
+ expect(mutationsType.fields).toContain("createEmptyDocument");
89
+ expect(mutationsType.fields).toContain("addFile");
90
+ expect(mutationsType.fields).toContain("addFolder");
91
+ expect(mutationsType.fields).toContain("deleteNode");
92
+ expect(mutationsType.fields).toContain("updateFile");
93
+ expect(mutationsType.fields).toContain("updateNode");
94
+ expect(mutationsType.fields).toContain("copyNode");
95
+ expect(mutationsType.fields).toContain("moveNode");
96
+ expect(mutationsType.fields).toContain("setDriveName");
97
+ expect(mutationsType.fields).toContain("setDriveIcon");
98
+ expect(mutationsType.fields).toContain("setSharingType");
99
+ expect(mutationsType.fields).toContain("setAvailableOffline");
100
+ expect(mutationsType.fields).toContain("removeListener");
101
+ expect(mutationsType.fields).toContain("removeTrigger");
102
+ expect(mutationsType.fields).not.toContain(`${documentName}_addFile`);
103
+ });
104
+ it("should include listener and trigger operations in the Mutations namespace type", () => {
105
+ const types = buildTypes();
106
+ const fields = types[`${documentName}Mutations`].fields;
107
+ expect(fields).toContain("addListener");
108
+ expect(fields).toContain("addTrigger");
109
+ expect(fields).toContain("addListenerAsync");
110
+ expect(fields).toContain("addTriggerAsync");
111
+ });
112
+ it("should include async mutation variants in the Mutations namespace type", () => {
113
+ const types = buildTypes();
114
+ const fields = types[`${documentName}Mutations`].fields;
115
+ expect(fields).toContain("addFileAsync");
116
+ expect(fields).toContain("deleteNodeAsync");
117
+ expect(fields).toContain("setDriveNameAsync");
65
118
  });
66
119
  });
67
120
  describe("DocumentModelSubgraph resolver generation", () => {
@@ -80,49 +133,59 @@ describe("Document-Drive Subgraph", () => {
80
133
  analyticsStore: {},
81
134
  });
82
135
  });
83
- it("should generate mutation resolvers for valid operations (sync + async)", () => {
84
- const mutations = subgraph.resolvers.Mutation;
85
- // Node operations - sync
86
- expect(mutations[`${documentName}_addFile`]).toBeTypeOf("function");
87
- expect(mutations[`${documentName}_addFolder`]).toBeTypeOf("function");
88
- expect(mutations[`${documentName}_deleteNode`]).toBeTypeOf("function");
89
- expect(mutations[`${documentName}_updateFile`]).toBeTypeOf("function");
90
- expect(mutations[`${documentName}_updateNode`]).toBeTypeOf("function");
91
- expect(mutations[`${documentName}_copyNode`]).toBeTypeOf("function");
92
- expect(mutations[`${documentName}_moveNode`]).toBeTypeOf("function");
93
- // Node operations - async
94
- expect(mutations[`${documentName}_addFileAsync`]).toBeTypeOf("function");
95
- expect(mutations[`${documentName}_deleteNodeAsync`]).toBeTypeOf("function");
96
- // Drive operations - sync
97
- expect(mutations[`${documentName}_setDriveName`]).toBeTypeOf("function");
98
- expect(mutations[`${documentName}_setDriveIcon`]).toBeTypeOf("function");
99
- expect(mutations[`${documentName}_setSharingType`]).toBeTypeOf("function");
100
- expect(mutations[`${documentName}_setAvailableOffline`]).toBeTypeOf("function");
101
- // Drive operations - async
102
- expect(mutations[`${documentName}_setDriveNameAsync`]).toBeTypeOf("function");
103
- // Cleanup operations
104
- expect(mutations[`${documentName}_removeListener`]).toBeTypeOf("function");
105
- expect(mutations[`${documentName}_removeTrigger`]).toBeTypeOf("function");
136
+ it("should have a namespace resolver on Query that returns an empty object", () => {
137
+ const queryResolvers = subgraph.resolvers.Query;
138
+ expect(queryResolvers[documentName]).toBeTypeOf("function");
139
+ expect(queryResolvers[documentName]()).toEqual({});
140
+ });
141
+ it("should have a namespace resolver on Mutation that returns an empty object", () => {
142
+ const mutationResolvers = subgraph.resolvers.Mutation;
143
+ expect(mutationResolvers[documentName]).toBeTypeOf("function");
144
+ expect(mutationResolvers[documentName]()).toEqual({});
145
+ });
146
+ it("should generate query resolvers on the Queries namespace key", () => {
147
+ const queries = subgraph.queryResolvers;
148
+ expect(queries).toBeDefined();
149
+ expect(queries.document).toBeTypeOf("function");
150
+ expect(queries.findDocuments).toBeTypeOf("function");
151
+ expect(queries.documentChildren).toBeTypeOf("function");
152
+ expect(queries.documentParents).toBeTypeOf("function");
153
+ });
154
+ it("should generate mutation resolvers for valid operations (sync + async) on the Mutations namespace key", () => {
155
+ const mutations = subgraph.mutationResolvers;
156
+ expect(mutations).toBeDefined();
157
+ expect(mutations["addFile"]).toBeTypeOf("function");
158
+ expect(mutations["addFolder"]).toBeTypeOf("function");
159
+ expect(mutations["deleteNode"]).toBeTypeOf("function");
160
+ expect(mutations["updateFile"]).toBeTypeOf("function");
161
+ expect(mutations["updateNode"]).toBeTypeOf("function");
162
+ expect(mutations["copyNode"]).toBeTypeOf("function");
163
+ expect(mutations["moveNode"]).toBeTypeOf("function");
164
+ expect(mutations["addFileAsync"]).toBeTypeOf("function");
165
+ expect(mutations["deleteNodeAsync"]).toBeTypeOf("function");
166
+ expect(mutations["setDriveName"]).toBeTypeOf("function");
167
+ expect(mutations["setDriveIcon"]).toBeTypeOf("function");
168
+ expect(mutations["setSharingType"]).toBeTypeOf("function");
169
+ expect(mutations["setAvailableOffline"]).toBeTypeOf("function");
170
+ expect(mutations["setDriveNameAsync"]).toBeTypeOf("function");
171
+ expect(mutations["removeListener"]).toBeTypeOf("function");
172
+ expect(mutations["removeTrigger"]).toBeTypeOf("function");
106
173
  });
107
174
  it("should generate mutation resolvers for listener and trigger operations", () => {
108
- const mutations = subgraph.resolvers.Mutation;
109
- // ADD_LISTENER and ADD_TRIGGER now have proper input types and should be included
110
- expect(mutations[`${documentName}_addListener`]).toBeTypeOf("function");
111
- expect(mutations[`${documentName}_addTrigger`]).toBeTypeOf("function");
112
- expect(mutations[`${documentName}_addListenerAsync`]).toBeTypeOf("function");
113
- expect(mutations[`${documentName}_addTriggerAsync`]).toBeTypeOf("function");
114
- });
115
- it("should generate flat query resolvers", () => {
116
- const queries = subgraph.resolvers.Query;
117
- expect(queries[`${documentName}_document`]).toBeTypeOf("function");
118
- expect(queries[`${documentName}_findDocuments`]).toBeTypeOf("function");
119
- expect(queries[`${documentName}_documentChildren`]).toBeTypeOf("function");
120
- expect(queries[`${documentName}_documentParents`]).toBeTypeOf("function");
175
+ const mutations = subgraph.mutationResolvers;
176
+ expect(mutations["addListener"]).toBeTypeOf("function");
177
+ expect(mutations["addTrigger"]).toBeTypeOf("function");
178
+ expect(mutations["addListenerAsync"]).toBeTypeOf("function");
179
+ expect(mutations["addTriggerAsync"]).toBeTypeOf("function");
121
180
  });
122
181
  it("should generate createDocument and createEmptyDocument mutations", () => {
123
- const mutations = subgraph.resolvers.Mutation;
124
- expect(mutations[`${documentName}_createDocument`]).toBeTypeOf("function");
125
- expect(mutations[`${documentName}_createEmptyDocument`]).toBeTypeOf("function");
182
+ const mutations = subgraph.mutationResolvers;
183
+ expect(mutations.createDocument).toBeTypeOf("function");
184
+ expect(mutations.createEmptyDocument).toBeTypeOf("function");
185
+ });
186
+ it("should not have flat prefixed resolvers on Query or Mutation", () => {
187
+ expect(Object.keys(subgraph.resolvers.Query)).toEqual([documentName]);
188
+ expect(Object.keys(subgraph.resolvers.Mutation)).toEqual([documentName]);
126
189
  });
127
190
  });
128
191
  describe("union type resolvers", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"document-drive-subgraph.test.js","sourceRoot":"","sources":["../../test/document-drive-subgraph.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document-drive-subgraph.test.js","sourceRoot":"","sources":["../../test/document-drive-subgraph.test.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,10 @@ describe("DocumentModelSubgraph Permission Checks", () => {
32
32
  actions: {
33
33
  setName: vi.fn((input) => ({ type: "SET_NAME", input })),
34
34
  setValue: vi.fn((input) => ({ type: "SET_VALUE", input })),
35
- restrictedOp: vi.fn((input) => ({ type: "RESTRICTED_OP", input })),
35
+ restrictedOp: vi.fn((input) => ({
36
+ type: "RESTRICTED_OP",
37
+ input,
38
+ })),
36
39
  },
37
40
  reducer: vi.fn(),
38
41
  };
@@ -106,17 +109,14 @@ describe("DocumentModelSubgraph Permission Checks", () => {
106
109
  });
107
110
  });
108
111
  describe("Query: document", () => {
109
- // Updated to match new flat resolver structure (TestModel_document instead of TestModel.getDocument)
110
112
  const callGetDocument = async (ctx, identifier) => {
111
- const queryResolver = subgraph.resolvers.Query
112
- ?.TestModel_document;
113
+ const queryResolver = subgraph.queryResolvers.document;
113
114
  return queryResolver(null, { identifier }, ctx);
114
115
  };
115
116
  describe("Global Admin Access", () => {
116
117
  it("should allow access when user is global admin", async () => {
117
118
  const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
118
119
  const result = await callGetDocument(ctx, "doc-123");
119
- // Result is DocumentWithChildren: { document: PHDocument, childIds: string[] }
120
120
  expect(result).toBeDefined();
121
121
  expect(result.document.id).toBe("doc-123");
122
122
  expect(mockDocumentPermissionService.canRead).not.toHaveBeenCalled();
@@ -146,17 +146,6 @@ describe("DocumentModelSubgraph Permission Checks", () => {
146
146
  const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
147
147
  await expect(callGetDocument(ctx, "")).rejects.toThrow("Document identifier is required");
148
148
  });
149
- // Note: Drive validation is no longer part of document query in new API
150
- // Documents are retrieved directly by identifier, parentId filtering is done via findDocuments
151
- it.skip("should verify document is in specified drive when driveId provided", async () => {
152
- mockReactorClient.find = vi.fn().mockResolvedValue({
153
- results: [],
154
- options: { limit: 10, cursor: "" },
155
- });
156
- const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
157
- // This test is no longer applicable - drive filtering is done via findDocuments
158
- await expect(callGetDocument(ctx, "doc-123")).rejects.toThrow("is not part of");
159
- });
160
149
  it("should throw error if document type does not match", async () => {
161
150
  const wrongTypeDoc = {
162
151
  ...mockDocument,
@@ -178,9 +167,9 @@ describe("DocumentModelSubgraph Permission Checks", () => {
178
167
  options: { limit: 10, cursor: "" },
179
168
  });
180
169
  let capturedGetParentsFn = null;
181
- vi.mocked(mockDocumentPermissionService.canRead).mockImplementation(async (_docId, _user, getParentsFn) => {
170
+ vi.mocked(mockDocumentPermissionService.canRead).mockImplementation((_docId, _user, getParentsFn) => {
182
171
  capturedGetParentsFn = getParentsFn;
183
- return true;
172
+ return Promise.resolve(true);
184
173
  });
185
174
  const ctx = createContext({ userAddress: "0xuser" });
186
175
  await callGetDocument(ctx, "child-doc");
@@ -191,9 +180,9 @@ describe("DocumentModelSubgraph Permission Checks", () => {
191
180
  it("should return empty array if getParents fails", async () => {
192
181
  vi.mocked(mockReactorClient.getParents).mockRejectedValue(new Error("Not found"));
193
182
  let capturedGetParentsFn = null;
194
- vi.mocked(mockDocumentPermissionService.canRead).mockImplementation(async (_docId, _user, getParentsFn) => {
183
+ vi.mocked(mockDocumentPermissionService.canRead).mockImplementation((_docId, _user, getParentsFn) => {
195
184
  capturedGetParentsFn = getParentsFn;
196
- return true;
185
+ return Promise.resolve(true);
197
186
  });
198
187
  const ctx = createContext({ userAddress: "0xuser" });
199
188
  await callGetDocument(ctx, "child-doc");
@@ -202,29 +191,16 @@ describe("DocumentModelSubgraph Permission Checks", () => {
202
191
  });
203
192
  });
204
193
  describe("reactorClient integration", () => {
205
- // Note: Drive filtering is now done via findDocuments, not document query
206
- it.skip("should use reactorClient.find to check document in drive", async () => {
207
- const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
208
- await callGetDocument(ctx, "doc-123");
209
- // This test is no longer applicable - drive filtering is done via findDocuments
210
- expect(mockReactorClient.find).toHaveBeenCalledWith({
211
- parentId: "drive-1",
212
- ids: ["doc-123"],
213
- });
214
- });
215
194
  it("should use reactorClient.get to fetch document", async () => {
216
195
  const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
217
196
  await callGetDocument(ctx, "doc-123");
218
- // The shared resolver calls get with identifier and optional view
219
197
  expect(mockReactorClient.get).toHaveBeenCalledWith("doc-123", undefined);
220
198
  });
221
199
  });
222
200
  });
223
201
  describe("Query: findDocuments", () => {
224
- // Updated to match new flat resolver structure (TestModel_findDocuments)
225
202
  const callFindDocuments = async (ctx, parentId) => {
226
- const queryResolver = subgraph.resolvers.Query
227
- ?.TestModel_findDocuments;
203
+ const queryResolver = subgraph.queryResolvers.findDocuments;
228
204
  const result = await queryResolver(null, { search: { parentId }, paging: { limit: 10 } }, ctx);
229
205
  return result.items;
230
206
  };
@@ -249,26 +225,26 @@ describe("DocumentModelSubgraph Permission Checks", () => {
249
225
  });
250
226
  });
251
227
  it("should filter documents based on permissions when no global access", async () => {
252
- vi.mocked(mockDocumentPermissionService.canRead).mockImplementation(async (docId) => docId === "drive-1" || docId === "doc-1" || docId === "doc-3");
228
+ vi.mocked(mockDocumentPermissionService.canRead).mockImplementation((docId) => Promise.resolve(docId === "drive-1" || docId === "doc-1" || docId === "doc-3"));
253
229
  const ctx = createContext({ userAddress: "0xpartial" });
254
230
  const result = await callFindDocuments(ctx, "drive-1");
255
231
  expect(result).toHaveLength(2);
256
- expect(result.map((d) => d.id).sort()).toEqual(["doc-1", "doc-3"]);
232
+ expect(result.map((d) => d.id).sort()).toEqual([
233
+ "doc-1",
234
+ "doc-3",
235
+ ]);
257
236
  });
258
237
  it("should return empty array when user has no document permissions", async () => {
259
- vi.mocked(mockDocumentPermissionService.canRead).mockImplementation(async (docId) => docId === "drive-1");
238
+ vi.mocked(mockDocumentPermissionService.canRead).mockImplementation((docId) => Promise.resolve(docId === "drive-1"));
260
239
  const ctx = createContext({ userAddress: "0xnopermissions" });
261
240
  const result = await callFindDocuments(ctx, "drive-1");
262
241
  expect(result).toHaveLength(0);
263
242
  });
264
243
  });
265
244
  describe("Permission filtering", () => {
266
- // Note: In the new API, findDocuments filters results based on individual document permissions
267
- // rather than checking drive permission first
268
- it("should filter documents when user has no global access", async () => {
245
+ it("should filter out all documents when user has no permissions", async () => {
269
246
  vi.mocked(mockDocumentPermissionService.canRead).mockResolvedValue(false);
270
247
  const ctx = createContext({ userAddress: "0xunpermitted" });
271
- // With no permissions, all documents should be filtered out
272
248
  const result = await callFindDocuments(ctx, "drive-1");
273
249
  expect(result).toHaveLength(0);
274
250
  });
@@ -277,7 +253,6 @@ describe("DocumentModelSubgraph Permission Checks", () => {
277
253
  it("should use reactorClient.find with type filter", async () => {
278
254
  const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
279
255
  await callFindDocuments(ctx, "drive-1");
280
- // The shared resolver now uses find with these parameters - first call includes type filter
281
256
  expect(mockReactorClient.find).toHaveBeenCalledWith(expect.objectContaining({
282
257
  type: "powerhouse/test-model",
283
258
  parentId: "drive-1",
@@ -289,9 +264,9 @@ describe("DocumentModelSubgraph Permission Checks", () => {
289
264
  });
290
265
  describe("Query: documents (get all)", () => {
291
266
  const callDocuments = async (ctx, paging) => {
292
- const queryResolver = subgraph.resolvers.Query
293
- ?.TestModel_documents;
294
- return queryResolver(null, { paging }, ctx);
267
+ const queryResolver = subgraph.queryResolvers.documents;
268
+ const result = await queryResolver(null, { paging }, ctx);
269
+ return result;
295
270
  };
296
271
  describe("Global Role Access", () => {
297
272
  it("should return all documents for admin", async () => {
@@ -349,8 +324,7 @@ describe("DocumentModelSubgraph Permission Checks", () => {
349
324
  });
350
325
  describe("Mutation: createDocument", () => {
351
326
  const callCreateDocument = async (ctx, name, parentIdentifier) => {
352
- const mutation = subgraph.resolvers.Mutation
353
- ?.TestModel_createDocument;
327
+ const mutation = subgraph.mutationResolvers.createDocument;
354
328
  return mutation(null, { name, parentIdentifier }, ctx);
355
329
  };
356
330
  describe("Global Admin Access", () => {
@@ -376,7 +350,7 @@ describe("DocumentModelSubgraph Permission Checks", () => {
376
350
  });
377
351
  });
378
352
  describe("Without parentIdentifier", () => {
379
- it("should check global write access when no parentIdentifier", async () => {
353
+ it("should deny when user lacks global admin access", async () => {
380
354
  const ctx = createContext({ userAddress: "0xnoglobal" });
381
355
  await expect(callCreateDocument(ctx, "New Doc")).rejects.toThrow("Forbidden: insufficient permissions to create documents");
382
356
  });
@@ -402,8 +376,8 @@ describe("DocumentModelSubgraph Permission Checks", () => {
402
376
  });
403
377
  describe("Mutation: operations (setName, setValue, etc.)", () => {
404
378
  const callMutation = async (ctx, operationName, docId, input) => {
405
- const mutation = subgraph.resolvers.Mutation?.[`TestModel_${operationName}`];
406
- return mutation(null, { docId, input }, ctx);
379
+ const mutation = subgraph.mutationResolvers[operationName];
380
+ return await mutation(null, { docId, input }, ctx);
407
381
  };
408
382
  describe("Write Permission Check", () => {
409
383
  it("should check write permission before executing operation", async () => {
@@ -534,22 +508,15 @@ describe("DocumentModelSubgraph Permission Checks", () => {
534
508
  });
535
509
  describe("AUTH_ENABLED=false behavior", () => {
536
510
  it("should allow all read access when admin role returns true", async () => {
537
- const ctx = createContext({
538
- isAdmin: true,
539
- userAddress: "0xanyone",
540
- });
541
- const queryResolver = subgraph.resolvers.Query
542
- ?.TestModel_document;
511
+ const ctx = createContext({ isAdmin: true, userAddress: "0xanyone" });
512
+ const queryResolver = subgraph.queryResolvers.document;
543
513
  const result = await queryResolver(null, { identifier: "doc-123" }, ctx);
544
514
  expect(result).toBeDefined();
545
515
  expect(mockDocumentPermissionService.canRead).not.toHaveBeenCalled();
546
516
  });
547
517
  it("should allow all write access when admin role returns true", async () => {
548
- const ctx = createContext({
549
- isAdmin: true,
550
- userAddress: "0xanyone",
551
- });
552
- const result = await subgraph.resolvers.Mutation?.TestModel_setName(null, { docId: "doc-123", input: { name: "New" } }, ctx);
518
+ const ctx = createContext({ isAdmin: true, userAddress: "0xanyone" });
519
+ const result = await subgraph.mutationResolvers.setName(null, { docId: "doc-123", input: { name: "New" } }, ctx);
553
520
  expect(result).toMatchObject({
554
521
  id: "doc-123",
555
522
  revisionsList: expect.arrayContaining([
@@ -573,24 +540,22 @@ describe("DocumentModelSubgraph Permission Checks", () => {
573
540
  });
574
541
  it("should deny read access when no permission service and no global access", async () => {
575
542
  const ctx = createContext({ userAddress: "0xuser" });
576
- const queryResolver = subgraphWithoutPermService.resolvers.Query
577
- ?.TestModel_document;
543
+ const queryResolver = subgraphWithoutPermService.queryResolvers.document;
578
544
  await expect(queryResolver(null, { identifier: "doc-123" }, ctx)).rejects.toThrow("Forbidden");
579
545
  });
580
546
  it("should deny write access when no permission service and no global access", async () => {
581
547
  const ctx = createContext({ userAddress: "0xuser" });
582
- await expect(subgraphWithoutPermService.resolvers.Mutation?.TestModel_setName(null, { docId: "doc-123", input: { name: "New" } }, ctx)).rejects.toThrow("Forbidden");
548
+ await expect(subgraphWithoutPermService.mutationResolvers.setName(null, { docId: "doc-123", input: { name: "New" } }, ctx)).rejects.toThrow("Forbidden");
583
549
  });
584
550
  it("should allow access with global roles even without permission service", async () => {
585
551
  const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
586
- const queryResolver = subgraphWithoutPermService.resolvers.Query
587
- ?.TestModel_document;
552
+ const queryResolver = subgraphWithoutPermService.queryResolvers.document;
588
553
  const result = await queryResolver(null, { identifier: "doc-123" }, ctx);
589
554
  expect(result).toBeDefined();
590
555
  });
591
556
  it("should skip operation restriction check when no permission service", async () => {
592
557
  const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
593
- const result = await subgraphWithoutPermService.resolvers.Mutation?.TestModel_setName(null, { docId: "doc-123", input: { name: "New" } }, ctx);
558
+ const result = await subgraphWithoutPermService.mutationResolvers.setName(null, { docId: "doc-123", input: { name: "New" } }, ctx);
594
559
  expect(result).toMatchObject({
595
560
  id: "doc-123",
596
561
  revisionsList: expect.arrayContaining([
@@ -605,8 +570,7 @@ describe("DocumentModelSubgraph Permission Checks", () => {
605
570
  user: { address: "" },
606
571
  isAdmin: vi.fn().mockReturnValue(false),
607
572
  };
608
- const queryResolver = subgraph.resolvers.Query
609
- ?.TestModel_document;
573
+ const queryResolver = subgraph.queryResolvers.document;
610
574
  await expect(queryResolver(null, { identifier: "doc-123" }, ctx)).rejects.toThrow("Forbidden");
611
575
  expect(ctx.isAdmin).toHaveBeenCalledWith("");
612
576
  });
@@ -615,7 +579,7 @@ describe("DocumentModelSubgraph Permission Checks", () => {
615
579
  vi.mocked(mockDocumentPermissionService.isOperationRestricted).mockResolvedValue(true);
616
580
  vi.mocked(mockDocumentPermissionService.canExecuteOperation).mockResolvedValue(true);
617
581
  const ctx = createContext({ userAddress: "0xuser" });
618
- await subgraph.resolvers.Mutation?.TestModel_setValue(null, { docId: "doc-123", input: { value: 42 } }, ctx);
582
+ await subgraph.mutationResolvers.setValue(null, { docId: "doc-123", input: { value: 42 } }, ctx);
619
583
  expect(mockDocumentPermissionService.isOperationRestricted).toHaveBeenCalledWith("doc-123", "SET_VALUE");
620
584
  });
621
585
  });