@1mcp/agent 0.10.1 → 0.11.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 (70) hide show
  1. package/README.md +14 -0
  2. package/build/clients/clientManager.d.ts +3 -2
  3. package/build/clients/clientManager.d.ts.map +1 -1
  4. package/build/clients/clientManager.js +10 -2
  5. package/build/clients/clientManager.js.map +1 -1
  6. package/build/constants.d.ts +25 -1
  7. package/build/constants.d.ts.map +1 -1
  8. package/build/constants.js +31 -2
  9. package/build/constants.js.map +1 -1
  10. package/build/handlers/notificationHandlers.d.ts.map +1 -1
  11. package/build/handlers/notificationHandlers.js +41 -14
  12. package/build/handlers/notificationHandlers.js.map +1 -1
  13. package/build/handlers/requestHandlers.d.ts.map +1 -1
  14. package/build/handlers/requestHandlers.js +43 -1
  15. package/build/handlers/requestHandlers.js.map +1 -1
  16. package/build/index.d.ts +1 -1
  17. package/build/index.d.ts.map +1 -1
  18. package/build/index.js +43 -4
  19. package/build/index.js.map +1 -1
  20. package/build/middleware/loggingMiddleware.d.ts.map +1 -1
  21. package/build/middleware/loggingMiddleware.js +10 -6
  22. package/build/middleware/loggingMiddleware.js.map +1 -1
  23. package/build/server/auth/authManager.d.ts +109 -0
  24. package/build/server/auth/authManager.d.ts.map +1 -0
  25. package/build/server/auth/authManager.js +173 -0
  26. package/build/server/auth/authManager.js.map +1 -0
  27. package/build/server/auth/authMiddleware.d.ts +16 -0
  28. package/build/server/auth/authMiddleware.d.ts.map +1 -0
  29. package/build/server/auth/authMiddleware.js +45 -0
  30. package/build/server/auth/authMiddleware.js.map +1 -0
  31. package/build/server/auth/sessionManager.d.ts +196 -0
  32. package/build/server/auth/sessionManager.d.ts.map +1 -0
  33. package/build/server/auth/sessionManager.js +376 -0
  34. package/build/server/auth/sessionManager.js.map +1 -0
  35. package/build/server/config/serverConfig.d.ts +100 -0
  36. package/build/server/config/serverConfig.d.ts.map +1 -0
  37. package/build/server/config/serverConfig.js +117 -0
  38. package/build/server/config/serverConfig.js.map +1 -0
  39. package/build/server/expressServer.d.ts +60 -2
  40. package/build/server/expressServer.d.ts.map +1 -1
  41. package/build/server/expressServer.js +91 -153
  42. package/build/server/expressServer.js.map +1 -1
  43. package/build/server/routes/oauthRoutes.d.ts +14 -0
  44. package/build/server/routes/oauthRoutes.d.ts.map +1 -0
  45. package/build/server/routes/oauthRoutes.js +132 -0
  46. package/build/server/routes/oauthRoutes.js.map +1 -0
  47. package/build/server/routes/sseRoutes.d.ts +4 -0
  48. package/build/server/routes/sseRoutes.d.ts.map +1 -0
  49. package/build/server/routes/sseRoutes.js +64 -0
  50. package/build/server/routes/sseRoutes.js.map +1 -0
  51. package/build/server/routes/streamableHttpRoutes.d.ts +4 -0
  52. package/build/server/routes/streamableHttpRoutes.d.ts.map +1 -0
  53. package/build/server/routes/streamableHttpRoutes.js +94 -0
  54. package/build/server/routes/streamableHttpRoutes.js.map +1 -0
  55. package/build/server.js +1 -1
  56. package/build/server.js.map +1 -1
  57. package/build/serverManager.d.ts +3 -1
  58. package/build/serverManager.d.ts.map +1 -1
  59. package/build/serverManager.js +8 -1
  60. package/build/serverManager.js.map +1 -1
  61. package/build/services/configReloadService.d.ts.map +1 -1
  62. package/build/services/configReloadService.js +4 -0
  63. package/build/services/configReloadService.js.map +1 -1
  64. package/build/types.d.ts +2 -1
  65. package/build/types.d.ts.map +1 -1
  66. package/build/utils/errorTypes.d.ts +4 -1
  67. package/build/utils/errorTypes.d.ts.map +1 -1
  68. package/build/utils/errorTypes.js +9 -1
  69. package/build/utils/errorTypes.js.map +1 -1
  70. package/package.json +9 -5
