@powerhousedao/reactor-api 6.0.0-dev.7 → 6.0.0-dev.77
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.
- package/dist/codegen.js +1 -1
- package/dist/codegen.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/src/config.d.ts +1 -2
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +1 -5
- package/dist/src/config.js.map +1 -1
- package/dist/src/graphql/auth/resolvers.d.ts +17 -0
- package/dist/src/graphql/auth/resolvers.d.ts.map +1 -1
- package/dist/src/graphql/auth/resolvers.js +54 -0
- package/dist/src/graphql/auth/resolvers.js.map +1 -1
- package/dist/src/graphql/auth/schema.graphql +27 -5
- package/dist/src/graphql/auth/subgraph.d.ts +25 -0
- package/dist/src/graphql/auth/subgraph.d.ts.map +1 -1
- package/dist/src/graphql/auth/subgraph.js +45 -1
- package/dist/src/graphql/auth/subgraph.js.map +1 -1
- package/dist/src/graphql/base-subgraph.d.ts +12 -4
- package/dist/src/graphql/base-subgraph.d.ts.map +1 -1
- package/dist/src/graphql/base-subgraph.js +94 -2
- package/dist/src/graphql/base-subgraph.js.map +1 -1
- package/dist/src/graphql/document-model-subgraph.d.ts +16 -44
- package/dist/src/graphql/document-model-subgraph.d.ts.map +1 -1
- package/dist/src/graphql/document-model-subgraph.js +285 -87
- package/dist/src/graphql/document-model-subgraph.js.map +1 -1
- package/dist/src/graphql/graphql-manager.d.ts +28 -6
- package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
- package/dist/src/graphql/graphql-manager.js +266 -161
- package/dist/src/graphql/graphql-manager.js.map +1 -1
- package/dist/src/graphql/index.d.ts +2 -1
- package/dist/src/graphql/index.d.ts.map +1 -1
- package/dist/src/graphql/index.js +2 -1
- package/dist/src/graphql/index.js.map +1 -1
- package/dist/src/graphql/packages/index.d.ts +2 -0
- package/dist/src/graphql/packages/index.d.ts.map +1 -0
- package/dist/src/graphql/packages/index.js +2 -0
- package/dist/src/graphql/packages/index.js.map +1 -0
- package/dist/src/graphql/packages/resolvers.d.ts +31 -0
- package/dist/src/graphql/packages/resolvers.d.ts.map +1 -0
- package/dist/src/graphql/packages/resolvers.js +37 -0
- package/dist/src/graphql/packages/resolvers.js.map +1 -0
- package/dist/src/graphql/packages/schema.graphql +50 -0
- package/dist/src/graphql/packages/subgraph.d.ts +55 -0
- package/dist/src/graphql/packages/subgraph.d.ts.map +1 -0
- package/dist/src/graphql/packages/subgraph.js +73 -0
- package/dist/src/graphql/packages/subgraph.js.map +1 -0
- package/dist/src/graphql/reactor/adapters.d.ts +10 -2
- package/dist/src/graphql/reactor/adapters.d.ts.map +1 -1
- package/dist/src/graphql/reactor/adapters.js +35 -1
- package/dist/src/graphql/reactor/adapters.js.map +1 -1
- package/dist/src/graphql/reactor/factory.d.ts +16 -1
- package/dist/src/graphql/reactor/factory.d.ts.map +1 -1
- package/dist/src/graphql/reactor/factory.js +1 -1
- package/dist/src/graphql/reactor/factory.js.map +1 -1
- package/dist/src/graphql/reactor/gen/graphql.d.ts +271 -76
- package/dist/src/graphql/reactor/gen/graphql.d.ts.map +1 -1
- package/dist/src/graphql/reactor/gen/graphql.js +181 -10
- package/dist/src/graphql/reactor/gen/graphql.js.map +1 -1
- package/dist/src/graphql/reactor/index.d.ts +1 -1
- package/dist/src/graphql/reactor/index.d.ts.map +1 -1
- package/dist/src/graphql/reactor/index.js +1 -1
- package/dist/src/graphql/reactor/index.js.map +1 -1
- package/dist/src/graphql/reactor/operations.graphql +132 -1
- package/dist/src/graphql/reactor/requester.with-zod.d.ts.map +1 -1
- package/dist/src/graphql/reactor/requester.with-zod.js +109 -38
- package/dist/src/graphql/reactor/requester.with-zod.js.map +1 -1
- package/dist/src/graphql/reactor/resolvers.d.ts +78 -25
- package/dist/src/graphql/reactor/resolvers.d.ts.map +1 -1
- package/dist/src/graphql/reactor/resolvers.js +197 -74
- package/dist/src/graphql/reactor/resolvers.js.map +1 -1
- package/dist/src/graphql/reactor/schema.graphql +70 -30
- package/dist/src/graphql/reactor/subgraph.d.ts +2 -31
- package/dist/src/graphql/reactor/subgraph.d.ts.map +1 -1
- package/dist/src/graphql/reactor/subgraph.js +132 -209
- package/dist/src/graphql/reactor/subgraph.js.map +1 -1
- package/dist/src/graphql/reactor/validation.d.ts +208 -20
- package/dist/src/graphql/reactor/validation.d.ts.map +1 -1
- package/dist/src/graphql/reactor/validation.js +90 -4
- package/dist/src/graphql/reactor/validation.js.map +1 -1
- package/dist/src/graphql/system/index.d.ts +0 -1
- package/dist/src/graphql/system/index.d.ts.map +1 -1
- package/dist/src/graphql/system/index.js +0 -1
- package/dist/src/graphql/system/index.js.map +1 -1
- package/dist/src/graphql/types.d.ts +6 -8
- package/dist/src/graphql/types.d.ts.map +1 -1
- package/dist/src/graphql/utils.d.ts +1 -18
- package/dist/src/graphql/utils.d.ts.map +1 -1
- package/dist/src/graphql/utils.js +7 -35
- package/dist/src/graphql/utils.js.map +1 -1
- package/dist/src/migrations/002_add_document_protection.d.ts +4 -0
- package/dist/src/migrations/002_add_document_protection.d.ts.map +1 -0
- package/dist/src/migrations/002_add_document_protection.js +18 -0
- package/dist/src/migrations/002_add_document_protection.js.map +1 -0
- package/dist/src/migrations/index.d.ts.map +1 -1
- package/dist/src/migrations/index.js +2 -0
- package/dist/src/migrations/index.js.map +1 -1
- package/dist/src/packages/http-loader.d.ts +68 -0
- package/dist/src/packages/http-loader.d.ts.map +1 -0
- package/dist/src/packages/http-loader.js +176 -0
- package/dist/src/packages/http-loader.js.map +1 -0
- package/dist/src/packages/https-hooks.d.mts +23 -0
- package/dist/src/packages/https-hooks.d.mts.map +1 -0
- package/dist/src/packages/https-hooks.mjs +59 -0
- package/dist/src/packages/https-hooks.mjs.map +1 -0
- package/dist/src/packages/import-loader.d.ts +5 -3
- package/dist/src/packages/import-loader.d.ts.map +1 -1
- package/dist/src/packages/import-loader.js +19 -10
- package/dist/src/packages/import-loader.js.map +1 -1
- package/dist/src/packages/package-manager.d.ts +2 -2
- package/dist/src/packages/package-manager.d.ts.map +1 -1
- package/dist/src/packages/package-manager.js.map +1 -1
- package/dist/src/packages/types.d.ts +9 -4
- package/dist/src/packages/types.d.ts.map +1 -1
- package/dist/src/packages/util.d.ts +3 -2
- package/dist/src/packages/util.d.ts.map +1 -1
- package/dist/src/packages/util.js +1 -1
- package/dist/src/packages/util.js.map +1 -1
- package/dist/src/packages/vite-loader.d.ts +10 -8
- package/dist/src/packages/vite-loader.d.ts.map +1 -1
- package/dist/src/packages/vite-loader.js +33 -10
- package/dist/src/packages/vite-loader.js.map +1 -1
- package/dist/src/server.d.ts +14 -11
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +153 -92
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/auth.service.d.ts +0 -12
- package/dist/src/services/auth.service.d.ts.map +1 -1
- package/dist/src/services/auth.service.js +13 -40
- package/dist/src/services/auth.service.js.map +1 -1
- package/dist/src/services/authorization.service.d.ts +70 -0
- package/dist/src/services/authorization.service.d.ts.map +1 -0
- package/dist/src/services/authorization.service.js +155 -0
- package/dist/src/services/authorization.service.js.map +1 -0
- package/dist/src/services/document-permission.service.d.ts +47 -7
- package/dist/src/services/document-permission.service.d.ts.map +1 -1
- package/dist/src/services/document-permission.service.js +162 -7
- package/dist/src/services/document-permission.service.js.map +1 -1
- package/dist/src/services/package-management.service.d.ts +32 -0
- package/dist/src/services/package-management.service.d.ts.map +1 -0
- package/dist/src/services/package-management.service.js +95 -0
- package/dist/src/services/package-management.service.js.map +1 -0
- package/dist/src/services/package-storage.d.ts +23 -0
- package/dist/src/services/package-storage.d.ts.map +1 -0
- package/dist/src/services/package-storage.js +19 -0
- package/dist/src/services/package-storage.js.map +1 -0
- package/dist/src/tracing.d.ts.map +1 -1
- package/dist/src/tracing.js +19 -1
- package/dist/src/tracing.js.map +1 -1
- package/dist/src/types.d.ts +5 -5
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/auth.d.ts +1 -1
- package/dist/src/utils/auth.d.ts.map +1 -1
- package/dist/src/utils/auth.js +5 -12
- package/dist/src/utils/auth.js.map +1 -1
- package/dist/src/utils/create-schema.d.ts +25 -6
- package/dist/src/utils/create-schema.d.ts.map +1 -1
- package/dist/src/utils/create-schema.js +294 -22
- package/dist/src/utils/create-schema.js.map +1 -1
- package/dist/src/utils/db.d.ts +8 -0
- package/dist/src/utils/db.d.ts.map +1 -1
- package/dist/src/utils/db.js.map +1 -1
- package/dist/src/utils/drive-url.d.ts +2 -0
- package/dist/src/utils/drive-url.d.ts.map +1 -0
- package/dist/src/utils/drive-url.js +3 -0
- package/dist/src/utils/drive-url.js.map +1 -0
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +1 -0
- package/dist/src/utils/index.js.map +1 -1
- package/dist/test/authorization.service.test.d.ts +2 -0
- package/dist/test/authorization.service.test.d.ts.map +1 -0
- package/dist/test/authorization.service.test.js +252 -0
- package/dist/test/authorization.service.test.js.map +1 -0
- package/dist/test/connect-switchboard-reshuffle-convergence.test.d.ts +2 -0
- package/dist/test/connect-switchboard-reshuffle-convergence.test.d.ts.map +1 -0
- package/dist/test/connect-switchboard-reshuffle-convergence.test.js +203 -0
- package/dist/test/connect-switchboard-reshuffle-convergence.test.js.map +1 -0
- package/dist/test/connect-switchboard-sync.test.d.ts +2 -0
- package/dist/test/connect-switchboard-sync.test.d.ts.map +1 -0
- package/dist/test/connect-switchboard-sync.test.js +581 -0
- package/dist/test/connect-switchboard-sync.test.js.map +1 -0
- package/dist/test/document-drive-subgraph.test.d.ts +2 -0
- package/dist/test/document-drive-subgraph.test.d.ts.map +1 -0
- package/dist/test/document-drive-subgraph.test.js +186 -0
- package/dist/test/document-drive-subgraph.test.js.map +1 -0
- package/dist/test/document-model-subgraph-permissions.test.d.ts +2 -0
- package/dist/test/document-model-subgraph-permissions.test.d.ts.map +1 -0
- package/dist/test/document-model-subgraph-permissions.test.js +563 -0
- package/dist/test/document-model-subgraph-permissions.test.js.map +1 -0
- package/dist/test/drive-info-endpoint.test.d.ts +2 -0
- package/dist/test/drive-info-endpoint.test.d.ts.map +1 -0
- package/dist/test/drive-info-endpoint.test.js +123 -0
- package/dist/test/drive-info-endpoint.test.js.map +1 -0
- package/dist/test/index.d.ts +0 -1
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +0 -1
- package/dist/test/index.js.map +1 -1
- package/dist/test/permissions-integration.test.js +6 -20
- package/dist/test/permissions-integration.test.js.map +1 -1
- package/dist/test/push-backfill.test.d.ts +2 -0
- package/dist/test/push-backfill.test.d.ts.map +1 -0
- package/dist/test/push-backfill.test.js +298 -0
- package/dist/test/push-backfill.test.js.map +1 -0
- package/dist/test/reactor-client.test.js +87 -13
- package/dist/test/reactor-client.test.js.map +1 -1
- package/dist/test/reactor-resolvers.test.js +8 -11
- package/dist/test/reactor-resolvers.test.js.map +1 -1
- package/dist/test/reactor-subgraph-permissions.test.js +7 -36
- package/dist/test/reactor-subgraph-permissions.test.js.map +1 -1
- package/dist/test/subscriptions.test.js +2 -0
- package/dist/test/subscriptions.test.js.map +1 -1
- package/dist/test/utils/gql-resolver-bridge.d.ts +4 -1
- package/dist/test/utils/gql-resolver-bridge.d.ts.map +1 -1
- package/dist/test/utils/gql-resolver-bridge.js +36 -7
- package/dist/test/utils/gql-resolver-bridge.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +46 -55
- package/dist/src/graphql/drive-subgraph.d.ts +0 -25
- package/dist/src/graphql/drive-subgraph.d.ts.map +0 -1
- package/dist/src/graphql/drive-subgraph.js +0 -487
- package/dist/src/graphql/drive-subgraph.js.map +0 -1
- package/dist/src/graphql/system/system-subgraph.d.ts +0 -49
- package/dist/src/graphql/system/system-subgraph.d.ts.map +0 -1
- package/dist/src/graphql/system/system-subgraph.js +0 -130
- package/dist/src/graphql/system/system-subgraph.js.map +0 -1
- package/dist/src/sync/types.d.ts +0 -10
- package/dist/src/sync/types.d.ts.map +0 -1
- package/dist/src/sync/types.js +0 -2
- package/dist/src/sync/types.js.map +0 -1
- package/dist/src/sync/utils.d.ts +0 -7
- package/dist/src/sync/utils.d.ts.map +0 -1
- package/dist/src/sync/utils.js +0 -78
- package/dist/src/sync/utils.js.map +0 -1
- package/dist/test/drive-handlers.d.ts +0 -4
- package/dist/test/drive-handlers.d.ts.map +0 -1
- package/dist/test/drive-handlers.js +0 -39
- package/dist/test/drive-handlers.js.map +0 -1
- package/dist/test/drive-subgraph-permissions.test.d.ts +0 -2
- package/dist/test/drive-subgraph-permissions.test.d.ts.map +0 -1
- package/dist/test/drive-subgraph-permissions.test.js +0 -195
- package/dist/test/drive-subgraph-permissions.test.js.map +0 -1
- package/dist/test/drive.test.d.ts +0 -2
- package/dist/test/drive.test.d.ts.map +0 -1
- package/dist/test/drive.test.js +0 -142
- package/dist/test/drive.test.js.map +0 -1
- package/dist/test/pull-responder-transmitter.test.d.ts +0 -2
- package/dist/test/pull-responder-transmitter.test.d.ts.map +0 -1
- package/dist/test/pull-responder-transmitter.test.js +0 -220
- package/dist/test/pull-responder-transmitter.test.js.map +0 -1
- package/dist/test/push-transmitter.test.d.ts +0 -2
- package/dist/test/push-transmitter.test.d.ts.map +0 -1
- package/dist/test/push-transmitter.test.js +0 -179
- package/dist/test/push-transmitter.test.js.map +0 -1
- package/dist/test/system.test.d.ts +0 -2
- package/dist/test/system.test.d.ts.map +0 -1
- package/dist/test/system.test.js +0 -211
- package/dist/test/system.test.js.map +0 -1
- package/dist/test/three-reactor-gql-sync.test.d.ts +0 -2
- package/dist/test/three-reactor-gql-sync.test.d.ts.map +0 -1
- package/dist/test/three-reactor-gql-sync.test.js +0 -368
- package/dist/test/three-reactor-gql-sync.test.js.map +0 -1
- package/dist/test/two-reactor-gql-sync.test.d.ts +0 -2
- package/dist/test/two-reactor-gql-sync.test.d.ts.map +0 -1
- package/dist/test/two-reactor-gql-sync.test.js +0 -348
- package/dist/test/two-reactor-gql-sync.test.js.map +0 -1
package/dist/test/system.test.js
DELETED
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
import { SystemSubgraph } from "@powerhousedao/reactor-api";
|
|
2
|
-
import { driveDocumentModelModule, ReactorBuilder } from "document-drive";
|
|
3
|
-
import { documentModelDocumentModelModule } from "document-model";
|
|
4
|
-
import { generateId } from "document-model/core";
|
|
5
|
-
import { GraphQLError } from "graphql";
|
|
6
|
-
import { describe, expect, it, vi } from "vitest";
|
|
7
|
-
describe("SystemSubgraph", () => {
|
|
8
|
-
it("should be able to instantiate", () => {
|
|
9
|
-
const reactor = new ReactorBuilder([
|
|
10
|
-
documentModelDocumentModelModule,
|
|
11
|
-
driveDocumentModelModule,
|
|
12
|
-
]).build();
|
|
13
|
-
const systemSubgraph = new SystemSubgraph({ reactor });
|
|
14
|
-
expect(systemSubgraph).toBeInstanceOf(SystemSubgraph);
|
|
15
|
-
});
|
|
16
|
-
it("should return drives data", async () => {
|
|
17
|
-
const mockDrivesData = ["drive1", "drive2", "drive3"];
|
|
18
|
-
const mockReactor = {
|
|
19
|
-
getDrivesSlugs: vi.fn().mockResolvedValue(mockDrivesData),
|
|
20
|
-
};
|
|
21
|
-
const systemSubgraph = new SystemSubgraph({ reactor: mockReactor });
|
|
22
|
-
const drives = await systemSubgraph.resolvers.Query?.drives();
|
|
23
|
-
expect(drives).toEqual(mockDrivesData);
|
|
24
|
-
expect(mockReactor.getDrivesSlugs).toHaveBeenCalled();
|
|
25
|
-
});
|
|
26
|
-
it("should add drive successfully with admin authorization", async () => {
|
|
27
|
-
const reactor = new ReactorBuilder([
|
|
28
|
-
documentModelDocumentModelModule,
|
|
29
|
-
driveDocumentModelModule,
|
|
30
|
-
]).build();
|
|
31
|
-
const mockDriveData = {
|
|
32
|
-
id: generateId(),
|
|
33
|
-
slug: "test-drive",
|
|
34
|
-
global: {
|
|
35
|
-
name: "Test Drive",
|
|
36
|
-
icon: "test-icon",
|
|
37
|
-
},
|
|
38
|
-
local: {},
|
|
39
|
-
};
|
|
40
|
-
const mockIsAdmin = vi.fn().mockReturnValue(true);
|
|
41
|
-
const mockUser = {
|
|
42
|
-
address: "0x1234567890123456789012345678901234567890",
|
|
43
|
-
chainId: 1,
|
|
44
|
-
networkId: "mainnet",
|
|
45
|
-
};
|
|
46
|
-
const context = {
|
|
47
|
-
isAdmin: mockIsAdmin,
|
|
48
|
-
user: mockUser,
|
|
49
|
-
};
|
|
50
|
-
const systemSubgraph = new SystemSubgraph({ reactor });
|
|
51
|
-
const result = await systemSubgraph.resolvers.Mutation?.addDrive(null, {
|
|
52
|
-
name: "Test Drive",
|
|
53
|
-
icon: "test-icon",
|
|
54
|
-
id: mockDriveData.id,
|
|
55
|
-
slug: "test-drive",
|
|
56
|
-
preferredEditor: "test-editor",
|
|
57
|
-
}, context);
|
|
58
|
-
expect(result).toMatchObject({
|
|
59
|
-
id: expect.any(String),
|
|
60
|
-
slug: "test-drive",
|
|
61
|
-
name: "Test Drive",
|
|
62
|
-
icon: "test-icon",
|
|
63
|
-
preferredEditor: "test-editor",
|
|
64
|
-
});
|
|
65
|
-
expect(mockIsAdmin).toHaveBeenCalledWith(mockUser.address);
|
|
66
|
-
});
|
|
67
|
-
it("should throw error when adding drive without admin authorization", async () => {
|
|
68
|
-
const reactor = new ReactorBuilder([
|
|
69
|
-
documentModelDocumentModelModule,
|
|
70
|
-
driveDocumentModelModule,
|
|
71
|
-
]).build();
|
|
72
|
-
const mockIsAdmin = vi.fn().mockReturnValue(false);
|
|
73
|
-
const mockUser = {
|
|
74
|
-
address: "0x1234567890123456789012345678901234567890",
|
|
75
|
-
chainId: 1,
|
|
76
|
-
networkId: "mainnet",
|
|
77
|
-
};
|
|
78
|
-
const context = {
|
|
79
|
-
isAdmin: mockIsAdmin,
|
|
80
|
-
user: mockUser,
|
|
81
|
-
};
|
|
82
|
-
const systemSubgraph = new SystemSubgraph({ reactor });
|
|
83
|
-
await expect(systemSubgraph.resolvers.Mutation?.addDrive(null, {
|
|
84
|
-
name: "Test Drive",
|
|
85
|
-
icon: "test-icon",
|
|
86
|
-
id: generateId(),
|
|
87
|
-
slug: "test-drive",
|
|
88
|
-
}, context)).rejects.toThrow(GraphQLError);
|
|
89
|
-
expect(mockIsAdmin).toHaveBeenCalledWith(mockUser.address);
|
|
90
|
-
});
|
|
91
|
-
it("should delete drive successfully with admin authorization", async () => {
|
|
92
|
-
const reactor = new ReactorBuilder([
|
|
93
|
-
documentModelDocumentModelModule,
|
|
94
|
-
driveDocumentModelModule,
|
|
95
|
-
]).build();
|
|
96
|
-
const driveId = generateId();
|
|
97
|
-
const mockDriveData = {
|
|
98
|
-
id: driveId,
|
|
99
|
-
global: {
|
|
100
|
-
name: "Test Drive",
|
|
101
|
-
icon: undefined,
|
|
102
|
-
},
|
|
103
|
-
local: {},
|
|
104
|
-
};
|
|
105
|
-
// First add a drive to delete
|
|
106
|
-
await reactor.addDrive(mockDriveData);
|
|
107
|
-
const mockIsAdmin = vi.fn().mockReturnValue(true);
|
|
108
|
-
const mockUser = {
|
|
109
|
-
address: "0x1234567890123456789012345678901234567890",
|
|
110
|
-
chainId: 1,
|
|
111
|
-
networkId: "mainnet",
|
|
112
|
-
};
|
|
113
|
-
const context = {
|
|
114
|
-
isAdmin: mockIsAdmin,
|
|
115
|
-
user: mockUser,
|
|
116
|
-
};
|
|
117
|
-
const systemSubgraph = new SystemSubgraph({ reactor });
|
|
118
|
-
const result = await systemSubgraph.resolvers.Mutation?.deleteDrive(null, { id: driveId }, context);
|
|
119
|
-
expect(result).toBe(true);
|
|
120
|
-
expect(mockIsAdmin).toHaveBeenCalledWith(mockUser.address);
|
|
121
|
-
});
|
|
122
|
-
it("should throw error when deleting drive without admin authorization", async () => {
|
|
123
|
-
const reactor = new ReactorBuilder([
|
|
124
|
-
documentModelDocumentModelModule,
|
|
125
|
-
driveDocumentModelModule,
|
|
126
|
-
]).build();
|
|
127
|
-
const driveId = generateId();
|
|
128
|
-
const mockIsAdmin = vi.fn().mockReturnValue(false);
|
|
129
|
-
const mockUser = {
|
|
130
|
-
address: "0x1234567890123456789012345678901234567890",
|
|
131
|
-
chainId: 1,
|
|
132
|
-
networkId: "mainnet",
|
|
133
|
-
};
|
|
134
|
-
const context = {
|
|
135
|
-
isAdmin: mockIsAdmin,
|
|
136
|
-
user: mockUser,
|
|
137
|
-
};
|
|
138
|
-
const systemSubgraph = new SystemSubgraph({ reactor });
|
|
139
|
-
await expect(systemSubgraph.resolvers.Mutation?.deleteDrive(null, { id: driveId }, context)).rejects.toThrow(GraphQLError);
|
|
140
|
-
expect(mockIsAdmin).toHaveBeenCalledWith(mockUser.address);
|
|
141
|
-
});
|
|
142
|
-
it("should handle addDrive errors gracefully", async () => {
|
|
143
|
-
const mockReactor = {
|
|
144
|
-
addDrive: vi.fn().mockRejectedValue(new Error("Drive creation failed")),
|
|
145
|
-
};
|
|
146
|
-
const mockIsAdmin = vi.fn().mockReturnValue(true);
|
|
147
|
-
const mockUser = {
|
|
148
|
-
address: "0x1234567890123456789012345678901234567890",
|
|
149
|
-
chainId: 1,
|
|
150
|
-
networkId: "mainnet",
|
|
151
|
-
};
|
|
152
|
-
const context = {
|
|
153
|
-
isAdmin: mockIsAdmin,
|
|
154
|
-
user: mockUser,
|
|
155
|
-
};
|
|
156
|
-
const systemSubgraph = new SystemSubgraph({ reactor: mockReactor });
|
|
157
|
-
await expect(systemSubgraph.resolvers.Mutation?.addDrive(null, {
|
|
158
|
-
name: "Test Drive",
|
|
159
|
-
icon: "test-icon",
|
|
160
|
-
id: generateId(),
|
|
161
|
-
slug: "test-drive",
|
|
162
|
-
}, context)).rejects.toThrow("Drive creation failed");
|
|
163
|
-
});
|
|
164
|
-
it("should handle deleteDrive errors gracefully", async () => {
|
|
165
|
-
const mockReactor = {
|
|
166
|
-
deleteDrive: vi
|
|
167
|
-
.fn()
|
|
168
|
-
.mockRejectedValue(new Error("Drive deletion failed")),
|
|
169
|
-
};
|
|
170
|
-
const mockIsAdmin = vi.fn().mockReturnValue(true);
|
|
171
|
-
const mockUser = {
|
|
172
|
-
address: "0x1234567890123456789012345678901234567890",
|
|
173
|
-
chainId: 1,
|
|
174
|
-
networkId: "mainnet",
|
|
175
|
-
};
|
|
176
|
-
const context = {
|
|
177
|
-
isAdmin: mockIsAdmin,
|
|
178
|
-
user: mockUser,
|
|
179
|
-
};
|
|
180
|
-
const systemSubgraph = new SystemSubgraph({ reactor: mockReactor });
|
|
181
|
-
const result = await systemSubgraph.resolvers.Mutation?.deleteDrive(null, { id: generateId() }, context);
|
|
182
|
-
expect(result).toBe(false);
|
|
183
|
-
});
|
|
184
|
-
it("should add drive with minimal required fields", async () => {
|
|
185
|
-
const reactor = new ReactorBuilder([
|
|
186
|
-
documentModelDocumentModelModule,
|
|
187
|
-
driveDocumentModelModule,
|
|
188
|
-
]).build();
|
|
189
|
-
const mockIsAdmin = vi.fn().mockReturnValue(true);
|
|
190
|
-
const mockUser = {
|
|
191
|
-
address: "0x1234567890123456789012345678901234567890",
|
|
192
|
-
chainId: 1,
|
|
193
|
-
networkId: "mainnet",
|
|
194
|
-
};
|
|
195
|
-
const context = {
|
|
196
|
-
isAdmin: mockIsAdmin,
|
|
197
|
-
user: mockUser,
|
|
198
|
-
};
|
|
199
|
-
const systemSubgraph = new SystemSubgraph({ reactor });
|
|
200
|
-
const result = await systemSubgraph.resolvers.Mutation?.addDrive(null, {
|
|
201
|
-
name: "Minimal Drive",
|
|
202
|
-
}, context);
|
|
203
|
-
expect(result).toMatchObject({
|
|
204
|
-
id: expect.any(String),
|
|
205
|
-
slug: expect.any(String),
|
|
206
|
-
name: "Minimal Drive",
|
|
207
|
-
icon: null,
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
//# sourceMappingURL=system.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"system.test.js","sourceRoot":"","sources":["../../test/system.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"three-reactor-gql-sync.test.d.ts","sourceRoot":"","sources":["../../test/three-reactor-gql-sync.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,368 +0,0 @@
|
|
|
1
|
-
import { CompositeChannelFactory, ConsoleLogger, JobStatus, OperationEventTypes, ReactorBuilder, ReactorClientBuilder, SyncBuilder, } from "@powerhousedao/reactor";
|
|
2
|
-
import { driveDocumentModelModule } from "document-drive";
|
|
3
|
-
import { documentModelDocumentModelModule, } from "document-model";
|
|
4
|
-
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
5
|
-
import { createResolverBridge } from "./utils/gql-resolver-bridge.js";
|
|
6
|
-
async function waitForJobCompletion(reactor, jobId, timeoutMs = 5000) {
|
|
7
|
-
const startTime = Date.now();
|
|
8
|
-
while (Date.now() - startTime < timeoutMs) {
|
|
9
|
-
const status = await reactor.getJobStatus(jobId);
|
|
10
|
-
if (status.status === JobStatus.READ_MODELS_READY) {
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
if (status.status === JobStatus.FAILED) {
|
|
14
|
-
throw new Error(`Job failed: ${status.error?.message || "Unknown"}`);
|
|
15
|
-
}
|
|
16
|
-
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
17
|
-
}
|
|
18
|
-
throw new Error(`Job did not complete within ${timeoutMs}ms`);
|
|
19
|
-
}
|
|
20
|
-
async function waitForOperationsReady(eventBus, documentId, timeoutMs = 5000) {
|
|
21
|
-
return new Promise((resolve, reject) => {
|
|
22
|
-
const timeout = setTimeout(() => {
|
|
23
|
-
unsubscribe();
|
|
24
|
-
reject(new Error(`OPERATIONS_READY event for document ${documentId} not received within ${timeoutMs}ms`));
|
|
25
|
-
}, timeoutMs);
|
|
26
|
-
const unsubscribe = eventBus.subscribe(OperationEventTypes.OPERATIONS_READY, (type, event) => {
|
|
27
|
-
const hasDocument = event.operations.some((op) => op.context.documentId === documentId);
|
|
28
|
-
if (hasDocument) {
|
|
29
|
-
clearTimeout(timeout);
|
|
30
|
-
unsubscribe();
|
|
31
|
-
resolve();
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
async function waitForDocumentExists(reactor, documentId, timeoutMs = 10000) {
|
|
37
|
-
const startTime = Date.now();
|
|
38
|
-
while (Date.now() - startTime < timeoutMs) {
|
|
39
|
-
try {
|
|
40
|
-
await reactor.get(documentId);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
throw new Error(`Document ${documentId} did not appear within ${timeoutMs}ms`);
|
|
48
|
-
}
|
|
49
|
-
async function pollUntilSynced(reactorA, reactorB, reactorC, documentId, timeoutMs = 15000) {
|
|
50
|
-
const startTime = Date.now();
|
|
51
|
-
while (Date.now() - startTime < timeoutMs) {
|
|
52
|
-
try {
|
|
53
|
-
const resultA = await reactorA.getOperations(documentId, {
|
|
54
|
-
branch: "main",
|
|
55
|
-
});
|
|
56
|
-
const opsA = Object.values(resultA).flatMap((scope) => scope.results);
|
|
57
|
-
const resultB = await reactorB.getOperations(documentId, {
|
|
58
|
-
branch: "main",
|
|
59
|
-
});
|
|
60
|
-
const opsB = Object.values(resultB).flatMap((scope) => scope.results);
|
|
61
|
-
const resultC = await reactorC.getOperations(documentId, {
|
|
62
|
-
branch: "main",
|
|
63
|
-
});
|
|
64
|
-
const opsC = Object.values(resultC).flatMap((scope) => scope.results);
|
|
65
|
-
if (opsA.length > 0 &&
|
|
66
|
-
opsA.length === opsB.length &&
|
|
67
|
-
opsB.length === opsC.length) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
// Document may not exist yet on some reactors
|
|
73
|
-
}
|
|
74
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
75
|
-
}
|
|
76
|
-
throw new Error(`Reactors did not sync document ${documentId} within ${timeoutMs}ms`);
|
|
77
|
-
}
|
|
78
|
-
async function setupThreeReactorsWithGqlChannel() {
|
|
79
|
-
const syncManagerRegistry = new Map();
|
|
80
|
-
const resolverBridge = createResolverBridge(syncManagerRegistry);
|
|
81
|
-
const logger = new ConsoleLogger(["test"]);
|
|
82
|
-
const channelFactorySwitchboard = new CompositeChannelFactory(logger);
|
|
83
|
-
const channelFactoryClient1 = new CompositeChannelFactory(logger);
|
|
84
|
-
const channelFactoryClient2 = new CompositeChannelFactory(logger);
|
|
85
|
-
const models = [
|
|
86
|
-
driveDocumentModelModule,
|
|
87
|
-
documentModelDocumentModelModule,
|
|
88
|
-
];
|
|
89
|
-
const switchboardModule = await new ReactorClientBuilder()
|
|
90
|
-
.withReactorBuilder(new ReactorBuilder()
|
|
91
|
-
.withDocumentModels(models)
|
|
92
|
-
.withSync(new SyncBuilder().withChannelFactory(channelFactorySwitchboard)))
|
|
93
|
-
.buildModule();
|
|
94
|
-
const client1Module = await new ReactorClientBuilder()
|
|
95
|
-
.withReactorBuilder(new ReactorBuilder()
|
|
96
|
-
.withDocumentModels(models)
|
|
97
|
-
.withSync(new SyncBuilder().withChannelFactory(channelFactoryClient1)))
|
|
98
|
-
.buildModule();
|
|
99
|
-
const client2Module = await new ReactorClientBuilder()
|
|
100
|
-
.withReactorBuilder(new ReactorBuilder()
|
|
101
|
-
.withDocumentModels(models)
|
|
102
|
-
.withSync(new SyncBuilder().withChannelFactory(channelFactoryClient2)))
|
|
103
|
-
.buildModule();
|
|
104
|
-
const reactorSwitchboard = switchboardModule.reactor;
|
|
105
|
-
const reactorClient1 = client1Module.reactor;
|
|
106
|
-
const reactorClient2 = client2Module.reactor;
|
|
107
|
-
const eventBusSwitchboard = switchboardModule.eventBus;
|
|
108
|
-
const eventBusClient1 = client1Module.eventBus;
|
|
109
|
-
const eventBusClient2 = client2Module.eventBus;
|
|
110
|
-
const syncManagerSwitchboard = switchboardModule.reactorModule.syncModule.syncManager;
|
|
111
|
-
const syncManagerClient1 = client1Module.reactorModule.syncModule.syncManager;
|
|
112
|
-
const syncManagerClient2 = client2Module.reactorModule.syncModule.syncManager;
|
|
113
|
-
syncManagerRegistry.set("switchboard", syncManagerSwitchboard);
|
|
114
|
-
syncManagerRegistry.set("client1", syncManagerClient1);
|
|
115
|
-
syncManagerRegistry.set("client2", syncManagerClient2);
|
|
116
|
-
const filter = {
|
|
117
|
-
documentId: [],
|
|
118
|
-
scope: [],
|
|
119
|
-
branch: "main",
|
|
120
|
-
};
|
|
121
|
-
const gqlParamsToSwitchboard = {
|
|
122
|
-
url: "http://switchboard/graphql",
|
|
123
|
-
pollIntervalMs: 100,
|
|
124
|
-
maxFailures: 10,
|
|
125
|
-
retryBaseDelayMs: 50,
|
|
126
|
-
fetchFn: resolverBridge,
|
|
127
|
-
};
|
|
128
|
-
await syncManagerClient1.add("remoteSwitchboard", "collection1", { type: "gql", parameters: gqlParamsToSwitchboard }, filter);
|
|
129
|
-
await syncManagerClient2.add("remoteSwitchboard", "collection1", { type: "gql", parameters: gqlParamsToSwitchboard }, filter);
|
|
130
|
-
return {
|
|
131
|
-
switchboard: switchboardModule.client,
|
|
132
|
-
client1: client1Module.client,
|
|
133
|
-
client2: client2Module.client,
|
|
134
|
-
reactorSwitchboard,
|
|
135
|
-
reactorClient1,
|
|
136
|
-
reactorClient2,
|
|
137
|
-
eventBusSwitchboard,
|
|
138
|
-
eventBusClient1,
|
|
139
|
-
eventBusClient2,
|
|
140
|
-
syncManagerSwitchboard,
|
|
141
|
-
syncManagerClient1,
|
|
142
|
-
syncManagerClient2,
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
describe("Three-Reactor Sync (Switchboard Pattern)", () => {
|
|
146
|
-
let setup;
|
|
147
|
-
beforeEach(async () => {
|
|
148
|
-
setup = await setupThreeReactorsWithGqlChannel();
|
|
149
|
-
});
|
|
150
|
-
afterEach(() => {
|
|
151
|
-
setup.reactorSwitchboard.kill();
|
|
152
|
-
setup.reactorClient1.kill();
|
|
153
|
-
setup.reactorClient2.kill();
|
|
154
|
-
});
|
|
155
|
-
describe("Operation Ordering", () => {
|
|
156
|
-
it("should deliver CREATE_DOCUMENT before ADD_RELATIONSHIP for new documents", async () => {
|
|
157
|
-
const drive = driveDocumentModelModule.utils.createDocument();
|
|
158
|
-
const readyOnClient1 = waitForOperationsReady(setup.eventBusClient1, drive.header.id);
|
|
159
|
-
const readyOnClient2 = waitForOperationsReady(setup.eventBusClient2, drive.header.id);
|
|
160
|
-
const driveJob = await setup.reactorSwitchboard.create(drive);
|
|
161
|
-
await waitForJobCompletion(setup.reactorSwitchboard, driveJob.id);
|
|
162
|
-
await Promise.all([readyOnClient1, readyOnClient2]);
|
|
163
|
-
const newDoc = driveDocumentModelModule.utils.createDocument();
|
|
164
|
-
const doc = await setup.client1.createDocumentInDrive(drive.header.id, newDoc);
|
|
165
|
-
await waitForDocumentExists(setup.reactorClient2, doc.header.id, 10000);
|
|
166
|
-
const docOnClient2 = await setup.client2.get(doc.header.id);
|
|
167
|
-
expect(docOnClient2.document).toBeDefined();
|
|
168
|
-
expect(docOnClient2.document.header.id).toBe(doc.header.id);
|
|
169
|
-
});
|
|
170
|
-
it("should handle sequential document creation with immediate relationships", async () => {
|
|
171
|
-
const drive = driveDocumentModelModule.utils.createDocument();
|
|
172
|
-
const readyOnClient1 = waitForOperationsReady(setup.eventBusClient1, drive.header.id);
|
|
173
|
-
const readyOnClient2 = waitForOperationsReady(setup.eventBusClient2, drive.header.id);
|
|
174
|
-
const driveJob = await setup.reactorSwitchboard.create(drive);
|
|
175
|
-
await waitForJobCompletion(setup.reactorSwitchboard, driveJob.id);
|
|
176
|
-
await Promise.all([readyOnClient1, readyOnClient2]);
|
|
177
|
-
// Create documents sequentially (parallel creation in same drive causes revision conflicts)
|
|
178
|
-
const docs = [];
|
|
179
|
-
for (let i = 0; i < 3; i++) {
|
|
180
|
-
const doc = await setup.client1.createDocumentInDrive(drive.header.id, driveDocumentModelModule.utils.createDocument());
|
|
181
|
-
docs.push(doc);
|
|
182
|
-
}
|
|
183
|
-
for (const doc of docs) {
|
|
184
|
-
await waitForDocumentExists(setup.reactorClient2, doc.header.id, 15000);
|
|
185
|
-
const docOnClient2 = await setup.client2.get(doc.header.id);
|
|
186
|
-
expect(docOnClient2.document).toBeDefined();
|
|
187
|
-
}
|
|
188
|
-
}, 30000);
|
|
189
|
-
});
|
|
190
|
-
describe("Sequential Operations (Back-and-Forth)", () => {
|
|
191
|
-
it("should sync sequential edits: C1 -> SW -> C2 -> SW -> C1", async () => {
|
|
192
|
-
const drive = driveDocumentModelModule.utils.createDocument();
|
|
193
|
-
const readyOnClient1 = waitForOperationsReady(setup.eventBusClient1, drive.header.id);
|
|
194
|
-
const readyOnClient2 = waitForOperationsReady(setup.eventBusClient2, drive.header.id);
|
|
195
|
-
const driveJob = await setup.reactorSwitchboard.create(drive);
|
|
196
|
-
await waitForJobCompletion(setup.reactorSwitchboard, driveJob.id);
|
|
197
|
-
await Promise.all([readyOnClient1, readyOnClient2]);
|
|
198
|
-
await setup.client1.execute(drive.header.id, "main", [
|
|
199
|
-
driveDocumentModelModule.actions.setDriveName({ name: "Edit from C1" }),
|
|
200
|
-
]);
|
|
201
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
202
|
-
await setup.client2.execute(drive.header.id, "main", [
|
|
203
|
-
driveDocumentModelModule.actions.setDriveName({ name: "Edit from C2" }),
|
|
204
|
-
]);
|
|
205
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
206
|
-
await setup.client1.execute(drive.header.id, "main", [
|
|
207
|
-
driveDocumentModelModule.actions.setDriveName({
|
|
208
|
-
name: "Final edit from C1",
|
|
209
|
-
}),
|
|
210
|
-
]);
|
|
211
|
-
await pollUntilSynced(setup.reactorSwitchboard, setup.reactorClient1, setup.reactorClient2, drive.header.id, 20000);
|
|
212
|
-
const resultS = await setup.reactorSwitchboard.getOperations(drive.header.id, { branch: "main" });
|
|
213
|
-
const opsS = Object.values(resultS).flatMap((scope) => scope.results);
|
|
214
|
-
const resultC1 = await setup.reactorClient1.getOperations(drive.header.id, { branch: "main" });
|
|
215
|
-
const opsC1 = Object.values(resultC1).flatMap((scope) => scope.results);
|
|
216
|
-
const resultC2 = await setup.reactorClient2.getOperations(drive.header.id, { branch: "main" });
|
|
217
|
-
const opsC2 = Object.values(resultC2).flatMap((scope) => scope.results);
|
|
218
|
-
expect(opsS.length).toBe(opsC1.length);
|
|
219
|
-
expect(opsC1.length).toBe(opsC2.length);
|
|
220
|
-
expect(opsS.length).toBeGreaterThanOrEqual(4);
|
|
221
|
-
}, 30000);
|
|
222
|
-
it("should not create duplicate operations", async () => {
|
|
223
|
-
const drive = driveDocumentModelModule.utils.createDocument();
|
|
224
|
-
const readyOnClient1 = waitForOperationsReady(setup.eventBusClient1, drive.header.id);
|
|
225
|
-
const readyOnClient2 = waitForOperationsReady(setup.eventBusClient2, drive.header.id);
|
|
226
|
-
const driveJob = await setup.reactorSwitchboard.create(drive);
|
|
227
|
-
await waitForJobCompletion(setup.reactorSwitchboard, driveJob.id);
|
|
228
|
-
await Promise.all([readyOnClient1, readyOnClient2]);
|
|
229
|
-
await setup.client1.execute(drive.header.id, "main", [
|
|
230
|
-
driveDocumentModelModule.actions.addFolder({
|
|
231
|
-
id: "folder-1",
|
|
232
|
-
name: "Folder 1",
|
|
233
|
-
parentFolder: null,
|
|
234
|
-
}),
|
|
235
|
-
]);
|
|
236
|
-
await pollUntilSynced(setup.reactorSwitchboard, setup.reactorClient1, setup.reactorClient2, drive.header.id, 10000);
|
|
237
|
-
const resultC2 = await setup.reactorClient2.getOperations(drive.header.id, { branch: "main" });
|
|
238
|
-
const opsC2 = Object.values(resultC2).flatMap((scope) => scope.results);
|
|
239
|
-
const addFolderOps = opsC2.filter((op) => op.action?.type === "ADD_FOLDER");
|
|
240
|
-
expect(addFolderOps.length).toBe(1);
|
|
241
|
-
}, 15000);
|
|
242
|
-
});
|
|
243
|
-
describe("Near-Concurrent Operations", () => {
|
|
244
|
-
it("should handle edits made before full propagation", async () => {
|
|
245
|
-
const drive = driveDocumentModelModule.utils.createDocument();
|
|
246
|
-
const readyOnClient1 = waitForOperationsReady(setup.eventBusClient1, drive.header.id);
|
|
247
|
-
const readyOnClient2 = waitForOperationsReady(setup.eventBusClient2, drive.header.id);
|
|
248
|
-
const driveJob = await setup.reactorSwitchboard.create(drive);
|
|
249
|
-
await waitForJobCompletion(setup.reactorSwitchboard, driveJob.id);
|
|
250
|
-
await Promise.all([readyOnClient1, readyOnClient2]);
|
|
251
|
-
void setup.client1.execute(drive.header.id, "main", [
|
|
252
|
-
driveDocumentModelModule.actions.addFolder({
|
|
253
|
-
id: "folder-c1",
|
|
254
|
-
name: "Folder from C1",
|
|
255
|
-
parentFolder: null,
|
|
256
|
-
}),
|
|
257
|
-
]);
|
|
258
|
-
void setup.client2.execute(drive.header.id, "main", [
|
|
259
|
-
driveDocumentModelModule.actions.addFolder({
|
|
260
|
-
id: "folder-c2",
|
|
261
|
-
name: "Folder from C2",
|
|
262
|
-
parentFolder: null,
|
|
263
|
-
}),
|
|
264
|
-
]);
|
|
265
|
-
await pollUntilSynced(setup.reactorSwitchboard, setup.reactorClient1, setup.reactorClient2, drive.header.id, 20000);
|
|
266
|
-
const docS = await setup.switchboard.get(drive.header.id);
|
|
267
|
-
const docC1 = await setup.client1.get(drive.header.id);
|
|
268
|
-
const docC2 = await setup.client2.get(drive.header.id);
|
|
269
|
-
// Compare state (semantic equality) rather than full document
|
|
270
|
-
expect(docC1.document.state).toEqual(docS.document.state);
|
|
271
|
-
expect(docC2.document.state).toEqual(docS.document.state);
|
|
272
|
-
}, 25000);
|
|
273
|
-
it("should converge to same state on all reactors", async () => {
|
|
274
|
-
const drive = driveDocumentModelModule.utils.createDocument();
|
|
275
|
-
const readyOnClient1 = waitForOperationsReady(setup.eventBusClient1, drive.header.id);
|
|
276
|
-
const readyOnClient2 = waitForOperationsReady(setup.eventBusClient2, drive.header.id);
|
|
277
|
-
const driveJob = await setup.reactorSwitchboard.create(drive);
|
|
278
|
-
await waitForJobCompletion(setup.reactorSwitchboard, driveJob.id);
|
|
279
|
-
await Promise.all([readyOnClient1, readyOnClient2]);
|
|
280
|
-
void setup.client1.execute(drive.header.id, "main", [
|
|
281
|
-
driveDocumentModelModule.actions.setDriveName({ name: "Name from C1" }),
|
|
282
|
-
]);
|
|
283
|
-
void setup.client2.execute(drive.header.id, "main", [
|
|
284
|
-
driveDocumentModelModule.actions.setDriveName({ name: "Name from C2" }),
|
|
285
|
-
]);
|
|
286
|
-
await pollUntilSynced(setup.reactorSwitchboard, setup.reactorClient1, setup.reactorClient2, drive.header.id, 20000);
|
|
287
|
-
const docS = await setup.switchboard.get(drive.header.id);
|
|
288
|
-
const docC1 = await setup.client1.get(drive.header.id);
|
|
289
|
-
const docC2 = await setup.client2.get(drive.header.id);
|
|
290
|
-
// Compare state (semantic equality) rather than full document
|
|
291
|
-
expect(docC1.document.state).toEqual(docS.document.state);
|
|
292
|
-
expect(docC2.document.state).toEqual(docS.document.state);
|
|
293
|
-
}, 25000);
|
|
294
|
-
it("should handle concurrent edits at same index without opId conflicts", async () => {
|
|
295
|
-
const drive = driveDocumentModelModule.utils.createDocument();
|
|
296
|
-
const readyOnClient1 = waitForOperationsReady(setup.eventBusClient1, drive.header.id);
|
|
297
|
-
const readyOnClient2 = waitForOperationsReady(setup.eventBusClient2, drive.header.id);
|
|
298
|
-
const driveJob = await setup.reactorSwitchboard.create(drive);
|
|
299
|
-
await waitForJobCompletion(setup.reactorSwitchboard, driveJob.id);
|
|
300
|
-
await Promise.all([readyOnClient1, readyOnClient2]);
|
|
301
|
-
// CONFLICT: Both clients edit at same index concurrently (before sync)
|
|
302
|
-
// This triggers the scenario where duplicate load jobs may be created
|
|
303
|
-
// for the same incoming operation, causing "opId already exists" errors
|
|
304
|
-
void setup.client1.execute(drive.header.id, "main", [
|
|
305
|
-
driveDocumentModelModule.actions.setDriveName({ name: "Edit from C1" }),
|
|
306
|
-
]);
|
|
307
|
-
void setup.client2.execute(drive.header.id, "main", [
|
|
308
|
-
driveDocumentModelModule.actions.setDriveName({ name: "Edit from C2" }),
|
|
309
|
-
]);
|
|
310
|
-
// Wait for sync to complete - should NOT throw opId errors
|
|
311
|
-
await pollUntilSynced(setup.reactorSwitchboard, setup.reactorClient1, setup.reactorClient2, drive.header.id, 20000);
|
|
312
|
-
// Verify all reactors converged to same state
|
|
313
|
-
const docS = await setup.switchboard.get(drive.header.id);
|
|
314
|
-
const docC1 = await setup.client1.get(drive.header.id);
|
|
315
|
-
const docC2 = await setup.client2.get(drive.header.id);
|
|
316
|
-
expect(docC1.document.state).toEqual(docS.document.state);
|
|
317
|
-
expect(docC2.document.state).toEqual(docS.document.state);
|
|
318
|
-
}, 25000);
|
|
319
|
-
});
|
|
320
|
-
describe("Stress Tests", () => {
|
|
321
|
-
it("should handle rapid back-and-forth editing", async () => {
|
|
322
|
-
const drive = driveDocumentModelModule.utils.createDocument();
|
|
323
|
-
const readyOnClient1 = waitForOperationsReady(setup.eventBusClient1, drive.header.id);
|
|
324
|
-
const readyOnClient2 = waitForOperationsReady(setup.eventBusClient2, drive.header.id);
|
|
325
|
-
const driveJob = await setup.reactorSwitchboard.create(drive);
|
|
326
|
-
await waitForJobCompletion(setup.reactorSwitchboard, driveJob.id);
|
|
327
|
-
await Promise.all([readyOnClient1, readyOnClient2]);
|
|
328
|
-
// Use longer delays to allow sync to complete between operations
|
|
329
|
-
for (let i = 0; i < 5; i++) {
|
|
330
|
-
await setup.client1.execute(drive.header.id, "main", [
|
|
331
|
-
driveDocumentModelModule.actions.addFolder({
|
|
332
|
-
id: `folder-c1-${i}`,
|
|
333
|
-
name: `Folder C1 ${i}`,
|
|
334
|
-
parentFolder: null,
|
|
335
|
-
}),
|
|
336
|
-
]);
|
|
337
|
-
// Wait for sync to complete before next operation
|
|
338
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
339
|
-
await setup.client2.execute(drive.header.id, "main", [
|
|
340
|
-
driveDocumentModelModule.actions.addFolder({
|
|
341
|
-
id: `folder-c2-${i}`,
|
|
342
|
-
name: `Folder C2 ${i}`,
|
|
343
|
-
parentFolder: null,
|
|
344
|
-
}),
|
|
345
|
-
]);
|
|
346
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
347
|
-
}
|
|
348
|
-
await pollUntilSynced(setup.reactorSwitchboard, setup.reactorClient1, setup.reactorClient2, drive.header.id, 30000);
|
|
349
|
-
const resultS = await setup.reactorSwitchboard.getOperations(drive.header.id, { branch: "main" });
|
|
350
|
-
const opsS = Object.values(resultS).flatMap((scope) => scope.results);
|
|
351
|
-
const resultC1 = await setup.reactorClient1.getOperations(drive.header.id, { branch: "main" });
|
|
352
|
-
const opsC1 = Object.values(resultC1).flatMap((scope) => scope.results);
|
|
353
|
-
const resultC2 = await setup.reactorClient2.getOperations(drive.header.id, { branch: "main" });
|
|
354
|
-
const opsC2 = Object.values(resultC2).flatMap((scope) => scope.results);
|
|
355
|
-
expect(opsS.length).toBe(opsC1.length);
|
|
356
|
-
expect(opsC1.length).toBe(opsC2.length);
|
|
357
|
-
expect(opsS.length).toBeGreaterThanOrEqual(11);
|
|
358
|
-
const docS = await setup.switchboard.get(drive.header.id);
|
|
359
|
-
const docC1 = await setup.client1.get(drive.header.id);
|
|
360
|
-
const docC2 = await setup.client2.get(drive.header.id);
|
|
361
|
-
// Compare state (semantic equality) rather than full document
|
|
362
|
-
// Operation history may have format differences (e.g., signature serialization)
|
|
363
|
-
expect(docC1.document.state).toEqual(docS.document.state);
|
|
364
|
-
expect(docC2.document.state).toEqual(docS.document.state);
|
|
365
|
-
}, 60000);
|
|
366
|
-
});
|
|
367
|
-
});
|
|
368
|
-
//# sourceMappingURL=three-reactor-gql-sync.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"three-reactor-gql-sync.test.js","sourceRoot":"","sources":["../../test/three-reactor-gql-sync.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"two-reactor-gql-sync.test.d.ts","sourceRoot":"","sources":["../../test/two-reactor-gql-sync.test.ts"],"names":[],"mappings":""}
|