@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.
Files changed (35) hide show
  1. package/dist/client.d.ts +2 -2
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js.map +1 -1
  4. package/dist/context.d.ts +5 -5
  5. package/dist/context.d.ts.map +1 -1
  6. package/dist/context.js.map +1 -1
  7. package/dist/index.d.ts +14 -4
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +1 -2
  10. package/dist/index.js.map +1 -1
  11. package/dist/middleware/express.d.ts +14 -1
  12. package/dist/middleware/express.d.ts.map +1 -1
  13. package/dist/middleware/express.js.map +1 -1
  14. package/dist/middleware/fastify.d.ts +19 -2
  15. package/dist/middleware/fastify.d.ts.map +1 -1
  16. package/dist/middleware/fastify.js.map +1 -1
  17. package/dist/types.d.ts +2 -2
  18. package/dist/types.d.ts.map +1 -1
  19. package/package.json +11 -3
  20. package/dist/__tests__/client.test.d.ts +0 -2
  21. package/dist/__tests__/client.test.d.ts.map +0 -1
  22. package/dist/__tests__/client.test.js +0 -303
  23. package/dist/__tests__/client.test.js.map +0 -1
  24. package/dist/__tests__/context.test.d.ts +0 -2
  25. package/dist/__tests__/context.test.d.ts.map +0 -1
  26. package/dist/__tests__/context.test.js +0 -117
  27. package/dist/__tests__/context.test.js.map +0 -1
  28. package/dist/__tests__/middleware-express.test.d.ts +0 -2
  29. package/dist/__tests__/middleware-express.test.d.ts.map +0 -1
  30. package/dist/__tests__/middleware-express.test.js +0 -339
  31. package/dist/__tests__/middleware-express.test.js.map +0 -1
  32. package/dist/__tests__/middleware-fastify.test.d.ts +0 -2
  33. package/dist/__tests__/middleware-fastify.test.d.ts.map +0 -1
  34. package/dist/__tests__/middleware-fastify.test.js +0 -266
  35. 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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"}