couchloop-eq-mcp 1.0.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 (222) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +358 -0
  3. package/assets/logo/README.md +12 -0
  4. package/assets/logo/couchloop_EQ-IconLogo.png +0 -0
  5. package/dist/auth/middleware.d.ts +8 -0
  6. package/dist/auth/middleware.d.ts.map +1 -0
  7. package/dist/auth/middleware.js +59 -0
  8. package/dist/auth/middleware.js.map +1 -0
  9. package/dist/clients/shrinkChatClient.d.ts +195 -0
  10. package/dist/clients/shrinkChatClient.d.ts.map +1 -0
  11. package/dist/clients/shrinkChatClient.js +349 -0
  12. package/dist/clients/shrinkChatClient.js.map +1 -0
  13. package/dist/db/client.d.ts +23 -0
  14. package/dist/db/client.d.ts.map +1 -0
  15. package/dist/db/client.js +78 -0
  16. package/dist/db/client.js.map +1 -0
  17. package/dist/db/migrate.d.ts +4 -0
  18. package/dist/db/migrate.d.ts.map +1 -0
  19. package/dist/db/migrate.js +34 -0
  20. package/dist/db/migrate.js.map +1 -0
  21. package/dist/db/migrations/schema.d.ts +1074 -0
  22. package/dist/db/migrations/schema.d.ts.map +1 -0
  23. package/dist/db/migrations/schema.js +160 -0
  24. package/dist/db/migrations/schema.js.map +1 -0
  25. package/dist/db/schema.d.ts +1213 -0
  26. package/dist/db/schema.d.ts.map +1 -0
  27. package/dist/db/schema.js +157 -0
  28. package/dist/db/schema.js.map +1 -0
  29. package/dist/db/seed.d.ts +4 -0
  30. package/dist/db/seed.d.ts.map +1 -0
  31. package/dist/db/seed.js +57 -0
  32. package/dist/db/seed.js.map +1 -0
  33. package/dist/db/seedOAuth.d.ts +4 -0
  34. package/dist/db/seedOAuth.d.ts.map +1 -0
  35. package/dist/db/seedOAuth.js +76 -0
  36. package/dist/db/seedOAuth.js.map +1 -0
  37. package/dist/index.d.ts +3 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +93 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/resources/index.d.ts +11 -0
  42. package/dist/resources/index.d.ts.map +1 -0
  43. package/dist/resources/index.js +56 -0
  44. package/dist/resources/index.js.map +1 -0
  45. package/dist/resources/journey-status.d.ts +2 -0
  46. package/dist/resources/journey-status.d.ts.map +1 -0
  47. package/dist/resources/journey-status.js +42 -0
  48. package/dist/resources/journey-status.js.map +1 -0
  49. package/dist/resources/session-summary.d.ts +2 -0
  50. package/dist/resources/session-summary.d.ts.map +1 -0
  51. package/dist/resources/session-summary.js +85 -0
  52. package/dist/resources/session-summary.js.map +1 -0
  53. package/dist/resources/user-context.d.ts +2 -0
  54. package/dist/resources/user-context.d.ts.map +1 -0
  55. package/dist/resources/user-context.js +79 -0
  56. package/dist/resources/user-context.js.map +1 -0
  57. package/dist/server/index.d.ts +3 -0
  58. package/dist/server/index.d.ts.map +1 -0
  59. package/dist/server/index.js +385 -0
  60. package/dist/server/index.js.map +1 -0
  61. package/dist/server/middleware/auth.d.ts +30 -0
  62. package/dist/server/middleware/auth.d.ts.map +1 -0
  63. package/dist/server/middleware/auth.js +157 -0
  64. package/dist/server/middleware/auth.js.map +1 -0
  65. package/dist/server/oauth/anomalyDetection.d.ts +146 -0
  66. package/dist/server/oauth/anomalyDetection.d.ts.map +1 -0
  67. package/dist/server/oauth/anomalyDetection.js +405 -0
  68. package/dist/server/oauth/anomalyDetection.js.map +1 -0
  69. package/dist/server/oauth/authServer.d.ts +61 -0
  70. package/dist/server/oauth/authServer.d.ts.map +1 -0
  71. package/dist/server/oauth/authServer.js +283 -0
  72. package/dist/server/oauth/authServer.js.map +1 -0
  73. package/dist/server/oauth/dpop.d.ts +135 -0
  74. package/dist/server/oauth/dpop.d.ts.map +1 -0
  75. package/dist/server/oauth/dpop.js +338 -0
  76. package/dist/server/oauth/dpop.js.map +1 -0
  77. package/dist/server/oauth/gdpr/consent.d.ts +173 -0
  78. package/dist/server/oauth/gdpr/consent.d.ts.map +1 -0
  79. package/dist/server/oauth/gdpr/consent.js +388 -0
  80. package/dist/server/oauth/gdpr/consent.js.map +1 -0
  81. package/dist/server/oauth/gdpr/dataPortability.d.ts +214 -0
  82. package/dist/server/oauth/gdpr/dataPortability.d.ts.map +1 -0
  83. package/dist/server/oauth/gdpr/dataPortability.js +486 -0
  84. package/dist/server/oauth/gdpr/dataPortability.js.map +1 -0
  85. package/dist/server/oauth/gdpr/index.d.ts +103 -0
  86. package/dist/server/oauth/gdpr/index.d.ts.map +1 -0
  87. package/dist/server/oauth/gdpr/index.js +273 -0
  88. package/dist/server/oauth/gdpr/index.js.map +1 -0
  89. package/dist/server/oauth/gdpr/rightToErasure.d.ts +184 -0
  90. package/dist/server/oauth/gdpr/rightToErasure.d.ts.map +1 -0
  91. package/dist/server/oauth/gdpr/rightToErasure.js +527 -0
  92. package/dist/server/oauth/gdpr/rightToErasure.js.map +1 -0
  93. package/dist/server/oauth/monitoring/securityMonitor.d.ts +218 -0
  94. package/dist/server/oauth/monitoring/securityMonitor.d.ts.map +1 -0
  95. package/dist/server/oauth/monitoring/securityMonitor.js +615 -0
  96. package/dist/server/oauth/monitoring/securityMonitor.js.map +1 -0
  97. package/dist/server/oauth/pkce.d.ts +61 -0
  98. package/dist/server/oauth/pkce.d.ts.map +1 -0
  99. package/dist/server/oauth/pkce.js +157 -0
  100. package/dist/server/oauth/pkce.js.map +1 -0
  101. package/dist/server/oauth/providers/base.d.ts +147 -0
  102. package/dist/server/oauth/providers/base.d.ts.map +1 -0
  103. package/dist/server/oauth/providers/base.js +312 -0
  104. package/dist/server/oauth/providers/base.js.map +1 -0
  105. package/dist/server/oauth/providers/github.d.ts +55 -0
  106. package/dist/server/oauth/providers/github.d.ts.map +1 -0
  107. package/dist/server/oauth/providers/github.js +225 -0
  108. package/dist/server/oauth/providers/github.js.map +1 -0
  109. package/dist/server/oauth/providers/google.d.ts +49 -0
  110. package/dist/server/oauth/providers/google.d.ts.map +1 -0
  111. package/dist/server/oauth/providers/google.js +153 -0
  112. package/dist/server/oauth/providers/google.js.map +1 -0
  113. package/dist/server/oauth/providers/index.d.ts +9 -0
  114. package/dist/server/oauth/providers/index.d.ts.map +1 -0
  115. package/dist/server/oauth/providers/index.js +24 -0
  116. package/dist/server/oauth/providers/index.js.map +1 -0
  117. package/dist/server/oauth/refreshTokenRotation.d.ts +114 -0
  118. package/dist/server/oauth/refreshTokenRotation.d.ts.map +1 -0
  119. package/dist/server/oauth/refreshTokenRotation.js +344 -0
  120. package/dist/server/oauth/refreshTokenRotation.js.map +1 -0
  121. package/dist/server/oauth/security.d.ts +101 -0
  122. package/dist/server/oauth/security.d.ts.map +1 -0
  123. package/dist/server/oauth/security.js +268 -0
  124. package/dist/server/oauth/security.js.map +1 -0
  125. package/dist/server/oauth/tokenEncryption.d.ts +80 -0
  126. package/dist/server/oauth/tokenEncryption.d.ts.map +1 -0
  127. package/dist/server/oauth/tokenEncryption.js +218 -0
  128. package/dist/server/oauth/tokenEncryption.js.map +1 -0
  129. package/dist/tools/checkpoint.d.ts +35 -0
  130. package/dist/tools/checkpoint.d.ts.map +1 -0
  131. package/dist/tools/checkpoint.js +125 -0
  132. package/dist/tools/checkpoint.js.map +1 -0
  133. package/dist/tools/index.d.ts +412 -0
  134. package/dist/tools/index.d.ts.map +1 -0
  135. package/dist/tools/index.js +262 -0
  136. package/dist/tools/index.js.map +1 -0
  137. package/dist/tools/insight.d.ts +65 -0
  138. package/dist/tools/insight.d.ts.map +1 -0
  139. package/dist/tools/insight.js +190 -0
  140. package/dist/tools/insight.js.map +1 -0
  141. package/dist/tools/journey.d.ts +45 -0
  142. package/dist/tools/journey.d.ts.map +1 -0
  143. package/dist/tools/journey.js +115 -0
  144. package/dist/tools/journey.js.map +1 -0
  145. package/dist/tools/sendMessage.d.ts +6 -0
  146. package/dist/tools/sendMessage.d.ts.map +1 -0
  147. package/dist/tools/sendMessage.js +278 -0
  148. package/dist/tools/sendMessage.js.map +1 -0
  149. package/dist/tools/session.d.ts +106 -0
  150. package/dist/tools/session.d.ts.map +1 -0
  151. package/dist/tools/session.js +161 -0
  152. package/dist/tools/session.js.map +1 -0
  153. package/dist/types/auth.d.ts +37 -0
  154. package/dist/types/auth.d.ts.map +1 -0
  155. package/dist/types/auth.js +44 -0
  156. package/dist/types/auth.js.map +1 -0
  157. package/dist/types/checkpoint.d.ts +25 -0
  158. package/dist/types/checkpoint.d.ts.map +1 -0
  159. package/dist/types/checkpoint.js +8 -0
  160. package/dist/types/checkpoint.js.map +1 -0
  161. package/dist/types/insight.d.ts +83 -0
  162. package/dist/types/insight.d.ts.map +1 -0
  163. package/dist/types/insight.js +14 -0
  164. package/dist/types/insight.js.map +1 -0
  165. package/dist/types/journey.d.ts +155 -0
  166. package/dist/types/journey.d.ts.map +1 -0
  167. package/dist/types/journey.js +29 -0
  168. package/dist/types/journey.js.map +1 -0
  169. package/dist/types/session.d.ts +82 -0
  170. package/dist/types/session.d.ts.map +1 -0
  171. package/dist/types/session.js +13 -0
  172. package/dist/types/session.js.map +1 -0
  173. package/dist/utils/circuitBreaker.d.ts +86 -0
  174. package/dist/utils/circuitBreaker.d.ts.map +1 -0
  175. package/dist/utils/circuitBreaker.js +234 -0
  176. package/dist/utils/circuitBreaker.js.map +1 -0
  177. package/dist/utils/errorHandler.d.ts +101 -0
  178. package/dist/utils/errorHandler.d.ts.map +1 -0
  179. package/dist/utils/errorHandler.js +348 -0
  180. package/dist/utils/errorHandler.js.map +1 -0
  181. package/dist/utils/errors.d.ts +36 -0
  182. package/dist/utils/errors.d.ts.map +1 -0
  183. package/dist/utils/errors.js +77 -0
  184. package/dist/utils/errors.js.map +1 -0
  185. package/dist/utils/logger.d.ts +13 -0
  186. package/dist/utils/logger.d.ts.map +1 -0
  187. package/dist/utils/logger.js +49 -0
  188. package/dist/utils/logger.js.map +1 -0
  189. package/dist/utils/performanceMonitor.d.ts +106 -0
  190. package/dist/utils/performanceMonitor.d.ts.map +1 -0
  191. package/dist/utils/performanceMonitor.js +312 -0
  192. package/dist/utils/performanceMonitor.js.map +1 -0
  193. package/dist/utils/responseCache.d.ts +88 -0
  194. package/dist/utils/responseCache.d.ts.map +1 -0
  195. package/dist/utils/responseCache.js +245 -0
  196. package/dist/utils/responseCache.js.map +1 -0
  197. package/dist/utils/retryStrategy.d.ts +49 -0
  198. package/dist/utils/retryStrategy.d.ts.map +1 -0
  199. package/dist/utils/retryStrategy.js +167 -0
  200. package/dist/utils/retryStrategy.js.map +1 -0
  201. package/dist/workflows/definitions/daily-reflection.d.ts +3 -0
  202. package/dist/workflows/definitions/daily-reflection.d.ts.map +1 -0
  203. package/dist/workflows/definitions/daily-reflection.js +52 -0
  204. package/dist/workflows/definitions/daily-reflection.js.map +1 -0
  205. package/dist/workflows/definitions/gratitude-practice.d.ts +3 -0
  206. package/dist/workflows/definitions/gratitude-practice.d.ts.map +1 -0
  207. package/dist/workflows/definitions/gratitude-practice.js +52 -0
  208. package/dist/workflows/definitions/gratitude-practice.js.map +1 -0
  209. package/dist/workflows/definitions/weekly-review.d.ts +3 -0
  210. package/dist/workflows/definitions/weekly-review.d.ts.map +1 -0
  211. package/dist/workflows/definitions/weekly-review.js +74 -0
  212. package/dist/workflows/definitions/weekly-review.js.map +1 -0
  213. package/dist/workflows/engine.d.ts +21 -0
  214. package/dist/workflows/engine.d.ts.map +1 -0
  215. package/dist/workflows/engine.js +149 -0
  216. package/dist/workflows/engine.js.map +1 -0
  217. package/dist/workflows/index.d.ts +26 -0
  218. package/dist/workflows/index.d.ts.map +1 -0
  219. package/dist/workflows/index.js +14 -0
  220. package/dist/workflows/index.js.map +1 -0
  221. package/package.json +98 -0
  222. package/run-mcp-server.sh +16 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refreshTokenRotation.js","sourceRoot":"","sources":["../../../src/server/oauth/refreshTokenRotation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * State data for CSRF protection
