@powerhousedao/reactor-api 5.1.0-staging.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 (106) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/graphql/auth/index.d.ts +2 -0
  6. package/dist/src/graphql/auth/index.d.ts.map +1 -0
  7. package/dist/src/graphql/auth/index.js +2 -0
  8. package/dist/src/graphql/auth/index.js.map +1 -0
  9. package/dist/src/graphql/auth/resolvers.d.ts +149 -0
  10. package/dist/src/graphql/auth/resolvers.d.ts.map +1 -0
  11. package/dist/src/graphql/auth/resolvers.js +173 -0
  12. package/dist/src/graphql/auth/resolvers.js.map +1 -0
  13. package/dist/src/graphql/auth/schema.graphql +173 -0
  14. package/dist/src/graphql/auth/subgraph.d.ts +177 -0
  15. package/dist/src/graphql/auth/subgraph.d.ts.map +1 -0
  16. package/dist/src/graphql/auth/subgraph.js +340 -0
  17. package/dist/src/graphql/auth/subgraph.js.map +1 -0
  18. package/dist/src/graphql/base-subgraph.d.ts +3 -1
  19. package/dist/src/graphql/base-subgraph.d.ts.map +1 -1
  20. package/dist/src/graphql/base-subgraph.js +2 -0
  21. package/dist/src/graphql/base-subgraph.js.map +1 -1
  22. package/dist/src/graphql/document-model-subgraph.d.ts +51 -0
  23. package/dist/src/graphql/document-model-subgraph.d.ts.map +1 -0
  24. package/dist/src/graphql/document-model-subgraph.js +104 -0
  25. package/dist/src/graphql/document-model-subgraph.js.map +1 -0
  26. package/dist/src/graphql/drive-subgraph.d.ts.map +1 -1
  27. package/dist/src/graphql/drive-subgraph.js +51 -10
  28. package/dist/src/graphql/drive-subgraph.js.map +1 -1
  29. package/dist/src/graphql/graphql-manager.d.ts +11 -3
  30. package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
  31. package/dist/src/graphql/graphql-manager.js +72 -16
  32. package/dist/src/graphql/graphql-manager.js.map +1 -1
  33. package/dist/src/graphql/index.d.ts +1 -0
  34. package/dist/src/graphql/index.d.ts.map +1 -1
  35. package/dist/src/graphql/index.js +1 -0
  36. package/dist/src/graphql/index.js.map +1 -1
  37. package/dist/src/graphql/reactor/resolvers.d.ts +6 -1
  38. package/dist/src/graphql/reactor/resolvers.d.ts.map +1 -1
  39. package/dist/src/graphql/reactor/resolvers.js +18 -2
  40. package/dist/src/graphql/reactor/resolvers.js.map +1 -1
  41. package/dist/src/graphql/reactor/schema.graphql +4 -4
  42. package/dist/src/graphql/reactor/subgraph.d.ts +34 -0
  43. package/dist/src/graphql/reactor/subgraph.d.ts.map +1 -1
  44. package/dist/src/graphql/reactor/subgraph.js +258 -21
  45. package/dist/src/graphql/reactor/subgraph.js.map +1 -1
  46. package/dist/src/graphql/reactor/validation.d.ts +62 -62
  47. package/dist/src/graphql/system/system-subgraph.d.ts.map +1 -1
  48. package/dist/src/graphql/types.d.ts +4 -1
  49. package/dist/src/graphql/types.d.ts.map +1 -1
  50. package/dist/src/graphql/utils.js +1 -1
  51. package/dist/src/graphql/utils.js.map +1 -1
  52. package/dist/src/migrations/001_create_document_permissions.d.ts +4 -0
  53. package/dist/src/migrations/001_create_document_permissions.d.ts.map +1 -0
  54. package/dist/src/migrations/001_create_document_permissions.js +91 -0
  55. package/dist/src/migrations/001_create_document_permissions.js.map +1 -0
  56. package/dist/src/migrations/index.d.ts +10 -0
  57. package/dist/src/migrations/index.d.ts.map +1 -0
  58. package/dist/src/migrations/index.js +59 -0
  59. package/dist/src/migrations/index.js.map +1 -0
  60. package/dist/src/packages/util.js +1 -1
  61. package/dist/src/packages/util.js.map +1 -1
  62. package/dist/src/server.d.ts +17 -4
  63. package/dist/src/server.d.ts.map +1 -1
  64. package/dist/src/server.js +45 -16
  65. package/dist/src/server.js.map +1 -1
  66. package/dist/src/services/auth.service.d.ts +1 -0
  67. package/dist/src/services/auth.service.d.ts.map +1 -1
  68. package/dist/src/services/auth.service.js +30 -16
  69. package/dist/src/services/auth.service.js.map +1 -1
  70. package/dist/src/services/document-permission.service.d.ts +201 -0
  71. package/dist/src/services/document-permission.service.d.ts.map +1 -0
  72. package/dist/src/services/document-permission.service.js +636 -0
  73. package/dist/src/services/document-permission.service.js.map +1 -0
  74. package/dist/src/utils/create-schema.d.ts +4 -3
  75. package/dist/src/utils/create-schema.d.ts.map +1 -1
  76. package/dist/src/utils/create-schema.js +100 -3
  77. package/dist/src/utils/create-schema.js.map +1 -1
  78. package/dist/src/utils/db.d.ts +65 -1
  79. package/dist/src/utils/db.d.ts.map +1 -1
  80. package/dist/src/utils/db.js.map +1 -1
  81. package/dist/test/document-permission.service.test.d.ts +2 -0
  82. package/dist/test/document-permission.service.test.d.ts.map +1 -0
  83. package/dist/test/document-permission.service.test.js +480 -0
  84. package/dist/test/document-permission.service.test.js.map +1 -0
  85. package/dist/test/drive-subgraph-permissions.test.d.ts +2 -0
  86. package/dist/test/drive-subgraph-permissions.test.d.ts.map +1 -0
  87. package/dist/test/drive-subgraph-permissions.test.js +195 -0
  88. package/dist/test/drive-subgraph-permissions.test.js.map +1 -0
  89. package/dist/test/identity-integration.test.d.ts +2 -0
  90. package/dist/test/identity-integration.test.d.ts.map +1 -0
  91. package/dist/test/identity-integration.test.js +349 -0
  92. package/dist/test/identity-integration.test.js.map +1 -0
  93. package/dist/test/permissions-integration.test.d.ts +2 -0
  94. package/dist/test/permissions-integration.test.d.ts.map +1 -0
  95. package/dist/test/permissions-integration.test.js +421 -0
  96. package/dist/test/permissions-integration.test.js.map +1 -0
  97. package/dist/test/reactor-subgraph-permissions.test.d.ts +2 -0
  98. package/dist/test/reactor-subgraph-permissions.test.d.ts.map +1 -0
  99. package/dist/test/reactor-subgraph-permissions.test.js +400 -0
  100. package/dist/test/reactor-subgraph-permissions.test.js.map +1 -0
  101. package/dist/test/two-reactor-gql-sync.test.js +11 -9
  102. package/dist/test/two-reactor-gql-sync.test.js.map +1 -1
  103. package/dist/test/utils/gql-resolver-bridge.js +4 -4
  104. package/dist/test/utils/gql-resolver-bridge.js.map +1 -1
  105. package/dist/tsconfig.tsbuildinfo +1 -1
  106. package/package.json +9 -8
