@powerhousedao/reactor-api 6.0.0-dev.8 → 6.0.0-dev.81

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/dist/codegen.js +1 -1
  2. package/dist/codegen.js.map +1 -1
  3. package/dist/index.d.ts +4 -2
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +4 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/src/config.d.ts +1 -2
  8. package/dist/src/config.d.ts.map +1 -1
  9. package/dist/src/config.js +1 -5
  10. package/dist/src/config.js.map +1 -1
  11. package/dist/src/graphql/auth/resolvers.d.ts +17 -0
  12. package/dist/src/graphql/auth/resolvers.d.ts.map +1 -1
  13. package/dist/src/graphql/auth/resolvers.js +54 -0
  14. package/dist/src/graphql/auth/resolvers.js.map +1 -1
  15. package/dist/src/graphql/auth/schema.graphql +27 -5
  16. package/dist/src/graphql/auth/subgraph.d.ts +25 -0
  17. package/dist/src/graphql/auth/subgraph.d.ts.map +1 -1
  18. package/dist/src/graphql/auth/subgraph.js +45 -1
  19. package/dist/src/graphql/auth/subgraph.js.map +1 -1
  20. package/dist/src/graphql/base-subgraph.d.ts +12 -4
  21. package/dist/src/graphql/base-subgraph.d.ts.map +1 -1
  22. package/dist/src/graphql/base-subgraph.js +94 -2
  23. package/dist/src/graphql/base-subgraph.js.map +1 -1
  24. package/dist/src/graphql/document-model-subgraph.d.ts +16 -44
  25. package/dist/src/graphql/document-model-subgraph.d.ts.map +1 -1
  26. package/dist/src/graphql/document-model-subgraph.js +285 -87
  27. package/dist/src/graphql/document-model-subgraph.js.map +1 -1
  28. package/dist/src/graphql/graphql-manager.d.ts +28 -6
  29. package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
  30. package/dist/src/graphql/graphql-manager.js +266 -161
  31. package/dist/src/graphql/graphql-manager.js.map +1 -1
  32. package/dist/src/graphql/index.d.ts +2 -1
  33. package/dist/src/graphql/index.d.ts.map +1 -1
  34. package/dist/src/graphql/index.js +2 -1
  35. package/dist/src/graphql/index.js.map +1 -1
  36. package/dist/src/graphql/packages/index.d.ts +2 -0
  37. package/dist/src/graphql/packages/index.d.ts.map +1 -0
  38. package/dist/src/graphql/packages/index.js +2 -0
  39. package/dist/src/graphql/packages/index.js.map +1 -0
  40. package/dist/src/graphql/packages/resolvers.d.ts +31 -0
  41. package/dist/src/graphql/packages/resolvers.d.ts.map +1 -0
  42. package/dist/src/graphql/packages/resolvers.js +37 -0
  43. package/dist/src/graphql/packages/resolvers.js.map +1 -0
  44. package/dist/src/graphql/packages/schema.graphql +50 -0
  45. package/dist/src/graphql/packages/subgraph.d.ts +55 -0
  46. package/dist/src/graphql/packages/subgraph.d.ts.map +1 -0
  47. package/dist/src/graphql/packages/subgraph.js +73 -0
  48. package/dist/src/graphql/packages/subgraph.js.map +1 -0
  49. package/dist/src/graphql/reactor/adapters.d.ts +10 -2
  50. package/dist/src/graphql/reactor/adapters.d.ts.map +1 -1
  51. package/dist/src/graphql/reactor/adapters.js +35 -1
  52. package/dist/src/graphql/reactor/adapters.js.map +1 -1
  53. package/dist/src/graphql/reactor/factory.d.ts +16 -1
  54. package/dist/src/graphql/reactor/factory.d.ts.map +1 -1
  55. package/dist/src/graphql/reactor/factory.js +1 -1
  56. package/dist/src/graphql/reactor/factory.js.map +1 -1
  57. package/dist/src/graphql/reactor/gen/graphql.d.ts +271 -76
  58. package/dist/src/graphql/reactor/gen/graphql.d.ts.map +1 -1
  59. package/dist/src/graphql/reactor/gen/graphql.js +181 -10
  60. package/dist/src/graphql/reactor/gen/graphql.js.map +1 -1
  61. package/dist/src/graphql/reactor/index.d.ts +1 -1
  62. package/dist/src/graphql/reactor/index.d.ts.map +1 -1
  63. package/dist/src/graphql/reactor/index.js +1 -1
  64. package/dist/src/graphql/reactor/index.js.map +1 -1
  65. package/dist/src/graphql/reactor/operations.graphql +132 -1
  66. package/dist/src/graphql/reactor/requester.with-zod.d.ts.map +1 -1
  67. package/dist/src/graphql/reactor/requester.with-zod.js +109 -38
  68. package/dist/src/graphql/reactor/requester.with-zod.js.map +1 -1
  69. package/dist/src/graphql/reactor/resolvers.d.ts +78 -25
  70. package/dist/src/graphql/reactor/resolvers.d.ts.map +1 -1
  71. package/dist/src/graphql/reactor/resolvers.js +197 -74
  72. package/dist/src/graphql/reactor/resolvers.js.map +1 -1
  73. package/dist/src/graphql/reactor/schema.graphql +70 -30
  74. package/dist/src/graphql/reactor/subgraph.d.ts +2 -31
  75. package/dist/src/graphql/reactor/subgraph.d.ts.map +1 -1
  76. package/dist/src/graphql/reactor/subgraph.js +132 -209
  77. package/dist/src/graphql/reactor/subgraph.js.map +1 -1
  78. package/dist/src/graphql/reactor/validation.d.ts +208 -20
  79. package/dist/src/graphql/reactor/validation.d.ts.map +1 -1
  80. package/dist/src/graphql/reactor/validation.js +90 -4
  81. package/dist/src/graphql/reactor/validation.js.map +1 -1
  82. package/dist/src/graphql/system/index.d.ts +0 -1
  83. package/dist/src/graphql/system/index.d.ts.map +1 -1
  84. package/dist/src/graphql/system/index.js +0 -1
  85. package/dist/src/graphql/system/index.js.map +1 -1
  86. package/dist/src/graphql/types.d.ts +6 -8
  87. package/dist/src/graphql/types.d.ts.map +1 -1
  88. package/dist/src/graphql/utils.d.ts +1 -18
  89. package/dist/src/graphql/utils.d.ts.map +1 -1
  90. package/dist/src/graphql/utils.js +7 -35
  91. package/dist/src/graphql/utils.js.map +1 -1
  92. package/dist/src/migrations/002_add_document_protection.d.ts +4 -0
  93. package/dist/src/migrations/002_add_document_protection.d.ts.map +1 -0
  94. package/dist/src/migrations/002_add_document_protection.js +18 -0
  95. package/dist/src/migrations/002_add_document_protection.js.map +1 -0
  96. package/dist/src/migrations/index.d.ts.map +1 -1
  97. package/dist/src/migrations/index.js +2 -0
  98. package/dist/src/migrations/index.js.map +1 -1
  99. package/dist/src/packages/http-loader.d.ts +68 -0
  100. package/dist/src/packages/http-loader.d.ts.map +1 -0
  101. package/dist/src/packages/http-loader.js +176 -0
  102. package/dist/src/packages/http-loader.js.map +1 -0
  103. package/dist/src/packages/https-hooks.d.mts +23 -0
  104. package/dist/src/packages/https-hooks.d.mts.map +1 -0
  105. package/dist/src/packages/https-hooks.mjs +59 -0
  106. package/dist/src/packages/https-hooks.mjs.map +1 -0
  107. package/dist/src/packages/import-loader.d.ts +5 -3
  108. package/dist/src/packages/import-loader.d.ts.map +1 -1
  109. package/dist/src/packages/import-loader.js +19 -10
  110. package/dist/src/packages/import-loader.js.map +1 -1
  111. package/dist/src/packages/package-manager.d.ts +2 -2
  112. package/dist/src/packages/package-manager.d.ts.map +1 -1
  113. package/dist/src/packages/package-manager.js.map +1 -1
  114. package/dist/src/packages/types.d.ts +9 -4
  115. package/dist/src/packages/types.d.ts.map +1 -1
  116. package/dist/src/packages/util.d.ts +3 -2
  117. package/dist/src/packages/util.d.ts.map +1 -1
  118. package/dist/src/packages/util.js +1 -1
  119. package/dist/src/packages/util.js.map +1 -1
  120. package/dist/src/packages/vite-loader.d.ts +10 -8
  121. package/dist/src/packages/vite-loader.d.ts.map +1 -1
  122. package/dist/src/packages/vite-loader.js +33 -10
  123. package/dist/src/packages/vite-loader.js.map +1 -1
  124. package/dist/src/server.d.ts +14 -11
  125. package/dist/src/server.d.ts.map +1 -1
  126. package/dist/src/server.js +153 -92
  127. package/dist/src/server.js.map +1 -1
  128. package/dist/src/services/auth.service.d.ts +0 -12
  129. package/dist/src/services/auth.service.d.ts.map +1 -1
  130. package/dist/src/services/auth.service.js +13 -40
  131. package/dist/src/services/auth.service.js.map +1 -1
  132. package/dist/src/services/authorization.service.d.ts +70 -0
  133. package/dist/src/services/authorization.service.d.ts.map +1 -0
  134. package/dist/src/services/authorization.service.js +155 -0
  135. package/dist/src/services/authorization.service.js.map +1 -0
  136. package/dist/src/services/document-permission.service.d.ts +47 -7
  137. package/dist/src/services/document-permission.service.d.ts.map +1 -1
  138. package/dist/src/services/document-permission.service.js +162 -7
  139. package/dist/src/services/document-permission.service.js.map +1 -1
  140. package/dist/src/services/package-management.service.d.ts +32 -0
  141. package/dist/src/services/package-management.service.d.ts.map +1 -0
  142. package/dist/src/services/package-management.service.js +95 -0
  143. package/dist/src/services/package-management.service.js.map +1 -0
  144. package/dist/src/services/package-storage.d.ts +23 -0
  145. package/dist/src/services/package-storage.d.ts.map +1 -0
  146. package/dist/src/services/package-storage.js +19 -0
  147. package/dist/src/services/package-storage.js.map +1 -0
  148. package/dist/src/tracing.d.ts.map +1 -1
  149. package/dist/src/tracing.js +19 -1
  150. package/dist/src/tracing.js.map +1 -1
  151. package/dist/src/types.d.ts +5 -5
  152. package/dist/src/types.d.ts.map +1 -1
  153. package/dist/src/utils/auth.d.ts +1 -1
  154. package/dist/src/utils/auth.d.ts.map +1 -1
  155. package/dist/src/utils/auth.js +5 -12
  156. package/dist/src/utils/auth.js.map +1 -1
  157. package/dist/src/utils/create-schema.d.ts +25 -6
  158. package/dist/src/utils/create-schema.d.ts.map +1 -1
  159. package/dist/src/utils/create-schema.js +294 -22
  160. package/dist/src/utils/create-schema.js.map +1 -1
  161. package/dist/src/utils/db.d.ts +8 -0
  162. package/dist/src/utils/db.d.ts.map +1 -1
  163. package/dist/src/utils/db.js.map +1 -1
  164. package/dist/src/utils/drive-url.d.ts +2 -0
  165. package/dist/src/utils/drive-url.d.ts.map +1 -0
  166. package/dist/src/utils/drive-url.js +3 -0
  167. package/dist/src/utils/drive-url.js.map +1 -0
  168. package/dist/src/utils/index.d.ts +1 -0
  169. package/dist/src/utils/index.d.ts.map +1 -1
  170. package/dist/src/utils/index.js +1 -0
  171. package/dist/src/utils/index.js.map +1 -1
  172. package/dist/test/authorization.service.test.d.ts +2 -0
  173. package/dist/test/authorization.service.test.d.ts.map +1 -0
  174. package/dist/test/authorization.service.test.js +252 -0
  175. package/dist/test/authorization.service.test.js.map +1 -0
  176. package/dist/test/connect-switchboard-reshuffle-convergence.test.d.ts +2 -0
  177. package/dist/test/connect-switchboard-reshuffle-convergence.test.d.ts.map +1 -0
  178. package/dist/test/connect-switchboard-reshuffle-convergence.test.js +203 -0
  179. package/dist/test/connect-switchboard-reshuffle-convergence.test.js.map +1 -0
  180. package/dist/test/connect-switchboard-sync.test.d.ts +2 -0
  181. package/dist/test/connect-switchboard-sync.test.d.ts.map +1 -0
  182. package/dist/test/connect-switchboard-sync.test.js +581 -0
  183. package/dist/test/connect-switchboard-sync.test.js.map +1 -0
  184. package/dist/test/document-drive-subgraph.test.d.ts +2 -0
  185. package/dist/test/document-drive-subgraph.test.d.ts.map +1 -0
  186. package/dist/test/document-drive-subgraph.test.js +186 -0
  187. package/dist/test/document-drive-subgraph.test.js.map +1 -0
  188. package/dist/test/document-model-subgraph-permissions.test.d.ts +2 -0
  189. package/dist/test/document-model-subgraph-permissions.test.d.ts.map +1 -0
  190. package/dist/test/document-model-subgraph-permissions.test.js +563 -0
  191. package/dist/test/document-model-subgraph-permissions.test.js.map +1 -0
  192. package/dist/test/drive-info-endpoint.test.d.ts +2 -0
  193. package/dist/test/drive-info-endpoint.test.d.ts.map +1 -0
  194. package/dist/test/drive-info-endpoint.test.js +123 -0
  195. package/dist/test/drive-info-endpoint.test.js.map +1 -0
  196. package/dist/test/index.d.ts +0 -1
  197. package/dist/test/index.d.ts.map +1 -1
  198. package/dist/test/index.js +0 -1
  199. package/dist/test/index.js.map +1 -1
  200. package/dist/test/permissions-integration.test.js +6 -20
  201. package/dist/test/permissions-integration.test.js.map +1 -1
  202. package/dist/test/push-backfill.test.d.ts +2 -0
  203. package/dist/test/push-backfill.test.d.ts.map +1 -0
  204. package/dist/test/push-backfill.test.js +298 -0
  205. package/dist/test/push-backfill.test.js.map +1 -0
  206. package/dist/test/reactor-client.test.js +87 -13
  207. package/dist/test/reactor-client.test.js.map +1 -1
  208. package/dist/test/reactor-resolvers.test.js +8 -11
  209. package/dist/test/reactor-resolvers.test.js.map +1 -1
  210. package/dist/test/reactor-subgraph-permissions.test.js +7 -36
  211. package/dist/test/reactor-subgraph-permissions.test.js.map +1 -1
  212. package/dist/test/subscriptions.test.js +2 -0
  213. package/dist/test/subscriptions.test.js.map +1 -1
  214. package/dist/test/utils/gql-resolver-bridge.d.ts +4 -1
  215. package/dist/test/utils/gql-resolver-bridge.d.ts.map +1 -1
  216. package/dist/test/utils/gql-resolver-bridge.js +36 -7
  217. package/dist/test/utils/gql-resolver-bridge.js.map +1 -1
  218. package/dist/tsconfig.tsbuildinfo +1 -1
  219. package/package.json +46 -55
  220. package/dist/src/graphql/drive-subgraph.d.ts +0 -25
  221. package/dist/src/graphql/drive-subgraph.d.ts.map +0 -1
  222. package/dist/src/graphql/drive-subgraph.js +0 -487
  223. package/dist/src/graphql/drive-subgraph.js.map +0 -1
  224. package/dist/src/graphql/system/system-subgraph.d.ts +0 -49
  225. package/dist/src/graphql/system/system-subgraph.d.ts.map +0 -1
  226. package/dist/src/graphql/system/system-subgraph.js +0 -130
  227. package/dist/src/graphql/system/system-subgraph.js.map +0 -1
  228. package/dist/src/sync/types.d.ts +0 -10
  229. package/dist/src/sync/types.d.ts.map +0 -1
  230. package/dist/src/sync/types.js +0 -2
  231. package/dist/src/sync/types.js.map +0 -1
  232. package/dist/src/sync/utils.d.ts +0 -7
  233. package/dist/src/sync/utils.d.ts.map +0 -1
  234. package/dist/src/sync/utils.js +0 -78
  235. package/dist/src/sync/utils.js.map +0 -1
  236. package/dist/test/drive-handlers.d.ts +0 -4
  237. package/dist/test/drive-handlers.d.ts.map +0 -1
  238. package/dist/test/drive-handlers.js +0 -39
  239. package/dist/test/drive-handlers.js.map +0 -1
  240. package/dist/test/drive-subgraph-permissions.test.d.ts +0 -2
  241. package/dist/test/drive-subgraph-permissions.test.d.ts.map +0 -1
  242. package/dist/test/drive-subgraph-permissions.test.js +0 -195
  243. package/dist/test/drive-subgraph-permissions.test.js.map +0 -1
  244. package/dist/test/drive.test.d.ts +0 -2
  245. package/dist/test/drive.test.d.ts.map +0 -1
  246. package/dist/test/drive.test.js +0 -142
  247. package/dist/test/drive.test.js.map +0 -1
  248. package/dist/test/pull-responder-transmitter.test.d.ts +0 -2
  249. package/dist/test/pull-responder-transmitter.test.d.ts.map +0 -1
  250. package/dist/test/pull-responder-transmitter.test.js +0 -220
  251. package/dist/test/pull-responder-transmitter.test.js.map +0 -1
  252. package/dist/test/push-transmitter.test.d.ts +0 -2
  253. package/dist/test/push-transmitter.test.d.ts.map +0 -1
  254. package/dist/test/push-transmitter.test.js +0 -179
  255. package/dist/test/push-transmitter.test.js.map +0 -1
  256. package/dist/test/system.test.d.ts +0 -2
  257. package/dist/test/system.test.d.ts.map +0 -1
  258. package/dist/test/system.test.js +0 -211
  259. package/dist/test/system.test.js.map +0 -1
  260. package/dist/test/three-reactor-gql-sync.test.d.ts +0 -2
  261. package/dist/test/three-reactor-gql-sync.test.d.ts.map +0 -1
  262. package/dist/test/three-reactor-gql-sync.test.js +0 -368
  263. package/dist/test/three-reactor-gql-sync.test.js.map +0 -1
  264. package/dist/test/two-reactor-gql-sync.test.d.ts +0 -2
  265. package/dist/test/two-reactor-gql-sync.test.d.ts.map +0 -1
  266. package/dist/test/two-reactor-gql-sync.test.js +0 -348
  267. package/dist/test/two-reactor-gql-sync.test.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powerhousedao/reactor-api",
