@stratum-hq/sdk 0.3.0 → 1.0.1
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/client.d.ts +2 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/context.d.ts +5 -5
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js.map +1 -1
- package/dist/index.d.ts +14 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/middleware/express.d.ts +14 -1
- package/dist/middleware/express.d.ts.map +1 -1
- package/dist/middleware/express.js.map +1 -1
- package/dist/middleware/fastify.d.ts +19 -2
- package/dist/middleware/fastify.d.ts.map +1 -1
- package/dist/middleware/fastify.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -3
- package/dist/__tests__/client.test.d.ts +0 -2
- package/dist/__tests__/client.test.d.ts.map +0 -1
- package/dist/__tests__/client.test.js +0 -303
- package/dist/__tests__/client.test.js.map +0 -1
- package/dist/__tests__/context.test.d.ts +0 -2
- package/dist/__tests__/context.test.d.ts.map +0 -1
- package/dist/__tests__/context.test.js +0 -117
- package/dist/__tests__/context.test.js.map +0 -1
- package/dist/__tests__/middleware-express.test.d.ts +0 -2
- package/dist/__tests__/middleware-express.test.d.ts.map +0 -1
- package/dist/__tests__/middleware-express.test.js +0 -339
- package/dist/__tests__/middleware-express.test.js.map +0 -1
- package/dist/__tests__/middleware-fastify.test.d.ts +0 -2
- package/dist/__tests__/middleware-fastify.test.d.ts.map +0 -1
- package/dist/__tests__/middleware-fastify.test.js +0 -266
- package/dist/__tests__/middleware-fastify.test.js.map +0 -1
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const vitest_1 = require("vitest");
|
|
4
|
-
const fastify_js_1 = require("../middleware/fastify.js");
|
|
5
|
-
const core_1 = require("@stratum-hq/core");
|
|
6
|
-
// ---------------------------------------------------------------------------
|
|
7
|
-
// Helpers
|
|
8
|
-
// ---------------------------------------------------------------------------
|
|
9
|
-
function makeTenantContextLegacy(tenantId) {
|
|
10
|
-
return {
|
|
11
|
-
tenant_id: tenantId,
|
|
12
|
-
ancestry_path: `/${tenantId}`,
|
|
13
|
-
depth: 1,
|
|
14
|
-
resolved_config: {},
|
|
15
|
-
resolved_permissions: {},
|
|
16
|
-
isolation_strategy: "SHARED_RLS",
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
function makeRequest(headers = {}) {
|
|
20
|
-
return {
|
|
21
|
-
headers: { ...headers },
|
|
22
|
-
tenant: undefined,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
function makeReply() {
|
|
26
|
-
const reply = {};
|
|
27
|
-
reply.status = vitest_1.vi.fn().mockReturnValue(reply);
|
|
28
|
-
reply.send = vitest_1.vi.fn().mockReturnValue(reply);
|
|
29
|
-
return reply;
|
|
30
|
-
}
|
|
31
|
-
function makeClient(overrides = {}) {
|
|
32
|
-
return {
|
|
33
|
-
resolveTenant: overrides.resolveTenant ?? vitest_1.vi.fn().mockResolvedValue(makeTenantContextLegacy("default-tenant")),
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Helper to register the fastify plugin and extract the onRequest hook.
|
|
38
|
-
* Returns the hook function so we can call it directly in tests.
|
|
39
|
-
*/
|
|
40
|
-
function registerPlugin(client, middlewareOptions = {}) {
|
|
41
|
-
let capturedHook = null;
|
|
42
|
-
const fastify = {
|
|
43
|
-
decorateRequest: vitest_1.vi.fn(),
|
|
44
|
-
addHook: vitest_1.vi.fn((hookName, fn) => {
|
|
45
|
-
if (hookName === "onRequest") {
|
|
46
|
-
capturedHook = fn;
|
|
47
|
-
}
|
|
48
|
-
}),
|
|
49
|
-
};
|
|
50
|
-
const pluginDone = vitest_1.vi.fn();
|
|
51
|
-
(0, fastify_js_1.fastifyPlugin)(fastify, { client, ...middlewareOptions }, pluginDone);
|
|
52
|
-
(0, vitest_1.expect)(pluginDone).toHaveBeenCalled();
|
|
53
|
-
(0, vitest_1.expect)(capturedHook).not.toBeNull();
|
|
54
|
-
return {
|
|
55
|
-
hook: capturedHook,
|
|
56
|
-
fastify,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
// ---------------------------------------------------------------------------
|
|
60
|
-
// Tests
|
|
61
|
-
// ---------------------------------------------------------------------------
|
|
62
|
-
(0, vitest_1.describe)("fastifyPlugin", () => {
|
|
63
|
-
(0, vitest_1.describe)("plugin registration", () => {
|
|
64
|
-
(0, vitest_1.it)("decorates request with tenant property", () => {
|
|
65
|
-
const client = makeClient();
|
|
66
|
-
const { fastify } = registerPlugin(client);
|
|
67
|
-
(0, vitest_1.expect)(fastify.decorateRequest).toHaveBeenCalledWith("tenant", null);
|
|
68
|
-
});
|
|
69
|
-
(0, vitest_1.it)("registers an onRequest hook", () => {
|
|
70
|
-
const client = makeClient();
|
|
71
|
-
const { fastify } = registerPlugin(client);
|
|
72
|
-
(0, vitest_1.expect)(fastify.addHook).toHaveBeenCalledWith("onRequest", vitest_1.expect.any(Function));
|
|
73
|
-
});
|
|
74
|
-
(0, vitest_1.it)("calls done() to signal plugin registration is complete", () => {
|
|
75
|
-
const client = makeClient();
|
|
76
|
-
const fastify = {
|
|
77
|
-
decorateRequest: vitest_1.vi.fn(),
|
|
78
|
-
addHook: vitest_1.vi.fn(),
|
|
79
|
-
};
|
|
80
|
-
const done = vitest_1.vi.fn();
|
|
81
|
-
(0, fastify_js_1.fastifyPlugin)(fastify, { client }, done);
|
|
82
|
-
(0, vitest_1.expect)(done).toHaveBeenCalledTimes(1);
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
(0, vitest_1.describe)("tenant resolution from header", () => {
|
|
86
|
-
(0, vitest_1.it)("sets request.tenant from X-Tenant-ID header", async () => {
|
|
87
|
-
const ctx = makeTenantContextLegacy("tenant-fast");
|
|
88
|
-
const client = makeClient({
|
|
89
|
-
resolveTenant: vitest_1.vi.fn().mockResolvedValue(ctx),
|
|
90
|
-
});
|
|
91
|
-
const { hook } = registerPlugin(client);
|
|
92
|
-
const request = makeRequest({ "x-tenant-id": "tenant-fast" });
|
|
93
|
-
const reply = makeReply();
|
|
94
|
-
const done = vitest_1.vi.fn();
|
|
95
|
-
// The hook is async internally; it calls done() when complete
|
|
96
|
-
await new Promise((resolve) => {
|
|
97
|
-
done.mockImplementation(() => resolve());
|
|
98
|
-
hook(request, reply, done);
|
|
99
|
-
});
|
|
100
|
-
(0, vitest_1.expect)(request.tenant).toEqual(ctx);
|
|
101
|
-
(0, vitest_1.expect)(client.resolveTenant).toHaveBeenCalledWith("tenant-fast");
|
|
102
|
-
});
|
|
103
|
-
(0, vitest_1.it)("calls done() on successful resolution", async () => {
|
|
104
|
-
const ctx = makeTenantContextLegacy("t-1");
|
|
105
|
-
const client = makeClient({
|
|
106
|
-
resolveTenant: vitest_1.vi.fn().mockResolvedValue(ctx),
|
|
107
|
-
});
|
|
108
|
-
const { hook } = registerPlugin(client);
|
|
109
|
-
const request = makeRequest({ "x-tenant-id": "t-1" });
|
|
110
|
-
const reply = makeReply();
|
|
111
|
-
const done = vitest_1.vi.fn();
|
|
112
|
-
await new Promise((resolve) => {
|
|
113
|
-
done.mockImplementation(() => resolve());
|
|
114
|
-
hook(request, reply, done);
|
|
115
|
-
});
|
|
116
|
-
(0, vitest_1.expect)(done).toHaveBeenCalled();
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
(0, vitest_1.describe)("missing tenant", () => {
|
|
120
|
-
(0, vitest_1.it)("returns 400 when no tenant ID can be resolved", async () => {
|
|
121
|
-
const client = makeClient();
|
|
122
|
-
const { hook } = registerPlugin(client);
|
|
123
|
-
const request = makeRequest(); // No header
|
|
124
|
-
const reply = makeReply();
|
|
125
|
-
const done = vitest_1.vi.fn();
|
|
126
|
-
// The hook resolves asynchronously. When tenant is missing, it calls
|
|
127
|
-
// reply.status(400).send(...) and the done callback is not called with
|
|
128
|
-
// the context. We need to wait for the async operation.
|
|
129
|
-
await new Promise((resolve) => {
|
|
130
|
-
// Override send to resolve the promise
|
|
131
|
-
reply.send.mockImplementation(() => {
|
|
132
|
-
resolve();
|
|
133
|
-
return reply;
|
|
134
|
-
});
|
|
135
|
-
hook(request, reply, done);
|
|
136
|
-
});
|
|
137
|
-
(0, vitest_1.expect)(reply.status).toHaveBeenCalledWith(400);
|
|
138
|
-
(0, vitest_1.expect)(reply.send).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
|
|
139
|
-
error: vitest_1.expect.objectContaining({
|
|
140
|
-
code: "MISSING_TENANT",
|
|
141
|
-
}),
|
|
142
|
-
}));
|
|
143
|
-
});
|
|
144
|
-
(0, vitest_1.it)("does not set request.tenant when no tenant is resolved", async () => {
|
|
145
|
-
const client = makeClient();
|
|
146
|
-
const { hook } = registerPlugin(client);
|
|
147
|
-
const request = makeRequest();
|
|
148
|
-
const reply = makeReply();
|
|
149
|
-
const done = vitest_1.vi.fn();
|
|
150
|
-
await new Promise((resolve) => {
|
|
151
|
-
reply.send.mockImplementation(() => {
|
|
152
|
-
resolve();
|
|
153
|
-
return reply;
|
|
154
|
-
});
|
|
155
|
-
hook(request, reply, done);
|
|
156
|
-
});
|
|
157
|
-
(0, vitest_1.expect)(request.tenant).toBeUndefined();
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
(0, vitest_1.describe)("tenant not found", () => {
|
|
161
|
-
(0, vitest_1.it)("returns 404 when resolveTenant throws TenantNotFoundError", async () => {
|
|
162
|
-
const client = makeClient({
|
|
163
|
-
resolveTenant: vitest_1.vi.fn().mockRejectedValue(new core_1.TenantNotFoundError("t-missing")),
|
|
164
|
-
});
|
|
165
|
-
const { hook } = registerPlugin(client);
|
|
166
|
-
const request = makeRequest({ "x-tenant-id": "t-missing" });
|
|
167
|
-
const reply = makeReply();
|
|
168
|
-
const done = vitest_1.vi.fn();
|
|
169
|
-
await new Promise((resolve) => {
|
|
170
|
-
reply.send.mockImplementation(() => {
|
|
171
|
-
resolve();
|
|
172
|
-
return reply;
|
|
173
|
-
});
|
|
174
|
-
hook(request, reply, done);
|
|
175
|
-
});
|
|
176
|
-
(0, vitest_1.expect)(reply.status).toHaveBeenCalledWith(404);
|
|
177
|
-
(0, vitest_1.expect)(reply.send).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
|
|
178
|
-
error: vitest_1.expect.objectContaining({
|
|
179
|
-
code: "TENANT_NOT_FOUND",
|
|
180
|
-
}),
|
|
181
|
-
}));
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
(0, vitest_1.describe)("error handling", () => {
|
|
185
|
-
(0, vitest_1.it)("passes unexpected errors to done() for Fastify error handling", async () => {
|
|
186
|
-
const error = new Error("unexpected failure");
|
|
187
|
-
const client = makeClient({
|
|
188
|
-
resolveTenant: vitest_1.vi.fn().mockRejectedValue(error),
|
|
189
|
-
});
|
|
190
|
-
const { hook } = registerPlugin(client);
|
|
191
|
-
const request = makeRequest({ "x-tenant-id": "t-1" });
|
|
192
|
-
const reply = makeReply();
|
|
193
|
-
const done = vitest_1.vi.fn();
|
|
194
|
-
await new Promise((resolve) => {
|
|
195
|
-
done.mockImplementation(() => resolve());
|
|
196
|
-
hook(request, reply, done);
|
|
197
|
-
});
|
|
198
|
-
// The .catch(done) in the plugin passes the error to done
|
|
199
|
-
(0, vitest_1.expect)(done).toHaveBeenCalledWith(error);
|
|
200
|
-
});
|
|
201
|
-
(0, vitest_1.it)("calls onError callback when provided and unexpected error occurs", async () => {
|
|
202
|
-
const error = new Error("unexpected");
|
|
203
|
-
const onError = vitest_1.vi.fn();
|
|
204
|
-
const client = makeClient({
|
|
205
|
-
resolveTenant: vitest_1.vi.fn().mockRejectedValue(error),
|
|
206
|
-
});
|
|
207
|
-
const { hook } = registerPlugin(client, { onError });
|
|
208
|
-
const request = makeRequest({ "x-tenant-id": "t-1" });
|
|
209
|
-
const reply = makeReply();
|
|
210
|
-
const done = vitest_1.vi.fn();
|
|
211
|
-
await new Promise((resolve) => {
|
|
212
|
-
done.mockImplementation(() => resolve());
|
|
213
|
-
hook(request, reply, done);
|
|
214
|
-
});
|
|
215
|
-
(0, vitest_1.expect)(onError).toHaveBeenCalledWith(error, request);
|
|
216
|
-
});
|
|
217
|
-
});
|
|
218
|
-
(0, vitest_1.describe)("custom resolvers", () => {
|
|
219
|
-
(0, vitest_1.it)("uses custom resolver when header resolution fails", async () => {
|
|
220
|
-
const ctx = makeTenantContextLegacy("custom-fastify");
|
|
221
|
-
const client = makeClient({
|
|
222
|
-
resolveTenant: vitest_1.vi.fn().mockResolvedValue(ctx),
|
|
223
|
-
});
|
|
224
|
-
const customResolver = {
|
|
225
|
-
resolve: vitest_1.vi.fn().mockResolvedValue("custom-fastify"),
|
|
226
|
-
};
|
|
227
|
-
const { hook } = registerPlugin(client, {
|
|
228
|
-
resolvers: [customResolver],
|
|
229
|
-
});
|
|
230
|
-
const request = makeRequest(); // No header
|
|
231
|
-
const reply = makeReply();
|
|
232
|
-
const done = vitest_1.vi.fn();
|
|
233
|
-
await new Promise((resolve) => {
|
|
234
|
-
done.mockImplementation(() => resolve());
|
|
235
|
-
hook(request, reply, done);
|
|
236
|
-
});
|
|
237
|
-
(0, vitest_1.expect)(customResolver.resolve).toHaveBeenCalledWith(request);
|
|
238
|
-
(0, vitest_1.expect)(request.tenant).toEqual(ctx);
|
|
239
|
-
});
|
|
240
|
-
(0, vitest_1.it)("stops at the first resolver that returns a value", async () => {
|
|
241
|
-
const ctx = makeTenantContextLegacy("first-fast");
|
|
242
|
-
const client = makeClient({
|
|
243
|
-
resolveTenant: vitest_1.vi.fn().mockResolvedValue(ctx),
|
|
244
|
-
});
|
|
245
|
-
const resolver1 = {
|
|
246
|
-
resolve: vitest_1.vi.fn().mockResolvedValue("first-fast"),
|
|
247
|
-
};
|
|
248
|
-
const resolver2 = {
|
|
249
|
-
resolve: vitest_1.vi.fn().mockResolvedValue("second-fast"),
|
|
250
|
-
};
|
|
251
|
-
const { hook } = registerPlugin(client, {
|
|
252
|
-
resolvers: [resolver1, resolver2],
|
|
253
|
-
});
|
|
254
|
-
const request = makeRequest();
|
|
255
|
-
const reply = makeReply();
|
|
256
|
-
const done = vitest_1.vi.fn();
|
|
257
|
-
await new Promise((resolve) => {
|
|
258
|
-
done.mockImplementation(() => resolve());
|
|
259
|
-
hook(request, reply, done);
|
|
260
|
-
});
|
|
261
|
-
(0, vitest_1.expect)(resolver1.resolve).toHaveBeenCalled();
|
|
262
|
-
(0, vitest_1.expect)(resolver2.resolve).not.toHaveBeenCalled();
|
|
263
|
-
});
|
|
264
|
-
});
|
|
265
|
-
});
|
|
266
|
-
//# sourceMappingURL=middleware-fastify.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware-fastify.test.js","sourceRoot":"","sources":["../../src/__tests__/middleware-fastify.test.ts"],"names":[],"mappings":"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"}
|