@powerhousedao/reactor-api 5.1.0 → 5.2.0-staging.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 (129) hide show
  1. package/dist/codegen.js +2 -2
  2. package/dist/codegen.js.map +1 -1
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/src/graphql/auth/index.d.ts +2 -0
  8. package/dist/src/graphql/auth/index.d.ts.map +1 -0
  9. package/dist/src/graphql/auth/index.js +2 -0
  10. package/dist/src/graphql/auth/index.js.map +1 -0
  11. package/dist/src/graphql/auth/resolvers.d.ts +149 -0
  12. package/dist/src/graphql/auth/resolvers.d.ts.map +1 -0
  13. package/dist/src/graphql/auth/resolvers.js +173 -0
  14. package/dist/src/graphql/auth/resolvers.js.map +1 -0
  15. package/dist/src/graphql/auth/schema.graphql +173 -0
  16. package/dist/src/graphql/auth/subgraph.d.ts +177 -0
  17. package/dist/src/graphql/auth/subgraph.d.ts.map +1 -0
  18. package/dist/src/graphql/auth/subgraph.js +340 -0
  19. package/dist/src/graphql/auth/subgraph.js.map +1 -0
  20. package/dist/src/graphql/base-subgraph.d.ts +4 -1
  21. package/dist/src/graphql/base-subgraph.d.ts.map +1 -1
  22. package/dist/src/graphql/base-subgraph.js +4 -0
  23. package/dist/src/graphql/base-subgraph.js.map +1 -1
  24. package/dist/src/graphql/document-model-subgraph.d.ts +51 -0
  25. package/dist/src/graphql/document-model-subgraph.d.ts.map +1 -0
  26. package/dist/src/graphql/document-model-subgraph.js +104 -0
  27. package/dist/src/graphql/document-model-subgraph.js.map +1 -0
  28. package/dist/src/graphql/drive-subgraph.d.ts.map +1 -1
  29. package/dist/src/graphql/drive-subgraph.js +51 -10
  30. package/dist/src/graphql/drive-subgraph.js.map +1 -1
  31. package/dist/src/graphql/graphql-manager.d.ts +11 -3
  32. package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
  33. package/dist/src/graphql/graphql-manager.js +72 -15
  34. package/dist/src/graphql/graphql-manager.js.map +1 -1
  35. package/dist/src/graphql/index.d.ts +1 -0
  36. package/dist/src/graphql/index.d.ts.map +1 -1
  37. package/dist/src/graphql/index.js +1 -0
  38. package/dist/src/graphql/index.js.map +1 -1
  39. package/dist/src/graphql/reactor/adapters.js +1 -1
  40. package/dist/src/graphql/reactor/adapters.js.map +1 -1
  41. package/dist/src/graphql/reactor/factory.d.ts +4 -4
  42. package/dist/src/graphql/reactor/factory.d.ts.map +1 -1
  43. package/dist/src/graphql/reactor/gen/graphql.d.ts +295 -64
  44. package/dist/src/graphql/reactor/gen/graphql.d.ts.map +1 -1
  45. package/dist/src/graphql/reactor/gen/graphql.js +121 -8
  46. package/dist/src/graphql/reactor/gen/graphql.js.map +1 -1
  47. package/dist/src/graphql/reactor/operations.graphql +253 -0
  48. package/dist/src/graphql/reactor/pubsub.d.ts +2 -2
  49. package/dist/src/graphql/reactor/pubsub.d.ts.map +1 -1
  50. package/dist/src/graphql/reactor/pubsub.js +2 -1
  51. package/dist/src/graphql/reactor/pubsub.js.map +1 -1
  52. package/dist/src/graphql/reactor/resolvers.d.ts +48 -17
  53. package/dist/src/graphql/reactor/resolvers.d.ts.map +1 -1
  54. package/dist/src/graphql/reactor/resolvers.js +114 -34
  55. package/dist/src/graphql/reactor/resolvers.js.map +1 -1
  56. package/dist/src/graphql/reactor/schema.graphql +429 -0
  57. package/dist/src/graphql/reactor/subgraph.d.ts +34 -0
  58. package/dist/src/graphql/reactor/subgraph.d.ts.map +1 -1
  59. package/dist/src/graphql/reactor/subgraph.js +325 -22
  60. package/dist/src/graphql/reactor/subgraph.js.map +1 -1
  61. package/dist/src/graphql/reactor/validation.d.ts +62 -62
  62. package/dist/src/graphql/system/system-subgraph.d.ts.map +1 -1
  63. package/dist/src/graphql/types.d.ts +5 -1
  64. package/dist/src/graphql/types.d.ts.map +1 -1
  65. package/dist/src/graphql/utils.js +1 -1
  66. package/dist/src/graphql/utils.js.map +1 -1
  67. package/dist/src/migrations/001_create_document_permissions.d.ts +4 -0
  68. package/dist/src/migrations/001_create_document_permissions.d.ts.map +1 -0
  69. package/dist/src/migrations/001_create_document_permissions.js +91 -0
  70. package/dist/src/migrations/001_create_document_permissions.js.map +1 -0
  71. package/dist/src/migrations/index.d.ts +10 -0
  72. package/dist/src/migrations/index.d.ts.map +1 -0
  73. package/dist/src/migrations/index.js +59 -0
  74. package/dist/src/migrations/index.js.map +1 -0
  75. package/dist/src/packages/util.js +1 -1
  76. package/dist/src/packages/util.js.map +1 -1
  77. package/dist/src/server.d.ts +17 -7
  78. package/dist/src/server.d.ts.map +1 -1
  79. package/dist/src/server.js +49 -27
  80. package/dist/src/server.js.map +1 -1
  81. package/dist/src/services/auth.service.d.ts +1 -0
  82. package/dist/src/services/auth.service.d.ts.map +1 -1
  83. package/dist/src/services/auth.service.js +32 -22
  84. package/dist/src/services/auth.service.js.map +1 -1
  85. package/dist/src/services/document-permission.service.d.ts +201 -0
  86. package/dist/src/services/document-permission.service.d.ts.map +1 -0
  87. package/dist/src/services/document-permission.service.js +636 -0
  88. package/dist/src/services/document-permission.service.js.map +1 -0
  89. package/dist/src/utils/create-schema.d.ts +5 -4
  90. package/dist/src/utils/create-schema.d.ts.map +1 -1
  91. package/dist/src/utils/create-schema.js +110 -4
  92. package/dist/src/utils/create-schema.js.map +1 -1
  93. package/dist/src/utils/db.d.ts +65 -1
  94. package/dist/src/utils/db.d.ts.map +1 -1
  95. package/dist/src/utils/db.js.map +1 -1
  96. package/dist/test/document-permission.service.test.d.ts +2 -0
  97. package/dist/test/document-permission.service.test.d.ts.map +1 -0
  98. package/dist/test/document-permission.service.test.js +480 -0
  99. package/dist/test/document-permission.service.test.js.map +1 -0
  100. package/dist/test/drive-subgraph-permissions.test.d.ts +2 -0
  101. package/dist/test/drive-subgraph-permissions.test.d.ts.map +1 -0
  102. package/dist/test/drive-subgraph-permissions.test.js +195 -0
  103. package/dist/test/drive-subgraph-permissions.test.js.map +1 -0
  104. package/dist/test/identity-integration.test.d.ts +2 -0
  105. package/dist/test/identity-integration.test.d.ts.map +1 -0
  106. package/dist/test/identity-integration.test.js +349 -0
  107. package/dist/test/identity-integration.test.js.map +1 -0
  108. package/dist/test/permissions-integration.test.d.ts +2 -0
  109. package/dist/test/permissions-integration.test.d.ts.map +1 -0
  110. package/dist/test/permissions-integration.test.js +421 -0
  111. package/dist/test/permissions-integration.test.js.map +1 -0
  112. package/dist/test/reactor-adapters.test.js +2 -2
  113. package/dist/test/reactor-adapters.test.js.map +1 -1
  114. package/dist/test/reactor-resolvers.test.js +24 -24
  115. package/dist/test/reactor-resolvers.test.js.map +1 -1
  116. package/dist/test/reactor-subgraph-permissions.test.d.ts +2 -0
  117. package/dist/test/reactor-subgraph-permissions.test.d.ts.map +1 -0
  118. package/dist/test/reactor-subgraph-permissions.test.js +400 -0
  119. package/dist/test/reactor-subgraph-permissions.test.js.map +1 -0
  120. package/dist/test/two-reactor-gql-sync.test.d.ts +2 -0
  121. package/dist/test/two-reactor-gql-sync.test.d.ts.map +1 -0
  122. package/dist/test/two-reactor-gql-sync.test.js +298 -0
  123. package/dist/test/two-reactor-gql-sync.test.js.map +1 -0
  124. package/dist/test/utils/gql-resolver-bridge.d.ts +12 -0
  125. package/dist/test/utils/gql-resolver-bridge.d.ts.map +1 -0
  126. package/dist/test/utils/gql-resolver-bridge.js +60 -0
  127. package/dist/test/utils/gql-resolver-bridge.js.map +1 -0
  128. package/dist/tsconfig.tsbuildinfo +1 -1
  129. package/package.json +11 -9
