@discover-cloud/shared 1.2.9 → 1.4.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 (183) hide show
  1. package/dist/authorization/index.d.ts +2 -2
  2. package/dist/authorization/index.js +1 -1
  3. package/dist/authorization/permission-cache.service.d.ts +104 -16
  4. package/dist/authorization/permission-cache.service.js +177 -148
  5. package/dist/authorization/permission-checker.d.ts +30 -0
  6. package/dist/authorization/permission-checker.js +40 -0
  7. package/dist/context/index.d.ts +1 -1
  8. package/dist/context/index.js +1 -1
  9. package/dist/context/request-context.storage.d.ts +21 -0
  10. package/dist/context/request-context.storage.js +37 -0
  11. package/dist/contracts/auth-service/account.dto.d.ts +30 -0
  12. package/dist/contracts/auth-service/account.dto.js +7 -0
  13. package/dist/contracts/auth-service/auth.dto.d.ts +21 -0
  14. package/dist/contracts/auth-service/auth.dto.js +10 -0
  15. package/dist/contracts/index.d.ts +1 -0
  16. package/dist/{security → contracts}/index.js +1 -1
  17. package/dist/contracts/visibility.d.ts +63 -0
  18. package/dist/contracts/visibility.js +10 -0
  19. package/dist/dtos/audit-service.types.d.ts +42 -0
  20. package/dist/dtos/audit-service.types.js +31 -0
  21. package/dist/dtos/auth-service.dto.d.ts +87 -26
  22. package/dist/dtos/auth-service.dto.js +4 -0
  23. package/dist/dtos/cloud-service.dto.d.ts +57 -27
  24. package/dist/dtos/cloud-service.dto.js +5 -0
  25. package/dist/dtos/index.d.ts +6 -5
  26. package/dist/dtos/index.js +1 -0
  27. package/dist/dtos/insights-service.dto.d.ts +184 -32
  28. package/dist/dtos/insights-service.dto.js +8 -0
  29. package/dist/dtos/response.dto.d.ts +12 -83
  30. package/dist/dtos/response.dto.js +2 -21
  31. package/dist/dtos/user-service.dto.d.ts +163 -13
  32. package/dist/enums/domain.enums.d.ts +272 -75
  33. package/dist/enums/domain.enums.js +329 -102
  34. package/dist/enums/index.d.ts +2 -2
  35. package/dist/enums/permissions.enums.d.ts +142 -80
  36. package/dist/enums/permissions.enums.js +174 -133
  37. package/dist/errors/app-error.d.ts +13 -18
  38. package/dist/errors/app-error.js +15 -21
  39. package/dist/errors/http-errors.d.ts +106 -18
  40. package/dist/errors/http-errors.js +136 -51
  41. package/dist/errors/index.d.ts +2 -2
  42. package/dist/http/index.d.ts +2 -1
  43. package/dist/http/index.js +1 -0
  44. package/dist/http/request-context.d.ts +8 -0
  45. package/dist/http/request-context.js +37 -0
  46. package/dist/http/service-client.d.ts +93 -40
  47. package/dist/http/service-client.js +104 -55
  48. package/dist/index.d.ts +11 -9
  49. package/dist/index.js +2 -0
  50. package/dist/jwt/index.d.ts +3 -2
  51. package/dist/jwt/index.js +2 -1
  52. package/dist/jwt/machine-jwt-verifier.d.ts +21 -0
  53. package/dist/jwt/machine-jwt-verifier.js +83 -0
  54. package/dist/jwt/machine-token-client.d.ts +36 -5
  55. package/dist/jwt/machine-token-client.js +61 -27
  56. package/dist/jwt/user-jwt-verifier.d.ts +31 -0
  57. package/dist/jwt/user-jwt-verifier.js +102 -0
  58. package/dist/messaging/audit.publisher.d.ts +14 -0
  59. package/dist/messaging/audit.publisher.js +49 -0
  60. package/dist/messaging/index.d.ts +2 -0
  61. package/dist/{dto → messaging}/index.js +2 -3
  62. package/dist/messaging/rabbitmq.client.d.ts +15 -0
  63. package/dist/messaging/rabbitmq.client.js +133 -0
  64. package/dist/middleware/error-handler.middleware.d.ts +8 -28
  65. package/dist/middleware/error-handler.middleware.js +63 -54
  66. package/dist/middleware/index.d.ts +10 -8
  67. package/dist/middleware/index.js +7 -5
  68. package/dist/middleware/request-context.middleware.d.ts +6 -0
  69. package/dist/middleware/request-context.middleware.js +48 -0
  70. package/dist/middleware/require-auth.middleware.d.ts +7 -76
  71. package/dist/middleware/require-auth.middleware.js +29 -117
  72. package/dist/middleware/require-machine.middleware.d.ts +13 -0
  73. package/dist/middleware/require-machine.middleware.js +128 -0
  74. package/dist/middleware/require-org-permission-from-body.middleware.d.ts +10 -0
  75. package/dist/middleware/require-org-permission-from-body.middleware.js +23 -0
  76. package/dist/middleware/require-org-permission.middleware.d.ts +19 -0
  77. package/dist/middleware/require-org-permission.middleware.js +115 -0
  78. package/dist/middleware/require-platform-permission.middleware.d.ts +19 -0
  79. package/dist/middleware/require-platform-permission.middleware.js +91 -0
  80. package/dist/middleware/require-user.middleware.d.ts +14 -0
  81. package/dist/middleware/require-user.middleware.js +30 -0
  82. package/dist/middleware/require-workspace-permission.middleware.d.ts +20 -0
  83. package/dist/middleware/require-workspace-permission.middleware.js +114 -0
  84. package/dist/middleware/validate.middleware.d.ts +31 -31
  85. package/dist/middleware/validate.middleware.js +31 -33
  86. package/dist/types/audit.types.d.ts +39 -0
  87. package/dist/types/audit.types.js +30 -0
  88. package/dist/types/express.types.d.ts +92 -124
  89. package/dist/types/express.types.js +30 -49
  90. package/dist/types/index.d.ts +1 -1
  91. package/dist/utils/date.util.d.ts +6 -0
  92. package/dist/utils/date.util.js +11 -0
  93. package/dist/utils/env.util.d.ts +6 -0
  94. package/dist/utils/env.util.js +19 -0
  95. package/dist/utils/index.d.ts +5 -4
  96. package/dist/utils/index.js +5 -4
  97. package/dist/utils/logger.util.d.ts +31 -0
  98. package/dist/utils/logger.util.js +91 -0
  99. package/dist/utils/pagination.util.d.ts +6 -0
  100. package/dist/utils/pagination.util.js +20 -0
  101. package/dist/utils/request-context.als.d.ts +10 -0
  102. package/dist/utils/request-context.als.js +5 -0
  103. package/dist/utils/response.util.d.ts +27 -0
  104. package/dist/utils/response.util.js +56 -0
  105. package/dist/utils/slug.util.d.ts +9 -0
  106. package/dist/utils/slug.util.js +32 -0
  107. package/dist/utils/url-safety.util.d.ts +6 -0
  108. package/dist/utils/url-safety.util.js +75 -0
  109. package/package.json +3 -1
  110. package/dist/authorization/permissions.d.ts +0 -78
  111. package/dist/authorization/permissions.js +0 -174
  112. package/dist/context/access-context.d.ts +0 -10
  113. package/dist/context/access-context.js +0 -2
  114. package/dist/dto/auth-service.dtos.d.ts +0 -44
  115. package/dist/dto/auth-service.dtos.js +0 -2
  116. package/dist/dto/index.d.ts +0 -3
  117. package/dist/dto/response.dtos.d.ts +0 -55
  118. package/dist/dto/response.dtos.js +0 -6
  119. package/dist/dto/user-service.dtos.d.ts +0 -50
  120. package/dist/dto/user-service.dtos.js +0 -2
  121. package/dist/enums/auth-service.enums.d.ts +0 -12
  122. package/dist/enums/auth-service.enums.js +0 -17
  123. package/dist/enums/permissions.types.d.ts +0 -12
  124. package/dist/enums/permissions.types.js +0 -17
  125. package/dist/enums/user-service.enums.d.ts +0 -32
  126. package/dist/enums/user-service.enums.js +0 -41
  127. package/dist/internal/index.d.ts +0 -4
  128. package/dist/internal/index.js +0 -20
  129. package/dist/internal/internal-jwt.service.d.ts +0 -13
  130. package/dist/internal/internal-jwt.service.js +0 -88
  131. package/dist/internal/internal-jwt.types.d.ts +0 -7
  132. package/dist/internal/internal-jwt.types.js +0 -2
  133. package/dist/internal/internal-key-manager.d.ts +0 -16
  134. package/dist/internal/internal-key-manager.js +0 -67
  135. package/dist/internal/registry.d.ts +0 -8
  136. package/dist/internal/registry.js +0 -34
  137. package/dist/internal/service-client.d.ts +0 -9
  138. package/dist/internal/service-client.js +0 -94
  139. package/dist/jwt/internal-jwt-verifier.d.ts +0 -41
  140. package/dist/jwt/internal-jwt-verifier.js +0 -185
  141. package/dist/jwt/jwt-verifier.d.ts +0 -9
  142. package/dist/jwt/jwt-verifier.js +0 -36
  143. package/dist/jwt/service-client.d.ts +0 -7
  144. package/dist/jwt/service-client.js +0 -87
  145. package/dist/middleware/authorize.d.ts +0 -3
  146. package/dist/middleware/authorize.js +0 -24
  147. package/dist/middleware/authorize.middleware.d.ts +0 -54
  148. package/dist/middleware/authorize.middleware.js +0 -104
  149. package/dist/middleware/error-handler.d.ts +0 -4
  150. package/dist/middleware/error-handler.js +0 -23
  151. package/dist/middleware/request-id.d.ts +0 -2
  152. package/dist/middleware/request-id.js +0 -9
  153. package/dist/middleware/request-id.middleware.d.ts +0 -22
  154. package/dist/middleware/request-id.middleware.js +0 -34
  155. package/dist/middleware/require-auth.d.ts +0 -10
  156. package/dist/middleware/require-auth.js +0 -34
  157. package/dist/middleware/require-human.middleware.d.ts +0 -2
  158. package/dist/middleware/require-human.middleware.js +0 -18
  159. package/dist/middleware/require-internal.middleware.d.ts +0 -18
  160. package/dist/middleware/require-internal.middleware.js +0 -183
  161. package/dist/middleware/validate.d.ts +0 -5
  162. package/dist/middleware/validate.js +0 -18
  163. package/dist/middleware/validated-merge.middleware.d.ts +0 -20
  164. package/dist/middleware/validated-merge.middleware.js +0 -33
  165. package/dist/middleware/verify-internal-jwt.d.ts +0 -7
  166. package/dist/middleware/verify-internal-jwt.js +0 -25
  167. package/dist/security/guard.d.ts +0 -10
  168. package/dist/security/guard.js +0 -40
  169. package/dist/security/index.d.ts +0 -1
  170. package/dist/types/express.d.ts +0 -22
  171. package/dist/types/express.js +0 -3
  172. package/dist/utils/date.utils.d.ts +0 -25
  173. package/dist/utils/date.utils.js +0 -30
  174. package/dist/utils/env.d.ts +0 -46
  175. package/dist/utils/env.js +0 -61
  176. package/dist/utils/env.utils.d.ts +0 -46
  177. package/dist/utils/env.utils.js +0 -61
  178. package/dist/utils/logger.utils.d.ts +0 -66
  179. package/dist/utils/logger.utils.js +0 -97
  180. package/dist/utils/response.d.ts +0 -4
  181. package/dist/utils/response.js +0 -35
  182. package/dist/utils/response.utils.d.ts +0 -54
  183. package/dist/utils/response.utils.js +0 -85
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AccountRole = exports.AccountStatus = void 0;
4
- var AccountStatus;
5
- (function (AccountStatus) {
6
- AccountStatus["ACTIVE"] = "ACTIVE";
7
- AccountStatus["SUSPENDED"] = "SUSPENDED";
8
- AccountStatus["DELETED"] = "DELETED";
9
- })(AccountStatus || (exports.AccountStatus = AccountStatus = {}));
10
- var AccountRole;
11
- (function (AccountRole) {
12
- AccountRole["SUPERADMIN"] = "SUPERADMIN";
13
- AccountRole["ADMIN"] = "ADMIN";
14
- AccountRole["SUPPORT"] = "SUPPORT";
15
- AccountRole["MODERATOR"] = "MODERATOR";
16
- AccountRole["USER"] = "USER";
17
- })(AccountRole || (exports.AccountRole = AccountRole = {}));
@@ -1,12 +0,0 @@
1
- export declare enum GlobalPermission {
2
- MANAGE_SYSTEM = "manage_system",
3
- MANAGE_ALL_ORGS = "manage_all_orgs",
4
- MANAGE_USERS = "manage_users",
5
- VIEW_SYSTEM_LOGS = "view_system_logs",
6
- SUPPORT_ACTIONS = "support_actions",
7
- MODERATE_CONTENT = "moderate_content"
8
- }
9
- export declare enum OrgPermission {
10
- MANAGE_ORG = "manage_org",
11
- MANAGE_MEMBERS = "manage_members"
12
- }
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OrgPermission = exports.GlobalPermission = void 0;
4
- var GlobalPermission;
5
- (function (GlobalPermission) {
6
- GlobalPermission["MANAGE_SYSTEM"] = "manage_system";
7
- GlobalPermission["MANAGE_ALL_ORGS"] = "manage_all_orgs";
8
- GlobalPermission["MANAGE_USERS"] = "manage_users";
9
- GlobalPermission["VIEW_SYSTEM_LOGS"] = "view_system_logs";
10
- GlobalPermission["SUPPORT_ACTIONS"] = "support_actions";
11
- GlobalPermission["MODERATE_CONTENT"] = "moderate_content";
12
- })(GlobalPermission || (exports.GlobalPermission = GlobalPermission = {}));
13
- var OrgPermission;
14
- (function (OrgPermission) {
15
- OrgPermission["MANAGE_ORG"] = "manage_org";
16
- OrgPermission["MANAGE_MEMBERS"] = "manage_members";
17
- })(OrgPermission || (exports.OrgPermission = OrgPermission = {}));
@@ -1,32 +0,0 @@
1
- export declare enum OrganizationRole {
2
- OWNER = "OWNER",
3
- ADMIN = "ADMIN",
4
- EDITOR = "EDITOR",
5
- VIEWER = "VIEWER"
6
- }
7
- export declare enum UserStatus {
8
- ACTIVE = "ACTIVE",
9
- SUSPENDED = "SUSPENDED",
10
- DELETED = "DELETED"
11
- }
12
- export declare enum OrganizationStatus {
13
- ACTIVE = "ACTIVE",
14
- SUSPENDED = "SUSPENDED",
15
- CLOSED = "CLOSED"
16
- }
17
- export declare enum MembershipStatus {
18
- ACTIVE = "ACTIVE",
19
- INVITED = "INVITED",
20
- SUSPENDED = "SUSPENDED"
21
- }
22
- export declare enum Theme {
23
- LIGHT = "LIGHT",
24
- DARK = "DARK",
25
- SYSTEM = "SYSTEM"
26
- }
27
- export declare enum Currency {
28
- USD = "USD",
29
- EUR = "EUR",
30
- GBP = "GBP",
31
- INR = "INR"
32
- }
@@ -1,41 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Currency = exports.Theme = exports.MembershipStatus = exports.OrganizationStatus = exports.UserStatus = exports.OrganizationRole = void 0;
4
- var OrganizationRole;
5
- (function (OrganizationRole) {
6
- OrganizationRole["OWNER"] = "OWNER";
7
- OrganizationRole["ADMIN"] = "ADMIN";
8
- OrganizationRole["EDITOR"] = "EDITOR";
9
- OrganizationRole["VIEWER"] = "VIEWER";
10
- })(OrganizationRole || (exports.OrganizationRole = OrganizationRole = {}));
11
- var UserStatus;
12
- (function (UserStatus) {
13
- UserStatus["ACTIVE"] = "ACTIVE";
14
- UserStatus["SUSPENDED"] = "SUSPENDED";
15
- UserStatus["DELETED"] = "DELETED";
16
- })(UserStatus || (exports.UserStatus = UserStatus = {}));
17
- var OrganizationStatus;
18
- (function (OrganizationStatus) {
19
- OrganizationStatus["ACTIVE"] = "ACTIVE";
20
- OrganizationStatus["SUSPENDED"] = "SUSPENDED";
21
- OrganizationStatus["CLOSED"] = "CLOSED";
22
- })(OrganizationStatus || (exports.OrganizationStatus = OrganizationStatus = {}));
23
- var MembershipStatus;
24
- (function (MembershipStatus) {
25
- MembershipStatus["ACTIVE"] = "ACTIVE";
26
- MembershipStatus["INVITED"] = "INVITED";
27
- MembershipStatus["SUSPENDED"] = "SUSPENDED";
28
- })(MembershipStatus || (exports.MembershipStatus = MembershipStatus = {}));
29
- var Theme;
30
- (function (Theme) {
31
- Theme["LIGHT"] = "LIGHT";
32
- Theme["DARK"] = "DARK";
33
- Theme["SYSTEM"] = "SYSTEM";
34
- })(Theme || (exports.Theme = Theme = {}));
35
- var Currency;
36
- (function (Currency) {
37
- Currency["USD"] = "USD";
38
- Currency["EUR"] = "EUR";
39
- Currency["GBP"] = "GBP";
40
- Currency["INR"] = "INR";
41
- })(Currency || (exports.Currency = Currency = {}));
@@ -1,4 +0,0 @@
1
- export * from "./internal-jwt.service";
2
- export * from "./registry";
3
- export * from "./internal-jwt.types";
4
- export * from "./internal-key-manager";
@@ -1,20 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./internal-jwt.service"), exports);
18
- __exportStar(require("./registry"), exports);
19
- __exportStar(require("./internal-jwt.types"), exports);
20
- __exportStar(require("./internal-key-manager"), exports);
@@ -1,13 +0,0 @@
1
- import { InternalKeyManager } from "./internal-key-manager";
2
- import { InternalJwtPayload } from "./internal-jwt.types";
3
- export declare class InternalJwtService {
4
- private readonly keyManager;
5
- private readonly serviceName;
6
- private jwksCache;
7
- constructor(keyManager: InternalKeyManager);
8
- sign(payload: {
9
- requestId: string;
10
- }, targetService: string): Promise<string>;
11
- verify(token: string): Promise<InternalJwtPayload>;
12
- private getRemoteJWKS;
13
- }
@@ -1,88 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.InternalJwtService = void 0;
37
- const jose = __importStar(require("jose"));
38
- class InternalJwtService {
39
- constructor(keyManager) {
40
- this.keyManager = keyManager;
41
- this.jwksCache = new Map();
42
- this.serviceName = process.env.SERVICE_NAME || "unknown-service";
43
- }
44
- async sign(payload, targetService) {
45
- const signer = this.keyManager.getPrivateKey();
46
- const kid = this.keyManager.getKid();
47
- return new jose.SignJWT({
48
- ...payload,
49
- typ: "internal"
50
- })
51
- .setProtectedHeader({ alg: "RS256", kid })
52
- .setIssuer(this.serviceName)
53
- .setAudience(targetService)
54
- .setIssuedAt()
55
- .setExpirationTime("1m")
56
- .sign(signer);
57
- }
58
- async verify(token) {
59
- const unverified = jose.decodeJwt(token);
60
- if (!unverified.iss)
61
- throw new Error("Missing issuer");
62
- if (unverified.typ !== "internal")
63
- throw new Error("Invalid token type");
64
- const jwks = this.getRemoteJWKS(unverified.iss);
65
- const { payload } = await jose.jwtVerify(token, jwks, {
66
- algorithms: ["RS256"],
67
- audience: this.serviceName,
68
- issuer: unverified.iss
69
- });
70
- return payload;
71
- }
72
- getRemoteJWKS(issuer) {
73
- const envKey = `${issuer.replace(/-/g, "_").toUpperCase()}_URL`;
74
- const baseUrl = process.env[envKey];
75
- const url = baseUrl
76
- ? `${baseUrl}/internal/jwks`
77
- : `http://${issuer}/internal/jwks`;
78
- if (!this.jwksCache.has(url)) {
79
- console.log(`[InternalJwt] Caching JWKS for ${issuer} at ${url}`);
80
- this.jwksCache.set(url, jose.createRemoteJWKSet(new URL(url), {
81
- cacheMaxAge: 600000,
82
- cooldownDuration: 30000
83
- }));
84
- }
85
- return this.jwksCache.get(url);
86
- }
87
- }
88
- exports.InternalJwtService = InternalJwtService;
@@ -1,7 +0,0 @@
1
- import { JWTPayload } from "jose";
2
- export interface InternalJwtPayload extends JWTPayload {
3
- iss: string;
4
- aud: string;
5
- typ: "internal";
6
- requestId: string;
7
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,16 +0,0 @@
1
- import { JWK } from "jose";
2
- import { KeyObject } from "crypto";
3
- export declare class InternalKeyManager {
4
- private privateKey;
5
- private publicKey;
6
- private jwks;
7
- private readonly serviceName;
8
- private readonly keyPath;
9
- constructor();
10
- private init;
11
- getPrivateKey(): CryptoKey | KeyObject;
12
- getPublicJwks(): {
13
- keys: JWK[];
14
- };
15
- getKid(): string;
16
- }
@@ -1,67 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.InternalKeyManager = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
9
- const jose_1 = require("jose");
10
- class InternalKeyManager {
11
- constructor() {
12
- this.jwks = [];
13
- this.serviceName = process.env.SERVICE_NAME || "unknown-service";
14
- this.keyPath = (() => {
15
- const envPath = process.env.INTERNAL_KEYS_PATH;
16
- if (!envPath) {
17
- console.warn("[InternalKeyManager] INTERNAL_KEYS_PATH not set. Using default: src/keys/internal");
18
- return path_1.default.join(process.cwd(), "src/keys/internal");
19
- }
20
- return path_1.default.isAbsolute(envPath) ? envPath : path_1.default.join(process.cwd(), envPath);
21
- })();
22
- this.init();
23
- }
24
- async init() {
25
- try {
26
- if (!fs_1.default.existsSync(this.keyPath)) {
27
- console.error(`[InternalKeyManager] Missing keys directory: ${this.keyPath}`);
28
- return;
29
- }
30
- const privPath = path_1.default.join(this.keyPath, "/private/private.pem");
31
- if (fs_1.default.existsSync(privPath)) {
32
- const privPem = fs_1.default.readFileSync(privPath, "utf8");
33
- this.privateKey = await (0, jose_1.importPKCS8)(privPem, "RS256");
34
- }
35
- const pubPath = path_1.default.join(this.keyPath, "/public/public.pem");
36
- if (fs_1.default.existsSync(pubPath)) {
37
- const pubPem = fs_1.default.readFileSync(pubPath, "utf8");
38
- this.publicKey = await (0, jose_1.importSPKI)(pubPem, "RS256");
39
- const jwk = await (0, jose_1.exportJWK)(this.publicKey);
40
- this.jwks = [{
41
- ...jwk,
42
- kid: `${this.serviceName}-internal`,
43
- use: "sig",
44
- alg: "RS256"
45
- }];
46
- }
47
- console.log(`[InternalKeyManager] Loaded keys for: ${this.serviceName}`);
48
- }
49
- catch (error) {
50
- console.error("[InternalKeyManager] Failed to load keys.", error);
51
- if (process.env.NODE_ENV === "production")
52
- process.exit(1);
53
- }
54
- }
55
- getPrivateKey() {
56
- if (!this.privateKey)
57
- throw new Error("Private key not loaded");
58
- return this.privateKey;
59
- }
60
- getPublicJwks() {
61
- return { keys: this.jwks };
62
- }
63
- getKid() {
64
- return `${this.serviceName}-internal`;
65
- }
66
- }
67
- exports.InternalKeyManager = InternalKeyManager;
@@ -1,8 +0,0 @@
1
- export declare const SERVICE_REGISTRY: {
2
- readonly auth: "auth-service";
3
- readonly user: "user-service";
4
- readonly billing: "billing-service";
5
- readonly notifications: "notification-service";
6
- };
7
- export type ServiceName = typeof SERVICE_REGISTRY[keyof typeof SERVICE_REGISTRY];
8
- export declare const extractServiceName: (url?: string) => ServiceName | null;
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractServiceName = exports.SERVICE_REGISTRY = void 0;
4
- exports.SERVICE_REGISTRY = {
5
- auth: "auth-service",
6
- user: "user-service",
7
- billing: "billing-service",
8
- notifications: "notification-service"
9
- };
10
- const extractServiceName = (url) => {
11
- if (!url)
12
- return null;
13
- try {
14
- const u = new URL(url);
15
- // If localhost, infer by port
16
- switch (u.port) {
17
- case "3001": return "auth-service";
18
- case "3002": return "user-service";
19
- case "3003": return "billing-service";
20
- case "3004": return "notification-service";
21
- default: break;
22
- }
23
- // Docker/K8s case: hostname is service name
24
- const host = u.hostname.split(".")[0];
25
- if (Object.values(exports.SERVICE_REGISTRY).includes(host)) {
26
- return host;
27
- }
28
- return null;
29
- }
30
- catch {
31
- return null;
32
- }
33
- };
34
- exports.extractServiceName = extractServiceName;
@@ -1,9 +0,0 @@
1
- import { AxiosInstance } from "axios";
2
- import { InternalJwtService } from "./internal-jwt.service";
3
- export declare class ServiceClient {
4
- private readonly internalJwt;
5
- readonly http: AxiosInstance;
6
- constructor(internalJwt: InternalJwtService);
7
- private setupRetry;
8
- private setupInterceptors;
9
- }
@@ -1,94 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.ServiceClient = void 0;
40
- const axios_1 = __importStar(require("axios"));
41
- const axios_retry_1 = __importDefault(require("axios-retry"));
42
- const registry_1 = require("./registry");
43
- class ServiceClient {
44
- constructor(internalJwt) {
45
- this.internalJwt = internalJwt;
46
- this.http = axios_1.default.create({
47
- timeout: 8000,
48
- validateStatus: () => true
49
- });
50
- this.setupRetry();
51
- this.setupInterceptors();
52
- }
53
- setupRetry() {
54
- (0, axios_retry_1.default)(this.http, {
55
- retries: 3,
56
- retryDelay: axios_retry_1.default.exponentialDelay,
57
- retryCondition: (err) => {
58
- if (axios_retry_1.default.isNetworkError(err))
59
- return true;
60
- return (err.response?.status ?? 0) >= 500;
61
- }
62
- });
63
- }
64
- setupInterceptors() {
65
- this.http.interceptors.request.use(async (config) => {
66
- if (!config.headers)
67
- config.headers = new axios_1.AxiosHeaders();
68
- const reqId = config.headers["x-request-id"] ||
69
- `req_${Math.random().toString(36).slice(2)}`;
70
- config.headers["x-request-id"] = reqId;
71
- const fullUrl = config.url?.startsWith("http")
72
- ? config.url
73
- : config.baseURL;
74
- if (!fullUrl)
75
- throw new Error("Missing baseURL or absolute URL for internal service request");
76
- const target = (0, registry_1.extractServiceName)(fullUrl);
77
- if (!target)
78
- throw new Error(`Cannot extract serviceName from ${fullUrl}`);
79
- const token = await this.internalJwt.sign({ requestId: reqId }, target);
80
- config.headers["x-internal-jwt"] = token;
81
- return config;
82
- });
83
- this.http.interceptors.response.use((res) => {
84
- if (res.status >= 200 && res.status < 300)
85
- return res;
86
- throw {
87
- status: res.status,
88
- message: res.data?.error?.message ?? "Service Error",
89
- details: res.data
90
- };
91
- });
92
- }
93
- }
94
- exports.ServiceClient = ServiceClient;
@@ -1,41 +0,0 @@
1
- import { AccountRole, GlobalPermission } from "../enums";
2
- import { InternalJwtPayload, AccessContext } from "../types";
3
- import { PermissionCacheService } from "../authorization";
4
- export declare class InternalJwtVerifier {
5
- private readonly permissionCache;
6
- private readonly jwks;
7
- private readonly issuer;
8
- private readonly audience;
9
- constructor(permissionCache: PermissionCacheService);
10
- verifyInternal(token: string): Promise<InternalJwtPayload>;
11
- buildAccessContext(token: string): Promise<{
12
- payload: InternalJwtPayload;
13
- context: AccessContext;
14
- }>;
15
- /**
16
- * hasPermission
17
- * Returns true if the context carries the given GlobalPermission.
18
- * Machine contexts always return false — they carry no user permissions.
19
- */
20
- static hasPermission(ctx: AccessContext, permission: GlobalPermission): boolean;
21
- /**
22
- * requirePermission
23
- * Throws JWTClaimValidationFailed if the permission is absent.
24
- * Use in middleware for a one-liner gate:
25
- * InternalJwtVerifier.requirePermission(ctx, GlobalPermission.MANAGE_ACCOUNTS);
26
- */
27
- static requirePermission(ctx: AccessContext, permission: GlobalPermission): void;
28
- /**
29
- * hasRole
30
- * Returns true if the context carries the given AccountRole.
31
- * Machine contexts always return false.
32
- */
33
- static hasRole(ctx: AccessContext, role: AccountRole): boolean;
34
- /**
35
- * requireRole
36
- * Throws JWTClaimValidationFailed if the role doesn't match.
37
- * Prefer requirePermission() for most gates — role checks are for the rare
38
- * cases where a specific role (not just a permission) must be enforced.
39
- */
40
- static requireRole(ctx: AccessContext, role: AccountRole): void;
41
- }