3
- "version": "6.0.0-dev.8",
3
+ "version": "6.0.0-dev.81",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "repository": {
@@ -12,6 +12,14 @@
12
12
  "import": "./dist/index.js",
13
13
  "types": "./dist/index.d.ts"
14
14
  },
15
+ "./graphql": {
16
+ "import": "./dist/graphql/index.js",
17
+ "types": "./dist/graphql/index.d.ts"
18
+ },
19
+ "./graphql/*": {
20
+ "import": "./dist/graphql/*.js",
21
+ "types": "./dist/graphql/*.d.ts"
22
+ },
15
23
  "./test": {
16
24
  "import": "./test/index.ts"
17
25
  }
@@ -32,87 +40,70 @@
32
40
  "@apollo/server": "^5.0.0",
33
41
  "@apollo/subgraph": "^2.11.3",
34
42
  "@as-integrations/express4": "^1.1.2",
35
- "@electric-sql/pglite": "0.2.17",
36
- "@graphql-typed-document-node/core": "^3.2.0",
43
+ "@electric-sql/pglite": "0.3.15",
37
44
  "@opentelemetry/auto-instrumentations-node": "^0.57.1",
45
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.57.2",
38
46
  "@opentelemetry/exporter-trace-otlp-http": "^0.57.2",
