@powerhousedao/reactor-api 5.1.0-dev.2 → 5.1.0-dev.21

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 (118) 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 +3 -1
  21. package/dist/src/graphql/base-subgraph.d.ts.map +1 -1
  22. package/dist/src/graphql/base-subgraph.js +2 -0
  23. package/dist/src/graphql/base-subgraph.js.map +1 -1
  24. package/dist/src/graphql/drive-subgraph.d.ts.map +1 -1
  25. package/dist/src/graphql/drive-subgraph.js +51 -10
  26. package/dist/src/graphql/drive-subgraph.js.map +1 -1
  27. package/dist/src/graphql/graphql-manager.d.ts +5 -2
  28. package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
  29. package/dist/src/graphql/graphql-manager.js +7 -2
  30. package/dist/src/graphql/graphql-manager.js.map +1 -1
  31. package/dist/src/graphql/index.d.ts +1 -0
  32. package/dist/src/graphql/index.d.ts.map +1 -1
  33. package/dist/src/graphql/index.js +1 -0
  34. package/dist/src/graphql/index.js.map +1 -1
  35. package/dist/src/graphql/reactor/adapters.js +1 -1
  36. package/dist/src/graphql/reactor/adapters.js.map +1 -1
  37. package/dist/src/graphql/reactor/factory.d.ts +4 -4
  38. package/dist/src/graphql/reactor/factory.d.ts.map +1 -1
  39. package/dist/src/graphql/reactor/gen/graphql.d.ts +295 -64
  40. package/dist/src/graphql/reactor/gen/graphql.d.ts.map +1 -1
  41. package/dist/src/graphql/reactor/gen/graphql.js +121 -8
  42. package/dist/src/graphql/reactor/gen/graphql.js.map +1 -1
  43. package/dist/src/graphql/reactor/operations.graphql +253 -0
  44. package/dist/src/graphql/reactor/pubsub.d.ts +2 -2
  45. package/dist/src/graphql/reactor/pubsub.d.ts.map +1 -1
  46. package/dist/src/graphql/reactor/pubsub.js +2 -1
  47. package/dist/src/graphql/reactor/pubsub.js.map +1 -1
  48. package/dist/src/graphql/reactor/resolvers.d.ts +10 -17
  49. package/dist/src/graphql/reactor/resolvers.d.ts.map +1 -1
  50. package/dist/src/graphql/reactor/resolvers.js +27 -36
  51. package/dist/src/graphql/reactor/resolvers.js.map +1 -1
  52. package/dist/src/graphql/reactor/schema.graphql +429 -0
  53. package/dist/src/graphql/reactor/subgraph.d.ts +34 -0
  54. package/dist/src/graphql/reactor/subgraph.d.ts.map +1 -1
  55. package/dist/src/graphql/reactor/subgraph.js +289 -26
  56. package/dist/src/graphql/reactor/subgraph.js.map +1 -1
  57. package/dist/src/graphql/reactor/validation.d.ts +44 -44
  58. package/dist/src/graphql/types.d.ts +4 -1
  59. package/dist/src/graphql/types.d.ts.map +1 -1
  60. package/dist/src/migrations/001_create_document_permissions.d.ts +4 -0
  61. package/dist/src/migrations/001_create_document_permissions.d.ts.map +1 -0
  62. package/dist/src/migrations/001_create_document_permissions.js +91 -0
  63. package/dist/src/migrations/001_create_document_permissions.js.map +1 -0
  64. package/dist/src/migrations/index.d.ts +10 -0
  65. package/dist/src/migrations/index.d.ts.map +1 -0
  66. package/dist/src/migrations/index.js +59 -0
  67. package/dist/src/migrations/index.js.map +1 -0
  68. package/dist/src/packages/util.js +1 -1
  69. package/dist/src/packages/util.js.map +1 -1
  70. package/dist/src/server.d.ts +16 -7
  71. package/dist/src/server.d.ts.map +1 -1
  72. package/dist/src/server.js +44 -18
  73. package/dist/src/server.js.map +1 -1
  74. package/dist/src/services/auth.service.d.ts +1 -0
  75. package/dist/src/services/auth.service.d.ts.map +1 -1
  76. package/dist/src/services/auth.service.js +31 -17
  77. package/dist/src/services/auth.service.js.map +1 -1
  78. package/dist/src/services/document-permission.service.d.ts +201 -0
  79. package/dist/src/services/document-permission.service.d.ts.map +1 -0
  80. package/dist/src/services/document-permission.service.js +636 -0
  81. package/dist/src/services/document-permission.service.js.map +1 -0
  82. package/dist/src/utils/create-schema.d.ts +1 -1
  83. package/dist/src/utils/create-schema.d.ts.map +1 -1
  84. package/dist/src/utils/create-schema.js +10 -1
  85. package/dist/src/utils/create-schema.js.map +1 -1
  86. package/dist/src/utils/db.d.ts +65 -1
  87. package/dist/src/utils/db.d.ts.map +1 -1
  88. package/dist/src/utils/db.js.map +1 -1
  89. package/dist/test/document-permission.service.test.d.ts +2 -0
  90. package/dist/test/document-permission.service.test.d.ts.map +1 -0
  91. package/dist/test/document-permission.service.test.js +480 -0
  92. package/dist/test/document-permission.service.test.js.map +1 -0
  93. package/dist/test/drive-subgraph-permissions.test.d.ts +2 -0
  94. package/dist/test/drive-subgraph-permissions.test.d.ts.map +1 -0
  95. package/dist/test/drive-subgraph-permissions.test.js +195 -0
  96. package/dist/test/drive-subgraph-permissions.test.js.map +1 -0
  97. package/dist/test/identity-integration.test.d.ts +2 -0
  98. package/dist/test/identity-integration.test.d.ts.map +1 -0
  99. package/dist/test/identity-integration.test.js +349 -0
  100. package/dist/test/identity-integration.test.js.map +1 -0
  101. package/dist/test/permissions-integration.test.d.ts +2 -0
  102. package/dist/test/permissions-integration.test.d.ts.map +1 -0
  103. package/dist/test/permissions-integration.test.js +421 -0
  104. package/dist/test/permissions-integration.test.js.map +1 -0
  105. package/dist/test/reactor-adapters.test.js +2 -2
  106. package/dist/test/reactor-adapters.test.js.map +1 -1
  107. package/dist/test/reactor-resolvers.test.js +24 -24
  108. package/dist/test/reactor-resolvers.test.js.map +1 -1
  109. package/dist/test/reactor-subgraph-permissions.test.d.ts +2 -0
  110. package/dist/test/reactor-subgraph-permissions.test.d.ts.map +1 -0
  111. package/dist/test/reactor-subgraph-permissions.test.js +400 -0
  112. package/dist/test/reactor-subgraph-permissions.test.js.map +1 -0
  113. package/dist/test/two-reactor-gql-sync.test.js +19 -17
  114. package/dist/test/two-reactor-gql-sync.test.js.map +1 -1
  115. package/dist/test/utils/gql-resolver-bridge.js +4 -4
  116. package/dist/test/utils/gql-resolver-bridge.js.map +1 -1
  117. package/dist/tsconfig.tsbuildinfo +1 -1
  118. package/package.json +10 -8
