@powerhousedao/reactor-api 6.0.0-dev.9 → 6.0.0-dev.90

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 (267) hide show
  1. package/dist/codegen.js +1 -1
  2. package/dist/codegen.js.map +1 -1
  3. package/dist/index.d.ts +4 -2
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +4 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/src/config.d.ts +1 -2
  8. package/dist/src/config.d.ts.map +1 -1
  9. package/dist/src/config.js +1 -5
  10. package/dist/src/config.js.map +1 -1
  11. package/dist/src/graphql/auth/resolvers.d.ts +17 -0
  12. package/dist/src/graphql/auth/resolvers.d.ts.map +1 -1
  13. package/dist/src/graphql/auth/resolvers.js +54 -0
  14. package/dist/src/graphql/auth/resolvers.js.map +1 -1
  15. package/dist/src/graphql/auth/schema.graphql +27 -5
  16. package/dist/src/graphql/auth/subgraph.d.ts +25 -0
  17. package/dist/src/graphql/auth/subgraph.d.ts.map +1 -1
  18. package/dist/src/graphql/auth/subgraph.js +45 -1
  19. package/dist/src/graphql/auth/subgraph.js.map +1 -1
  20. package/dist/src/graphql/base-subgraph.d.ts +12 -4
  21. package/dist/src/graphql/base-subgraph.d.ts.map +1 -1
  22. package/dist/src/graphql/base-subgraph.js +94 -2
  23. package/dist/src/graphql/base-subgraph.js.map +1 -1
  24. package/dist/src/graphql/document-model-subgraph.d.ts +16 -44
  25. package/dist/src/graphql/document-model-subgraph.d.ts.map +1 -1
  26. package/dist/src/graphql/document-model-subgraph.js +285 -87
  27. package/dist/src/graphql/document-model-subgraph.js.map +1 -1
  28. package/dist/src/graphql/graphql-manager.d.ts +28 -6
  29. package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
  30. package/dist/src/graphql/graphql-manager.js +266 -161
  31. package/dist/src/graphql/graphql-manager.js.map +1 -1
  32. package/dist/src/graphql/index.d.ts +2 -1
  33. package/dist/src/graphql/index.d.ts.map +1 -1
  34. package/dist/src/graphql/index.js +2 -1
  35. package/dist/src/graphql/index.js.map +1 -1
  36. package/dist/src/graphql/packages/index.d.ts +2 -0
  37. package/dist/src/graphql/packages/index.d.ts.map +1 -0
  38. package/dist/src/graphql/packages/index.js +2 -0
  39. package/dist/src/graphql/packages/index.js.map +1 -0
  40. package/dist/src/graphql/packages/resolvers.d.ts +31 -0
  41. package/dist/src/graphql/packages/resolvers.d.ts.map +1 -0
  42. package/dist/src/graphql/packages/resolvers.js +37 -0
  43. package/dist/src/graphql/packages/resolvers.js.map +1 -0
  44. package/dist/src/graphql/packages/schema.graphql +50 -0
  45. package/dist/src/graphql/packages/subgraph.d.ts +55 -0
  46. package/dist/src/graphql/packages/subgraph.d.ts.map +1 -0
  47. package/dist/src/graphql/packages/subgraph.js +73 -0
  48. package/dist/src/graphql/packages/subgraph.js.map +1 -0
  49. package/dist/src/graphql/reactor/adapters.d.ts +10 -2
  50. package/dist/src/graphql/reactor/adapters.d.ts.map +1 -1
  51. package/dist/src/graphql/reactor/adapters.js +35 -1
  52. package/dist/src/graphql/reactor/adapters.js.map +1 -1
  53. package/dist/src/graphql/reactor/factory.d.ts +22 -1
  54. package/dist/src/graphql/reactor/factory.d.ts.map +1 -1
  55. package/dist/src/graphql/reactor/factory.js +1 -1
  56. package/dist/src/graphql/reactor/factory.js.map +1 -1
  57. package/dist/src/graphql/reactor/gen/graphql.d.ts +339 -76
  58. package/dist/src/graphql/reactor/gen/graphql.d.ts.map +1 -1
  59. package/dist/src/graphql/reactor/gen/graphql.js +242 -10
  60. package/dist/src/graphql/reactor/gen/graphql.js.map +1 -1
  61. package/dist/src/graphql/reactor/index.d.ts +1 -1
  62. package/dist/src/graphql/reactor/index.d.ts.map +1 -1
  63. package/dist/src/graphql/reactor/index.js +1 -1
  64. package/dist/src/graphql/reactor/index.js.map +1 -1
  65. package/dist/src/graphql/reactor/operations.graphql +188 -1
  66. package/dist/src/graphql/reactor/requester.with-zod.d.ts.map +1 -1
  67. package/dist/src/graphql/reactor/requester.with-zod.js +114 -38
  68. package/dist/src/graphql/reactor/requester.with-zod.js.map +1 -1
  69. package/dist/src/graphql/reactor/resolvers.d.ts +78 -25
  70. package/dist/src/graphql/reactor/resolvers.d.ts.map +1 -1
  71. package/dist/src/graphql/reactor/resolvers.js +197 -74
  72. package/dist/src/graphql/reactor/resolvers.js.map +1 -1
  73. package/dist/src/graphql/reactor/schema.graphql +70 -30
  74. package/dist/src/graphql/reactor/subgraph.d.ts +2 -31
  75. package/dist/src/graphql/reactor/subgraph.d.ts.map +1 -1
  76. package/dist/src/graphql/reactor/subgraph.js +132 -209
  77. package/dist/src/graphql/reactor/subgraph.js.map +1 -1
  78. package/dist/src/graphql/reactor/validation.d.ts +266 -20
  79. package/dist/src/graphql/reactor/validation.d.ts.map +1 -1
  80. package/dist/src/graphql/reactor/validation.js +98 -4
  81. package/dist/src/graphql/reactor/validation.js.map +1 -1
  82. package/dist/src/graphql/system/index.d.ts +0 -1
  83. package/dist/src/graphql/system/index.d.ts.map +1 -1
  84. package/dist/src/graphql/system/index.js +0 -1
  85. package/dist/src/graphql/system/index.js.map +1 -1
  86. package/dist/src/graphql/types.d.ts +6 -8
  87. package/dist/src/graphql/types.d.ts.map +1 -1
  88. package/dist/src/graphql/utils.d.ts +1 -18
  89. package/dist/src/graphql/utils.d.ts.map +1 -1
  90. package/dist/src/graphql/utils.js +7 -35
  91. package/dist/src/graphql/utils.js.map +1 -1
  92. package/dist/src/migrations/002_add_document_protection.d.ts +4 -0
  93. package/dist/src/migrations/002_add_document_protection.d.ts.map +1 -0
  94. package/dist/src/migrations/002_add_document_protection.js +18 -0
  95. package/dist/src/migrations/002_add_document_protection.js.map +1 -0
  96. package/dist/src/migrations/index.d.ts.map +1 -1
  97. package/dist/src/migrations/index.js +2 -0
  98. package/dist/src/migrations/index.js.map +1 -1
  99. package/dist/src/packages/http-loader.d.ts +68 -0
  100. package/dist/src/packages/http-loader.d.ts.map +1 -0
  101. package/dist/src/packages/http-loader.js +176 -0
  102. package/dist/src/packages/http-loader.js.map +1 -0
  103. package/dist/src/packages/https-hooks.d.mts +23 -0
  104. package/dist/src/packages/https-hooks.d.mts.map +1 -0
  105. package/dist/src/packages/https-hooks.mjs +59 -0
  106. package/dist/src/packages/https-hooks.mjs.map +1 -0
  107. package/dist/src/packages/import-loader.d.ts +5 -3
  108. package/dist/src/packages/import-loader.d.ts.map +1 -1
  109. package/dist/src/packages/import-loader.js +19 -10
  110. package/dist/src/packages/import-loader.js.map +1 -1
  111. package/dist/src/packages/package-manager.d.ts +2 -2
  112. package/dist/src/packages/package-manager.d.ts.map +1 -1
  113. package/dist/src/packages/package-manager.js.map +1 -1
  114. package/dist/src/packages/types.d.ts +9 -4
  115. package/dist/src/packages/types.d.ts.map +1 -1
  116. package/dist/src/packages/util.d.ts +3 -2
  117. package/dist/src/packages/util.d.ts.map +1 -1
  118. package/dist/src/packages/util.js +1 -1
  119. package/dist/src/packages/util.js.map +1 -1
  120. package/dist/src/packages/vite-loader.d.ts +10 -8
  121. package/dist/src/packages/vite-loader.d.ts.map +1 -1
  122. package/dist/src/packages/vite-loader.js +33 -10
  123. package/dist/src/packages/vite-loader.js.map +1 -1
  124. package/dist/src/server.d.ts +14 -11
  125. package/dist/src/server.d.ts.map +1 -1
  126. package/dist/src/server.js +153 -92
  127. package/dist/src/server.js.map +1 -1
  128. package/dist/src/services/auth.service.d.ts +0 -12
  129. package/dist/src/services/auth.service.d.ts.map +1 -1
  130. package/dist/src/services/auth.service.js +13 -40
  131. package/dist/src/services/auth.service.js.map +1 -1
  132. package/dist/src/services/authorization.service.d.ts +70 -0
  133. package/dist/src/services/authorization.service.d.ts.map +1 -0
  134. package/dist/src/services/authorization.service.js +155 -0
  135. package/dist/src/services/authorization.service.js.map +1 -0
  136. package/dist/src/services/document-permission.service.d.ts +47 -7
  137. package/dist/src/services/document-permission.service.d.ts.map +1 -1
  138. package/dist/src/services/document-permission.service.js +162 -7
  139. package/dist/src/services/document-permission.service.js.map +1 -1
  140. package/dist/src/services/package-management.service.d.ts +32 -0
  141. package/dist/src/services/package-management.service.d.ts.map +1 -0
  142. package/dist/src/services/package-management.service.js +95 -0
  143. package/dist/src/services/package-management.service.js.map +1 -0
  144. package/dist/src/services/package-storage.d.ts +23 -0
  145. package/dist/src/services/package-storage.d.ts.map +1 -0
  146. package/dist/src/services/package-storage.js +19 -0
  147. package/dist/src/services/package-storage.js.map +1 -0
  148. package/dist/src/tracing.d.ts.map +1 -1
  149. package/dist/src/tracing.js +19 -1
  150. package/dist/src/tracing.js.map +1 -1
  151. package/dist/src/types.d.ts +5 -5
  152. package/dist/src/types.d.ts.map +1 -1
  153. package/dist/src/utils/auth.d.ts +1 -1
  154. package/dist/src/utils/auth.d.ts.map +1 -1
  155. package/dist/src/utils/auth.js +5 -12
  156. package/dist/src/utils/auth.js.map +1 -1
  157. package/dist/src/utils/create-schema.d.ts +25 -6
  158. package/dist/src/utils/create-schema.d.ts.map +1 -1
  159. package/dist/src/utils/create-schema.js +294 -22
  160. package/dist/src/utils/create-schema.js.map +1 -1
  161. package/dist/src/utils/db.d.ts +8 -0
  162. package/dist/src/utils/db.d.ts.map +1 -1
  163. package/dist/src/utils/db.js.map +1 -1
  164. package/dist/src/utils/drive-url.d.ts +2 -0
  165. package/dist/src/utils/drive-url.d.ts.map +1 -0
  166. package/dist/src/utils/drive-url.js +3 -0
  167. package/dist/src/utils/drive-url.js.map +1 -0
  168. package/dist/src/utils/index.d.ts +1 -0
  169. package/dist/src/utils/index.d.ts.map +1 -1
  170. package/dist/src/utils/index.js +1 -0
  171. package/dist/src/utils/index.js.map +1 -1
  172. package/dist/test/authorization.service.test.d.ts +2 -0
  173. package/dist/test/authorization.service.test.d.ts.map +1 -0
  174. package/dist/test/authorization.service.test.js +252 -0
  175. package/dist/test/authorization.service.test.js.map +1 -0
  176. package/dist/test/connect-switchboard-reshuffle-convergence.test.d.ts +2 -0
  177. package/dist/test/connect-switchboard-reshuffle-convergence.test.d.ts.map +1 -0
  178. package/dist/test/connect-switchboard-reshuffle-convergence.test.js +203 -0
  179. package/dist/test/connect-switchboard-reshuffle-convergence.test.js.map +1 -0
  180. package/dist/test/connect-switchboard-sync.test.d.ts +2 -0
  181. package/dist/test/connect-switchboard-sync.test.d.ts.map +1 -0
  182. package/dist/test/connect-switchboard-sync.test.js +581 -0
  183. package/dist/test/connect-switchboard-sync.test.js.map +1 -0
  184. package/dist/test/document-drive-subgraph.test.d.ts +2 -0
  185. package/dist/test/document-drive-subgraph.test.d.ts.map +1 -0
  186. package/dist/test/document-drive-subgraph.test.js +186 -0
  187. package/dist/test/document-drive-subgraph.test.js.map +1 -0
  188. package/dist/test/document-model-subgraph-permissions.test.d.ts +2 -0
  189. package/dist/test/document-model-subgraph-permissions.test.d.ts.map +1 -0
  190. package/dist/test/document-model-subgraph-permissions.test.js +563 -0
  191. package/dist/test/document-model-subgraph-permissions.test.js.map +1 -0
  192. package/dist/test/drive-info-endpoint.test.d.ts +2 -0
  193. package/dist/test/drive-info-endpoint.test.d.ts.map +1 -0
  194. package/dist/test/drive-info-endpoint.test.js +123 -0
  195. package/dist/test/drive-info-endpoint.test.js.map +1 -0
  196. package/dist/test/index.d.ts +0 -1
  197. package/dist/test/index.d.ts.map +1 -1
  198. package/dist/test/index.js +0 -1
  199. package/dist/test/index.js.map +1 -1
  200. package/dist/test/permissions-integration.test.js +6 -20
  201. package/dist/test/permissions-integration.test.js.map +1 -1
  202. package/dist/test/push-backfill.test.d.ts +2 -0
  203. package/dist/test/push-backfill.test.d.ts.map +1 -0
  204. package/dist/test/push-backfill.test.js +298 -0
  205. package/dist/test/push-backfill.test.js.map +1 -0
  206. package/dist/test/reactor-client.test.js +172 -13
  207. package/dist/test/reactor-client.test.js.map +1 -1
  208. package/dist/test/reactor-resolvers.test.js +8 -11
  209. package/dist/test/reactor-resolvers.test.js.map +1 -1
  210. package/dist/test/reactor-subgraph-permissions.test.js +7 -36
  211. package/dist/test/reactor-subgraph-permissions.test.js.map +1 -1
  212. package/dist/test/subscriptions.test.js +2 -0
  213. package/dist/test/subscriptions.test.js.map +1 -1
  214. package/dist/test/utils/gql-resolver-bridge.d.ts +4 -1
  215. package/dist/test/utils/gql-resolver-bridge.d.ts.map +1 -1
  216. package/dist/test/utils/gql-resolver-bridge.js +36 -7
  217. package/dist/test/utils/gql-resolver-bridge.js.map +1 -1
  218. package/dist/tsconfig.tsbuildinfo +1 -1
  219. package/package.json +46 -55
  220. package/dist/src/graphql/drive-subgraph.d.ts +0 -25
  221. package/dist/src/graphql/drive-subgraph.d.ts.map +0 -1
  222. package/dist/src/graphql/drive-subgraph.js +0 -487
  223. package/dist/src/graphql/drive-subgraph.js.map +0 -1
  224. package/dist/src/graphql/system/system-subgraph.d.ts +0 -49
  225. package/dist/src/graphql/system/system-subgraph.d.ts.map +0 -1
  226. package/dist/src/graphql/system/system-subgraph.js +0 -130
  227. package/dist/src/graphql/system/system-subgraph.js.map +0 -1
  228. package/dist/src/sync/types.d.ts +0 -10
  229. package/dist/src/sync/types.d.ts.map +0 -1
  230. package/dist/src/sync/types.js +0 -2
  231. package/dist/src/sync/types.js.map +0 -1
  232. package/dist/src/sync/utils.d.ts +0 -7
  233. package/dist/src/sync/utils.d.ts.map +0 -1
  234. package/dist/src/sync/utils.js +0 -78
  235. package/dist/src/sync/utils.js.map +0 -1
  236. package/dist/test/drive-handlers.d.ts +0 -4
  237. package/dist/test/drive-handlers.d.ts.map +0 -1
  238. package/dist/test/drive-handlers.js +0 -39
  239. package/dist/test/drive-handlers.js.map +0 -1
  240. package/dist/test/drive-subgraph-permissions.test.d.ts +0 -2
  241. package/dist/test/drive-subgraph-permissions.test.d.ts.map +0 -1
  242. package/dist/test/drive-subgraph-permissions.test.js +0 -195
  243. package/dist/test/drive-subgraph-permissions.test.js.map +0 -1
  244. package/dist/test/drive.test.d.ts +0 -2
  245. package/dist/test/drive.test.d.ts.map +0 -1
  246. package/dist/test/drive.test.js +0 -142
  247. package/dist/test/drive.test.js.map +0 -1
  248. package/dist/test/pull-responder-transmitter.test.d.ts +0 -2
  249. package/dist/test/pull-responder-transmitter.test.d.ts.map +0 -1
  250. package/dist/test/pull-responder-transmitter.test.js +0 -220
  251. package/dist/test/pull-responder-transmitter.test.js.map +0 -1
  252. package/dist/test/push-transmitter.test.d.ts +0 -2
  253. package/dist/test/push-transmitter.test.d.ts.map +0 -1
  254. package/dist/test/push-transmitter.test.js +0 -179
  255. package/dist/test/push-transmitter.test.js.map +0 -1
  256. package/dist/test/system.test.d.ts +0 -2
  257. package/dist/test/system.test.d.ts.map +0 -1
  258. package/dist/test/system.test.js +0 -211
  259. package/dist/test/system.test.js.map +0 -1
  260. package/dist/test/three-reactor-gql-sync.test.d.ts +0 -2
  261. package/dist/test/three-reactor-gql-sync.test.d.ts.map +0 -1
  262. package/dist/test/three-reactor-gql-sync.test.js +0 -368
  263. package/dist/test/three-reactor-gql-sync.test.js.map +0 -1
  264. package/dist/test/two-reactor-gql-sync.test.d.ts +0 -2
  265. package/dist/test/two-reactor-gql-sync.test.d.ts.map +0 -1
  266. package/dist/test/two-reactor-gql-sync.test.js +0 -348
  267. package/dist/test/two-reactor-gql-sync.test.js.map +0 -1
