@powerhousedao/reactor-api 6.0.0-dev.5 → 6.0.0-dev.50

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 (166) hide show
  1. package/dist/codegen.js +1 -1
  2. package/dist/codegen.js.map +1 -1
  3. package/dist/src/config.d.ts +1 -2
  4. package/dist/src/config.d.ts.map +1 -1
  5. package/dist/src/config.js +1 -5
  6. package/dist/src/config.js.map +1 -1
  7. package/dist/src/graphql/auth/subgraph.js +1 -1
  8. package/dist/src/graphql/auth/subgraph.js.map +1 -1
  9. package/dist/src/graphql/base-subgraph.d.ts +2 -2
  10. package/dist/src/graphql/base-subgraph.d.ts.map +1 -1
  11. package/dist/src/graphql/base-subgraph.js.map +1 -1
  12. package/dist/src/graphql/document-model-subgraph.d.ts +95 -43
  13. package/dist/src/graphql/document-model-subgraph.d.ts.map +1 -1
  14. package/dist/src/graphql/document-model-subgraph.js +570 -79
  15. package/dist/src/graphql/document-model-subgraph.js.map +1 -1
  16. package/dist/src/graphql/drive-subgraph.d.ts.map +1 -1
  17. package/dist/src/graphql/drive-subgraph.js +1 -0
  18. package/dist/src/graphql/drive-subgraph.js.map +1 -1
  19. package/dist/src/graphql/graphql-manager.d.ts +7 -2
  20. package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
  21. package/dist/src/graphql/graphql-manager.js +130 -42
  22. package/dist/src/graphql/graphql-manager.js.map +1 -1
  23. package/dist/src/graphql/index.d.ts +1 -0
  24. package/dist/src/graphql/index.d.ts.map +1 -1
  25. package/dist/src/graphql/index.js +1 -0
  26. package/dist/src/graphql/index.js.map +1 -1
  27. package/dist/src/graphql/reactor/adapters.d.ts +10 -2
  28. package/dist/src/graphql/reactor/adapters.d.ts.map +1 -1
  29. package/dist/src/graphql/reactor/adapters.js +35 -1
  30. package/dist/src/graphql/reactor/adapters.js.map +1 -1
  31. package/dist/src/graphql/reactor/factory.d.ts +12 -1
  32. package/dist/src/graphql/reactor/factory.d.ts.map +1 -1
  33. package/dist/src/graphql/reactor/factory.js +1 -1
  34. package/dist/src/graphql/reactor/factory.js.map +1 -1
  35. package/dist/src/graphql/reactor/gen/graphql.d.ts +187 -27
  36. package/dist/src/graphql/reactor/gen/graphql.d.ts.map +1 -1
  37. package/dist/src/graphql/reactor/gen/graphql.js +124 -9
  38. package/dist/src/graphql/reactor/gen/graphql.js.map +1 -1
  39. package/dist/src/graphql/reactor/index.d.ts +1 -1
  40. package/dist/src/graphql/reactor/index.d.ts.map +1 -1
  41. package/dist/src/graphql/reactor/index.js +1 -1
  42. package/dist/src/graphql/reactor/index.js.map +1 -1
  43. package/dist/src/graphql/reactor/operations.graphql +80 -0
  44. package/dist/src/graphql/reactor/requester.with-zod.d.ts.map +1 -1
  45. package/dist/src/graphql/reactor/requester.with-zod.js +104 -38
  46. package/dist/src/graphql/reactor/requester.with-zod.js.map +1 -1
  47. package/dist/src/graphql/reactor/resolvers.d.ts +48 -24
  48. package/dist/src/graphql/reactor/resolvers.d.ts.map +1 -1
  49. package/dist/src/graphql/reactor/resolvers.js +134 -70
  50. package/dist/src/graphql/reactor/resolvers.js.map +1 -1
  51. package/dist/src/graphql/reactor/schema.graphql +59 -29
  52. package/dist/src/graphql/reactor/subgraph.d.ts.map +1 -1
  53. package/dist/src/graphql/reactor/subgraph.js +97 -111
  54. package/dist/src/graphql/reactor/subgraph.js.map +1 -1
  55. package/dist/src/graphql/reactor/validation.d.ts +24 -0
  56. package/dist/src/graphql/reactor/validation.d.ts.map +1 -1
  57. package/dist/src/graphql/reactor/validation.js +15 -0
  58. package/dist/src/graphql/reactor/validation.js.map +1 -1
  59. package/dist/src/graphql/system/index.d.ts +0 -1
  60. package/dist/src/graphql/system/index.d.ts.map +1 -1
  61. package/dist/src/graphql/system/index.js +0 -1
  62. package/dist/src/graphql/system/index.js.map +1 -1
  63. package/dist/src/graphql/types.d.ts +3 -3
  64. package/dist/src/graphql/types.d.ts.map +1 -1
  65. package/dist/src/graphql/utils.d.ts.map +1 -1
  66. package/dist/src/graphql/utils.js +7 -3
  67. package/dist/src/graphql/utils.js.map +1 -1
  68. package/dist/src/packages/import-loader.d.ts +5 -3
  69. package/dist/src/packages/import-loader.d.ts.map +1 -1
  70. package/dist/src/packages/import-loader.js +19 -10
  71. package/dist/src/packages/import-loader.js.map +1 -1
  72. package/dist/src/packages/package-manager.d.ts +2 -2
  73. package/dist/src/packages/package-manager.d.ts.map +1 -1
  74. package/dist/src/packages/package-manager.js.map +1 -1
  75. package/dist/src/packages/types.d.ts +8 -4
  76. package/dist/src/packages/types.d.ts.map +1 -1
  77. package/dist/src/packages/util.d.ts +3 -2
  78. package/dist/src/packages/util.d.ts.map +1 -1
  79. package/dist/src/packages/util.js +1 -1
  80. package/dist/src/packages/util.js.map +1 -1
  81. package/dist/src/packages/vite-loader.d.ts +7 -6
  82. package/dist/src/packages/vite-loader.d.ts.map +1 -1
  83. package/dist/src/packages/vite-loader.js +21 -8
  84. package/dist/src/packages/vite-loader.js.map +1 -1
  85. package/dist/src/server.d.ts +16 -7
  86. package/dist/src/server.d.ts.map +1 -1
  87. package/dist/src/server.js +117 -59
  88. package/dist/src/server.js.map +1 -1
  89. package/dist/src/services/auth.service.d.ts.map +1 -1
  90. package/dist/src/services/auth.service.js +11 -20
  91. package/dist/src/services/auth.service.js.map +1 -1
  92. package/dist/src/tracing.js +1 -1
  93. package/dist/src/tracing.js.map +1 -1
  94. package/dist/src/types.d.ts +5 -5
  95. package/dist/src/types.d.ts.map +1 -1
  96. package/dist/src/utils/create-schema.d.ts +21 -1
  97. package/dist/src/utils/create-schema.d.ts.map +1 -1
  98. package/dist/src/utils/create-schema.js +290 -16
  99. package/dist/src/utils/create-schema.js.map +1 -1
  100. package/dist/src/utils/drive-url.d.ts +2 -0
  101. package/dist/src/utils/drive-url.d.ts.map +1 -0
  102. package/dist/src/utils/drive-url.js +3 -0
  103. package/dist/src/utils/drive-url.js.map +1 -0
  104. package/dist/src/utils/index.d.ts +1 -0
  105. package/dist/src/utils/index.d.ts.map +1 -1
  106. package/dist/src/utils/index.js +1 -0
  107. package/dist/src/utils/index.js.map +1 -1
  108. package/dist/test/connect-switchboard-sync.test.d.ts +2 -0
  109. package/dist/test/connect-switchboard-sync.test.d.ts.map +1 -0
  110. package/dist/test/connect-switchboard-sync.test.js +578 -0
  111. package/dist/test/connect-switchboard-sync.test.js.map +1 -0
  112. package/dist/test/document-drive-subgraph.test.d.ts +2 -0
  113. package/dist/test/document-drive-subgraph.test.d.ts.map +1 -0
  114. package/dist/test/document-drive-subgraph.test.js +186 -0
  115. package/dist/test/document-drive-subgraph.test.js.map +1 -0
  116. package/dist/test/document-model-subgraph-legacy-permissions.test.d.ts +2 -0
  117. package/dist/test/document-model-subgraph-legacy-permissions.test.d.ts.map +1 -0
  118. package/dist/test/document-model-subgraph-legacy-permissions.test.js +518 -0
  119. package/dist/test/document-model-subgraph-legacy-permissions.test.js.map +1 -0
  120. package/dist/test/document-model-subgraph-permissions.test.d.ts +2 -0
  121. package/dist/test/document-model-subgraph-permissions.test.d.ts.map +1 -0
  122. package/dist/test/document-model-subgraph-permissions.test.js +635 -0
  123. package/dist/test/document-model-subgraph-permissions.test.js.map +1 -0
  124. package/dist/test/document-model-subgraph.test.d.ts +2 -0
  125. package/dist/test/document-model-subgraph.test.d.ts.map +1 -0
  126. package/dist/test/document-model-subgraph.test.js +441 -0
  127. package/dist/test/document-model-subgraph.test.js.map +1 -0
  128. package/dist/test/drive-info-endpoint.test.d.ts +2 -0
  129. package/dist/test/drive-info-endpoint.test.d.ts.map +1 -0
  130. package/dist/test/drive-info-endpoint.test.js +123 -0
  131. package/dist/test/drive-info-endpoint.test.js.map +1 -0
  132. package/dist/test/permissions-integration.test.js +4 -4
  133. package/dist/test/permissions-integration.test.js.map +1 -1
  134. package/dist/test/push-backfill.test.d.ts +2 -0
  135. package/dist/test/push-backfill.test.d.ts.map +1 -0
  136. package/dist/test/push-backfill.test.js +295 -0
  137. package/dist/test/push-backfill.test.js.map +1 -0
  138. package/dist/test/reactor-client.test.js +4 -4
  139. package/dist/test/reactor-client.test.js.map +1 -1
  140. package/dist/test/reactor-resolvers.test.js +4 -8
  141. package/dist/test/reactor-resolvers.test.js.map +1 -1
  142. package/dist/test/reactor-subgraph-permissions.test.js +4 -7
  143. package/dist/test/reactor-subgraph-permissions.test.js.map +1 -1
  144. package/dist/test/subscriptions.test.js +2 -0
  145. package/dist/test/subscriptions.test.js.map +1 -1
  146. package/dist/test/utils/gql-resolver-bridge.d.ts.map +1 -1
  147. package/dist/test/utils/gql-resolver-bridge.js +28 -6
  148. package/dist/test/utils/gql-resolver-bridge.js.map +1 -1
  149. package/dist/tsconfig.tsbuildinfo +1 -1
  150. package/package.json +45 -35
  151. package/dist/src/graphql/system/system-subgraph.d.ts +0 -49
  152. package/dist/src/graphql/system/system-subgraph.d.ts.map +0 -1
  153. package/dist/src/graphql/system/system-subgraph.js +0 -130
  154. package/dist/src/graphql/system/system-subgraph.js.map +0 -1
  155. package/dist/test/system.test.d.ts +0 -2
  156. package/dist/test/system.test.d.ts.map +0 -1
  157. package/dist/test/system.test.js +0 -211
  158. package/dist/test/system.test.js.map +0 -1
  159. package/dist/test/three-reactor-gql-sync.test.d.ts +0 -2
  160. package/dist/test/three-reactor-gql-sync.test.d.ts.map +0 -1
  161. package/dist/test/three-reactor-gql-sync.test.js +0 -368
  162. package/dist/test/three-reactor-gql-sync.test.js.map +0 -1
  163. package/dist/test/two-reactor-gql-sync.test.d.ts +0 -2
  164. package/dist/test/two-reactor-gql-sync.test.d.ts.map +0 -1
  165. package/dist/test/two-reactor-gql-sync.test.js +0 -348
  166. package/dist/test/two-reactor-gql-sync.test.js.map +0 -1