@@ -0,0 +1,636 @@
1
+ import { sql } from "kysely";
2
+ /**
3
+ * Service for managing document-level permissions.
4
+ *
5
+ * Permission levels for documents:
6
+ * - READ: Can fetch and read the document
7
+ * - WRITE: Can push updates and modify the document
8
+ * - ADMIN: Can manage document permissions and settings
9
+ *
10
+ * Operation permissions:
11
+ * - Users and groups can be granted permission to execute specific operations
12
+ *
13
+ * Global roles (via environment variables):
14
+ * - AUTH_ENABLED: Enables authorization checks
15
+ * - ADMINS: Comma-separated list of admin addresses (full access)
16
+ * - USERS: Comma-separated list of user addresses (read/write access)
17
+ * - GUESTS: Comma-separated list of guest addresses (read access)
18
+ */
19
+ export class DocumentPermissionService {
20
+ db;
21
+ constructor(db) {
22
+ this.db = db;
23
+ }
24
+ // ============================================
25
+ // User Permission Operations
26
+ // ============================================
27
+ /**
28
+ * Get the permission level for a user on a specific document.
29
+ * Returns null if no permission is set.
30
+ */
31
+ async getUserPermission(documentId, userAddress) {
32
+ const result = await this.db
33
+ .selectFrom("DocumentPermission")
34
+ .select("permission")
35
+ .where("documentId", "=", documentId)
36
+ .where("userAddress", "=", userAddress.toLowerCase())
37
+ .executeTakeFirst();
38
+ return result?.permission ?? null;
39
+ }
40
+ /**
41
+ * Get all permissions for a document
42
+ */
43
+ async getDocumentPermissions(documentId) {
44
+ const results = await this.db
45
+ .selectFrom("DocumentPermission")
46
+ .select([
47
+ "documentId",
48
+ "userAddress",
49
+ "permission",
50
+ "grantedBy",
51
+ "createdAt",
52
+ "updatedAt",
53
+ ])
54
+ .where("documentId", "=", documentId)
55
+ .execute();
56
+ return results;
57
+ }
58
+ /**
59
+ * Get all documents a user has explicit access to
60
+ */
61
+ async getUserDocuments(userAddress) {
62
+ const results = await this.db
63
+ .selectFrom("DocumentPermission")
64
+ .select([
65
+ "documentId",
66
+ "userAddress",
67
+ "permission",
68
+ "grantedBy",
69
+ "createdAt",
70
+ "updatedAt",
71
+ ])
72
+ .where("userAddress", "=", userAddress.toLowerCase())
73
+ .execute();
74
+ return results;
75
+ }
76
+ /**
77
+ * Grant or update a user's permission on a document.
78
+ */
79
+ async grantPermission(documentId, userAddress, permission, grantedBy) {
80
+ const now = new Date();
81
+ const normalizedAddress = userAddress.toLowerCase();
82
+ await this.db
83
+ .insertInto("DocumentPermission")
84
+ .values({
85
+ documentId,
86
+ userAddress: normalizedAddress,
87
+ permission,
88
+ grantedBy: grantedBy.toLowerCase(),
89
+ createdAt: now,
90
+ updatedAt: now,
91
+ })
92
+ .onConflict((oc) => oc.columns(["documentId", "userAddress"]).doUpdateSet({
93
+ permission,
94
+ grantedBy: grantedBy.toLowerCase(),
95
+ updatedAt: now,
96
+ }))
97
+ .execute();
98
+ const result = await this.db
99
+ .selectFrom("DocumentPermission")
100
+ .select([
101
+ "documentId",
102
+ "userAddress",
103
+ "permission",
104
+ "grantedBy",
105
+ "createdAt",
106
+ "updatedAt",
107
+ ])
108
+ .where("documentId", "=", documentId)
109
+ .where("userAddress", "=", normalizedAddress)
110
+ .executeTakeFirstOrThrow();
111
+ return result;
112
+ }
113
+ /**
114
+ * Revoke a user's permission on a document
115
+ */
116
+ async revokePermission(documentId, userAddress) {
117
+ await this.db
118
+ .deleteFrom("DocumentPermission")
119
+ .where("documentId", "=", documentId)
120
+ .where("userAddress", "=", userAddress.toLowerCase())
121
+ .execute();
122
+ }
123
+ /**
124
+ * Delete all permissions for a document (used when deleting a document)
125
+ */
126
+ async deleteAllDocumentPermissions(documentId) {
127
+ await this.db
128
+ .deleteFrom("DocumentPermission")
129
+ .where("documentId", "=", documentId)
130
+ .execute();
131
+ await this.db
132
+ .deleteFrom("DocumentGroupPermission")
133
+ .where("documentId", "=", documentId)
134
+ .execute();
135
+ await this.db
136
+ .deleteFrom("OperationUserPermission")
137
+ .where("documentId", "=", documentId)
138
+ .execute();
139
+ await this.db
140
+ .deleteFrom("OperationGroupPermission")
141
+ .where("documentId", "=", documentId)
142
+ .execute();
143
+ }
144
+ // ============================================
145
+ // Access Control Checks
146
+ // ============================================
147
+ /**
148
+ * Check if a user can read a document.
149
+ * Returns true if user has READ, WRITE, or ADMIN permission (direct or via group)
150
+ */
151
+ async canReadDocument(documentId, userAddress) {
152
+ if (!userAddress) {
153
+ return false;
154
+ }
155
+ // Check direct user permission
156
+ const directPermission = await this.getUserPermission(documentId, userAddress);
157
+ if (directPermission !== null) {
158
+ return true;
159
+ }
160
+ // Check group permission
161
+ const groupPermission = await this.getUserGroupPermission(documentId, userAddress);
162
+ return groupPermission !== null;
163
+ }
164
+ /**
165
+ * Check if a user can write to a document.
166
+ * Returns true if user has WRITE or ADMIN permission (direct or via group)
167
+ */
168
+ async canWriteDocument(documentId, userAddress) {
169
+ if (!userAddress) {
170
+ return false;
171
+ }
172
+ // Check direct user permission
173
+ const directPermission = await this.getUserPermission(documentId, userAddress);
174
+ if (directPermission === "WRITE" || directPermission === "ADMIN") {
175
+ return true;
176
+ }
177
+ // Check group permission
178
+ const groupPermission = await this.getUserGroupPermission(documentId, userAddress);
179
+ return groupPermission === "WRITE" || groupPermission === "ADMIN";
180
+ }
181
+ /**
182
+ * Check if a user can manage a document (change permissions, settings).
183
+ * Returns true if user has ADMIN permission (direct or via group)
184
+ */
185
+ async canManageDocument(documentId, userAddress) {
186
+ if (!userAddress) {
187
+ return false;
188
+ }
189
+ // Check direct user permission
190
+ const directPermission = await this.getUserPermission(documentId, userAddress);
191
+ if (directPermission === "ADMIN") {
192
+ return true;
193
+ }
194
+ // Check group permission
195
+ const groupPermission = await this.getUserGroupPermission(documentId, userAddress);
196
+ return groupPermission === "ADMIN";
197
+ }
198
+ // ============================================
199
+ // Access Control Checks (With Parent Hierarchy)
200
+ // ============================================
201
+ /**
202
+ * Check if a user can read a document, including parent permission inheritance.
203
+ * Returns true if user has permission on the document OR any parent in the hierarchy.
204
+ */
205
+ async canRead(documentId, userAddress, getParentIds) {
206
+ // Check if user has direct permission on this document
207
+ const canReadThis = await this.canReadDocument(documentId, userAddress);
208
+ if (canReadThis) {
209
+ return true;
210
+ }
211
+ // Check if user has permission on any parent (inheritance)
212
+ const parentIds = await getParentIds(documentId);
213
+ for (const parentId of parentIds) {
214
+ const canReadParent = await this.canRead(parentId, userAddress, getParentIds);
215
+ if (canReadParent) {
216
+ return true;
217
+ }
218
+ }
219
+ return false;
220
+ }
221
+ /**
222
+ * Check if a user can write to a document, including parent permission inheritance.
223
+ * Returns true if user has write permission on the document OR any parent in the hierarchy.
224
+ */
225
+ async canWrite(documentId, userAddress, getParentIds) {
226
+ // Check if user has direct write permission on this document
227
+ const canWriteThis = await this.canWriteDocument(documentId, userAddress);
228
+ if (canWriteThis) {
229
+ return true;
230
+ }
231
+ // Check if user has write permission on any parent (inheritance)
232
+ const parentIds = await getParentIds(documentId);
233
+ for (const parentId of parentIds) {
234
+ const canWriteParent = await this.canWrite(parentId, userAddress, getParentIds);
235
+ if (canWriteParent) {
236
+ return true;
237
+ }
238
+ }
239
+ return false;
240
+ }
241
+ /**
242
+ * Filter a list of document IDs to only include those the user can read.
243
+ */
244
+ async filterReadableDocuments(documentIds, userAddress, getParentIds) {
245
+ const results = [];
246
+ for (const docId of documentIds) {
247
+ const canReadDoc = await this.canRead(docId, userAddress, getParentIds);
248
+ if (canReadDoc) {
249
+ results.push(docId);
250
+ }
251
+ }
252
+ return results;
253
+ }
254
+ // ============================================
255
+ // Group Management
256
+ // ============================================
257
+ /**
258
+ * Create a new group
259
+ */
260
+ async createGroup(name, description) {
261
+ const now = new Date();
262
+ await this.db
263
+ .insertInto("Group")
264
+ .values({
265
+ name,
266
+ description: description ?? null,
267
+ createdAt: now,
268
+ updatedAt: now,
269
+ })
270
+ .execute();
271
+ const result = await this.db
272
+ .selectFrom("Group")
273
+ .select(["id", "name", "description", "createdAt", "updatedAt"])
274
+ .where("name", "=", name)
275
+ .executeTakeFirstOrThrow();
276
+ return result;
277
+ }
278
+ /**
279
+ * Delete a group and all its associations
280
+ */
281
+ async deleteGroup(groupId) {
282
+ // Delete group permissions on operations
283
+ await this.db
284
+ .deleteFrom("OperationGroupPermission")
285
+ .where("groupId", "=", groupId)
286
+ .execute();
287
+ // Delete group document permissions
288
+ await this.db
289
+ .deleteFrom("DocumentGroupPermission")
290
+ .where("groupId", "=", groupId)
291
+ .execute();
292
+ // Delete user-group memberships
293
+ await this.db
294
+ .deleteFrom("UserGroup")
295
+ .where("groupId", "=", groupId)
296
+ .execute();
297
+ // Delete the group
298
+ await this.db.deleteFrom("Group").where("id", "=", groupId).execute();
299
+ }
300
+ /**
301
+ * Get a group by ID
302
+ */
303
+ async getGroup(groupId) {
304
+ const result = await this.db
305
+ .selectFrom("Group")
306
+ .select(["id", "name", "description", "createdAt", "updatedAt"])
307
+ .where("id", "=", groupId)
308
+ .executeTakeFirst();
309
+ return result ?? null;
310
+ }
311
+ /**
312
+ * List all groups
313
+ */
314
+ async listGroups() {
315
+ return this.db
316
+ .selectFrom("Group")
317
+ .select(["id", "name", "description", "createdAt", "updatedAt"])
318
+ .execute();
319
+ }
320
+ /**
321
+ * Add a user to a group
322
+ */
323
+ async addUserToGroup(userAddress, groupId) {
324
+ const now = new Date();
325
+ const normalizedAddress = userAddress.toLowerCase();
326
+ await this.db
327
+ .insertInto("UserGroup")
328
+ .values({
329
+ userAddress: normalizedAddress,
330
+ groupId,
331
+ createdAt: now,
332
+ })
333
+ .onConflict((oc) => oc.columns(["userAddress", "groupId"]).doNothing())
334
+ .execute();
335
+ }
336
+ /**
337
+ * Remove a user from a group
338
+ */
339
+ async removeUserFromGroup(userAddress, groupId) {
340
+ await this.db
341
+ .deleteFrom("UserGroup")
342
+ .where("userAddress", "=", userAddress.toLowerCase())
343
+ .where("groupId", "=", groupId)
344
+ .execute();
345
+ }
346
+ /**
347
+ * Get all groups a user belongs to
348
+ */
349
+ async getUserGroups(userAddress) {
350
+ return this.db
351
+ .selectFrom("UserGroup")
352
+ .innerJoin("Group", "Group.id", "UserGroup.groupId")
353
+ .select([
354
+ "Group.id",
355
+ "Group.name",
356
+ "Group.description",
357
+ "Group.createdAt",
358
+ "Group.updatedAt",
359
+ ])
360
+ .where("UserGroup.userAddress", "=", userAddress.toLowerCase())
361
+ .execute();
362
+ }
363
+ /**
364
+ * Get all members of a group
365
+ */
366
+ async getGroupMembers(groupId) {
367
+ const results = await this.db
368
+ .selectFrom("UserGroup")
369
+ .select("userAddress")
370
+ .where("groupId", "=", groupId)
371
+ .execute();
372
+ return results.map((r) => r.userAddress);
373
+ }
374
+ // ============================================
375
+ // Group Document Permissions
376
+ // ============================================
377
+ /**
378
+ * Grant a group permission on a document
379
+ */
380
+ async grantGroupPermission(documentId, groupId, permission, grantedBy) {
381
+ const now = new Date();
382
+ await this.db
383
+ .insertInto("DocumentGroupPermission")
384
+ .values({
385
+ documentId,
386
+ groupId,
387
+ permission,
388
+ grantedBy: grantedBy.toLowerCase(),
389
+ createdAt: now,
390
+ updatedAt: now,
391
+ })
392
+ .onConflict((oc) => oc.columns(["documentId", "groupId"]).doUpdateSet({
393
+ permission,
394
+ grantedBy: grantedBy.toLowerCase(),
395
+ updatedAt: now,
396
+ }))
397
+ .execute();
398
+ const result = await this.db
399
+ .selectFrom("DocumentGroupPermission")
400
+ .select([
401
+ "documentId",
402
+ "groupId",
403
+ "permission",
404
+ "grantedBy",
405
+ "createdAt",
406
+ "updatedAt",
407
+ ])
408
+ .where("documentId", "=", documentId)
409
+ .where("groupId", "=", groupId)
410
+ .executeTakeFirstOrThrow();
411
+ return result;
412
+ }
413
+ /**
414
+ * Revoke a group's permission on a document
415
+ */
416
+ async revokeGroupPermission(documentId, groupId) {
417
+ await this.db
418
+ .deleteFrom("DocumentGroupPermission")
419
+ .where("documentId", "=", documentId)
420
+ .where("groupId", "=", groupId)
421
+ .execute();
422
+ }
423
+ /**
424
+ * Get all group permissions for a document
425
+ */
426
+ async getDocumentGroupPermissions(documentId) {
427
+ return this.db
428
+ .selectFrom("DocumentGroupPermission")
429
+ .select([
430
+ "documentId",
431
+ "groupId",
432
+ "permission",
433
+ "grantedBy",
434
+ "createdAt",
435
+ "updatedAt",
436
+ ])
437
+ .where("documentId", "=", documentId)
438
+ .execute();
439
+ }
440
+ /**
441
+ * Get best permission level a user has on a document via groups
442
+ */
443
+ async getUserGroupPermission(documentId, userAddress) {
444
+ const result = await this.db
445
+ .selectFrom("DocumentGroupPermission")
446
+ .innerJoin("UserGroup", "UserGroup.groupId", "DocumentGroupPermission.groupId")
447
+ .select("DocumentGroupPermission.permission")
448
+ .where("DocumentGroupPermission.documentId", "=", documentId)
449
+ .where("UserGroup.userAddress", "=", userAddress.toLowerCase())
450
+ .execute();
451
+ if (result.length === 0) {
452
+ return null;
453
+ }
454
+ // Return highest permission level
455
+ if (result.some((r) => r.permission === "ADMIN"))
456
+ return "ADMIN";
457
+ if (result.some((r) => r.permission === "WRITE"))
458
+ return "WRITE";
459
+ return "READ";
460
+ }
461
+ // ============================================
462
+ // Operation Permissions
463
+ // ============================================
464
+ /**
465
+ * Grant a user permission to execute an operation on a document
466
+ */
467
+ async grantOperationPermission(documentId, operationType, userAddress, grantedBy) {
468
+ const now = new Date();
469
+ const normalizedAddress = userAddress.toLowerCase();
470
+ await this.db
471
+ .insertInto("OperationUserPermission")
472
+ .values({
473
+ documentId,
474
+ operationType,
475
+ userAddress: normalizedAddress,
476
+ grantedBy: grantedBy.toLowerCase(),
477
+ createdAt: now,
478
+ })
479
+ .onConflict((oc) => oc.columns(["documentId", "operationType", "userAddress"]).doNothing())
480
+ .execute();
481
+ const result = await this.db
482
+ .selectFrom("OperationUserPermission")
483
+ .select([
484
+ "documentId",
485
+ "operationType",
486
+ "userAddress",
487
+ "grantedBy",
488
+ "createdAt",
489
+ ])
490
+ .where("documentId", "=", documentId)
491
+ .where("operationType", "=", operationType)
492
+ .where("userAddress", "=", normalizedAddress)
493
+ .executeTakeFirstOrThrow();
494
+ return result;
495
+ }
496
+ /**
497
+ * Revoke a user's permission to execute an operation
498
+ */
499
+ async revokeOperationPermission(documentId, operationType, userAddress) {
500
+ await this.db
501
+ .deleteFrom("OperationUserPermission")
502
+ .where("documentId", "=", documentId)
503
+ .where("operationType", "=", operationType)
504
+ .where("userAddress", "=", userAddress.toLowerCase())
505
+ .execute();
506
+ }
507
+ /**
508
+ * Grant a group permission to execute an operation on a document
509
+ */
510
+ async grantGroupOperationPermission(documentId, operationType, groupId, grantedBy) {
511
+ const now = new Date();
512
+ await this.db
513
+ .insertInto("OperationGroupPermission")
514
+ .values({
515
+ documentId,
516
+ operationType,
517
+ groupId,
518
+ grantedBy: grantedBy.toLowerCase(),
519
+ createdAt: now,
520
+ })
521
+ .onConflict((oc) => oc.columns(["documentId", "operationType", "groupId"]).doNothing())
522
+ .execute();
523
+ const result = await this.db
524
+ .selectFrom("OperationGroupPermission")
525
+ .select([
526
+ "documentId",
527
+ "operationType",
528
+ "groupId",
529
+ "grantedBy",
530
+ "createdAt",
531
+ ])
532
+ .where("documentId", "=", documentId)
533
+ .where("operationType", "=", operationType)
534
+ .where("groupId", "=", groupId)
535
+ .executeTakeFirstOrThrow();
536
+ return result;
537
+ }
538
+ /**
539
+ * Revoke a group's permission to execute an operation
540
+ */
541
+ async revokeGroupOperationPermission(documentId, operationType, groupId) {
542
+ await this.db
543
+ .deleteFrom("OperationGroupPermission")
544
+ .where("documentId", "=", documentId)
545
+ .where("operationType", "=", operationType)
546
+ .where("groupId", "=", groupId)
547
+ .execute();
548
+ }
549
+ /**
550
+ * Get all users with permission to execute an operation
551
+ */
552
+ async getOperationUserPermissions(documentId, operationType) {
553
+ return this.db
554
+ .selectFrom("OperationUserPermission")
555
+ .select([
556
+ "documentId",
557
+ "operationType",
558
+ "userAddress",
559
+ "grantedBy",
560
+ "createdAt",
561
+ ])
562
+ .where("documentId", "=", documentId)
563
+ .where("operationType", "=", operationType)
564
+ .execute();
565
+ }
566
+ /**
567
+ * Get all groups with permission to execute an operation
568
+ */
569
+ async getOperationGroupPermissions(documentId, operationType) {
570
+ return this.db
571
+ .selectFrom("OperationGroupPermission")
572
+ .select([
573
+ "documentId",
574
+ "operationType",
575
+ "groupId",
576
+ "grantedBy",
577
+ "createdAt",
578
+ ])
579
+ .where("documentId", "=", documentId)
580
+ .where("operationType", "=", operationType)
581
+ .execute();
582
+ }
583
+ /**
584
+ * Check if a user can execute a specific operation on a document.
585
+ * Returns true if user has direct permission or is in a group with permission.
586
+ */
587
+ async canExecuteOperation(documentId, operationType, userAddress) {
588
+ if (!userAddress) {
589
+ return false;
590
+ }
591
+ const normalizedAddress = userAddress.toLowerCase();
592
+ // Check direct user permission
593
+ const userPermission = await this.db
594
+ .selectFrom("OperationUserPermission")
595
+ .select("userAddress")
596
+ .where("documentId", "=", documentId)
597
+ .where("operationType", "=", operationType)
598
+ .where("userAddress", "=", normalizedAddress)
599
+ .executeTakeFirst();
600
+ if (userPermission) {
601
+ return true;
602
+ }
603
+ // Check group permission
604
+ const groupPermission = await this.db
605
+ .selectFrom("OperationGroupPermission")
606
+ .innerJoin("UserGroup", "UserGroup.groupId", "OperationGroupPermission.groupId")
607
+ .select("OperationGroupPermission.groupId")
608
+ .where("OperationGroupPermission.documentId", "=", documentId)
609
+ .where("OperationGroupPermission.operationType", "=", operationType)
610
+ .where("UserGroup.userAddress", "=", normalizedAddress)
611
+ .executeTakeFirst();
612
+ return !!groupPermission;
613
+ }
614
+ /**
615
+ * Check if an operation has any permissions set (is restricted)
616
+ */
617
+ async isOperationRestricted(documentId, operationType) {
618
+ const userPermCount = await this.db
619
+ .selectFrom("OperationUserPermission")
620
+ .select(sql `count(*)`.as("count"))
621
+ .where("documentId", "=", documentId)
622
+ .where("operationType", "=", operationType)
623
+ .executeTakeFirst();
624
+ if (userPermCount && Number(userPermCount.count) > 0) {
625
+ return true;
626
+ }
627
+ const groupPermCount = await this.db
628
+ .selectFrom("OperationGroupPermission")
629
+ .select(sql `count(*)`.as("count"))
630
+ .where("documentId", "=", documentId)
631
+ .where("operationType", "=", operationType)
632
+ .executeTakeFirst();
633
+ return groupPermCount !== undefined && Number(groupPermCount.count) > 0;
634
+ }
635
+ }
636
+ //# sourceMappingURL=document-permission.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-permission.service.js","sourceRoot":"","sources":["../../../src/services/document-permission.service.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import type { GraphQLResolverMap, GraphQLSchemaModule } from "@apollo/subgraph/dist/schema-helper/resolverMap.js";
2
2
  import type { Context } from "@powerhousedao/reactor-api";
