@powerhousedao/reactor-api 6.0.0-dev.11 → 6.0.0-dev.111

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 (352) hide show
  1. package/README.md +6 -0
  2. package/dist/codegen.js +1 -1
  3. package/dist/codegen.js.map +1 -1
  4. package/dist/index.d.ts +4 -2
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +4 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/src/config.d.ts +1 -2
  9. package/dist/src/config.d.ts.map +1 -1
  10. package/dist/src/config.js +1 -5
  11. package/dist/src/config.js.map +1 -1
  12. package/dist/src/dev.d.ts +2 -0
  13. package/dist/src/dev.d.ts.map +1 -0
  14. package/dist/src/dev.js +51 -0
  15. package/dist/src/dev.js.map +1 -0
  16. package/dist/src/graphql/auth/resolvers.d.ts +17 -0
  17. package/dist/src/graphql/auth/resolvers.d.ts.map +1 -1
  18. package/dist/src/graphql/auth/resolvers.js +54 -0
  19. package/dist/src/graphql/auth/resolvers.js.map +1 -1
  20. package/dist/src/graphql/auth/schema.graphql +27 -5
  21. package/dist/src/graphql/auth/subgraph.d.ts +25 -0
  22. package/dist/src/graphql/auth/subgraph.d.ts.map +1 -1
  23. package/dist/src/graphql/auth/subgraph.js +46 -2
  24. package/dist/src/graphql/auth/subgraph.js.map +1 -1
  25. package/dist/src/graphql/base-subgraph.d.ts +11 -4
  26. package/dist/src/graphql/base-subgraph.d.ts.map +1 -1
  27. package/dist/src/graphql/base-subgraph.js +94 -2
  28. package/dist/src/graphql/base-subgraph.js.map +1 -1
  29. package/dist/src/graphql/document-model-subgraph.d.ts +104 -45
  30. package/dist/src/graphql/document-model-subgraph.d.ts.map +1 -1
  31. package/dist/src/graphql/document-model-subgraph.js +323 -91
  32. package/dist/src/graphql/document-model-subgraph.js.map +1 -1
  33. package/dist/src/graphql/gateway/adapter-gateway-apollo.d.ts +23 -0
  34. package/dist/src/graphql/gateway/adapter-gateway-apollo.d.ts.map +1 -0
  35. package/dist/src/graphql/gateway/adapter-gateway-apollo.js +156 -0
  36. package/dist/src/graphql/gateway/adapter-gateway-apollo.js.map +1 -0
  37. package/dist/src/graphql/gateway/adapter-http-express.d.ts +23 -0
  38. package/dist/src/graphql/gateway/adapter-http-express.d.ts.map +1 -0
  39. package/dist/src/graphql/gateway/adapter-http-express.js +155 -0
  40. package/dist/src/graphql/gateway/adapter-http-express.js.map +1 -0
  41. package/dist/src/graphql/gateway/auth-middleware.d.ts +7 -0
  42. package/dist/src/graphql/gateway/auth-middleware.d.ts.map +1 -0
  43. package/dist/src/graphql/gateway/auth-middleware.js +15 -0
  44. package/dist/src/graphql/gateway/auth-middleware.js.map +1 -0
  45. package/dist/src/graphql/gateway/factory.d.ts +11 -0
  46. package/dist/src/graphql/gateway/factory.d.ts.map +1 -0
  47. package/dist/src/graphql/gateway/factory.js +15 -0
  48. package/dist/src/graphql/gateway/factory.js.map +1 -0
  49. package/dist/src/graphql/gateway/types.d.ts +84 -0
  50. package/dist/src/graphql/gateway/types.d.ts.map +1 -0
  51. package/dist/src/{sync → graphql/gateway}/types.js.map +1 -1
  52. package/dist/src/graphql/graphql-manager.d.ts +31 -12
  53. package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
  54. package/dist/src/graphql/graphql-manager.js +284 -228
  55. package/dist/src/graphql/graphql-manager.js.map +1 -1
  56. package/dist/src/graphql/index.d.ts +5 -1
  57. package/dist/src/graphql/index.d.ts.map +1 -1
  58. package/dist/src/graphql/index.js +5 -1
  59. package/dist/src/graphql/index.js.map +1 -1
  60. package/dist/src/graphql/packages/index.d.ts +2 -0
  61. package/dist/src/graphql/packages/index.d.ts.map +1 -0
  62. package/dist/src/graphql/packages/index.js +2 -0
  63. package/dist/src/graphql/packages/index.js.map +1 -0
  64. package/dist/src/graphql/packages/resolvers.d.ts +31 -0
  65. package/dist/src/graphql/packages/resolvers.d.ts.map +1 -0
  66. package/dist/src/graphql/packages/resolvers.js +37 -0
  67. package/dist/src/graphql/packages/resolvers.js.map +1 -0
  68. package/dist/src/graphql/packages/schema.graphql +50 -0
  69. package/dist/src/graphql/packages/subgraph.d.ts +55 -0
  70. package/dist/src/graphql/packages/subgraph.d.ts.map +1 -0
  71. package/dist/src/graphql/packages/subgraph.js +73 -0
  72. package/dist/src/graphql/packages/subgraph.js.map +1 -0
  73. package/dist/src/graphql/playground.d.ts.map +1 -1
  74. package/dist/src/graphql/playground.js +19 -12
  75. package/dist/src/graphql/playground.js.map +1 -1
  76. package/dist/src/graphql/reactor/adapters.d.ts +10 -2
  77. package/dist/src/graphql/reactor/adapters.d.ts.map +1 -1
  78. package/dist/src/graphql/reactor/adapters.js +36 -1
  79. package/dist/src/graphql/reactor/adapters.js.map +1 -1
  80. package/dist/src/graphql/reactor/factory.d.ts +22 -1
  81. package/dist/src/graphql/reactor/factory.d.ts.map +1 -1
  82. package/dist/src/graphql/reactor/factory.js +1 -1
  83. package/dist/src/graphql/reactor/factory.js.map +1 -1
  84. package/dist/src/graphql/reactor/gen/graphql.d.ts +355 -76
  85. package/dist/src/graphql/reactor/gen/graphql.d.ts.map +1 -1
  86. package/dist/src/graphql/reactor/gen/graphql.js +245 -10
  87. package/dist/src/graphql/reactor/gen/graphql.js.map +1 -1
  88. package/dist/src/graphql/reactor/index.d.ts +1 -1
  89. package/dist/src/graphql/reactor/index.d.ts.map +1 -1
  90. package/dist/src/graphql/reactor/index.js +1 -1
  91. package/dist/src/graphql/reactor/index.js.map +1 -1
  92. package/dist/src/graphql/reactor/operations.graphql +191 -1
  93. package/dist/src/graphql/reactor/requester.with-zod.d.ts.map +1 -1
  94. package/dist/src/graphql/reactor/requester.with-zod.js +114 -38
  95. package/dist/src/graphql/reactor/requester.with-zod.js.map +1 -1
  96. package/dist/src/graphql/reactor/resolvers.d.ts +90 -26
  97. package/dist/src/graphql/reactor/resolvers.d.ts.map +1 -1
  98. package/dist/src/graphql/reactor/resolvers.js +275 -77
  99. package/dist/src/graphql/reactor/resolvers.js.map +1 -1
  100. package/dist/src/graphql/reactor/schema.graphql +76 -30
  101. package/dist/src/graphql/reactor/subgraph.d.ts +2 -31
  102. package/dist/src/graphql/reactor/subgraph.d.ts.map +1 -1
  103. package/dist/src/graphql/reactor/subgraph.js +133 -210
  104. package/dist/src/graphql/reactor/subgraph.js.map +1 -1
  105. package/dist/src/graphql/reactor/validation.d.ts +266 -20
  106. package/dist/src/graphql/reactor/validation.d.ts.map +1 -1
  107. package/dist/src/graphql/reactor/validation.js +98 -4
  108. package/dist/src/graphql/reactor/validation.js.map +1 -1
  109. package/dist/src/graphql/sse.d.ts +42 -0
  110. package/dist/src/graphql/sse.d.ts.map +1 -0
  111. package/dist/src/graphql/sse.js +33 -0
  112. package/dist/src/graphql/sse.js.map +1 -0
  113. package/dist/src/graphql/system/index.d.ts +0 -1
  114. package/dist/src/graphql/system/index.d.ts.map +1 -1
  115. package/dist/src/graphql/system/index.js +0 -1
  116. package/dist/src/graphql/system/index.js.map +1 -1
  117. package/dist/src/graphql/types.d.ts +7 -8
  118. package/dist/src/graphql/types.d.ts.map +1 -1
  119. package/dist/src/graphql/utils.d.ts +3 -20
  120. package/dist/src/graphql/utils.d.ts.map +1 -1
  121. package/dist/src/graphql/utils.js +7 -35
  122. package/dist/src/graphql/utils.js.map +1 -1
  123. package/dist/src/migrations/002_add_document_protection.d.ts +4 -0
  124. package/dist/src/migrations/002_add_document_protection.d.ts.map +1 -0
  125. package/dist/src/migrations/002_add_document_protection.js +18 -0
  126. package/dist/src/migrations/002_add_document_protection.js.map +1 -0
  127. package/dist/src/migrations/index.d.ts.map +1 -1
  128. package/dist/src/migrations/index.js +2 -0
  129. package/dist/src/migrations/index.js.map +1 -1
  130. package/dist/src/packages/http-loader.d.ts +68 -0
  131. package/dist/src/packages/http-loader.d.ts.map +1 -0
  132. package/dist/src/packages/http-loader.js +176 -0
  133. package/dist/src/packages/http-loader.js.map +1 -0
  134. package/dist/src/packages/https-hooks.d.mts +37 -0
  135. package/dist/src/packages/https-hooks.d.mts.map +1 -0
  136. package/dist/src/packages/https-hooks.mjs +88 -0
  137. package/dist/src/packages/https-hooks.mjs.map +1 -0
  138. package/dist/src/packages/import-loader.d.ts +3 -4
  139. package/dist/src/packages/import-loader.d.ts.map +1 -1
  140. package/dist/src/packages/import-loader.js +6 -12
  141. package/dist/src/packages/import-loader.js.map +1 -1
  142. package/dist/src/packages/package-manager.d.ts +3 -4
  143. package/dist/src/packages/package-manager.d.ts.map +1 -1
  144. package/dist/src/packages/package-manager.js +2 -2
  145. package/dist/src/packages/package-manager.js.map +1 -1
  146. package/dist/src/packages/types.d.ts +9 -6
  147. package/dist/src/packages/types.d.ts.map +1 -1
  148. package/dist/src/packages/util.d.ts +4 -4
  149. package/dist/src/packages/util.d.ts.map +1 -1
  150. package/dist/src/packages/util.js +2 -2
  151. package/dist/src/packages/util.js.map +1 -1
  152. package/dist/src/packages/vite-loader.d.ts +8 -7
  153. package/dist/src/packages/vite-loader.d.ts.map +1 -1
  154. package/dist/src/packages/vite-loader.js +20 -8
  155. package/dist/src/packages/vite-loader.js.map +1 -1
  156. package/dist/src/server.d.ts +15 -28
  157. package/dist/src/server.d.ts.map +1 -1
  158. package/dist/src/server.js +137 -167
  159. package/dist/src/server.js.map +1 -1
  160. package/dist/src/services/auth.service.d.ts +11 -15
  161. package/dist/src/services/auth.service.d.ts.map +1 -1
  162. package/dist/src/services/auth.service.js +61 -40
  163. package/dist/src/services/auth.service.js.map +1 -1
  164. package/dist/src/services/authorization.service.d.ts +70 -0
  165. package/dist/src/services/authorization.service.d.ts.map +1 -0
  166. package/dist/src/services/authorization.service.js +155 -0
  167. package/dist/src/services/authorization.service.js.map +1 -0
  168. package/dist/src/services/document-permission.service.d.ts +47 -7
  169. package/dist/src/services/document-permission.service.d.ts.map +1 -1
  170. package/dist/src/services/document-permission.service.js +162 -7
  171. package/dist/src/services/document-permission.service.js.map +1 -1
  172. package/dist/src/services/package-management.service.d.ts +32 -0
  173. package/dist/src/services/package-management.service.d.ts.map +1 -0
  174. package/dist/src/services/package-management.service.js +95 -0
  175. package/dist/src/services/package-management.service.js.map +1 -0
  176. package/dist/src/services/package-storage.d.ts +23 -0
  177. package/dist/src/services/package-storage.d.ts.map +1 -0
  178. package/dist/src/services/package-storage.js +19 -0
  179. package/dist/src/services/package-storage.js.map +1 -0
  180. package/dist/src/tracing.d.ts.map +1 -1
  181. package/dist/src/tracing.js +19 -1
  182. package/dist/src/tracing.js.map +1 -1
  183. package/dist/src/types.d.ts +14 -6
  184. package/dist/src/types.d.ts.map +1 -1
  185. package/dist/src/utils/create-schema.d.ts +31 -6
  186. package/dist/src/utils/create-schema.d.ts.map +1 -1
  187. package/dist/src/utils/create-schema.js +451 -43
  188. package/dist/src/utils/create-schema.js.map +1 -1
  189. package/dist/src/utils/db.d.ts +8 -0
  190. package/dist/src/utils/db.d.ts.map +1 -1
  191. package/dist/src/utils/db.js.map +1 -1
  192. package/dist/src/utils/drive-url.d.ts +2 -0
  193. package/dist/src/utils/drive-url.d.ts.map +1 -0
  194. package/dist/src/utils/drive-url.js +3 -0
  195. package/dist/src/utils/drive-url.js.map +1 -0
  196. package/dist/src/utils/index.d.ts +1 -0
  197. package/dist/src/utils/index.d.ts.map +1 -1
  198. package/dist/src/utils/index.js +1 -0
  199. package/dist/src/utils/index.js.map +1 -1
  200. package/dist/test/auth.service.test.d.ts +10 -0
  201. package/dist/test/auth.service.test.d.ts.map +1 -0
  202. package/dist/test/auth.service.test.js +141 -0
  203. package/dist/test/auth.service.test.js.map +1 -0
  204. package/dist/test/authorization.service.test.d.ts +2 -0
  205. package/dist/test/authorization.service.test.d.ts.map +1 -0
  206. package/dist/test/authorization.service.test.js +252 -0
  207. package/dist/test/authorization.service.test.js.map +1 -0
  208. package/dist/test/connect-switchboard-reshuffle-convergence.test.d.ts +2 -0
  209. package/dist/test/connect-switchboard-reshuffle-convergence.test.d.ts.map +1 -0
  210. package/dist/test/connect-switchboard-reshuffle-convergence.test.js +204 -0
  211. package/dist/test/connect-switchboard-reshuffle-convergence.test.js.map +1 -0
  212. package/dist/test/connect-switchboard-sync.test.d.ts +2 -0
  213. package/dist/test/connect-switchboard-sync.test.d.ts.map +1 -0
  214. package/dist/test/connect-switchboard-sync.test.js +582 -0
  215. package/dist/test/connect-switchboard-sync.test.js.map +1 -0
  216. package/dist/test/document-drive-subgraph.test.d.ts +2 -0
  217. package/dist/test/document-drive-subgraph.test.d.ts.map +1 -0
  218. package/dist/test/document-drive-subgraph.test.js +244 -0
  219. package/dist/test/document-drive-subgraph.test.js.map +1 -0
  220. package/dist/test/document-model-subgraph-permissions.test.d.ts +2 -0
  221. package/dist/test/document-model-subgraph-permissions.test.d.ts.map +1 -0
  222. package/dist/test/document-model-subgraph-permissions.test.js +587 -0
  223. package/dist/test/document-model-subgraph-permissions.test.js.map +1 -0
  224. package/dist/test/drive-info-endpoint.test.d.ts +2 -0
  225. package/dist/test/drive-info-endpoint.test.d.ts.map +1 -0
  226. package/dist/test/drive-info-endpoint.test.js +123 -0
  227. package/dist/test/drive-info-endpoint.test.js.map +1 -0
  228. package/dist/test/fault-injection-sync.test.d.ts +2 -0
  229. package/dist/test/fault-injection-sync.test.d.ts.map +1 -0
  230. package/dist/test/fault-injection-sync.test.js +197 -0
  231. package/dist/test/fault-injection-sync.test.js.map +1 -0
  232. package/dist/test/gateway/adapter-gateway-apollo.test.d.ts +2 -0
  233. package/dist/test/gateway/adapter-gateway-apollo.test.d.ts.map +1 -0
  234. package/dist/test/gateway/adapter-gateway-apollo.test.js +206 -0
  235. package/dist/test/gateway/adapter-gateway-apollo.test.js.map +1 -0
  236. package/dist/test/gateway/adapter-http-express.test.d.ts +2 -0
  237. package/dist/test/gateway/adapter-http-express.test.d.ts.map +1 -0
  238. package/dist/test/gateway/adapter-http-express.test.js +17 -0
  239. package/dist/test/gateway/adapter-http-express.test.js.map +1 -0
  240. package/dist/test/gateway/auth-middleware.test.d.ts +8 -0
  241. package/dist/test/gateway/auth-middleware.test.d.ts.map +1 -0
  242. package/dist/test/gateway/auth-middleware.test.js +73 -0
  243. package/dist/test/gateway/auth-middleware.test.js.map +1 -0
  244. package/dist/test/gateway/gateway-adapter-contract.d.ts +30 -0
  245. package/dist/test/gateway/gateway-adapter-contract.d.ts.map +1 -0
  246. package/dist/test/gateway/gateway-adapter-contract.js +347 -0
  247. package/dist/test/gateway/gateway-adapter-contract.js.map +1 -0
  248. package/dist/test/gateway/http-adapter-contract.d.ts +30 -0
  249. package/dist/test/gateway/http-adapter-contract.d.ts.map +1 -0
  250. package/dist/test/gateway/http-adapter-contract.js +226 -0
  251. package/dist/test/gateway/http-adapter-contract.js.map +1 -0
  252. package/dist/test/graphql-manager.test.d.ts +12 -0
  253. package/dist/test/graphql-manager.test.d.ts.map +1 -0
  254. package/dist/test/graphql-manager.test.js +488 -0
  255. package/dist/test/graphql-manager.test.js.map +1 -0
  256. package/dist/test/index.d.ts +0 -1
  257. package/dist/test/index.d.ts.map +1 -1
  258. package/dist/test/index.js +0 -1
  259. package/dist/test/index.js.map +1 -1
  260. package/dist/test/permissions-integration.test.js +6 -20
  261. package/dist/test/permissions-integration.test.js.map +1 -1
  262. package/dist/test/push-backfill.test.d.ts +2 -0
  263. package/dist/test/push-backfill.test.d.ts.map +1 -0
  264. package/dist/test/push-backfill.test.js +299 -0
  265. package/dist/test/push-backfill.test.js.map +1 -0
  266. package/dist/test/reactor-adapters.test.js +3 -2
  267. package/dist/test/reactor-adapters.test.js.map +1 -1
  268. package/dist/test/reactor-client.test.js +172 -13
  269. package/dist/test/reactor-client.test.js.map +1 -1
  270. package/dist/test/reactor-resolvers.test.js +11 -13
  271. package/dist/test/reactor-resolvers.test.js.map +1 -1
  272. package/dist/test/reactor-subgraph-permissions.test.js +7 -36
  273. package/dist/test/reactor-subgraph-permissions.test.js.map +1 -1
  274. package/dist/test/subscriptions-sse.test.d.ts +2 -0
  275. package/dist/test/subscriptions-sse.test.d.ts.map +1 -0
  276. package/dist/test/subscriptions-sse.test.js +264 -0
  277. package/dist/test/subscriptions-sse.test.js.map +1 -0
  278. package/dist/test/subscriptions.test.js +2 -0
  279. package/dist/test/subscriptions.test.js.map +1 -1
  280. package/dist/test/utils/gql-resolver-bridge.d.ts +4 -1
  281. package/dist/test/utils/gql-resolver-bridge.d.ts.map +1 -1
  282. package/dist/test/utils/gql-resolver-bridge.js +36 -7
  283. package/dist/test/utils/gql-resolver-bridge.js.map +1 -1
  284. package/dist/test/utils.d.ts +1 -5
  285. package/dist/test/utils.d.ts.map +1 -1
  286. package/dist/test/utils.js +0 -10
  287. package/dist/test/utils.js.map +1 -1
  288. package/dist/tsconfig.tsbuildinfo +1 -1
  289. package/package.json +52 -58
  290. package/dist/src/graphql/drive-subgraph.d.ts +0 -25
  291. package/dist/src/graphql/drive-subgraph.d.ts.map +0 -1
  292. package/dist/src/graphql/drive-subgraph.js +0 -487
  293. package/dist/src/graphql/drive-subgraph.js.map +0 -1
  294. package/dist/src/graphql/system/system-subgraph.d.ts +0 -49
  295. package/dist/src/graphql/system/system-subgraph.d.ts.map +0 -1
  296. package/dist/src/graphql/system/system-subgraph.js +0 -130
  297. package/dist/src/graphql/system/system-subgraph.js.map +0 -1
  298. package/dist/src/sync/types.d.ts +0 -10
  299. package/dist/src/sync/types.d.ts.map +0 -1
  300. package/dist/src/sync/utils.d.ts +0 -7
  301. package/dist/src/sync/utils.d.ts.map +0 -1
  302. package/dist/src/sync/utils.js +0 -78
  303. package/dist/src/sync/utils.js.map +0 -1
  304. package/dist/src/utils/auth.d.ts +0 -3
  305. package/dist/src/utils/auth.d.ts.map +0 -1
  306. package/dist/src/utils/auth.js +0 -19
  307. package/dist/src/utils/auth.js.map +0 -1
  308. package/dist/test/benchmarks/load.bench.d.ts +0 -2
  309. package/dist/test/benchmarks/load.bench.d.ts.map +0 -1
  310. package/dist/test/benchmarks/load.bench.js +0 -73
  311. package/dist/test/benchmarks/load.bench.js.map +0 -1
  312. package/dist/test/benchmarks/sync.bench.d.ts +0 -2
  313. package/dist/test/benchmarks/sync.bench.d.ts.map +0 -1
  314. package/dist/test/benchmarks/sync.bench.js +0 -119
  315. package/dist/test/benchmarks/sync.bench.js.map +0 -1
  316. package/dist/test/drive-handlers.d.ts +0 -4
  317. package/dist/test/drive-handlers.d.ts.map +0 -1
  318. package/dist/test/drive-handlers.js +0 -39
  319. package/dist/test/drive-handlers.js.map +0 -1
  320. package/dist/test/drive-subgraph-permissions.test.d.ts +0 -2
  321. package/dist/test/drive-subgraph-permissions.test.d.ts.map +0 -1
  322. package/dist/test/drive-subgraph-permissions.test.js +0 -195
  323. package/dist/test/drive-subgraph-permissions.test.js.map +0 -1
  324. package/dist/test/drive.test.d.ts +0 -2
  325. package/dist/test/drive.test.d.ts.map +0 -1
  326. package/dist/test/drive.test.js +0 -142
  327. package/dist/test/drive.test.js.map +0 -1
  328. package/dist/test/identity-integration.test.d.ts +0 -2
  329. package/dist/test/identity-integration.test.d.ts.map +0 -1
  330. package/dist/test/identity-integration.test.js +0 -349
  331. package/dist/test/identity-integration.test.js.map +0 -1
  332. package/dist/test/pull-responder-transmitter.test.d.ts +0 -2
  333. package/dist/test/pull-responder-transmitter.test.d.ts.map +0 -1
  334. package/dist/test/pull-responder-transmitter.test.js +0 -220
  335. package/dist/test/pull-responder-transmitter.test.js.map +0 -1
  336. package/dist/test/push-transmitter.test.d.ts +0 -2
  337. package/dist/test/push-transmitter.test.d.ts.map +0 -1
  338. package/dist/test/push-transmitter.test.js +0 -179
  339. package/dist/test/push-transmitter.test.js.map +0 -1
  340. package/dist/test/system.test.d.ts +0 -2
  341. package/dist/test/system.test.d.ts.map +0 -1
  342. package/dist/test/system.test.js +0 -211
  343. package/dist/test/system.test.js.map +0 -1
  344. package/dist/test/three-reactor-gql-sync.test.d.ts +0 -2
  345. package/dist/test/three-reactor-gql-sync.test.d.ts.map +0 -1
  346. package/dist/test/three-reactor-gql-sync.test.js +0 -368
  347. package/dist/test/three-reactor-gql-sync.test.js.map +0 -1
  348. package/dist/test/two-reactor-gql-sync.test.d.ts +0 -2
  349. package/dist/test/two-reactor-gql-sync.test.d.ts.map +0 -1
  350. package/dist/test/two-reactor-gql-sync.test.js +0 -348
  351. package/dist/test/two-reactor-gql-sync.test.js.map +0 -1
  352. /package/dist/src/{sync → graphql/gateway}/types.js +0 -0
