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,283 @@
1
+ import { config } from 'dotenv';
2
+ // Load environment variables before class initialization
3
+ config({ path: '.env.local' });
4
+ import { v4 as uuidv4 } from 'uuid';
5
+ import jwt from 'jsonwebtoken';
6
+ import bcrypt from 'bcryptjs';
7
+ import { getDb } from '../../db/client.js';
8
+ import { users, oauthClients, oauthTokens, authorizationCodes } from '../../db/schema.js';
9
+ import { eq, and } from 'drizzle-orm';
10
+ import { logger } from '../../utils/logger.js';
11
+ export class OAuthServer {
12
+ jwtSecret;
13
+ jwtExpiresIn;
14
+ constructor() {
15
+ this.jwtSecret = process.env.JWT_SECRET || 'dev-secret-change-in-production';
16
+ this.jwtExpiresIn = process.env.JWT_EXPIRES_IN || '24h';
17
+ if (!process.env.JWT_SECRET) {
18
+ logger.warn('Using default JWT secret - CHANGE IN PRODUCTION!');
19
+ }
20
+ }
21
+ /**
22
+ * Validate client credentials
23
+ */
24
+ async validateClient(clientId, clientSecret) {
25
+ const db = getDb();
26
+ try {
27
+ const [client] = await db
28
+ .select()
29
+ .from(oauthClients)
30
+ .where(eq(oauthClients.clientId, clientId))
31
+ .limit(1);
32
+ if (!client) {
33
+ logger.warn(`Invalid client ID: ${clientId}`);
34
+ return false;
35
+ }
36
+ // If secret provided, verify it
37
+ if (clientSecret) {
38
+ const validSecret = await bcrypt.compare(clientSecret, client.clientSecret);
39
+ if (!validSecret) {
40
+ logger.warn(`Invalid client secret for client: ${clientId}`);
41
+ return false;
42
+ }
43
+ }
44
+ return true;
45
+ }
46
+ catch (error) {
47
+ logger.error('Error validating client:', error);
48
+ return false;
49
+ }
50
+ }
51
+ /**
52
+ * Generate authorization code for OAuth flow
53
+ */
54
+ async generateAuthCode(clientId, userId, redirectUri, scope = 'read write') {
55
+ const db = getDb();
56
+ const code = uuidv4();
57
+ const expiresAt = new Date(Date.now() + 10 * 60 * 1000); // 10 minutes
58
+ try {
59
+ await db.insert(authorizationCodes).values({
60
+ code,
61
+ userId,
62
+ clientId,
63
+ redirectUri,
64
+ scope,
65
+ expiresAt,
66
+ used: false,
67
+ });
68
+ logger.info(`Generated auth code for user ${userId}, client ${clientId}`);
69
+ return code;
70
+ }
71
+ catch (error) {
72
+ logger.error('Error generating auth code:', error);
73
+ throw new Error('Failed to generate authorization code');
74
+ }
75
+ }
76
+ /**
77
+ * Exchange authorization code for access token
78
+ */
79
+ async exchangeCodeForToken(code, clientId, clientSecret, redirectUri) {
80
+ const db = getDb();
81
+ try {
82
+ // Validate client
83
+ const validClient = await this.validateClient(clientId, clientSecret);
84
+ if (!validClient) {
85
+ throw new Error('Invalid client credentials');
86
+ }
87
+ // Get and validate auth code
88
+ const [authCode] = await db
89
+ .select()
90
+ .from(authorizationCodes)
91
+ .where(and(eq(authorizationCodes.code, code), eq(authorizationCodes.clientId, clientId)))
92
+ .limit(1);
93
+ if (!authCode) {
94
+ throw new Error('Invalid authorization code');
95
+ }
96
+ // Check if code is expired
97
+ if (new Date() > authCode.expiresAt) {
98
+ throw new Error('Authorization code expired');
99
+ }
100
+ // Check if code was already used
101
+ if (authCode.used) {
102
+ throw new Error('Authorization code already used');
103
+ }
104
+ // Validate redirect URI
105
+ if (authCode.redirectUri !== redirectUri) {
106
+ throw new Error('Redirect URI mismatch');
107
+ }
108
+ // Mark code as used
109
+ await db
110
+ .update(authorizationCodes)
111
+ .set({ used: true })
112
+ .where(eq(authorizationCodes.code, code));
113
+ // Generate tokens
114
+ const accessToken = this.generateAccessToken(authCode.userId, clientId, authCode.scope || 'read write');
115
+ const refreshToken = this.generateRefreshToken(authCode.userId, clientId, authCode.scope || 'read write');
116
+ // Store tokens in database
117
+ const expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours
118
+ await db.insert(oauthTokens).values({
119
+ userId: authCode.userId,
120
+ accessToken,
121
+ refreshToken,
122
+ expiresAt,
123
+ scope: authCode.scope,
124
+ tokenType: 'Bearer',
125
+ });
126
+ logger.info(`Issued tokens for user ${authCode.userId}, client ${clientId}`);
127
+ return {
128
+ access_token: accessToken,
129
+ refresh_token: refreshToken,
130
+ token_type: 'Bearer',
131
+ expires_in: 86400, // 24 hours in seconds
132
+ scope: authCode.scope || 'read write',
133
+ };
134
+ }
135
+ catch (error) {
136
+ logger.error('Error exchanging code for token:', error);
137
+ throw error;
138
+ }
139
+ }
140
+ /**
141
+ * Generate access token (JWT)
142
+ */
143
+ generateAccessToken(userId, clientId, scope) {
144
+ const payload = {
145
+ sub: userId,
146
+ client_id: clientId,
147
+ scope,
148
+ };
149
+ return jwt.sign(payload, this.jwtSecret, {
150
+ expiresIn: this.jwtExpiresIn,
151
+ });
152
+ }
153
+ /**
154
+ * Generate refresh token
155
+ */
156
+ generateRefreshToken(userId, clientId, scope) {
157
+ const payload = {
158
+ sub: userId,
159
+ client_id: clientId,
160
+ scope,
161
+ };
162
+ return jwt.sign(payload, this.jwtSecret, {
163
+ expiresIn: '30d', // Refresh tokens last longer
164
+ });
165
+ }
166
+ /**
167
+ * Validate access token
168
+ */
169
+ async validateAccessToken(token) {
170
+ try {
171
+ // Verify JWT signature
172
+ const decoded = jwt.verify(token, this.jwtSecret);
173
+ // Check if token exists in database and is not expired
174
+ const db = getDb();
175
+ const [dbToken] = await db
176
+ .select()
177
+ .from(oauthTokens)
178
+ .where(eq(oauthTokens.accessToken, token))
179
+ .limit(1);
180
+ if (!dbToken || new Date() > dbToken.expiresAt) {
181
+ return null;
182
+ }
183
+ return decoded;
184
+ }
185
+ catch (error) {
186
+ logger.debug('Invalid access token:', error);
187
+ return null;
188
+ }
189
+ }
190
+ /**
191
+ * Refresh access token using refresh token
192
+ */
193
+ async refreshAccessToken(refreshToken) {
194
+ const db = getDb();
195
+ try {
196
+ // Verify refresh token
197
+ const decoded = jwt.verify(refreshToken, this.jwtSecret);
198
+ // Find existing token
199
+ const [existingToken] = await db
200
+ .select()
201
+ .from(oauthTokens)
202
+ .where(eq(oauthTokens.refreshToken, refreshToken))
203
+ .limit(1);
204
+ if (!existingToken) {
205
+ throw new Error('Invalid refresh token');
206
+ }
207
+ // Generate new access token
208
+ const newAccessToken = this.generateAccessToken(decoded.sub, decoded.client_id, decoded.scope);
209
+ // Update token in database
210
+ const expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000);
211
+ await db
212
+ .update(oauthTokens)
213
+ .set({
214
+ accessToken: newAccessToken,
215
+ expiresAt,
216
+ updatedAt: new Date(),
217
+ })
218
+ .where(eq(oauthTokens.id, existingToken.id));
219
+ logger.info(`Refreshed token for user ${decoded.sub}`);
220
+ return {
221
+ access_token: newAccessToken,
222
+ token_type: 'Bearer',
223
+ expires_in: 86400,
224
+ };
225
+ }
226
+ catch (error) {
227
+ logger.error('Error refreshing token:', error);
228
+ throw new Error('Failed to refresh token');
229
+ }
230
+ }
231
+ /**
232
+ * Revoke token
233
+ */
234
+ async revokeToken(token) {
235
+ const db = getDb();
236
+ try {
237
+ await db
238
+ .delete(oauthTokens)
239
+ .where(eq(oauthTokens.accessToken, token));
240
+ logger.info('Revoked token');
241
+ }
242
+ catch (error) {
243
+ logger.error('Error revoking token:', error);
244
+ throw new Error('Failed to revoke token');
245
+ }
246
+ }
247
+ /**
248
+ * Create or get user from external ID
249
+ */
250
+ async getOrCreateUser(externalId) {
251
+ const db = getDb();
252
+ try {
253
+ // Check if user exists
254
+ const [existingUser] = await db
255
+ .select()
256
+ .from(users)
257
+ .where(eq(users.externalId, externalId))
258
+ .limit(1);
259
+ if (existingUser) {
260
+ return existingUser.id;
261
+ }
262
+ // Create new user
263
+ const [newUser] = await db
264
+ .insert(users)
265
+ .values({
266
+ externalId,
267
+ })
268
+ .returning();
269
+ if (!newUser) {
270
+ throw new Error('Failed to create user');
271
+ }
272
+ logger.info(`Created new user with external ID: ${externalId}`);
273
+ return newUser.id;
274
+ }
275
+ catch (error) {
276
+ logger.error('Error getting/creating user:', error);
277
+ throw new Error('Failed to get or create user');
278
+ }
279
+ }
280
+ }
281
+ // Export singleton instance
282
+ export const oauthServer = new OAuthServer();
283
+ //# sourceMappingURL=authServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authServer.js","sourceRoot":"","sources":["../../../src/server/oauth/authServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ import { KeyObject } from 'crypto';
2
+ import { JWK } from 'jose';
3
+ /**
4
+ * DPoP Proof structure according to RFC draft
5
+ */
6
+ export interface DPoPProof {
7
+ typ: 'dpop+jwt';
8
+ alg: 'RS256' | 'ES256';
9
+ jwk: JWK;
10
+ }
11
+ /**
12
+ * DPoP Proof payload
13
+ */
14
+ export interface DPoPPayload {
15
+ jti: string;
16
+ htm: string;
17
+ htu: string;
18
+ iat: number;
19
+ ath?: string;
20
+ nonce?: string;
21
+ }
22
+ /**
23
+ * DPoP Token binding
24
+ */
25
+ export interface DPoPBinding {
26
+ jkt: string;
27
+ cnf?: {
28
+ jkt: string;
29
+ };
30
+ }
31
+ /**
32
+ * DPoP Manager for Demonstration of Proof of Possession
33
+ * Implements sender-constrained tokens to prevent token theft
34
+ * Based on OAuth 2.0 DPoP draft specification
35
+ */
36
+ export declare class DPoPManager {
37
+ private readonly jtiCache;
38
+ private readonly nonceCache;
39
+ private readonly JTI_TTL;
40
+ private readonly NONCE_TTL;
41
+ private readonly MAX_TIME_SKEW;
42
+ /**
43
+ * Generate a DPoP key pair for client
44
+ */
45
+ generateKeyPair(algorithm?: 'RS256' | 'ES256'): {
46
+ publicKey: KeyObject;
47
+ privateKey: KeyObject;
48
+ jwk: JWK;
49
+ };
50
+ /**
51
+ * Create a DPoP proof JWT
52
+ */
53
+ createDPoPProof(privateKey: KeyObject, httpMethod: string, httpUri: string, options?: {
54
+ accessToken?: string;
55
+ nonce?: string;
56
+ algorithm?: 'RS256' | 'ES256';
57
+ }): Promise<string>;
58
+ /**
59
+ * Validate a DPoP proof
60
+ */
61
+ validateDPoPProof(dpopProof: string, httpMethod: string, httpUri: string, options?: {
62
+ accessToken?: string;
63
+ expectedNonce?: string;
64
+ requireNonce?: boolean;
65
+ }): Promise<{
66
+ valid: boolean;
67
+ jkt?: string;
68
+ error?: string;
69
+ }>;
70
+ /**
71
+ * Generate a server nonce for enhanced security
72
+ */
73
+ generateNonce(): string;
74
+ /**
75
+ * Validate a nonce
76
+ */
77
+ validateNonce(nonce: string): Promise<boolean>;
78
+ /**
79
+ * Bind an access token to a DPoP key
80
+ */
81
+ createDPoPBoundToken(token: any, jkt: string): any;
82
+ /**
83
+ * Validate that a token is bound to the correct DPoP key
84
+ */
85
+ validateTokenBinding(token: any, dpopJkt: string): boolean;
86
+ /**
87
+ * Hash a token for the 'ath' claim
88
+ */
89
+ private hashToken;
90
+ /**
91
+ * Calculate JWK thumbprint (RFC 7638)
92
+ */
93
+ private calculateJwkThumbprint;
94
+ /**
95
+ * Normalize URI for comparison
96
+ */
97
+ private normalizeUri;
98
+ /**
99
+ * Generate unique JTI
100
+ */
101
+ private generateJti;
102
+ /**
103
+ * Check if JTI has been used
104
+ */
105
+ private isJtiUsed;
106
+ /**
107
+ * Store JTI to prevent replay
108
+ */
109
+ private storeJti;
110
+ /**
111
+ * Clean up expired JTIs
112
+ */
113
+ private cleanupExpiredJtis;
114
+ /**
115
+ * Clean up expired nonces
116
+ */
117
+ private cleanupExpiredNonces;
118
+ /**
119
+ * Middleware for Express to validate DPoP proofs
120
+ */
121
+ middleware(options?: {
122
+ requireDPoP?: boolean;
123
+ requireNonce?: boolean;
124
+ }): (req: any, res: any, next: any) => Promise<any>;
125
+ /**
126
+ * Get statistics about DPoP usage
127
+ */
128
+ getStats(): {
129
+ activeJtis: number;
130
+ activeNonces: number;
131
+ totalValidations: number;
132
+ };
133
+ }
134
+ export declare const dpopManager: DPoPManager;
135
+ //# sourceMappingURL=dpop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dpop.d.ts","sourceRoot":"","sources":["../../../src/server/oauth/dpop.ts"],"names":[],"mappings":"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"}