3
3
  import { type IDocumentDriveServer } from "document-drive";
4
- import type { DocumentModelPHState } from "document-model";
4
+ import type { DocumentModelGlobalState } from "document-model";
5
5
  import { type DocumentNode } from "graphql";
6
6
  export declare const buildSubgraphSchemaModule: (documentDriveServer: IDocumentDriveServer, resolvers: GraphQLResolverMap<Context>, typeDefs: DocumentNode) => GraphQLSchemaModule;
7
7
  export declare const createSchema: (documentDriveServer: IDocumentDriveServer, resolvers: GraphQLResolverMap<Context>, typeDefs: DocumentNode) => import("graphql").GraphQLSchema;
8
- export declare function getDocumentModelSchemaName(documentModel: DocumentModelPHState): string;
9
- export declare const getDocumentModelTypeDefs: (documentDriveServer: IDocumentDriveServer, typeDefs: DocumentNode) => DocumentNode;
8
+ export declare function getDocumentModelSchemaName(documentModel: DocumentModelGlobalState): string;
9
+ export declare const getDocumentModelTypeDefs: (documentDriveServer: Pick<IDocumentDriveServer, "getDocumentModelModules">, typeDefs: DocumentNode) => DocumentNode;
10
+ export declare function generateDocumentModelSchemaLegacy(documentModel: DocumentModelGlobalState): DocumentNode;
10
11
  //# sourceMappingURL=create-schema.d.ts.map