@stratum-hq/sdk 0.1.0 → 0.2.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.
@@ -185,5 +185,155 @@ function makeClient(overrides = {}) {
185
185
  (0, vitest_1.expect)(resolver2.resolve).not.toHaveBeenCalled();
186
186
  });
187
187
  });
188
+ (0, vitest_1.describe)("tenant impersonation", () => {
189
+ (0, vitest_1.it)("impersonates when authorized and header is present", async () => {
190
+ const callerCtx = makeTenantContextLegacy("caller-tenant");
191
+ const targetCtx = makeTenantContextLegacy("target-tenant");
192
+ const client = makeClient({
193
+ resolveTenant: vitest_1.vi
194
+ .fn()
195
+ .mockResolvedValueOnce(callerCtx)
196
+ .mockResolvedValueOnce(targetCtx),
197
+ });
198
+ const authorize = vitest_1.vi.fn().mockReturnValue(true);
199
+ const onImpersonate = vitest_1.vi.fn();
200
+ const middleware = (0, express_js_1.expressMiddleware)(client, {
201
+ impersonation: {
202
+ enabled: true,
203
+ authorize,
204
+ onImpersonate,
205
+ },
206
+ });
207
+ const req = makeReq({
208
+ "x-tenant-id": "caller-tenant",
209
+ "x-impersonate-tenant": "target-tenant",
210
+ });
211
+ const res = makeRes();
212
+ await middleware(req, res, next);
213
+ (0, vitest_1.expect)(req.tenant).toEqual(targetCtx);
214
+ (0, vitest_1.expect)(req.impersonating).toBe(true);
215
+ (0, vitest_1.expect)(req.originalTenantId).toBe("caller-tenant");
216
+ (0, vitest_1.expect)(authorize).toHaveBeenCalledWith(req, "caller-tenant", "target-tenant");
217
+ (0, vitest_1.expect)(onImpersonate).toHaveBeenCalledWith(req, "caller-tenant", "target-tenant");
218
+ (0, vitest_1.expect)(next).toHaveBeenCalled();
219
+ });
220
+ (0, vitest_1.it)("returns 403 when impersonation is denied", async () => {
221
+ const callerCtx = makeTenantContextLegacy("caller-tenant");
222
+ const client = makeClient({
223
+ resolveTenant: vitest_1.vi.fn().mockResolvedValue(callerCtx),
224
+ });
225
+ const authorize = vitest_1.vi.fn().mockReturnValue(false);
226
+ const middleware = (0, express_js_1.expressMiddleware)(client, {
227
+ impersonation: {
228
+ enabled: true,
229
+ authorize,
230
+ },
231
+ });
232
+ const req = makeReq({
233
+ "x-tenant-id": "caller-tenant",
234
+ "x-impersonate-tenant": "target-tenant",
235
+ });
236
+ const res = makeRes();
237
+ await middleware(req, res, next);
238
+ (0, vitest_1.expect)(res.status).toHaveBeenCalledWith(403);
239
+ (0, vitest_1.expect)(res.json).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
240
+ error: vitest_1.expect.objectContaining({
241
+ code: "IMPERSONATION_DENIED",
242
+ }),
243
+ }));
244
+ (0, vitest_1.expect)(next).not.toHaveBeenCalled();
245
+ });
246
+ (0, vitest_1.it)("skips impersonation when header matches own tenant", async () => {
247
+ const ctx = makeTenantContextLegacy("same-tenant");
248
+ const client = makeClient({
249
+ resolveTenant: vitest_1.vi.fn().mockResolvedValue(ctx),
250
+ });
251
+ const authorize = vitest_1.vi.fn();
252
+ const middleware = (0, express_js_1.expressMiddleware)(client, {
253
+ impersonation: {
254
+ enabled: true,
255
+ authorize,
256
+ },
257
+ });
258
+ const req = makeReq({
259
+ "x-tenant-id": "same-tenant",
260
+ "x-impersonate-tenant": "same-tenant",
261
+ });
262
+ const res = makeRes();
263
+ await middleware(req, res, next);
264
+ // Should NOT call authorize — same tenant, no impersonation needed
265
+ (0, vitest_1.expect)(authorize).not.toHaveBeenCalled();
266
+ (0, vitest_1.expect)(req.tenant).toEqual(ctx);
267
+ (0, vitest_1.expect)(req.impersonating).toBe(false);
268
+ (0, vitest_1.expect)(next).toHaveBeenCalled();
269
+ });
270
+ (0, vitest_1.it)("skips impersonation when not enabled", async () => {
271
+ const ctx = makeTenantContextLegacy("caller");
272
+ const client = makeClient({
273
+ resolveTenant: vitest_1.vi.fn().mockResolvedValue(ctx),
274
+ });
275
+ const middleware = (0, express_js_1.expressMiddleware)(client);
276
+ const req = makeReq({
277
+ "x-tenant-id": "caller",
278
+ "x-impersonate-tenant": "target",
279
+ });
280
+ const res = makeRes();
281
+ await middleware(req, res, next);
282
+ // No impersonation config — header ignored
283
+ (0, vitest_1.expect)(req.tenant).toEqual(ctx);
284
+ (0, vitest_1.expect)(req.impersonating).toBe(false);
285
+ (0, vitest_1.expect)(next).toHaveBeenCalled();
286
+ });
287
+ (0, vitest_1.it)("supports custom impersonation header name", async () => {
288
+ const callerCtx = makeTenantContextLegacy("caller");
289
+ const targetCtx = makeTenantContextLegacy("target");
290
+ const client = makeClient({
291
+ resolveTenant: vitest_1.vi
292
+ .fn()
293
+ .mockResolvedValueOnce(callerCtx)
294
+ .mockResolvedValueOnce(targetCtx),
295
+ });
296
+ const middleware = (0, express_js_1.expressMiddleware)(client, {
297
+ impersonation: {
298
+ enabled: true,
299
+ headerName: "X-View-As",
300
+ authorize: () => true,
301
+ },
302
+ });
303
+ const req = makeReq({
304
+ "x-tenant-id": "caller",
305
+ "x-view-as": "target",
306
+ });
307
+ const res = makeRes();
308
+ await middleware(req, res, next);
309
+ (0, vitest_1.expect)(req.tenant).toEqual(targetCtx);
310
+ (0, vitest_1.expect)(req.impersonating).toBe(true);
311
+ });
312
+ (0, vitest_1.it)("supports async authorize function", async () => {
313
+ const callerCtx = makeTenantContextLegacy("caller");
314
+ const targetCtx = makeTenantContextLegacy("target");
315
+ const client = makeClient({
316
+ resolveTenant: vitest_1.vi
317
+ .fn()
318
+ .mockResolvedValueOnce(callerCtx)
319
+ .mockResolvedValueOnce(targetCtx),
320
+ });
321
+ const authorize = vitest_1.vi.fn().mockResolvedValue(true);
322
+ const middleware = (0, express_js_1.expressMiddleware)(client, {
323
+ impersonation: {
324
+ enabled: true,
325
+ authorize,
326
+ },
327
+ });
328
+ const req = makeReq({
329
+ "x-tenant-id": "caller",
330
+ "x-impersonate-tenant": "target",
331
+ });
332
+ const res = makeRes();
333
+ await middleware(req, res, next);
334
+ (0, vitest_1.expect)(req.impersonating).toBe(true);
335
+ (0, vitest_1.expect)(authorize).toHaveBeenCalled();
336
+ });
337
+ });
188
338
  });
