@powerhousedao/vetra 6.0.0-dev.67 → 6.0.0-dev.69

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 (52) hide show
  1. package/dist/document-models/app-module/actions.d.ts +3 -1
  2. package/dist/document-models/app-module/actions.d.ts.map +1 -1
  3. package/dist/document-models/document-editor/actions.d.ts +3 -1
  4. package/dist/document-models/document-editor/actions.d.ts.map +1 -1
  5. package/dist/document-models/processor-module/actions.d.ts +3 -1
  6. package/dist/document-models/processor-module/actions.d.ts.map +1 -1
  7. package/dist/document-models/subgraph-module/actions.d.ts +3 -1
  8. package/dist/document-models/subgraph-module/actions.d.ts.map +1 -1
  9. package/dist/document-models/vetra-package/actions.d.ts +3 -1
  10. package/dist/document-models/vetra-package/actions.d.ts.map +1 -1
  11. package/dist/processors/codegen/__tests__/codegen-processor-e2e.test.js +20 -20
  12. package/dist/processors/codegen/document-handlers/generators/app-generator.d.ts +4 -0
  13. package/dist/processors/codegen/document-handlers/generators/app-generator.d.ts.map +1 -1
  14. package/dist/processors/codegen/document-handlers/generators/app-generator.js +19 -5
  15. package/dist/processors/codegen/document-handlers/generators/constants.d.ts +1 -1
  16. package/dist/processors/codegen/document-handlers/generators/constants.d.ts.map +1 -1
  17. package/dist/processors/codegen/document-handlers/generators/constants.js +1 -1
  18. package/dist/processors/codegen/document-handlers/generators/document-editor-generator.d.ts +4 -0
  19. package/dist/processors/codegen/document-handlers/generators/document-editor-generator.d.ts.map +1 -1
  20. package/dist/processors/codegen/document-handlers/generators/document-editor-generator.js +20 -6
  21. package/dist/processors/codegen/document-handlers/generators/processor-generator.d.ts +4 -0
  22. package/dist/processors/codegen/document-handlers/generators/processor-generator.d.ts.map +1 -1
  23. package/dist/processors/codegen/document-handlers/generators/processor-generator.js +22 -8
  24. package/dist/processors/codegen/document-handlers/generators/subgraph-generator.d.ts +4 -0
  25. package/dist/processors/codegen/document-handlers/generators/subgraph-generator.d.ts.map +1 -1
  26. package/dist/processors/codegen/document-handlers/generators/subgraph-generator.js +19 -5
  27. package/dist/processors/codegen/index.js +2 -2
  28. package/dist/processors/codegen/logger.d.ts.map +1 -1
  29. package/dist/processors/codegen/logger.js +18 -7
  30. package/dist/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +12 -17
  32. package/dist/subgraphs/__tests__/permission-utils.test.d.ts +0 -2
  33. package/dist/subgraphs/__tests__/permission-utils.test.d.ts.map +0 -1
  34. package/dist/subgraphs/__tests__/permission-utils.test.js +0 -348
  35. package/dist/subgraphs/__tests__/vetra-read-model-permissions.test.d.ts +0 -2
  36. package/dist/subgraphs/__tests__/vetra-read-model-permissions.test.d.ts.map +0 -1
  37. package/dist/subgraphs/__tests__/vetra-read-model-permissions.test.js +0 -289
  38. package/dist/subgraphs/index.d.ts +0 -2
  39. package/dist/subgraphs/index.d.ts.map +0 -1
  40. package/dist/subgraphs/index.js +0 -1
  41. package/dist/subgraphs/permission-utils.d.ts +0 -30
  42. package/dist/subgraphs/permission-utils.d.ts.map +0 -1
  43. package/dist/subgraphs/permission-utils.js +0 -97
  44. package/dist/subgraphs/vetra-read-model/index.d.ts +0 -8
  45. package/dist/subgraphs/vetra-read-model/index.d.ts.map +0 -1
  46. package/dist/subgraphs/vetra-read-model/index.js +0 -8
  47. package/dist/subgraphs/vetra-read-model/resolvers.d.ts +0 -3
  48. package/dist/subgraphs/vetra-read-model/resolvers.d.ts.map +0 -1
  49. package/dist/subgraphs/vetra-read-model/resolvers.js +0 -49
  50. package/dist/subgraphs/vetra-read-model/schema.d.ts +0 -3
  51. package/dist/subgraphs/vetra-read-model/schema.d.ts.map +0 -1
  52. package/dist/subgraphs/vetra-read-model/schema.js +0 -25
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powerhousedao/vetra",
3
- "version": "6.0.0-dev.67",
3
+ "version": "6.0.0-dev.69",
4
4
  "license": "AGPL-3.0-only",