@@ -1,23 +1,129 @@
1
- import { childLogger } from "document-drive";
1
+ import { ConsoleLogger } from "@powerhousedao/reactor";
2
2
  import fs from "fs";
3
+ import { GraphQLError } from "graphql";
3
4
  import { withFilter } from "graphql-subscriptions";
4
5
  import { gql } from "graphql-tag";
5
6
  import path from "path";
7
+ import { fileURLToPath } from "url";
6
8
  import { BaseSubgraph } from "../base-subgraph.js";
7
9
  import { matchesJobFilter, matchesSearchFilter, toGqlDocumentChangeEvent, } from "./adapters.js";
8
10
  import { ensureGlobalDocumentSubscription, ensureJobSubscription, getPubSub, SUBSCRIPTION_TRIGGERS, } from "./pubsub.js";
9
11
  import * as resolvers from "./resolvers.js";
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = path.dirname(__filename);
10
14
  export class ReactorSubgraph extends BaseSubgraph {
11
- logger = childLogger([
12
- "ReactorSubgraph",
13
- Math.floor(Math.random() * 999).toString(),
14
- ]);
15
+ // temp
16
+ logger = new ConsoleLogger(["ReactorSubgraph"]);
15
17
  constructor(args) {
16
18
  super(args);
17
19
  this.logger.verbose(`constructor()`);
18
20
  }
19
21
  name = "r/:reactor";
20
22
  hasSubscriptions = true;
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
+ */
44
+ getParentIdsFn() {
45
+ return resolvers.createGetParentIdsFn(this.reactorClient);
46
+ }
47
+ /**
48
+ * Check if user can read a document (with hierarchy)
49
+ */
50
+ async canReadDocument(documentId, ctx) {
51
+ // Global access allows reading
52
+ if (this.hasGlobalReadAccess(ctx)) {
53
+ return true;
54
+ }
55
+ // Check document-level permissions with hierarchy
56
+ if (this.documentPermissionService) {
57
+ return this.documentPermissionService.canRead(documentId, ctx.user?.address, this.getParentIdsFn());
58
+ }
59
+ return false;
60
+ }
61
+ /**
62
+ * Check if user can write to a document (with hierarchy)
63
+ */
64
+ async canWriteDocument(documentId, ctx) {
65
+ // Global write access allows writing
66
+ if (this.hasGlobalWriteAccess(ctx)) {
67
+ return true;
68
+ }
69
+ // Check document-level permissions with hierarchy
70
+ if (this.documentPermissionService) {
71
+ return this.documentPermissionService.canWrite(documentId, ctx.user?.address, this.getParentIdsFn());
72
+ }
73
+ return false;
74
+ }
75
+ /**
76
+ * Throw an error if user cannot read the document
77
+ */
78
+ async assertCanRead(documentId, ctx) {
79
+ const canRead = await this.canReadDocument(documentId, ctx);
80
+ if (!canRead) {
81
+ throw new GraphQLError("Forbidden: insufficient permissions to read this document");
82
+ }
83
+ }
84
+ /**
85
+ * Throw an error if user cannot write to the document
86
+ */
87
+ async assertCanWrite(documentId, ctx) {
88
+ const canWrite = await this.canWriteDocument(documentId, ctx);
89
+ if (!canWrite) {
90
+ throw new GraphQLError("Forbidden: insufficient permissions to write to this document");
91
+ }
92
+ }
93
+ /**
94
+ * Check if user can execute specific operations on a document.
95
+ * Only checks operations that have restrictions set.
96
+ * Throws an error if any operation is restricted and user lacks permission.
97
+ */
98
+ async assertCanExecuteOperations(documentId, actions, ctx) {
99
+ // Skip if no permission service
100
+ if (!this.documentPermissionService) {
101
+ return;
102
+ }
103
+ // Global admins bypass operation-level restrictions
104
+ if (ctx.isAdmin?.(ctx.user?.address ?? "")) {
105
+ return;
106
+ }
107
+ for (const action of actions) {
108
+ if (!action || typeof action !== "object") {
109
+ continue;
110
+ }
111
+ const actionObj = action;
112
+ const operationType = actionObj.type;
113
+ if (typeof operationType !== "string") {
114
+ continue;
115
+ }
116
+ // Check if this operation has any restrictions set
117
+ const isRestricted = await this.documentPermissionService.isOperationRestricted(documentId, operationType);
118
+ if (isRestricted) {
119
+ // Operation is restricted, check if user has permission
120
+ const canExecute = await this.documentPermissionService.canExecuteOperation(documentId, operationType, ctx.user?.address);
121
+ if (!canExecute) {
122
+ throw new GraphQLError(`Forbidden: insufficient permissions to execute operation "${operationType}" on this document`);
123
+ }
124
+ }
125
+ }
126
+ }
21
127
  // Load schema from file
22
128
  typeDefs = gql(fs.readFileSync(path.join(__dirname, "schema.graphql"), "utf-8"));
23
129
  resolvers = {
@@ -32,19 +138,32 @@ export class ReactorSubgraph extends BaseSubgraph {
32
138
  throw error;
33
139
  }
34
140
  },
35
- document: async (_parent, args) => {
141
+ document: async (_parent, args, ctx) => {
36
142
  this.logger.debug("document", args);
37
143
  try {
38
- return await resolvers.document(this.reactorClient, args);
144
+ // Resolve the document ID first
145
+ const doc = await resolvers.document(this.reactorClient, args);
146
+ if (doc) {
147
+ await this.assertCanRead(doc.document.id, ctx);
148
+ }
149
+ return doc;
39
150
  }
40
151
  catch (error) {
41
152
  this.logger.error("Error in document:", error);
42
153
  throw error;
43
154
  }
44
155
  },
45
- documentChildren: async (_parent, args) => {
156
+ documentChildren: async (_parent, args, ctx) => {
46
157
  this.logger.debug("documentChildren", args);
47
158
  try {
159
+ // First resolve the parent to get its ID and check permission
160
+ const parent = await resolvers.document(this.reactorClient, {
161
+ identifier: args.parentIdentifier,
162
+ view: args.view,
163
+ });
164
+ if (parent) {
165
+ await this.assertCanRead(parent.document.id, ctx);
166
+ }
48
167
  return await resolvers.documentChildren(this.reactorClient, args);
49
168
  }
50
169
  catch (error) {
@@ -52,9 +171,17 @@ export class ReactorSubgraph extends BaseSubgraph {
52
171
  throw error;
53
172
  }
54
173
  },
55
- documentParents: async (_parent, args) => {
174
+ documentParents: async (_parent, args, ctx) => {
56
175
  this.logger.debug("documentParents", args);
57
176
  try {
177
+ // First resolve the child to get its ID and check permission
178
+ const child = await resolvers.document(this.reactorClient, {
179
+ identifier: args.childIdentifier,
180
+ view: args.view,
181
+ });
182
+ if (child) {
183
+ await this.assertCanRead(child.document.id, ctx);
184
+ }
58
185
  return await resolvers.documentParents(this.reactorClient, args);
59
186
  }
60
187
  catch (error) {
@@ -62,10 +189,27 @@ export class ReactorSubgraph extends BaseSubgraph {
62
189
  throw error;
63
190
  }
64
191
  },
65
- findDocuments: async (_parent, args) => {
192
+ findDocuments: async (_parent, args, ctx) => {
66
193
  this.logger.debug("findDocuments", args);
67
194
  try {
68
- return await resolvers.findDocuments(this.reactorClient, args);
195
+ const result = await resolvers.findDocuments(this.reactorClient, args);
196
+ // Filter results to only include documents the user can read
197
+ if (!this.hasGlobalReadAccess(ctx) &&
198
+ this.documentPermissionService) {
199
+ const filteredItems = [];
200
+ for (const item of result.items) {
201
+ const canRead = await this.canReadDocument(item.id, ctx);
202
+ if (canRead) {
203
+ filteredItems.push(item);
204
+ }
205
+ }
206
+ return {
207
+ ...result,
208
+ items: filteredItems,
209
+ totalCount: filteredItems.length,
210
+ };
211
+ }
212
+ return result;
69
213
  }
70
214
  catch (error) {
71
215
  this.logger.error("Error in findDocuments:", error);
@@ -82,11 +226,37 @@ export class ReactorSubgraph extends BaseSubgraph {
82
226
  throw error;
83
227
  }
84
228
  },
229
+ pollSyncEnvelopes: async (_parent, args) => {
230
+ this.logger.debug("pollSyncEnvelopes", args);
231
+ if (!this.syncManager) {
232
+ throw new Error("SyncManager not available");
233
+ }
234
+ try {
235
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
236
+ return await resolvers.pollSyncEnvelopes(this.syncManager, args);
237
+ }
238
+ catch (error) {
239
+ this.logger.error("Error in pollSyncEnvelopes:", error);
240
+ throw error;
241
+ }
242
+ },
85
243
  },
86
244
  Mutation: {
87
- createDocument: async (_parent, args) => {
245
+ createDocument: async (_parent, args, ctx) => {
88
246
  this.logger.debug("createDocument", args);
89
247
  try {
248
+ // If creating under a parent, check write permission on parent
249
+ if (args.parentIdentifier) {
250
+ const parent = await resolvers.document(this.reactorClient, {
251
+ identifier: args.parentIdentifier,
252
+ });
253
+ if (parent) {
254
+ await this.assertCanWrite(parent.document.id, ctx);
255
+ }
256
+ }
257
+ else if (!this.hasGlobalWriteAccess(ctx)) {
258
+ throw new GraphQLError("Forbidden: insufficient permissions to create documents");
259
+ }
90
260
  return await resolvers.createDocument(this.reactorClient, args);
91
261
  }
92
262
  catch (error) {
@@ -94,9 +264,21 @@ export class ReactorSubgraph extends BaseSubgraph {
94
264
  throw error;
95
265
  }
96
266
  },
97
- createEmptyDocument: async (_parent, args) => {
267
+ createEmptyDocument: async (_parent, args, ctx) => {
98
268
  this.logger.debug("createEmptyDocument", args);
99
269
  try {
270
+ // If creating under a parent, check write permission on parent
271
+ if (args.parentIdentifier) {
272
+ const parent = await resolvers.document(this.reactorClient, {
273
+ identifier: args.parentIdentifier,
274
+ });
275
+ if (parent) {
276
+ await this.assertCanWrite(parent.document.id, ctx);
277
+ }
278
+ }
279
+ else if (!this.hasGlobalWriteAccess(ctx)) {
280
+ throw new GraphQLError("Forbidden: insufficient permissions to create documents");
281
+ }
100
282
  return await resolvers.createEmptyDocument(this.reactorClient, args);
101
283
  }
102
284
  catch (error) {
@@ -104,9 +286,19 @@ export class ReactorSubgraph extends BaseSubgraph {
104
286
  throw error;
105
287
  }
106
288
  },
107
- mutateDocument: async (_parent, args) => {
289
+ mutateDocument: async (_parent, args, ctx) => {
108
290
  this.logger.debug("mutateDocument", args);
109
291
  try {
292
+ // Resolve document and check write permission
293
+ const doc = await resolvers.document(this.reactorClient, {
294
+ identifier: args.documentIdentifier,
295
+ view: args.view,
296
+ });
297
+ if (doc) {
298
+ await this.assertCanWrite(doc.document.id, ctx);
299
+ // Check operation-level permissions for each action
300
+ await this.assertCanExecuteOperations(doc.document.id, args.actions, ctx);
301
+ }
110
302
  return await resolvers.mutateDocument(this.reactorClient, args);
111
303
  }
112
304
  catch (error) {
@@ -114,9 +306,19 @@ export class ReactorSubgraph extends BaseSubgraph {
114
306
  throw error;
115
307
  }
116
308
  },
117
- mutateDocumentAsync: async (_parent, args) => {
309
+ mutateDocumentAsync: async (_parent, args, ctx) => {
118
310
  this.logger.debug("mutateDocumentAsync", args);
119
311
  try {
312
+ // Resolve document and check write permission
313
+ const doc = await resolvers.document(this.reactorClient, {
314
+ identifier: args.documentIdentifier,
315
+ view: args.view,
316
+ });
317
+ if (doc) {
318
+ await this.assertCanWrite(doc.document.id, ctx);
319
+ // Check operation-level permissions for each action
320
+ await this.assertCanExecuteOperations(doc.document.id, args.actions, ctx);
321
+ }
120
322
  return await resolvers.mutateDocumentAsync(this.reactorClient, args);
121
323
  }
122
324
  catch (error) {
@@ -124,9 +326,16 @@ export class ReactorSubgraph extends BaseSubgraph {
124
326
  throw error;
125
327
  }
126
328
  },
127
- renameDocument: async (_parent, args) => {
329
+ renameDocument: async (_parent, args, ctx) => {
128
330
  this.logger.debug("renameDocument", args);
129
331
  try {
332
+ // Resolve document and check write permission
333
+ const doc = await resolvers.document(this.reactorClient, {
334
+ identifier: args.documentIdentifier,
335
+ });
336
+ if (doc) {
337
+ await this.assertCanWrite(doc.document.id, ctx);
338
+ }
130
339
  return await resolvers.renameDocument(this.reactorClient, args);
131
340
  }
132
341
  catch (error) {
@@ -134,9 +343,16 @@ export class ReactorSubgraph extends BaseSubgraph {
134
343
  throw error;
135
344
  }
136
345
  },
137
- addChildren: async (_parent, args) => {
346
+ addChildren: async (_parent, args, ctx) => {
138
347
  this.logger.debug("addChildren", args);
139
348
  try {
349
+ // Check write permission on parent
350
+ const parent = await resolvers.document(this.reactorClient, {
351
+ identifier: args.parentIdentifier,
352
+ });
353
+ if (parent) {
354
+ await this.assertCanWrite(parent.document.id, ctx);
355
+ }
140
356
  return await resolvers.addChildren(this.reactorClient, args);
141
357
  }
142
358
  catch (error) {
@@ -144,9 +360,16 @@ export class ReactorSubgraph extends BaseSubgraph {
144
360
  throw error;
145
361
  }
146
362
  },
147
- removeChildren: async (_parent, args) => {
363
+ removeChildren: async (_parent, args, ctx) => {
148
364
  this.logger.debug("removeChildren", args);
149
365
  try {
366
+ // Check write permission on parent
367
+ const parent = await resolvers.document(this.reactorClient, {
368
+ identifier: args.parentIdentifier,
369
+ });
370
+ if (parent) {
371
+ await this.assertCanWrite(parent.document.id, ctx);
372
+ }
150
373
  return await resolvers.removeChildren(this.reactorClient, args);
151
374
  }
152
375
  catch (error) {
@@ -154,9 +377,22 @@ export class ReactorSubgraph extends BaseSubgraph {
154
377
  throw error;
155
378
  }
156
379
  },
157
- moveChildren: async (_parent, args) => {
380
+ moveChildren: async (_parent, args, ctx) => {
158
381
  this.logger.debug("moveChildren", args);
159
382
  try {
383
+ // Check write permission on both source and target parents
384
+ const sourceParent = await resolvers.document(this.reactorClient, {
385
+ identifier: args.sourceParentIdentifier,
386
+ });
387
+ if (sourceParent) {
388
+ await this.assertCanWrite(sourceParent.document.id, ctx);
389
+ }
390
+ const targetParent = await resolvers.document(this.reactorClient, {
391
+ identifier: args.targetParentIdentifier,
392
+ });
393
+ if (targetParent) {
394
+ await this.assertCanWrite(targetParent.document.id, ctx);
395
+ }
160
396
  return await resolvers.moveChildren(this.reactorClient, args);
161
397
  }
162
398
  catch (error) {
@@ -164,9 +400,16 @@ export class ReactorSubgraph extends BaseSubgraph {
164
400
  throw error;
165
401
  }
166
402
  },
167
- deleteDocument: async (_parent, args) => {
403
+ deleteDocument: async (_parent, args, ctx) => {
168
404
  this.logger.debug("deleteDocument", args);
169
405
  try {
406
+ // Check write permission on document
407
+ const doc = await resolvers.document(this.reactorClient, {
408
+ identifier: args.identifier,
409
+ });
410
+ if (doc) {
411
+ await this.assertCanWrite(doc.document.id, ctx);
412
+ }
170
413
  return await resolvers.deleteDocument(this.reactorClient, args);
171
414
  }
172
415
  catch (error) {
@@ -174,9 +417,18 @@ export class ReactorSubgraph extends BaseSubgraph {
174
417
  throw error;
175
418
  }
176
419
  },
177
- deleteDocuments: async (_parent, args) => {
420
+ deleteDocuments: async (_parent, args, ctx) => {
178
421
  this.logger.debug("deleteDocuments", args);
179
422
  try {
423
+ // Check write permission on each document
424
+ for (const identifier of args.identifiers) {
425
+ const doc = await resolvers.document(this.reactorClient, {
426
+ identifier,
427
+ });
428
+ if (doc) {
429
+ await this.assertCanWrite(doc.document.id, ctx);
430
+ }
431
+ }
180
432
  return await resolvers.deleteDocuments(this.reactorClient, args);
181
433
  }
182
434
  catch (error) {
@@ -184,6 +436,57 @@ export class ReactorSubgraph extends BaseSubgraph {
184
436
  throw error;
185
437
  }
186
438
  },
439
+ touchChannel: async (_parent, args) => {
440
+ this.logger.debug("touchChannel", args);
441
+ if (!this.syncManager) {
442
+ throw new Error("SyncManager not available");
443
+ }
444
+ try {
445
+ return await resolvers.touchChannel(this.syncManager, args);
446
+ }
447
+ catch (error) {
448
+ this.logger.error("Error in touchChannel:", error);
449
+ throw error;
450
+ }
451
+ },
452
+ pushSyncEnvelope: async (_parent, args) => {
453
+ this.logger.debug("pushSyncEnvelope", args);
454
+ if (!this.syncManager) {
455
+ throw new Error("SyncManager not available");
456
+ }
457
+ try {
458
+ // Convert readonly arrays to mutable arrays for the resolver
459
+ const mutableArgs = {
460
+ envelope: {
461
+ type: args.envelope.type,
462
+ channelMeta: { id: args.envelope.channelMeta.id },
463
+ operations: args.envelope.operations
464
+ ? args.envelope.operations.map((op) => ({
465
+ operation: op.operation,
466
+ context: {
467
+ documentId: op.context.documentId,
468
+ documentType: op.context.documentType,
469
+ scope: op.context.scope,
470
+ branch: op.context.branch,
471
+ },
472
+ }))
473
+ : null,
474
+ cursor: args.envelope.cursor
475
+ ? {
476
+ remoteName: args.envelope.cursor.remoteName,
477
+ cursorOrdinal: args.envelope.cursor.cursorOrdinal,
478
+ lastSyncedAtUtcMs: args.envelope.cursor.lastSyncedAtUtcMs,
479
+ }
480
+ : null,
481
+ },
482
+ };
483
+ return await resolvers.pushSyncEnvelope(this.syncManager, mutableArgs);
484
+ }
485
+ catch (error) {
486
+ this.logger.error("Error in pushSyncEnvelope:", error);
487
+ throw error;
488
+ }
489
+ },
187
490
  },
188
491
  Subscription: {
189
492
  documentChanges: {
@@ -233,7 +536,7 @@ export class ReactorSubgraph extends BaseSubgraph {
233
536
  },
234
537
  };
235
538
  onSetup() {
236
- this.logger.info("Setting up ReactorSubgraph");
539
+ this.logger.debug("Setting up ReactorSubgraph");
237
540
  return Promise.resolve();
238
541
  }
239
542
  }
@@ -1 +1 @@
1
- {"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../../../src/graphql/reactor/subgraph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../../../src/graphql/reactor/subgraph.ts"],"names":[],"mappings":"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"}