@powerhousedao/reactor-api 6.0.0-dev.107 → 6.0.0-dev.109
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/README.md +6 -0
- package/dist/src/graphql/base-subgraph.d.ts +2 -3
- package/dist/src/graphql/base-subgraph.d.ts.map +1 -1
- package/dist/src/graphql/base-subgraph.js.map +1 -1
- package/dist/src/graphql/gateway/adapter-gateway-apollo.d.ts +23 -0
- package/dist/src/graphql/gateway/adapter-gateway-apollo.d.ts.map +1 -0
- package/dist/src/graphql/gateway/adapter-gateway-apollo.js +156 -0
- package/dist/src/graphql/gateway/adapter-gateway-apollo.js.map +1 -0
- package/dist/src/graphql/gateway/adapter-http-express.d.ts +23 -0
- package/dist/src/graphql/gateway/adapter-http-express.d.ts.map +1 -0
- package/dist/src/graphql/gateway/adapter-http-express.js +155 -0
- package/dist/src/graphql/gateway/adapter-http-express.js.map +1 -0
- package/dist/src/graphql/gateway/auth-middleware.d.ts +7 -0
- package/dist/src/graphql/gateway/auth-middleware.d.ts.map +1 -0
- package/dist/src/graphql/gateway/auth-middleware.js +15 -0
- package/dist/src/graphql/gateway/auth-middleware.js.map +1 -0
- package/dist/src/graphql/gateway/factory.d.ts +11 -0
- package/dist/src/graphql/gateway/factory.d.ts.map +1 -0
- package/dist/src/graphql/gateway/factory.js +15 -0
- package/dist/src/graphql/gateway/factory.js.map +1 -0
- package/dist/src/graphql/gateway/types.d.ts +84 -0
- package/dist/src/graphql/gateway/types.d.ts.map +1 -0
- package/dist/src/graphql/gateway/types.js +2 -0
- package/dist/src/graphql/gateway/types.js.map +1 -0
- package/dist/src/graphql/graphql-manager.d.ts +10 -14
- package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
- package/dist/src/graphql/graphql-manager.js +117 -221
- package/dist/src/graphql/graphql-manager.js.map +1 -1
- package/dist/src/graphql/index.d.ts +3 -0
- package/dist/src/graphql/index.d.ts.map +1 -1
- package/dist/src/graphql/index.js +3 -0
- package/dist/src/graphql/index.js.map +1 -1
- package/dist/src/graphql/sse.d.ts.map +1 -1
- package/dist/src/graphql/sse.js.map +1 -1
- package/dist/src/graphql/types.d.ts +3 -4
- package/dist/src/graphql/types.d.ts.map +1 -1
- package/dist/src/packages/import-loader.d.ts +2 -3
- package/dist/src/packages/import-loader.d.ts.map +1 -1
- package/dist/src/packages/import-loader.js.map +1 -1
- package/dist/src/packages/package-manager.d.ts +2 -3
- 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 +4 -5
- package/dist/src/packages/types.d.ts.map +1 -1
- package/dist/src/packages/util.d.ts +3 -4
- package/dist/src/packages/util.d.ts.map +1 -1
- package/dist/src/packages/util.js.map +1 -1
- package/dist/src/packages/vite-loader.d.ts +3 -4
- package/dist/src/packages/vite-loader.d.ts.map +1 -1
- package/dist/src/packages/vite-loader.js +2 -0
- package/dist/src/packages/vite-loader.js.map +1 -1
- package/dist/src/server.d.ts +5 -4
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +54 -84
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/auth.service.d.ts +11 -3
- package/dist/src/services/auth.service.d.ts.map +1 -1
- package/dist/src/services/auth.service.js +48 -0
- package/dist/src/services/auth.service.js.map +1 -1
- package/dist/src/types.d.ts +14 -5
- package/dist/src/types.d.ts.map +1 -1
- package/dist/test/auth.service.test.d.ts +10 -0
- package/dist/test/auth.service.test.d.ts.map +1 -0
- package/dist/test/auth.service.test.js +141 -0
- package/dist/test/auth.service.test.js.map +1 -0
- package/dist/test/document-drive-subgraph.test.js +8 -13
- package/dist/test/document-drive-subgraph.test.js.map +1 -1
- package/dist/test/gateway/adapter-gateway-apollo.test.d.ts +2 -0
- package/dist/test/gateway/adapter-gateway-apollo.test.d.ts.map +1 -0
- package/dist/test/gateway/adapter-gateway-apollo.test.js +206 -0
- package/dist/test/gateway/adapter-gateway-apollo.test.js.map +1 -0
- package/dist/test/gateway/adapter-http-express.test.d.ts +2 -0
- package/dist/test/gateway/adapter-http-express.test.d.ts.map +1 -0
- package/dist/test/gateway/adapter-http-express.test.js +17 -0
- package/dist/test/gateway/adapter-http-express.test.js.map +1 -0
- package/dist/test/gateway/auth-middleware.test.d.ts +8 -0
- package/dist/test/gateway/auth-middleware.test.d.ts.map +1 -0
- package/dist/test/gateway/auth-middleware.test.js +73 -0
- package/dist/test/gateway/auth-middleware.test.js.map +1 -0
- package/dist/test/gateway/gateway-adapter-contract.d.ts +30 -0
- package/dist/test/gateway/gateway-adapter-contract.d.ts.map +1 -0
- package/dist/test/gateway/gateway-adapter-contract.js +347 -0
- package/dist/test/gateway/gateway-adapter-contract.js.map +1 -0
- package/dist/test/gateway/http-adapter-contract.d.ts +30 -0
- package/dist/test/gateway/http-adapter-contract.d.ts.map +1 -0
- package/dist/test/gateway/http-adapter-contract.js +226 -0
- package/dist/test/gateway/http-adapter-contract.js.map +1 -0
- package/dist/test/graphql-manager.test.d.ts +12 -0
- package/dist/test/graphql-manager.test.d.ts.map +1 -0
- package/dist/test/graphql-manager.test.js +488 -0
- package/dist/test/graphql-manager.test.js.map +1 -0
- package/dist/test/utils.d.ts +0 -4
- package/dist/test/utils.d.ts.map +1 -1
- package/dist/test/utils.js +0 -11
- package/dist/test/utils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/dist/src/utils/auth.d.ts +0 -3
- package/dist/src/utils/auth.d.ts.map +0 -1
- package/dist/src/utils/auth.js +0 -12
- package/dist/src/utils/auth.js.map +0 -1
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared contract test suite for IHttpAdapter implementations.
|
|
3
|
+
*
|
|
4
|
+
* Import this module and call runHttpAdapterContractTests() in your
|
|
5
|
+
* adapter-specific test file to verify that the implementation satisfies
|
|
6
|
+
* the full IHttpAdapter behavioral contract.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
*
|
|
10
|
+
* import { runHttpAdapterContractTests } from "./http-adapter-contract.js";
|
|
11
|
+
*
|
|
12
|
+
* runHttpAdapterContractTests("MyAdapter", async () => {
|
|
13
|
+
* const adapter = new MyHttpAdapter(...);
|
|
14
|
+
* adapter.setupMiddleware({});
|
|
15
|
+
* // start your framework's server on an ephemeral port
|
|
16
|
+
* return { adapter, url: "http://127.0.0.1:PORT", close, respondWithJson };
|
|
17
|
+
* });
|
|
18
|
+
*/
|
|
19
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
20
|
+
// ─── shared helpers ──────────────────────────────────────────────────────────
|
|
21
|
+
/** A FetchHandler that echoes the matched path and JSON body back to the caller. */
|
|
22
|
+
function echoHandler(label) {
|
|
23
|
+
return async (req) => {
|
|
24
|
+
let body = null;
|
|
25
|
+
if (req.method !== "GET" && req.method !== "HEAD") {
|
|
26
|
+
try {
|
|
27
|
+
body = await req.json();
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// empty body
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return Response.json({
|
|
34
|
+
handler: label,
|
|
35
|
+
path: new URL(req.url).pathname,
|
|
36
|
+
body,
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// ─── contract tests ──────────────────────────────────────────────────────────
|
|
41
|
+
export function runHttpAdapterContractTests(adapterName, createHarness) {
|
|
42
|
+
// ── getRoute() ─────────────────────────────────────────────────────────────
|
|
43
|
+
describe(`IHttpAdapter contract (${adapterName}) – getRoute()`, () => {
|
|
44
|
+
let h;
|
|
45
|
+
beforeEach(async () => {
|
|
46
|
+
h = await createHarness();
|
|
47
|
+
});
|
|
48
|
+
afterEach(async () => {
|
|
49
|
+
await h.close();
|
|
50
|
+
});
|
|
51
|
+
it("serves a GET request registered with getRoute()", async () => {
|
|
52
|
+
h.adapter.getRoute("/health", () => new Response("OK", { status: 200 }));
|
|
53
|
+
const res = await fetch(`${h.url}/health`);
|
|
54
|
+
expect(res.status).toBe(200);
|
|
55
|
+
expect(await res.text()).toBe("OK");
|
|
56
|
+
});
|
|
57
|
+
it("passes query-string parameters through to the handler", async () => {
|
|
58
|
+
h.adapter.getRoute("/search", (req) => {
|
|
59
|
+
const q = new URL(req.url).searchParams.get("q") ?? "";
|
|
60
|
+
return new Response(q, { status: 200 });
|
|
61
|
+
});
|
|
62
|
+
const res = await fetch(`${h.url}/search?q=hello`);
|
|
63
|
+
expect(await res.text()).toBe("hello");
|
|
64
|
+
});
|
|
65
|
+
it("writes handler response headers to the HTTP response", async () => {
|
|
66
|
+
h.adapter.getRoute("/meta", () => new Response("ok", { headers: { "x-test": "value" } }));
|
|
67
|
+
const res = await fetch(`${h.url}/meta`);
|
|
68
|
+
expect(res.headers.get("x-test")).toBe("value");
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
// ── routing ────────────────────────────────────────────────────────────────
|
|
72
|
+
describe(`IHttpAdapter contract (${adapterName}) – routing`, () => {
|
|
73
|
+
let h;
|
|
74
|
+
beforeEach(async () => {
|
|
75
|
+
h = await createHarness();
|
|
76
|
+
});
|
|
77
|
+
afterEach(async () => {
|
|
78
|
+
await h.close();
|
|
79
|
+
});
|
|
80
|
+
it("routes a path to its registered handler", async () => {
|
|
81
|
+
h.adapter.mount("/graphql", echoHandler("gateway"));
|
|
82
|
+
const res = await fetch(`${h.url}/graphql`, {
|
|
83
|
+
method: "POST",
|
|
84
|
+
headers: { "Content-Type": "application/json" },
|
|
85
|
+
body: JSON.stringify({ query: "{ __typename }" }),
|
|
86
|
+
});
|
|
87
|
+
const data = (await res.json());
|
|
88
|
+
expect(data.handler).toBe("gateway");
|
|
89
|
+
});
|
|
90
|
+
it("routes a sub-path to its own handler, not the parent handler", async () => {
|
|
91
|
+
// Critical regression: if the parent path uses prefix matching, every
|
|
92
|
+
// request to /graphql/sub would be handled by the gateway instead of the
|
|
93
|
+
// subgraph server, causing an infinite routing loop and OOM crash.
|
|
94
|
+
h.adapter.mount("/graphql", echoHandler("gateway"));
|
|
95
|
+
h.adapter.mount("/graphql/sub", echoHandler("sub"));
|
|
96
|
+
const res = await fetch(`${h.url}/graphql/sub`, {
|
|
97
|
+
method: "POST",
|
|
98
|
+
headers: { "Content-Type": "application/json" },
|
|
99
|
+
body: JSON.stringify({ query: "{ __typename }" }),
|
|
100
|
+
});
|
|
101
|
+
const data = (await res.json());
|
|
102
|
+
expect(data.handler).toBe("sub");
|
|
103
|
+
});
|
|
104
|
+
it("does not confuse a query string with the path when routing", async () => {
|
|
105
|
+
h.adapter.mount("/graphql", echoHandler("gateway"));
|
|
106
|
+
const res = await fetch(`${h.url}/graphql?query=%7B__typename%7D`);
|
|
107
|
+
const data = (await res.json());
|
|
108
|
+
expect(data.handler).toBe("gateway");
|
|
109
|
+
});
|
|
110
|
+
it("returns 404 when no handler matches the path", async () => {
|
|
111
|
+
h.adapter.mount("/graphql", echoHandler("gateway"));
|
|
112
|
+
const res = await fetch(`${h.url}/unknown`);
|
|
113
|
+
expect(res.status).toBe(404);
|
|
114
|
+
});
|
|
115
|
+
it("last-mounted handler wins when the same path is mounted twice", async () => {
|
|
116
|
+
h.adapter.mount("/graphql", echoHandler("first"));
|
|
117
|
+
h.adapter.mount("/graphql", echoHandler("second"));
|
|
118
|
+
const res = await fetch(`${h.url}/graphql`, {
|
|
119
|
+
method: "POST",
|
|
120
|
+
headers: { "Content-Type": "application/json" },
|
|
121
|
+
body: "{}",
|
|
122
|
+
});
|
|
123
|
+
const data = (await res.json());
|
|
124
|
+
expect(data.handler).toBe("second");
|
|
125
|
+
});
|
|
126
|
+
it("routes all paths correctly when gateway is registered before subgraphs", async () => {
|
|
127
|
+
// Mirrors production order: the federation gateway is mounted first in
|
|
128
|
+
// #createApolloGateway(), then per-subgraph handlers in _updateRouter().
|
|
129
|
+
h.adapter.mount("/graphql", echoHandler("gateway"));
|
|
130
|
+
h.adapter.mount("/graphql/document-model", echoHandler("document-model"));
|
|
131
|
+
h.adapter.mount("/graphql/document-drive", echoHandler("document-drive"));
|
|
132
|
+
const post = (path) => fetch(`${h.url}${path}`, {
|
|
133
|
+
method: "POST",
|
|
134
|
+
headers: { "Content-Type": "application/json" },
|
|
135
|
+
body: "{}",
|
|
136
|
+
});
|
|
137
|
+
const [gatewayRes, modelRes, driveRes] = await Promise.all([
|
|
138
|
+
post("/graphql"),
|
|
139
|
+
post("/graphql/document-model"),
|
|
140
|
+
post("/graphql/document-drive"),
|
|
141
|
+
]);
|
|
142
|
+
expect((await gatewayRes.json()).handler).toBe("gateway");
|
|
143
|
+
expect((await modelRes.json()).handler).toBe("document-model");
|
|
144
|
+
expect((await driveRes.json()).handler).toBe("document-drive");
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
// ── request / response conversion ─────────────────────────────────────────
|
|
148
|
+
describe(`IHttpAdapter contract (${adapterName}) – request/response conversion`, () => {
|
|
149
|
+
let h;
|
|
150
|
+
beforeEach(async () => {
|
|
151
|
+
h = await createHarness();
|
|
152
|
+
});
|
|
153
|
+
afterEach(async () => {
|
|
154
|
+
await h.close();
|
|
155
|
+
});
|
|
156
|
+
it("passes incoming request headers to the Fetch Request", async () => {
|
|
157
|
+
let capturedHeaders = {};
|
|
158
|
+
h.adapter.mount("/api", async (req) => {
|
|
159
|
+
req.headers.forEach((value, key) => {
|
|
160
|
+
capturedHeaders[key] = value;
|
|
161
|
+
});
|
|
162
|
+
return new Response("ok");
|
|
163
|
+
});
|
|
164
|
+
await fetch(`${h.url}/api`, {
|
|
165
|
+
headers: {
|
|
166
|
+
"x-custom-header": "test-value",
|
|
167
|
+
authorization: "Bearer token",
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
expect(capturedHeaders["x-custom-header"]).toBe("test-value");
|
|
171
|
+
expect(capturedHeaders["authorization"]).toBe("Bearer token");
|
|
172
|
+
});
|
|
173
|
+
it("passes the POST JSON body to the Fetch Request", async () => {
|
|
174
|
+
let capturedBody;
|
|
175
|
+
h.adapter.mount("/api", async (req) => {
|
|
176
|
+
capturedBody = await req.json();
|
|
177
|
+
return new Response("ok");
|
|
178
|
+
});
|
|
179
|
+
await fetch(`${h.url}/api`, {
|
|
180
|
+
method: "POST",
|
|
181
|
+
headers: { "Content-Type": "application/json" },
|
|
182
|
+
body: JSON.stringify({ hello: "world", nested: { value: 42 } }),
|
|
183
|
+
});
|
|
184
|
+
expect(capturedBody).toEqual({ hello: "world", nested: { value: 42 } });
|
|
185
|
+
});
|
|
186
|
+
it("GET requests arrive with no body consumed", async () => {
|
|
187
|
+
let bodyUsed = false;
|
|
188
|
+
h.adapter.mount("/api", async (req) => {
|
|
189
|
+
bodyUsed = req.bodyUsed;
|
|
190
|
+
return new Response("ok");
|
|
191
|
+
});
|
|
192
|
+
await fetch(`${h.url}/api`);
|
|
193
|
+
expect(bodyUsed).toBe(false);
|
|
194
|
+
});
|
|
195
|
+
it("writes the handler response status to the HTTP response", async () => {
|
|
196
|
+
h.adapter.mount("/api", async () => new Response("not found", { status: 404 }));
|
|
197
|
+
const res = await fetch(`${h.url}/api`);
|
|
198
|
+
expect(res.status).toBe(404);
|
|
199
|
+
});
|
|
200
|
+
it("writes handler response headers to the HTTP response", async () => {
|
|
201
|
+
h.adapter.mount("/api", async () => new Response("ok", {
|
|
202
|
+
headers: { "x-custom": "my-value", "content-type": "text/plain" },
|
|
203
|
+
}));
|
|
204
|
+
const res = await fetch(`${h.url}/api`);
|
|
205
|
+
expect(res.headers.get("x-custom")).toBe("my-value");
|
|
206
|
+
});
|
|
207
|
+
it("writes the handler response body to the HTTP response", async () => {
|
|
208
|
+
h.adapter.mount("/api", async () => Response.json({ message: "hello from handler" }));
|
|
209
|
+
const res = await fetch(`${h.url}/api`);
|
|
210
|
+
const data = (await res.json());
|
|
211
|
+
expect(data.message).toBe("hello from handler");
|
|
212
|
+
});
|
|
213
|
+
it("returns 500 when the handler throws", async () => {
|
|
214
|
+
h.adapter.mount("/api", async () => {
|
|
215
|
+
throw new Error("handler error");
|
|
216
|
+
});
|
|
217
|
+
const res = await fetch(`${h.url}/api`, {
|
|
218
|
+
method: "POST",
|
|
219
|
+
headers: { "Content-Type": "application/json" },
|
|
220
|
+
body: "{}",
|
|
221
|
+
});
|
|
222
|
+
expect(res.status).toBe(500);
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=http-adapter-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-adapter-contract.js","sourceRoot":"","sources":["../../../test/gateway/http-adapter-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for GraphQLManager.
|
|
3
|
+
*
|
|
4
|
+
* Uses mock implementations of IGatewayAdapter and IHttpAdapter so tests
|
|
5
|
+
* run without spinning up real HTTP or GraphQL servers.
|
|
6
|
+
*
|
|
7
|
+
* The mount() spy captures FetchHandlers as they are registered, allowing
|
|
8
|
+
* tests to invoke individual handlers (e.g. the drive info endpoint) directly
|
|
9
|
+
* via the Fetch API without any network I/O.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=graphql-manager.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql-manager.test.d.ts","sourceRoot":"","sources":["../../test/graphql-manager.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|