47
+ "@opentelemetry/sdk-metrics": "^1.29.0",
39
48
  "@opentelemetry/resources": "^1.29.0",
40
49
  "@opentelemetry/sdk-node": "^0.57.2",
41
50
  "@opentelemetry/sdk-trace-base": "^1.29.0",
42
51
  "@opentelemetry/semantic-conventions": "^1.29.0",
43
52
  "@originjs/vite-plugin-commonjs": "^1.0.3",
44
- "@powerhousedao/analytics-engine-core": "^0.5.0",
45
- "@powerhousedao/analytics-engine-graphql": "^0.4.0",
46
- "@powerhousedao/analytics-engine-pg": "^0.6.0",
47
- "@powerhousedao/document-engineering": "^1.40.1",
53
+ "@powerhousedao/document-engineering": "1.40.1",
48
54
  "body-parser": "^1.20.3",
49
- "change-case": "^5.4.4",
55
+ "change-case": "5.4.4",
50
56
  "cors": "^2.8.5",
51
57
  "devcert": "^1.2.2",
52
58
  "dotenv": "^16.4.5",
53
- "drizzle-kit": "^0.25.0",
54
- "drizzle-orm": "^0.34.1",
55
- "ethers": "^6.0.8",
56
59
  "express": "^4.21.1",