189
339
  //# sourceMappingURL=middleware-express.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware-express.test.js","sourceRoot":"","sources":["../../src/__tests__/middleware-express.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"middleware-express.test.js","sourceRoot":"","sources":["../../src/__tests__/middleware-express.test.ts"],"names":[],"mappings":"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"}
package/dist/context.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { AsyncLocalStorage } from "node:async_hooks";
3
2
  import type { TenantContextLegacy } from "@stratum-hq/core";
4
3
  export declare const tenantStorage: AsyncLocalStorage<TenantContextLegacy>;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,eAAO,MAAM,aAAa,wCAA+C,CAAC;AAE1E,wBAAgB,gBAAgB,IAAI,mBAAmB,CAMtD;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEpF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAGnE"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,eAAO,MAAM,aAAa,wCAA+C,CAAC;AAE1E,wBAAgB,gBAAgB,IAAI,mBAAmB,CAMtD;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEpF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAGnE"}
package/dist/context.js CHANGED
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setTenantContext = exports.runWithTenantContext = exports.getTenantContext = exports.tenantStorage = void 0;
3
+ exports.tenantStorage = void 0;
4
+ exports.getTenantContext = getTenantContext;
5
+ exports.runWithTenantContext = runWithTenantContext;
6
+ exports.setTenantContext = setTenantContext;
4
7
  const node_async_hooks_1 = require("node:async_hooks");