@@ -0,0 +1,587 @@
1
+ import { GraphQLError } from "graphql";
2
+ import { beforeEach, describe, expect, it, vi } from "vitest";
3
+ import { DocumentModelSubgraph } from "../src/graphql/document-model-subgraph.js";
4
+ describe("DocumentModelSubgraph Permission Checks", () => {
5
+ let mockDocumentPermissionService;
6
+ let mockReactorClient;
7
+ let subgraph;
8
+ const mockDocumentModel = {
9
+ documentModel: {
10
+ global: {
11
+ id: "powerhouse/test-model",
12
+ name: "Test Model",
13
+ specifications: [
14
+ {
15
+ version: 1,
16
+ changeLog: [],
17
+ modules: [
18
+ {
19
+ name: "Base",
20
+ operations: [
21
+ { name: "SET_NAME" },
22
+ { name: "SET_VALUE" },
23
+ { name: "RESTRICTED_OP" },
24
+ ],
25
+ },
26
+ ],
27
+ state: { global: {}, local: {} },
28
+ },
29
+ ],
30
+ },
31
+ },
32
+ actions: {
33
+ setName: vi.fn((input) => ({ type: "SET_NAME", input })),
34
+ setValue: vi.fn((input) => ({ type: "SET_VALUE", input })),
35
+ restrictedOp: vi.fn((input) => ({
36
+ type: "RESTRICTED_OP",
37
+ input,
38
+ })),
39
+ },
40
+ reducer: vi.fn(),
41
+ };
42
+ const createMockDocument = (id, name) => ({
43
+ header: {
44
+ id,
45
+ slug: id,
46
+ name,
47
+ documentType: "powerhouse/test-model",
48
+ revision: { global: 1 },
49
+ createdAtUtcIso: new Date().toISOString(),
50
+ lastModifiedAtUtcIso: new Date().toISOString(),
51
+ },
52
+ state: {
53
+ global: { name },
54
+ local: {},
55
+ },
56
+ initialState: {
57
+ global: { name },
58
+ local: {},
59
+ },
60
+ operations: {
61
+ global: [],
62
+ local: [],
63
+ },
64
+ attachments: {},
65
+ clipboard: [],
66
+ });
67
+ const mockDocument = createMockDocument("doc-123", "Test Document");
68
+ const createContext = (options) => ({
69
+ user: options.userAddress ? { address: options.userAddress } : undefined,
70
+ isAdmin: vi.fn().mockReturnValue(options.isAdmin ?? false),
71
+ });
72
+ beforeEach(() => {
73
+ vi.clearAllMocks();
74
+ mockDocumentPermissionService = {
75
+ canRead: vi.fn().mockResolvedValue(false),
76
+ canWrite: vi.fn().mockResolvedValue(false),
77
+ canReadDocument: vi.fn().mockResolvedValue(false),
78
+ canWriteDocument: vi.fn().mockResolvedValue(false),
79
+ isOperationRestricted: vi.fn().mockResolvedValue(false),
80
+ canExecuteOperation: vi.fn().mockResolvedValue(false),
81
+ };
82
+ mockReactorClient = {
83
+ getParents: vi.fn().mockResolvedValue({
84
+ results: [],
85
+ options: { limit: 10, cursor: "" },
86
+ }),
87
+ getChildren: vi.fn().mockResolvedValue({
88
+ results: [],
89
+ options: { limit: 10, cursor: "" },
90
+ }),
91
+ get: vi.fn().mockResolvedValue(mockDocument),
92
+ find: vi.fn().mockResolvedValue({
93
+ results: [mockDocument],
94
+ options: { limit: 10, cursor: "" },
95
+ }),
96
+ createEmpty: vi.fn().mockResolvedValue(mockDocument),
97
+ execute: vi.fn().mockResolvedValue({
98
+ ...mockDocument,
99
+ header: { ...mockDocument.header, revision: { global: 2 } },
100
+ }),
101
+ };
102
+ subgraph = new DocumentModelSubgraph(mockDocumentModel, {
103
+ reactorClient: mockReactorClient,
104
+ documentPermissionService: mockDocumentPermissionService,
105
+ relationalDb: {},
106
+ analyticsStore: {},
107
+ graphqlManager: {},
108
+ syncManager: {},
109
+ });
110
+ });
111
+ describe("Query: document", () => {
112
+ const callGetDocument = async (ctx, identifier) => {
113
+ const queryResolver = subgraph.queryResolvers.document;
114
+ return queryResolver(null, { identifier }, ctx);
115
+ };
116
+ describe("Global Admin Access", () => {
117
+ it("should allow access when user is global admin", async () => {
118
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
119
+ const result = await callGetDocument(ctx, "doc-123");
120
+ expect(result).toBeDefined();
121
+ expect(result.document.id).toBe("doc-123");
122
+ expect(mockDocumentPermissionService.canRead).not.toHaveBeenCalled();
123
+ });
124
+ });
125
+ describe("Document Permission Access", () => {
126
+ it("should check document permissions when no global access", async () => {
127
+ vi.mocked(mockDocumentPermissionService.canRead).mockResolvedValue(true);
128
+ const ctx = createContext({ userAddress: "0xpermitted" });
129
+ const result = await callGetDocument(ctx, "doc-123");
130
+ expect(result).toBeDefined();
131
+ expect(mockDocumentPermissionService.canRead).toHaveBeenCalledWith("doc-123", "0xpermitted", expect.any(Function));
132
+ });
133
+ it("should deny access when user has no permissions", async () => {
134
+ vi.mocked(mockDocumentPermissionService.canRead).mockResolvedValue(false);
135
+ const ctx = createContext({ userAddress: "0xunpermitted" });
136
+ await expect(callGetDocument(ctx, "doc-123")).rejects.toThrow(GraphQLError);
137
+ await expect(callGetDocument(ctx, "doc-123")).rejects.toThrow("Forbidden: insufficient permissions to read this document");
138
+ });
139
+ it("should deny access when user is not authenticated", async () => {
140
+ const ctx = createContext({});
141
+ await expect(callGetDocument(ctx, "doc-123")).rejects.toThrow("Forbidden");
142
+ });
143
+ });
144
+ describe("Document validation", () => {
145
+ it("should throw error when identifier is not provided", async () => {
146
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
147
+ await expect(callGetDocument(ctx, "")).rejects.toThrow("Document identifier is required");
148
+ });
149
+ it("should throw error if document type does not match", async () => {
150
+ const wrongTypeDoc = {
151
+ ...mockDocument,
152
+ header: { ...mockDocument.header, documentType: "other/type" },
153
+ };
154
+ mockReactorClient.get = vi.fn().mockResolvedValue(wrongTypeDoc);
155
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
156
+ await expect(callGetDocument(ctx, "doc-123")).rejects.toThrow("is not of type");
157
+ });
158
+ });
159
+ describe("Permission inheritance (hierarchy)", () => {
160
+ it("should pass getParentIdsFn that retrieves parent IDs", async () => {
161
+ const mockParents = [
162
+ createMockDocument("parent-1", "Parent 1"),
163
+ createMockDocument("parent-2", "Parent 2"),
164
+ ];
165
+ vi.mocked(mockReactorClient.getParents).mockResolvedValue({
166
+ results: mockParents,
167
+ options: { limit: 10, cursor: "" },
168
+ });
169
+ let capturedGetParentsFn = null;
170
+ vi.mocked(mockDocumentPermissionService.canRead).mockImplementation((_docId, _user, getParentsFn) => {
171
+ capturedGetParentsFn = getParentsFn;
172
+ return Promise.resolve(true);
173
+ });
174
+ const ctx = createContext({ userAddress: "0xuser" });
175
+ await callGetDocument(ctx, "child-doc");
176
+ expect(capturedGetParentsFn).not.toBeNull();
177
+ const parentIds = await capturedGetParentsFn("child-doc");
178
+ expect(parentIds).toEqual(["parent-1", "parent-2"]);
179
+ });
180
+ it("should return empty array if getParents fails", async () => {
181
+ vi.mocked(mockReactorClient.getParents).mockRejectedValue(new Error("Not found"));
182
+ let capturedGetParentsFn = null;
183
+ vi.mocked(mockDocumentPermissionService.canRead).mockImplementation((_docId, _user, getParentsFn) => {
184
+ capturedGetParentsFn = getParentsFn;
185
+ return Promise.resolve(true);
186
+ });
187
+ const ctx = createContext({ userAddress: "0xuser" });
188
+ await callGetDocument(ctx, "child-doc");
189
+ const parentIds = await capturedGetParentsFn("child-doc");
190
+ expect(parentIds).toEqual([]);
191
+ });
192
+ });
193
+ describe("reactorClient integration", () => {
194
+ it("should use reactorClient.get to fetch document", async () => {
195
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
196
+ await callGetDocument(ctx, "doc-123");
197
+ expect(mockReactorClient.get).toHaveBeenCalledWith("doc-123", undefined);
198
+ });
199
+ });
200
+ });
201
+ describe("Query: findDocuments", () => {
202
+ const callFindDocuments = async (ctx, parentId) => {
203
+ const queryResolver = subgraph.queryResolvers.findDocuments;
204
+ const result = await queryResolver(null, { search: { parentId }, paging: { limit: 10 } }, ctx);
205
+ return result.items;
206
+ };
207
+ describe("Global Role Access", () => {
208
+ it("should return all documents for admin", async () => {
209
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
210
+ const result = await callFindDocuments(ctx, "drive-1");
211
+ expect(result).toHaveLength(1);
212
+ expect(mockDocumentPermissionService.canRead).not.toHaveBeenCalled();
213
+ });
214
+ });
215
+ describe("Document Permission Filtering", () => {
216
+ beforeEach(() => {
217
+ const docs = [
218
+ createMockDocument("doc-1", "Doc 1"),
219
+ createMockDocument("doc-2", "Doc 2"),
220
+ createMockDocument("doc-3", "Doc 3"),
221
+ ];
222
+ mockReactorClient.find = vi.fn().mockResolvedValue({
223
+ results: docs,
224
+ options: { limit: 10, cursor: "" },
225
+ });
226
+ });
227
+ it("should filter documents based on permissions when no global access", async () => {
228
+ vi.mocked(mockDocumentPermissionService.canRead).mockImplementation((docId) => Promise.resolve(docId === "drive-1" || docId === "doc-1" || docId === "doc-3"));
229
+ const ctx = createContext({ userAddress: "0xpartial" });
230
+ const result = await callFindDocuments(ctx, "drive-1");
231
+ expect(result).toHaveLength(2);
232
+ expect(result.map((d) => d.id).sort()).toEqual([
233
+ "doc-1",
234
+ "doc-3",
235
+ ]);
236
+ });
237
+ it("should return empty array when user has no document permissions", async () => {
238
+ vi.mocked(mockDocumentPermissionService.canRead).mockImplementation((docId) => Promise.resolve(docId === "drive-1"));
239
+ const ctx = createContext({ userAddress: "0xnopermissions" });
240
+ const result = await callFindDocuments(ctx, "drive-1");
241
+ expect(result).toHaveLength(0);
242
+ });
243
+ });
244
+ describe("Permission filtering", () => {
245
+ it("should filter out all documents when user has no permissions", async () => {
246
+ vi.mocked(mockDocumentPermissionService.canRead).mockResolvedValue(false);
247
+ const ctx = createContext({ userAddress: "0xunpermitted" });
248
+ const result = await callFindDocuments(ctx, "drive-1");
249
+ expect(result).toHaveLength(0);
250
+ });
251
+ });
252
+ describe("reactorClient integration", () => {
253
+ it("should use reactorClient.find with type filter", async () => {
254
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
255
+ await callFindDocuments(ctx, "drive-1");
256
+ expect(mockReactorClient.find).toHaveBeenCalledWith(expect.objectContaining({
257
+ type: "powerhouse/test-model",
258
+ parentId: "drive-1",
259
+ }), undefined, expect.objectContaining({
260
+ limit: 10,
261
+ }));
262
+ });
263
+ });
264
+ });
265
+ describe("Query: documents (get all)", () => {
266
+ const callDocuments = async (ctx, paging) => {
267
+ const queryResolver = subgraph.queryResolvers.documents;
268
+ const result = await queryResolver(null, { paging }, ctx);
269
+ return result;
270
+ };
271
+ describe("Global Role Access", () => {
272
+ it("should return all documents for admin", async () => {
273
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
274
+ const result = await callDocuments(ctx, { limit: 10 });
275
+ expect(result.items).toHaveLength(1);
276
+ expect(mockDocumentPermissionService.canRead).not.toHaveBeenCalled();
277
+ });
278
+ });
279
+ describe("Document Permission Filtering", () => {
280
+ beforeEach(() => {
281
+ const docs = [
282
+ createMockDocument("doc-1", "Doc 1"),
283
+ createMockDocument("doc-2", "Doc 2"),
284
+ createMockDocument("doc-3", "Doc 3"),
285
+ ];
286
+ mockReactorClient.find = vi.fn().mockResolvedValue({
287
+ results: docs,
288
+ options: { limit: 10, cursor: "" },
289
+ });
290
+ });
291
+ it("should filter documents based on permissions when no global access", async () => {
292
+ vi.mocked(mockDocumentPermissionService.canRead).mockImplementation(async (docId) => docId === "doc-1" || docId === "doc-3");
293
+ const ctx = createContext({ userAddress: "0xpartial" });
294
+ const result = await callDocuments(ctx, { limit: 10 });
295
+ expect(result.items).toHaveLength(2);
296
+ expect(result.items.map((d) => d.id).sort()).toEqual([
297
+ "doc-1",
298
+ "doc-3",
299
+ ]);
300
+ });
301
+ it("should return empty array when user has no document permissions", async () => {
302
+ vi.mocked(mockDocumentPermissionService.canRead).mockResolvedValue(false);
303
+ const ctx = createContext({ userAddress: "0xnopermissions" });
304
+ const result = await callDocuments(ctx, { limit: 10 });
305
+ expect(result.items).toHaveLength(0);
306
+ });
307
+ });
308
+ describe("reactorClient integration", () => {
309
+ it("should use reactorClient.find with type filter and no parentId", async () => {
310
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
311
+ await callDocuments(ctx, { limit: 10 });
312
+ expect(mockReactorClient.find).toHaveBeenCalledWith(expect.objectContaining({
313
+ type: "powerhouse/test-model",
314
+ }), undefined, expect.objectContaining({
315
+ limit: 10,
316
+ }));
317
+ });
318
+ it("should work without paging argument", async () => {
319
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
320
+ const result = await callDocuments(ctx);
321
+ expect(result.items).toHaveLength(1);
322
+ });
323
+ });
324
+ });
325
+ describe("Mutation: createDocument", () => {
326
+ const callCreateDocument = async (ctx, name, parentIdentifier) => {
327
+ const mutation = subgraph.mutationResolvers.createDocument;
328
+ return mutation(null, { name, parentIdentifier }, ctx);
329
+ };
330
+ describe("Global Admin Access", () => {
331
+ it("should allow creation when user is global admin", async () => {
332
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
333
+ const result = await callCreateDocument(ctx, "New Doc");
334
+ expect(result).toMatchObject({ id: "doc-123" });
335
+ expect(mockDocumentPermissionService.canWrite).not.toHaveBeenCalled();
336
+ });
337
+ });
338
+ describe("With parentIdentifier", () => {
339
+ it("should check write permission on parent when parentIdentifier provided", async () => {
340
+ vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(true);
341
+ const ctx = createContext({ userAddress: "0xpermitted" });
342
+ const result = await callCreateDocument(ctx, "New Doc", "drive-1");
343
+ expect(result).toMatchObject({ id: "doc-123" });
344
+ expect(mockDocumentPermissionService.canWrite).toHaveBeenCalledWith("drive-1", "0xpermitted", expect.any(Function));
345
+ });
346
+ it("should deny creation when user cannot write to parent", async () => {
347
+ vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(false);
348
+ const ctx = createContext({ userAddress: "0xunpermitted" });
349
+ await expect(callCreateDocument(ctx, "New Doc", "drive-1")).rejects.toThrow("Forbidden");
350
+ });
351
+ });
352
+ describe("Without parentIdentifier", () => {
353
+ it("should deny when user lacks global admin access", async () => {
354
+ const ctx = createContext({ userAddress: "0xnoglobal" });
355
+ await expect(callCreateDocument(ctx, "New Doc")).rejects.toThrow("Forbidden: insufficient permissions to create documents");
356
+ });
357
+ });
358
+ describe("reactorClient integration", () => {
359
+ it("should use reactorClient.createEmpty with parentIdentifier", async () => {
360
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
361
+ await callCreateDocument(ctx, "New Doc", "drive-1");
362
+ expect(mockReactorClient.createEmpty).toHaveBeenCalledWith("powerhouse/test-model", { parentIdentifier: "drive-1" });
363
+ });
364
+ it("should use reactorClient.execute to set name", async () => {
365
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
366
+ await callCreateDocument(ctx, "New Doc");
367
+ expect(mockReactorClient.execute).toHaveBeenCalledWith("doc-123", "main", [expect.objectContaining({ type: "SET_NAME" })]);
368
+ });
369
+ it("should not call execute if name is empty", async () => {
370
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
371
+ await callCreateDocument(ctx, "");
372
+ expect(mockReactorClient.createEmpty).toHaveBeenCalled();
373
+ expect(mockReactorClient.execute).not.toHaveBeenCalled();
374
+ });
375
+ });
376
+ });
377
+ describe("Mutation: operations (setName, setValue, etc.)", () => {
378
+ const callMutation = async (ctx, operationName, docId, input) => {
379
+ const mutation = subgraph.mutationResolvers[operationName];
380
+ return await mutation(null, { docId, input }, ctx);
381
+ };
382
+ describe("Write Permission Check", () => {
383
+ it("should check write permission before executing operation", async () => {
384
+ vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(true);
385
+ const ctx = createContext({ userAddress: "0xpermitted" });
386
+ await callMutation(ctx, "setName", "doc-123", { name: "New Name" });
387
+ expect(mockDocumentPermissionService.canWrite).toHaveBeenCalledWith("doc-123", "0xpermitted", expect.any(Function));
388
+ });
389
+ it("should deny operation when user cannot write", async () => {
390
+ vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(false);
391
+ const ctx = createContext({ userAddress: "0xunpermitted" });
392
+ await expect(callMutation(ctx, "setName", "doc-123", { name: "New Name" })).rejects.toThrow("Forbidden: insufficient permissions to write");
393
+ });
394
+ it("should allow operation for global admin without permission check", async () => {
395
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
396
+ const result = await callMutation(ctx, "setName", "doc-123", {
397
+ name: "New Name",
398
+ });
399
+ expect(result).toMatchObject({
400
+ id: "doc-123",
401
+ revisionsList: expect.arrayContaining([
402
+ expect.objectContaining({ scope: "global", revision: 2 }),
403
+ ]),
404
+ });
405
+ expect(mockDocumentPermissionService.canWrite).not.toHaveBeenCalled();
406
+ });
407
+ });
408
+ describe("Operation-Level Permission Check", () => {
409
+ it("should check operation restriction after write permission", async () => {
410
+ vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(true);
411
+ vi.mocked(mockDocumentPermissionService.isOperationRestricted).mockResolvedValue(false);
412
+ const ctx = createContext({ userAddress: "0xpermitted" });
413
+ await callMutation(ctx, "setName", "doc-123", { name: "New Name" });
414
+ expect(mockDocumentPermissionService.isOperationRestricted).toHaveBeenCalledWith("doc-123", "SET_NAME");
415
+ });
416
+ it("should allow operation when not restricted", async () => {
417
+ vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(true);
418
+ vi.mocked(mockDocumentPermissionService.isOperationRestricted).mockResolvedValue(false);
419
+ const ctx = createContext({ userAddress: "0xpermitted" });
420
+ const result = await callMutation(ctx, "setName", "doc-123", {
421
+ name: "New Name",
422
+ });
423
+ expect(result).toMatchObject({
424
+ id: "doc-123",
425
+ revisionsList: expect.arrayContaining([
426
+ expect.objectContaining({ scope: "global", revision: 2 }),
427
+ ]),
428
+ });
429
+ expect(mockDocumentPermissionService.canExecuteOperation).not.toHaveBeenCalled();
430
+ });
431
+ it("should check operation permission when operation is restricted", async () => {
432
+ vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(true);
433
+ vi.mocked(mockDocumentPermissionService.isOperationRestricted).mockResolvedValue(true);
434
+ vi.mocked(mockDocumentPermissionService.canExecuteOperation).mockResolvedValue(true);
435
+ const ctx = createContext({ userAddress: "0xauthorized" });
436
+ const result = await callMutation(ctx, "restrictedOp", "doc-123", {
437
+ value: 42,
438
+ });
439
+ expect(result).toMatchObject({
440
+ id: "doc-123",
441
+ revisionsList: expect.arrayContaining([
442
+ expect.objectContaining({ scope: "global", revision: 2 }),
443
+ ]),
444
+ });
445
+ expect(mockDocumentPermissionService.canExecuteOperation).toHaveBeenCalledWith("doc-123", "RESTRICTED_OP", "0xauthorized");
446
+ });
447
+ it("should deny operation when user lacks operation permission", async () => {
448
+ vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(true);
449
+ vi.mocked(mockDocumentPermissionService.isOperationRestricted).mockResolvedValue(true);
450
+ vi.mocked(mockDocumentPermissionService.canExecuteOperation).mockResolvedValue(false);
451
+ const ctx = createContext({ userAddress: "0xunauthorized" });
452
+ await expect(callMutation(ctx, "restrictedOp", "doc-123", { value: 42 })).rejects.toThrow('Forbidden: insufficient permissions to execute operation "RESTRICTED_OP"');
453
+ });
454
+ it("should skip operation restriction check for global admin", async () => {
455
+ vi.mocked(mockDocumentPermissionService.isOperationRestricted).mockResolvedValue(true);
456
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
457
+ await callMutation(ctx, "restrictedOp", "doc-123", { value: 42 });
458
+ expect(mockDocumentPermissionService.isOperationRestricted).not.toHaveBeenCalled();
459
+ });
460
+ });
461
+ describe("Document type validation", () => {
462
+ it("should throw error when document type does not match", async () => {
463
+ vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(true);
464
+ const wrongTypeDoc = {
465
+ ...mockDocument,
466
+ header: { ...mockDocument.header, documentType: "other/type" },
467
+ };
468
+ mockReactorClient.get = vi.fn().mockResolvedValue(wrongTypeDoc);
469
+ const ctx = createContext({ userAddress: "0xpermitted" });
470
+ await expect(callMutation(ctx, "setName", "doc-123", { name: "New Name" })).rejects.toThrow("is not of type");
471
+ });
472
+ });
473
+ describe("reactorClient integration", () => {
474
+ it("should use reactorClient.get to verify document", async () => {
475
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
476
+ await callMutation(ctx, "setName", "doc-123", { name: "New Name" });
477
+ expect(mockReactorClient.get).toHaveBeenCalledWith("doc-123");
478
+ });
479
+ it("should use reactorClient.execute to apply action", async () => {
480
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
481
+ await callMutation(ctx, "setName", "doc-123", { name: "New Name" });
482
+ expect(mockReactorClient.execute).toHaveBeenCalledWith("doc-123", "main", [expect.objectContaining({ type: "SET_NAME" })]);
483
+ });
484
+ it("should return PHDocument from updated document", async () => {
485
+ mockReactorClient.execute = vi.fn().mockResolvedValue({
486
+ ...mockDocument,
487
+ header: { ...mockDocument.header, revision: { global: 42 } },
488
+ });
489
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
490
+ const result = await callMutation(ctx, "setName", "doc-123", {
491
+ name: "New Name",
492
+ });
493
+ expect(result).toMatchObject({
494
+ id: "doc-123",
495
+ revisionsList: expect.arrayContaining([
496
+ expect.objectContaining({ scope: "global", revision: 42 }),
497
+ ]),
498
+ });
499
+ });
500
+ it("should handle execute errors gracefully", async () => {
501
+ mockReactorClient.execute = vi
502
+ .fn()
503
+ .mockRejectedValue(new Error("Execute failed"));
504
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
505
+ await expect(callMutation(ctx, "setName", "doc-123", { name: "New Name" })).rejects.toThrow("Execute failed");
506
+ });
507
+ });
508
+ });
509
+ describe("AUTH_ENABLED=false behavior", () => {
510
+ it("should allow all read access when admin role returns true", async () => {
511
+ const ctx = createContext({ isAdmin: true, userAddress: "0xanyone" });
512
+ const queryResolver = subgraph.queryResolvers.document;
513
+ const result = await queryResolver(null, { identifier: "doc-123" }, ctx);
514
+ expect(result).toBeDefined();
515
+ expect(mockDocumentPermissionService.canRead).not.toHaveBeenCalled();
516
+ });
517
+ it("should allow all write access when admin role returns true", async () => {
518
+ const ctx = createContext({ isAdmin: true, userAddress: "0xanyone" });
519
+ const result = await subgraph.mutationResolvers.setName(null, { docId: "doc-123", input: { name: "New" } }, ctx);
520
+ expect(result).toMatchObject({
521
+ id: "doc-123",
522
+ revisionsList: expect.arrayContaining([
523
+ expect.objectContaining({ scope: "global", revision: 2 }),
524
+ ]),
525
+ });
526
+ expect(mockDocumentPermissionService.canWrite).not.toHaveBeenCalled();
527
+ });
528
+ });
529
+ describe("No Permission Service", () => {
530
+ let subgraphWithoutPermService;
531
+ beforeEach(() => {
532
+ subgraphWithoutPermService = new DocumentModelSubgraph(mockDocumentModel, {
533
+ reactorClient: mockReactorClient,
534
+ documentPermissionService: undefined,
535
+ relationalDb: {},
536
+ analyticsStore: {},
537
+ graphqlManager: {},
538
+ syncManager: {},
539
+ });
540
+ });
541
+ it("should deny read access when no permission service and no global access", async () => {
542
+ const ctx = createContext({ userAddress: "0xuser" });
543
+ const queryResolver = subgraphWithoutPermService.queryResolvers.document;
544
+ await expect(queryResolver(null, { identifier: "doc-123" }, ctx)).rejects.toThrow("Forbidden");
545
+ });
546
+ it("should deny write access when no permission service and no global access", async () => {
547
+ const ctx = createContext({ userAddress: "0xuser" });
548
+ await expect(subgraphWithoutPermService.mutationResolvers.setName(null, { docId: "doc-123", input: { name: "New" } }, ctx)).rejects.toThrow("Forbidden");
549
+ });
550
+ it("should allow access with global roles even without permission service", async () => {
551
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
552
+ const queryResolver = subgraphWithoutPermService.queryResolvers.document;
553
+ const result = await queryResolver(null, { identifier: "doc-123" }, ctx);
554
+ expect(result).toBeDefined();
555
+ });
556
+ it("should skip operation restriction check when no permission service", async () => {
557
+ const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
558
+ const result = await subgraphWithoutPermService.mutationResolvers.setName(null, { docId: "doc-123", input: { name: "New" } }, ctx);
559
+ expect(result).toMatchObject({
560
+ id: "doc-123",
561
+ revisionsList: expect.arrayContaining([
562
+ expect.objectContaining({ scope: "global", revision: 2 }),
563
+ ]),
564
+ });
565
+ });
566
+ });
567
+ describe("Edge Cases", () => {
568
+ it("should handle empty user address in context", async () => {
569
+ const ctx = {
570
+ user: { address: "" },
571
+ isAdmin: vi.fn().mockReturnValue(false),
572
+ };
573
+ const queryResolver = subgraph.queryResolvers.document;
574
+ await expect(queryResolver(null, { identifier: "doc-123" }, ctx)).rejects.toThrow("Forbidden");
575
+ expect(ctx.isAdmin).toHaveBeenCalledWith("");
576
+ });
577
+ it("should pass correct operation type name to permission check", async () => {
578
+ vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(true);
579
+ vi.mocked(mockDocumentPermissionService.isOperationRestricted).mockResolvedValue(true);
580
+ vi.mocked(mockDocumentPermissionService.canExecuteOperation).mockResolvedValue(true);
581
+ const ctx = createContext({ userAddress: "0xuser" });
582
+ await subgraph.mutationResolvers.setValue(null, { docId: "doc-123", input: { value: 42 } }, ctx);
583
+ expect(mockDocumentPermissionService.isOperationRestricted).toHaveBeenCalledWith("doc-123", "SET_VALUE");
584
+ });
585
+ });
586
+ });
587
+ //# sourceMappingURL=document-model-subgraph-permissions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-model-subgraph-permissions.test.js","sourceRoot":"","sources":["../../test/document-model-subgraph-permissions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=drive-info-endpoint.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive-info-endpoint.test.d.ts","sourceRoot":"","sources":["../../test/drive-info-endpoint.test.ts"],"names":[],"mappings":""}