@@ -1,6 +1,106 @@
1
1
  import { Kind } from "graphql";
2
2
  import { createFetchRequester } from "./requester.js";
3
- import { DocumentModelResultPageDTO, DocumentWithChildrenDTO, JobInfoDTO, PHDocumentResultPageDTO, } from "./validation.js";
3
+ import { DocumentChangeEventDTO, DocumentModelResultPageDTO, DocumentWithChildrenDTO, JobChangeEventDTO, JobInfoDTO, MoveChildrenResultDTO, PHDocumentDTO, PHDocumentResultPageDTO, } from "./validation.js";
4
+ // Validation handlers for each operation
5
+ // TypeScript will error if any operation from Sdk is missing
6
+ const operationValidators = {
7
+ GetDocument: (data) => {
8
+ if (data.document) {
9
+ DocumentWithChildrenDTO.parse(data.document);
10
+ }
11
+ },
12
+ GetDocumentModels: (data) => {
13
+ if (data.documentModels) {
14
+ DocumentModelResultPageDTO.parse(data.documentModels);
15
+ }
16
+ },
17
+ GetDocumentChildren: (data) => {
18
+ if (data.documentChildren) {
19
+ PHDocumentResultPageDTO.parse(data.documentChildren);
20
+ }
21
+ },
22
+ GetDocumentParents: (data) => {
23
+ if (data.documentParents) {
24
+ PHDocumentResultPageDTO.parse(data.documentParents);
25
+ }
26
+ },
27
+ FindDocuments: (data) => {
28
+ if (data.findDocuments) {
29
+ PHDocumentResultPageDTO.parse(data.findDocuments);
30
+ }
31
+ },
32
+ GetJobStatus: (data) => {
33
+ if (data.jobStatus) {
34
+ JobInfoDTO.parse(data.jobStatus);
35
+ }
36
+ },
37
+ // Mutations
38
+ CreateDocument: (data) => {
39
+ if (data.createDocument) {
40
+ PHDocumentDTO.parse(data.createDocument);
41
+ }
42
+ },
43
+ CreateEmptyDocument: (data) => {
44
+ if (data.createEmptyDocument) {
45
+ PHDocumentDTO.parse(data.createEmptyDocument);
46
+ }
47
+ },
48
+ MutateDocument: (data) => {
49
+ if (data.mutateDocument) {
50
+ PHDocumentDTO.parse(data.mutateDocument);
51
+ }
52
+ },
53
+ MutateDocumentAsync: (data) => {
54
+ if (data.mutateDocumentAsync) {
55
+ // Returns a job ID string
56
+ }
57
+ },
58
+ RenameDocument: (data) => {
59
+ if (data.renameDocument) {
60
+ PHDocumentDTO.parse(data.renameDocument);
61
+ }
62
+ },
63
+ AddChildren: (data) => {
64
+ if (data.addChildren) {
65
+ PHDocumentDTO.parse(data.addChildren);
66
+ }
67
+ },
68
+ RemoveChildren: (data) => {
69
+ if (data.removeChildren) {
70
+ PHDocumentDTO.parse(data.removeChildren);
71
+ }
72
+ },
73
+ MoveChildren: (data) => {
74
+ if (data.moveChildren) {
75
+ MoveChildrenResultDTO.parse(data.moveChildren);
76
+ }
77
+ },
78
+ DeleteDocument: (data) => {
79
+ if (data.deleteDocument !== undefined) {
80
+ // Returns a boolean
81
+ }
82
+ },
83
+ DeleteDocuments: (data) => {
84
+ if (data.deleteDocuments !== undefined) {
85
+ // Returns a boolean
86
+ }
87
+ },
88
+ // Subscriptions
89
+ DocumentChanges: (data) => {
90
+ if (data.documentChanges) {
91
+ DocumentChangeEventDTO.parse(data.documentChanges);
92
+ }
93
+ },
94
+ JobChanges: (data) => {
95
+ if (data.jobChanges) {
96
+ JobChangeEventDTO.parse(data.jobChanges);
97
+ }
98
+ },
99
+ // Sync operations (used inline by reactor/gql-req-channel.ts, not through this SDK)
100
+ PollSyncEnvelopes: () => { },
101
+ TouchChannel: () => { },
102
+ PushSyncEnvelopes: () => { },
103
+ };
4
104
  export function createValidatingRequester(url, fetchImpl, headers) {
5
105
  const base = createFetchRequester(url, fetchImpl, headers);
6
106
  return async (document, variables, options) => {
@@ -9,43 +109,9 @@ export function createValidatingRequester(url, fetchImpl, headers) {
9
109
  const operationDef = document.definitions.find((d) => d.kind === Kind.OPERATION_DEFINITION && !!d.name);
10
110
  const operationName = operationDef?.name?.value;
11
111
  // Validate based on operation name
12
- if (data && operationName) {
13
- const dataObj = data;
14
- switch (operationName) {
15
- case "GetDocument":
16
- if (dataObj.document) {
17
- DocumentWithChildrenDTO.parse(dataObj.document);
18
- }
19
- break;
20
- case "GetDocumentModels":
21
- if (dataObj.documentModels) {
22
- DocumentModelResultPageDTO.parse(dataObj.documentModels);
23
- }
24
- break;
25
- case "GetDocumentChildren":
26
- if (dataObj.documentChildren) {
27
- PHDocumentResultPageDTO.parse(dataObj.documentChildren);
28
- }
29
- break;
30
- case "GetDocumentParents":
31
- if (dataObj.documentParents) {
32
- PHDocumentResultPageDTO.parse(dataObj.documentParents);
33
- }
34
- break;
35
- case "FindDocuments":
36
- if (dataObj.findDocuments) {
37
- PHDocumentResultPageDTO.parse(dataObj.findDocuments);
38
- }
39
- break;
40
- case "GetJobStatus":
41
- if (dataObj.jobStatus) {
42
- JobInfoDTO.parse(dataObj.jobStatus);
43
- }
44
- break;
45
- // Mutations and other operations can be added here as needed
46
- default:
47
- break;
48
- }
112
+ if (data && operationName && operationName in operationValidators) {
113
+ const validator = operationValidators[operationName];
114
+ validator(data);
49
115
  }
50
116
  return data;
51
117
  };
@@ -1 +1 @@
1
- {"version":3,"file":"requester.with-zod.js","sourceRoot":"","sources":["../../../../src/graphql/reactor/requester.with-zod.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAQ/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,UAAU,EACV,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,UAAU,yBAAyB,CACvC,GAAW,EACX,SAAoB,EACpB,OAAgC;IAEhC,MAAM,IAAI,GAAG,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3D,OAAO,KAAK,EACV,QAAsB,EACtB,SAAa,EACb,OAAqB,EACT,EAAE;QACd,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAM,CAAC;QAE7D,2CAA2C;QAC3C,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAC5C,CAAC,CAAC,EAAgC,EAAE,CAClC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CACnD,CAAC;QACF,MAAM,aAAa,GAAG,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC;QAEhD,mCAAmC;QACnC,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,IAA+B,CAAC;YAChD,QAAQ,aAAa,EAAE,CAAC;gBACtB,KAAK,aAAa;oBAChB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;wBACrB,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAClD,CAAC;oBACD,MAAM;gBACR,KAAK,mBAAmB;oBACtB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;wBAC3B,0BAA0B,CAAC,KAAK,CAC9B,OAAO,CAAC,cAAyC,CAClD,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,KAAK,qBAAqB;oBACxB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;wBAC7B,uBAAuB,CAAC,KAAK,CAC3B,OAAO,CAAC,gBAAwC,CACjD,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,KAAK,oBAAoB;oBACvB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;wBAC5B,uBAAuB,CAAC,KAAK,CAC3B,OAAO,CAAC,eAAuC,CAChD,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,KAAK,eAAe;oBAClB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;wBAC1B,uBAAuB,CAAC,KAAK,CAC3B,OAAO,CAAC,aAAqC,CAC9C,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,KAAK,cAAc;oBACjB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;wBACtB,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,SAAoB,CAAC,CAAC;oBACjD,CAAC;oBACD,MAAM;gBACR,6DAA6D;gBAC7D;oBACE,MAAM;YACV,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"requester.with-zod.js","sourceRoot":"","sources":["../../../../src/graphql/reactor/requester.with-zod.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { type IReactorClient, type ISyncManager } from "@powerhousedao/reactor";
2
+ import type { GetParentIdsFn } from "../../services/document-permission.service.js";
2
3
  import { toGqlPhDocument } from "./adapters.js";
3
- import type { DocumentModelResultPage, JobInfo as GqlJobInfo, PropagationMode as GqlPropagationMode, PhDocumentResultPage } from "./gen/graphql.js";
4
+ import type { DocumentModelResultPage, JobInfo as GqlJobInfo, PropagationMode as GqlPropagationMode, PhDocumentResultPage, ReactorOperationResultPage } from "./gen/graphql.js";
4
5
  export declare function documentModels(reactorClient: IReactorClient, args: {
5
6
  namespace?: string | null;
6
7
  paging?: {
@@ -57,6 +58,21 @@ export declare function findDocuments(reactorClient: IReactorClient, args: {
57
58
  export declare function jobStatus(reactorClient: IReactorClient, args: {
58
59
  jobId: string;
59
60
  }): Promise<GqlJobInfo>;
61
+ export declare function documentOperations(reactorClient: IReactorClient, args: {
62
+ filter: {
63
+ documentId: string;
64
+ branch?: string | null;
65
+ scopes?: readonly string[] | null;
66
+ actionTypes?: readonly string[] | null;
67
+ sinceRevision?: number | null;
68
+ timestampFrom?: string | null;
69
+ timestampTo?: string | null;
70
+ };
71
+ paging?: {
72
+ cursor?: string | null;
73
+ limit?: number | null;
74
+ } | null;
75
+ }): Promise<ReactorOperationResultPage>;
60
76
  export declare function createDocument(reactorClient: IReactorClient, args: {
61
77
  document: unknown;
62
78
  parentIdentifier?: string | null;
@@ -123,37 +139,45 @@ export declare function touchChannel(syncManager: ISyncManager, args: {
123
139
  scope: readonly string[];
124
140
  branch: string;
125
141
  };
142
+ sinceTimestampUtcMs: string;
126
143
  };
127
144
  }): Promise<boolean>;
128
145
  export declare function pollSyncEnvelopes(syncManager: ISyncManager, args: {
129
146
  channelId: string;
130
- cursorOrdinal: number;
131
- }): Promise<any[]>;
132
- export declare function pushSyncEnvelope(syncManager: ISyncManager, args: {
133
- envelope: {
134
- type: string;
135
- channelMeta: {
136
- id: string;
137
- };
138
- operations?: Array<{
139
- operation: any;
140
- context: {
141
- documentId: string;
142
- documentType: string;
143
- scope: string;
144
- branch: string;
145
- };
146
- }> | null;
147
- cursor?: {
148
- remoteName: string;
149
- cursorOrdinal: number;
150
- lastSyncedAtUtcMs?: string | null;
151
- } | null;
147
+ outboxAck: number;
148
+ outboxLatest: number;
149
+ }): {
150
+ envelopes: any[];
151
+ ackOrdinal: number;
152
+ };
153
+ type SyncEnvelopeArg = {
154
+ type: string;
155
+ channelMeta: {
156
+ id: string;
152
157
  };
158
+ operations?: Array<{
159
+ operation: any;
160
+ context: {
161
+ documentId: string;
162
+ documentType: string;
163
+ scope: string;
164
+ branch: string;
165
+ };
166
+ }> | null;
167
+ cursor?: {
168
+ remoteName: string;
169
+ cursorOrdinal: number;
170
+ lastSyncedAtUtcMs?: string | null;
171
+ } | null;
172
+ key?: string;
173
+ dependsOn?: string[];
174
+ };
175
+ export declare function pushSyncEnvelopes(syncManager: ISyncManager, args: {
176
+ envelopes: SyncEnvelopeArg[];
153
177
  }): Promise<boolean>;
154
- import type { GetParentIdsFn } from "../../services/document-permission.service.js";
155
178
  /**
156
179
  * Create a getParentIds function using the reactor client
157
180
  */
158
181
  export declare function createGetParentIdsFn(reactorClient: IReactorClient): GetParentIdsFn;
182
+ export {};
159
183
  //# sourceMappingURL=resolvers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../../src/graphql/reactor/resolvers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolvers.d.ts","sourceRoot":"","sources":["../../../../src/graphql/reactor/resolvers.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { SyncOperation, } from "@powerhousedao/reactor";
1
+ import { batchOperationsByDocument, sortEnvelopesByFirstOperationTimestamp, SyncOperation, trimMailboxFromAckOrdinal, } from "@powerhousedao/reactor";
2
2
  import { GraphQLError } from "graphql";
3
- import { fromInputMaybe, toDocumentModelResultPage, toGqlJobInfo, toGqlPhDocument, toMutableArray, toPhDocumentResultPage, validateActions, } from "./adapters.js";
3
+ import { fromInputMaybe, serializeOperationForGraphQL, toDocumentModelResultPage, toGqlJobInfo, toGqlPhDocument, toMutableArray, toOperationResultPage, toPhDocumentResultPage, validateActions, } from "./adapters.js";
4
4
  export async function documentModels(reactorClient, args) {
5
5
  const namespace = fromInputMaybe(args.namespace);
6
6
  let paging;
@@ -43,10 +43,17 @@ export async function document(reactorClient, args) {
43
43
  catch (error) {
44
44
  throw new GraphQLError(`Failed to fetch document: ${error instanceof Error ? error.message : "Unknown error"}`);
45
45
  }
46
+ let children;
47
+ try {
48
+ children = await reactorClient.getChildren(args.identifier, view);
49
+ }
50
+ catch (error) {
51
+ throw new GraphQLError(`Failed to fetch children: ${error instanceof Error ? error.message : "Unknown error"}`);
52
+ }
46
53
  try {
47
54
  return {
48
- document: toGqlPhDocument(result.document),
49
- childIds: result.childIds,
55
+ document: toGqlPhDocument(result),
56
+ childIds: children.results.map((child) => child.header.id),
50
57
  };
51
58
  }
52
59
  catch (error) {
@@ -171,6 +178,54 @@ export async function jobStatus(reactorClient, args) {
171
178
  throw new GraphQLError(`Failed to convert job status to GraphQL: ${error instanceof Error ? error.message : "Unknown error"}`);
172
179
  }
173
180
  }
181
+ export async function documentOperations(reactorClient, args) {
182
+ let view;
183
+ const branch = fromInputMaybe(args.filter.branch);
184
+ const scopes = toMutableArray(fromInputMaybe(args.filter.scopes));
185
+ if (branch || scopes) {
186
+ view = { branch, scopes };
187
+ }
188
+ const actionTypes = toMutableArray(fromInputMaybe(args.filter.actionTypes));
189
+ const sinceRevision = fromInputMaybe(args.filter.sinceRevision);
190
+ const timestampFrom = fromInputMaybe(args.filter.timestampFrom);
191
+ const timestampTo = fromInputMaybe(args.filter.timestampTo);
192
+ let operationFilter;
193
+ if ((actionTypes && actionTypes.length > 0) ||
194
+ sinceRevision !== undefined ||
195
+ timestampFrom ||
196
+ timestampTo) {
197
+ operationFilter = {
198
+ actionTypes: actionTypes && actionTypes.length > 0 ? actionTypes : undefined,
199
+ sinceRevision,
200
+ timestampFrom: timestampFrom || undefined,
201
+ timestampTo: timestampTo || undefined,
202
+ };
203
+ }
204
+ let paging;
205
+ if (args.paging) {
206
+ const cursor = fromInputMaybe(args.paging.cursor);
207
+ const limit = fromInputMaybe(args.paging.limit);
208
+ if (cursor || limit) {
209
+ paging = {
210
+ cursor: cursor || "",
211
+ limit: limit || 100,
212
+ };
213
+ }
214
+ }
215
+ let result;
216
+ try {
217
+ result = await reactorClient.getOperations(args.filter.documentId, view, operationFilter, paging);
218
+ }
219
+ catch (error) {
220
+ throw new GraphQLError(`Failed to fetch document operations: ${error instanceof Error ? error.message : "Unknown error"}`);
221
+ }
222
+ try {
223
+ return toOperationResultPage(result);
224
+ }
225
+ catch (error) {
226
+ throw new GraphQLError(`Failed to convert operations to GraphQL: ${error instanceof Error ? error.message : "Unknown error"}`);
227
+ }
228
+ }
174
229
  export async function createDocument(reactorClient, args) {
175
230
  // Validate that document is a PHDocument
176
231
  if (!args.document || typeof args.document !== "object") {
@@ -369,44 +424,21 @@ export async function touchChannel(syncManager, args) {
369
424
  scope: [...args.input.filter.scope],
370
425
  branch: args.input.filter.branch,
371
426
  };
427
+ const options = {
428
+ sinceTimestampUtcMs: args.input.sinceTimestampUtcMs,
429
+ };
372
430
  try {
373
431
  await syncManager.add(args.input.name, args.input.collectionId, {
374
432
  type: "polling",
375
433
  parameters: {},
376
- }, filter, {}, args.input.id);
434
+ }, filter, options, args.input.id);
377
435
  }
378
436
  catch (error) {
379
437
  throw new GraphQLError(`Failed to create channel: ${error instanceof Error ? error.message : "Unknown error"}`);
380
438
  }
381
439
  return true;
382
440
  }
383
- /**
384
- * Transforms an operation to serialize signatures from tuples to strings
385
- * for GraphQL compatibility.
386
- *
387
- * The Signature type is a tuple [string, string, string, string, string],
388
- * but GraphQL expects [String!]! (flat array of strings).
389
- */
390
- function serializeOperationForGraphQL(operation) {
391
- const signer = operation.action.context?.signer;
392
- if (!signer?.signatures) {
393
- return operation;
394
- }
395
- return {
396
- ...operation,
397
- action: {
398
- ...operation.action,
399
- context: {
400
- ...operation.action.context,
401
- signer: {
402
- ...signer,
403
- signatures: signer.signatures.map((sig) => Array.isArray(sig) ? sig.join(", ") : sig),
404
- },
405
- },
406
- },
407
- };
408
- }
409
- export async function pollSyncEnvelopes(syncManager, args) {
441
+ export function pollSyncEnvelopes(syncManager, args) {
410
442
  let remote;
411
443
  try {
412
444
  remote = syncManager.getById(args.channelId);
@@ -414,14 +446,29 @@ export async function pollSyncEnvelopes(syncManager, args) {
414
446
  catch (error) {
415
447
  throw new GraphQLError(`Channel not found: ${error instanceof Error ? error.message : "Unknown error"}`);
416
448
  }
417
- if (args.cursorOrdinal > 0) {
418
- await remote.channel.updateCursor(args.cursorOrdinal);
449
+ // trim outbox
450
+ if (args.outboxAck > 0) {
451
+ trimMailboxFromAckOrdinal(remote.channel.outbox, args.outboxAck);
419
452
  }
420
- const operations = remote.channel.outbox.items;
453
+ let operations = remote.channel.outbox.items;
454
+ // filter remaining outbox operations by outboxLatest
455
+ operations = operations.filter((syncOp) => {
456
+ let maxOrdinal = 0;
457
+ for (const op of syncOp.operations) {
458
+ maxOrdinal = Math.max(maxOrdinal, op.context.ordinal);
459
+ }
460
+ if (maxOrdinal > args.outboxLatest) {
461
+ return true;
462
+ }
463
+ return false;
464
+ });
421
465
  if (operations.length === 0) {
422
- return [];
466
+ return {
467
+ envelopes: [],
468
+ ackOrdinal: remote.channel.inbox.ackOrdinal,
469
+ };
423
470
  }
424
- let maxOrdinal = args.cursorOrdinal;
471
+ let maxOrdinal = args.outboxLatest;
425
472
  for (const syncOp of operations) {
426
473
  for (const op of syncOp.operations) {
427
474
  const opOrdinal = op.context.ordinal;
@@ -444,42 +491,59 @@ export async function pollSyncEnvelopes(syncManager, args) {
444
491
  cursorOrdinal: maxOrdinal,
445
492
  lastSyncedAtUtcMs: Date.now().toString(),
446
493
  },
494
+ key: syncOp.jobId || undefined,
495
+ dependsOn: syncOp.jobDependencies.filter(Boolean).length > 0
496
+ ? syncOp.jobDependencies.filter(Boolean)
497
+ : undefined,
447
498
  }));
448
- return envelopes;
499
+ return {
500
+ envelopes: sortEnvelopesByFirstOperationTimestamp(envelopes),
501
+ ackOrdinal: remote.channel.inbox.ackOrdinal,
502
+ };
449
503
  }
450
- export function pushSyncEnvelope(syncManager, args) {
451
- let remote;
452
- try {
453
- remote = syncManager.getById(args.envelope.channelMeta.id);
454
- }
455
- catch (error) {
456
- throw new GraphQLError(`Channel not found: ${error instanceof Error ? error.message : "Unknown error"}`);
457
- }
458
- if (!args.envelope.operations || args.envelope.operations.length === 0) {
459
- return Promise.resolve(true);
460
- }
461
- const firstOp = args.envelope.operations[0];
462
- const syncOpId = `syncop-${args.envelope.channelMeta.id}-${Date.now()}-${crypto.randomUUID()}`;
463
- const scopes = [
464
- ...new Set(args.envelope.operations.map((op) => op.context.scope)),
465
- ];
466
- const operations = args.envelope.operations.map((op) => ({
467
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
468
- operation: op.operation,
469
- context: {
470
- documentId: op.context.documentId,
471
- documentType: op.context.documentType,
472
- scope: op.context.scope,
473
- branch: op.context.branch,
474
- ordinal: 0,
475
- },
476
- }));
477
- const syncOp = new SyncOperation(syncOpId, remote.name, firstOp.context.documentId, scopes, firstOp.context.branch, operations);
478
- try {
479
- remote.channel.inbox.add(syncOp);
504
+ export function pushSyncEnvelopes(syncManager, args) {
505
+ const sortedEnvelopes = sortEnvelopesByFirstOperationTimestamp(args.envelopes);
506
+ const remoteSyncOps = new Map();
507
+ for (const envelope of sortedEnvelopes) {
508
+ let remote;
509
+ try {
510
+ remote = syncManager.getById(envelope.channelMeta.id);
511
+ }
512
+ catch (error) {
513
+ throw new GraphQLError(`Channel not found: ${error instanceof Error ? error.message : "Unknown error"}`);
514
+ }
515
+ if (!envelope.operations || envelope.operations.length === 0) {
516
+ continue;
517
+ }
518
+ const operations = envelope.operations.map((op) => ({
519
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
520
+ operation: op.operation,
521
+ context: {
522
+ documentId: op.context.documentId,
523
+ documentType: op.context.documentType,
524
+ scope: op.context.scope,
525
+ branch: op.context.branch,
526
+ ordinal: 0,
527
+ },
528
+ }));
529
+ const batches = batchOperationsByDocument(operations);
530
+ for (const batch of batches) {
531
+ const syncOpId = `syncop-${envelope.channelMeta.id}-${Date.now()}-${crypto.randomUUID()}`;
532
+ const jobId = envelope.key ?? "";
533
+ const jobDependencies = envelope.dependsOn ?? [];
534
+ const syncOp = new SyncOperation(syncOpId, jobId, jobDependencies, remote.name, batch.documentId, [batch.scope], batch.branch, batch.operations);
535
+ if (!remoteSyncOps.has(remote)) {
536
+ remoteSyncOps.set(remote, []);
537
+ }
538
+ remoteSyncOps.get(remote).push(syncOp);
539
+ }
480
540
  }
481
- catch (error) {
482
- throw new GraphQLError(`Failed to push sync envelope: ${error instanceof Error ? error.message : "Unknown error"}`);
541
+ for (const [remote, syncOps] of remoteSyncOps) {
542
+ const validKeys = new Set(syncOps.map((op) => op.jobId).filter(Boolean));
543
+ for (const syncOp of syncOps) {
544
+ syncOp.jobDependencies = syncOp.jobDependencies.filter((dep) => validKeys.has(dep));
545
+ }
546
+ remote.channel.inbox.add(...syncOps);
483
547
  }
484
548
  return Promise.resolve(true);
485
549
  }