5
8
  const core_1 = require("@stratum-hq/core");
6
9
  exports.tenantStorage = new node_async_hooks_1.AsyncLocalStorage();
@@ -11,14 +14,11 @@ function getTenantContext() {
11
14
  }
12
15
  return ctx;
13
16
  }
14
- exports.getTenantContext = getTenantContext;
15
17
  function runWithTenantContext(context, fn) {
16
18
  return exports.tenantStorage.run(context, fn);
17
19
  }
18
- exports.runWithTenantContext = runWithTenantContext;
19
20
  function setTenantContext(context) {
20
21
  // Bind the current store value — for middleware entry points
21
22
  exports.tenantStorage.enterWith(context);
22
23
  }
23
- exports.setTenantContext = setTenantContext;
24
24
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;AAAA,uDAAqD;AACrD,2CAA8D;AAGjD,QAAA,aAAa,GAAG,IAAI,oCAAiB,EAAuB,CAAC;AAE1E,SAAgB,gBAAgB;IAC9B,MAAM,GAAG,GAAG,qBAAa,CAAC,QAAQ,EAAE,CAAC;IACrC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,iCAA0B,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAND,4CAMC;AAED,SAAgB,oBAAoB,CAAI,OAA4B,EAAE,EAAW;IAC/E,OAAO,qBAAa,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAFD,oDAEC;AAED,SAAgB,gBAAgB,CAAC,OAA4B;IAC3D,6DAA6D;IAC7D,qBAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAHD,4CAGC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":";;;AAMA,4CAMC;AAED,oDAEC;AAED,4CAGC;AArBD,uDAAqD;AACrD,2CAA8D;AAGjD,QAAA,aAAa,GAAG,IAAI,oCAAiB,EAAuB,CAAC;AAE1E,SAAgB,gBAAgB;IAC9B,MAAM,GAAG,GAAG,qBAAa,CAAC,QAAQ,EAAE,CAAC;IACrC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,iCAA0B,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,oBAAoB,CAAI,OAA4B,EAAE,EAAW;IAC/E,OAAO,qBAAa,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAA4B;IAC3D,6DAA6D;IAC7D,qBAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,wBAAgB,OAAO,CAAC,OAAO,EAAE,oBAAoB;;wBAI7B,iBAAiB;oBACrB,iBAAiB,eACrB,GAAG,SAAS,GAAG,QAAQ,GAAG;;;EAKzC;AAGD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,YAAY,EACV,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,wBAAgB,OAAO,CAAC,OAAO,EAAE,oBAAoB;;wBAI7B,iBAAiB;oBACrB,iBAAiB,MAC9B,SAAS,GAAG,EAAE,OAAO,GAAG,EAAE,MAAM,GAAG;;;EAKzC;AAGD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,YAAY,EACV,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveFromJwt = exports.resolveFromHeader = exports.fastifyPlugin = exports.expressMiddleware = exports.tenantStorage = exports.setTenantContext = exports.runWithTenantContext = exports.getTenantContext = exports.StratumClient = exports.stratum = void 0;
3
+ exports.resolveFromJwt = exports.resolveFromHeader = exports.fastifyPlugin = exports.expressMiddleware = exports.tenantStorage = exports.setTenantContext = exports.runWithTenantContext = exports.getTenantContext = exports.StratumClient = void 0;
4
+ exports.stratum = stratum;
4
5
  const client_js_1 = require("./client.js");
5
6
  const express_js_1 = require("./middleware/express.js");
6
7
  const fastify_js_1 = require("./middleware/fastify.js");
@@ -15,7 +16,6 @@ function stratum(options) {
15
16
  runWithTenantContext: context_js_1.runWithTenantContext,
16
17
  };
17
18
  }
18
- exports.stratum = stratum;
19
19
  // Named exports for direct usage
20
20
  var client_js_2 = require("./client.js");
