@powerhousedao/reactor-api 6.0.2-staging.2 → 6.0.2-staging.3

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 (351) hide show
  1. package/README.md +6 -0
  2. package/dist/index.d.mts +2943 -0
  3. package/dist/index.d.mts.map +1 -0
  4. package/dist/index.mjs +6375 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/dist/src/packages/https-hooks.d.mts +23 -7
  7. package/dist/src/packages/https-hooks.d.mts.map +1 -1
  8. package/dist/src/packages/https-hooks.mjs +73 -53
  9. package/dist/src/packages/https-hooks.mjs.map +1 -1
  10. package/dist/src/packages/vite-loader.d.mts +29 -0
  11. package/dist/src/packages/vite-loader.d.mts.map +1 -0
  12. package/dist/src/packages/vite-loader.mjs +142 -0
  13. package/dist/src/packages/vite-loader.mjs.map +1 -0
  14. package/dist/types-Do4QTfT3.d.mts +37 -0
  15. package/dist/types-Do4QTfT3.d.mts.map +1 -0
  16. package/dist/utils-DEEhP99G.mjs +286 -0
  17. package/dist/utils-DEEhP99G.mjs.map +1 -0
  18. package/package.json +45 -32
  19. package/dist/codegen.d.ts +0 -4
  20. package/dist/codegen.d.ts.map +0 -1
  21. package/dist/codegen.js +0 -38
  22. package/dist/codegen.js.map +0 -1
  23. package/dist/index.d.ts +0 -16
  24. package/dist/index.d.ts.map +0 -1
  25. package/dist/index.js +0 -16
  26. package/dist/index.js.map +0 -1
  27. package/dist/src/config.d.ts +0 -6
  28. package/dist/src/config.d.ts.map +0 -1
  29. package/dist/src/config.js +0 -6
  30. package/dist/src/config.js.map +0 -1
  31. package/dist/src/dev.d.ts +0 -2
  32. package/dist/src/dev.d.ts.map +0 -1
  33. package/dist/src/dev.js +0 -51
  34. package/dist/src/dev.js.map +0 -1
  35. package/dist/src/graphql/analytics-subgraph.d.ts +0 -14
  36. package/dist/src/graphql/analytics-subgraph.d.ts.map +0 -1
  37. package/dist/src/graphql/analytics-subgraph.js +0 -26
  38. package/dist/src/graphql/analytics-subgraph.js.map +0 -1
  39. package/dist/src/graphql/auth/index.d.ts +0 -2
  40. package/dist/src/graphql/auth/index.d.ts.map +0 -1
  41. package/dist/src/graphql/auth/index.js +0 -2
  42. package/dist/src/graphql/auth/index.js.map +0 -1
  43. package/dist/src/graphql/auth/resolvers.d.ts +0 -166
  44. package/dist/src/graphql/auth/resolvers.d.ts.map +0 -1
  45. package/dist/src/graphql/auth/resolvers.js +0 -227
  46. package/dist/src/graphql/auth/resolvers.js.map +0 -1
  47. package/dist/src/graphql/auth/schema.graphql +0 -195
  48. package/dist/src/graphql/auth/subgraph.d.ts +0 -202
  49. package/dist/src/graphql/auth/subgraph.d.ts.map +0 -1
  50. package/dist/src/graphql/auth/subgraph.js +0 -384
  51. package/dist/src/graphql/auth/subgraph.js.map +0 -1
  52. package/dist/src/graphql/base-subgraph.d.ts +0 -28
  53. package/dist/src/graphql/base-subgraph.d.ts.map +0 -1
  54. package/dist/src/graphql/base-subgraph.js +0 -126
  55. package/dist/src/graphql/base-subgraph.js.map +0 -1
  56. package/dist/src/graphql/document-model-subgraph.d.ts +0 -105
  57. package/dist/src/graphql/document-model-subgraph.d.ts.map +0 -1
  58. package/dist/src/graphql/document-model-subgraph.js +0 -312
  59. package/dist/src/graphql/document-model-subgraph.js.map +0 -1
  60. package/dist/src/graphql/graphql-manager.d.ts +0 -68
  61. package/dist/src/graphql/graphql-manager.d.ts.map +0 -1
  62. package/dist/src/graphql/graphql-manager.js +0 -589
  63. package/dist/src/graphql/graphql-manager.js.map +0 -1
  64. package/dist/src/graphql/index.d.ts +0 -10
  65. package/dist/src/graphql/index.d.ts.map +0 -1
  66. package/dist/src/graphql/index.js +0 -10
  67. package/dist/src/graphql/index.js.map +0 -1
  68. package/dist/src/graphql/packages/index.d.ts +0 -2
  69. package/dist/src/graphql/packages/index.d.ts.map +0 -1
  70. package/dist/src/graphql/packages/index.js +0 -2
  71. package/dist/src/graphql/packages/index.js.map +0 -1
  72. package/dist/src/graphql/packages/resolvers.d.ts +0 -31
  73. package/dist/src/graphql/packages/resolvers.d.ts.map +0 -1
  74. package/dist/src/graphql/packages/resolvers.js +0 -37
  75. package/dist/src/graphql/packages/resolvers.js.map +0 -1
  76. package/dist/src/graphql/packages/schema.graphql +0 -50
  77. package/dist/src/graphql/packages/subgraph.d.ts +0 -55
  78. package/dist/src/graphql/packages/subgraph.d.ts.map +0 -1
  79. package/dist/src/graphql/packages/subgraph.js +0 -73
  80. package/dist/src/graphql/packages/subgraph.js.map +0 -1
  81. package/dist/src/graphql/playground.d.ts +0 -2
  82. package/dist/src/graphql/playground.d.ts.map +0 -1
  83. package/dist/src/graphql/playground.js +0 -81
  84. package/dist/src/graphql/playground.js.map +0 -1
  85. package/dist/src/graphql/reactor/adapters.d.ts +0 -62
  86. package/dist/src/graphql/reactor/adapters.d.ts.map +0 -1
  87. package/dist/src/graphql/reactor/adapters.js +0 -271
  88. package/dist/src/graphql/reactor/adapters.js.map +0 -1
  89. package/dist/src/graphql/reactor/factory.d.ts +0 -105
  90. package/dist/src/graphql/reactor/factory.d.ts.map +0 -1
  91. package/dist/src/graphql/reactor/factory.js +0 -7
  92. package/dist/src/graphql/reactor/factory.js.map +0 -1
  93. package/dist/src/graphql/reactor/gen/graphql.d.ts +0 -1489
  94. package/dist/src/graphql/reactor/gen/graphql.d.ts.map +0 -1
  95. package/dist/src/graphql/reactor/gen/graphql.js +0 -731
  96. package/dist/src/graphql/reactor/gen/graphql.js.map +0 -1
  97. package/dist/src/graphql/reactor/index.d.ts +0 -4
  98. package/dist/src/graphql/reactor/index.d.ts.map +0 -1
  99. package/dist/src/graphql/reactor/index.js +0 -4
  100. package/dist/src/graphql/reactor/index.js.map +0 -1
  101. package/dist/src/graphql/reactor/operations.graphql +0 -443
  102. package/dist/src/graphql/reactor/pubsub.d.ts +0 -27
  103. package/dist/src/graphql/reactor/pubsub.d.ts.map +0 -1
  104. package/dist/src/graphql/reactor/pubsub.js +0 -93
  105. package/dist/src/graphql/reactor/pubsub.js.map +0 -1
  106. package/dist/src/graphql/reactor/requester.d.ts +0 -4
  107. package/dist/src/graphql/reactor/requester.d.ts.map +0 -1
  108. package/dist/src/graphql/reactor/requester.js +0 -22
  109. package/dist/src/graphql/reactor/requester.js.map +0 -1
  110. package/dist/src/graphql/reactor/requester.with-zod.d.ts +0 -4
  111. package/dist/src/graphql/reactor/requester.with-zod.d.ts.map +0 -1
  112. package/dist/src/graphql/reactor/requester.with-zod.js +0 -129
  113. package/dist/src/graphql/reactor/requester.with-zod.js.map +0 -1
  114. package/dist/src/graphql/reactor/resolvers.d.ts +0 -223
  115. package/dist/src/graphql/reactor/resolvers.d.ts.map +0 -1
  116. package/dist/src/graphql/reactor/resolvers.js +0 -682
  117. package/dist/src/graphql/reactor/resolvers.js.map +0 -1
  118. package/dist/src/graphql/reactor/schema.graphql +0 -475
  119. package/dist/src/graphql/reactor/subgraph.d.ts +0 -18
  120. package/dist/src/graphql/reactor/subgraph.d.ts.map +0 -1
  121. package/dist/src/graphql/reactor/subgraph.js +0 -457
  122. package/dist/src/graphql/reactor/subgraph.js.map +0 -1
  123. package/dist/src/graphql/reactor/validation.d.ts +0 -348
  124. package/dist/src/graphql/reactor/validation.d.ts.map +0 -1
  125. package/dist/src/graphql/reactor/validation.js +0 -167
  126. package/dist/src/graphql/reactor/validation.js.map +0 -1
  127. package/dist/src/graphql/sse.d.ts +0 -42
  128. package/dist/src/graphql/sse.d.ts.map +0 -1
  129. package/dist/src/graphql/sse.js +0 -33
  130. package/dist/src/graphql/sse.js.map +0 -1
  131. package/dist/src/graphql/system/env/getters.d.ts +0 -2
  132. package/dist/src/graphql/system/env/getters.d.ts.map +0 -1
  133. package/dist/src/graphql/system/env/getters.js +0 -4
  134. package/dist/src/graphql/system/env/getters.js.map +0 -1
  135. package/dist/src/graphql/system/env/index.d.ts +0 -2
  136. package/dist/src/graphql/system/env/index.d.ts.map +0 -1
  137. package/dist/src/graphql/system/env/index.js +0 -5
  138. package/dist/src/graphql/system/env/index.js.map +0 -1
  139. package/dist/src/graphql/system/index.d.ts +0 -2
  140. package/dist/src/graphql/system/index.d.ts.map +0 -1
  141. package/dist/src/graphql/system/index.js +0 -2
  142. package/dist/src/graphql/system/index.js.map +0 -1
  143. package/dist/src/graphql/system/types.d.ts +0 -2
  144. package/dist/src/graphql/system/types.d.ts.map +0 -1
  145. package/dist/src/graphql/system/types.js +0 -2
  146. package/dist/src/graphql/system/types.js.map +0 -1
  147. package/dist/src/graphql/temp-hack-rwa-type-defs.d.ts +0 -57
  148. package/dist/src/graphql/temp-hack-rwa-type-defs.d.ts.map +0 -1
  149. package/dist/src/graphql/temp-hack-rwa-type-defs.js +0 -2
  150. package/dist/src/graphql/temp-hack-rwa-type-defs.js.map +0 -1
  151. package/dist/src/graphql/types.d.ts +0 -102
  152. package/dist/src/graphql/types.d.ts.map +0 -1
  153. package/dist/src/graphql/types.js +0 -2
  154. package/dist/src/graphql/types.js.map +0 -1
  155. package/dist/src/graphql/utils.d.ts +0 -9
  156. package/dist/src/graphql/utils.d.ts.map +0 -1
  157. package/dist/src/graphql/utils.js +0 -72
  158. package/dist/src/graphql/utils.js.map +0 -1
  159. package/dist/src/graphql/websocket.d.ts +0 -3
  160. package/dist/src/graphql/websocket.d.ts.map +0 -1
  161. package/dist/src/graphql/websocket.js +0 -15
  162. package/dist/src/graphql/websocket.js.map +0 -1
  163. package/dist/src/migrations/001_create_document_permissions.d.ts +0 -4
  164. package/dist/src/migrations/001_create_document_permissions.d.ts.map +0 -1
  165. package/dist/src/migrations/001_create_document_permissions.js +0 -91
  166. package/dist/src/migrations/001_create_document_permissions.js.map +0 -1
  167. package/dist/src/migrations/002_add_document_protection.d.ts +0 -4
  168. package/dist/src/migrations/002_add_document_protection.d.ts.map +0 -1
  169. package/dist/src/migrations/002_add_document_protection.js +0 -18
  170. package/dist/src/migrations/002_add_document_protection.js.map +0 -1
  171. package/dist/src/migrations/index.d.ts +0 -10
  172. package/dist/src/migrations/index.d.ts.map +0 -1
  173. package/dist/src/migrations/index.js +0 -58
  174. package/dist/src/migrations/index.js.map +0 -1
  175. package/dist/src/packages/http-loader.d.ts +0 -68
  176. package/dist/src/packages/http-loader.d.ts.map +0 -1
  177. package/dist/src/packages/http-loader.js +0 -176
  178. package/dist/src/packages/http-loader.js.map +0 -1
  179. package/dist/src/packages/import-loader.d.ts +0 -14
  180. package/dist/src/packages/import-loader.d.ts.map +0 -1
  181. package/dist/src/packages/import-loader.js +0 -46
  182. package/dist/src/packages/import-loader.js.map +0 -1
  183. package/dist/src/packages/import-resolver.d.ts +0 -5
  184. package/dist/src/packages/import-resolver.d.ts.map +0 -1
  185. package/dist/src/packages/import-resolver.js +0 -127
  186. package/dist/src/packages/import-resolver.js.map +0 -1
  187. package/dist/src/packages/package-manager.d.ts +0 -34
  188. package/dist/src/packages/package-manager.d.ts.map +0 -1
  189. package/dist/src/packages/package-manager.js +0 -213
  190. package/dist/src/packages/package-manager.js.map +0 -1
  191. package/dist/src/packages/types.d.ts +0 -38
  192. package/dist/src/packages/types.d.ts.map +0 -1
  193. package/dist/src/packages/types.js +0 -2
  194. package/dist/src/packages/types.js.map +0 -1
  195. package/dist/src/packages/util.d.ts +0 -27
  196. package/dist/src/packages/util.d.ts.map +0 -1
  197. package/dist/src/packages/util.js +0 -97
  198. package/dist/src/packages/util.js.map +0 -1
  199. package/dist/src/packages/vite-loader.d.ts +0 -24
  200. package/dist/src/packages/vite-loader.d.ts.map +0 -1
  201. package/dist/src/packages/vite-loader.js +0 -169
  202. package/dist/src/packages/vite-loader.js.map +0 -1
  203. package/dist/src/server.d.ts +0 -56
  204. package/dist/src/server.d.ts.map +0 -1
  205. package/dist/src/server.js +0 -365
  206. package/dist/src/server.js.map +0 -1
  207. package/dist/src/services/auth.service.d.ts +0 -56
  208. package/dist/src/services/auth.service.d.ts.map +0 -1
  209. package/dist/src/services/auth.service.js +0 -172
  210. package/dist/src/services/auth.service.js.map +0 -1
  211. package/dist/src/services/authorization.service.d.ts +0 -70
  212. package/dist/src/services/authorization.service.d.ts.map +0 -1
  213. package/dist/src/services/authorization.service.js +0 -155
  214. package/dist/src/services/authorization.service.js.map +0 -1
  215. package/dist/src/services/document-permission.service.d.ts +0 -241
  216. package/dist/src/services/document-permission.service.d.ts.map +0 -1
  217. package/dist/src/services/document-permission.service.js +0 -791
  218. package/dist/src/services/document-permission.service.js.map +0 -1
  219. package/dist/src/services/package-management.service.d.ts +0 -32
  220. package/dist/src/services/package-management.service.d.ts.map +0 -1
  221. package/dist/src/services/package-management.service.js +0 -95
  222. package/dist/src/services/package-management.service.js.map +0 -1
  223. package/dist/src/services/package-storage.d.ts +0 -23
  224. package/dist/src/services/package-storage.d.ts.map +0 -1
  225. package/dist/src/services/package-storage.js +0 -19
  226. package/dist/src/services/package-storage.js.map +0 -1
  227. package/dist/src/tracing.d.ts +0 -4
  228. package/dist/src/tracing.d.ts.map +0 -1
  229. package/dist/src/tracing.js +0 -140
  230. package/dist/src/tracing.js.map +0 -1
  231. package/dist/src/types.d.ts +0 -17
  232. package/dist/src/types.d.ts.map +0 -1
  233. package/dist/src/types.js +0 -2
  234. package/dist/src/types.js.map +0 -1
  235. package/dist/src/utils/auth.d.ts +0 -3
  236. package/dist/src/utils/auth.d.ts.map +0 -1
  237. package/dist/src/utils/auth.js +0 -12
  238. package/dist/src/utils/auth.js.map +0 -1
  239. package/dist/src/utils/create-schema.d.ts +0 -36
  240. package/dist/src/utils/create-schema.d.ts.map +0 -1
  241. package/dist/src/utils/create-schema.js +0 -725
  242. package/dist/src/utils/create-schema.js.map +0 -1
  243. package/dist/src/utils/db.d.ts +0 -82
  244. package/dist/src/utils/db.d.ts.map +0 -1
  245. package/dist/src/utils/db.js +0 -101
  246. package/dist/src/utils/db.js.map +0 -1
  247. package/dist/src/utils/drive-url.d.ts +0 -2
  248. package/dist/src/utils/drive-url.d.ts.map +0 -1
  249. package/dist/src/utils/drive-url.js +0 -3
  250. package/dist/src/utils/drive-url.js.map +0 -1
  251. package/dist/src/utils/index.d.ts +0 -4
  252. package/dist/src/utils/index.d.ts.map +0 -1
  253. package/dist/src/utils/index.js +0 -4
  254. package/dist/src/utils/index.js.map +0 -1
  255. package/dist/test/authorization.service.test.d.ts +0 -2
  256. package/dist/test/authorization.service.test.d.ts.map +0 -1
  257. package/dist/test/authorization.service.test.js +0 -252
  258. package/dist/test/authorization.service.test.js.map +0 -1
  259. package/dist/test/benchmarks/load.bench.d.ts +0 -2
  260. package/dist/test/benchmarks/load.bench.d.ts.map +0 -1
  261. package/dist/test/benchmarks/load.bench.js +0 -73
  262. package/dist/test/benchmarks/load.bench.js.map +0 -1
  263. package/dist/test/benchmarks/sync.bench.d.ts +0 -2
  264. package/dist/test/benchmarks/sync.bench.d.ts.map +0 -1
  265. package/dist/test/benchmarks/sync.bench.js +0 -119
  266. package/dist/test/benchmarks/sync.bench.js.map +0 -1
  267. package/dist/test/connect-switchboard-reshuffle-convergence.test.d.ts +0 -2
  268. package/dist/test/connect-switchboard-reshuffle-convergence.test.d.ts.map +0 -1
  269. package/dist/test/connect-switchboard-reshuffle-convergence.test.js +0 -203
  270. package/dist/test/connect-switchboard-reshuffle-convergence.test.js.map +0 -1
  271. package/dist/test/connect-switchboard-sync.test.d.ts +0 -2
  272. package/dist/test/connect-switchboard-sync.test.d.ts.map +0 -1
  273. package/dist/test/connect-switchboard-sync.test.js +0 -632
  274. package/dist/test/connect-switchboard-sync.test.js.map +0 -1
  275. package/dist/test/document-drive-subgraph.test.d.ts +0 -2
  276. package/dist/test/document-drive-subgraph.test.d.ts.map +0 -1
  277. package/dist/test/document-drive-subgraph.test.js +0 -249
  278. package/dist/test/document-drive-subgraph.test.js.map +0 -1
  279. package/dist/test/document-model-subgraph-permissions.test.d.ts +0 -2
  280. package/dist/test/document-model-subgraph-permissions.test.d.ts.map +0 -1
  281. package/dist/test/document-model-subgraph-permissions.test.js +0 -587
  282. package/dist/test/document-model-subgraph-permissions.test.js.map +0 -1
  283. package/dist/test/document-permission.service.test.d.ts +0 -2
  284. package/dist/test/document-permission.service.test.d.ts.map +0 -1
  285. package/dist/test/document-permission.service.test.js +0 -480
  286. package/dist/test/document-permission.service.test.js.map +0 -1
  287. package/dist/test/drive-info-endpoint.test.d.ts +0 -2
  288. package/dist/test/drive-info-endpoint.test.d.ts.map +0 -1
  289. package/dist/test/drive-info-endpoint.test.js +0 -123
  290. package/dist/test/drive-info-endpoint.test.js.map +0 -1
  291. package/dist/test/fault-injection-sync.test.d.ts +0 -2
  292. package/dist/test/fault-injection-sync.test.d.ts.map +0 -1
  293. package/dist/test/fault-injection-sync.test.js +0 -196
  294. package/dist/test/fault-injection-sync.test.js.map +0 -1
  295. package/dist/test/identity-integration.test.d.ts +0 -2
  296. package/dist/test/identity-integration.test.d.ts.map +0 -1
  297. package/dist/test/identity-integration.test.js +0 -349
  298. package/dist/test/identity-integration.test.js.map +0 -1
  299. package/dist/test/index.d.ts +0 -2
  300. package/dist/test/index.d.ts.map +0 -1
  301. package/dist/test/index.js +0 -2
  302. package/dist/test/index.js.map +0 -1
  303. package/dist/test/permissions-integration.test.d.ts +0 -2
  304. package/dist/test/permissions-integration.test.d.ts.map +0 -1
  305. package/dist/test/permissions-integration.test.js +0 -407
  306. package/dist/test/permissions-integration.test.js.map +0 -1
  307. package/dist/test/push-backfill.test.d.ts +0 -2
  308. package/dist/test/push-backfill.test.d.ts.map +0 -1
  309. package/dist/test/push-backfill.test.js +0 -298
  310. package/dist/test/push-backfill.test.js.map +0 -1
  311. package/dist/test/reactor-adapters.test.d.ts +0 -2
  312. package/dist/test/reactor-adapters.test.d.ts.map +0 -1
  313. package/dist/test/reactor-adapters.test.js +0 -379
  314. package/dist/test/reactor-adapters.test.js.map +0 -1
  315. package/dist/test/reactor-client.test.d.ts +0 -2
  316. package/dist/test/reactor-client.test.d.ts.map +0 -1
  317. package/dist/test/reactor-client.test.js +0 -371
  318. package/dist/test/reactor-client.test.js.map +0 -1
  319. package/dist/test/reactor-resolvers.test.d.ts +0 -2
  320. package/dist/test/reactor-resolvers.test.d.ts.map +0 -1
  321. package/dist/test/reactor-resolvers.test.js +0 -258
  322. package/dist/test/reactor-resolvers.test.js.map +0 -1
  323. package/dist/test/reactor-subgraph-permissions.test.d.ts +0 -2
  324. package/dist/test/reactor-subgraph-permissions.test.d.ts.map +0 -1
  325. package/dist/test/reactor-subgraph-permissions.test.js +0 -371
  326. package/dist/test/reactor-subgraph-permissions.test.js.map +0 -1
  327. package/dist/test/router.test.d.ts +0 -2
  328. package/dist/test/router.test.d.ts.map +0 -1
  329. package/dist/test/router.test.js +0 -38
  330. package/dist/test/router.test.js.map +0 -1
  331. package/dist/test/subscriptions-sse.test.d.ts +0 -2
  332. package/dist/test/subscriptions-sse.test.d.ts.map +0 -1
  333. package/dist/test/subscriptions-sse.test.js +0 -264
  334. package/dist/test/subscriptions-sse.test.js.map +0 -1
  335. package/dist/test/subscriptions.test.d.ts +0 -2
  336. package/dist/test/subscriptions.test.d.ts.map +0 -1
  337. package/dist/test/subscriptions.test.js +0 -248
  338. package/dist/test/subscriptions.test.js.map +0 -1
  339. package/dist/test/utils/gql-resolver-bridge.d.ts +0 -15
  340. package/dist/test/utils/gql-resolver-bridge.d.ts.map +0 -1
  341. package/dist/test/utils/gql-resolver-bridge.js +0 -89
  342. package/dist/test/utils/gql-resolver-bridge.js.map +0 -1
  343. package/dist/test/utils.d.ts +0 -10
  344. package/dist/test/utils.d.ts.map +0 -1
  345. package/dist/test/utils.js +0 -23
  346. package/dist/test/utils.js.map +0 -1
  347. package/dist/tsconfig.tsbuildinfo +0 -1
  348. package/dist/vitest.config.d.ts +0 -3
  349. package/dist/vitest.config.d.ts.map +0 -1
  350. package/dist/vitest.config.js +0 -38
  351. package/dist/vitest.config.js.map +0 -1