@@ -0,0 +1,429 @@
1
+ # Scalar types (for codegen - also defined in create-schema.ts)
2
+ scalar JSONObject
3
+ scalar DateTime
4
+
5
+ # Input types
6
+ input PagingInput {
7
+ limit: Int
8
+ offset: Int
9
+ cursor: String
10
+ }
11
+
12
+ input ViewFilterInput {
13
+ branch: String
14
+ scopes: [String!]
15
+ }
16
+
17
+ input SearchFilterInput {
18
+ type: String
19
+ parentId: String
20
+ identifiers: [String!]
21
+ }
22
+
23
+ # Enums
24
+ enum PropagationMode {
25
+ CASCADE
26
+ ORPHAN
27
+ }
28
+
29
+ enum DocumentChangeType {
30
+ CREATED
31
+ DELETED
32
+ UPDATED
33
+ PARENT_ADDED
34
+ PARENT_REMOVED
35
+ CHILD_ADDED
36
+ CHILD_REMOVED
37
+ }
38
+
39
+ # Object types
40
+ type DocumentModelGlobalState {
41
+ id: String!
42
+ name: String!
43
+ namespace: String
44
+ version: String
45
+ specification: JSONObject!
46
+ }
47
+
48
+ type DocumentModelResultPage {
49
+ items: [DocumentModelGlobalState!]!
50
+ totalCount: Int!
51
+ hasNextPage: Boolean!
52
+ hasPreviousPage: Boolean!
53
+ cursor: String
54
+ }
55
+
56
+ type Revision {
57
+ scope: String!
58
+ revision: Int!
59
+ }
60
+
61
+ type PHDocument {
62
+ id: String!
63
+ slug: String
64
+ name: String!
65
+ documentType: String!
66
+ state: JSONObject!
67
+ revisionsList: [Revision!]!
68
+ createdAtUtcIso: DateTime!
69
+ lastModifiedAtUtcIso: DateTime!
70
+ parentId: String
71
+ }
72
+
73
+ type PHDocumentResultPage {
74
+ items: [PHDocument!]!
75
+ totalCount: Int!
76
+ hasNextPage: Boolean!
77
+ hasPreviousPage: Boolean!
78
+ cursor: String
79
+ }
80
+
81
+ type DocumentWithChildren {
82
+ document: PHDocument!
83
+ childIds: [String!]!
84
+ }
85
+
86
+ type MoveChildrenResult {
87
+ source: PHDocument!
88
+ target: PHDocument!
89
+ }
90
+
91
+ type JobInfo {
92
+ id: String!
93
+ status: String!
94
+ result: JSONObject!
95
+ error: String
96
+ createdAt: DateTime!
97
+ completedAt: DateTime
98
+ }
99
+
100
+ type DocumentChangeEvent {
101
+ type: DocumentChangeType!
102
+ documents: [PHDocument!]!
103
+ context: DocumentChangeContext
104
+ }
105
+
106
+ type DocumentChangeContext {
107
+ parentId: String
108
+ childId: String
109
+ }
110
+
111
+ type JobChangeEvent {
112
+ jobId: String!
113
+ status: String!
114
+ result: JSONObject!
115
+ error: String
116
+ }
117
+
118
+ type ReactorSignerUser {
119
+ address: String!
120
+ networkId: String!
121
+ chainId: Int!
122
+ }
123
+
124
+ type ReactorSignerApp {
125
+ name: String!
126
+ key: String!
127
+ }
128
+
129
+ type ReactorSigner {
130
+ user: ReactorSignerUser
131
+ app: ReactorSignerApp
132
+ signatures: [String!]!
133
+ }
134
+
135
+ type ActionContext {
136
+ signer: ReactorSigner
137
+ }
138
+
139
+ type Action {
140
+ id: String!
141
+ type: String!
142
+ timestampUtcMs: String!
143
+ input: JSONObject!
144
+ scope: String!
145
+ attachments: [Attachment!]
146
+ context: ActionContext
147
+ }
148
+
149
+ type Attachment {
150
+ data: String!
151
+ mimeType: String!
152
+ hash: String!
153
+ extension: String
154
+ fileName: String
155
+ }
156
+
157
+ # Input types for sync operations
158
+ input ActionContextInput {
159
+ signer: ReactorSignerInput
160
+ }
161
+
162
+ input ReactorSignerInput {
163
+ user: ReactorSignerUserInput
164
+ app: ReactorSignerAppInput
165
+ signatures: [String!]!
166
+ }
167
+
168
+ input ReactorSignerUserInput {
169
+ address: String!
170
+ networkId: String!
171
+ chainId: Int!
172
+ }
173
+
174
+ input ReactorSignerAppInput {
175
+ name: String!
176
+ key: String!
177
+ }
178
+
179
+ input ActionInput {
180
+ id: String!
181
+ type: String!
182
+ timestampUtcMs: String!
183
+ input: JSONObject!
184
+ scope: String!
185
+ attachments: [AttachmentInput!]
186
+ context: ActionContextInput
187
+ }
188
+
189
+ input AttachmentInput {
190
+ data: String!
191
+ mimeType: String!
192
+ hash: String!
193
+ extension: String
194
+ fileName: String
195
+ }
196
+
197
+ # Synchronization types
198
+ type ReactorOperation {
199
+ index: Int!
200
+ timestampUtcMs: String!
201
+ hash: String!
202
+ skip: Int!
203
+ error: String
204
+ id: String
205
+ action: Action!
206
+ }
207
+
208
+ input OperationInput {
209
+ index: Int!
210
+ timestampUtcMs: String!
211
+ hash: String!
212
+ skip: Int!
213
+ error: String
214
+ id: String
215
+ action: ActionInput!
216
+ }
217
+
218
+ type OperationContext {
219
+ documentId: String!
220
+ documentType: String!
221
+ scope: String!
222
+ branch: String!
223
+ }
224
+
225
+ input OperationContextInput {
226
+ documentId: String!
227
+ documentType: String!
228
+ scope: String!
229
+ branch: String!
230
+ }
231
+
232
+ type OperationWithContext {
233
+ operation: ReactorOperation!
234
+ context: OperationContext!
235
+ }
236
+
237
+ input OperationWithContextInput {
238
+ operation: OperationInput!
239
+ context: OperationContextInput!
240
+ }
241
+
242
+ type ChannelMeta {
243
+ id: String!
244
+ }
245
+
246
+ input ChannelMetaInput {
247
+ id: String!
248
+ }
249
+
250
+ type RemoteCursor {
251
+ remoteName: String!
252
+ cursorOrdinal: Int!
253
+ lastSyncedAtUtcMs: String
254
+ }
255
+
256
+ input RemoteCursorInput {
257
+ remoteName: String!
258
+ cursorOrdinal: Int!
259
+ lastSyncedAtUtcMs: String
260
+ }
261
+
262
+ enum SyncEnvelopeType {
263
+ OPERATIONS
264
+ ACK
265
+ }
266
+
267
+ type SyncEnvelope {
268
+ type: SyncEnvelopeType!
269
+ channelMeta: ChannelMeta!
270
+ operations: [OperationWithContext!]
271
+ cursor: RemoteCursor
272
+ }
273
+
274
+ input SyncEnvelopeInput {
275
+ type: SyncEnvelopeType!
276
+ channelMeta: ChannelMetaInput!
277
+ operations: [OperationWithContextInput!]
278
+ cursor: RemoteCursorInput
279
+ }
280
+
281
+ input RemoteFilterInput {
282
+ documentId: [String!]!
283
+ scope: [String!]!
284
+ branch: String!
285
+ }
286
+
287
+ input TouchChannelInput {
288
+ id: String!
289
+ name: String!
290
+ collectionId: String!
291
+ filter: RemoteFilterInput!
292
+ }
293
+
294
+ type Query {
295
+ # Get document models for a namespace
296
+ documentModels(
297
+ namespace: String
298
+ paging: PagingInput
299
+ ): DocumentModelResultPage!
300
+
301
+ # Get a specific document by ID or slug
302
+ document(
303
+ identifier: String!
304
+ view: ViewFilterInput
305
+ ): DocumentWithChildren
306
+
307
+ # Get children of a document
308
+ documentChildren(
309
+ parentIdentifier: String!
310
+ view: ViewFilterInput
311
+ paging: PagingInput
312
+ ): PHDocumentResultPage!
313
+
314
+ # Get parents of a document
315
+ documentParents(
316
+ childIdentifier: String!
317
+ view: ViewFilterInput
318
+ paging: PagingInput
319
+ ): PHDocumentResultPage!
320
+
321
+ # Find documents by search criteria
322
+ findDocuments(
323
+ search: SearchFilterInput!
324
+ view: ViewFilterInput
325
+ paging: PagingInput
326
+ ): PHDocumentResultPage!
327
+
328
+ # Get job status
329
+ jobStatus(jobId: String!): JobInfo
330
+
331
+ # Poll for sync envelopes from a channel
332
+ pollSyncEnvelopes(
333
+ channelId: String!
334
+ cursorOrdinal: Int!
335
+ ): [SyncEnvelope!]!
336
+ }
337
+
338
+ type Mutation {
339
+ # Create a new document
340
+ createDocument(
341
+ document: JSONObject!
342
+ parentIdentifier: String
343
+ ): PHDocument!
344
+
345
+ # Create an empty document of specified type
346
+ createEmptyDocument(
347
+ documentType: String!
348
+ parentIdentifier: String
349
+ ): PHDocument!
350
+
351
+ # Apply actions to a document (synchronous)
352
+ mutateDocument(
353
+ documentIdentifier: String!
354
+ actions: [JSONObject!]!
355
+ view: ViewFilterInput
356
+ ): PHDocument!
357
+
358
+ # Submit actions to a document (asynchronous)
359
+ mutateDocumentAsync(
360
+ documentIdentifier: String!
361
+ actions: [JSONObject!]!
362
+ view: ViewFilterInput
363
+ ): String!
364
+
365
+ # Rename a document
366
+ renameDocument(
367
+ documentIdentifier: String!
368
+ name: String!
369
+ branch: String
370
+ ): PHDocument!
371
+
372
+ # Add children to a document
373
+ addChildren(
374
+ parentIdentifier: String!
375
+ documentIdentifiers: [String!]!
376
+ branch: String
377
+ ): PHDocument!
378
+
379
+ # Remove children from a document
380
+ removeChildren(
381
+ parentIdentifier: String!
382
+ documentIdentifiers: [String!]!
383
+ branch: String
384
+ ): PHDocument!
385
+
386
+ # Move children between documents
387
+ moveChildren(
388
+ sourceParentIdentifier: String!
389
+ targetParentIdentifier: String!
390
+ documentIdentifiers: [String!]!
391
+ branch: String
392
+ ): MoveChildrenResult!
393
+
394
+ # Delete a single document
395
+ deleteDocument(
396
+ identifier: String!
397
+ propagate: PropagationMode
398
+ ): Boolean!
399
+
400
+ # Delete multiple documents
401
+ deleteDocuments(
402
+ identifiers: [String!]!
403
+ propagate: PropagationMode
404
+ ): Boolean!
405
+
406
+ # Touch (create or update) a channel for sync
407
+ touchChannel(
408
+ input: TouchChannelInput!
409
+ ): Boolean!
410
+
411
+ # Push sync envelope to a channel
412
+ pushSyncEnvelope(
413
+ envelope: SyncEnvelopeInput!
414
+ ): Boolean!
415
+ }
416
+
417
+ type Subscription {
418
+ # Subscribe to document changes
419
+ documentChanges(
420
+ search: SearchFilterInput!
421
+ view: ViewFilterInput
422
+ ): DocumentChangeEvent!
423
+
424
+ # Subscribe to job changes
425
+ jobChanges(
426
+ jobId: String!
427
+ ): JobChangeEvent!
428
+ }
429
+
@@ -6,6 +6,40 @@ export declare class ReactorSubgraph extends BaseSubgraph {
6
6
  constructor(args: SubgraphArgs);
7
7
  name: string;
8
8
  hasSubscriptions: boolean;
9
+ /**
10
+ * Check if user has global read access (admin, user, or guest)
11
+ */
12
+ private hasGlobalReadAccess;
13
+ /**
14
+ * Check if user has global write access (admin or user, not guest)
15
+ */
16
+ private hasGlobalWriteAccess;
17
+ /**
18
+ * Get the parent IDs function for hierarchical permission checks
19
+ */
20
+ private getParentIdsFn;
21
+ /**
22
+ * Check if user can read a document (with hierarchy)
23
+ */
24
+ private canReadDocument;
25
+ /**
26
+ * Check if user can write to a document (with hierarchy)
27
+ */
28
+ private canWriteDocument;
29
+ /**
30
+ * Throw an error if user cannot read the document
31
+ */
32
+ private assertCanRead;
33
+ /**
34
+ * Throw an error if user cannot write to the document
35
+ */
36
+ private assertCanWrite;
37
+ /**
38
+ * Check if user can execute specific operations on a document.
39
+ * Only checks operations that have restrictions set.
40
+ * Throws an error if any operation is restricted and user lacks permission.
41
+ */
42
+ private assertCanExecuteOperations;
9
43
  typeDefs: import("graphql").DocumentNode;
10
44
  resolvers: Resolvers;
11
45
  onSetup(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"subgraph.d.ts","sourceRoot":"","sources":["../../../../src/graphql/reactor/subgraph.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAWlD,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,MAAM,CAGX;gBAES,IAAI,EAAE,YAAY;IAK9B,IAAI,SAAgB;IACpB,gBAAgB,UAAQ;IAGxB,QAAQ,iCAEN;IAEF,SAAS,EAAE,SAAS,CAsTlB;IAEF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAKzB"}
1
+ {"version":3,"file":"subgraph.d.ts","sourceRoot":"","sources":["../../../../src/graphql/reactor/subgraph.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAW,YAAY,EAAE,MAAM,aAAa,CAAC;AAMzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAclD,qBAAa,eAAgB,SAAQ,YAAY;IAE/C,OAAO,CAAC,MAAM,CAA0C;gBAE5C,IAAI,EAAE,YAAY;IAK9B,IAAI,SAAgB;IACpB,gBAAgB,UAAQ;IAExB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;YACW,eAAe;IAqB7B;;OAEG;YACW,gBAAgB;IAqB9B;;OAEG;YACW,aAAa;IAS3B;;OAEG;YACW,cAAc;IAY5B;;;;OAIG;YACW,0BAA0B;IAqDxC,QAAQ,iCAEN;IAEF,SAAS,EAAE,SAAS,CAkdlB;IAEF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAKzB"}