@@ -1 +1 @@
1
- {"version":3,"file":"loggingMiddleware.js","sourceRoot":"","sources":["../../src/middleware/loggingMiddleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,MAAM,MAAM,qBAAqB,CAAC;AA2BzC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAsB,CAAC;AAErD;;GAEG;AACH,SAAS,UAAU,CAAC,SAAiB,EAAE,MAAc,EAAE,MAAe;IACpE,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;QACzB,SAAS;QACT,MAAM;QACN,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC9B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,SAAiB,EAAE,MAAe,EAAE,QAAgB;IACvE,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;QAC1B,SAAS;QACT,QAAQ;QACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,SAAiB,EAAE,KAAc,EAAE,QAAgB;IACnE,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;QACxB,SAAS;QACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACrE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACvD,QAAQ;QACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAc,EAAE,MAAe;IACtD,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;QAC9B,MAAM;QACN,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC9B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,eAAkC,EAClC,MAAc;IAEd,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,wBAAwB;QACxB,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE;YAC5B,SAAS;YACT,MAAM;YACN,SAAS;SACV,CAAC,CAAC;QAEH,cAAc;QACd,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,0DAA0D;YAC1D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE;gBAC5C,GAAG,KAAK;gBACR,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;oBACvC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;oBACjE,OAAO,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;gBAC9C,CAAC;gBACD,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;oBACpD,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;oBACvD,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;gBAC3D,CAAC;aACF,CAAC,CAAC;YAEH,eAAe;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAEzC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YACrC,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,2BAA2B;YAC3B,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAC9B,eAAuC,EACvC,MAAc;IAEd,OAAO,KAAK,EAAE,YAAY,EAAE,EAAE;QAC5B,mBAAmB;QACnB,eAAe,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAE7C,2BAA2B;QAC3B,MAAM,eAAe,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,yBAAyB;IACzB,MAAM,yBAAyB,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,8BAA8B,GAAG,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClF,MAAM,oBAAoB,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE9D,wCAAwC;IACxC,MAAM,CAAC,iBAAiB,GAAG,CAA0B,MAAS,EAAE,OAA0B,EAAE,EAAE;QAC5F,OAAO,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/G,CAAC,CAAC;IAEF,6CAA6C;IAC7C,MAAM,CAAC,sBAAsB,GAAG,CAA+B,MAAS,EAAE,OAA+B,EAAE,EAAE;QAC3G,OAAO,8BAA8B,CACnC,MAAM,EACN,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CACxE,CAAC;IACJ,CAAC,CAAC;IAEF,gCAAgC;IAChC,MAAM,CAAC,YAAY,GAAG,CAAC,YAGtB,EAAE,EAAE;QACH,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1D,0CAA0C;QAC1C,MAAM,SAAS,GAAI,MAAc,CAAC,SAAS,CAAC;QAC5C,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,UAAU,IAAI,cAAc,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YAChH,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;YAC5E,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"loggingMiddleware.js","sourceRoot":"","sources":["../../src/middleware/loggingMiddleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import { SessionData } from './sessionManager.js';
2
+ /**
3
+ * AuthManager handles OAuth 2.1 authentication flow and token validation.
4
+ *
5
+ * This class orchestrates the OAuth 2.1 authorization code grant flow,
6
+ * manages access token validation, and provides session information.
7
+ * It integrates with SessionManager for persistent storage and
8
+ * ServerConfigManager for configuration settings.
9
+ *
10
+ * Features:
11
+ * - OAuth 2.1 authorization code grant flow
12
+ * - Access token validation with prefix support
13
+ * - Session information retrieval
14
+ * - Configurable authentication settings
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const authManager = new AuthManager('/custom/sessions');
19
+ * const token = authManager.exchangeCodeForToken('code-123', 'client-456');
20
+ * const session = authManager.validateAccessToken('tk-sess-789');
21
+ * ```
22
+ */
23
+ export declare class AuthManager {
24
+ private sessionManager;
25
+ private configManager;
26
+ /**
27
+ * Creates a new AuthManager instance.
28
+ *
29
+ * Initializes the session manager with optional custom storage path
30
+ * and retrieves the server configuration manager instance.
31
+ *
32
+ * @param sessionStoragePath - Optional custom path for session storage
33
+ */
34
+ constructor(sessionStoragePath?: string);
35
+ /**
36
+ * Checks if authentication is currently enabled.
37
+ *
38
+ * @returns True if OAuth 2.1 authentication is enabled, false otherwise
39
+ */
40
+ isAuthEnabled(): boolean;
41
+ /**
42
+ * Validates an access token and returns session data.
43
+ *
44
+ * If authentication is disabled, returns null (always valid).
45
+ * For enabled authentication, strips the token prefix if present
46
+ * and validates the underlying session.
47
+ *
48
+ * @param token - The access token to validate (with or without prefix)
49
+ * @returns Session data if token is valid, null otherwise
50
+ */
51
+ validateAccessToken(token: string): SessionData | null;
52
+ /**
53
+ * Creates an authorization code for OAuth 2.1 flow.
54
+ *
55
+ * Delegates to the session manager to create a prefixed authorization
56
+ * code with the configured time-to-live.
57
+ *
58
+ * @param clientId - The client identifier
59
+ * @param redirectUri - The redirect URI for this code
60
+ * @param resource - The resource this code grants access to
61
+ * @returns The generated authorization code with prefix
62
+ */
63
+ createAuthCode(clientId: string, redirectUri: string, resource: string): string;
64
+ /**
65
+ * Exchanges an authorization code for an access token.
66
+ *
67
+ * Validates the authorization code, checks client ID and redirect URI
68
+ * matches, then creates a new access token with the configured TTL.
69
+ * The authorization code is deleted after successful exchange.
70
+ *
71
+ * @param code - The authorization code to exchange
72
+ * @param clientId - The client identifier
73
+ * @param redirectUri - Optional redirect URI for validation
74
+ * @param resource - Optional resource for validation
75
+ * @returns Access token with prefix if exchange successful, null otherwise
76
+ */
77
+ exchangeCodeForToken(code: string, clientId: string, redirectUri?: string, resource?: string): string | null;
78
+ /**
79
+ * Gets information about an access token.
80
+ *
81
+ * Retrieves session data for the token and returns formatted
82
+ * information including client ID, resource, and time until expiration.
83
+ *
84
+ * @param token - The access token to get information for
85
+ * @returns Token information if valid, null otherwise
86
+ */
87
+ getTokenInfo(token: string): {
88
+ clientId: string;
89
+ resource: string;
90
+ expiresIn: number;
91
+ } | null;
92
+ /**
93
+ * Revokes an access token.
94
+ *
95
+ * Removes the session associated with the token from storage.
96
+ *
97
+ * @param token - The access token to revoke
98
+ * @returns True if token was revoked, false if it didn't exist
99
+ */
100
+ revokeToken(token: string): boolean;
101
+ /**
102
+ * Performs graceful shutdown of the AuthManager.
103
+ *
104
+ * Delegates shutdown to the session manager to ensure proper
105
+ * cleanup of resources and timers.
106
+ */
107
+ shutdown(): void;
108
+ }
109
+ //# sourceMappingURL=authManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authManager.d.ts","sourceRoot":"","sources":["../../../src/server/auth/authManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKlE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAsB;IAE3C;;;;;;;OAOG;gBACS,kBAAkB,CAAC,EAAE,MAAM;IAKvC;;;;OAIG;IACI,aAAa,IAAI,OAAO;IAI/B;;;;;;;;;OASG;IACI,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAmB7D;;;;;;;;;;OAUG;IACI,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAKtF;;;;;;;;;;;;OAYG;IACI,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAoCnH;;;;;;;;OAQG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAapG;;;;;;;OAOG;IACI,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI1C;;;;;OAKG;IACI,QAAQ,IAAI,IAAI;CAGxB"}
@@ -0,0 +1,173 @@
1
+ import logger from '../../logger/logger.js';
2
+ import { SessionManager } from './sessionManager.js';
3
+ import { ServerConfigManager } from '../config/serverConfig.js';
4
+ import { AUTH_CONFIG } from '../../constants.js';
5
+ import { v4 as uuidv4 } from 'uuid';
6
+ /**
7
+ * AuthManager handles OAuth 2.1 authentication flow and token validation.
8
+ *
9
+ * This class orchestrates the OAuth 2.1 authorization code grant flow,
10
+ * manages access token validation, and provides session information.
11
+ * It integrates with SessionManager for persistent storage and
12
+ * ServerConfigManager for configuration settings.
13
+ *
14
+ * Features:
15
+ * - OAuth 2.1 authorization code grant flow
16
+ * - Access token validation with prefix support
17
+ * - Session information retrieval
18
+ * - Configurable authentication settings
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const authManager = new AuthManager('/custom/sessions');
23
+ * const token = authManager.exchangeCodeForToken('code-123', 'client-456');
24
+ * const session = authManager.validateAccessToken('tk-sess-789');
25
+ * ```
26
+ */
27
+ export class AuthManager {
28
+ sessionManager;
29
+ configManager;
30
+ /**
31
+ * Creates a new AuthManager instance.
32
+ *
33
+ * Initializes the session manager with optional custom storage path
34
+ * and retrieves the server configuration manager instance.
35
+ *
36
+ * @param sessionStoragePath - Optional custom path for session storage
37
+ */
38
+ constructor(sessionStoragePath) {
39
+ this.sessionManager = new SessionManager(sessionStoragePath);
40
+ this.configManager = ServerConfigManager.getInstance();
41
+ }
42
+ /**
43
+ * Checks if authentication is currently enabled.
44
+ *
45
+ * @returns True if OAuth 2.1 authentication is enabled, false otherwise
46
+ */
47
+ isAuthEnabled() {
48
+ return this.configManager.isAuthEnabled();
49
+ }
50
+ /**
51
+ * Validates an access token and returns session data.
52
+ *
53
+ * If authentication is disabled, returns null (always valid).
54
+ * For enabled authentication, strips the token prefix if present
55
+ * and validates the underlying session.
56
+ *
57
+ * @param token - The access token to validate (with or without prefix)
58
+ * @returns Session data if token is valid, null otherwise
59
+ */
60
+ validateAccessToken(token) {
61
+ if (!this.isAuthEnabled()) {
62
+ return null; // Auth disabled, always valid
63
+ }
64
+ if (!token) {
65
+ return null;
66
+ }
67
+ // Strip token prefix if present
68
+ const tokenId = token.startsWith(AUTH_CONFIG.PREFIXES.ACCESS_TOKEN)
69
+ ? token.slice(AUTH_CONFIG.PREFIXES.ACCESS_TOKEN.length)
70
+ : token;
71
+ // Session is stored with 'sess-' + tokenId
72
+ const sessionId = AUTH_CONFIG.PREFIXES.SESSION_ID + tokenId;
73
+ return this.sessionManager.getSession(sessionId);
74
+ }
75
+ /**
76
+ * Creates an authorization code for OAuth 2.1 flow.
77
+ *
78
+ * Delegates to the session manager to create a prefixed authorization
79
+ * code with the configured time-to-live.
80
+ *
81
+ * @param clientId - The client identifier
82
+ * @param redirectUri - The redirect URI for this code
83
+ * @param resource - The resource this code grants access to
84
+ * @returns The generated authorization code with prefix
85
+ */
86
+ createAuthCode(clientId, redirectUri, resource) {
87
+ const ttlMs = this.configManager.getOAuthCodeTtlMs();
88
+ return this.sessionManager.createAuthCode(clientId, redirectUri, resource, ttlMs);
89
+ }
90
+ /**
91
+ * Exchanges an authorization code for an access token.
92
+ *
93
+ * Validates the authorization code, checks client ID and redirect URI
94
+ * matches, then creates a new access token with the configured TTL.
95
+ * The authorization code is deleted after successful exchange.
96
+ *
97
+ * @param code - The authorization code to exchange
98
+ * @param clientId - The client identifier
99
+ * @param redirectUri - Optional redirect URI for validation
100
+ * @param resource - Optional resource for validation
101
+ * @returns Access token with prefix if exchange successful, null otherwise
102
+ */
103
+ exchangeCodeForToken(code, clientId, redirectUri, resource) {
104
+ const codeData = this.sessionManager.getAuthCode(code);
105
+ if (!codeData) {
106
+ logger.warn(`Invalid or expired auth code: ${code}`);
107
+ return null;
108
+ }
109
+ if (codeData.clientId !== clientId) {
110
+ logger.warn(`Client ID mismatch for code ${code}: expected ${codeData.clientId}, got ${clientId}`);
111
+ return null;
112
+ }
113
+ if (redirectUri && codeData.redirectUri !== redirectUri) {
114
+ logger.warn(`Redirect URI mismatch for code ${code}: expected ${codeData.redirectUri}, got ${redirectUri}`);
115
+ return null;
116
+ }
117
+ if (resource && codeData.resource && codeData.resource !== resource) {
118
+ logger.warn(`Resource mismatch for code ${code}: expected ${codeData.resource}, got ${resource}`);
119
+ return null;
120
+ }
121
+ // Delete the auth code after successful exchange
122
+ this.sessionManager.deleteAuthCode(code);
123
+ // Create access token with prefix and a new UUID
124
+ const rawTokenId = uuidv4();
125
+ const accessToken = AUTH_CONFIG.PREFIXES.ACCESS_TOKEN + rawTokenId;
126
+ const ttlMs = this.configManager.getOAuthTokenTtlMs();
127
+ // Store the session using the rawTokenId (not prefixed)
128
+ this.sessionManager.createSessionWithId(rawTokenId, clientId, codeData.resource, ttlMs);
129
+ logger.info(`Exchanged code ${code} for token ${accessToken} for client ${clientId}`);
130
+ return accessToken;
131
+ }
132
+ /**
133
+ * Gets information about an access token.
134
+ *
135
+ * Retrieves session data for the token and returns formatted
136
+ * information including client ID, resource, and time until expiration.
137
+ *
138
+ * @param token - The access token to get information for
139
+ * @returns Token information if valid, null otherwise
140
+ */
141
+ getTokenInfo(token) {
142
+ const session = this.sessionManager.getSession(token);
143
+ if (!session) {
144
+ return null;
145
+ }
146
+ return {
147
+ clientId: session.clientId,
148
+ resource: session.resource,
149
+ expiresIn: Math.max(0, Math.floor((session.expires - Date.now()) / 1000)),
150
+ };
151
+ }
152
+ /**
153
+ * Revokes an access token.
154
+ *
155
+ * Removes the session associated with the token from storage.
156
+ *
157
+ * @param token - The access token to revoke
158
+ * @returns True if token was revoked, false if it didn't exist
159
+ */
160
+ revokeToken(token) {
161
+ return this.sessionManager.deleteSession(token);
162
+ }
163
+ /**
164
+ * Performs graceful shutdown of the AuthManager.
165
+ *
166
+ * Delegates shutdown to the session manager to ensure proper
167
+ * cleanup of resources and timers.
168
+ */
169
+ shutdown() {
170
+ this.sessionManager.shutdown();
171
+ }
172
+ }
173
+ //# sourceMappingURL=authManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authManager.js","sourceRoot":"","sources":["../../../src/server/auth/authManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import express from 'express';
2
+ import { AuthManager } from './authManager.js';
3
+ export declare function createAuthMiddleware(authManager: AuthManager): (req: express.Request, res: express.Response, next: express.NextFunction) => void;
4
+ declare global {
5
+ namespace Express {
6
+ interface Request {
7
+ sessionData?: {
8
+ clientId: string;
9
+ resource: string;
10
+ expires: number;
11
+ createdAt: number;
12
+ };
13
+ }
14
+ }
15
+ }
16
+ //# sourceMappingURL=authMiddleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authMiddleware.d.ts","sourceRoot":"","sources":["../../../src/server/auth/authMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,IACnD,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,YAAY,UA8ChF;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,WAAW,CAAC,EAAE;gBACZ,QAAQ,EAAE,MAAM,CAAC;gBACjB,QAAQ,EAAE,MAAM,CAAC;gBACjB,OAAO,EAAE,MAAM,CAAC;gBAChB,SAAS,EAAE,MAAM,CAAC;aACnB,CAAC;SACH;KACF;CACF"}
@@ -0,0 +1,45 @@
1
+ import logger from '../../logger/logger.js';
2
+ export function createAuthMiddleware(authManager) {
3
+ return (req, res, next) => {
4
+ // Skip auth if disabled
5
+ if (!authManager.isAuthEnabled()) {
6
+ return next();
7
+ }
8
+ const auth = req.headers['authorization'];
9
+ if (!auth || !auth.startsWith('Bearer ')) {
10
+ logger.warn('Missing Bearer token in request', {
11
+ url: req.url,
12
+ method: req.method,
13
+ headers: req.headers,
14
+ });
15
+ res.status(401).json({
16
+ error: 'invalid_token',
17
+ error_description: 'Missing Bearer token',
18
+ });
19
+ return;
20
+ }
21
+ const token = auth.slice('Bearer '.length);
22
+ const sessionData = authManager.validateAccessToken(token);
23
+ if (!sessionData) {
24
+ logger.warn('Invalid or expired token', {
25
+ url: req.url,
26
+ method: req.method,
27
+ token: token.substring(0, 8) + '...',
28
+ });
29
+ res.status(401).json({
30
+ error: 'invalid_token',
31
+ error_description: 'Invalid or expired token',
32
+ });
33
+ return;
34
+ }
35
+ // Add session data to request for downstream use
36
+ req.sessionData = sessionData;
37
+ logger.debug('Valid token for request', {
38
+ url: req.url,
39
+ method: req.method,
40
+ clientId: sessionData.clientId,
41
+ });
42
+ next();
43
+ };
44
+ }
45
+ //# sourceMappingURL=authMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authMiddleware.js","sourceRoot":"","sources":["../../../src/server/auth/authMiddleware.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAG5C,MAAM,UAAU,oBAAoB,CAAC,WAAwB;IAC3D,OAAO,CAAC,GAAoB,EAAE,GAAqB,EAAE,IAA0B,EAAE,EAAE;QACjF,wBAAwB;QACxB,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC;YACjC,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;gBAC7C,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC,CAAC;YACH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,eAAe;gBACtB,iBAAiB,EAAE,sBAAsB;aAC1C,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,WAAW,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAE3D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;gBACtC,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK;aACrC,CAAC,CAAC;YACH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,eAAe;gBACtB,iBAAiB,EAAE,0BAA0B;aAC9C,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,iDAAiD;QACjD,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;YACtC,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,QAAQ,EAAE,WAAW,CAAC,QAAQ;SAC/B,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Represents session data stored for access tokens.
3
+ *
4
+ * Contains all necessary information to validate and manage user sessions
5
+ * including client identification, resource access, and expiration details.
6
+ */
7
+ export interface SessionData {
8
+ /** The client ID that owns this session */
9
+ clientId: string;
10
+ /** The resource this session has access to */
11
+ resource: string;
12
+ /** Unix timestamp when this session expires */
13
+ expires: number;
14
+ /** Unix timestamp when this session was created */
15
+ createdAt: number;
16
+ }
17
+ /**
18
+ * Represents authorization code data for OAuth 2.1 flow.
19
+ *
20
+ * Contains information about authorization codes used in the OAuth
21
+ * authorization code grant flow, including client and redirect details.
22
+ */
23
+ export interface AuthCodeData {
24
+ /** The client ID that requested this authorization code */
25
+ clientId: string;
26
+ /** The redirect URI where the code should be used */
27
+ redirectUri: string;
28
+ /** The resource this code grants access to */
29
+ resource: string;
30
+ /** Unix timestamp when this code expires */
31
+ expires: number;
32
+ /** Unix timestamp when this code was created */
33
+ createdAt: number;
34
+ }
35
+ /**
36
+ * SessionManager handles file-based session storage with automatic cleanup.
37
+ *
38
+ * This class manages OAuth 2.1 sessions and authorization codes using
39
+ * the local filesystem. It provides automatic cleanup of expired sessions
40
+ * and supports configurable storage locations.
41
+ *
42
+ * Features:
43
+ * - File-based session storage with JSON format
44
+ * - Automatic cleanup of expired sessions every 5 minutes
45
+ * - Prefixed identifiers for easy debugging
46
+ * - Configurable storage directory
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const sessionManager = new SessionManager('/custom/path');
51
+ * const sessionId = sessionManager.createSession('client-123', 'resource', 3600000);
52
+ * const session = sessionManager.getSession(sessionId);
53
+ * ```
54
+ */
55
+ export declare class SessionManager {
56
+ private sessionStoragePath;
57
+ private cleanupInterval;
58
+ /**
59
+ * Creates a new SessionManager instance.
60
+ *
61
+ * Initializes the session storage directory and starts the automatic
62
+ * cleanup process for expired sessions.
63
+ *
64
+ * @param sessionStoragePath - Optional custom path for session storage
65
+ */
66
+ constructor(sessionStoragePath?: string);
67
+ /**
68
+ * Ensures the session storage directory exists.
69
+ *
70
+ * Creates the directory structure if it doesn't exist, including
71
+ * parent directories as needed.
72
+ *
73
+ * @throws Error if directory creation fails
74
+ */
75
+ private ensureSessionDirectory;
76
+ /**
77
+ * Gets the file path for a session ID.
78
+ *
79
+ * @param sessionId - The session identifier
80
+ * @returns Full file path for the session file
81
+ */
82
+ private getSessionFilePath;
83
+ /**
84
+ * Gets the file path for an authorization code.
85
+ *
86
+ * @param code - The authorization code
87
+ * @returns Full file path for the auth code file
88
+ */
89
+ private getAuthCodeFilePath;
90
+ /**
91
+ * Utility to validate session IDs and auth codes for safe characters (alphanumeric and dashes only).
92
+ * @param id - The session ID or auth code to validate
93
+ * @returns true if valid, false otherwise
94
+ */
95
+ private isValidId;
96
+ /**
97
+ * Creates a new session with the specified parameters.
98
+ *
99
+ * Generates a unique session ID with prefix, stores the session data
100
+ * as a JSON file, and returns the session identifier.
101
+ *
102
+ * @param clientId - The client identifier
103
+ * @param resource - The resource this session can access
104
+ * @param ttlMs - Time-to-live in milliseconds
105
+ * @returns The generated session ID with prefix
106
+ * @throws Error if session creation fails
107
+ */
108
+ createSession(clientId: string, resource: string, ttlMs: number): string;
109
+ /**
110
+ * Retrieves session data by session ID.
111
+ *
112
+ * Reads the session file and validates expiration. If the session
113
+ * is expired, it's automatically deleted and null is returned.
114
+ *
115
+ * @param sessionId - The session identifier to retrieve
116
+ * @returns Session data if valid and not expired, null otherwise
117
+ */
118
+ getSession(sessionId: string): SessionData | null;
119
+ /**
120
+ * Deletes a session by session ID.
121
+ *
122
+ * Removes the session file from the filesystem if it exists.
123
+ *
124
+ * @param sessionId - The session identifier to delete
125
+ * @returns True if session was deleted, false if it didn't exist
126
+ */
127
+ deleteSession(sessionId: string): boolean;
128
+ /**
129
+ * Creates a new authorization code for OAuth 2.1 flow.
130
+ *
131
+ * Generates a unique authorization code with prefix, stores the code data
132
+ * as a JSON file, and returns the code identifier.
133
+ *
134
+ * @param clientId - The client identifier
135
+ * @param redirectUri - The redirect URI for this code
136
+ * @param resource - The resource this code grants access to
137
+ * @param ttlMs - Time-to-live in milliseconds
138
+ * @returns The generated authorization code with prefix
139
+ * @throws Error if code creation fails
140
+ */
141
+ createAuthCode(clientId: string, redirectUri: string, resource: string, ttlMs: number): string;
142
+ /**
143
+ * Retrieves authorization code data by code.
144
+ *
145
+ * Reads the auth code file and validates expiration. If the code
146
+ * is expired, it's automatically deleted and null is returned.
147
+ *
148
+ * @param code - The authorization code to retrieve
149
+ * @returns Auth code data if valid and not expired, null otherwise
150
+ */
151
+ getAuthCode(code: string): AuthCodeData | null;
152
+ /**
153
+ * Deletes an authorization code by code.
154
+ *
155
+ * Removes the auth code file from the filesystem if it exists.
156
+ *
157
+ * @param code - The authorization code to delete
158
+ * @returns True if code was deleted, false if it didn't exist
159
+ */
160
+ deleteAuthCode(code: string): boolean;
161
+ /**
162
+ * Starts the automatic cleanup interval for expired sessions.
163
+ *
164
+ * Runs cleanup every 5 minutes to remove expired sessions and
165
+ * authorization codes from the filesystem.
166
+ */
167
+ private startCleanupInterval;
168
+ /**
169
+ * Cleans up expired sessions and authorization codes.
170
+ *
171
+ * Scans the session storage directory and removes all expired
172
+ * session and auth code files. Also handles corrupted files
173
+ * by removing them to prevent future errors.
174
+ */
175
+ private cleanupExpiredSessions;
176
+ /**
177
+ * Performs graceful shutdown of the SessionManager.
178
+ *
179
+ * Stops the cleanup interval to prevent memory leaks and
180
+ * ensures proper resource cleanup.
181
+ */
182
+ shutdown(): void;
183
+ /**
184
+ * Creates a new session with a custom ID (no prefix).
185
+ * Used for access tokens where the token ID is generated separately.
186
+ *
187
+ * @param tokenId - The raw UUID to use for the session (no prefix)
188
+ * @param clientId - The client identifier
189
+ * @param resource - The resource this session can access
190
+ * @param ttlMs - Time-to-live in milliseconds
191
+ * @returns The generated session ID with prefix
192
+ * @throws Error if session creation fails
193
+ */
194
+ createSessionWithId(tokenId: string, clientId: string, resource: string, ttlMs: number): string;
195
+ }
196
+ //# sourceMappingURL=sessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionManager.d.ts","sourceRoot":"","sources":["../../../src/server/auth/sessionManager.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,eAAe,CAA+C;IAEtE;;;;;;;OAOG;gBACS,kBAAkB,CAAC,EAAE,MAAM;IAMvC;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAIjB;;;;;;;;;;;OAWG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAoB/E;;;;;;;;OAQG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IA0BxD;;;;;;;OAOG;IACI,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAmBhD;;;;;;;;;;;;OAYG;IACI,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAqBrG;;;;;;;;OAQG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IA0BrD;;;;;;;OAOG;IACI,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAmB5C;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAqC9B;;;;;OAKG;IACI,QAAQ,IAAI,IAAI;IAOvB;;;;;;;;;;OAUG;IACI,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;CAmBvG"}