@@ -1,264 +0,0 @@
1
- import { DocumentChangeType } from "@powerhousedao/reactor";
2
- import { documentModelDocumentModelModule } from "document-model";
3
- import { buildSchema, print, subscribe, parse } from "graphql";
4
- import { setTimeout as delay } from "node:timers/promises";
5
- import { describe, expect, it, vi } from "vitest";
6
- import { matchesSearchFilter } from "../src/graphql/reactor/adapters.js";
7
- import { getPubSub, SUBSCRIPTION_TRIGGERS, } from "../src/graphql/reactor/pubsub.js";
8
- import { ReactorSubgraph } from "../src/graphql/reactor/subgraph.js";
9
- import { createGraphQLSSEHandler } from "../src/graphql/sse.js";
10
- import { createSchema } from "../src/utils/create-schema.js";
11
- // Instantiate the actual ReactorSubgraph to get its typeDefs and resolvers.
12
- // The mock reactorClient needs subscribe() (called by ensureGlobalDocumentSubscription)
13
- // and getJobStatus() (called by ensureJobSubscription).
14
- const mockReactorClient = {
15
- subscribe: vi.fn(() => vi.fn()),
16
- getJobStatus: vi.fn(),
17
- };
18
- const reactorSubgraph = new ReactorSubgraph({
19
- reactorClient: mockReactorClient,
20
- syncManager: {},
21
- });
22
- /**
23
- * Build an executable schema for subscribe() tests.
24
- *
25
- * We use graphql's buildSchema + field patching (instead of Apollo's
26
- * buildSubgraphSchema) because vitest's vite transform creates separate
27
- * graphql module instances, causing subscribe() to reject Federation
28
- * schemas with "Cannot use GraphQLSchema from another module or realm".
29
- */
30
- function buildSubscriptionSchema() {
31
- const schema = buildSchema(print(reactorSubgraph.typeDefs));
32
- const subscriptionType = schema.getSubscriptionType();
33
- const fields = subscriptionType.getFields();
34
- const resolvers = reactorSubgraph.resolvers.Subscription;
35
- for (const [name, resolver] of Object.entries(resolvers)) {
36
- if (fields[name]) {
37
- const field = fields[name];
38
- field.subscribe = resolver.subscribe;
39
- field.resolve = resolver.resolve;
40
- }
41
- }
42
- return schema;
43
- }
44
- /** Build a Federation schema for SSE handler tests (doesn't use subscribe()). */
45
- function buildFederationSchema() {
46
- return createSchema([], reactorSubgraph.resolvers, reactorSubgraph.typeDefs);
47
- }
48
- function createTestDocument() {
49
- return documentModelDocumentModelModule.utils.createDocument();
50
- }
51
- describe("Subscription SSE Integration", () => {
52
- describe("SSE Handler Creation", () => {
53
- it("should create an SSE handler from the reactor schema", () => {
54
- const schema = buildFederationSchema();
55
- const handler = createGraphQLSSEHandler({
56
- schema,
57
- contextFactory: () => ({ headers: {}, db: null }),
58
- });
59
- expect(handler).toBeDefined();
60
- expect(typeof handler).toBe("function");
61
- });
62
- });
63
- describe("GraphQL Subscription Execution", () => {
64
- it("should receive documentChanges events via PubSub", async () => {
65
- const schema = buildSubscriptionSchema();
66
- const result = await subscribe({
67
- schema,
68
- document: parse(`
69
- subscription {
70
- documentChanges(search: {}) {
71
- type
72
- documents { id name documentType }
73
- }
74
- }
75
- `),
76
- });
77
- expect(Symbol.asyncIterator in result).toBe(true);
78
- const iterator = result[Symbol.asyncIterator]();
79
- const doc = createTestDocument();
80
- const payload = {
81
- documentChanges: {
82
- type: DocumentChangeType.Created,
83
- documents: [doc],
84
- },
85
- search: {},
86
- };
87
- const nextPromise = iterator.next();
88
- await delay(10);
89
- void getPubSub().publish(SUBSCRIPTION_TRIGGERS.DOCUMENT_CHANGES, payload);
90
- const next = await nextPromise;
91
- expect(next.done).toBe(false);
92
- expect(next.value).toEqual({
93
- data: {
94
- documentChanges: {
95
- type: "CREATED",
96
- documents: [
97
- expect.objectContaining({
98
- id: doc.header.id,
99
- name: doc.header.name,
100
- documentType: doc.header.documentType,
101
- }),
102
- ],
103
- },
104
- },
105
- });
106
- await iterator.return?.();
107
- });
108
- it("should receive jobChanges events via PubSub", async () => {
109
- const schema = buildSubscriptionSchema();
110
- const result = await subscribe({
111
- schema,
112
- document: parse(`
113
- subscription {
114
- jobChanges(jobId: "job-123") {
115
- jobId
116
- status
117
- error
118
- }
119
- }
120
- `),
121
- });
122
- expect(Symbol.asyncIterator in result).toBe(true);
123
- const iterator = result[Symbol.asyncIterator]();
124
- const jobPayload = {
125
- jobChanges: {
126
- jobId: "job-123",
127
- status: "COMPLETED",
128
- createdAt: "2024-01-01T00:00:00.000Z",
129
- completedAt: "2024-01-01T00:01:00.000Z",
130
- error: null,
131
- result: { output: "done" },
132
- },
133
- jobId: "job-123",
134
- };
135
- const nextPromise = iterator.next();
136
- await delay(10);
137
- void getPubSub().publish(SUBSCRIPTION_TRIGGERS.JOB_CHANGES, jobPayload);
138
- const next = await nextPromise;
139
- expect(next.done).toBe(false);
140
- expect(next.value).toEqual({
141
- data: {
142
- jobChanges: {
143
- jobId: "job-123",
144
- status: "COMPLETED",
145
- error: null,
146
- },
147
- },
148
- });
149
- await iterator.return?.();
150
- });
151
- it("should handle multiple sequential events", async () => {
152
- const schema = buildSubscriptionSchema();
153
- const result = await subscribe({
154
- schema,
155
- document: parse(`
156
- subscription {
157
- documentChanges(search: {}) {
158
- type
159
- documents { id }
160
- }
161
- }
162
- `),
163
- });
164
- const iterator = result[Symbol.asyncIterator]();
165
- const doc1 = createTestDocument();
166
- const doc2 = createTestDocument();
167
- const firstPromise = iterator.next();
168
- await delay(10);
169
- void getPubSub().publish(SUBSCRIPTION_TRIGGERS.DOCUMENT_CHANGES, {
170
- documentChanges: {
171
- type: DocumentChangeType.Created,
172
- documents: [doc1],
173
- },
174
- search: {},
175
- });
176
- const first = await firstPromise;
177
- expect(first.value).toEqual({
178
- data: {
179
- documentChanges: {
180
- type: "CREATED",
181
- documents: [expect.objectContaining({ id: doc1.header.id })],
182
- },
183
- },
184
- });
185
- const secondPromise = iterator.next();
186
- await delay(10);
187
- void getPubSub().publish(SUBSCRIPTION_TRIGGERS.DOCUMENT_CHANGES, {
188
- documentChanges: {
189
- type: DocumentChangeType.Updated,
190
- documents: [doc2],
191
- },
192
- search: {},
193
- });
194
- const second = await secondPromise;
195
- expect(second.value).toEqual({
196
- data: {
197
- documentChanges: {
198
- type: "UPDATED",
199
- documents: [expect.objectContaining({ id: doc2.header.id })],
200
- },
201
- },
202
- });
203
- await iterator.return?.();
204
- });
205
- });
206
- describe("Subscription Filtering", () => {
207
- it("should filter documentChanges by document type", () => {
208
- const docModelDoc = createTestDocument();
209
- const otherDoc = createTestDocument();
210
- const otherTypedDoc = {
211
- ...otherDoc,
212
- header: {
213
- ...otherDoc.header,
214
- documentType: "powerhouse/budget-statement",
215
- },
216
- };
217
- const events = [
218
- {
219
- documentChanges: {
220
- type: DocumentChangeType.Created,
221
- documents: [docModelDoc],
222
- },
223
- search: {},
224
- },
225
- {
226
- documentChanges: {
227
- type: DocumentChangeType.Created,
228
- documents: [otherTypedDoc],
229
- },
230
- search: {},
231
- },
232
- ];
233
- const matching = events.filter((p) => matchesSearchFilter(p.documentChanges, {
234
- type: "powerhouse/document-model",
235
- }));
236
- expect(matching).toHaveLength(1);
237
- expect(matching[0].documentChanges.documents[0].header.id).toBe(docModelDoc.header.id);
238
- });
239
- it("should filter documentChanges by parentId", () => {
240
- const childDoc = createTestDocument();
241
- const event = {
242
- documentChanges: {
243
- type: DocumentChangeType.ChildAdded,
244
- documents: [childDoc],
245
- context: { parentId: "parent-1", childId: childDoc.header.id },
246
- },
247
- search: {},
248
- };
249
- expect(matchesSearchFilter(event.documentChanges, { parentId: "parent-1" })).toBe(true);
250
- expect(matchesSearchFilter(event.documentChanges, { parentId: "other" })).toBe(false);
251
- });
252
- });
253
- describe("Schema Validation", () => {
254
- it("should include Subscription type with expected fields", () => {
255
- const schema = buildSubscriptionSchema();
256
- const subscriptionType = schema.getSubscriptionType();
257
- expect(subscriptionType).toBeDefined();
258
- const fields = subscriptionType.getFields();
259
- expect(fields.documentChanges).toBeDefined();
260
- expect(fields.jobChanges).toBeDefined();
261
- });
262
- });
263
- });
264
- //# sourceMappingURL=subscriptions-sse.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subscriptions-sse.test.js","sourceRoot":"","sources":["../../test/subscriptions-sse.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=subscriptions.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subscriptions.test.d.ts","sourceRoot":"","sources":["../../test/subscriptions.test.ts"],"names":[],"mappings":""}
@@ -1,248 +0,0 @@
1
- import { DocumentChangeType } from "@powerhousedao/reactor";
2
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
- import { matchesJobFilter, matchesSearchFilter, } from "../src/graphql/reactor/adapters.js";
4
- import { ensureGlobalDocumentSubscription, ensureJobSubscription, getPubSub, SUBSCRIPTION_TRIGGERS, } from "../src/graphql/reactor/pubsub.js";
5
- describe("Subscription Filtering", () => {
6
- let mockReactorClient;
7
- let mockSubscribeCallback;
8
- beforeEach(() => {
9
- vi.clearAllMocks();
10
- mockReactorClient = {
11
- subscribe: vi.fn((search, callback) => {
12
- mockSubscribeCallback = callback;
13
- return vi.fn();
14
- }),
15
- getJobStatus: vi.fn(),
16
- };
17
- });
18
- describe("matchesSearchFilter", () => {
19
- const createMockDocument = (type, id) => ({
20
- header: {
21
- id,
22
- documentType: type,
23
- name: "Test Doc",
24
- slug: "test",
25
- createdAtUtcIso: "2024-01-01T00:00:00Z",
26
- lastModifiedAtUtcIso: "2024-01-01T00:00:00Z",
27
- branch: "main",
28
- sig: { publicKey: {}, nonce: "test" },
29
- revision: { global: 1 },
30
- },
31
- state: {},
32
- history: {},
33
- initialState: {},
34
- operations: {},
35
- clipboard: [],
36
- });
37
- it("should match events with correct document type", () => {
38
- const event = {
39
- type: DocumentChangeType.Created,
40
- documents: [createMockDocument("powerhouse/document-model", "doc-1")],
41
- };
42
- const result = matchesSearchFilter(event, {
43
- type: "powerhouse/document-model",
44
- });
45
- expect(result).toBe(true);
46
- });
47
- it("should not match events with different document type", () => {
48
- const event = {
49
- type: DocumentChangeType.Created,
50
- documents: [createMockDocument("powerhouse/budget-statement", "doc-1")],
51
- };
52
- const result = matchesSearchFilter(event, {
53
- type: "powerhouse/document-model",
54
- });
55
- expect(result).toBe(false);
56
- });
57
- it("should match events with correct parentId", () => {
58
- const event = {
59
- type: DocumentChangeType.ChildAdded,
60
- documents: [createMockDocument("powerhouse/document-model", "child-1")],
61
- context: {
62
- parentId: "parent-1",
63
- childId: "child-1",
64
- },
65
- };
66
- const result = matchesSearchFilter(event, {
67
- parentId: "parent-1",
68
- });
69
- expect(result).toBe(true);
70
- });
71
- it("should not match events with different parentId", () => {
72
- const event = {
73
- type: DocumentChangeType.ChildAdded,
74
- documents: [createMockDocument("powerhouse/document-model", "child-1")],
75
- context: {
76
- parentId: "parent-2",
77
- childId: "child-1",
78
- },
79
- };
80
- const result = matchesSearchFilter(event, {
81
- parentId: "parent-1",
82
- });
83
- expect(result).toBe(false);
84
- });
85
- it("should match events with both type and parentId filters", () => {
86
- const event = {
87
- type: DocumentChangeType.ChildAdded,
88
- documents: [createMockDocument("powerhouse/document-model", "child-1")],
89
- context: {
90
- parentId: "parent-1",
91
- childId: "child-1",
92
- },
93
- };
94
- const result = matchesSearchFilter(event, {
95
- type: "powerhouse/document-model",
96
- parentId: "parent-1",
97
- });
98
- expect(result).toBe(true);
99
- });
100
- it("should not match if type matches but parentId does not", () => {
101
- const event = {
102
- type: DocumentChangeType.ChildAdded,
103
- documents: [createMockDocument("powerhouse/document-model", "child-1")],
104
- context: {
105
- parentId: "parent-2",
106
- childId: "child-1",
107
- },
108
- };
109
- const result = matchesSearchFilter(event, {
110
- type: "powerhouse/document-model",
111
- parentId: "parent-1",
112
- });
113
- expect(result).toBe(false);
114
- });
115
- it("should match any event when no filters provided", () => {
116
- const event = {
117
- type: DocumentChangeType.Created,
118
- documents: [createMockDocument("any/type", "doc-1")],
119
- };
120
- const result = matchesSearchFilter(event, {});
121
- expect(result).toBe(true);
122
- });
123
- it("should match if any document in the array matches the type", () => {
124
- const event = {
125
- type: DocumentChangeType.Created,
126
- documents: [
127
- createMockDocument("powerhouse/budget-statement", "doc-1"),
128
- createMockDocument("powerhouse/document-model", "doc-2"),
129
- ],
130
- };
131
- const result = matchesSearchFilter(event, {
132
- type: "powerhouse/document-model",
133
- });
134
- expect(result).toBe(true);
135
- });
136
- });
137
- describe("matchesJobFilter", () => {
138
- it("should match when job IDs are the same", () => {
139
- const result = matchesJobFilter({ jobId: "job-123" }, { jobId: "job-123" });
140
- expect(result).toBe(true);
141
- });
142
- it("should not match when job IDs are different", () => {
143
- const result = matchesJobFilter({ jobId: "job-123" }, { jobId: "job-456" });
144
- expect(result).toBe(false);
145
- });
146
- });
147
- describe("Global Subscription Pattern", () => {
148
- it("should create only one reactorClient subscription for multiple subscribers", () => {
149
- const cleanup1 = ensureGlobalDocumentSubscription(mockReactorClient);
150
- const cleanup2 = ensureGlobalDocumentSubscription(mockReactorClient);
151
- const cleanup3 = ensureGlobalDocumentSubscription(mockReactorClient);
152
- expect(mockReactorClient.subscribe).toHaveBeenCalledTimes(1);
153
- cleanup1();
154
- expect(mockReactorClient.subscribe).toHaveBeenCalledTimes(1);
155
- cleanup2();
156
- expect(mockReactorClient.subscribe).toHaveBeenCalledTimes(1);
157
- cleanup3();
158
- });
159
- it("should cleanup reactorClient subscription when last subscriber disconnects", () => {
160
- const mockUnsubscribe = vi.fn();
161
- vi.mocked(mockReactorClient.subscribe).mockReturnValue(mockUnsubscribe);
162
- const cleanup1 = ensureGlobalDocumentSubscription(mockReactorClient);
163
- const cleanup2 = ensureGlobalDocumentSubscription(mockReactorClient);
164
- cleanup1();
165
- expect(mockUnsubscribe).not.toHaveBeenCalled();
166
- cleanup2();
167
- expect(mockUnsubscribe).toHaveBeenCalledTimes(1);
168
- });
169
- it("should create new subscription after all subscribers disconnect", () => {
170
- const mockUnsubscribe = vi.fn();
171
- vi.mocked(mockReactorClient.subscribe).mockReturnValue(mockUnsubscribe);
172
- const cleanup1 = ensureGlobalDocumentSubscription(mockReactorClient);
173
- cleanup1();
174
- expect(mockReactorClient.subscribe).toHaveBeenCalledTimes(1);
175
- expect(mockUnsubscribe).toHaveBeenCalledTimes(1);
176
- const cleanup2 = ensureGlobalDocumentSubscription(mockReactorClient);
177
- expect(mockReactorClient.subscribe).toHaveBeenCalledTimes(2);
178
- cleanup2();
179
- });
180
- });
181
- describe("Job Subscription Reference Counting", () => {
182
- beforeEach(() => {
183
- vi.useFakeTimers();
184
- });
185
- afterEach(() => {
186
- vi.useRealTimers();
187
- });
188
- it("should create only one job subscription per job ID", () => {
189
- vi.mocked(mockReactorClient.getJobStatus).mockResolvedValue({
190
- id: "job-1",
191
- status: "PENDING",
192
- createdAtUtcIso: "2024-01-01T00:00:00Z",
193
- consistencyToken: {
194
- version: 1,
195
- createdAtUtcIso: "2024-01-01T00:00:00Z",
196
- coordinates: [],
197
- },
198
- meta: { batchId: "batch-1", batchJobIds: ["job-1"] },
199
- });
200
- const cleanup1 = ensureJobSubscription(mockReactorClient, "job-1");
201
- const cleanup2 = ensureJobSubscription(mockReactorClient, "job-1");
202
- expect(mockReactorClient.getJobStatus).toHaveBeenCalledTimes(1);
203
- cleanup1();
204
- cleanup2();
205
- });
206
- it("should create separate subscriptions for different job IDs", () => {
207
- vi.mocked(mockReactorClient.getJobStatus).mockResolvedValue({
208
- id: "job-1",
209
- status: "PENDING",
210
- createdAtUtcIso: "2024-01-01T00:00:00Z",
211
- consistencyToken: {
212
- version: 1,
213
- createdAtUtcIso: "2024-01-01T00:00:00Z",
214
- coordinates: [],
215
- },
216
- meta: { batchId: "batch-1", batchJobIds: ["job-1"] },
217
- });
218
- const cleanup1 = ensureJobSubscription(mockReactorClient, "job-1");
219
- const cleanup2 = ensureJobSubscription(mockReactorClient, "job-2");
220
- expect(mockReactorClient.getJobStatus).toHaveBeenCalledWith("job-1");
221
- expect(mockReactorClient.getJobStatus).toHaveBeenCalledWith("job-2");
222
- cleanup1();
223
- cleanup2();
224
- });
225
- });
226
- describe("PubSub Integration", () => {
227
- it("should publish events to correct channel", async () => {
228
- const publishSpy = vi.spyOn(getPubSub(), "publish");
229
- ensureGlobalDocumentSubscription(mockReactorClient);
230
- const mockEvent = {
231
- type: DocumentChangeType.Created,
232
- documents: [
233
- {
234
- header: {
235
- id: "doc-1",
236
- documentType: "powerhouse/document-model",
237
- },
238
- },
239
- ],
240
- };
241
- mockSubscribeCallback(mockEvent);
242
- expect(publishSpy).toHaveBeenCalledWith(SUBSCRIPTION_TRIGGERS.DOCUMENT_CHANGES, expect.objectContaining({
243
- documentChanges: mockEvent,
244
- }));
245
- });
246
- });
247
- });
248
- //# sourceMappingURL=subscriptions.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subscriptions.test.js","sourceRoot":"","sources":["../../test/subscriptions.test.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import type { ISyncManager } from "@powerhousedao/reactor";
2
- type SyncManagerRegistry = Map<string, ISyncManager>;
3
- type ResolverBridgeOptions = {
4
- log?: boolean;
5
- };
6
- /**
7
- * Creates a mock fetch function that routes GraphQL sync operations
8
- * directly to the resolver functions, bypassing the network.
9
- *
10
- * This enables integration testing of GqlChannel without running
11
- * an actual GraphQL server.
12
- */
13
- export declare function createResolverBridge(syncManagers: SyncManagerRegistry, options?: ResolverBridgeOptions): typeof fetch;
14
- export {};
15
- //# sourceMappingURL=gql-resolver-bridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gql-resolver-bridge.d.ts","sourceRoot":"","sources":["../../../test/utils/gql-resolver-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAO3D,KAAK,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAOrD,KAAK,qBAAqB,GAAG;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAyBF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,mBAAmB,EACjC,OAAO,GAAE,qBAA0B,GAClC,OAAO,KAAK,CAkId"}
@@ -1,89 +0,0 @@
1
- import { touchChannel, pollSyncEnvelopes, pushSyncEnvelopes, } from "../../src/graphql/reactor/resolvers.js";
2
- function createMockResponse(data) {
3
- const body = JSON.stringify({ data });
4
- return new Response(body, {
5
- status: 200,
6
- headers: { "Content-Type": "application/json" },
7
- });
8
- }
9
- function extractSyncManagerFromUrl(url, registry) {
10
- const urlObj = new URL(url);
11
- const reactorName = urlObj.hostname.toLowerCase();
12
- const syncManager = registry.get(reactorName);
13
- if (!syncManager) {
14
- throw new Error(`SyncManager not found for reactor: ${reactorName}`);
15
- }
16
- return syncManager;
17
- }
18
- /**
19
- * Creates a mock fetch function that routes GraphQL sync operations
20
- * directly to the resolver functions, bypassing the network.
21
- *
22
- * This enables integration testing of GqlChannel without running
23
- * an actual GraphQL server.
24
- */
25
- export function createResolverBridge(syncManagers, options = {}) {
26
- const logEnabled = options.log ?? true;
27
- return async (input, init) => {
28
- let url;
29
- if (typeof input === "string") {
30
- url = input;
31
- }
32
- else if (input instanceof URL) {
33
- url = input.href;
34
- }
35
- else {
36
- url = input.url;
37
- }
38
- if (!init?.body) {
39
- throw new Error("GraphQL request must have a body");
40
- }
41
- const body = JSON.parse(init.body);
42
- const syncManager = extractSyncManagerFromUrl(url, syncManagers);
43
- if (body.query.includes("pollSyncEnvelopes")) {
44
- const variables = body.variables;
45
- const result = pollSyncEnvelopes(syncManager, variables);
46
- if (logEnabled && result.envelopes.length > 0) {
47
- console.log(`[BRIDGE] pollSyncEnvelopes: ${result.envelopes.length} envelopes for channel ${variables.channelId}`);
48
- }
49
- // Normalize envelopes for GqlRequestChannel compatibility:
50
- // 1. Lowercase type ("OPERATIONS" -> "operations")
51
- // 2. Filter empty dependency strings (outbox can have "" as initial prevJobId)
52
- const normalizedEnvelopes = result.envelopes.map((env) => ({
53
- ...env,
54
- type: env.type.toLowerCase(),
55
- dependsOn: Array.isArray(env.dependsOn)
56
- ? env.dependsOn.filter(Boolean)
57
- : env.dependsOn,
58
- }));
59
- return createMockResponse({
60
- pollSyncEnvelopes: {
61
- envelopes: normalizedEnvelopes,
62
- ackOrdinal: result.ackOrdinal,
63
- },
64
- });
65
- }
66
- if (body.query.includes("pushSyncEnvelopes")) {
67
- const variables = body.variables;
68
- const envelopeOps = variables.envelopes.flatMap((e) => (e.operations ?? []).map((op) => op.context.documentId));
69
- if (logEnabled) {
70
- console.log(`[BRIDGE] pushSyncEnvelopes: ${variables.envelopes.length} envelopes, docs: ${[...new Set(envelopeOps)].join(",")}`);
71
- }
72
- const result = await pushSyncEnvelopes(syncManager, variables);
73
- return createMockResponse({ pushSyncEnvelopes: result });
74
- }
75
- if (body.query.includes("touchChannel")) {
76
- const variables = body.variables;
77
- if (logEnabled) {
78
- console.log(`[BRIDGE] touchChannel: id=${variables.input.id} collection=${variables.input.collectionId}`);
79
- }
80
- const result = await touchChannel(syncManager, variables);
81
- if (logEnabled) {
82
- console.log(`[BRIDGE] touchChannel result: ${result}`);
83
- }
84
- return createMockResponse({ touchChannel: result });
85
- }
86
- throw new Error(`Unknown GraphQL operation in query: ${body.query}`);
87
- };
88
- }
89
- //# sourceMappingURL=gql-resolver-bridge.js.map