57
- "graphql": "^16.11.0",
60
+ "graphql": "16.12.0",
58
61
  "graphql-subscriptions": "^3.0.0",
59
62
  "graphql-type-json": "^0.3.2",
60
63
  "graphql-ws": "^6.0.6",
61
- "jsonwebtoken": "^9.0.2",
62
- "knex": "^3.1.0",
63
- "knex-pglite": "^0.10.0",
64
- "kysely": "^0.28.2",
65
- "kysely-knex": "^0.2.0",
66
- "ms": "^2.1.3",
67
- "nanoevents": "^9.0.0",
68
- "pg": "^8.13.0",
69
- "read-pkg": "^9.0.1",
70
- "siwe": "^2.3.2",
71
- "uuid": "^9.0.1",
72
- "wildcard-match": "^5.1.3",
64
+ "knex": "3.1.0",
65
+ "knex-pglite": "0.13.0",
66
+ "kysely": "0.28.11",
67
+ "kysely-knex": "0.2.0",
68
+ "path-to-regexp": "^8.3.0",
69
+ "pg": "8.18.0",
70
+ "read-pkg": "10.1.0",
73
71
  "ws": "^8.18.3",
74
- "zod": "^4.3.5",
75
- "@powerhousedao/reactor": "6.0.0-dev.8",
76
- "@powerhousedao/config": "6.0.0-dev.8",
77
- "@powerhousedao/reactor-mcp": "6.0.0-dev.8",
78
- "@renown/sdk": "6.0.0-dev.8",
79
- "document-drive": "6.0.0-dev.8",
80
- "document-model": "6.0.0-dev.8"
72
+ "zod": "4.3.6",
73
+ "@powerhousedao/analytics-engine-core": "6.0.0-dev.81",
74
+ "@powerhousedao/analytics-engine-graphql": "6.0.0-dev.81",
75
+ "@powerhousedao/analytics-engine-pg": "6.0.0-dev.81",
76
+ "@powerhousedao/reactor": "6.0.0-dev.81",
77
+ "@powerhousedao/reactor-mcp": "6.0.0-dev.81",
78
+ "@powerhousedao/config": "6.0.0-dev.81",
79
+ "@renown/sdk": "6.0.0-dev.81",
80
+ "document-drive": "6.0.0-dev.81",
81
+ "document-model": "6.0.0-dev.81",
82
+ "@powerhousedao/shared": "6.0.0-dev.81"
81
83
  },
