@stratum-hq/sdk 0.1.0

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 (57) hide show
  1. package/dist/__tests__/client.test.d.ts +2 -0
  2. package/dist/__tests__/client.test.d.ts.map +1 -0
  3. package/dist/__tests__/client.test.js +303 -0
  4. package/dist/__tests__/client.test.js.map +1 -0
  5. package/dist/__tests__/context.test.d.ts +2 -0
  6. package/dist/__tests__/context.test.d.ts.map +1 -0
  7. package/dist/__tests__/context.test.js +117 -0
  8. package/dist/__tests__/context.test.js.map +1 -0
  9. package/dist/__tests__/middleware-express.test.d.ts +2 -0
  10. package/dist/__tests__/middleware-express.test.d.ts.map +1 -0
  11. package/dist/__tests__/middleware-express.test.js +189 -0
  12. package/dist/__tests__/middleware-express.test.js.map +1 -0
  13. package/dist/__tests__/middleware-fastify.test.d.ts +2 -0
  14. package/dist/__tests__/middleware-fastify.test.d.ts.map +1 -0
  15. package/dist/__tests__/middleware-fastify.test.js +266 -0
  16. package/dist/__tests__/middleware-fastify.test.js.map +1 -0
  17. package/dist/cache.d.ts +14 -0
  18. package/dist/cache.d.ts.map +1 -0
  19. package/dist/cache.js +47 -0
  20. package/dist/cache.js.map +1 -0
  21. package/dist/client.d.ts +60 -0
  22. package/dist/client.d.ts.map +1 -0
  23. package/dist/client.js +176 -0
  24. package/dist/client.js.map +1 -0
  25. package/dist/context.d.ts +8 -0
  26. package/dist/context.d.ts.map +1 -0
  27. package/dist/context.js +24 -0
  28. package/dist/context.js.map +1 -0
  29. package/dist/index.d.ts +22 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +35 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/middleware/express.d.ts +4 -0
  34. package/dist/middleware/express.d.ts.map +1 -0
  35. package/dist/middleware/express.js +58 -0
  36. package/dist/middleware/express.js.map +1 -0
  37. package/dist/middleware/fastify.d.ts +6 -0
  38. package/dist/middleware/fastify.d.ts.map +1 -0
  39. package/dist/middleware/fastify.js +58 -0
  40. package/dist/middleware/fastify.js.map +1 -0
  41. package/dist/resolvers/custom.d.ts +4 -0
  42. package/dist/resolvers/custom.d.ts.map +1 -0
  43. package/dist/resolvers/custom.js +3 -0
  44. package/dist/resolvers/custom.js.map +1 -0
  45. package/dist/resolvers/header.d.ts +2 -0
  46. package/dist/resolvers/header.d.ts.map +1 -0
  47. package/dist/resolvers/header.js +16 -0
  48. package/dist/resolvers/header.js.map +1 -0
  49. package/dist/resolvers/jwt.d.ts +6 -0
  50. package/dist/resolvers/jwt.d.ts.map +1 -0
  51. package/dist/resolvers/jwt.js +55 -0
  52. package/dist/resolvers/jwt.js.map +1 -0
  53. package/dist/types.d.ts +12 -0
  54. package/dist/types.d.ts.map +1 -0
  55. package/dist/types.js +3 -0
  56. package/dist/types.js.map +1 -0
  57. package/package.json +39 -0
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const express_js_1 = require("../middleware/express.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 makeReq(headers = {}) {
20
+ return {
21
+ headers: {
22
+ ...headers,
23
+ },
24
+ tenant: undefined,
25
+ };
26
+ }
27
+ function makeRes() {
28
+ const res = {};
29
+ res.status = vitest_1.vi.fn().mockReturnValue(res);
30
+ res.json = vitest_1.vi.fn().mockReturnValue(res);
31
+ return res;
32
+ }
33
+ function makeClient(overrides = {}) {
34
+ return {
35
+ resolveTenant: overrides.resolveTenant ?? vitest_1.vi.fn().mockResolvedValue(makeTenantContextLegacy("default-tenant")),
36
+ };
37
+ }
38
+ // ---------------------------------------------------------------------------
39
+ // Tests
40
+ // ---------------------------------------------------------------------------
41
+ (0, vitest_1.describe)("expressMiddleware", () => {
42
+ let next;
43
+ (0, vitest_1.beforeEach)(() => {
44
+ next = vitest_1.vi.fn();
45
+ });
46
+ (0, vitest_1.describe)("tenant resolution from header", () => {
47
+ (0, vitest_1.it)("sets req.tenant from X-Tenant-ID header", async () => {
48
+ const ctx = makeTenantContextLegacy("tenant-from-header");
49
+ const client = makeClient({
50
+ resolveTenant: vitest_1.vi.fn().mockResolvedValue(ctx),
51
+ });
52
+ const middleware = (0, express_js_1.expressMiddleware)(client);
53
+ const req = makeReq({ "x-tenant-id": "tenant-from-header" });
54
+ const res = makeRes();
55
+ await middleware(req, res, next);
56
+ (0, vitest_1.expect)(req.tenant).toEqual(ctx);
57
+ (0, vitest_1.expect)(client.resolveTenant).toHaveBeenCalledWith("tenant-from-header");
58
+ });
59
+ (0, vitest_1.it)("calls next() on successful resolution", async () => {
60
+ const ctx = makeTenantContextLegacy("t-1");
61
+ const client = makeClient({
62
+ resolveTenant: vitest_1.vi.fn().mockResolvedValue(ctx),
63
+ });
64
+ const middleware = (0, express_js_1.expressMiddleware)(client);
65
+ const req = makeReq({ "x-tenant-id": "t-1" });
66
+ const res = makeRes();
67
+ await middleware(req, res, next);
68
+ (0, vitest_1.expect)(next).toHaveBeenCalledTimes(1);
69
+ // next() called without error argument
70
+ (0, vitest_1.expect)(next).toHaveBeenCalledWith();
71
+ });
72
+ });
73
+ (0, vitest_1.describe)("missing tenant", () => {
74
+ (0, vitest_1.it)("returns 400 when no tenant ID can be resolved", async () => {
75
+ const client = makeClient();
76
+ const middleware = (0, express_js_1.expressMiddleware)(client);
77
+ const req = makeReq(); // No tenant header
78
+ const res = makeRes();
79
+ await middleware(req, res, next);
80
+ (0, vitest_1.expect)(res.status).toHaveBeenCalledWith(400);
81
+ (0, vitest_1.expect)(res.json).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
82
+ error: vitest_1.expect.objectContaining({
83
+ code: "MISSING_TENANT",
84
+ }),
85
+ }));
86
+ });
87
+ (0, vitest_1.it)("does not call next() when tenant is missing", async () => {
88
+ const client = makeClient();
89
+ const middleware = (0, express_js_1.expressMiddleware)(client);
90
+ const req = makeReq();
91
+ const res = makeRes();
92
+ await middleware(req, res, next);
93
+ (0, vitest_1.expect)(next).not.toHaveBeenCalled();
94
+ });
95
+ });
96
+ (0, vitest_1.describe)("tenant not found", () => {
97
+ (0, vitest_1.it)("returns 404 when resolveTenant throws TenantNotFoundError", async () => {
98
+ const client = makeClient({
99
+ resolveTenant: vitest_1.vi.fn().mockRejectedValue(new core_1.TenantNotFoundError("t-missing")),
100
+ });
101
+ const middleware = (0, express_js_1.expressMiddleware)(client);
102
+ const req = makeReq({ "x-tenant-id": "t-missing" });
103
+ const res = makeRes();
104
+ await middleware(req, res, next);
105
+ (0, vitest_1.expect)(res.status).toHaveBeenCalledWith(404);
106
+ (0, vitest_1.expect)(res.json).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
107
+ error: vitest_1.expect.objectContaining({
108
+ code: "TENANT_NOT_FOUND",
109
+ }),
110
+ }));
111
+ });
112
+ (0, vitest_1.it)("does not call next() when tenant is not found", async () => {
113
+ const client = makeClient({
114
+ resolveTenant: vitest_1.vi.fn().mockRejectedValue(new core_1.TenantNotFoundError("t-missing")),
115
+ });
116
+ const middleware = (0, express_js_1.expressMiddleware)(client);
117
+ const req = makeReq({ "x-tenant-id": "t-missing" });
118
+ const res = makeRes();
119
+ await middleware(req, res, next);
120
+ (0, vitest_1.expect)(next).not.toHaveBeenCalled();
121
+ });
122
+ });
123
+ (0, vitest_1.describe)("error handling", () => {
124
+ (0, vitest_1.it)("calls next(err) when an unexpected error occurs", async () => {
125
+ const error = new Error("unexpected failure");
126
+ const client = makeClient({
127
+ resolveTenant: vitest_1.vi.fn().mockRejectedValue(error),
128
+ });
129
+ const middleware = (0, express_js_1.expressMiddleware)(client);
130
+ const req = makeReq({ "x-tenant-id": "t-1" });
131
+ const res = makeRes();
132
+ await middleware(req, res, next);
133
+ (0, vitest_1.expect)(next).toHaveBeenCalledWith(error);
134
+ });
135
+ (0, vitest_1.it)("calls onError callback when provided and error is thrown", async () => {
136
+ const error = new Error("unexpected");
137
+ const onError = vitest_1.vi.fn();
138
+ const client = makeClient({
139
+ resolveTenant: vitest_1.vi.fn().mockRejectedValue(error),
140
+ });
141
+ const middleware = (0, express_js_1.expressMiddleware)(client, { onError });
142
+ const req = makeReq({ "x-tenant-id": "t-1" });
143
+ const res = makeRes();
144
+ await middleware(req, res, next);
145
+ (0, vitest_1.expect)(onError).toHaveBeenCalledWith(error, req);
146
+ });
147
+ });
148
+ (0, vitest_1.describe)("custom resolvers", () => {
149
+ (0, vitest_1.it)("uses custom resolver when header resolution fails", async () => {
150
+ const ctx = makeTenantContextLegacy("custom-resolved");
151
+ const client = makeClient({
152
+ resolveTenant: vitest_1.vi.fn().mockResolvedValue(ctx),
153
+ });
154
+ const customResolver = {
155
+ resolve: vitest_1.vi.fn().mockResolvedValue("custom-resolved"),
156
+ };
157
+ const middleware = (0, express_js_1.expressMiddleware)(client, {
158
+ resolvers: [customResolver],
159
+ });
160
+ const req = makeReq(); // No header
161
+ const res = makeRes();
162
+ await middleware(req, res, next);
163
+ (0, vitest_1.expect)(customResolver.resolve).toHaveBeenCalledWith(req);
164
+ (0, vitest_1.expect)(req.tenant).toEqual(ctx);
165
+ (0, vitest_1.expect)(next).toHaveBeenCalled();
166
+ });
167
+ (0, vitest_1.it)("stops at the first resolver that returns a value", async () => {
168
+ const ctx = makeTenantContextLegacy("first-resolved");
169
+ const client = makeClient({
170
+ resolveTenant: vitest_1.vi.fn().mockResolvedValue(ctx),
171
+ });
172
+ const resolver1 = {
173
+ resolve: vitest_1.vi.fn().mockResolvedValue("first-resolved"),
174
+ };
175
+ const resolver2 = {
176
+ resolve: vitest_1.vi.fn().mockResolvedValue("second-resolved"),
177
+ };
178
+ const middleware = (0, express_js_1.expressMiddleware)(client, {
179
+ resolvers: [resolver1, resolver2],
180
+ });
181
+ const req = makeReq();
182
+ const res = makeRes();
183
+ await middleware(req, res, next);
184
+ (0, vitest_1.expect)(resolver1.resolve).toHaveBeenCalled();
185
+ (0, vitest_1.expect)(resolver2.resolve).not.toHaveBeenCalled();
186
+ });
187
+ });
188
+ });
189
+ //# sourceMappingURL=middleware-express.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-express.test.js","sourceRoot":"","sources":["../../src/__tests__/middleware-express.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=middleware-fastify.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-fastify.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/middleware-fastify.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,266 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-fastify.test.js","sourceRoot":"","sources":["../../src/__tests__/middleware-fastify.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare class LRUCache<K, V> {
2
+ private readonly maxSize;
3
+ private readonly ttlMs;
4
+ private readonly map;
5
+ constructor(options?: {
6
+ maxSize?: number;
7
+ ttlMs?: number;
8
+ });
9
+ get(key: K): V | undefined;
10
+ set(key: K, value: V): void;
11
+ invalidate(key: K): void;
12
+ clear(): void;
13
+ }
14
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAOA,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwB;gBAEhC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAM1D,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAe1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAe3B,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;IAIxB,KAAK,IAAI,IAAI;CAGd"}
package/dist/cache.js ADDED
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LRUCache = void 0;
4
+ const core_1 = require("@stratum-hq/core");
5
+ class LRUCache {
6
+ maxSize;
7
+ ttlMs;
8
+ map;
9
+ constructor(options) {
10
+ this.maxSize = options?.maxSize ?? 100;
11
+ this.ttlMs = options?.ttlMs ?? core_1.DEFAULT_CACHE_TTL_MS;
12
+ this.map = new Map();
13
+ }
14
+ get(key) {
15
+ const entry = this.map.get(key);
16
+ if (!entry)
17
+ return undefined;
18
+ if (Date.now() > entry.expiresAt) {
19
+ this.map.delete(key);
20
+ return undefined;
21
+ }
22
+ // Move to front (most recently used) by delete+set
23
+ this.map.delete(key);
24
+ this.map.set(key, entry);
25
+ return entry.value;
26
+ }
27
+ set(key, value) {
28
+ // Delete first to reset insertion order
29
+ this.map.delete(key);
30
+ // Evict oldest entry if at capacity
31
+ if (this.map.size >= this.maxSize) {
32
+ const oldest = this.map.keys().next().value;
33
+ if (oldest !== undefined) {
34
+ this.map.delete(oldest);
35
+ }
36
+ }
37
+ this.map.set(key, { value, expiresAt: Date.now() + this.ttlMs });
38
+ }
39
+ invalidate(key) {
40
+ this.map.delete(key);
41
+ }
42
+ clear() {
43
+ this.map.clear();
44
+ }
45
+ }
46
+ exports.LRUCache = LRUCache;
47
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":";;;AAAA,2CAAwD;AAOxD,MAAa,QAAQ;IACF,OAAO,CAAS;IAChB,KAAK,CAAS;IACd,GAAG,CAAwB;IAE5C,YAAY,OAA8C;QACxD,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,GAAG,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,2BAAoB,CAAC;QACpD,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,GAAM;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAE7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,mDAAmD;QACnD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,wCAAwC;QACxC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAErB,oCAAoC;QACpC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,UAAU,CAAC,GAAM;QACf,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;CACF;AAhDD,4BAgDC"}
@@ -0,0 +1,60 @@
1
+ import type { TenantContextLegacy, TenantNode, CreateTenantInput, UpdateTenantInput, MoveTenantInput, Webhook, CreateWebhookInput, UpdateWebhookInput, Region, CreateRegionInput, UpdateRegionInput } from "@stratum-hq/core";
2
+ export interface StratumClientOptions {
3
+ controlPlaneUrl: string;
4
+ apiKey: string;
5
+ regionUrl?: string;
6
+ cache?: {
7
+ enabled?: boolean;
8
+ ttlMs?: number;
9
+ maxSize?: number;
10
+ };
11
+ }
12
+ export declare class StratumClient {
13
+ private readonly baseUrl;
14
+ private readonly apiKey;
15
+ private readonly regionUrl;
16
+ private readonly cache;
17
+ private readonly cacheEnabled;
18
+ constructor(options: StratumClientOptions);
19
+ private fetch;
20
+ resolveTenant(tenantId: string): Promise<TenantContextLegacy>;
21
+ getTenantTree(rootId?: string): Promise<TenantNode[]>;
22
+ createTenant(input: CreateTenantInput): Promise<TenantNode>;
23
+ getTenant(tenantId: string): Promise<TenantNode>;
24
+ updateTenant(tenantId: string, input: UpdateTenantInput): Promise<TenantNode>;
25
+ moveTenant(tenantId: string, input: MoveTenantInput): Promise<TenantNode>;
26
+ archiveTenant(tenantId: string): Promise<void>;
27
+ deleteTenant(tenantId: string): Promise<void>;
28
+ invalidateCache(tenantId: string): void;
29
+ clearCache(): void;
30
+ createWebhook(input: CreateWebhookInput): Promise<Webhook>;
31
+ listWebhooks(tenantId?: string): Promise<Webhook[]>;
32
+ getWebhook(id: string): Promise<Webhook>;
33
+ updateWebhook(id: string, input: UpdateWebhookInput): Promise<Webhook>;
34
+ deleteWebhook(id: string): Promise<void>;
35
+ rotateApiKey(keyId: string, name?: string): Promise<{
36
+ id: string;
37
+ plaintext_key: string;
38
+ tenant_id: string | null;
39
+ name: string | null;
40
+ }>;
41
+ listApiKeys(tenantId?: string): Promise<Array<{
42
+ id: string;
43
+ tenant_id: string | null;
44
+ name: string | null;
45
+ created_at: string;
46
+ last_used_at: string | null;
47
+ expires_at: string | null;
48
+ }>>;
49
+ listDormantKeys(days?: number): Promise<Array<{
50
+ id: string;
51
+ tenant_id: string | null;
52
+ name: string | null;
53
+ last_used_at: string | null;
54
+ }>>;
55
+ listRegions(): Promise<Region[]>;
56
+ createRegion(input: CreateRegionInput): Promise<Region>;
57
+ updateRegion(id: string, input: UpdateRegionInput): Promise<Region>;
58
+ deleteRegion(id: string): Promise<void>;
59
+ }
60
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}