@@ -0,0 +1,581 @@
1
+ import { ConsoleLogger, DocumentModelRegistry, driveCollectionId, EventBus, GqlRequestChannelFactory, GqlResponseChannelFactory, InMemoryQueue, JobStatus, NullDocumentModelResolver, ReactorBuilder, ReactorEventTypes, SyncBuilder, } from "@powerhousedao/reactor";
2
+ import { driveDocumentModelModule } from "document-drive";
3
+ import { afterEach, describe, expect, it } from "vitest";
4
+ import { createResolverBridge } from "./utils/gql-resolver-bridge.js";
5
+ async function setupConnectSwitchboard() {
6
+ const syncManagerRegistry = new Map();
7
+ const resolverBridge = createResolverBridge(syncManagerRegistry);
8
+ const logger = new ConsoleLogger(["test"]);
9
+ const connectEventBus = new EventBus();
10
+ const switchboardEventBus = new EventBus();
11
+ const registry = new DocumentModelRegistry();
12
+ registry.registerModules(driveDocumentModelModule);
13
+ const resolver = new NullDocumentModelResolver(registry);
14
+ const connectQueue = new InMemoryQueue(connectEventBus, resolver);
15
+ const switchboardQueue = new InMemoryQueue(switchboardEventBus, resolver);
16
+ // Both reactors need to handle "gql" (for active polling) and "polling"
17
+ // (for touchChannel-created response channels) in bidirectional sync tests.
18
+ function createCompositeFactory(queue) {
19
+ const request = new GqlRequestChannelFactory(logger, undefined, queue);
20
+ const response = new GqlResponseChannelFactory(logger);
21
+ return {
22
+ instance(...args) {
23
+ const [remoteId, remoteName, config, cursorStorage] = args;
24
+ if (config.type === "polling") {
25
+ return response.instance(remoteId, remoteName, config, cursorStorage);
26
+ }
27
+ return request.instance(...args);
28
+ },
29
+ };
30
+ }
31
+ const connectModule = await new ReactorBuilder()
32
+ .withEventBus(connectEventBus)
33
+ .withQueue(connectQueue)
34
+ .withDocumentModels([
35
+ driveDocumentModelModule,
36
+ ])
37
+ .withSync(new SyncBuilder().withChannelFactory(createCompositeFactory(connectQueue)))
38
+ .buildModule();
39
+ const switchboardModule = await new ReactorBuilder()
40
+ .withEventBus(switchboardEventBus)
41
+ .withQueue(switchboardQueue)
42
+ .withDocumentModels([
43
+ driveDocumentModelModule,
44
+ ])
45
+ .withSync(new SyncBuilder().withChannelFactory(createCompositeFactory(switchboardQueue)))
46
+ .buildModule();
47
+ const switchboardSyncManager = switchboardModule.syncModule.syncManager;
48
+ syncManagerRegistry.set("switchboard", switchboardSyncManager);
49
+ const connectSyncManager = connectModule.syncModule.syncManager;
50
+ syncManagerRegistry.set("connect", connectSyncManager);
51
+ return {
52
+ connectReactor: connectModule.reactor,
53
+ switchboardReactor: switchboardModule.reactor,
54
+ connectModule,
55
+ switchboardModule,
56
+ connectEventBus,
57
+ switchboardEventBus,
58
+ connectSyncManager,
59
+ switchboardSyncManager,
60
+ resolverBridge,
61
+ };
62
+ }
63
+ async function setupSyncForDrive(connectSyncManager, driveId, resolverBridge) {
64
+ const collectionId = driveCollectionId("main", driveId);
65
+ await connectSyncManager.add(`switchboard-${driveId}`, collectionId, {
66
+ type: "gql",
67
+ parameters: {
68
+ url: "http://switchboard/graphql",
69
+ pollIntervalMs: 100,
70
+ retryBaseDelayMs: 50,
71
+ fetchFn: resolverBridge,
72
+ },
73
+ }, {
74
+ documentId: [],
75
+ scope: [],
76
+ branch: "main",
77
+ });
78
+ }
79
+ async function waitForJobCompletion(reactor, jobId, timeoutMs = 10000) {
80
+ const start = Date.now();
81
+ while (Date.now() - start < timeoutMs) {
82
+ const status = await reactor.getJobStatus(jobId);
83
+ if (status.status === JobStatus.READ_READY ||
84
+ status.status === JobStatus.FAILED) {
85
+ if (status.status === JobStatus.FAILED) {
86
+ throw new Error(`Job ${jobId} failed: ${status.error?.message ?? "unknown"}`);
87
+ }
88
+ return;
89
+ }
90
+ await new Promise((resolve) => setTimeout(resolve, 50));
91
+ }
92
+ throw new Error(`Timed out waiting for job ${jobId}`);
93
+ }
94
+ function waitForOperationsReady(eventBus, documentId, timeoutMs = 15000) {
95
+ return new Promise((resolve, reject) => {
96
+ let unsubscribe;
97
+ const timer = setTimeout(() => {
98
+ unsubscribe?.();
99
+ reject(new Error(`Timed out waiting for operations on document ${documentId}`));
100
+ }, timeoutMs);
101
+ unsubscribe = eventBus.subscribe(ReactorEventTypes.JOB_READ_READY, (_type, event) => {
102
+ const matchesDocument = event.operations.some((op) => op.context.documentId === documentId);
103
+ if (matchesDocument) {
104
+ clearTimeout(timer);
105
+ unsubscribe?.();
106
+ resolve();
107
+ }
108
+ });
109
+ });
110
+ }
111
+ async function setupSyncForDriveOnSwitchboard(switchboardSyncManager, driveId, resolverBridge) {
112
+ const collectionId = driveCollectionId("main", driveId);
113
+ await switchboardSyncManager.add(`connect-${driveId}`, collectionId, {
114
+ type: "gql",
115
+ parameters: {
116
+ url: "http://connect/graphql",
117
+ pollIntervalMs: 100,
118
+ retryBaseDelayMs: 50,
119
+ fetchFn: resolverBridge,
120
+ },
121
+ }, { documentId: [], scope: [], branch: "main" });
122
+ }
123
+ function waitForSyncStabilization(eventBuses, quietPeriodMs = 500, timeoutMs = 15000) {
124
+ return new Promise((resolve, reject) => {
125
+ let lastActivityTime = Date.now();
126
+ const unsubscribes = [];
127
+ const timer = setTimeout(() => {
128
+ cleanup();
129
+ reject(new Error("Timed out waiting for sync stabilization"));
130
+ }, timeoutMs);
131
+ const checkQuiet = setInterval(() => {
132
+ if (Date.now() - lastActivityTime >= quietPeriodMs) {
133
+ cleanup();
134
+ resolve();
135
+ }
136
+ }, 50);
137
+ function cleanup() {
138
+ clearTimeout(timer);
139
+ clearInterval(checkQuiet);
140
+ for (const unsub of unsubscribes)
141
+ unsub();
142
+ }
143
+ for (const bus of eventBuses) {
144
+ const unsub = bus.subscribe(ReactorEventTypes.JOB_READ_READY, () => {
145
+ lastActivityTime = Date.now();
146
+ });
147
+ unsubscribes.push(unsub);
148
+ }
149
+ });
150
+ }
151
+ describe("Connect-Switchboard Sync", () => {
152
+ let connectReactor;
153
+ let switchboardReactor;
154
+ let connectModule;
155
+ let switchboardModule;
156
+ let connectEventBus;
157
+ let switchboardEventBus;
158
+ let connectSyncManager;
159
+ let switchboardSyncManager;
160
+ let resolverBridge;
161
+ afterEach(() => {
162
+ connectReactor.kill();
163
+ switchboardReactor.kill();
164
+ });
165
+ it("should sync operation from Connect to Switchboard", async () => {
166
+ const setup = await setupConnectSwitchboard();
167
+ connectReactor = setup.connectReactor;
168
+ switchboardReactor = setup.switchboardReactor;
169
+ connectModule = setup.connectModule;
170
+ switchboardModule = setup.switchboardModule;
171
+ connectEventBus = setup.connectEventBus;
172
+ switchboardEventBus = setup.switchboardEventBus;
173
+ connectSyncManager = setup.connectSyncManager;
174
+ switchboardSyncManager = setup.switchboardSyncManager;
175
+ resolverBridge = setup.resolverBridge;
176
+ const document = driveDocumentModelModule.utils.createDocument({
177
+ global: {
178
+ name: "Test Drive???",
179
+ icon: null,
180
+ nodes: [],
181
+ },
182
+ });
183
+ const documentId = document.header.id;
184
+ await setupSyncForDrive(connectSyncManager, documentId, resolverBridge);
185
+ const readyOnSwitchboard = waitForOperationsReady(switchboardEventBus, documentId);
186
+ const jobInfo = await connectReactor.create(document);
187
+ await waitForJobCompletion(connectReactor, jobInfo.id);
188
+ await readyOnSwitchboard;
189
+ const connectOps = await connectReactor.getOperations(documentId, {
190
+ branch: "main",
191
+ });
192
+ const switchboardOps = await switchboardReactor.getOperations(documentId, {
193
+ branch: "main",
194
+ });
195
+ const connectOpsList = Object.values(connectOps).flatMap((scope) => scope.results);
196
+ const switchboardOpsList = Object.values(switchboardOps).flatMap((scope) => scope.results);
197
+ expect(connectOpsList.length).toBeGreaterThan(0);
198
+ expect(switchboardOpsList.length).toBe(connectOpsList.length);
199
+ for (let i = 0; i < connectOpsList.length; i++) {
200
+ expect(switchboardOpsList[i]).toEqual(connectOpsList[i]);
201
+ }
202
+ const connectDoc = await connectReactor.get(documentId, {
203
+ branch: "main",
204
+ });
205
+ const switchboardDoc = await switchboardReactor.get(documentId, {
206
+ branch: "main",
207
+ });
208
+ expect(connectDoc.state).toEqual(switchboardDoc.state);
209
+ }, 30000);
210
+ it("should sync operation from Switchboard to Connect", async () => {
211
+ const setup = await setupConnectSwitchboard();
212
+ connectReactor = setup.connectReactor;
213
+ switchboardReactor = setup.switchboardReactor;
214
+ connectModule = setup.connectModule;
215
+ switchboardModule = setup.switchboardModule;
216
+ connectEventBus = setup.connectEventBus;
217
+ switchboardEventBus = setup.switchboardEventBus;
218
+ connectSyncManager = setup.connectSyncManager;
219
+ switchboardSyncManager = setup.switchboardSyncManager;
220
+ resolverBridge = setup.resolverBridge;
221
+ const document = driveDocumentModelModule.utils.createDocument({
222
+ global: {
223
+ name: "Test Drive???",
224
+ icon: null,
225
+ nodes: [],
226
+ },
227
+ });
228
+ const documentId = document.header.id;
229
+ // Need a document on Connect first to set up the sync channel
230
+ await setupSyncForDrive(connectSyncManager, documentId, resolverBridge);
231
+ // Create document on Switchboard
232
+ const readyOnConnect = waitForOperationsReady(connectEventBus, documentId);
233
+ const jobInfo = await switchboardReactor.create(document);
234
+ await waitForJobCompletion(switchboardReactor, jobInfo.id);
235
+ // Connect polls Switchboard's outbox
236
+ await readyOnConnect;
237
+ const connectOps = await connectReactor.getOperations(documentId, {
238
+ branch: "main",
239
+ });
240
+ const switchboardOps = await switchboardReactor.getOperations(documentId, {
241
+ branch: "main",
242
+ });
243
+ const connectOpsList = Object.values(connectOps).flatMap((scope) => scope.results);
244
+ const switchboardOpsList = Object.values(switchboardOps).flatMap((scope) => scope.results);
245
+ expect(switchboardOpsList.length).toBeGreaterThan(0);
246
+ expect(connectOpsList.length).toBe(switchboardOpsList.length);
247
+ for (let i = 0; i < switchboardOpsList.length; i++) {
248
+ expect(connectOpsList[i]).toEqual(switchboardOpsList[i]);
249
+ }
250
+ const connectDoc = await connectReactor.get(documentId, {
251
+ branch: "main",
252
+ });
253
+ const switchboardDoc = await switchboardReactor.get(documentId, {
254
+ branch: "main",
255
+ });
256
+ expect(connectDoc.state).toEqual(switchboardDoc.state);
257
+ }, 30000);
258
+ it("should sync mutations from Connect to Switchboard", async () => {
259
+ const setup = await setupConnectSwitchboard();
260
+ connectReactor = setup.connectReactor;
261
+ switchboardReactor = setup.switchboardReactor;
262
+ connectModule = setup.connectModule;
263
+ switchboardModule = setup.switchboardModule;
264
+ connectEventBus = setup.connectEventBus;
265
+ switchboardEventBus = setup.switchboardEventBus;
266
+ connectSyncManager = setup.connectSyncManager;
267
+ switchboardSyncManager = setup.switchboardSyncManager;
268
+ resolverBridge = setup.resolverBridge;
269
+ const document = driveDocumentModelModule.utils.createDocument();
270
+ const documentId = document.header.id;
271
+ await setupSyncForDrive(connectSyncManager, documentId, resolverBridge);
272
+ // Step 1: Create document on Connect, sync to Switchboard
273
+ const createReady = waitForOperationsReady(switchboardEventBus, documentId);
274
+ const createJob = await connectReactor.create(document);
275
+ await waitForJobCompletion(connectReactor, createJob.id);
276
+ await createReady;
277
+ // Step 2: Mutate on Connect
278
+ const mutationReady = waitForOperationsReady(switchboardEventBus, documentId);
279
+ const mutateJob = await connectReactor.execute(documentId, "main", [
280
+ driveDocumentModelModule.actions.setDriveName({ name: "Synced Drive" }),
281
+ ]);
282
+ await waitForJobCompletion(connectReactor, mutateJob.id);
283
+ await mutationReady;
284
+ // Step 3: Verify
285
+ const connectDoc = await connectReactor.get(documentId, {
286
+ branch: "main",
287
+ });
288
+ const switchboardDoc = await switchboardReactor.get(documentId, {
289
+ branch: "main",
290
+ });
291
+ expect(connectDoc.state).toEqual(switchboardDoc.state);
292
+ const state = connectDoc.state;
293
+ expect(state.global.name).toBe("Synced Drive");
294
+ }, 30000);
295
+ describe("sourceRemote echo prevention", () => {
296
+ it("local mutations always have sourceRemote=''", async () => {
297
+ const setup = await setupConnectSwitchboard();
298
+ connectReactor = setup.connectReactor;
299
+ switchboardReactor = setup.switchboardReactor;
300
+ connectModule = setup.connectModule;
301
+ switchboardModule = setup.switchboardModule;
302
+ connectEventBus = setup.connectEventBus;
303
+ switchboardEventBus = setup.switchboardEventBus;
304
+ connectSyncManager = setup.connectSyncManager;
305
+ switchboardSyncManager = setup.switchboardSyncManager;
306
+ resolverBridge = setup.resolverBridge;
307
+ const document = driveDocumentModelModule.utils.createDocument({
308
+ global: { name: "Local Test", icon: null, nodes: [] },
309
+ });
310
+ const documentId = document.header.id;
311
+ const createJob = await connectReactor.create(document);
312
+ await waitForJobCompletion(connectReactor, createJob.id);
313
+ const mutateJob = await connectReactor.execute(documentId, "main", [
314
+ driveDocumentModelModule.actions.setDriveName({
315
+ name: "Local Mutation",
316
+ }),
317
+ ]);
318
+ await waitForJobCompletion(connectReactor, mutateJob.id);
319
+ const indexResult = await connectModule.operationIndex.get(documentId);
320
+ const entries = indexResult.results;
321
+ expect(entries.length).toBeGreaterThan(0);
322
+ for (const entry of entries) {
323
+ expect(entry.sourceRemote).toBe("");
324
+ }
325
+ }, 30000);
326
+ it("trivial append operations are not echoed back to source", async () => {
327
+ const setup = await setupConnectSwitchboard();
328
+ connectReactor = setup.connectReactor;
329
+ switchboardReactor = setup.switchboardReactor;
330
+ connectModule = setup.connectModule;
331
+ switchboardModule = setup.switchboardModule;
332
+ connectEventBus = setup.connectEventBus;
333
+ switchboardEventBus = setup.switchboardEventBus;
334
+ connectSyncManager = setup.connectSyncManager;
335
+ switchboardSyncManager = setup.switchboardSyncManager;
336
+ resolverBridge = setup.resolverBridge;
337
+ const document = driveDocumentModelModule.utils.createDocument({
338
+ global: { name: "Echo Test", icon: null, nodes: [] },
339
+ });
340
+ const documentId = document.header.id;
341
+ await setupSyncForDrive(connectSyncManager, documentId, resolverBridge);
342
+ await setupSyncForDriveOnSwitchboard(switchboardSyncManager, documentId, resolverBridge);
343
+ const createOnSwitchboard = waitForOperationsReady(switchboardEventBus, documentId);
344
+ const createJob = await connectReactor.create(document);
345
+ await waitForJobCompletion(connectReactor, createJob.id);
346
+ await createOnSwitchboard;
347
+ const mutationOnSwitchboard = waitForOperationsReady(switchboardEventBus, documentId);
348
+ const mutateJob = await connectReactor.execute(documentId, "main", [
349
+ driveDocumentModelModule.actions.setDriveName({ name: "No Echo" }),
350
+ ]);
351
+ await waitForJobCompletion(connectReactor, mutateJob.id);
352
+ await mutationOnSwitchboard;
353
+ // Inspect Switchboard's sourceRemote values to understand the mechanism
354
+ const switchboardIndex = await switchboardModule.operationIndex.get(documentId);
355
+ const switchboardEntries = switchboardIndex.results;
356
+ const remoteEntries = switchboardEntries.filter((e) => e.sourceRemote !== "");
357
+ expect(remoteEntries.length).toBeGreaterThan(0);
358
+ // Verify the sourceRemote value on Switchboard.
359
+ // Push-delivered ops get sourceRemote from the touchChannel resolver,
360
+ // which uses the sender's remote name (e.g., "switchboard-{driveId}").
361
+ // The outbox filters by excludeSourceRemote = remote.name
362
+ // (e.g., "connect-{driveId}"). These don't match for push-delivered
363
+ // ops, so echo prevention relies on dedup rather than outbox filtering.
364
+ const sourceRemoteValues = [
365
+ ...new Set(remoteEntries.map((e) => e.sourceRemote)),
366
+ ];
367
+ const connectRemoteName = `connect-${documentId}`;
368
+ const pushSourceRemoteMatchesOutboxFilter = sourceRemoteValues.every((v) => v === connectRemoteName);
369
+ // Verify the outbox filter behavior: query with the actual
370
+ // excludeSourceRemote used by Switchboard's connect-{driveId} remote
371
+ const collectionId = driveCollectionId("main", documentId);
372
+ const filteredIndex = await switchboardModule.operationIndex.find(collectionId, 0, { excludeSourceRemote: connectRemoteName });
373
+ if (!pushSourceRemoteMatchesOutboxFilter) {
374
+ // Known issue: push-delivered ops have a different sourceRemote
375
+ // than the outbox filter expects. The outbox filter does NOT
376
+ // catch these ops; echo prevention relies on dedup instead.
377
+ // The filtered result will include remote ops that should have
378
+ // been filtered out.
379
+ expect(filteredIndex.results.length).toBeGreaterThan(0);
380
+ }
381
+ const connectIndexBefore = await connectModule.operationIndex.get(documentId);
382
+ const connectCountBefore = connectIndexBefore.results.length;
383
+ await waitForSyncStabilization([connectEventBus, switchboardEventBus]);
384
+ const connectIndexAfter = await connectModule.operationIndex.get(documentId);
385
+ const connectCountAfter = connectIndexAfter.results.length;
386
+ expect(connectCountAfter).toBe(connectCountBefore);
387
+ const connectEntries = connectIndexAfter.results;
388
+ for (const entry of connectEntries) {
389
+ expect(entry.sourceRemote).toBe("");
390
+ }
391
+ const connectDoc = await connectReactor.get(documentId, {
392
+ branch: "main",
393
+ });
394
+ const switchboardDoc = await switchboardReactor.get(documentId, {
395
+ branch: "main",
396
+ });
397
+ expect(connectDoc.state).toEqual(switchboardDoc.state);
398
+ }, 30000);
399
+ it("all-duplicate load job completes without wedging the queue", async () => {
400
+ const setup = await setupConnectSwitchboard();
401
+ connectReactor = setup.connectReactor;
402
+ switchboardReactor = setup.switchboardReactor;
403
+ connectModule = setup.connectModule;
404
+ switchboardModule = setup.switchboardModule;
405
+ connectEventBus = setup.connectEventBus;
406
+ switchboardEventBus = setup.switchboardEventBus;
407
+ connectSyncManager = setup.connectSyncManager;
408
+ switchboardSyncManager = setup.switchboardSyncManager;
409
+ resolverBridge = setup.resolverBridge;
410
+ const document = driveDocumentModelModule.utils.createDocument({
411
+ global: { name: "Wedge Test", icon: null, nodes: [] },
412
+ });
413
+ const documentId = document.header.id;
414
+ // Unidirectional sync: Connect -> Switchboard
415
+ await setupSyncForDrive(connectSyncManager, documentId, resolverBridge);
416
+ const createOnSwitchboard = waitForOperationsReady(switchboardEventBus, documentId);
417
+ const createJob = await connectReactor.create(document);
418
+ await waitForJobCompletion(connectReactor, createJob.id);
419
+ await createOnSwitchboard;
420
+ // Mutate on Connect, sync mutation to Switchboard (produces global-scope ops)
421
+ const mutationOnSwitchboard = waitForOperationsReady(switchboardEventBus, documentId);
422
+ const mutateJob = await connectReactor.execute(documentId, "main", [
423
+ driveDocumentModelModule.actions.setDriveName({
424
+ name: "Wedge Mutated",
425
+ }),
426
+ ]);
427
+ await waitForJobCompletion(connectReactor, mutateJob.id);
428
+ await mutationOnSwitchboard;
429
+ // Record Switchboard's index count
430
+ const indexBefore = await switchboardModule.operationIndex.get(documentId);
431
+ const countBefore = indexBefore.results.length;
432
+ expect(countBefore).toBeGreaterThan(0);
433
+ // Get Switchboard's global-scope operations (already stored)
434
+ const switchboardOps = await switchboardReactor.getOperations(documentId, { branch: "main" });
435
+ const globalOps = switchboardOps["global"]?.results ?? [];
436
+ expect(globalOps.length).toBeGreaterThan(0);
437
+ // Load exact duplicates into Switchboard via reactor.load().
438
+ // All ops already exist, so executor dedup filters them all out.
439
+ // Before the P0 fix, the load job would hang forever because
440
+ // JOB_WRITE_READY was not emitted for empty operationsWithContext.
441
+ const loadJob = await switchboardReactor.load(documentId, "main", globalOps);
442
+ await waitForJobCompletion(switchboardReactor, loadJob.id);
443
+ // Verify the job reached READ_READY (not stuck at RUNNING)
444
+ const jobStatus = await switchboardReactor.getJobStatus(loadJob.id);
445
+ expect(jobStatus.status).toBe(JobStatus.READ_READY);
446
+ // Verify no new index entries were created
447
+ const indexAfter = await switchboardModule.operationIndex.get(documentId);
448
+ expect(indexAfter.results.length).toBe(countBefore);
449
+ }, 30000);
450
+ it("executor-level dedup rejects duplicate operations via load", async () => {
451
+ const setup = await setupConnectSwitchboard();
452
+ connectReactor = setup.connectReactor;
453
+ switchboardReactor = setup.switchboardReactor;
454
+ connectModule = setup.connectModule;
455
+ switchboardModule = setup.switchboardModule;
456
+ connectEventBus = setup.connectEventBus;
457
+ switchboardEventBus = setup.switchboardEventBus;
458
+ connectSyncManager = setup.connectSyncManager;
459
+ switchboardSyncManager = setup.switchboardSyncManager;
460
+ resolverBridge = setup.resolverBridge;
461
+ const document = driveDocumentModelModule.utils.createDocument({
462
+ global: { name: "Dedup Test", icon: null, nodes: [] },
463
+ });
464
+ const documentId = document.header.id;
465
+ // Unidirectional sync: Connect -> Switchboard
466
+ await setupSyncForDrive(connectSyncManager, documentId, resolverBridge);
467
+ const createOnSwitchboard = waitForOperationsReady(switchboardEventBus, documentId);
468
+ const createJob = await connectReactor.create(document);
469
+ await waitForJobCompletion(connectReactor, createJob.id);
470
+ await createOnSwitchboard;
471
+ // Mutate on Connect, sync mutation to Switchboard
472
+ const mutationOnSwitchboard = waitForOperationsReady(switchboardEventBus, documentId);
473
+ const mutateJob = await connectReactor.execute(documentId, "main", [
474
+ driveDocumentModelModule.actions.setDriveName({ name: "Dedup" }),
475
+ ]);
476
+ await waitForJobCompletion(connectReactor, mutateJob.id);
477
+ await mutationOnSwitchboard;
478
+ // Verify ops are synced
479
+ const switchboardOps = await switchboardReactor.getOperations(documentId, { branch: "main" });
480
+ const globalOps = switchboardOps["global"]?.results ?? [];
481
+ expect(globalOps.length).toBeGreaterThan(0);
482
+ // Record Switchboard's index count
483
+ const indexBefore = await switchboardModule.operationIndex.get(documentId);
484
+ const countBefore = indexBefore.results.length;
485
+ expect(countBefore).toBeGreaterThan(0);
486
+ // Load exact same operations again via reactor.load().
487
+ // This exercises the executor's existingActionIds.has(op.action.id) dedup,
488
+ // NOT cursor advancement (which only trims the outbox on subsequent polls).
489
+ const loadJob = await switchboardReactor.load(documentId, "main", globalOps);
490
+ await waitForJobCompletion(switchboardReactor, loadJob.id);
491
+ // Verify job completed
492
+ const jobStatus = await switchboardReactor.getJobStatus(loadJob.id);
493
+ expect(jobStatus.status).toBe(JobStatus.READ_READY);
494
+ // Verify index count unchanged (executor dedup rejected all ops)
495
+ const indexAfter = await switchboardModule.operationIndex.get(documentId);
496
+ expect(indexAfter.results.length).toBe(countBefore);
497
+ }, 30000);
498
+ it("reshuffle operations converge and terminate", async () => {
499
+ const setup = await setupConnectSwitchboard();
500
+ connectReactor = setup.connectReactor;
501
+ switchboardReactor = setup.switchboardReactor;
502
+ connectModule = setup.connectModule;
503
+ switchboardModule = setup.switchboardModule;
504
+ connectEventBus = setup.connectEventBus;
505
+ switchboardEventBus = setup.switchboardEventBus;
506
+ connectSyncManager = setup.connectSyncManager;
507
+ switchboardSyncManager = setup.switchboardSyncManager;
508
+ resolverBridge = setup.resolverBridge;
509
+ const document = driveDocumentModelModule.utils.createDocument();
510
+ const documentId = document.header.id;
511
+ // Unidirectional sync first: Connect -> Switchboard
512
+ await setupSyncForDrive(connectSyncManager, documentId, resolverBridge);
513
+ // Create document on Connect, sync to Switchboard
514
+ const createOnSwitchboard = waitForOperationsReady(switchboardEventBus, documentId);
515
+ const createJob = await connectReactor.create(document);
516
+ await waitForJobCompletion(connectReactor, createJob.id);
517
+ await createOnSwitchboard;
518
+ // Remove sync to prevent polling from loading T1 as a trivial append
519
+ // (preserving sourceRemote) before Connect creates T2.
520
+ await connectSyncManager.remove(`switchboard-${documentId}`);
521
+ // Mutate on Switchboard first (earlier timestamp T1)
522
+ const switchboardMutateJob = await switchboardReactor.execute(documentId, "main", [
523
+ driveDocumentModelModule.actions.setDriveName({
524
+ name: "Switchboard Mutation",
525
+ }),
526
+ ]);
527
+ await waitForJobCompletion(switchboardReactor, switchboardMutateJob.id);
528
+ // Wait to ensure Connect's mutation gets a later timestamp T2
529
+ await new Promise((r) => setTimeout(r, 10));
530
+ // Mutate on Connect (later timestamp T2 > T1)
531
+ const connectMutateJob = await connectReactor.execute(documentId, "main", [
532
+ driveDocumentModelModule.actions.setDriveName({
533
+ name: "Connect Mutation",
534
+ }),
535
+ ]);
536
+ await waitForJobCompletion(connectReactor, connectMutateJob.id);
537
+ // Get Switchboard's global-scope operations
538
+ const switchboardOps = await switchboardReactor.getOperations(documentId, { branch: "main" });
539
+ const switchboardGlobalOps = switchboardOps["global"]?.results ?? [];
540
+ // Load Switchboard's ops into Connect via reactor.load().
541
+ // Switchboard's T1 mutation triggers getConflicting() which finds
542
+ // Connect's T2 operation -> skipCount > 0 -> reshuffle deterministically.
543
+ const loadJob = await connectReactor.load(documentId, "main", switchboardGlobalOps);
544
+ await waitForJobCompletion(connectReactor, loadJob.id);
545
+ // After reshuffle, all Connect index entries should have sourceRemote=""
546
+ // (reshuffle sets effectiveSourceRemote="" to broadcast to all remotes)
547
+ const connectIndex = await connectModule.operationIndex.get(documentId);
548
+ const connectEntries = connectIndex.results;
549
+ for (const entry of connectEntries) {
550
+ expect(entry.sourceRemote).toBe("");
551
+ }
552
+ // Verify Connect's state reflects the reshuffle result
553
+ const connectDoc = await connectReactor.get(documentId, {
554
+ branch: "main",
555
+ });
556
+ expect(connectDoc.state).toBeDefined();
557
+ // Re-establish Connect->Switchboard sync for bidirectional convergence test
558
+ await setupSyncForDrive(connectSyncManager, documentId, resolverBridge);
559
+ // Now set up bidirectional sync and verify echo termination
560
+ await setupSyncForDriveOnSwitchboard(switchboardSyncManager, documentId, resolverBridge);
561
+ await waitForSyncStabilization([connectEventBus, switchboardEventBus], 1000, 20000);
562
+ // States should converge
563
+ const connectDocFinal = await connectReactor.get(documentId, {
564
+ branch: "main",
565
+ });
566
+ const switchboardDocFinal = await switchboardReactor.get(documentId, {
567
+ branch: "main",
568
+ });
569
+ expect(connectDocFinal.state).toEqual(switchboardDocFinal.state);
570
+ // Verify operation counts stabilized (echo terminated)
571
+ const connectCountAfterSync = (await connectModule.operationIndex.get(documentId)).results.length;
572
+ const switchboardCountAfterSync = (await switchboardModule.operationIndex.get(documentId)).results.length;
573
+ await new Promise((r) => setTimeout(r, 1000));
574
+ const connectCountFinal = (await connectModule.operationIndex.get(documentId)).results.length;
575
+ const switchboardCountFinal = (await switchboardModule.operationIndex.get(documentId)).results.length;
576
+ expect(connectCountFinal).toBe(connectCountAfterSync);
577
+ expect(switchboardCountFinal).toBe(switchboardCountAfterSync);
578
+ }, 30000);
579
+ });
580
+ });
581
+ //# sourceMappingURL=connect-switchboard-sync.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-switchboard-sync.test.js","sourceRoot":"","sources":["../../test/connect-switchboard-sync.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=document-drive-subgraph.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-drive-subgraph.test.d.ts","sourceRoot":"","sources":["../../test/document-drive-subgraph.test.ts"],"names":[],"mappings":""}