3
+ */
4
+ export interface StateData {
5
+ clientId: string;
6
+ redirectUri: string;
7
+ nonce: string;
8
+ scope?: string;
9
+ codeChallenge?: string;
10
+ codeChallengeMethod?: 'S256' | 'plain';
11
+ createdAt: Date;
12
+ expiresAt: Date;
13
+ ipAddress?: string;
14
+ userAgent?: string;
15
+ fingerprint?: string;
16
+ }
17
+ /**
18
+ * OAuth Security Manager
19
+ * Handles CSRF protection, state management, and nonce generation
20
+ */
21
+ export declare class OAuthSecurity {
22
+ private stateStore;
23
+ private usedNonces;
24
+ private readonly STATE_TTL;
25
+ private readonly NONCE_TTL;
26
+ /**
27
+ * Generate a secure state token with embedded data
28
+ * Uses JWT for tamper-proof state management
29
+ */
30
+ generateStateToken(data: Omit<StateData, 'createdAt' | 'expiresAt'>): Promise<string>;
31
+ /**
32
+ * Validate state token and extract data
33
+ * Prevents CSRF attacks by ensuring state matches
34
+ */
35
+ validateState(token: string): Promise<StateData | null>;
36
+ /**
37
+ * Generate cryptographically secure nonce
38
+ * Used for OpenID Connect flows
39
+ */
40
+ generateNonce(): string;
41
+ /**
42
+ * Validate nonce hasn't been used before
43
+ */
44
+ validateNonce(nonce: string): boolean;
45
+ /**
46
+ * Generate browser fingerprint for additional security
47
+ * Combines multiple browser characteristics
48
+ */
49
+ generateFingerprint(req: any): string;
50
+ /**
51
+ * Validate request fingerprint matches stored one
52
+ */
53
+ validateFingerprint(stored: string | undefined, current: string): boolean;
54
+ /**
55
+ * Clean up expired states to prevent memory leak
56
+ */
57
+ private cleanupExpiredStates;
58
+ /**
59
+ * Clean up old nonces to prevent memory leak
60
+ */
61
+ private cleanupOldNonces;
62
+ /**
63
+ * Validate redirect URI against whitelist
64
+ * Prevents open redirect vulnerabilities
65
+ */
66
+ validateRedirectUri(uri: string, clientId: string): boolean;
67
+ /**
68
+ * Get allowed redirect URIs for a client
69
+ * In production, this should query from database
70
+ */
71
+ private getAllowedRedirectUris;
72
+ /**
73
+ * Validate authorization request parameters
74
+ * Comprehensive validation for security
75
+ */
76
+ validateAuthorizationRequest(params: {
77
+ response_type: string;
78
+ client_id: string;
79
+ redirect_uri: string;
80
+ scope?: string;
81
+ state?: string;
82
+ code_challenge?: string;
83
+ code_challenge_method?: string;
84
+ }): {
85
+ valid: boolean;
86
+ error?: string;
87
+ };
88
+ /**
89
+ * Get statistics about stored states
90
+ */
91
+ getStats(): {
92
+ states: number;
93
+ nonces: number;
94
+ };
95
+ /**
96
+ * Clear all states and nonces (for testing)
97
+ */
98
+ clearAll(): void;
99
+ }
100
+ export declare const oauthSecurity: OAuthSecurity;
101
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../src/server/oauth/security.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAE5C;;;OAGG;IACG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAkC3F;;;OAGG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA2C7D;;;OAGG;IACH,aAAa,IAAI,MAAM;IAcvB;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAYrC;;;OAGG;IACH,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM;IAgBrC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAczE;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;;OAGG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAa3D;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAM9B;;;OAGG;IACH,4BAA4B,CAAC,MAAM,EAAE;QACnC,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAChC,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IA4DtC;;OAEG;IACH,QAAQ,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAS9C;;OAEG;IACH,QAAQ,IAAI,IAAI;CAKjB;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -0,0 +1,268 @@
1
+ import { randomBytes, createHash } from 'crypto';
2
+ import { SignJWT, jwtVerify } from 'jose';
3
+ import { logger } from '../../utils/logger.js';
4
+ /**
5
+ * OAuth Security Manager
6
+ * Handles CSRF protection, state management, and nonce generation
7
+ */
8
+ export class OAuthSecurity {
9
+ stateStore = new Map();
10
+ usedNonces = new Set();
11
+ STATE_TTL = 10 * 60 * 1000; // 10 minutes
12
+ NONCE_TTL = 60 * 60 * 1000; // 1 hour
13
+ /**
14
+ * Generate a secure state token with embedded data
15
+ * Uses JWT for tamper-proof state management
16
+ */
17
+ async generateStateToken(data) {
18
+ const stateId = randomBytes(16).toString('base64url');
19
+ const now = new Date();
20
+ const expiresAt = new Date(now.getTime() + this.STATE_TTL);
21
+ const stateData = {
22
+ ...data,
23
+ createdAt: now,
24
+ expiresAt,
25
+ };
26
+ // Store in memory for quick validation
27
+ this.stateStore.set(stateId, stateData);
28
+ // Create JWT with state data
29
+ const secret = new TextEncoder().encode(process.env.STATE_SECRET || 'dev-state-secret-change-in-production');
30
+ const jwt = await new SignJWT({
31
+ sid: stateId,
32
+ cid: data.clientId,
33
+ ruri: data.redirectUri,
34
+ nonce: data.nonce,
35
+ iat: Math.floor(now.getTime() / 1000),
36
+ exp: Math.floor(expiresAt.getTime() / 1000),
37
+ })
38
+ .setProtectedHeader({ alg: 'HS256' })
39
+ .setIssuedAt()
40
+ .setExpirationTime('10m')
41
+ .sign(secret);
42
+ logger.debug(`Generated state token for client ${data.clientId}`);
43
+ return jwt;
44
+ }
45
+ /**
46
+ * Validate state token and extract data
47
+ * Prevents CSRF attacks by ensuring state matches
48
+ */
49
+ async validateState(token) {
50
+ try {
51
+ const secret = new TextEncoder().encode(process.env.STATE_SECRET || 'dev-state-secret-change-in-production');
52
+ // Verify JWT signature and expiration
53
+ const { payload } = await jwtVerify(token, secret, {
54
+ algorithms: ['HS256'],
55
+ });
56
+ const stateId = payload.sid;
57
+ const stateData = this.stateStore.get(stateId);
58
+ if (!stateData) {
59
+ logger.warn(`State data not found for ID ${stateId}`);
60
+ return null;
61
+ }
62
+ // Check expiration
63
+ if (new Date() > stateData.expiresAt) {
64
+ logger.warn(`State token expired for ID ${stateId}`);
65
+ this.stateStore.delete(stateId);
66
+ return null;
67
+ }
68
+ // Validate data consistency
69
+ if (stateData.clientId !== payload.cid ||
70
+ stateData.redirectUri !== payload.ruri ||
71
+ stateData.nonce !== payload.nonce) {
72
+ logger.error('State data mismatch - possible tampering detected');
73
+ return null;
74
+ }
75
+ // Remove used state to prevent replay
76
+ this.stateStore.delete(stateId);
77
+ logger.info(`State validation successful for client ${stateData.clientId}`);
78
+ return stateData;
79
+ }
80
+ catch (error) {
81
+ logger.error('State validation failed:', error);
82
+ return null;
83
+ }
84
+ }
85
+ /**
86
+ * Generate cryptographically secure nonce
87
+ * Used for OpenID Connect flows
88
+ */
89
+ generateNonce() {
90
+ const nonce = randomBytes(16).toString('base64url');
91
+ const nonceHash = createHash('sha256').update(nonce).digest('hex');
92
+ // Store nonce hash to prevent replay
93
+ this.usedNonces.add(nonceHash);
94
+ // Clean old nonces periodically
95
+ this.cleanupOldNonces();
96
+ logger.debug('Generated new nonce');
97
+ return nonce;
98
+ }
99
+ /**
100
+ * Validate nonce hasn't been used before
101
+ */
102
+ validateNonce(nonce) {
103
+ const nonceHash = createHash('sha256').update(nonce).digest('hex');
104
+ if (this.usedNonces.has(nonceHash)) {
105
+ logger.warn('Nonce replay detected');
106
+ return false;
107
+ }
108
+ this.usedNonces.add(nonceHash);
109
+ return true;
110
+ }
111
+ /**
112
+ * Generate browser fingerprint for additional security
113
+ * Combines multiple browser characteristics
114
+ */
115
+ generateFingerprint(req) {
116
+ const components = [
117
+ req.headers['user-agent'] || '',
118
+ req.headers['accept-language'] || '',
119
+ req.headers['accept-encoding'] || '',
120
+ req.ip || req.connection.remoteAddress || '',
121
+ ];
122
+ const fingerprint = createHash('sha256')
123
+ .update(components.join('|'))
124
+ .digest('base64url');
125
+ logger.debug('Generated browser fingerprint');
126
+ return fingerprint;
127
+ }
128
+ /**
129
+ * Validate request fingerprint matches stored one
130
+ */
131
+ validateFingerprint(stored, current) {
132
+ if (!stored) {
133
+ return true; // No fingerprint stored, skip validation
134
+ }
135
+ const isValid = stored === current;
136
+ if (!isValid) {
137
+ logger.warn('Browser fingerprint mismatch - possible session hijacking');
138
+ }
139
+ return isValid;
140
+ }
141
+ /**
142
+ * Clean up expired states to prevent memory leak
143
+ */
144
+ cleanupExpiredStates() {
145
+ const now = new Date();
146
+ let cleaned = 0;
147
+ for (const [id, state] of this.stateStore.entries()) {
148
+ if (now > state.expiresAt) {
149
+ this.stateStore.delete(id);
150
+ cleaned++;
151
+ }
152
+ }
153
+ if (cleaned > 0) {
154
+ logger.debug(`Cleaned up ${cleaned} expired states`);
155
+ }
156
+ }
157
+ /**
158
+ * Clean up old nonces to prevent memory leak
159
+ */
160
+ cleanupOldNonces() {
161
+ // Keep only last 1000 nonces
162
+ if (this.usedNonces.size > 1000) {
163
+ const toKeep = Array.from(this.usedNonces).slice(-500);
164
+ this.usedNonces.clear();
165
+ toKeep.forEach(nonce => this.usedNonces.add(nonce));
166
+ logger.debug('Cleaned up old nonces');
167
+ }
168
+ }
169
+ /**
170
+ * Validate redirect URI against whitelist
171
+ * Prevents open redirect vulnerabilities
172
+ */
173
+ validateRedirectUri(uri, clientId) {
174
+ const allowedUris = this.getAllowedRedirectUris(clientId);
175
+ // Exact match required (OAuth 2.1 requirement)
176
+ const isValid = allowedUris.includes(uri);
177
+ if (!isValid) {
178
+ logger.error(`Invalid redirect URI: ${uri} for client ${clientId}`);
179
+ }
180
+ return isValid;
181
+ }
182
+ /**
183
+ * Get allowed redirect URIs for a client
184
+ * In production, this should query from database
185
+ */
186
+ getAllowedRedirectUris(clientId) {
187
+ // TODO: Fetch from database based on clientId
188
+ const uris = process.env[`${clientId.toUpperCase()}_REDIRECT_URIS`];
189
+ return uris ? uris.split(',') : [];
190
+ }
191
+ /**
192
+ * Validate authorization request parameters
193
+ * Comprehensive validation for security
194
+ */
195
+ validateAuthorizationRequest(params) {
196
+ // Response type must be 'code' (OAuth 2.1 - no implicit flow)
197
+ if (params.response_type !== 'code') {
198
+ return {
199
+ valid: false,
200
+ error: 'Invalid response_type. Only "code" is supported'
201
+ };
202
+ }
203
+ // Client ID required
204
+ if (!params.client_id) {
205
+ return {
206
+ valid: false,
207
+ error: 'Missing client_id'
208
+ };
209
+ }
210
+ // Redirect URI required and must be valid
211
+ if (!params.redirect_uri) {
212
+ return {
213
+ valid: false,
214
+ error: 'Missing redirect_uri'
215
+ };
216
+ }
217
+ if (!this.validateRedirectUri(params.redirect_uri, params.client_id)) {
218
+ return {
219
+ valid: false,
220
+ error: 'Invalid redirect_uri'
221
+ };
222
+ }
223
+ // State parameter required (CSRF protection)
224
+ if (!params.state) {
225
+ return {
226
+ valid: false,
227
+ error: 'Missing state parameter'
228
+ };
229
+ }
230
+ // PKCE required for all clients (OAuth 2.1)
231
+ if (!params.code_challenge) {
232
+ return {
233
+ valid: false,
234
+ error: 'Missing code_challenge (PKCE required)'
235
+ };
236
+ }
237
+ // S256 method required (plain is deprecated)
238
+ if (params.code_challenge_method && params.code_challenge_method !== 'S256') {
239
+ return {
240
+ valid: false,
241
+ error: 'Invalid code_challenge_method. Only S256 is supported'
242
+ };
243
+ }
244
+ logger.info(`Authorization request validated for client ${params.client_id}`);
245
+ return { valid: true };
246
+ }
247
+ /**
248
+ * Get statistics about stored states
249
+ */
250
+ getStats() {
251
+ this.cleanupExpiredStates();
252
+ return {
253
+ states: this.stateStore.size,
254
+ nonces: this.usedNonces.size,
255
+ };
256
+ }
257
+ /**
258
+ * Clear all states and nonces (for testing)
259
+ */
260
+ clearAll() {
261
+ this.stateStore.clear();
262
+ this.usedNonces.clear();
263
+ logger.debug('Cleared all states and nonces');
264
+ }
265
+ }
266
+ // Export singleton instance
267
+ export const oauthSecurity = new OAuthSecurity();
268
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/server/oauth/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Encrypted token structure
3
+ */
4
+ export interface EncryptedToken {
5
+ encrypted: string;
6
+ hash: string;
7
+ }
8
+ /**
9
+ * Token Encryption Manager
10
+ * Provides AES-256-GCM encryption for tokens at rest
11
+ */
12
+ export declare class TokenEncryption {
13
+ private readonly algorithm;
14
+ private readonly saltLength;
15
+ private readonly tagLength;
16
+ private readonly ivLength;
17
+ private readonly keyLength;
18
+ /**
19
+ * Encrypt a token using AES-256-GCM
20
+ * Returns encrypted data and a hash for indexing
21
+ */
22
+ encryptToken(plaintext: string): Promise<EncryptedToken>;
23
+ /**
24
+ * Decrypt a token
25
+ */
26
+ decryptToken(encryptedData: string): Promise<string>;
27
+ /**
28
+ * Hash a token for indexing
29
+ * Uses SHA256 for consistent hashing
30
+ */
31
+ hashToken(token: string): string;
32
+ /**
33
+ * Verify a plaintext token matches a hash
34
+ */
35
+ verifyTokenHash(plaintext: string, hash: string): boolean;
36
+ /**
37
+ * Encrypt sensitive data (generic, not just tokens)
38
+ */
39
+ encrypt(text: string): Promise<string>;
40
+ /**
41
+ * Decrypt sensitive data (generic)
42
+ */
43
+ decrypt(encryptedData: string): Promise<string>;
44
+ /**
45
+ * Derive encryption key from password and salt
46
+ * Uses scrypt for key derivation
47
+ */
48
+ private deriveKey;
49
+ /**
50
+ * Get the master encryption key
51
+ * In production, this should come from a secure key management service
52
+ */
53
+ private getEncryptionKey;
54
+ /**
55
+ * Rotate encryption (re-encrypt with new salt/IV)
56
+ * Useful for key rotation scenarios
57
+ */
58
+ rotateEncryption(encryptedData: string): Promise<EncryptedToken>;
59
+ /**
60
+ * Batch encrypt multiple tokens
61
+ * More efficient than individual encryption
62
+ */
63
+ encryptBatch(tokens: string[]): Promise<EncryptedToken[]>;
64
+ /**
65
+ * Batch decrypt multiple tokens
66
+ */
67
+ decryptBatch(encryptedTokens: string[]): Promise<string[]>;
68
+ /**
69
+ * Generate a secure random token
70
+ * Useful for generating access/refresh tokens
71
+ */
72
+ generateSecureToken(length?: number): string;
73
+ /**
74
+ * Validate encryption key on startup
75
+ * Ensures the key meets security requirements
76
+ */
77
+ validateEncryptionSetup(): boolean;
78
+ }
79
+ export declare const tokenEncryption: TokenEncryption;
80
+ //# sourceMappingURL=tokenEncryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenEncryption.d.ts","sourceRoot":"","sources":["../../../src/server/oauth/tokenEncryption.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAM;IAEhC;;;OAGG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAyC9D;;OAEG;IACG,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8C1D;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQhC;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAkBzD;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK5C;;OAEG;IACG,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrD;;;OAGG;YACW,SAAS;IAKvB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAexB;;;OAGG;IACG,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQtE;;;OAGG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI/D;;OAEG;IACG,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIhE;;;OAGG;IACH,mBAAmB,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM;IAIhD;;;OAGG;IACH,uBAAuB,IAAI,OAAO;CA4BnC;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}