21
21
  Object.defineProperty(exports, "StratumClient", { enumerable: true, get: function () { return client_js_2.StratumClient; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAE5C,wDAA4D;AAC5D,wDAAwD;AACxD,6CAAsE;AAGtE,SAAgB,OAAO,CAAC,OAA6B;IACnD,MAAM,MAAM,GAAG,IAAI,yBAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO;QACL,MAAM;QACN,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,IAAA,8BAAiB,EAAC,MAAM,EAAE,IAAI,CAAC;QACzE,MAAM,EAAE,CAAC,IAAwB,EAAE,EAAE,CACnC,CAAC,OAAY,EAAE,KAAU,EAAE,IAAS,EAAE,EAAE,CACtC,IAAA,0BAAa,EAAC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC;QACrD,gBAAgB,EAAhB,6BAAgB;QAChB,oBAAoB,EAApB,iCAAoB;KACrB,CAAC;AACJ,CAAC;AAXD,0BAWC;AAED,iCAAiC;AACjC,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAEtB,2CAAuG;AAA9F,8GAAA,gBAAgB,OAAA;AAAE,kHAAA,oBAAoB,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,2GAAA,aAAa,OAAA;AAChF,sDAA4D;AAAnD,+GAAA,iBAAiB,OAAA;AAC1B,sDAAwD;AAA/C,2GAAA,aAAa,OAAA;AACtB,mDAA0D;AAAjD,8GAAA,iBAAiB,OAAA;AAC1B,6CAAoD;AAA3C,wGAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAOA,0BAWC;AAlBD,2CAA4C;AAE5C,wDAA4D;AAC5D,wDAAwD;AACxD,6CAAsE;AAGtE,SAAgB,OAAO,CAAC,OAA6B;IACnD,MAAM,MAAM,GAAG,IAAI,yBAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO;QACL,MAAM;QACN,UAAU,EAAE,CAAC,IAAwB,EAAE,EAAE,CAAC,IAAA,8BAAiB,EAAC,MAAM,EAAE,IAAI,CAAC;QACzE,MAAM,EAAE,CAAC,IAAwB,EAAE,EAAE,CACnC,CAAC,OAAY,EAAE,KAAU,EAAE,IAAS,EAAE,EAAE,CACtC,IAAA,0BAAa,EAAC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC;QACrD,gBAAgB,EAAhB,6BAAgB;QAChB,oBAAoB,EAApB,iCAAoB;KACrB,CAAC;AACJ,CAAC;AAED,iCAAiC;AACjC,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAEtB,2CAAuG;AAA9F,8GAAA,gBAAgB,OAAA;AAAE,kHAAA,oBAAoB,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,2GAAA,aAAa,OAAA;AAChF,sDAA4D;AAAnD,+GAAA,iBAAiB,OAAA;AAC1B,sDAAwD;AAA/C,2GAAA,aAAa,OAAA;AACtB,mDAA0D;AAAjD,8GAAA,iBAAiB,OAAA;AAC1B,6CAAoD;AAA3C,wGAAA,cAAc,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/middleware/express.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,iBAAiB,SAC/D,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAG,QAAQ,IAAI,CAAC,CAoD5D"}
1
+ {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/middleware/express.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,iBAAiB,IACpE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,KAAG,OAAO,CAAC,IAAI,CAAC,CAqF5D"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.expressMiddleware = void 0;
3
+ exports.expressMiddleware = expressMiddleware;
4
4
  const core_1 = require("@stratum-hq/core");
5
5
  const context_js_1 = require("../context.js");
6
6
  const jwt_js_1 = require("../resolvers/jwt.js");
@@ -42,6 +42,34 @@ function expressMiddleware(client, options) {
42
42
  throw err;
43
43
  }
44
44
  req.tenant = context;
45
+ req.impersonating = false;
46
+ // Impersonation: check for X-Impersonate-Tenant header
47
+ if (options?.impersonation?.enabled) {
48
+ const impersonateHeader = options.impersonation.headerName || "X-Impersonate-Tenant";
49
+ const impersonateTenantId = req.headers?.[impersonateHeader.toLowerCase()];
50
+ if (impersonateTenantId && impersonateTenantId !== tenantId) {
51
+ const authorized = await options.impersonation.authorize(req, tenantId, impersonateTenantId);
52
+ if (!authorized) {
53
+ res.status(403).json({
54
+ error: {
55
+ code: "IMPERSONATION_DENIED",
56
+ message: "Not authorized to impersonate this tenant",
57
+ },
58
+ });
59
+ return;
60
+ }
61
+ // Resolve the impersonated tenant's context
62
+ const impersonatedContext = await client.resolveTenant(impersonateTenantId);
63
+ req.tenant = impersonatedContext;
64
+ req.impersonating = true;
65
+ req.originalTenantId = tenantId;
66
+ options.impersonation.onImpersonate?.(req, tenantId, impersonateTenantId);
67
+ (0, context_js_1.runWithTenantContext)(impersonatedContext, () => {
68
+ next();
69
+ });
70
+ return;
71
+ }
72
+ }
45
73
  (0, context_js_1.runWithTenantContext)(context, () => {
46
74
  next();
47
75
  });
@@ -54,5 +82,4 @@ function expressMiddleware(client, options) {
54
82
  }
55
83
  };
56
84
  }
57
- exports.expressMiddleware = expressMiddleware;
58
85
  //# sourceMappingURL=express.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/middleware/express.ts"],"names":[],"mappings":";;;AAAA,2CAAuD;AAGvD,8CAAqD;AACrD,gDAAqD;AACrD,sDAA2D;AAE3D,SAAgB,iBAAiB,CAAC,MAAqB,EAAE,OAA2B;IAClF,OAAO,KAAK,EAAE,GAAQ,EAAE,GAAQ,EAAE,IAAS,EAAiB,EAAE;QAC5D,IAAI,CAAC;YACH,qDAAqD;YACrD,IAAI,QAAQ,GAAkB,IAAI,CAAC;YAEnC,QAAQ,GAAG,IAAA,uBAAc,EAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE;gBACpD,MAAM,EAAE,OAAO,EAAE,SAAS;gBAC1B,MAAM,EAAE,OAAO,EAAE,SAAS;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAA,6BAAiB,EAAC,GAAG,CAAC,CAAC;YACpC,CAAC;YAED,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;gBACpC,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBACzC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC3C,IAAI,MAAM,EAAE,CAAC;wBACX,QAAQ,GAAG,MAAM,CAAC;wBAClB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,8CAA8C,EAAE,EAAE,CAAC,CAAC;gBACrH,OAAO;YACT,CAAC;YAED,IAAI,OAAO,CAAC;YACZ,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,0BAAmB,EAAE,CAAC;oBACvC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,qBAAqB,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;oBACxG,OAAO;gBACT,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;YAErB,IAAA,iCAAoB,EAAC,OAAO,EAAE,GAAG,EAAE;gBACjC,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,EAAE,OAAO,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;gBAC7C,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5B,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AArDD,8CAqDC"}
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/middleware/express.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../../src/middleware/fastify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,GAAG,iBAAiB,EACtD,IAAI,EAAE,GAAG,GACR,IAAI,CA0DN"}
1
+ {"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../../src/middleware/fastify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,GAAG,iBAAiB,EACtD,IAAI,EAAE,GAAG,GACR,IAAI,CA0FN"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fastifyPlugin = void 0;
3
+ exports.fastifyPlugin = fastifyPlugin;
4
4
  const core_1 = require("@stratum-hq/core");
5
5
  const context_js_1 = require("../context.js");
6
6
  const jwt_js_1 = require("../resolvers/jwt.js");
@@ -8,6 +8,8 @@ const header_js_1 = require("../resolvers/header.js");
8
8
  function fastifyPlugin(fastify, options, done) {
9
9
  const { client, ...middlewareOptions } = options;
10
10
  fastify.decorateRequest("tenant", null);
11
+ fastify.decorateRequest("impersonating", false);
12
+ fastify.decorateRequest("originalTenantId", null);
11
13
  fastify.addHook("onRequest", (request, reply, done) => {
12
14
  // Resolve tenant ID: JWT → header → custom resolvers
13
15
  let tenantId = null;
@@ -47,6 +49,31 @@ function fastifyPlugin(fastify, options, done) {
47
49
  throw err;
48
50
  }
49
51
  request.tenant = context;
52
+ request.impersonating = false;
53
+ // Impersonation: check for X-Impersonate-Tenant header
54
+ if (middlewareOptions.impersonation?.enabled) {
55
+ const impersonateHeader = (middlewareOptions.impersonation.headerName || "X-Impersonate-Tenant").toLowerCase();
56
+ const impersonateTenantId = request.headers?.[impersonateHeader];
57
+ if (impersonateTenantId && impersonateTenantId !== tenantId) {
58
+ const authorized = await middlewareOptions.impersonation.authorize(request, tenantId, impersonateTenantId);
59
+ if (!authorized) {
60
+ reply.status(403).send({
61
+ error: {
62
+ code: "IMPERSONATION_DENIED",
63
+ message: "Not authorized to impersonate this tenant",
64
+ },
65
+ });
66
+ return;
67
+ }
68
+ const impersonatedContext = await client.resolveTenant(impersonateTenantId);
69
+ request.tenant = impersonatedContext;
70
+ request.impersonating = true;
71
+ request.originalTenantId = tenantId;
72
+ middlewareOptions.impersonation.onImpersonate?.(request, tenantId, impersonateTenantId);
73
+ (0, context_js_1.runWithTenantContext)(impersonatedContext, done);
74
+ return;
75
+ }
76
+ }
50
77
  // Use run (not enterWith) to bind context only for this request's lifecycle
51
78
  (0, context_js_1.runWithTenantContext)(context, done);
52
79
  };
@@ -54,5 +81,4 @@ function fastifyPlugin(fastify, options, done) {
54
81
  });
55
82
  done();
56
83
  }
57
- exports.fastifyPlugin = fastifyPlugin;
58
84
  //# sourceMappingURL=fastify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fastify.js","sourceRoot":"","sources":["../../src/middleware/fastify.ts"],"names":[],"mappings":";;;AAAA,2CAAuD;AAIvD,8CAAqD;AACrD,gDAAqD;AACrD,sDAA2D;AAE3D,SAAgB,aAAa,CAC3B,OAAY,EACZ,OAAsD,EACtD,IAAS;IAET,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAEjD,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAExC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,OAAY,EAAE,KAAU,EAAE,IAAS,EAAE,EAAE;QACnE,qDAAqD;QACrD,IAAI,QAAQ,GAAkB,IAAI,CAAC;QAEnC,QAAQ,GAAG,IAAA,uBAAc,EAAC,OAAO,EAAE,iBAAiB,CAAC,YAAY,EAAE;YACjE,MAAM,EAAE,iBAAiB,CAAC,SAAS;YACnC,MAAM,EAAE,iBAAiB,CAAC,SAAS;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAA,6BAAiB,EAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC/B,IAAI,CAAC,QAAQ,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC;gBAC7C,KAAK,MAAM,QAAQ,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC;oBACnD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC/C,IAAI,MAAM,EAAE,CAAC;wBACX,QAAQ,GAAG,MAAM,CAAC;wBAClB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,8CAA8C,EAAE,EAAE,CAAC,CAAC;gBACvH,OAAO;YACT,CAAC;YAED,IAAI,OAA4B,CAAC;YACjC,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACjD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,0BAAmB,EAAE,CAAC;oBACvC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,qBAAqB,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC1G,OAAO;gBACT,CAAC;gBACD,IAAI,iBAAiB,CAAC,OAAO,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;oBACtD,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAC1C,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;YAEzB,4EAA4E;YAC5E,IAAA,iCAAoB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,aAAa,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,IAAI,EAAE,CAAC;AACT,CAAC;AA9DD,sCA8DC"}
1
+ {"version":3,"file":"fastify.js","sourceRoot":"","sources":["../../src/middleware/fastify.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveFromHeader = void 0;
3
+ exports.resolveFromHeader = resolveFromHeader;
4
4
  const core_1 = require("@stratum-hq/core");
5
5
  function resolveFromHeader(req) {
6
6
  const r = req;
@@ -12,5 +12,4 @@ function resolveFromHeader(req) {
12
12
  return null;
13
13
  return Array.isArray(value) ? value[0] ?? null : value;
14
14
  }
15
- exports.resolveFromHeader = resolveFromHeader;
16
15
  //# sourceMappingURL=header.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/resolvers/header.ts"],"names":[],"mappings":";;;AAAA,2CAAiD;AAEjD,SAAgB,iBAAiB,CAAC,GAAY;IAC5C,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAA8D,CAAC;IAC1F,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAa,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC,oBAAa,CAAC,CAAC;IAC7E,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACzD,CAAC;AAPD,8CAOC"}
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/resolvers/header.ts"],"names":[],"mappings":";;AAEA,8CAOC;AATD,2CAAiD;AAEjD,SAAgB,iBAAiB,CAAC,GAAY;IAC5C,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAA8D,CAAC;IAC1F,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAa,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,CAAC,oBAAa,CAAC,CAAC;IAC7E,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACzD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveFromJwt = void 0;
3
+ exports.resolveFromJwt = resolveFromJwt;
4
4
  function verifyWithJsonwebtoken(token, secret) {
5
5
  try {
6
6
  // eslint-disable-next-line @typescript-eslint/no-require-imports
@@ -51,5 +51,4 @@ function resolveFromJwt(req, claimPath = "tenant_id", options) {
51
51
  }
52
52
  return typeof current === "string" ? current : null;
53
53
  }
54
- exports.resolveFromJwt = resolveFromJwt;
55
54
  //# sourceMappingURL=jwt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/resolvers/jwt.ts"],"names":[],"mappings":";;;AAKA,SAAS,sBAAsB,CAAC,KAAa,EAAE,MAAc;IAC3D,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAkC,CAAC;QACrE,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrE,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC7C,OAAO,OAAkC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAC5B,GAAY,EACZ,YAAoB,WAAW,EAC/B,OAA4B;IAE5B,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAA8D,CAAC;IAC1F,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACpE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE5B,IAAI,MAAM,GAAmC,IAAI,CAAC;IAElD,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,+CAA+C;QAC/C,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QAC3B,0CAA0C;QAC1C,MAAM,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,0EAA0E;QAC1E,OAAO,CAAC,IAAI,CACV,6DAA6D;YAC7D,+DAA+D,CAChE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,sDAAsD;IACtD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,OAAO,GAAY,MAAM,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAChE,OAAO,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AA3CD,wCA2CC"}
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/resolvers/jwt.ts"],"names":[],"mappings":";;AAiBA,wCA2CC;AAvDD,SAAS,sBAAsB,CAAC,KAAa,EAAE,MAAc;IAC3D,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAkC,CAAC;QACrE,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrE,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC7C,OAAO,OAAkC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAC5B,GAAY,EACZ,YAAoB,WAAW,EAC/B,OAA4B;IAE5B,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAA8D,CAAC;IAC1F,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACpE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE5B,IAAI,MAAM,GAAmC,IAAI,CAAC;IAElD,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,+CAA+C;QAC/C,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QAC3B,0CAA0C;QAC1C,MAAM,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,0EAA0E;QAC1E,OAAO,CAAC,IAAI,CACV,6DAA6D;YAC7D,+DAA+D,CAChE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,sDAAsD;IACtD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,OAAO,GAAY,MAAM,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAChE,OAAO,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC"}
package/dist/types.d.ts CHANGED
@@ -8,5 +8,20 @@ export interface MiddlewareOptions {
8
8
  jwtSecret?: string;
9
9
  jwtVerify?: (token: string) => Record<string, unknown> | null;
10
10
  onError?: (err: Error, req: unknown) => void;
11
+ /**
12
+ * Enable tenant impersonation via X-Impersonate-Tenant header.
13
+ * When a request includes this header, the middleware resolves the
14
+ * impersonated tenant's context instead of the caller's own.
15
+ *
16
+ * Provide a function that checks whether the current request is
17
+ * authorized to impersonate (e.g., check for admin role/scope).
18
+ * Return true to allow, false to deny.
19
+ */
20
+ impersonation?: {
21
+ enabled: boolean;
22
+ headerName?: string;
23
+ authorize: (req: unknown, callerTenantId: string, targetTenantId: string) => boolean | Promise<boolean>;
24
+ onImpersonate?: (req: unknown, callerTenantId: string, targetTenantId: string) => void;
25
+ };
11
26
  }
12
27
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEnJ,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC;AAE3H,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,uBAAuB,EAAE,cAAc,EAAE,CAAC;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC9D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEnJ,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC;AAE3H,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,uBAAuB,EAAE,cAAc,EAAE,CAAC;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC9D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACxG,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;KACxF,CAAC;CACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stratum-hq/sdk",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Stratum Node.js SDK for multi-tenant context propagation",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",