5
5
  "type": "module",
6
6
  "repository": {
@@ -34,10 +34,6 @@
34
34
  "import": "./dist/editors/index.js",
35
35
  "types": "./dist/editors/index.d.ts"
36
36
  },
37
- "./subgraphs": {
38
- "import": "./dist/subgraphs/index.js",
39
- "types": "./dist/subgraphs/index.d.ts"
40
- },
41
37
  "./processors": {
42
38
  "import": "./dist/processors/index.js",
43
39
  "types": "./dist/processors/index.d.ts"
@@ -61,14 +57,14 @@
61
57
  "zod": "4.3.6",
62
58
  "graphql-tag": "2.12.6",
63
59
  "@electric-sql/pglite": "0.3.15",
64
- "@powerhousedao/common": "6.0.0-dev.67",
65
- "@powerhousedao/connect": "6.0.0-dev.67",
66
- "@powerhousedao/config": "6.0.0-dev.67",
67
- "@powerhousedao/design-system": "6.0.0-dev.67",
68
- "@powerhousedao/builder-tools": "6.0.0-dev.67",
69
- "document-model": "6.0.0-dev.67",
70
- "@powerhousedao/reactor-browser": "6.0.0-dev.67",
71
- "@powerhousedao/shared": "6.0.0-dev.67"
60
+ "@powerhousedao/connect": "6.0.0-dev.69",
61
+ "@powerhousedao/common": "6.0.0-dev.69",
62
+ "@powerhousedao/builder-tools": "6.0.0-dev.69",
63
+ "@powerhousedao/config": "6.0.0-dev.69",
64
+ "@powerhousedao/design-system": "6.0.0-dev.69",
65
+ "document-model": "6.0.0-dev.69",
66
+ "@powerhousedao/shared": "6.0.0-dev.69",
67
+ "@powerhousedao/reactor-browser": "6.0.0-dev.69"
72
68
  },
73
69
  "devDependencies": {
74
70
  "tailwindcss": "4.1.18",
@@ -84,10 +80,9 @@
84
80
  "react-dom": "19.2.4",
85
81
  "vite": "7.3.1",
86
82
  "vitest": "3.2.4",
87
- "@powerhousedao/codegen": "6.0.0-dev.67",
88
- "@powerhousedao/ph-cli": "6.0.0-dev.67",
89
- "@powerhousedao/reactor-api": "6.0.0-dev.67",
90
- "document-drive": "6.0.0-dev.67"
83
+ "@powerhousedao/codegen": "6.0.0-dev.69",
84
+ "@powerhousedao/ph-cli": "6.0.0-dev.69",
85
+ "document-drive": "6.0.0-dev.69"
91
86
  },
92
87
  "peerDependencies": {
93
88
  "react": ">=19.0.0",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=permission-utils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"permission-utils.test.d.ts","sourceRoot":"","sources":["../../../subgraphs/__tests__/permission-utils.test.ts"],"names":[],"mappings":""}