82
84
  "devDependencies": {
83
- "@graphql-codegen/cli": "^5.0.0",
84
- "@graphql-codegen/client-preset": "^4.1.0",
85
- "@graphql-codegen/typed-document-node": "^5.0.1",
86
- "@graphql-codegen/typescript": "^4.0.1",
87
- "@graphql-codegen/typescript-generic-sdk": "^4.0.2",
88
- "@graphql-codegen/typescript-graphql-request": "^6.2.0",
89
- "@graphql-codegen/typescript-operations": "^4.0.1",
90
- "@graphql-codegen/typescript-resolvers": "^4.0.1",
91
- "@graphql-tools/graphql-file-loader": "^8.0.0",
92
- "@graphql-tools/load": "^8.0.0",
85
+ "@graphql-codegen/cli": "6.1.1",
86
+ "@graphql-codegen/typescript": "5.0.7",
87
+ "@graphql-codegen/typescript-generic-sdk": "4.1.0",
88
+ "@graphql-codegen/typescript-operations": "5.0.7",
89
+ "@graphql-codegen/typescript-resolvers": "5.1.5",
93
90
  "@types/body-parser": "^1.19.5",
94
91
  "@types/cors": "^2.8.17",
95
92
  "@types/express": "^4.17.25",
96
- "@types/jsonwebtoken": "^9.0.7",
97
- "@types/ms": "^0.7.34",
98
- "@types/node": "^24.6.1",
99
- "@types/pg": "^8.11.10",
93
+ "@types/node": "25.2.3",
94
+ "@types/pg": "8.16.0",
100
95
  "@types/ws": "^8.18.1",
101
- "copyfiles": "^2.4.1",
102
- "esbuild": "^0.24.0",
103
- "graphql-codegen-typescript-validation-schema": "^0.12.0",
104
- "graphql-tag": "^2.12.6",
105
- "kysely-pglite-dialect": "^1.2.0",
96
+ "copyfiles": "2.4.1",
97
+ "graphql-tag": "2.12.6",
106
98
  "msw": "^2.7.3",
107
- "tinybench": "^3.1.1",
108
- "vite": "^7.1.9",
109
- "vitest": "^3.2.4"
99
+ "vite": "7.3.1",
100
+ "vitest": "3.2.4"
110
101
  },
