@powerhousedao/reactor-api 6.0.0-dev.2 → 6.0.0-dev.200

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 (318) hide show
  1. package/README.md +6 -0
  2. package/dist/index.d.mts +2943 -0
  3. package/dist/index.d.mts.map +1 -0
  4. package/dist/index.mjs +6375 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/dist/src/packages/https-hooks.d.mts +39 -0
  7. package/dist/src/packages/https-hooks.d.mts.map +1 -0
  8. package/dist/src/packages/https-hooks.mjs +79 -0
  9. package/dist/src/packages/https-hooks.mjs.map +1 -0
  10. package/dist/src/packages/vite-loader.d.mts +29 -0
  11. package/dist/src/packages/vite-loader.d.mts.map +1 -0
  12. package/dist/src/packages/vite-loader.mjs +142 -0
  13. package/dist/src/packages/vite-loader.mjs.map +1 -0
  14. package/dist/types-Do4QTfT3.d.mts +37 -0
  15. package/dist/types-Do4QTfT3.d.mts.map +1 -0
  16. package/dist/utils-DEEhP99G.mjs +286 -0
  17. package/dist/utils-DEEhP99G.mjs.map +1 -0
  18. package/package.json +71 -65
  19. package/dist/codegen.d.ts +0 -4
  20. package/dist/codegen.d.ts.map +0 -1
  21. package/dist/codegen.js +0 -38
  22. package/dist/codegen.js.map +0 -1
  23. package/dist/index.d.ts +0 -14
  24. package/dist/index.d.ts.map +0 -1
  25. package/dist/index.js +0 -14
  26. package/dist/index.js.map +0 -1
  27. package/dist/src/config.d.ts +0 -7
  28. package/dist/src/config.d.ts.map +0 -1
  29. package/dist/src/config.js +0 -10
  30. package/dist/src/config.js.map +0 -1
  31. package/dist/src/graphql/analytics-subgraph.d.ts +0 -14
  32. package/dist/src/graphql/analytics-subgraph.d.ts.map +0 -1
  33. package/dist/src/graphql/analytics-subgraph.js +0 -26
  34. package/dist/src/graphql/analytics-subgraph.js.map +0 -1
  35. package/dist/src/graphql/auth/index.d.ts +0 -2
  36. package/dist/src/graphql/auth/index.d.ts.map +0 -1
  37. package/dist/src/graphql/auth/index.js +0 -2
  38. package/dist/src/graphql/auth/index.js.map +0 -1
  39. package/dist/src/graphql/auth/resolvers.d.ts +0 -149
  40. package/dist/src/graphql/auth/resolvers.d.ts.map +0 -1
  41. package/dist/src/graphql/auth/resolvers.js +0 -173
  42. package/dist/src/graphql/auth/resolvers.js.map +0 -1
  43. package/dist/src/graphql/auth/schema.graphql +0 -173
  44. package/dist/src/graphql/auth/subgraph.d.ts +0 -177
  45. package/dist/src/graphql/auth/subgraph.d.ts.map +0 -1
  46. package/dist/src/graphql/auth/subgraph.js +0 -340
  47. package/dist/src/graphql/auth/subgraph.js.map +0 -1
  48. package/dist/src/graphql/base-subgraph.d.ts +0 -20
  49. package/dist/src/graphql/base-subgraph.d.ts.map +0 -1
  50. package/dist/src/graphql/base-subgraph.js +0 -34
  51. package/dist/src/graphql/base-subgraph.js.map +0 -1
  52. package/dist/src/graphql/document-model-subgraph.d.ts +0 -51
  53. package/dist/src/graphql/document-model-subgraph.d.ts.map +0 -1
  54. package/dist/src/graphql/document-model-subgraph.js +0 -104
  55. package/dist/src/graphql/document-model-subgraph.js.map +0 -1
  56. package/dist/src/graphql/drive-subgraph.d.ts +0 -25
  57. package/dist/src/graphql/drive-subgraph.d.ts.map +0 -1
  58. package/dist/src/graphql/drive-subgraph.js +0 -487
  59. package/dist/src/graphql/drive-subgraph.js.map +0 -1
  60. package/dist/src/graphql/graphql-manager.d.ts +0 -46
  61. package/dist/src/graphql/graphql-manager.d.ts.map +0 -1
  62. package/dist/src/graphql/graphql-manager.js +0 -416
  63. package/dist/src/graphql/graphql-manager.js.map +0 -1
  64. package/dist/src/graphql/index.d.ts +0 -9
  65. package/dist/src/graphql/index.d.ts.map +0 -1
  66. package/dist/src/graphql/index.js +0 -9
  67. package/dist/src/graphql/index.js.map +0 -1
  68. package/dist/src/graphql/playground.d.ts +0 -2
  69. package/dist/src/graphql/playground.d.ts.map +0 -1
  70. package/dist/src/graphql/playground.js +0 -74
  71. package/dist/src/graphql/playground.js.map +0 -1
  72. package/dist/src/graphql/reactor/adapters.d.ts +0 -54
  73. package/dist/src/graphql/reactor/adapters.d.ts.map +0 -1
  74. package/dist/src/graphql/reactor/adapters.js +0 -236
  75. package/dist/src/graphql/reactor/adapters.js.map +0 -1
  76. package/dist/src/graphql/reactor/factory.d.ts +0 -84
  77. package/dist/src/graphql/reactor/factory.d.ts.map +0 -1
  78. package/dist/src/graphql/reactor/factory.js +0 -7
  79. package/dist/src/graphql/reactor/factory.js.map +0 -1
  80. package/dist/src/graphql/reactor/gen/graphql.d.ts +0 -1210
  81. package/dist/src/graphql/reactor/gen/graphql.d.ts.map +0 -1
  82. package/dist/src/graphql/reactor/gen/graphql.js +0 -496
  83. package/dist/src/graphql/reactor/gen/graphql.js.map +0 -1
  84. package/dist/src/graphql/reactor/index.d.ts +0 -4
  85. package/dist/src/graphql/reactor/index.d.ts.map +0 -1
  86. package/dist/src/graphql/reactor/index.js +0 -4
  87. package/dist/src/graphql/reactor/index.js.map +0 -1
  88. package/dist/src/graphql/reactor/operations.graphql +0 -253
  89. package/dist/src/graphql/reactor/pubsub.d.ts +0 -27
  90. package/dist/src/graphql/reactor/pubsub.d.ts.map +0 -1
  91. package/dist/src/graphql/reactor/pubsub.js +0 -93
  92. package/dist/src/graphql/reactor/pubsub.js.map +0 -1
  93. package/dist/src/graphql/reactor/requester.d.ts +0 -4
  94. package/dist/src/graphql/reactor/requester.d.ts.map +0 -1
  95. package/dist/src/graphql/reactor/requester.js +0 -22
  96. package/dist/src/graphql/reactor/requester.js.map +0 -1
  97. package/dist/src/graphql/reactor/requester.with-zod.d.ts +0 -4
  98. package/dist/src/graphql/reactor/requester.with-zod.d.ts.map +0 -1
  99. package/dist/src/graphql/reactor/requester.with-zod.js +0 -53
  100. package/dist/src/graphql/reactor/requester.with-zod.js.map +0 -1
  101. package/dist/src/graphql/reactor/resolvers.d.ts +0 -159
  102. package/dist/src/graphql/reactor/resolvers.d.ts.map +0 -1
  103. package/dist/src/graphql/reactor/resolvers.js +0 -501
  104. package/dist/src/graphql/reactor/resolvers.js.map +0 -1
  105. package/dist/src/graphql/reactor/schema.graphql +0 -429
  106. package/dist/src/graphql/reactor/subgraph.d.ts +0 -47
  107. package/dist/src/graphql/reactor/subgraph.d.ts.map +0 -1
  108. package/dist/src/graphql/reactor/subgraph.js +0 -534
  109. package/dist/src/graphql/reactor/subgraph.js.map +0 -1
  110. package/dist/src/graphql/reactor/validation.d.ts +0 -102
  111. package/dist/src/graphql/reactor/validation.d.ts.map +0 -1
  112. package/dist/src/graphql/reactor/validation.js +0 -73
  113. package/dist/src/graphql/reactor/validation.js.map +0 -1
  114. package/dist/src/graphql/system/env/getters.d.ts +0 -2
  115. package/dist/src/graphql/system/env/getters.d.ts.map +0 -1
  116. package/dist/src/graphql/system/env/getters.js +0 -4
  117. package/dist/src/graphql/system/env/getters.js.map +0 -1
  118. package/dist/src/graphql/system/env/index.d.ts +0 -2
  119. package/dist/src/graphql/system/env/index.d.ts.map +0 -1
  120. package/dist/src/graphql/system/env/index.js +0 -5
  121. package/dist/src/graphql/system/env/index.js.map +0 -1
  122. package/dist/src/graphql/system/index.d.ts +0 -3
  123. package/dist/src/graphql/system/index.d.ts.map +0 -1
  124. package/dist/src/graphql/system/index.js +0 -3
  125. package/dist/src/graphql/system/index.js.map +0 -1
  126. package/dist/src/graphql/system/system-subgraph.d.ts +0 -49
  127. package/dist/src/graphql/system/system-subgraph.d.ts.map +0 -1
  128. package/dist/src/graphql/system/system-subgraph.js +0 -130
  129. package/dist/src/graphql/system/system-subgraph.js.map +0 -1
  130. package/dist/src/graphql/system/types.d.ts +0 -2
  131. package/dist/src/graphql/system/types.d.ts.map +0 -1
  132. package/dist/src/graphql/system/types.js +0 -2
  133. package/dist/src/graphql/system/types.js.map +0 -1
  134. package/dist/src/graphql/temp-hack-rwa-type-defs.d.ts +0 -57
  135. package/dist/src/graphql/temp-hack-rwa-type-defs.d.ts.map +0 -1
  136. package/dist/src/graphql/temp-hack-rwa-type-defs.js +0 -2
  137. package/dist/src/graphql/temp-hack-rwa-type-defs.js.map +0 -1
  138. package/dist/src/graphql/types.d.ts +0 -103
  139. package/dist/src/graphql/types.d.ts.map +0 -1
  140. package/dist/src/graphql/types.js +0 -2
  141. package/dist/src/graphql/types.js.map +0 -1
  142. package/dist/src/graphql/utils.d.ts +0 -26
  143. package/dist/src/graphql/utils.d.ts.map +0 -1
  144. package/dist/src/graphql/utils.js +0 -100
  145. package/dist/src/graphql/utils.js.map +0 -1
  146. package/dist/src/graphql/websocket.d.ts +0 -3
  147. package/dist/src/graphql/websocket.d.ts.map +0 -1
  148. package/dist/src/graphql/websocket.js +0 -15
  149. package/dist/src/graphql/websocket.js.map +0 -1
  150. package/dist/src/migrations/001_create_document_permissions.d.ts +0 -4
  151. package/dist/src/migrations/001_create_document_permissions.d.ts.map +0 -1
  152. package/dist/src/migrations/001_create_document_permissions.js +0 -91
  153. package/dist/src/migrations/001_create_document_permissions.js.map +0 -1
  154. package/dist/src/migrations/index.d.ts +0 -10
  155. package/dist/src/migrations/index.d.ts.map +0 -1
  156. package/dist/src/migrations/index.js +0 -56
  157. package/dist/src/migrations/index.js.map +0 -1
  158. package/dist/src/packages/import-loader.d.ts +0 -14
  159. package/dist/src/packages/import-loader.d.ts.map +0 -1
  160. package/dist/src/packages/import-loader.js +0 -52
  161. package/dist/src/packages/import-loader.js.map +0 -1
  162. package/dist/src/packages/import-resolver.d.ts +0 -5
  163. package/dist/src/packages/import-resolver.d.ts.map +0 -1
  164. package/dist/src/packages/import-resolver.js +0 -127
  165. package/dist/src/packages/import-resolver.js.map +0 -1
  166. package/dist/src/packages/package-manager.d.ts +0 -34
  167. package/dist/src/packages/package-manager.d.ts.map +0 -1
  168. package/dist/src/packages/package-manager.js +0 -213
  169. package/dist/src/packages/package-manager.js.map +0 -1
  170. package/dist/src/packages/types.d.ts +0 -35
  171. package/dist/src/packages/types.d.ts.map +0 -1
  172. package/dist/src/packages/types.js +0 -2
  173. package/dist/src/packages/types.js.map +0 -1
  174. package/dist/src/packages/util.d.ts +0 -26
  175. package/dist/src/packages/util.d.ts.map +0 -1
  176. package/dist/src/packages/util.js +0 -97
  177. package/dist/src/packages/util.js.map +0 -1
  178. package/dist/src/packages/vite-loader.d.ts +0 -23
  179. package/dist/src/packages/vite-loader.d.ts.map +0 -1
  180. package/dist/src/packages/vite-loader.js +0 -159
  181. package/dist/src/packages/vite-loader.js.map +0 -1
  182. package/dist/src/server.d.ts +0 -70
  183. package/dist/src/server.d.ts.map +0 -1
  184. package/dist/src/server.js +0 -367
  185. package/dist/src/server.js.map +0 -1
  186. package/dist/src/services/auth.service.d.ts +0 -68
  187. package/dist/src/services/auth.service.d.ts.map +0 -1
  188. package/dist/src/services/auth.service.js +0 -199
  189. package/dist/src/services/auth.service.js.map +0 -1
  190. package/dist/src/services/document-permission.service.d.ts +0 -201
  191. package/dist/src/services/document-permission.service.d.ts.map +0 -1
  192. package/dist/src/services/document-permission.service.js +0 -636
  193. package/dist/src/services/document-permission.service.js.map +0 -1
  194. package/dist/src/sync/types.d.ts +0 -10
  195. package/dist/src/sync/types.d.ts.map +0 -1
  196. package/dist/src/sync/types.js +0 -2
  197. package/dist/src/sync/types.js.map +0 -1
  198. package/dist/src/sync/utils.d.ts +0 -7
  199. package/dist/src/sync/utils.d.ts.map +0 -1
  200. package/dist/src/sync/utils.js +0 -78
  201. package/dist/src/sync/utils.js.map +0 -1
  202. package/dist/src/tracing.d.ts +0 -4
  203. package/dist/src/tracing.d.ts.map +0 -1
  204. package/dist/src/tracing.js +0 -122
  205. package/dist/src/tracing.js.map +0 -1
  206. package/dist/src/types.d.ts +0 -18
  207. package/dist/src/types.d.ts.map +0 -1
  208. package/dist/src/types.js +0 -2
  209. package/dist/src/types.js.map +0 -1
  210. package/dist/src/utils/auth.d.ts +0 -3
  211. package/dist/src/utils/auth.d.ts.map +0 -1
  212. package/dist/src/utils/auth.js +0 -19
  213. package/dist/src/utils/auth.js.map +0 -1
  214. package/dist/src/utils/create-schema.d.ts +0 -11
  215. package/dist/src/utils/create-schema.d.ts.map +0 -1
  216. package/dist/src/utils/create-schema.js +0 -275
  217. package/dist/src/utils/create-schema.js.map +0 -1
  218. package/dist/src/utils/db.d.ts +0 -74
  219. package/dist/src/utils/db.d.ts.map +0 -1
  220. package/dist/src/utils/db.js +0 -101
  221. package/dist/src/utils/db.js.map +0 -1
  222. package/dist/src/utils/index.d.ts +0 -3
  223. package/dist/src/utils/index.d.ts.map +0 -1
  224. package/dist/src/utils/index.js +0 -3
  225. package/dist/src/utils/index.js.map +0 -1
  226. package/dist/test/benchmarks/load.bench.d.ts +0 -2
  227. package/dist/test/benchmarks/load.bench.d.ts.map +0 -1
  228. package/dist/test/benchmarks/load.bench.js +0 -73
  229. package/dist/test/benchmarks/load.bench.js.map +0 -1
  230. package/dist/test/benchmarks/sync.bench.d.ts +0 -2
  231. package/dist/test/benchmarks/sync.bench.d.ts.map +0 -1
  232. package/dist/test/benchmarks/sync.bench.js +0 -119
  233. package/dist/test/benchmarks/sync.bench.js.map +0 -1
  234. package/dist/test/document-permission.service.test.d.ts +0 -2
  235. package/dist/test/document-permission.service.test.d.ts.map +0 -1
  236. package/dist/test/document-permission.service.test.js +0 -480
  237. package/dist/test/document-permission.service.test.js.map +0 -1
  238. package/dist/test/drive-handlers.d.ts +0 -4
  239. package/dist/test/drive-handlers.d.ts.map +0 -1
  240. package/dist/test/drive-handlers.js +0 -39
  241. package/dist/test/drive-handlers.js.map +0 -1
  242. package/dist/test/drive-subgraph-permissions.test.d.ts +0 -2
  243. package/dist/test/drive-subgraph-permissions.test.d.ts.map +0 -1
  244. package/dist/test/drive-subgraph-permissions.test.js +0 -195
  245. package/dist/test/drive-subgraph-permissions.test.js.map +0 -1
  246. package/dist/test/drive.test.d.ts +0 -2
  247. package/dist/test/drive.test.d.ts.map +0 -1
  248. package/dist/test/drive.test.js +0 -142
  249. package/dist/test/drive.test.js.map +0 -1
  250. package/dist/test/identity-integration.test.d.ts +0 -2
  251. package/dist/test/identity-integration.test.d.ts.map +0 -1
  252. package/dist/test/identity-integration.test.js +0 -349
  253. package/dist/test/identity-integration.test.js.map +0 -1
  254. package/dist/test/index.d.ts +0 -3
  255. package/dist/test/index.d.ts.map +0 -1
  256. package/dist/test/index.js +0 -3
  257. package/dist/test/index.js.map +0 -1
  258. package/dist/test/permissions-integration.test.d.ts +0 -2
  259. package/dist/test/permissions-integration.test.d.ts.map +0 -1
  260. package/dist/test/permissions-integration.test.js +0 -421
  261. package/dist/test/permissions-integration.test.js.map +0 -1
  262. package/dist/test/pull-responder-transmitter.test.d.ts +0 -2
  263. package/dist/test/pull-responder-transmitter.test.d.ts.map +0 -1
  264. package/dist/test/pull-responder-transmitter.test.js +0 -220
  265. package/dist/test/pull-responder-transmitter.test.js.map +0 -1
  266. package/dist/test/push-transmitter.test.d.ts +0 -2
  267. package/dist/test/push-transmitter.test.d.ts.map +0 -1
  268. package/dist/test/push-transmitter.test.js +0 -179
  269. package/dist/test/push-transmitter.test.js.map +0 -1
  270. package/dist/test/reactor-adapters.test.d.ts +0 -2
  271. package/dist/test/reactor-adapters.test.d.ts.map +0 -1
  272. package/dist/test/reactor-adapters.test.js +0 -379
  273. package/dist/test/reactor-adapters.test.js.map +0 -1
  274. package/dist/test/reactor-client.test.d.ts +0 -2
  275. package/dist/test/reactor-client.test.d.ts.map +0 -1
  276. package/dist/test/reactor-client.test.js +0 -212
  277. package/dist/test/reactor-client.test.js.map +0 -1
  278. package/dist/test/reactor-resolvers.test.d.ts +0 -2
  279. package/dist/test/reactor-resolvers.test.d.ts.map +0 -1
  280. package/dist/test/reactor-resolvers.test.js +0 -261
  281. package/dist/test/reactor-resolvers.test.js.map +0 -1
  282. package/dist/test/reactor-subgraph-permissions.test.d.ts +0 -2
  283. package/dist/test/reactor-subgraph-permissions.test.d.ts.map +0 -1
  284. package/dist/test/reactor-subgraph-permissions.test.js +0 -400
  285. package/dist/test/reactor-subgraph-permissions.test.js.map +0 -1
  286. package/dist/test/router.test.d.ts +0 -2
  287. package/dist/test/router.test.d.ts.map +0 -1
  288. package/dist/test/router.test.js +0 -38
  289. package/dist/test/router.test.js.map +0 -1
  290. package/dist/test/subscriptions.test.d.ts +0 -2
  291. package/dist/test/subscriptions.test.d.ts.map +0 -1
  292. package/dist/test/subscriptions.test.js +0 -246
  293. package/dist/test/subscriptions.test.js.map +0 -1
  294. package/dist/test/system.test.d.ts +0 -2
  295. package/dist/test/system.test.d.ts.map +0 -1
  296. package/dist/test/system.test.js +0 -211
  297. package/dist/test/system.test.js.map +0 -1
  298. package/dist/test/three-reactor-gql-sync.test.d.ts +0 -2
  299. package/dist/test/three-reactor-gql-sync.test.d.ts.map +0 -1
  300. package/dist/test/three-reactor-gql-sync.test.js +0 -368
  301. package/dist/test/three-reactor-gql-sync.test.js.map +0 -1
  302. package/dist/test/two-reactor-gql-sync.test.d.ts +0 -2
  303. package/dist/test/two-reactor-gql-sync.test.d.ts.map +0 -1
  304. package/dist/test/two-reactor-gql-sync.test.js +0 -348
  305. package/dist/test/two-reactor-gql-sync.test.js.map +0 -1
  306. package/dist/test/utils/gql-resolver-bridge.d.ts +0 -12
  307. package/dist/test/utils/gql-resolver-bridge.d.ts.map +0 -1
  308. package/dist/test/utils/gql-resolver-bridge.js +0 -60
  309. package/dist/test/utils/gql-resolver-bridge.js.map +0 -1
  310. package/dist/test/utils.d.ts +0 -10
  311. package/dist/test/utils.d.ts.map +0 -1
  312. package/dist/test/utils.js +0 -23
  313. package/dist/test/utils.js.map +0 -1
  314. package/dist/tsconfig.tsbuildinfo +0 -1
  315. package/dist/vitest.config.d.ts +0 -3
  316. package/dist/vitest.config.d.ts.map +0 -1
  317. package/dist/vitest.config.js +0 -38
  318. package/dist/vitest.config.js.map +0 -1
