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

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,73 @@
1
+ /**
2
+ * Unit tests for createAuthFetchMiddleware and getAuthContext.
3
+ *
4
+ * AuthService is mocked so tests are pure unit tests with no network I/O or
5
+ * real token verification.
6
+ */
7
+ import { describe, expect, it, vi } from "vitest";
8
+ import { createAuthFetchMiddleware, getAuthContext, } from "../../src/graphql/gateway/auth-middleware.js";
9
+ // ─── helpers ──────────────────────────────────────────────────────────────────
10
+ function makeAuthService(result) {
11
+ return {
12
+ authenticateRequest: vi.fn().mockResolvedValue(result),
13
+ };
14
+ }
15
+ function makeRequest(url = "http://localhost/graphql") {
16
+ return new globalThis.Request(url, { method: "POST" });
17
+ }
18
+ const AUTH_CTX = {
19
+ user: { address: "0xabc", chainId: 1, networkId: "eip155" },
20
+ admins: ["0xadmin"],
21
+ auth_enabled: true,
22
+ };
23
+ // ─── tests ────────────────────────────────────────────────────────────────────
24
+ describe("createAuthFetchMiddleware", () => {
25
+ it("calls the next handler and returns its response when auth succeeds", async () => {
26
+ const service = makeAuthService(AUTH_CTX);
27
+ const next = vi.fn().mockResolvedValue(new Response("ok", { status: 200 }));
28
+ const middleware = createAuthFetchMiddleware(service);
29
+ const req = makeRequest();
30
+ const res = await middleware(next)(req);
31
+ expect(next).toHaveBeenCalledOnce();
32
+ expect(next).toHaveBeenCalledWith(req);
33
+ expect(res.status).toBe(200);
34
+ });
35
+ it("short-circuits and returns the auth Response without calling next when auth fails", async () => {
36
+ const authResponse = new globalThis.Response(JSON.stringify({ error: "Verification failed" }), { status: 401 });
37
+ const service = makeAuthService(authResponse);
38
+ const next = vi.fn();
39
+ const middleware = createAuthFetchMiddleware(service);
40
+ const res = await middleware(next)(makeRequest());
41
+ expect(next).not.toHaveBeenCalled();
42
+ expect(res.status).toBe(401);
43
+ });
44
+ it("stores the AuthContext in the WeakMap so getAuthContext returns it", async () => {
45
+ const service = makeAuthService(AUTH_CTX);
46
+ const req = makeRequest();
47
+ let capturedRequest;
48
+ const next = vi.fn().mockImplementation((r) => {
49
+ capturedRequest = r;
50
+ return Promise.resolve(new Response("ok"));
51
+ });
52
+ const middleware = createAuthFetchMiddleware(service);
53
+ await middleware(next)(req);
54
+ expect(capturedRequest).toBe(req);
55
+ expect(getAuthContext(req)).toEqual(AUTH_CTX);
56
+ });
57
+ it("does not store AuthContext in the WeakMap when auth fails", async () => {
58
+ const authResponse = new globalThis.Response(null, { status: 401 });
59
+ const service = makeAuthService(authResponse);
60
+ const req = makeRequest();
61
+ const next = vi.fn();
62
+ const middleware = createAuthFetchMiddleware(service);
63
+ await middleware(next)(req);
64
+ expect(getAuthContext(req)).toBeUndefined();
65
+ });
66
+ });
67
+ describe("getAuthContext", () => {
68
+ it("returns undefined for a request that was never authenticated", () => {
69
+ const freshRequest = makeRequest("http://localhost/other");
70
+ expect(getAuthContext(freshRequest)).toBeUndefined();
71
+ });
72
+ });
73
+ //# sourceMappingURL=auth-middleware.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-middleware.test.js","sourceRoot":"","sources":["../../../test/gateway/auth-middleware.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Shared contract test suite for IGatewayAdapter implementations.
3
+ *
4
+ * Import this module and call runGatewayAdapterContractTests() in your
5
+ * adapter-specific test file to verify that the implementation satisfies
6
+ * the full IGatewayAdapter behavioral contract.
7
+ *
8
+ * Usage:
9
+ *
10
+ * import { runGatewayAdapterContractTests } from "./gateway-adapter-contract.js";
11
+ *
12
+ * runGatewayAdapterContractTests("MyAdapter", async () => {
13
+ * const adapter = new MyGatewayAdapter(...);
14
+ * const httpServer = createServer();
15
+ * return { adapter, httpServer, close: () => adapter.stop() };
16
+ * });
17
+ */
18
+ import type { IGatewayAdapter } from "../../src/graphql/gateway/types.js";
19
+ import type { Context } from "../../src/graphql/types.js";
20
+ export type GatewayAdapterHarness = {
21
+ adapter: IGatewayAdapter<Context>;
22
+ /**
23
+ * Shut down the adapter and release any resources. Called in afterEach.
24
+ * Implementations should be idempotent (safe to call after stop()).
25
+ */
26
+ close: () => Promise<void>;
27
+ };
28
+ export type GatewayAdapterHarnessFactory = () => Promise<GatewayAdapterHarness>;
29
+ export declare function runGatewayAdapterContractTests(adapterName: string, createHarness: GatewayAdapterHarnessFactory): void;
30
+ //# sourceMappingURL=gateway-adapter-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-adapter-contract.d.ts","sourceRoot":"","sources":["../../../test/gateway/gateway-adapter-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAI1D,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC;;;OAGG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAyChF,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,4BAA4B,GAC1C,IAAI,CAmZN"}
@@ -0,0 +1,347 @@
1
+ /**
2
+ * Shared contract test suite for IGatewayAdapter implementations.
3
+ *
4
+ * Import this module and call runGatewayAdapterContractTests() in your
5
+ * adapter-specific test file to verify that the implementation satisfies
6
+ * the full IGatewayAdapter behavioral contract.
7
+ *
8
+ * Usage:
9
+ *
10
+ * import { runGatewayAdapterContractTests } from "./gateway-adapter-contract.js";
11
+ *
12
+ * runGatewayAdapterContractTests("MyAdapter", async () => {
13
+ * const adapter = new MyGatewayAdapter(...);
14
+ * const httpServer = createServer();
15
+ * return { adapter, httpServer, close: () => adapter.stop() };
16
+ * });
17
+ */
18
+ import { buildSubgraphSchema } from "@apollo/subgraph";
19
+ import { gql } from "graphql-tag";
20
+ import { createServer } from "node:http";
21
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
22
+ // ─── shared helpers ──────────────────────────────────────────────────────────
23
+ /** A minimal context factory that satisfies GatewayContextFactory<Context>. */
24
+ const noopCtx = async () => ({
25
+ headers: {},
26
+ db: null,
27
+ });
28
+ /**
29
+ * Build a minimal federated schema with a single Query field.
30
+ * Uses buildSubgraphSchema from @apollo/subgraph to ensure schema instances
31
+ * are compatible with Apollo Server's graphql module instance.
32
+ */
33
+ function makeSchema(fieldName = "hello", returnValue = "world") {
34
+ return buildSubgraphSchema({
35
+ typeDefs: gql `
36
+ type Query {
37
+ ${fieldName}: String
38
+ }
39
+ `,
40
+ resolvers: {
41
+ Query: {
42
+ [fieldName]: () => returnValue,
43
+ },
44
+ },
45
+ });
46
+ }
47
+ /** A minimal http.Server used to satisfy the start() signature. */
48
+ function makeHttpServer() {
49
+ const server = createServer();
50
+ return {
51
+ server,
52
+ close: () => new Promise((resolve) => server.close(() => resolve())),
53
+ };
54
+ }
55
+ // ─── contract tests ──────────────────────────────────────────────────────────
56
+ export function runGatewayAdapterContractTests(adapterName, createHarness) {
57
+ // ── lifecycle ──────────────────────────────────────────────────────────────
58
+ describe(`IGatewayAdapter contract (${adapterName}) – lifecycle`, () => {
59
+ let h;
60
+ let httpServer;
61
+ beforeEach(async () => {
62
+ h = await createHarness();
63
+ httpServer = makeHttpServer();
64
+ });
65
+ afterEach(async () => {
66
+ await httpServer.close();
67
+ await h.close();
68
+ });
69
+ it("start() resolves without throwing", async () => {
70
+ await expect(h.adapter.start(httpServer.server)).resolves.toBeUndefined();
71
+ });
72
+ it("stop() resolves without throwing when no handlers have been created", async () => {
73
+ await h.adapter.start(httpServer.server);
74
+ await expect(h.adapter.stop()).resolves.toBeUndefined();
75
+ });
76
+ it("stop() resolves without throwing after createHandler() calls", async () => {
77
+ await h.adapter.start(httpServer.server);
78
+ await h.adapter.createHandler(makeSchema(), noopCtx);
79
+ await h.adapter.createHandler(makeSchema(), noopCtx);
80
+ await expect(h.adapter.stop()).resolves.toBeUndefined();
81
+ });
82
+ it("stop() is safe to call multiple times", async () => {
83
+ await h.adapter.start(httpServer.server);
84
+ await h.adapter.createHandler(makeSchema(), noopCtx);
85
+ await h.adapter.stop();
86
+ await expect(h.adapter.stop()).resolves.toBeUndefined();
87
+ });
88
+ });
89
+ // ── createHandler ──────────────────────────────────────────────────────────
90
+ describe(`IGatewayAdapter contract (${adapterName}) – createHandler`, () => {
91
+ let h;
92
+ let httpServer;
93
+ beforeEach(async () => {
94
+ h = await createHarness();
95
+ httpServer = makeHttpServer();
96
+ await h.adapter.start(httpServer.server);
97
+ });
98
+ afterEach(async () => {
99
+ await httpServer.close();
100
+ await h.close();
101
+ });
102
+ it("returns a callable FetchHandler", async () => {
103
+ const handler = await h.adapter.createHandler(makeSchema(), noopCtx);
104
+ expect(typeof handler).toBe("function");
105
+ });
106
+ it("the handler returns a Response for a valid query", async () => {
107
+ const handler = await h.adapter.createHandler(makeSchema(), noopCtx);
108
+ const res = await handler(new Request("http://localhost/graphql", {
109
+ method: "POST",
110
+ headers: { "content-type": "application/json" },
111
+ body: JSON.stringify({ query: "{ hello }" }),
112
+ }));
113
+ expect(res).toBeInstanceOf(Response);
114
+ expect(res.status).toBe(200);
115
+ const body = (await res.json());
116
+ expect(body.data.hello).toBe("world");
117
+ });
118
+ it("the handler returns an error response for an invalid query", async () => {
119
+ const handler = await h.adapter.createHandler(makeSchema(), noopCtx);
120
+ const res = await handler(new Request("http://localhost/graphql", {
121
+ method: "POST",
122
+ headers: { "content-type": "application/json" },
123
+ body: JSON.stringify({ query: "{ doesNotExist }" }),
124
+ }));
125
+ expect(res).toBeInstanceOf(Response);
126
+ // Apollo returns 400 for validation errors; implementations may vary
127
+ // but must not return 200 for an invalid query
128
+ expect(res.status).not.toBe(200);
129
+ const body = (await res.json());
130
+ expect(body.errors).toBeDefined();
131
+ });
132
+ it("the handler passes the Fetch Request to the context factory", async () => {
133
+ let capturedRequest;
134
+ const ctxFactory = async (req) => {
135
+ capturedRequest = req;
136
+ return { headers: {}, db: null };
137
+ };
138
+ const handler = await h.adapter.createHandler(makeSchema(), ctxFactory);
139
+ await handler(new Request("http://localhost/graphql", {
140
+ method: "POST",
141
+ headers: {
142
+ "content-type": "application/json",
143
+ "x-token": "abc123",
144
+ },
145
+ body: JSON.stringify({ query: "{ hello }" }),
146
+ }));
147
+ expect(capturedRequest?.headers.get("x-token")).toBe("abc123");
148
+ });
149
+ it("multiple handlers created from different schemas are independent", async () => {
150
+ const handlerA = await h.adapter.createHandler(makeSchema("hello", "from-a"), noopCtx);
151
+ const handlerB = await h.adapter.createHandler(makeSchema("hello", "from-b"), noopCtx);
152
+ const request = () => new Request("http://localhost/graphql", {
153
+ method: "POST",
154
+ headers: { "content-type": "application/json" },
155
+ body: JSON.stringify({ query: "{ hello }" }),
156
+ });
157
+ const [resA, resB] = await Promise.all([
158
+ handlerA(request()),
159
+ handlerB(request()),
160
+ ]);
161
+ const bodyA = (await resA.json());
162
+ const bodyB = (await resB.json());
163
+ expect(bodyA.data.hello).toBe("from-a");
164
+ expect(bodyB.data.hello).toBe("from-b");
165
+ });
166
+ });
167
+ // ── createSupergraphHandler + updateSupergraph ────────────────────────────
168
+ //
169
+ // These tests require real HTTP subgraph servers because the federation
170
+ // gateway uses RemoteGraphQLDataSource to route requests by URL.
171
+ //
172
+ // Helper: wrap a FetchHandler in a real Node HTTP server so the gateway
173
+ // can reach it via a localhost URL.
174
+ async function serveHandler(handler) {
175
+ const server = createServer(async (nodeReq, nodeRes) => {
176
+ const chunks = [];
177
+ for await (const chunk of nodeReq) {
178
+ chunks.push(chunk);
179
+ }
180
+ const body = Buffer.concat(chunks);
181
+ const url = `http://127.0.0.1${nodeReq.url ?? "/"}`;
182
+ const fetchReq = new Request(url, {
183
+ method: nodeReq.method ?? "GET",
184
+ headers: nodeReq.headers,
185
+ ...(body.length > 0 ? { body } : {}),
186
+ });
187
+ try {
188
+ const fetchRes = await handler(fetchReq);
189
+ nodeRes.statusCode = fetchRes.status;
190
+ fetchRes.headers.forEach((value, key) => nodeRes.setHeader(key, value));
191
+ nodeRes.end(await fetchRes.text());
192
+ }
193
+ catch {
194
+ nodeRes.statusCode = 500;
195
+ nodeRes.end("Internal server error");
196
+ }
197
+ });
198
+ await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));
199
+ const { port } = server.address();
200
+ return {
201
+ url: `http://127.0.0.1:${port}`,
202
+ close: () => new Promise((resolve) => server.close(() => resolve())),
203
+ };
204
+ }
205
+ describe(`IGatewayAdapter contract (${adapterName}) – createSupergraphHandler`, () => {
206
+ let h;
207
+ let httpServer;
208
+ const subServers = [];
209
+ beforeEach(async () => {
210
+ h = await createHarness();
211
+ httpServer = makeHttpServer();
212
+ await h.adapter.start(httpServer.server);
213
+ });
214
+ afterEach(async () => {
215
+ await Promise.all(subServers.map((s) => s.close()));
216
+ subServers.length = 0;
217
+ await httpServer.close();
218
+ await h.close();
219
+ });
220
+ // Spin up a real HTTP subgraph server backed by the adapter's createHandler.
221
+ async function makeSubServer(fieldName = "hello", returnValue = "world") {
222
+ const typeDefs = gql `
223
+ type Query {
224
+ ${fieldName}: String
225
+ }
226
+ `;
227
+ const schema = buildSubgraphSchema({
228
+ typeDefs,
229
+ resolvers: { Query: { [fieldName]: () => returnValue } },
230
+ });
231
+ const handler = await h.adapter.createHandler(schema, noopCtx);
232
+ const sub = await serveHandler(handler);
233
+ subServers.push(sub);
234
+ return { name: fieldName, typeDefs, url: sub.url };
235
+ }
236
+ it("returns a callable FetchHandler", async () => {
237
+ const sub = await makeSubServer();
238
+ const handler = await h.adapter.createSupergraphHandler(() => [sub], httpServer.server, noopCtx);
239
+ expect(typeof handler).toBe("function");
240
+ });
241
+ it("the supergraph handler executes a federated query", async () => {
242
+ const sub = await makeSubServer("hello", "world");
243
+ const handler = await h.adapter.createSupergraphHandler(() => [sub], httpServer.server, noopCtx);
244
+ const res = await handler(new Request("http://localhost/graphql", {
245
+ method: "POST",
246
+ headers: { "content-type": "application/json" },
247
+ body: JSON.stringify({ query: "{ hello }" }),
248
+ }));
249
+ expect(res).toBeInstanceOf(Response);
250
+ expect(res.status).toBe(200);
251
+ const body = (await res.json());
252
+ expect(body.data.hello).toBe("world");
253
+ });
254
+ it("the supergraph handler passes context factory the Fetch Request", async () => {
255
+ let capturedRequest;
256
+ const ctxFactory = async (req) => {
257
+ capturedRequest = req;
258
+ return { headers: {}, db: null };
259
+ };
260
+ const sub = await makeSubServer();
261
+ const handler = await h.adapter.createSupergraphHandler(() => [sub], httpServer.server, ctxFactory);
262
+ await handler(new Request("http://localhost/graphql", {
263
+ method: "POST",
264
+ headers: {
265
+ "content-type": "application/json",
266
+ "x-token": "test-value",
267
+ },
268
+ body: JSON.stringify({ query: "{ hello }" }),
269
+ }));
270
+ expect(capturedRequest?.headers.get("x-token")).toBe("test-value");
271
+ });
272
+ it("calling createSupergraphHandler() twice throws", async () => {
273
+ const sub = await makeSubServer();
274
+ await h.adapter.createSupergraphHandler(() => [sub], httpServer.server, noopCtx);
275
+ await expect(h.adapter.createSupergraphHandler(() => [sub], httpServer.server, noopCtx)).rejects.toThrow();
276
+ });
277
+ it("stop() after createSupergraphHandler() resolves without throwing", async () => {
278
+ const sub = await makeSubServer();
279
+ await h.adapter.createSupergraphHandler(() => [sub], httpServer.server, noopCtx);
280
+ await expect(h.adapter.stop()).resolves.toBeUndefined();
281
+ });
282
+ });
283
+ // ── updateSupergraph ───────────────────────────────────────────────────────
284
+ describe(`IGatewayAdapter contract (${adapterName}) – updateSupergraph`, () => {
285
+ let h;
286
+ let httpServer;
287
+ const subServers = [];
288
+ beforeEach(async () => {
289
+ h = await createHarness();
290
+ httpServer = makeHttpServer();
291
+ await h.adapter.start(httpServer.server);
292
+ });
293
+ afterEach(async () => {
294
+ await Promise.all(subServers.map((s) => s.close()));
295
+ subServers.length = 0;
296
+ await httpServer.close();
297
+ await h.close();
298
+ });
299
+ it("updateSupergraph() is a no-op before createSupergraphHandler()", async () => {
300
+ await expect(h.adapter.updateSupergraph()).resolves.toBeUndefined();
301
+ });
302
+ it("updateSupergraph() resolves after createSupergraphHandler()", async () => {
303
+ const typeDefs = gql `
304
+ type Query {
305
+ hello: String
306
+ }
307
+ `;
308
+ const schema = buildSubgraphSchema({
309
+ typeDefs,
310
+ resolvers: { Query: { hello: () => "world" } },
311
+ });
312
+ const handler = await h.adapter.createHandler(schema, noopCtx);
313
+ const sub = await serveHandler(handler);
314
+ subServers.push(sub);
315
+ await h.adapter.createSupergraphHandler(() => [{ name: "hello", typeDefs, url: sub.url }], httpServer.server, noopCtx);
316
+ await expect(h.adapter.updateSupergraph()).resolves.toBeUndefined();
317
+ });
318
+ });
319
+ // ── lifecycle (stop after createSupergraphHandler) ─────────────────────────
320
+ // ── attachWebSocket ────────────────────────────────────────────────────────
321
+ // Skipped in the Vitest environment because graphql-ws/use/ws is blocked by
322
+ // websocket.ts when VITEST=true. Adapters that support WebSocket in tests
323
+ // can override this by running the suite with NODE_ENV != "test".
324
+ const itWs = process.env.VITEST === "true" ? it.skip : it;
325
+ describe(`IGatewayAdapter contract (${adapterName}) – attachWebSocket`, () => {
326
+ let h;
327
+ let httpServer;
328
+ beforeEach(async () => {
329
+ h = await createHarness();
330
+ httpServer = makeHttpServer();
331
+ await h.adapter.start(httpServer.server);
332
+ });
333
+ afterEach(async () => {
334
+ await httpServer.close();
335
+ await h.close();
336
+ });
337
+ itWs("returns a WsDisposer with a dispose() method", async () => {
338
+ const { WebSocketServer } = await import("ws");
339
+ const wss = new WebSocketServer({ noServer: true });
340
+ const disposer = h.adapter.attachWebSocket(wss, makeSchema(), async () => ({ headers: {}, db: null }));
341
+ expect(typeof disposer.dispose).toBe("function");
342
+ await disposer.dispose();
343
+ wss.close();
344
+ });
345
+ });
346
+ }
347
+ //# sourceMappingURL=gateway-adapter-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-adapter-contract.js","sourceRoot":"","sources":["../../../test/gateway/gateway-adapter-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Shared contract test suite for IHttpAdapter implementations.
3
+ *
4
+ * Import this module and call runHttpAdapterContractTests() in your
5
+ * adapter-specific test file to verify that the implementation satisfies
6
+ * the full IHttpAdapter behavioral contract.
7
+ *
8
+ * Usage:
9
+ *
10
+ * import { runHttpAdapterContractTests } from "./http-adapter-contract.js";
11
+ *
12
+ * runHttpAdapterContractTests("MyAdapter", async () => {
13
+ * const adapter = new MyHttpAdapter(...);
14
+ * adapter.setupMiddleware({});
15
+ * // start your framework's server on an ephemeral port
16
+ * return { adapter, url: "http://127.0.0.1:PORT", close, respondWithJson };
17
+ * });
18
+ */
19
+ import type { IHttpAdapter } from "../../src/graphql/gateway/types.js";
20
+ export type HttpAdapterHarness = {
21
+ /** The adapter under test, with setupMiddleware already called. */
22
+ adapter: IHttpAdapter;
23
+ /** Base URL of the running test server (e.g. "http://127.0.0.1:PORT"). */
24
+ url: string;
25
+ /** Shut down the server and release the port. */
26
+ close: () => Promise<void>;
27
+ };
28
+ export type HttpAdapterHarnessFactory = () => Promise<HttpAdapterHarness>;
29
+ export declare function runHttpAdapterContractTests(adapterName: string, createHarness: HttpAdapterHarnessFactory): void;
30
+ //# sourceMappingURL=http-adapter-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-adapter-contract.d.ts","sourceRoot":"","sources":["../../../test/gateway/http-adapter-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAKvE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,mEAAmE;IACnE,OAAO,EAAE,YAAY,CAAC;IACtB,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAyB1E,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,yBAAyB,GACvC,IAAI,CA0PN"}