111
102
  "scripts": {
112
103
  "tsc": "tsc",
113
- "build": "pnpm tsc --build && copyfiles -u 0 \"src/**/*.graphql\" dist/",
104
+ "build:misc": "copyfiles -u 0 \"src/**/*.graphql\" dist/",
114
105
  "lint": "eslint",
115
- "test": "vitest run",
106
+ "test": "vitest --run",
116
107
  "bench": "vitest bench",
117
108
  "codegen": "graphql-codegen --config codegen.ts && prettier --write src/graphql/reactor/gen/*.ts && eslint --fix src/graphql/reactor/gen/*.ts --no-warn-ignored",
118
109
  "codegen:watch": "graphql-codegen --config codegen.ts --watch"
@@ -1,25 +0,0 @@
1
- import type { GraphQLResolverMap } from "@apollo/subgraph/dist/schema-helper/resolverMap.js";
2
- import type { Context, GqlOperation, SubgraphArgs } from "@powerhousedao/reactor-api";
3
- import type { FileNode } from "document-drive";
4
- import { BaseSubgraph } from "./base-subgraph.js";
5
- export declare const DocumentDriveResolvers: {
6
- DocumentDrive_Node: {
7
- __resolveType: (obj: FileNode) => string;
8
- };
9
- DocumentDrive: {
10
- operations: (obj: unknown, { skip, first }: {
11
- skip?: number;
12
- first?: number;
13
- }, ctx: Context) => GqlOperation[];
14
- };
15
- };
16
- export declare class DriveSubgraph extends BaseSubgraph {
17
- private logger;
18
- constructor(args: SubgraphArgs);
19
- name: string;
20
- typeDefs: import("graphql").DocumentNode;
21
- private getDriveIdBySlugOrId;
22
- private getDriveBySlugOrId;
23
- resolvers: GraphQLResolverMap<Context>;
24
- }
25
- //# sourceMappingURL=drive-subgraph.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"drive-subgraph.d.ts","sourceRoot":"","sources":["../../../src/graphql/drive-subgraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,KAAK,EACV,OAAO,EAEP,YAAY,EAEZ,YAAY,EACb,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAGV,QAAQ,EAMT,MAAM,gBAAgB,CAAC;AAgBxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASlD,eAAO,MAAM,sBAAsB;;6BAEV,QAAQ;;;;gBAsGL,CAAC;iBAClB,CAAC;;;CA9FX,CAAC;AAEF,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAGX;gBAES,IAAI,EAAE,YAAY;IAS9B,IAAI,SAAc;IAClB,QAAQ,iCAyKN;YAEY,oBAAoB;YASpB,kBAAkB;IAWhC,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,CA+WpC;CACH"}
@@ -1,487 +0,0 @@
1
- import { pascalCase } from "change-case";
2
- import { childLogger, PullResponderTransmitter, responseForDocument, responseForDrive, } from "document-drive";
3
- import { generateId } from "document-model/core";
4
- import { GraphQLError } from "graphql";
5
- import { gql } from "graphql-tag";
6
- import { processAcknowledge, processGetStrands, processPushUpdate, } from "../sync/utils.js";
7
- import { BaseSubgraph } from "./base-subgraph.js";
8
- import { buildGraphQlDriveDocument, IDocumentGraphql } from "./utils.js";
9
- const driveKindTypeNames = {
10
- file: "DocumentDrive_FileNode",
11
- folder: "DocumentDrive_FolderNode",
12
- };
13
- export const DocumentDriveResolvers = {
14
- DocumentDrive_Node: {
15
- __resolveType: (obj) => {
16
- return obj.documentType
17
- ? driveKindTypeNames.file
18
- : driveKindTypeNames.folder;
19
- },
20
- },
21
- DocumentDrive: {
22
- operations: IDocumentGraphql.resolvers.IDocument.operations,
23
- },
24
- };
25
- export class DriveSubgraph extends BaseSubgraph {
26
- logger = childLogger([
27
- "DriveSubgraph",
28
- Math.floor(Math.random() * 999).toString(),
29
- ]);
30
- constructor(args) {
31
- super(args);
32
- this.logger.verbose(`constructor()`);
33
- }
34
- // Note: This GQL declaration depends on the document drive subgraph already
35
- // being registered. If the document drive subgraph is not registered, this
36
- // will throw an error as it relies on those types.
37
- name = "d/:drive";
38
- typeDefs = gql `
39
- type DriveMeta {
40
- preferredEditor: String
41
- }
42
-
43
- extend type DocumentDrive_DocumentDriveState {
44
- meta: DriveMeta
45
- }
46
- extend type DocumentDrive {
47
- meta: DriveMeta
48
- slug: String!
49
- }
50
-
51
- type Query {
52
- system: System
53
- drive: DriveInfo
54
- driveDocument: DocumentDrive
55
- document(id: String!): DriveDocument
56
- documents: [String!]!
57
- }
58
-
59
- type Mutation {
60
- registerPullResponderListener(
61
- filter: InputListenerFilter!
62
- listenerId: String
63
- ): DocumentDrive_Listener
64
- pushUpdates(strands: [InputStrandUpdate!]): [ListenerRevision!]!
65
- acknowledge(
66
- listenerId: String!
67
- revisions: [ListenerRevisionInput]
68
- ): Boolean
69
- }
70
-
71
- input InputOperationSignerUser {
72
- address: String!
73
- networkId: String!
74
- chainId: Int!
75
- }
76
-
77
- type OperationSignerUser {
78
- address: String!
79
- networkId: String!
80
- chainId: Int!
81
- }
82
-
83
- input InputOperationSignerApp {
84
- name: String!
85
- key: String!
86
- }
87
-
88
- type OperationSignerApp {
89
- name: String!
90
- key: String!
91
- }
92
-
93
- type OperationSigner {
94
- app: OperationSignerApp
95
- user: OperationSignerUser
96
- signatures: [[String!]]!
97
- }
98
-
99
- input InputOperationSigner {
100
- app: InputOperationSignerApp
101
- user: InputOperationSignerUser
102
- signatures: [[String!]]!
103
- }
104
-
105
- type OperationContext {
106
- signer: OperationSigner
107
- }
108
-
109
- input InputOperationContext {
110
- signer: InputOperationSigner
111
- }
112
-
113
- input InputOperationUpdate {
114
- index: Int!
115
- skip: Int
116
- type: String!
117
- id: String!
118
- actionId: String!
119
- input: String!
120
- hash: String!
121
- timestampUtcMs: String!
122
- error: String
123
- context: InputOperationContext
124
- }
125
-
126
- type OperationUpdate {
127
- index: Int!
128
- skip: Int
129
- type: String!
130
- id: String!
131
- actionId: String!
132
- input: String!
133
- hash: String!
134
- timestampUtcMs: String!
135
- error: String
136
- context: OperationContext
137
- }
138
-
139
- type StrandUpdate {
140
- driveId: String!
141
- documentId: String!
142
- documentType: String!
143
- scope: String!
144
- branch: String!
145
- operations: [OperationUpdate!]!
146
- }
147
-
148
- input InputStrandUpdate {
149
- driveId: String!
150
- documentId: String!
151
- documentType: String!
152
- scope: String!
153
- branch: String!
154
- operations: [InputOperationUpdate!]!
155
- }
156
-
157
- input InputListenerFilter {
158
- documentType: [String!]
159
- documentId: [String!]
160
- scope: [String!]
161
- branch: [String!]
162
- }
163
-
164
- enum UpdateStatus {
165
- SUCCESS
166
- MISSING
167
- CONFLICT
168
- ERROR
169
- }
170
-
171
- input ListenerRevisionInput {
172
- driveId: String!
173
- documentId: String!
174
- documentType: String!
175
- scope: String!
176
- branch: String!
177
- status: UpdateStatus!
178
- revision: Int!
179
- }
180
-
181
- type ListenerRevision {
182
- driveId: String!
183
- documentId: String!
184
- documentType: String!
185
- scope: String!
186
- branch: String!
187
- status: UpdateStatus!
188
- revision: Int!
189
- error: String
190
- }
191
-
192
- type System {
193
- sync: Sync
194
- }
195
-
196
- type Sync {
197
- strands(listenerId: ID!, since: String): [StrandUpdate!]!
198
- }
199
-
200
- type DriveInfo {
201
- id: String!
202
- name: String!
203
- slug: String!
204
- meta: DriveMeta
205
- icon: String
206
- }
207
- `;
208
- async getDriveIdBySlugOrId(slugOrId) {
209
- try {
210
- return await this.reactor.getDriveIdBySlug(slugOrId);
211
- }
212
- catch {
213
- const drive = await this.reactor.getDrive(slugOrId);
214
- return drive.header.id;
215
- }
216
- }
217
- async getDriveBySlugOrId(slugOrId) {
218
- try {
219
- return await this.reactor.getDriveBySlug(slugOrId);
220
- }
221
- catch {
222
- const drive = await this.reactor.getDrive(slugOrId);
223
- return drive;
224
- }
225
- }
226
- resolvers = {
227
- Asset: {
228
- __resolveType: (obj) => {
229
- return obj.type;
230
- },
231
- },
232
- Node: {
233
- __resolveType: (obj) => {
234
- return obj.documentType
235
- ? driveKindTypeNames.file
236
- : driveKindTypeNames.folder;
237
- },
238
- },
239
- Operation: {
240
- type: (operation) => "type" in operation ? operation.type : operation.action.type,
241
- id: (operation) => operation.id,
242
- },
243
- DriveDocument: {
244
- operations: IDocumentGraphql.resolvers.IDocument.operations,
245
- },
246
- ...DocumentDriveResolvers,
247
- Query: {
248
- drive: async (_, args, ctx) => {
249
- this.logger.verbose(`drive()`, JSON.stringify(args));
250
- if (!ctx.driveId)
251
- throw new Error("Drive ID is required");
252
- const drive = await this.getDriveBySlugOrId(ctx.driveId);
253
- return responseForDrive(drive);
254
- },
255
- driveDocument: async (_, args, ctx) => {
256
- this.logger.verbose(`driveDocument()`, JSON.stringify(args));
257
- if (!ctx.driveId)
258
- throw new Error("Drive ID is required");
259
- const drive = await this.getDriveBySlugOrId(ctx.driveId);
260
- ctx.document = drive;
261
- return buildGraphQlDriveDocument(drive);
262
- },
263
- documents: async (_, args, ctx) => {
264
- this.logger.verbose(`documents(drive: ${ctx.driveId})`, args);
265
- if (!ctx.driveId)
266
- throw new Error("Drive ID is required");
267
- const driveId = await this.getDriveIdBySlugOrId(ctx.driveId);
268
- const documents = await this.reactor.getDocuments(driveId);
269
- return documents;
270
- },
271
- document: async (_, { id }, ctx) => {
272
- this.logger.verbose(`document(drive: ${ctx.driveId}, id: ${id})`);
273
- if (!ctx.driveId)
274
- throw new Error("Drive ID is required");
275
- const driveId = await this.getDriveIdBySlugOrId(ctx.driveId);
276
- if (id !== driveId) {
277
- const driveDocuments = await this.reactor.getDocuments(driveId);
278
- if (!driveDocuments.includes(id)) {
279
- throw new GraphQLError("Document is not part of this drive");
280
- }
281
- }
282
- const document = await this.reactor.getDocument(id);
283
- const dms = this.reactor.getDocumentModelModules();
284
- const dm = dms.find(({ documentModel }) => documentModel.global.id === document.header.documentType);
285
- let node;
286
- const driveDocument = await this.reactor.getDrive(driveId);
287
- if (driveDocument?.state?.global?.nodes) {
288
- node = driveDocument.state.global.nodes.find((node) => node.id === id);
289
- }
290
- // eslint-disable-next-line
291
- const globalState = document.state.global;
292
- if (!globalState)
293
- throw new Error("Document was found with no global state");
294
- const typeName = pascalCase((dm?.documentModel.global.name || "").replaceAll("/", " "));
295
- return responseForDocument(document, typeName, node?.name);
296
- },
297
- system: () => ({ sync: {} }),
298
- },
299
- Mutation: {
300
- registerPullResponderListener: async (_, { filter, listenerId }, ctx) => {
301
- this.logger.verbose(`registerPullResponderListener(drive: ${ctx.driveId})`, filter);
302
- if (!ctx.driveId) {
303
- throw new Error("Drive ID is required");
304
- }
305
- const reactorDriveId = await this.getDriveIdBySlugOrId(ctx.driveId);
306
- // Check global roles first
307
- const isGlobalAdmin = ctx.isAdmin?.(ctx.user?.address ?? "");
308
- const isGlobalUser = ctx.isUser?.(ctx.user?.address ?? "");
309
- const isGlobalGuest = ctx.isGuest?.(ctx.user?.address ?? "") ||
310
- process.env.FREE_ENTRY === "true";
311
- // If user has a global role, allow access
312
- const hasGlobalAccess = isGlobalAdmin || isGlobalUser || isGlobalGuest;
313
- // If no global access, check document-level permissions
314
- if (!hasGlobalAccess && this.documentPermissionService) {
315
- const canRead = await this.documentPermissionService.canReadDocument(reactorDriveId, ctx.user?.address);
316
- if (!canRead) {
317
- this.logger.warn(`registerPullResponderListener rejected: user ${ctx.user?.address ?? "anonymous"} lacks read permission for drive ${reactorDriveId}`);
318
- throw new GraphQLError("Forbidden: insufficient permissions to read from this drive");
319
- }
320
- }
321
- else if (!hasGlobalAccess) {
322
- throw new GraphQLError("Forbidden");
323
- }
324
- const driveId = await this.getDriveIdBySlugOrId(ctx.driveId);
325
- // Create the listener and transmitter
326
- const uuid = listenerId ?? generateId();
327
- const listener = {
328
- driveId: driveId,
329
- listenerId: uuid,
330
- block: false,
331
- filter,
332
- system: false,
333
- label: `Pullresponder #${uuid}`,
334
- callInfo: {
335
- data: "",
336
- name: "PullResponder",
337
- transmitterType: "PullResponder",
338
- },
339
- };
340
- // TODO: circular reference
341
- // TODO: once we have DI, remove this and pass around
342
- const listenerManager = this.reactor.listeners;
343
- listener.transmitter = new PullResponderTransmitter(listener, listenerManager);
344
- // set the listener on the manager directly (bypassing operations)
345
- try {
346
- await listenerManager.setListener(driveId, listener);
347
- }
348
- catch (error) {
349
- this.logger.error(`Failed to register ephemeral listener: ${error}`);
350
- throw new Error(`Listener couldn't be registered: ${error}`);
351
- }
352
- // for backwards compatibility: return everything but the transmitter
353
- return {
354
- driveId: listener.driveId,
355
- listenerId: listener.listenerId,
356
- label: listener.label,
357
- block: listener.block,
358
- system: listener.system,
359
- filter: listener.filter,
360
- callInfo: listener.callInfo,
361
- };
362
- },
363
- pushUpdates: async (_, { strands: strandsGql }, ctx) => {
364
- if (!ctx.driveId)
365
- throw new Error("Drive ID is required");
366
- const driveId = await this.getDriveIdBySlugOrId(ctx.driveId);
367
- this.logger.verbose(`pushUpdates(drive: slug:${ctx.driveId} id:${driveId})`, strandsGql);
368
- // Check global roles first (write requires admin or user, not guest)
369
- const isGlobalAdmin = ctx.isAdmin?.(ctx.user?.address ?? "");
370
- const isGlobalUser = ctx.isUser?.(ctx.user?.address ?? "");
371
- // If user has global write access, allow
372
- const hasGlobalWriteAccess = isGlobalAdmin || isGlobalUser;
373
- // If no global write access, check document-level permissions
374
- if (!hasGlobalWriteAccess && this.documentPermissionService) {
375
- const canWrite = await this.documentPermissionService.canWriteDocument(driveId, ctx.user?.address);
376
- if (!canWrite) {
377
- this.logger.warn(`pushUpdates rejected: user ${ctx.user?.address ?? "anonymous"} lacks write permission for drive ${driveId}`);
378
- throw new GraphQLError("Forbidden: insufficient permissions to write to this drive");
379
- }
380
- }
381
- else if (!hasGlobalWriteAccess) {
382
- throw new GraphQLError("Forbidden");
383
- }
384
- // translate data types
385
- const strands = strandsGql.map((strandGql) => {
386
- return {
387
- operations: strandGql.operations.map((op) => ({
388
- index: op.index,
389
- skip: op.skip ?? 0,
390
- timestampUtcMs: op.timestampUtcMs,
391
- hash: op.hash,
392
- id: op.id,
393
- // Map GraphQL context to Action.context (only signer is defined in schema)
394
- action: {
395
- id: op.actionId,
396
- type: op.type,
397
- timestampUtcMs: op.timestampUtcMs,
398
- scope: strandGql.scope,
399
- input: JSON.parse(op.input),
400
- context: op.context,
401
- },
402
- })),
403
- documentId: strandGql.documentId,
404
- documentType: strandGql.documentType,
405
- driveId: strandGql.driveId,
406
- scope: strandGql.scope,
407
- branch: strandGql.branch,
408
- };
409
- });
410
- // return a list of listener revisions
411
- return await Promise.all(strands.map((strand) => processPushUpdate(this.reactor, strand)));
412
- },
413
- acknowledge: async (_, { listenerId, revisions, }, ctx) => {
414
- if (!listenerId || !revisions)
415
- return false;
416
- if (!ctx.driveId)
417
- throw new Error("Drive ID is required");
418
- const driveId = await this.getDriveIdBySlugOrId(ctx.driveId);
419
- this.logger.verbose(`acknowledge(drive: ${ctx.driveId}/${driveId}, listenerId: ${listenerId})`, revisions);
420
- // translate data types
421
- const validEntries = revisions
422
- .filter((r) => r !== null)
423
- .map((e) => ({
424
- driveId: e.driveId,
425
- documentId: e.documentId,
426
- documentType: e.documentType,
427
- scope: e.scope,
428
- branch: e.branch,
429
- revision: e.revision,
430
- status: e.status,
431
- }));
432
- // return a boolean indicating if the acknowledge was successful
433
- return await processAcknowledge(this.reactor, driveId, listenerId, validEntries);
434
- },
435
- },
436
- System: {},
437
- Sync: {
438
- strands: async (_, { listenerId, since, }, ctx) => {
439
- if (!ctx.driveId)
440
- throw new Error("Drive ID is required");
441
- const driveId = await this.getDriveIdBySlugOrId(ctx.driveId);
442
- this.logger.verbose(`strands(drive: ${ctx.driveId}/${driveId}, listenerId: ${listenerId}, since:${since})`);
443
- // Check global roles first
444
- const isGlobalAdmin = ctx.isAdmin?.(ctx.user?.address ?? "");
445
- const isGlobalUser = ctx.isUser?.(ctx.user?.address ?? "");
446
- const isGlobalGuest = ctx.isGuest?.(ctx.user?.address ?? "") ||
447
- process.env.FREE_ENTRY === "true";
448
- // If user has a global role, allow access
449
- const hasGlobalAccess = isGlobalAdmin || isGlobalUser || isGlobalGuest;
450
- // If no global access, check document-level permissions
451
- if (!hasGlobalAccess && this.documentPermissionService) {
452
- const canRead = await this.documentPermissionService.canReadDocument(driveId, ctx.user?.address);
453
- if (!canRead) {
454
- this.logger.warn(`strands filtered: user ${ctx.user?.address ?? "anonymous"} lacks read permission for drive ${driveId}`);
455
- return []; // Return empty for drives without permission
456
- }
457
- }
458
- else if (!hasGlobalAccess) {
459
- return []; // Return empty if no access
460
- }
461
- // get the requested strand updates
462
- const strands = await processGetStrands(this.reactor, driveId, listenerId, since);
463
- // translate data types
464
- return strands.map((update) => ({
465
- driveId: update.driveId,
466
- documentId: update.documentId,
467
- documentType: update.documentType,
468
- scope: update.scope,
469
- branch: update.branch,
470
- operations: update.operations.map((op) => ({
471
- index: op.index,
472
- skip: op.skip,
473
- // no extra name field; GraphQL schema exposes `type`
474
- input: JSON.stringify(op.input),
475
- hash: op.hash,
476
- timestampUtcMs: op.timestampUtcMs,
477
- type: op.type,
478
- context: op.context,
479
- id: op.id,
480
- actionId: op.actionId,
481
- })),
482
- }));
483
- },
484
- },
485
- };
486
- }
487
- //# sourceMappingURL=drive-subgraph.js.map