@@ -1,480 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, it } from "vitest";
2
- import { runMigrations } from "../src/migrations/index.js";
3
- import { DocumentPermissionService } from "../src/services/document-permission.service.js";
4
- import { getDbClient } from "../src/utils/db.js";
5
- describe("DocumentPermissionService", () => {
6
- let service;
7
- let db;
8
- beforeEach(async () => {
9
- // Create in-memory PGlite database for testing
10
- const { db: dbClient } = getDbClient();
11
- db = dbClient;
12
- await runMigrations(db);
13
- service = new DocumentPermissionService(db);
14
- });
15
- afterEach(async () => {
16
- await db.destroy();
17
- });
18
- describe("User Permissions", () => {
19
- const documentId = "doc-123";
20
- const userAddress = "0xUser1";
21
- const adminAddress = "0xAdmin";
22
- describe("grantPermission", () => {
23
- it("should grant READ permission to a user", async () => {
24
- const result = await service.grantPermission(documentId, userAddress, "READ", adminAddress);
25
- expect(result.documentId).toBe(documentId);
26
- expect(result.userAddress).toBe(userAddress.toLowerCase());
27
- expect(result.permission).toBe("READ");
28
- expect(result.grantedBy).toBe(adminAddress.toLowerCase());
29
- });
30
- it("should grant WRITE permission to a user", async () => {
31
- const result = await service.grantPermission(documentId, userAddress, "WRITE", adminAddress);
32
- expect(result.permission).toBe("WRITE");
33
- });
34
- it("should grant ADMIN permission to a user", async () => {
35
- const result = await service.grantPermission(documentId, userAddress, "ADMIN", adminAddress);
36
- expect(result.permission).toBe("ADMIN");
37
- });
38
- it("should update permission when granting to same user", async () => {
39
- await service.grantPermission(documentId, userAddress, "READ", adminAddress);
40
- const result = await service.grantPermission(documentId, userAddress, "WRITE", adminAddress);
41
- expect(result.permission).toBe("WRITE");
42
- const permissions = await service.getDocumentPermissions(documentId);
43
- expect(permissions).toHaveLength(1);
44
- });
45
- it("should normalize user addresses to lowercase", async () => {
46
- const result = await service.grantPermission(documentId, "0xABCDEF", "READ", "0xGRANTER");
47
- expect(result.userAddress).toBe("0xabcdef");
48
- expect(result.grantedBy).toBe("0xgranter");
49
- });
50
- });
51
- describe("getUserPermission", () => {
52
- it("should return null when no permission exists", async () => {
53
- const result = await service.getUserPermission(documentId, userAddress);
54
- expect(result).toBeNull();
55
- });
56
- it("should return the permission level when it exists", async () => {
57
- await service.grantPermission(documentId, userAddress, "WRITE", adminAddress);
58
- const result = await service.getUserPermission(documentId, userAddress);
59
- expect(result).toBe("WRITE");
60
- });
61
- it("should be case-insensitive for user addresses", async () => {
62
- await service.grantPermission(documentId, "0xabc", "READ", adminAddress);
63
- const result = await service.getUserPermission(documentId, "0xABC");
64
- expect(result).toBe("READ");
65
- });
66
- });
67
- describe("revokePermission", () => {
68
- it("should remove a user's permission", async () => {
69
- await service.grantPermission(documentId, userAddress, "READ", adminAddress);
70
- await service.revokePermission(documentId, userAddress);
71
- const result = await service.getUserPermission(documentId, userAddress);
72
- expect(result).toBeNull();
73
- });
74
- it("should not fail when revoking non-existent permission", async () => {
75
- await expect(service.revokePermission(documentId, userAddress)).resolves.not.toThrow();
76
- });
77
- });
78
- describe("getDocumentPermissions", () => {
79
- it("should return empty array when no permissions exist", async () => {
80
- const result = await service.getDocumentPermissions(documentId);
81
- expect(result).toEqual([]);
82
- });
83
- it("should return all permissions for a document", async () => {
84
- await service.grantPermission(documentId, "0xuser1", "READ", adminAddress);
85
- await service.grantPermission(documentId, "0xuser2", "WRITE", adminAddress);
86
- await service.grantPermission(documentId, "0xuser3", "ADMIN", adminAddress);
87
- const result = await service.getDocumentPermissions(documentId);
88
- expect(result).toHaveLength(3);
89
- });
90
- });
91
- describe("getUserDocuments", () => {
92
- it("should return all documents a user has access to", async () => {
93
- await service.grantPermission("doc-1", userAddress, "READ", adminAddress);
94
- await service.grantPermission("doc-2", userAddress, "WRITE", adminAddress);
95
- await service.grantPermission("doc-3", "0xOtherUser", "READ", adminAddress);
96
- const result = await service.getUserDocuments(userAddress);
97
- expect(result).toHaveLength(2);
98
- expect(result.map((r) => r.documentId).sort()).toEqual([
99
- "doc-1",
100
- "doc-2",
101
- ]);
102
- });
103
- });
104
- });
105
- describe("Access Control Checks", () => {
106
- const documentId = "doc-123";
107
- const adminAddress = "0xAdmin";
108
- describe("canReadDocument", () => {
109
- it("should return false for undefined user", async () => {
110
- const result = await service.canReadDocument(documentId, undefined);
111
- expect(result).toBe(false);
112
- });
113
- it("should return false when user has no permission", async () => {
114
- const result = await service.canReadDocument(documentId, "0xunknown");
115
- expect(result).toBe(false);
116
- });
117
- it("should return true when user has READ permission", async () => {
118
- await service.grantPermission(documentId, "0xuser", "READ", adminAddress);
119
- const result = await service.canReadDocument(documentId, "0xuser");
120
- expect(result).toBe(true);
121
- });
122
- it("should return true when user has WRITE permission", async () => {
123
- await service.grantPermission(documentId, "0xuser", "WRITE", adminAddress);
124
- const result = await service.canReadDocument(documentId, "0xuser");
125
- expect(result).toBe(true);
126
- });
127
- it("should return true when user has ADMIN permission", async () => {
128
- await service.grantPermission(documentId, "0xuser", "ADMIN", adminAddress);
129
- const result = await service.canReadDocument(documentId, "0xuser");
130
- expect(result).toBe(true);
131
- });
132
- });
133
- describe("canWriteDocument", () => {
134
- it("should return false for undefined user", async () => {
135
- const result = await service.canWriteDocument(documentId, undefined);
136
- expect(result).toBe(false);
137
- });
138
- it("should return false when user has no permission", async () => {
139
- const result = await service.canWriteDocument(documentId, "0xunknown");
140
- expect(result).toBe(false);
141
- });
142
- it("should return false when user has only READ permission", async () => {
143
- await service.grantPermission(documentId, "0xuser", "READ", adminAddress);
144
- const result = await service.canWriteDocument(documentId, "0xuser");
145
- expect(result).toBe(false);
146
- });
147
- it("should return true when user has WRITE permission", async () => {
148
- await service.grantPermission(documentId, "0xuser", "WRITE", adminAddress);
149
- const result = await service.canWriteDocument(documentId, "0xuser");
150
- expect(result).toBe(true);
151
- });
152
- it("should return true when user has ADMIN permission", async () => {
153
- await service.grantPermission(documentId, "0xuser", "ADMIN", adminAddress);
154
- const result = await service.canWriteDocument(documentId, "0xuser");
155
- expect(result).toBe(true);
156
- });
157
- });
158
- describe("canManageDocument", () => {
159
- it("should return false for undefined user", async () => {
160
- const result = await service.canManageDocument(documentId, undefined);
161
- expect(result).toBe(false);
162
- });
163
- it("should return false when user has only READ permission", async () => {
164
- await service.grantPermission(documentId, "0xuser", "READ", adminAddress);
165
- const result = await service.canManageDocument(documentId, "0xuser");
166
- expect(result).toBe(false);
167
- });
168
- it("should return false when user has only WRITE permission", async () => {
169
- await service.grantPermission(documentId, "0xuser", "WRITE", adminAddress);
170
- const result = await service.canManageDocument(documentId, "0xuser");
171
- expect(result).toBe(false);
172
- });
173
- it("should return true when user has ADMIN permission", async () => {
174
- await service.grantPermission(documentId, "0xuser", "ADMIN", adminAddress);
175
- const result = await service.canManageDocument(documentId, "0xuser");
176
- expect(result).toBe(true);
177
- });
178
- });
179
- });
180
- describe("Permission Inheritance (canRead/canWrite with parent hierarchy)", () => {
181
- const adminAddress = "0xAdmin";
182
- const userAddress = "0xUser";
183
- // Simple parent hierarchy for testing
184
- const parentHierarchy = {
185
- "child-doc": ["parent-doc"],
186
- "grandchild-doc": ["child-doc"],
187
- "parent-doc": [],
188
- "orphan-doc": [],
189
- };
190
- const getParentIds = async (documentId) => {
191
- return parentHierarchy[documentId] ?? [];
192
- };
193
- describe("canRead", () => {
194
- it("should return true when user has direct permission", async () => {
195
- await service.grantPermission("child-doc", userAddress, "READ", adminAddress);
196
- const result = await service.canRead("child-doc", userAddress, getParentIds);
197
- expect(result).toBe(true);
198
- });
199
- it("should return true when user has permission on parent", async () => {
200
- await service.grantPermission("parent-doc", userAddress, "READ", adminAddress);
201
- const result = await service.canRead("child-doc", userAddress, getParentIds);
202
- expect(result).toBe(true);
203
- });
204
- it("should return true when user has permission on grandparent", async () => {
205
- await service.grantPermission("parent-doc", userAddress, "READ", adminAddress);
206
- const result = await service.canRead("grandchild-doc", userAddress, getParentIds);
207
- expect(result).toBe(true);
208
- });
209
- it("should return false when user has no permission in hierarchy", async () => {
210
- const result = await service.canRead("child-doc", userAddress, getParentIds);
211
- expect(result).toBe(false);
212
- });
213
- it("should return false for orphan document without direct permission", async () => {
214
- const result = await service.canRead("orphan-doc", userAddress, getParentIds);
215
- expect(result).toBe(false);
216
- });
217
- });
218
- describe("canWrite", () => {
219
- it("should return true when user has direct write permission", async () => {
220
- await service.grantPermission("child-doc", userAddress, "WRITE", adminAddress);
221
- const result = await service.canWrite("child-doc", userAddress, getParentIds);
222
- expect(result).toBe(true);
223
- });
224
- it("should return false when user has only READ permission on parent", async () => {
225
- await service.grantPermission("parent-doc", userAddress, "READ", adminAddress);
226
- const result = await service.canWrite("child-doc", userAddress, getParentIds);
227
- expect(result).toBe(false);
228
- });
229
- it("should return true when user has WRITE permission on parent", async () => {
230
- await service.grantPermission("parent-doc", userAddress, "WRITE", adminAddress);
231
- const result = await service.canWrite("child-doc", userAddress, getParentIds);
232
- expect(result).toBe(true);
233
- });
234
- it("should return true when user has ADMIN permission on grandparent", async () => {
235
- await service.grantPermission("parent-doc", userAddress, "ADMIN", adminAddress);
236
- const result = await service.canWrite("grandchild-doc", userAddress, getParentIds);
237
- expect(result).toBe(true);
238
- });
239
- });
240
- describe("filterReadableDocuments", () => {
241
- it("should filter documents based on permissions", async () => {
242
- await service.grantPermission("doc-1", userAddress, "READ", adminAddress);
243
- await service.grantPermission("doc-3", userAddress, "WRITE", adminAddress);
244
- const result = await service.filterReadableDocuments(["doc-1", "doc-2", "doc-3", "doc-4"], userAddress, async () => []);
245
- expect(result).toEqual(["doc-1", "doc-3"]);
246
- });
247
- it("should include documents accessible via parent hierarchy", async () => {
248
- await service.grantPermission("parent-doc", userAddress, "READ", adminAddress);
249
- const result = await service.filterReadableDocuments(["child-doc", "orphan-doc"], userAddress, getParentIds);
250
- expect(result).toEqual(["child-doc"]);
251
- });
252
- });
253
- });
254
- describe("Group Management", () => {
255
- describe("createGroup", () => {
256
- it("should create a group with name and description", async () => {
257
- const result = await service.createGroup("Editors", "Can edit documents");
258
- expect(result.name).toBe("Editors");
259
- expect(result.description).toBe("Can edit documents");
260
- expect(result.id).toBeDefined();
261
- });
262
- it("should create a group without description", async () => {
263
- const result = await service.createGroup("Viewers");
264
- expect(result.name).toBe("Viewers");
265
- expect(result.description).toBeNull();
266
- });
267
- });
268
- describe("getGroup", () => {
269
- it("should return null for non-existent group", async () => {
270
- const result = await service.getGroup(999);
271
- expect(result).toBeNull();
272
- });
273
- it("should return group by ID", async () => {
274
- const created = await service.createGroup("Test Group");
275
- const result = await service.getGroup(created.id);
276
- expect(result?.name).toBe("Test Group");
277
- });
278
- });
279
- describe("listGroups", () => {
280
- it("should return all groups", async () => {
281
- await service.createGroup("Group1");
282
- await service.createGroup("Group2");
283
- await service.createGroup("Group3");
284
- const result = await service.listGroups();
285
- expect(result).toHaveLength(3);
286
- });
287
- });
288
- describe("deleteGroup", () => {
289
- it("should delete group and all associations", async () => {
290
- const group = await service.createGroup("ToDelete");
291
- await service.addUserToGroup("0xuser", group.id);
292
- await service.grantGroupPermission("doc-1", group.id, "READ", "0xadmin");
293
- await service.deleteGroup(group.id);
294
- const result = await service.getGroup(group.id);
295
- expect(result).toBeNull();
296
- const userGroups = await service.getUserGroups("0xuser");
297
- expect(userGroups).toHaveLength(0);
298
- });
299
- });
300
- describe("User-Group membership", () => {
301
- it("should add user to group", async () => {
302
- const group = await service.createGroup("Editors");
303
- await service.addUserToGroup("0xuser", group.id);
304
- const userGroups = await service.getUserGroups("0xuser");
305
- expect(userGroups).toHaveLength(1);
306
- expect(userGroups[0].name).toBe("Editors");
307
- });
308
- it("should remove user from group", async () => {
309
- const group = await service.createGroup("Editors");
310
- await service.addUserToGroup("0xuser", group.id);
311
- await service.removeUserFromGroup("0xuser", group.id);
312
- const userGroups = await service.getUserGroups("0xuser");
313
- expect(userGroups).toHaveLength(0);
314
- });
315
- it("should get group members", async () => {
316
- const group = await service.createGroup("Editors");
317
- await service.addUserToGroup("0xuser1", group.id);
318
- await service.addUserToGroup("0xuser2", group.id);
319
- const members = await service.getGroupMembers(group.id);
320
- expect(members.sort()).toEqual(["0xuser1", "0xuser2"]);
321
- });
322
- it("should normalize user addresses in group membership", async () => {
323
- const group = await service.createGroup("Test");
324
- await service.addUserToGroup("0xABCDEF", group.id);
325
- const members = await service.getGroupMembers(group.id);
326
- expect(members).toEqual(["0xabcdef"]);
327
- });
328
- });
329
- });
330
- describe("Group Document Permissions", () => {
331
- const adminAddress = "0xAdmin";
332
- const documentId = "doc-123";
333
- it("should grant group permission on document", async () => {
334
- const group = await service.createGroup("Editors");
335
- const result = await service.grantGroupPermission(documentId, group.id, "WRITE", adminAddress);
336
- expect(result.documentId).toBe(documentId);
337
- expect(result.groupId).toBe(group.id);
338
- expect(result.permission).toBe("WRITE");
339
- });
340
- it("should allow user to read via group permission", async () => {
341
- const group = await service.createGroup("Readers");
342
- await service.addUserToGroup("0xuser", group.id);
343
- await service.grantGroupPermission(documentId, group.id, "READ", adminAddress);
344
- const result = await service.canReadDocument(documentId, "0xuser");
345
- expect(result).toBe(true);
346
- });
347
- it("should allow user to write via group permission", async () => {
348
- const group = await service.createGroup("Writers");
349
- await service.addUserToGroup("0xuser", group.id);
350
- await service.grantGroupPermission(documentId, group.id, "WRITE", adminAddress);
351
- const result = await service.canWriteDocument(documentId, "0xuser");
352
- expect(result).toBe(true);
353
- });
354
- it("should return highest group permission level", async () => {
355
- const readersGroup = await service.createGroup("Readers");
356
- const writersGroup = await service.createGroup("Writers");
357
- await service.addUserToGroup("0xuser", readersGroup.id);
358
- await service.addUserToGroup("0xuser", writersGroup.id);
359
- await service.grantGroupPermission(documentId, readersGroup.id, "READ", adminAddress);
360
- await service.grantGroupPermission(documentId, writersGroup.id, "WRITE", adminAddress);
361
- const groupPermission = await service.getUserGroupPermission(documentId, "0xuser");
362
- expect(groupPermission).toBe("WRITE");
363
- });
364
- it("should revoke group permission", async () => {
365
- const group = await service.createGroup("TempGroup");
366
- await service.addUserToGroup("0xuser", group.id);
367
- await service.grantGroupPermission(documentId, group.id, "READ", adminAddress);
368
- await service.revokeGroupPermission(documentId, group.id);
369
- const result = await service.canReadDocument(documentId, "0xuser");
370
- expect(result).toBe(false);
371
- });
372
- });
373
- describe("Operation Permissions", () => {
374
- const documentId = "doc-123";
375
- const operationType = "SET_NAME";
376
- const adminAddress = "0xAdmin";
377
- describe("User operation permissions", () => {
378
- it("should grant operation permission to user", async () => {
379
- const result = await service.grantOperationPermission(documentId, operationType, "0xuser", adminAddress);
380
- expect(result.documentId).toBe(documentId);
381
- expect(result.operationType).toBe(operationType);
382
- expect(result.userAddress).toBe("0xuser");
383
- });
384
- it("should check if user can execute operation", async () => {
385
- await service.grantOperationPermission(documentId, operationType, "0xuser", adminAddress);
386
- const result = await service.canExecuteOperation(documentId, operationType, "0xuser");
387
- expect(result).toBe(true);
388
- });
389
- it("should return false when user has no operation permission", async () => {
390
- const result = await service.canExecuteOperation(documentId, operationType, "0xunknown");
391
- expect(result).toBe(false);
392
- });
393
- it("should revoke operation permission", async () => {
394
- await service.grantOperationPermission(documentId, operationType, "0xuser", adminAddress);
395
- await service.revokeOperationPermission(documentId, operationType, "0xuser");
396
- const result = await service.canExecuteOperation(documentId, operationType, "0xuser");
397
- expect(result).toBe(false);
398
- });
399
- });
400
- describe("Group operation permissions", () => {
401
- it("should grant operation permission to group", async () => {
402
- const group = await service.createGroup("Operators");
403
- const result = await service.grantGroupOperationPermission(documentId, operationType, group.id, adminAddress);
404
- expect(result.documentId).toBe(documentId);
405
- expect(result.operationType).toBe(operationType);
406
- expect(result.groupId).toBe(group.id);
407
- });
408
- it("should allow user to execute operation via group", async () => {
409
- const group = await service.createGroup("Operators");
410
- await service.addUserToGroup("0xuser", group.id);
411
- await service.grantGroupOperationPermission(documentId, operationType, group.id, adminAddress);
412
- const result = await service.canExecuteOperation(documentId, operationType, "0xuser");
413
- expect(result).toBe(true);
414
- });
415
- it("should revoke group operation permission", async () => {
416
- const group = await service.createGroup("TempOps");
417
- await service.addUserToGroup("0xuser", group.id);
418
- await service.grantGroupOperationPermission(documentId, operationType, group.id, adminAddress);
419
- await service.revokeGroupOperationPermission(documentId, operationType, group.id);
420
- const result = await service.canExecuteOperation(documentId, operationType, "0xuser");
421
- expect(result).toBe(false);
422
- });
423
- });
424
- describe("isOperationRestricted", () => {
425
- it("should return false when no permissions are set", async () => {
426
- const result = await service.isOperationRestricted(documentId, operationType);
427
- expect(result).toBe(false);
428
- });
429
- it("should return true when user permission is set", async () => {
430
- await service.grantOperationPermission(documentId, operationType, "0xuser", adminAddress);
431
- const result = await service.isOperationRestricted(documentId, operationType);
432
- expect(result).toBe(true);
433
- });
434
- it("should return true when group permission is set", async () => {
435
- const group = await service.createGroup("Operators");
436
- await service.grantGroupOperationPermission(documentId, operationType, group.id, adminAddress);
437
- const result = await service.isOperationRestricted(documentId, operationType);
438
- expect(result).toBe(true);
439
- });
440
- });
441
- });
442
- describe("Delete All Document Permissions", () => {
443
- it("should delete all permissions for a document", async () => {
444
- const documentId = "doc-to-delete";
445
- const adminAddress = "0xAdmin";
446
- // Create various permissions
447
- await service.grantPermission(documentId, "0xuser1", "READ", adminAddress);
448
- await service.grantPermission(documentId, "0xuser2", "WRITE", adminAddress);
449
- const group = await service.createGroup("TestGroup");
450
- await service.grantGroupPermission(documentId, group.id, "READ", adminAddress);
451
- await service.grantOperationPermission(documentId, "SET_NAME", "0xuser1", adminAddress);
452
- await service.grantGroupOperationPermission(documentId, "SET_NAME", group.id, adminAddress);
453
- // Delete all permissions
454
- await service.deleteAllDocumentPermissions(documentId);
455
- // Verify all permissions are gone
456
- const userPermissions = await service.getDocumentPermissions(documentId);
457
- expect(userPermissions).toHaveLength(0);
458
- const groupPermissions = await service.getDocumentGroupPermissions(documentId);
459
- expect(groupPermissions).toHaveLength(0);
460
- const opUserPerms = await service.getOperationUserPermissions(documentId, "SET_NAME");
461
- expect(opUserPerms).toHaveLength(0);
462
- const opGroupPerms = await service.getOperationGroupPermissions(documentId, "SET_NAME");
463
- expect(opGroupPerms).toHaveLength(0);
464
- });
465
- });
466
- describe("Edge Cases", () => {
467
- it("should handle empty user address for canExecuteOperation", async () => {
468
- const result = await service.canExecuteOperation("doc", "op", undefined);
469
- expect(result).toBe(false);
470
- });
471
- it("should handle duplicate group membership gracefully", async () => {
472
- const group = await service.createGroup("Test");
473
- await service.addUserToGroup("0xuser", group.id);
474
- await service.addUserToGroup("0xuser", group.id); // Duplicate
475
- const members = await service.getGroupMembers(group.id);
476
- expect(members).toHaveLength(1);
477
- });
478
- });
479
- });
480
- //# sourceMappingURL=document-permission.service.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-permission.service.test.js","sourceRoot":"","sources":["../../test/document-permission.service.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { IDocumentDriveServer } from "document-drive";
2
- import type { GraphQLHandler } from "msw";
3
- export declare const createDriveHandlers: (reactor: IDocumentDriveServer, driveId: string) => GraphQLHandler[];
4
- //# sourceMappingURL=drive-handlers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"drive-handlers.d.ts","sourceRoot":"","sources":["../../test/drive-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,KAAK,CAAC;AAGxD,eAAO,MAAM,mBAAmB,GAC9B,SAAS,oBAAoB,EAC7B,SAAS,MAAM,KACd,cAAc,EAwEhB,CAAC"}
@@ -1,39 +0,0 @@
1
- import { DriveSubgraph } from "@powerhousedao/reactor-api";
2
- import { graphql, HttpResponse } from "msw";
3
- export const createDriveHandlers = (reactor, driveId) => {
4
- const driveSubgraph = new DriveSubgraph({
5
- reactor,
6
- });
7
- const { Query, Mutation, Sync } = driveSubgraph.resolvers;
8
- const context = { driveId, isUser: () => true, isAdmin: () => true };
9
- return [
10
- graphql.query("getDrive", async ({ variables }) => HttpResponse.json({
11
- data: { drive: await Query.drive(undefined, variables, context) },
12
- })),
13
- graphql.mutation("pushUpdates", async ({ variables }) => HttpResponse.json({
14
- data: {
15
- pushUpdates: await Mutation.pushUpdates(undefined, variables, context),
16
- },
17
- })),
18
- graphql.mutation("registerPullResponderListener", async ({ variables }) => HttpResponse.json({
19
- data: {
20
- registerPullResponderListener: await Mutation.registerPullResponderListener(undefined, variables, context),
21
- },
22
- })),
23
- graphql.query("strands", async ({ variables }) => HttpResponse.json({
24
- data: {
25
- system: {
26
- sync: {
27
- strands: await Sync.strands(undefined, variables, context),
28
- },
29
- },
30
- },
31
- })),
32
- graphql.mutation("acknowledge", async ({ variables }) => HttpResponse.json({
33
- data: {
34
- acknowledge: await Mutation.acknowledge(undefined, variables, context),
35
- },
36
- })),
37
- ];
38
- };
39
- //# sourceMappingURL=drive-handlers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"drive-handlers.js","sourceRoot":"","sources":["../../test/drive-handlers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,KAAK,CAAC;AAE5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,OAA6B,EAC7B,OAAe,EACG,EAAE;IACpB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;QACtC,OAAO;KACmB,CAAC,CAAC;IAE9B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,SAI/C,CAAC;IACF,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IAErE,OAAO;QACL,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAChD,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;SAClE,CAAC,CACH;QACD,OAAO,CAAC,QAAQ,CACd,aAAa,EACb,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CACtB,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE;gBACJ,WAAW,EAAE,MAAM,QAAQ,CAAC,WAAW,CACrC,SAAS,EACT,SAAS,EACT,OAAO,CACR;aACF;SACF,CAAC,CACL;QACD,OAAO,CAAC,QAAQ,CACd,+BAA+B,EAC/B,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CACtB,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE;gBACJ,6BAA6B,EAC3B,MAAM,QAAQ,CAAC,6BAA6B,CAC1C,SAAS,EACT,SAAS,EACT,OAAO,CACR;aACJ;SACF,CAAC,CACL;QACD,OAAO,CAAC,KAAK,CACX,SAAS,EACT,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CACtB,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE;gBACJ,MAAM,EAAE;oBACN,IAAI,EAAE;wBACJ,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;qBAC3D;iBACF;aACF;SACF,CAAC,CACL;QACD,OAAO,CAAC,QAAQ,CACd,aAAa,EACb,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CACtB,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE;gBACJ,WAAW,EAAE,MAAM,QAAQ,CAAC,WAAW,CACrC,SAAS,EACT,SAAS,EACT,OAAO,CACR;aACF;SACF,CAAC,CACL;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=drive-subgraph-permissions.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"drive-subgraph-permissions.test.d.ts","sourceRoot":"","sources":["../../test/drive-subgraph-permissions.test.ts"],"names":[],"mappings":""}