@zudojs/tenancy 0.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 (131) hide show
  1. package/README.md +36 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/context/contextManager.core.d.ts +46 -0
  4. package/dist/context/contextManager.core.d.ts.map +1 -0
  5. package/dist/context/contextManager.core.js +76 -0
  6. package/dist/context/contextManager.core.js.map +1 -0
  7. package/dist/context/contextStorage.core.d.ts +24 -0
  8. package/dist/context/contextStorage.core.d.ts.map +1 -0
  9. package/dist/context/contextStorage.core.js +38 -0
  10. package/dist/context/contextStorage.core.js.map +1 -0
  11. package/dist/context/index.d.ts +8 -0
  12. package/dist/context/index.d.ts.map +1 -0
  13. package/dist/context/index.js +8 -0
  14. package/dist/context/index.js.map +1 -0
  15. package/dist/http/httpHelpers.d.ts +46 -0
  16. package/dist/http/httpHelpers.d.ts.map +1 -0
  17. package/dist/http/httpHelpers.js +40 -0
  18. package/dist/http/httpHelpers.js.map +1 -0
  19. package/dist/http/httpTypes.d.ts +39 -0
  20. package/dist/http/httpTypes.d.ts.map +1 -0
  21. package/dist/http/httpTypes.js +9 -0
  22. package/dist/http/httpTypes.js.map +1 -0
  23. package/dist/http/index.d.ts +12 -0
  24. package/dist/http/index.d.ts.map +1 -0
  25. package/dist/http/index.js +9 -0
  26. package/dist/http/index.js.map +1 -0
  27. package/dist/http/tenancyMiddleware.core.d.ts +48 -0
  28. package/dist/http/tenancyMiddleware.core.d.ts.map +1 -0
  29. package/dist/http/tenancyMiddleware.core.js +93 -0
  30. package/dist/http/tenancyMiddleware.core.js.map +1 -0
  31. package/dist/http/tenancyMiddleware.guard.d.ts +27 -0
  32. package/dist/http/tenancyMiddleware.guard.d.ts.map +1 -0
  33. package/dist/http/tenancyMiddleware.guard.js +43 -0
  34. package/dist/http/tenancyMiddleware.guard.js.map +1 -0
  35. package/dist/index.d.ts +19 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +19 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/repository/index.d.ts +8 -0
  40. package/dist/repository/index.d.ts.map +1 -0
  41. package/dist/repository/index.js +8 -0
  42. package/dist/repository/index.js.map +1 -0
  43. package/dist/repository/repository.core.d.ts +27 -0
  44. package/dist/repository/repository.core.d.ts.map +1 -0
  45. package/dist/repository/repository.core.js +65 -0
  46. package/dist/repository/repository.core.js.map +1 -0
  47. package/dist/repository/tenantManager.core.d.ts +46 -0
  48. package/dist/repository/tenantManager.core.d.ts.map +1 -0
  49. package/dist/repository/tenantManager.core.js +74 -0
  50. package/dist/repository/tenantManager.core.js.map +1 -0
  51. package/dist/resolver/index.d.ts +8 -0
  52. package/dist/resolver/index.d.ts.map +1 -0
  53. package/dist/resolver/index.js +8 -0
  54. package/dist/resolver/index.js.map +1 -0
  55. package/dist/resolver/resolverChain.core.d.ts +16 -0
  56. package/dist/resolver/resolverChain.core.d.ts.map +1 -0
  57. package/dist/resolver/resolverChain.core.js +48 -0
  58. package/dist/resolver/resolverChain.core.js.map +1 -0
  59. package/dist/resolver/resolvers/headerResolver.core.d.ts +21 -0
  60. package/dist/resolver/resolvers/headerResolver.core.d.ts.map +1 -0
  61. package/dist/resolver/resolvers/headerResolver.core.js +28 -0
  62. package/dist/resolver/resolvers/headerResolver.core.js.map +1 -0
  63. package/dist/resolver/resolvers/index.d.ts +10 -0
  64. package/dist/resolver/resolvers/index.d.ts.map +1 -0
  65. package/dist/resolver/resolvers/index.js +10 -0
  66. package/dist/resolver/resolvers/index.js.map +1 -0
  67. package/dist/resolver/resolvers/jwtResolver.core.d.ts +27 -0
  68. package/dist/resolver/resolvers/jwtResolver.core.d.ts.map +1 -0
  69. package/dist/resolver/resolvers/jwtResolver.core.js +31 -0
  70. package/dist/resolver/resolvers/jwtResolver.core.js.map +1 -0
  71. package/dist/resolver/resolvers/pathResolver.core.d.ts +24 -0
  72. package/dist/resolver/resolvers/pathResolver.core.d.ts.map +1 -0
  73. package/dist/resolver/resolvers/pathResolver.core.js +41 -0
  74. package/dist/resolver/resolvers/pathResolver.core.js.map +1 -0
  75. package/dist/resolver/resolvers/subdomainResolver.core.d.ts +24 -0
  76. package/dist/resolver/resolvers/subdomainResolver.core.d.ts.map +1 -0
  77. package/dist/resolver/resolvers/subdomainResolver.core.js +48 -0
  78. package/dist/resolver/resolvers/subdomainResolver.core.js.map +1 -0
  79. package/dist/security/guard.core.d.ts +33 -0
  80. package/dist/security/guard.core.d.ts.map +1 -0
  81. package/dist/security/guard.core.js +64 -0
  82. package/dist/security/guard.core.js.map +1 -0
  83. package/dist/security/index.d.ts +7 -0
  84. package/dist/security/index.d.ts.map +1 -0
  85. package/dist/security/index.js +7 -0
  86. package/dist/security/index.js.map +1 -0
  87. package/dist/tenancyErrors/index.d.ts +8 -0
  88. package/dist/tenancyErrors/index.d.ts.map +1 -0
  89. package/dist/tenancyErrors/index.js +8 -0
  90. package/dist/tenancyErrors/index.js.map +1 -0
  91. package/dist/tenancyErrors/tenancyError.base.d.ts +17 -0
  92. package/dist/tenancyErrors/tenancyError.base.d.ts.map +1 -0
  93. package/dist/tenancyErrors/tenancyError.base.js +19 -0
  94. package/dist/tenancyErrors/tenancyError.base.js.map +1 -0
  95. package/dist/tenancyErrors/tenancyError.types.d.ts +68 -0
  96. package/dist/tenancyErrors/tenancyError.types.d.ts.map +1 -0
  97. package/dist/tenancyErrors/tenancyError.types.js +118 -0
  98. package/dist/tenancyErrors/tenancyError.types.js.map +1 -0
  99. package/dist/tenancyTypes/index.d.ts +11 -0
  100. package/dist/tenancyTypes/index.d.ts.map +1 -0
  101. package/dist/tenancyTypes/index.js +11 -0
  102. package/dist/tenancyTypes/index.js.map +1 -0
  103. package/dist/tenancyTypes/repositoryTypes.d.ts +40 -0
  104. package/dist/tenancyTypes/repositoryTypes.d.ts.map +1 -0
  105. package/dist/tenancyTypes/repositoryTypes.js +7 -0
  106. package/dist/tenancyTypes/repositoryTypes.js.map +1 -0
  107. package/dist/tenancyTypes/resolverTypes.d.ts +34 -0
  108. package/dist/tenancyTypes/resolverTypes.d.ts.map +1 -0
  109. package/dist/tenancyTypes/resolverTypes.js +7 -0
  110. package/dist/tenancyTypes/resolverTypes.js.map +1 -0
  111. package/dist/tenancyTypes/tenancyOptions.d.ts +37 -0
  112. package/dist/tenancyTypes/tenancyOptions.d.ts.map +1 -0
  113. package/dist/tenancyTypes/tenancyOptions.js +7 -0
  114. package/dist/tenancyTypes/tenancyOptions.js.map +1 -0
  115. package/dist/tenancyTypes/tenantIdentity.d.ts +21 -0
  116. package/dist/tenancyTypes/tenantIdentity.d.ts.map +1 -0
  117. package/dist/tenancyTypes/tenantIdentity.js +13 -0
  118. package/dist/tenancyTypes/tenantIdentity.js.map +1 -0
  119. package/dist/tenancyTypes/tenantInterface.d.ts +47 -0
  120. package/dist/tenancyTypes/tenantInterface.d.ts.map +1 -0
  121. package/dist/tenancyTypes/tenantInterface.js +7 -0
  122. package/dist/tenancyTypes/tenantInterface.js.map +1 -0
  123. package/dist/utils/index.d.ts +7 -0
  124. package/dist/utils/index.d.ts.map +1 -0
  125. package/dist/utils/index.js +7 -0
  126. package/dist/utils/index.js.map +1 -0
  127. package/dist/utils/utils.helper.d.ts +24 -0
  128. package/dist/utils/utils.helper.d.ts.map +1 -0
  129. package/dist/utils/utils.helper.js +30 -0
  130. package/dist/utils/utils.helper.js.map +1 -0
  131. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextStorage.core.d.ts","sourceRoot":"","sources":["../../src/context/contextStorage.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAGV,sBAAsB,EACvB,MAAM,oCAAoC,CAAC;AAE5C,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC,GAAG,IAAI,sBAAsB,GAAG,SAAS,CAAC;IAC1C,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;CAC/D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,oBAAoB,CAYjE;AAKD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,oBAAoB,CAKxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * AsyncLocalStorage-based tenant context storage.