@@ -1,348 +0,0 @@
1
- import { GraphQLError } from "graphql";
2
- import { beforeEach, describe, expect, it, vi } from "vitest";
3
- import { assertCanExecuteOperation, assertCanRead, assertCanWrite, canReadDocument, canWriteDocument, hasGlobalAdminAccess, } from "../permission-utils.js";
4
- describe("permission-utils", () => {
5
- // Helper to create context with different permission levels
6
- const createContext = (options) => ({
7
- user: options.userAddress ? { address: options.userAddress } : undefined,
8
- isAdmin: vi.fn().mockReturnValue(options.isAdmin ?? false),
9
- });
10
- describe("hasGlobalAdminAccess", () => {
11
- it("should return true when user is global admin", () => {
12
- const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
13
- const result = hasGlobalAdminAccess(ctx);
14
- expect(result).toBe(true);
15
- expect(ctx.isAdmin).toHaveBeenCalledWith("0xadmin");
16
- });
17
- it("should return false when user is not admin", () => {
18
- const ctx = createContext({ userAddress: "0xnorole" });
19
- const result = hasGlobalAdminAccess(ctx);
20
- expect(result).toBe(false);
21
- });
22
- it("should return false when user is not authenticated (no address)", () => {
23
- const ctx = createContext({});
24
- const result = hasGlobalAdminAccess(ctx);
25
- expect(result).toBe(false);
26
- // Should call with empty string when no user address
27
- expect(ctx.isAdmin).toHaveBeenCalledWith("");
28
- });
29
- });
30
- describe("canReadDocument", () => {
31
- let mockSubgraph;
32
- let mockDocumentPermissionService;
33
- beforeEach(() => {
34
- mockDocumentPermissionService = {
35
- canRead: vi.fn().mockResolvedValue(false),
36
- canWrite: vi.fn().mockResolvedValue(false),
37
- canReadDocument: vi.fn().mockResolvedValue(false),
38
- canWriteDocument: vi.fn().mockResolvedValue(false),
39
- };
40
- mockSubgraph = {
41
- documentPermissionService: mockDocumentPermissionService,
42
- reactorClient: {
43
- getParents: vi.fn().mockResolvedValue({
44
- results: [],
45
- options: { limit: 10 },
46
- }),
47
- },
48
- };
49
- });
50
- describe("Global access bypass", () => {
51
- it("should return true immediately when user has global admin access", async () => {
52
- const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
53
- const result = await canReadDocument(mockSubgraph, "doc-123", ctx);
54
- expect(result).toBe(true);
55
- expect(mockDocumentPermissionService.canRead).not.toHaveBeenCalled();
56
- });
57
- });
58
- describe("Document-level permissions", () => {
59
- it("should check document permission service when no global access", async () => {
60
- const ctx = createContext({ userAddress: "0xuser" });
61
- vi.mocked(mockDocumentPermissionService.canRead).mockResolvedValue(true);
62
- const result = await canReadDocument(mockSubgraph, "doc-123", ctx);
63
- expect(result).toBe(true);
64
- expect(mockDocumentPermissionService.canRead).toHaveBeenCalledWith("doc-123", "0xuser", expect.any(Function));
65
- });
66
- it("should return false when user has no document permission", async () => {
67
- const ctx = createContext({ userAddress: "0xunpermitted" });
68
- vi.mocked(mockDocumentPermissionService.canRead).mockResolvedValue(false);
69
- const result = await canReadDocument(mockSubgraph, "doc-123", ctx);
70
- expect(result).toBe(false);
71
- });
72
- it("should pass undefined user address to permission service when no user", async () => {
73
- const ctx = createContext({});
74
- await canReadDocument(mockSubgraph, "doc-123", ctx);
75
- expect(mockDocumentPermissionService.canRead).toHaveBeenCalledWith("doc-123", undefined, expect.any(Function));
76
- });
77
- });
78
- describe("No permission service", () => {
79
- it("should return false when no permission service is available", async () => {
80
- const subgraphWithoutService = {
81
- documentPermissionService: undefined,
82
- reactorClient: mockSubgraph.reactorClient,
83
- };
84
- const ctx = createContext({ userAddress: "0xuser" });
85
- const result = await canReadDocument(subgraphWithoutService, "doc-123", ctx);
86
- expect(result).toBe(false);
87
- });
88
- });
89
- describe("Hierarchy function (getParentIdsFn)", () => {
90
- it("should pass a function that retrieves parent IDs", async () => {
91
- const ctx = createContext({ userAddress: "0xuser" });
92
- const mockParents = [
93
- { header: { id: "parent-1" } },
94
- { header: { id: "parent-2" } },
95
- ];
96
- vi.mocked(mockSubgraph.reactorClient.getParents).mockResolvedValue({
97
- results: mockParents,
98
- options: { limit: 10 },
99
- });
100
- let capturedGetParentsFn = null;
101
- vi.mocked(mockDocumentPermissionService.canRead).mockImplementation(async (_docId, _user, getParentsFn) => {
102
- capturedGetParentsFn = getParentsFn;
103
- return false;
104
- });
105
- await canReadDocument(mockSubgraph, "child-doc", ctx);
106
- expect(capturedGetParentsFn).not.toBeNull();
107
- const parentIds = await capturedGetParentsFn("child-doc");
108
- expect(parentIds).toEqual(["parent-1", "parent-2"]);
109
- expect(mockSubgraph.reactorClient.getParents).toHaveBeenCalledWith("child-doc");
110
- });
111
- it("should return empty array if getParents fails", async () => {
112
- const ctx = createContext({ userAddress: "0xuser" });
113
- vi.mocked(mockSubgraph.reactorClient.getParents).mockRejectedValue(new Error("Not found"));
114
- let capturedGetParentsFn = null;
115
- vi.mocked(mockDocumentPermissionService.canRead).mockImplementation(async (_docId, _user, getParentsFn) => {
116
- capturedGetParentsFn = getParentsFn;
117
- return false;
118
- });
119
- await canReadDocument(mockSubgraph, "child-doc", ctx);
120
- const parentIds = await capturedGetParentsFn("child-doc");
121
- expect(parentIds).toEqual([]);
122
- });
123
- });
124
- });
125
- describe("canWriteDocument", () => {
126
- let mockSubgraph;
127
- let mockDocumentPermissionService;
128
- beforeEach(() => {
129
- mockDocumentPermissionService = {
130
- canRead: vi.fn().mockResolvedValue(false),
131
- canWrite: vi.fn().mockResolvedValue(false),
132
- };
133
- mockSubgraph = {
134
- documentPermissionService: mockDocumentPermissionService,
135
- reactorClient: {
136
- getParents: vi.fn().mockResolvedValue({
137
- results: [],
138
- options: { limit: 10 },
139
- }),
140
- },
141
- };
142
- });
143
- describe("Global access bypass", () => {
144
- it("should return true immediately when user is global admin", async () => {
145
- const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
146
- const result = await canWriteDocument(mockSubgraph, "doc-123", ctx);
147
- expect(result).toBe(true);
148
- expect(mockDocumentPermissionService.canWrite).not.toHaveBeenCalled();
149
- });
150
- });
151
- describe("Document-level permissions", () => {
152
- it("should check document permission service when no global write access", async () => {
153
- const ctx = createContext({ userAddress: "0xuser" });
154
- vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(true);
155
- const result = await canWriteDocument(mockSubgraph, "doc-123", ctx);
156
- expect(result).toBe(true);
157
- expect(mockDocumentPermissionService.canWrite).toHaveBeenCalledWith("doc-123", "0xuser", expect.any(Function));
158
- });
159
- it("should return false when user has no document write permission", async () => {
160
- const ctx = createContext({ userAddress: "0xunpermitted" });
161
- vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(false);
162
- const result = await canWriteDocument(mockSubgraph, "doc-123", ctx);
163
- expect(result).toBe(false);
164
- });
165
- });
166
- describe("No permission service", () => {
167
- it("should return false when no permission service is available", async () => {
168
- const subgraphWithoutService = {
169
- documentPermissionService: undefined,
170
- reactorClient: mockSubgraph.reactorClient,
171
- };
172
- const ctx = createContext({ userAddress: "0xuser" });
173
- const result = await canWriteDocument(subgraphWithoutService, "doc-123", ctx);
174
- expect(result).toBe(false);
175
- });
176
- });
177
- });
178
- describe("assertCanRead", () => {
179
- let mockSubgraph;
180
- let mockDocumentPermissionService;
181
- beforeEach(() => {
182
- mockDocumentPermissionService = {
183
- canRead: vi.fn().mockResolvedValue(false),
184
- };
185
- mockSubgraph = {
186
- documentPermissionService: mockDocumentPermissionService,
187
- reactorClient: {
188
- getParents: vi.fn().mockResolvedValue({
189
- results: [],
190
- options: { limit: 10 },
191
- }),
192
- },
193
- };
194
- });
195
- it("should not throw when user has global read access", async () => {
196
- const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
197
- await expect(assertCanRead(mockSubgraph, "doc-123", ctx)).resolves.not.toThrow();
198
- });
199
- it("should not throw when user has document read permission", async () => {
200
- vi.mocked(mockDocumentPermissionService.canRead).mockResolvedValue(true);
201
- const ctx = createContext({ userAddress: "0xpermitted" });
202
- await expect(assertCanRead(mockSubgraph, "doc-123", ctx)).resolves.not.toThrow();
203
- });
204
- it("should throw GraphQLError when user cannot read", async () => {
205
- vi.mocked(mockDocumentPermissionService.canRead).mockResolvedValue(false);
206
- const ctx = createContext({ userAddress: "0xunpermitted" });
207
- await expect(assertCanRead(mockSubgraph, "doc-123", ctx)).rejects.toThrow(GraphQLError);
208
- });
209
- it("should throw with correct error message", async () => {
210
- vi.mocked(mockDocumentPermissionService.canRead).mockResolvedValue(false);
211
- const ctx = createContext({ userAddress: "0xunpermitted" });
212
- await expect(assertCanRead(mockSubgraph, "doc-123", ctx)).rejects.toThrow("Forbidden: insufficient permissions to read this document");
213
- });
214
- it("should throw for unauthenticated user", async () => {
215
- const ctx = createContext({});
216
- await expect(assertCanRead(mockSubgraph, "doc-123", ctx)).rejects.toThrow("Forbidden");
217
- });
218
- });
219
- describe("assertCanWrite", () => {
220
- let mockSubgraph;
221
- let mockDocumentPermissionService;
222
- beforeEach(() => {
223
- mockDocumentPermissionService = {
224
- canWrite: vi.fn().mockResolvedValue(false),
225
- };
226
- mockSubgraph = {
227
- documentPermissionService: mockDocumentPermissionService,
228
- reactorClient: {
229
- getParents: vi.fn().mockResolvedValue({
230
- results: [],
231
- options: { limit: 10 },
232
- }),
233
- },
234
- };
235
- });
236
- it("should not throw when user has global write access", async () => {
237
- const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
238
- await expect(assertCanWrite(mockSubgraph, "doc-123", ctx)).resolves.not.toThrow();
239
- });
240
- it("should not throw when user has document write permission", async () => {
241
- vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(true);
242
- const ctx = createContext({ userAddress: "0xpermitted" });
243
- await expect(assertCanWrite(mockSubgraph, "doc-123", ctx)).resolves.not.toThrow();
244
- });
245
- it("should throw GraphQLError when user cannot write", async () => {
246
- vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(false);
247
- const ctx = createContext({ userAddress: "0xunpermitted" });
248
- await expect(assertCanWrite(mockSubgraph, "doc-123", ctx)).rejects.toThrow(GraphQLError);
249
- });
250
- it("should throw with correct error message", async () => {
251
- vi.mocked(mockDocumentPermissionService.canWrite).mockResolvedValue(false);
252
- const ctx = createContext({ userAddress: "0xunpermitted" });
253
- await expect(assertCanWrite(mockSubgraph, "doc-123", ctx)).rejects.toThrow("Forbidden: insufficient permissions to write to this document");
254
- });
255
- });
256
- describe("assertCanExecuteOperation", () => {
257
- let mockSubgraph;
258
- let mockDocumentPermissionService;
259
- beforeEach(() => {
260
- mockDocumentPermissionService = {
261
- isOperationRestricted: vi.fn().mockResolvedValue(false),
262
- canExecuteOperation: vi.fn().mockResolvedValue(false),
263
- };
264
- mockSubgraph = {
265
- documentPermissionService: mockDocumentPermissionService,
266
- };
267
- });
268
- describe("No permission service", () => {
269
- it("should not throw when no permission service is available", async () => {
270
- const subgraphWithoutService = {
271
- documentPermissionService: undefined,
272
- };
273
- const ctx = createContext({ userAddress: "0xuser" });
274
- await expect(assertCanExecuteOperation(subgraphWithoutService, "doc-123", "SET_NAME", ctx)).resolves.not.toThrow();
275
- });
276
- });
277
- describe("Admin bypass", () => {
278
- it("should not throw when user is global admin", async () => {
279
- const ctx = createContext({ isAdmin: true, userAddress: "0xadmin" });
280
- await expect(assertCanExecuteOperation(mockSubgraph, "doc-123", "SET_NAME", ctx)).resolves.not.toThrow();
281
- // Should not check operation restrictions for admin
282
- expect(mockDocumentPermissionService.isOperationRestricted).not.toHaveBeenCalled();
283
- });
284
- });
285
- describe("Unrestricted operations", () => {
286
- it("should not throw when operation is not restricted", async () => {
287
- vi.mocked(mockDocumentPermissionService.isOperationRestricted).mockResolvedValue(false);
288
- const ctx = createContext({ userAddress: "0xuser" });
289
- await expect(assertCanExecuteOperation(mockSubgraph, "doc-123", "COMMON_OPERATION", ctx)).resolves.not.toThrow();
290
- expect(mockDocumentPermissionService.isOperationRestricted).toHaveBeenCalledWith("doc-123", "COMMON_OPERATION");
291
- expect(mockDocumentPermissionService.canExecuteOperation).not.toHaveBeenCalled();
292
- });
293
- });
294
- describe("Restricted operations", () => {
295
- beforeEach(() => {
296
- vi.mocked(mockDocumentPermissionService.isOperationRestricted).mockResolvedValue(true);
297
- });
298
- it("should not throw when user has operation permission", async () => {
299
- vi.mocked(mockDocumentPermissionService.canExecuteOperation).mockResolvedValue(true);
300
- const ctx = createContext({ userAddress: "0xauthorized" });
301
- await expect(assertCanExecuteOperation(mockSubgraph, "doc-123", "RESTRICTED_OP", ctx)).resolves.not.toThrow();
302
- expect(mockDocumentPermissionService.canExecuteOperation).toHaveBeenCalledWith("doc-123", "RESTRICTED_OP", "0xauthorized");
303
- });
304
- it("should throw when user lacks operation permission", async () => {
305
- vi.mocked(mockDocumentPermissionService.canExecuteOperation).mockResolvedValue(false);
306
- const ctx = createContext({ userAddress: "0xunauthorized" });
307
- await expect(assertCanExecuteOperation(mockSubgraph, "doc-123", "RESTRICTED_OP", ctx)).rejects.toThrow(GraphQLError);
308
- });
309
- it("should throw with operation name in error message", async () => {
310
- vi.mocked(mockDocumentPermissionService.canExecuteOperation).mockResolvedValue(false);
311
- const ctx = createContext({ userAddress: "0xunauthorized" });
312
- await expect(assertCanExecuteOperation(mockSubgraph, "doc-123", "SET_SENSITIVE_DATA", ctx)).rejects.toThrow('Forbidden: insufficient permissions to execute operation "SET_SENSITIVE_DATA" on this document');
313
- });
314
- it("should pass undefined user address when not authenticated", async () => {
315
- vi.mocked(mockDocumentPermissionService.canExecuteOperation).mockResolvedValue(false);
316
- const ctx = createContext({});
317
- await expect(assertCanExecuteOperation(mockSubgraph, "doc-123", "RESTRICTED_OP", ctx)).rejects.toThrow("Forbidden");
318
- expect(mockDocumentPermissionService.canExecuteOperation).toHaveBeenCalledWith("doc-123", "RESTRICTED_OP", undefined);
319
- });
320
- });
321
- });
322
- describe("Edge Cases", () => {
323
- describe("Empty string user address", () => {
324
- it("should handle empty string user address", () => {
325
- const ctx = createContext({ userAddress: "" });
326
- const result = hasGlobalAdminAccess(ctx);
327
- expect(result).toBe(false);
328
- expect(ctx.isAdmin).toHaveBeenCalledWith("");
329
- });
330
- });
331
- describe("Case sensitivity", () => {
332
- it("should pass user address as-is to permission checks", async () => {
333
- const mockDocPermService = {
334
- canRead: vi.fn().mockResolvedValue(true),
335
- };
336
- const mockSubgraph = {
337
- documentPermissionService: mockDocPermService,
338
- reactorClient: {
339
- getParents: vi.fn().mockResolvedValue({ results: [] }),
340
- },
341
- };
342
- const ctx = createContext({ userAddress: "0xABCDEF" });
343
- await canReadDocument(mockSubgraph, "doc-123", ctx);
344
- expect(mockDocPermService.canRead).toHaveBeenCalledWith("doc-123", "0xABCDEF", expect.any(Function));
345
- });
346
- });
347
- });
348
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=vetra-read-model-permissions.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vetra-read-model-permissions.test.d.ts","sourceRoot":"","sources":["../../../subgraphs/__tests__/vetra-read-model-permissions.test.ts"],"names":[],"mappings":""}