3
+ *
4
+ * @module context/contextStorage
5
+ */
6
+ import { AsyncLocalStorage } from "node:async_hooks";
7
+ /**
8
+ * Create an AsyncLocalStorage-backed tenant context storage.
9
+ */
10
+ export function createTenantContextStorage() {
11
+ const storage = new AsyncLocalStorage();
12
+ return {
13
+ get() {
14
+ return storage.getStore();
15
+ },
16
+ run(context, callback) {
17
+ return storage.run(context, callback);
18
+ },
19
+ };
20
+ }
21
+ /** Default storage instance. */
22
+ let defaultStorage;
23
+ /**
24
+ * Get or create the default tenant context storage.
25
+ */
26
+ export function getDefaultStorage() {
27
+ if (!defaultStorage) {
28
+ defaultStorage = createTenantContextStorage();
29
+ }
30
+ return defaultStorage;
31
+ }
32
+ /**
33
+ * Reset the default storage (useful for testing).
34
+ */
35
+ export function resetDefaultStorage() {
36
+ defaultStorage = undefined;
37
+ }
38
+ //# sourceMappingURL=contextStorage.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextStorage.core.js","sourceRoot":"","sources":["../../src/context/contextStorage.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAarD;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACxC,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAA0B,CAAC;IAEhE,OAAO;QACL,GAAG;YACD,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC;QAED,GAAG,CAAI,OAA+B,EAAE,QAAiB;YACvD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gCAAgC;AAChC,IAAI,cAAgD,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,0BAA0B,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,cAAc,GAAG,SAAS,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tenant context management.
3
+ *
4
+ * @module context
5
+ */
6
+ export { createTenantContextStorage, getDefaultStorage, resetDefaultStorage, type TenantContextStorage, } from "./contextStorage.core.js";
7
+ export { createContextManager, type ContextManagerOptions, } from "./contextManager.core.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,oBAAoB,GAC1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tenant context management.
3
+ *
4
+ * @module context
5
+ */
6
+ export { createTenantContextStorage, getDefaultStorage, resetDefaultStorage, } from "./contextStorage.core.js";
7
+ export { createContextManager, } from "./contextManager.core.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,oBAAoB,GAErB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * HTTP response helpers for tenancy middleware.
3
+ *
4
+ * @module http/httpHelpers
5
+ */
6
+ /**
7
+ * Create a JSON error response.
8
+ */
9
+ export declare function createJsonErrorResponse(status: number, message: string): {
10
+ readonly status: number;
11
+ readonly body: unknown;
12
+ readonly headers: Record<string, string>;
13
+ };
14
+ /**
15
+ * Create a 400 Bad Request response.
16
+ */
17
+ export declare function createBadRequest(message: string): {
18
+ readonly status: number;
19
+ readonly body: unknown;
20
+ readonly headers: Record<string, string>;
21
+ };
22
+ /**
23
+ * Create a 401 Unauthorized response.
24
+ */
25
+ export declare function createUnauthorized(message: string): {
26
+ readonly status: number;
27
+ readonly body: unknown;
28
+ readonly headers: Record<string, string>;
29
+ };
30
+ /**
31
+ * Create a 403 Forbidden response.
32
+ */
33
+ export declare function createForbidden(message: string): {
34
+ readonly status: number;
35
+ readonly body: unknown;
36
+ readonly headers: Record<string, string>;
37
+ };
38
+ /**
39
+ * Create a 404 Not Found response.
40
+ */
41
+ export declare function createNotFound(message: string): {
42
+ readonly status: number;
43
+ readonly body: unknown;
44
+ readonly headers: Record<string, string>;
45
+ };
46
+ //# sourceMappingURL=httpHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpHelpers.d.ts","sourceRoot":"","sources":["../../src/http/httpHelpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd;IACD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C,CAMA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM;qBAd7B,MAAM;mBACR,OAAO;sBACJ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;EAczC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM;qBArB/B,MAAM;mBACR,OAAO;sBACJ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;EAqBzC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM;qBA5B5B,MAAM;mBACR,OAAO;sBACJ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;EA4BzC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM;qBAnC3B,MAAM;mBACR,OAAO;sBACJ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;EAmCzC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * HTTP response helpers for tenancy middleware.
3
+ *
4
+ * @module http/httpHelpers
5
+ */
6
+ /**
7
+ * Create a JSON error response.
8
+ */
9
+ export function createJsonErrorResponse(status, message) {
10
+ return Object.freeze({
11
+ status,
12
+ body: { error: message },
13
+ headers: { "content-type": "application/json" },
14
+ });
15
+ }
16
+ /**
17
+ * Create a 400 Bad Request response.
18
+ */
19
+ export function createBadRequest(message) {
20
+ return createJsonErrorResponse(400, message);
21
+ }
22
+ /**
23
+ * Create a 401 Unauthorized response.
24
+ */
25
+ export function createUnauthorized(message) {
26
+ return createJsonErrorResponse(401, message);
27
+ }
28
+ /**
29
+ * Create a 403 Forbidden response.
30
+ */
31
+ export function createForbidden(message) {
32
+ return createJsonErrorResponse(403, message);
33
+ }
34
+ /**
35
+ * Create a 404 Not Found response.
36
+ */
37
+ export function createNotFound(message) {
38
+ return createJsonErrorResponse(404, message);
39
+ }
40
+ //# sourceMappingURL=httpHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpHelpers.js","sourceRoot":"","sources":["../../src/http/httpHelpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAc,EACd,OAAe;IAMf,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM;QACN,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;QACxB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Local HTTP type definitions for the middleware adapter.
3
+ *
4
+ * Mirrors @zudojs/http types to avoid hard dependency.
5
+ *
6
+ * @module http/httpTypes
7
+ */
8
+ /** HTTP middleware signature from @zudojs/http. */
9
+ export type HttpMiddleware = (context: HttpMiddlewareContext, next: () => Promise<HttpResponseContext>) => void | Response | HttpResponseContext | Promise<void | Response | HttpResponseContext>;
10
+ /** HTTP middleware context from @zudojs/http. */
11
+ export interface HttpMiddlewareContext {
12
+ readonly request: HttpRequestContext;
13
+ readonly response: HttpResponseContext;
14
+ readonly state: HttpMiddlewareState;
15
+ readonly signal: AbortSignal;
16
+ readonly metadata: Readonly<Record<string, unknown>>;
17
+ }
18
+ /** HTTP request context from @zudojs/http. */
19
+ export interface HttpRequestContext {
20
+ readonly id: string;
21
+ readonly method: string;
22
+ readonly url: string;
23
+ readonly path: string;
24
+ readonly headers: ReadonlyMap<string, string>;
25
+ readonly params: ReadonlyMap<string, string>;
26
+ readonly query: ReadonlyMap<string, string | readonly string[] | undefined>;
27
+ }
28
+ /** HTTP response context from @zudojs/http. */
29
+ export interface HttpResponseContext {
30
+ readonly status: number;
31
+ readonly headers: Headers | Record<string, string>;
32
+ readonly body?: unknown;
33
+ }
34
+ /** HTTP middleware state from @zudojs/http. */
35
+ export interface HttpMiddlewareState {
36
+ get<T = unknown>(key: string): T | undefined;
37
+ set<T = unknown>(key: string, value: T): void;
38
+ }
39
+ //# sourceMappingURL=httpTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpTypes.d.ts","sourceRoot":"","sources":["../../src/http/httpTypes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,mDAAmD;AACnD,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,KAEtC,IAAI,GACJ,QAAQ,GACR,mBAAmB,GACnB,OAAO,CAAC,IAAI,GAAG,QAAQ,GAAG,mBAAmB,CAAC,CAAC;AAEnD,iDAAiD;AACjD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,8CAA8C;AAC9C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;CAC7E;AAED,+CAA+C;AAC/C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,+CAA+C;AAC/C,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAC7C,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CAC/C"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Local HTTP type definitions for the middleware adapter.
3
+ *
4
+ * Mirrors @zudojs/http types to avoid hard dependency.
5
+ *
6
+ * @module http/httpTypes
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=httpTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpTypes.js","sourceRoot":"","sources":["../../src/http/httpTypes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * HTTP middleware adapter barrel.
3
+ *
4
+ * @module http
5
+ */
6
+ export type { HttpMiddleware, HttpMiddlewareContext } from "./httpTypes.js";
7
+ export type { ResolveTenantMiddlewareOptions, RequireTenantMiddlewareOptions, } from "./tenancyMiddleware.core.js";
8
+ export { TENANT_STATE_KEY, TENANT_CONTEXT_STATE_KEY, createResolveTenantMiddleware, createRequireTenantMiddleware, } from "./tenancyMiddleware.core.js";
9
+ export type { TenantGuardMiddlewareOptions } from "./tenancyMiddleware.guard.js";
10
+ export { createTenantGuardMiddleware, createTenantPropagationMiddleware, } from "./tenancyMiddleware.guard.js";
11
+ export { createForbidden, createNotFound } from "./httpHelpers.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5E,YAAY,EACV,8BAA8B,EAC9B,8BAA8B,GAC/B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,6BAA6B,CAAC;AAErC,YAAY,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * HTTP middleware adapter barrel.
3
+ *
4
+ * @module http
5
+ */
6
+ export { TENANT_STATE_KEY, TENANT_CONTEXT_STATE_KEY, createResolveTenantMiddleware, createRequireTenantMiddleware, } from "./tenancyMiddleware.core.js";
7
+ export { createTenantGuardMiddleware, createTenantPropagationMiddleware, } from "./tenancyMiddleware.guard.js";
8
+ export { createForbidden, createNotFound } from "./httpHelpers.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * HTTP middleware adapter for @zudojs/tenancy.
3
+ *
4
+ * Provides middleware factories that resolve and enforce tenant context.
5
+ *
6
+ * @module http/tenancyMiddleware
7
+ *
8
+ * Requires @zudojs/http as a peer dependency.
9
+ */
10
+ import type { Tenant, TenantRequirement } from "../tenancyTypes/tenantInterface.js";
11
+ import type { TenantResolver, TenantResolution } from "../tenancyTypes/resolverTypes.js";
12
+ import type { TenantRepository } from "../tenancyTypes/repositoryTypes.js";
13
+ import type { TenantContextStorage } from "../context/contextStorage.core.js";
14
+ import type { HttpMiddleware } from "./httpTypes.js";
15
+ /** State key for the resolved tenant. */
16
+ export declare const TENANT_STATE_KEY = "tenancy:tenant";
17
+ /** State key for the tenant context. */
18
+ export declare const TENANT_CONTEXT_STATE_KEY = "tenancy:context";
19
+ /** Options for the resolve tenant middleware. */
20
+ export interface ResolveTenantMiddlewareOptions {
21
+ /** Resolver chain or single resolver to determine tenant. */
22
+ readonly resolver: TenantResolver;
23
+ /** Repository to load the full tenant after resolution. */
24
+ readonly repository: TenantRepository;
25
+ /** Tenant context storage for propagation. */
26
+ readonly storage: TenantContextStorage;
27
+ /** Custom error response for missing tenant. */
28
+ readonly notFoundResponse?: (resolution: TenantResolution | undefined) => unknown;
29
+ }
30
+ /** Options for the require tenant middleware. */
31
+ export interface RequireTenantMiddlewareOptions {
32
+ /** Requirement level. */
33
+ readonly requirement?: TenantRequirement;
34
+ /** Custom error response. */
35
+ readonly deniedResponse?: (tenant: Tenant | undefined) => unknown;
36
+ }
37
+ /**
38
+ * Create middleware that resolves the tenant from the request
39
+ * and creates a tenant context.
40
+ */
41
+ export declare function createResolveTenantMiddleware(options: ResolveTenantMiddlewareOptions): HttpMiddleware;
42
+ /**
43
+ * Create middleware that enforces tenant presence.
44
+ *
45
+ * Must run after `createResolveTenantMiddleware`.
46
+ */
47
+ export declare function createRequireTenantMiddleware(options?: RequireTenantMiddlewareOptions): HttpMiddleware;
48
+ //# sourceMappingURL=tenancyMiddleware.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenancyMiddleware.core.d.ts","sourceRoot":"","sources":["../../src/http/tenancyMiddleware.core.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EACV,MAAM,EAEN,iBAAiB,EAClB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EACjB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKrD,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AAEjD,wCAAwC;AACxC,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAI1D,iDAAiD;AACjD,MAAM,WAAW,8BAA8B;IAC7C,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,gDAAgD;IAChD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAC1B,UAAU,EAAE,gBAAgB,GAAG,SAAS,KACrC,OAAO,CAAC;CACd;AAED,iDAAiD;AACjD,MAAM,WAAW,8BAA8B;IAC7C,yBAAyB;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IACzC,6BAA6B;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;CACnE;AAID;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,8BAA8B,GACtC,cAAc,CA+ChB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,CAAC,EAAE,8BAA8B,GACvC,cAAc,CA8BhB"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * HTTP middleware adapter for @zudojs/tenancy.
3
+ *
4
+ * Provides middleware factories that resolve and enforce tenant context.
5
+ *
6
+ * @module http/tenancyMiddleware
7
+ *
8
+ * Requires @zudojs/http as a peer dependency.
9
+ */
10
+ import { createForbidden } from "./httpHelpers.js";
11
+ // ─── State Keys ───────────────────────────────────────────────────────────
12
+ /** State key for the resolved tenant. */
13
+ export const TENANT_STATE_KEY = "tenancy:tenant";
14
+ /** State key for the tenant context. */
15
+ export const TENANT_CONTEXT_STATE_KEY = "tenancy:context";
16
+ // ─── Middleware Factories ──────────────────────────────────────────────────
17
+ /**
18
+ * Create middleware that resolves the tenant from the request
19
+ * and creates a tenant context.
20
+ */
21
+ export function createResolveTenantMiddleware(options) {
22
+ return async (context, next) => {
23
+ const resolution = await options.resolver.resolve(context);
24
+ if (!resolution) {
25
+ const body = options.notFoundResponse?.(resolution) ?? {
26
+ error: "Tenant not found",
27
+ };
28
+ return {
29
+ status: 404,
30
+ body,
31
+ headers: { "content-type": "application/json" },
32
+ };
33
+ }
34
+ const tenant = await options.repository.findById(resolution.tenantId);
35
+ if (!tenant) {
36
+ const body = options.notFoundResponse?.(resolution) ?? {
37
+ error: `Tenant "${resolution.tenantId}" not found`,
38
+ };
39
+ return {
40
+ status: 404,
41
+ body,
42
+ headers: { "content-type": "application/json" },
43
+ };
44
+ }
45
+ const tenantContext = {
46
+ tenantId: tenant.id,
47
+ source: resolution.source,
48
+ trust: resolution.trust,
49
+ resolvedAt: new Date(),
50
+ metadata: resolution.metadata ?? {},
51
+ };
52
+ context.state.set(TENANT_STATE_KEY, tenant);
53
+ context.state.set(TENANT_CONTEXT_STATE_KEY, tenantContext);
54
+ return options.storage.run({
55
+ mode: "tenant",
56
+ tenant,
57
+ context: tenantContext,
58
+ }, () => next());
59
+ };
60
+ }
61
+ /**
62
+ * Create middleware that enforces tenant presence.
63
+ *
64
+ * Must run after `createResolveTenantMiddleware`.
65
+ */
66
+ export function createRequireTenantMiddleware(options) {
67
+ const requirement = options?.requirement ?? "required";
68
+ return async (context, next) => {
69
+ if (requirement === "forbidden") {
70
+ const tenant = context.state.get(TENANT_STATE_KEY);
71
+ if (tenant) {
72
+ return createForbidden("Tenant context is not allowed for this route");
73
+ }
74
+ return next();
75
+ }
76
+ if (requirement === "optional") {
77
+ return next();
78
+ }
79
+ const tenant = context.state.get(TENANT_STATE_KEY);
80
+ if (!tenant) {
81
+ const body = options?.deniedResponse?.(undefined) ?? {
82
+ error: "Tenant context is required",
83
+ };
84
+ return {
85
+ status: 401,
86
+ body,
87
+ headers: { "content-type": "application/json" },
88
+ };
89
+ }
90
+ return next();
91
+ };
92
+ }
93
+ //# sourceMappingURL=tenancyMiddleware.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenancyMiddleware.core.js","sourceRoot":"","sources":["../../src/http/tenancyMiddleware.core.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAeH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,6EAA6E;AAE7E,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAEjD,wCAAwC;AACxC,MAAM,CAAC,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;AA0B1D,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAC3C,OAAuC;IAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7B,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE3D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,UAAU,CAAC,IAAI;gBACrD,KAAK,EAAE,kBAAkB;aAC1B,CAAC;YACF,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,IAAI;gBACJ,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,UAAU,CAAC,IAAI;gBACrD,KAAK,EAAE,WAAW,UAAU,CAAC,QAAQ,aAAa;aACnD,CAAC;YACF,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,IAAI;gBACJ,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAkB;YACnC,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,UAAU,EAAE,IAAI,IAAI,EAAE;YACtB,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;SACpC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC;QAE3D,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CACxB;YACE,IAAI,EAAE,QAAQ;YACd,MAAM;YACN,OAAO,EAAE,aAAa;SACvB,EACD,GAAG,EAAE,CAAC,IAAI,EAAE,CACb,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAC3C,OAAwC;IAExC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,UAAU,CAAC;IAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7B,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAS,gBAAgB,CAAC,CAAC;YAC3D,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,eAAe,CAAC,8CAA8C,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;YAC/B,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAS,gBAAgB,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,OAAO,EAAE,cAAc,EAAE,CAAC,SAAS,CAAC,IAAI;gBACnD,KAAK,EAAE,4BAA4B;aACpC,CAAC;YACF,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,IAAI;gBACJ,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Tenant guard and propagation middleware.
3
+ *
4
+ * @module http/tenancyMiddleware.guard
5
+ */
6
+ import type { TenantRepository } from "../tenancyTypes/repositoryTypes.js";
7
+ import type { TenantContextStorage } from "../context/contextStorage.core.js";
8
+ import type { HttpMiddleware } from "./httpTypes.js";
9
+ /** Options for the tenant guard middleware. */
10
+ export interface TenantGuardMiddlewareOptions {
11
+ /** Tenant context storage. */
12
+ readonly storage: TenantContextStorage;
13
+ /** Repository to validate the tenant. */
14
+ readonly repository: TenantRepository;
15
+ }
16
+ /**
17
+ * Create middleware that validates tenant status.
18
+ *
19
+ * Ensures the resolved tenant is active before proceeding.
20
+ */
21
+ export declare function createTenantGuardMiddleware(options: TenantGuardMiddlewareOptions): HttpMiddleware;
22
+ /**
23
+ * Create middleware that propagates tenant context from state
24
+ * into AsyncLocalStorage for downstream handlers.
25
+ */
26
+ export declare function createTenantPropagationMiddleware(storage: TenantContextStorage): HttpMiddleware;
27
+ //# sourceMappingURL=tenancyMiddleware.guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenancyMiddleware.guard.d.ts","sourceRoot":"","sources":["../../src/http/tenancyMiddleware.guard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AASrD,+CAA+C;AAC/C,MAAM,WAAW,4BAA4B;IAC3C,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,yCAAyC;IACzC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;CACvC;AAID;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,cAAc,CAahB;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,oBAAoB,GAC5B,cAAc,CAoBhB"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Tenant guard and propagation middleware.
3
+ *
4
+ * @module http/tenancyMiddleware.guard
5
+ */
6
+ import { createForbidden } from "./httpHelpers.js";
7
+ import { TENANT_STATE_KEY, TENANT_CONTEXT_STATE_KEY, } from "./tenancyMiddleware.core.js";
8
+ // ─── Middleware Factories ──────────────────────────────────────────────────
9
+ /**
10
+ * Create middleware that validates tenant status.
11
+ *
12
+ * Ensures the resolved tenant is active before proceeding.
13
+ */
14
+ export function createTenantGuardMiddleware(options) {
15
+ return async (context, next) => {
16
+ const tenant = context.state.get(TENANT_STATE_KEY);
17
+ if (!tenant)
18
+ return next();
19
+ if (tenant.status !== "active") {
20
+ return createForbidden(`Tenant "${tenant.id}" is not available (status: ${tenant.status})`);
21
+ }
22
+ return next();
23
+ };
24
+ }
25
+ /**
26
+ * Create middleware that propagates tenant context from state
27
+ * into AsyncLocalStorage for downstream handlers.
28
+ */
29
+ export function createTenantPropagationMiddleware(storage) {
30
+ return async (context, next) => {
31
+ const tenant = context.state.get(TENANT_STATE_KEY);
32
+ const tenantCtx = context.state.get(TENANT_CONTEXT_STATE_KEY);
33
+ if (tenant && tenantCtx) {
34
+ return storage.run({
35
+ mode: "tenant",
36
+ tenant,
37
+ context: tenantCtx,
38
+ }, () => next());
39
+ }
40
+ return next();
41
+ };
42
+ }
43
+ //# sourceMappingURL=tenancyMiddleware.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenancyMiddleware.guard.js","sourceRoot":"","sources":["../../src/http/tenancyMiddleware.guard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AAYrC,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAAqC;IAErC,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAS,gBAAgB,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,EAAE,CAAC;QAE3B,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,eAAe,CACpB,WAAW,MAAM,CAAC,EAAE,+BAA+B,MAAM,CAAC,MAAM,GAAG,CACpE,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iCAAiC,CAC/C,OAA6B;IAE7B,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAS,gBAAgB,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CACjC,wBAAwB,CACzB,CAAC;QAEF,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,GAAG,CAChB;gBACE,IAAI,EAAE,QAAQ;gBACd,MAAM;gBACN,OAAO,EAAE,SAAS;aACnB,EACD,GAAG,EAAE,CAAC,IAAI,EAAE,CACb,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @zudojs/tenancy
3
+ *
4
+ * Multi-tenant context and isolation for the Zudojs framework.
5
+ *
6
+ * Provides tenant resolution, context propagation, resolver chains,
7
+ * isolation strategies, and security validation.
8
+ *
9
+ * @module @zudojs/tenancy
10
+ */
11
+ export * from "./tenancyTypes/index.js";
12
+ export * from "./tenancyErrors/index.js";
13
+ export * from "./context/index.js";
14
+ export * from "./resolver/index.js";
15
+ export * from "./repository/index.js";
16
+ export * from "./security/index.js";
17
+ export * from "./utils/index.js";
18
+ export * from "./http/index.js";
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @zudojs/tenancy
3
+ *
4
+ * Multi-tenant context and isolation for the Zudojs framework.
5
+ *
6
+ * Provides tenant resolution, context propagation, resolver chains,
7
+ * isolation strategies, and security validation.
8
+ *
9
+ * @module @zudojs/tenancy
10
+ */
11
+ export * from "./tenancyTypes/index.js";
12
+ export * from "./tenancyErrors/index.js";
13
+ export * from "./context/index.js";
14
+ export * from "./resolver/index.js";
15
+ export * from "./repository/index.js";
16
+ export * from "./security/index.js";
17
+ export * from "./utils/index.js";
18
+ export * from "./http/index.js";
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tenant repository and manager.
3
+ *
4
+ * @module repository
5
+ */
6
+ export { createMemoryTenantRepository, createDomainRegistry, } from "./repository.core.js";
7
+ export { createTenantManager, type TenantManagerOptions, } from "./tenantManager.core.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EACnB,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tenant repository and manager.
3
+ *
4
+ * @module repository
5
+ */
6
+ export { createMemoryTenantRepository, createDomainRegistry, } from "./repository.core.js";
7
+ export { createTenantManager, } from "./tenantManager.core.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,GAEpB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * In-memory tenant repository and domain registry.
3
+ *
4
+ * @module repository/repository
5
+ */
6
+ import type { TenantId } from "../tenancyTypes/tenantIdentity.js";
7
+ import type { Tenant } from "../tenancyTypes/tenantInterface.js";
8
+ import type { TenantRepository } from "../tenancyTypes/repositoryTypes.js";
9
+ import type { TenantDomain } from "../tenancyTypes/tenancyOptions.js";
10
+ /**
11
+ * Create an in-memory tenant repository.
12
+ */
13
+ export declare function createMemoryTenantRepository(): TenantRepository & {
14
+ add(tenant: Tenant): void;
15
+ remove(id: TenantId): void;
16
+ all(): readonly Tenant[];
17
+ };
18
+ /**
19
+ * Create a domain-to-tenant registry.
20
+ */
21
+ export declare function createDomainRegistry(): {
22
+ register(domain: string, tenantId: TenantId): void;
23
+ unregister(domain: string): void;
24
+ resolve(domain: string): TenantId | undefined;
25
+ all(): readonly TenantDomain[];
26
+ };
27
+ //# sourceMappingURL=repository.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.core.d.ts","sourceRoot":"","sources":["../../src/repository/repository.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGtE;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,gBAAgB,GAAG;IACjE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,GAAG,IAAI,SAAS,MAAM,EAAE,CAAC;CAC1B,CAmCA;AAED;;GAEG;AACH,wBAAgB,oBAAoB;IAIhC,QAAQ,SAAS,MAAM,YAAY,QAAQ,GAAG,IAAI;IAIlD,UAAU,SAAS,MAAM,GAAG,IAAI;IAIhC,OAAO,SAAS,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI7C,GAAG,IAAI,SAAS,YAAY,EAAE;EAOjC"}