@florentleveque/mural-mcp-serveur 0.5.2
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.
- package/LICENSE +21 -0
- package/README.md +301 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +1472 -0
- package/build/index.js.map +1 -0
- package/build/mural-client.d.ts +66 -0
- package/build/mural-client.d.ts.map +1 -0
- package/build/mural-client.js +706 -0
- package/build/mural-client.js.map +1 -0
- package/build/oauth.d.ts +22 -0
- package/build/oauth.d.ts.map +1 -0
- package/build/oauth.js +278 -0
- package/build/oauth.js.map +1 -0
- package/build/rate-limiter.d.ts +23 -0
- package/build/rate-limiter.d.ts.map +1 -0
- package/build/rate-limiter.js +163 -0
- package/build/rate-limiter.js.map +1 -0
- package/build/types.d.ts +245 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mural-client.js","sourceRoot":"","sources":["../src/mural-client.ts"],"names":[],"mappings":"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"}
|
package/build/oauth.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { OAuthTokens } from './types.js';
|
|
2
|
+
export declare class MuralOAuth {
|
|
3
|
+
private clientId;
|
|
4
|
+
private clientSecret?;
|
|
5
|
+
private redirectUri;
|
|
6
|
+
private scopes;
|
|
7
|
+
private authenticationPromise;
|
|
8
|
+
constructor(clientId: string, clientSecret?: string, redirectUri?: string, scopes?: string[]);
|
|
9
|
+
private generatePKCEChallenge;
|
|
10
|
+
private generateAuthorizationUrl;
|
|
11
|
+
private exchangeCodeForTokens;
|
|
12
|
+
private refreshAccessToken;
|
|
13
|
+
private saveTokens;
|
|
14
|
+
private loadTokens;
|
|
15
|
+
private startCallbackServer;
|
|
16
|
+
authenticate(): Promise<OAuthTokens>;
|
|
17
|
+
private performAuthentication;
|
|
18
|
+
getValidAccessToken(): Promise<string>;
|
|
19
|
+
getStoredTokens(): Promise<OAuthTokens | null>;
|
|
20
|
+
clearTokens(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAKV,WAAW,EAEZ,MAAM,YAAY,CAAC;AAKpB,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,qBAAqB,CAAqC;gBAGhE,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,EACrB,WAAW,SAAmC,EAC9C,MAAM,WASL;IAQH,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,wBAAwB;YAmBlB,qBAAqB;YAqCrB,kBAAkB;YAgClB,UAAU;YASV,UAAU;YASV,mBAAmB;IAiF3B,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC;YAkB5B,qBAAqB;IAyD7B,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKtC,eAAe,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAI9C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAQnC"}
|
package/build/oauth.js
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { randomBytes, createHash } from 'crypto';
|
|
2
|
+
import { URL, URLSearchParams } from 'url';
|
|
3
|
+
import http from 'http';
|
|
4
|
+
import fs from 'fs/promises';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
import os from 'os';
|
|
7
|
+
const MURAL_OAUTH_BASE = 'https://app.mural.co/api/public/v1/authorization/oauth2';
|
|
8
|
+
const TOKEN_FILE_PATH = path.join(os.homedir(), '.mural-mcp-tokens.json');
|
|
9
|
+
export class MuralOAuth {
|
|
10
|
+
clientId;
|
|
11
|
+
clientSecret;
|
|
12
|
+
redirectUri;
|
|
13
|
+
scopes;
|
|
14
|
+
authenticationPromise = null;
|
|
15
|
+
constructor(clientId, clientSecret, redirectUri = 'http://localhost:3000/callback', scopes = [
|
|
16
|
+
'workspaces:read',
|
|
17
|
+
'rooms:read',
|
|
18
|
+
'rooms:write',
|
|
19
|
+
'murals:read',
|
|
20
|
+
'murals:write',
|
|
21
|
+
'templates:read',
|
|
22
|
+
'templates:write',
|
|
23
|
+
'identity:read'
|
|
24
|
+
]) {
|
|
25
|
+
this.clientId = clientId;
|
|
26
|
+
this.clientSecret = clientSecret;
|
|
27
|
+
this.redirectUri = redirectUri;
|
|
28
|
+
this.scopes = scopes;
|
|
29
|
+
}
|
|
30
|
+
generatePKCEChallenge() {
|
|
31
|
+
const codeVerifier = randomBytes(32).toString('base64url');
|
|
32
|
+
const codeChallenge = createHash('sha256')
|
|
33
|
+
.update(codeVerifier)
|
|
34
|
+
.digest('base64url');
|
|
35
|
+
return {
|
|
36
|
+
codeVerifier,
|
|
37
|
+
codeChallenge,
|
|
38
|
+
codeChallengeMethod: 'S256'
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
generateAuthorizationUrl(pkce, state) {
|
|
42
|
+
const params = {
|
|
43
|
+
client_id: this.clientId,
|
|
44
|
+
redirect_uri: this.redirectUri,
|
|
45
|
+
scope: this.scopes.join(' '),
|
|
46
|
+
response_type: 'code',
|
|
47
|
+
code_challenge: pkce.codeChallenge,
|
|
48
|
+
code_challenge_method: pkce.codeChallengeMethod,
|
|
49
|
+
...(state && { state })
|
|
50
|
+
};
|
|
51
|
+
const url = new URL(MURAL_OAUTH_BASE);
|
|
52
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
53
|
+
url.searchParams.append(key, value);
|
|
54
|
+
});
|
|
55
|
+
return url.toString();
|
|
56
|
+
}
|
|
57
|
+
async exchangeCodeForTokens(code, codeVerifier) {
|
|
58
|
+
const params = {
|
|
59
|
+
client_id: this.clientId,
|
|
60
|
+
...(this.clientSecret && { client_secret: this.clientSecret }),
|
|
61
|
+
code,
|
|
62
|
+
code_verifier: codeVerifier,
|
|
63
|
+
grant_type: 'authorization_code',
|
|
64
|
+
redirect_uri: this.redirectUri
|
|
65
|
+
};
|
|
66
|
+
const response = await fetch(`${MURAL_OAUTH_BASE}/token`, {
|
|
67
|
+
method: 'POST',
|
|
68
|
+
headers: {
|
|
69
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
70
|
+
'Accept': 'application/json'
|
|
71
|
+
},
|
|
72
|
+
body: new URLSearchParams(Object.fromEntries(Object.entries(params).filter(([, value]) => value !== undefined)))
|
|
73
|
+
});
|
|
74
|
+
const data = await response.json();
|
|
75
|
+
if (!response.ok) {
|
|
76
|
+
const error = data;
|
|
77
|
+
throw new Error(`OAuth token exchange failed: ${error.error} - ${error.error_description || 'Unknown error'}`);
|
|
78
|
+
}
|
|
79
|
+
const tokens = data;
|
|
80
|
+
tokens.expires_at = Date.now() + (tokens.expires_in * 1000);
|
|
81
|
+
return tokens;
|
|
82
|
+
}
|
|
83
|
+
async refreshAccessToken(refreshToken) {
|
|
84
|
+
const params = {
|
|
85
|
+
client_id: this.clientId,
|
|
86
|
+
...(this.clientSecret && { client_secret: this.clientSecret }),
|
|
87
|
+
refresh_token: refreshToken,
|
|
88
|
+
grant_type: 'refresh_token'
|
|
89
|
+
};
|
|
90
|
+
const response = await fetch(`${MURAL_OAUTH_BASE}/token`, {
|
|
91
|
+
method: 'POST',
|
|
92
|
+
headers: {
|
|
93
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
94
|
+
'Accept': 'application/json'
|
|
95
|
+
},
|
|
96
|
+
body: new URLSearchParams(Object.fromEntries(Object.entries(params).filter(([, value]) => value !== undefined)))
|
|
97
|
+
});
|
|
98
|
+
const data = await response.json();
|
|
99
|
+
if (!response.ok) {
|
|
100
|
+
const error = data;
|
|
101
|
+
throw new Error(`OAuth token refresh failed: ${error.error} - ${error.error_description || 'Unknown error'}`);
|
|
102
|
+
}
|
|
103
|
+
const tokens = data;
|
|
104
|
+
tokens.expires_at = Date.now() + (tokens.expires_in * 1000);
|
|
105
|
+
return tokens;
|
|
106
|
+
}
|
|
107
|
+
async saveTokens(tokens) {
|
|
108
|
+
try {
|
|
109
|
+
await fs.writeFile(TOKEN_FILE_PATH, JSON.stringify(tokens, null, 2));
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
console.error('Failed to save tokens:', error);
|
|
113
|
+
throw new Error('Failed to save authentication tokens');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async loadTokens() {
|
|
117
|
+
try {
|
|
118
|
+
const data = await fs.readFile(TOKEN_FILE_PATH, 'utf-8');
|
|
119
|
+
return JSON.parse(data);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async startCallbackServer(expectedState) {
|
|
126
|
+
return new Promise((resolve, reject) => {
|
|
127
|
+
let resolved = false;
|
|
128
|
+
const server = http.createServer((req, res) => {
|
|
129
|
+
if (req.url?.startsWith('/callback')) {
|
|
130
|
+
// Prevent multiple resolutions
|
|
131
|
+
if (resolved) {
|
|
132
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
133
|
+
res.end('<h1>Already processed</h1><p>Authentication already handled. You can close this window.</p>');
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const url = new URL(req.url, `http://localhost:3000`);
|
|
137
|
+
const code = url.searchParams.get('code');
|
|
138
|
+
const state = url.searchParams.get('state');
|
|
139
|
+
const error = url.searchParams.get('error');
|
|
140
|
+
console.log(`Callback received - Code: ${code ? 'present' : 'missing'}, State: ${state}, Expected: ${expectedState}`);
|
|
141
|
+
if (error) {
|
|
142
|
+
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
143
|
+
res.end(`<h1>Authentication Error</h1><p>${error}</p>`);
|
|
144
|
+
resolved = true;
|
|
145
|
+
server.close();
|
|
146
|
+
reject(new Error(`OAuth error: ${error}`));
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (!code) {
|
|
150
|
+
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
151
|
+
res.end('<h1>Error</h1><p>No authorization code received</p>');
|
|
152
|
+
resolved = true;
|
|
153
|
+
server.close();
|
|
154
|
+
reject(new Error('No authorization code received'));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (expectedState && state !== expectedState) {
|
|
158
|
+
console.error(`State mismatch - Expected: "${expectedState}", Received: "${state}"`);
|
|
159
|
+
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
160
|
+
res.end(`<h1>Error</h1><p>Invalid state parameter. Expected: ${expectedState}, Got: ${state}</p>`);
|
|
161
|
+
resolved = true;
|
|
162
|
+
server.close();
|
|
163
|
+
reject(new Error(`Invalid state parameter. Expected: ${expectedState}, Got: ${state}`));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
167
|
+
res.end('<h1>Success!</h1><p>Authentication successful. You can close this window.</p>');
|
|
168
|
+
resolved = true;
|
|
169
|
+
server.close();
|
|
170
|
+
resolve({ code, state: state || undefined });
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
res.writeHead(404, { 'Content-Type': 'text/html' });
|
|
174
|
+
res.end('<h1>Not Found</h1>');
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
server.listen(3000, () => {
|
|
178
|
+
console.log('OAuth callback server started on http://localhost:3000');
|
|
179
|
+
});
|
|
180
|
+
server.on('error', (error) => {
|
|
181
|
+
if (!resolved) {
|
|
182
|
+
resolved = true;
|
|
183
|
+
reject(error);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
// Add timeout to prevent hanging
|
|
187
|
+
setTimeout(() => {
|
|
188
|
+
if (!resolved) {
|
|
189
|
+
resolved = true;
|
|
190
|
+
server.close();
|
|
191
|
+
reject(new Error('Authentication timeout after 5 minutes'));
|
|
192
|
+
}
|
|
193
|
+
}, 5 * 60 * 1000);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
async authenticate() {
|
|
197
|
+
// If authentication is already in progress, return the existing promise
|
|
198
|
+
if (this.authenticationPromise) {
|
|
199
|
+
return this.authenticationPromise;
|
|
200
|
+
}
|
|
201
|
+
// Start new authentication and store the promise
|
|
202
|
+
this.authenticationPromise = this.performAuthentication();
|
|
203
|
+
try {
|
|
204
|
+
const tokens = await this.authenticationPromise;
|
|
205
|
+
return tokens;
|
|
206
|
+
}
|
|
207
|
+
finally {
|
|
208
|
+
// Clear the promise when done (success or failure)
|
|
209
|
+
this.authenticationPromise = null;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async performAuthentication() {
|
|
213
|
+
// Check for existing valid tokens
|
|
214
|
+
const existingTokens = await this.loadTokens();
|
|
215
|
+
if (existingTokens && existingTokens.expires_at && existingTokens.expires_at > Date.now()) {
|
|
216
|
+
return existingTokens;
|
|
217
|
+
}
|
|
218
|
+
// Try to refresh if we have a refresh token
|
|
219
|
+
if (existingTokens?.refresh_token) {
|
|
220
|
+
try {
|
|
221
|
+
const refreshedTokens = await this.refreshAccessToken(existingTokens.refresh_token);
|
|
222
|
+
await this.saveTokens(refreshedTokens);
|
|
223
|
+
return refreshedTokens;
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
console.warn('Token refresh failed, starting new authentication flow');
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Start new authentication flow
|
|
230
|
+
const pkce = this.generatePKCEChallenge();
|
|
231
|
+
const state = randomBytes(16).toString('hex');
|
|
232
|
+
const authUrl = this.generateAuthorizationUrl(pkce, state);
|
|
233
|
+
console.log('Please open the following URL in your browser to authenticate:');
|
|
234
|
+
console.log(authUrl);
|
|
235
|
+
console.log('\nWaiting for authentication callback...');
|
|
236
|
+
// Start callback server and wait for response
|
|
237
|
+
const callbackPromise = this.startCallbackServer(state);
|
|
238
|
+
// Open browser automatically if possible
|
|
239
|
+
const { spawn } = await import('child_process');
|
|
240
|
+
const platform = process.platform;
|
|
241
|
+
const command = platform === 'darwin' ? 'open' : platform === 'win32' ? 'start' : 'xdg-open';
|
|
242
|
+
try {
|
|
243
|
+
const browserProcess = spawn(command, [authUrl], { stdio: 'ignore', detached: true });
|
|
244
|
+
// spawn() reports failures (e.g. xdg-open missing on WSL/Linux) via an async
|
|
245
|
+
// 'error' event, not a thrown exception — handle it so the server doesn't crash.
|
|
246
|
+
browserProcess.on('error', () => {
|
|
247
|
+
// Browser couldn't be opened automatically; the user opens the URL manually.
|
|
248
|
+
});
|
|
249
|
+
browserProcess.unref();
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
// Browser opening failed, user will need to open manually
|
|
253
|
+
}
|
|
254
|
+
const { code } = await callbackPromise;
|
|
255
|
+
// Exchange code for tokens
|
|
256
|
+
const tokens = await this.exchangeCodeForTokens(code, pkce.codeVerifier);
|
|
257
|
+
await this.saveTokens(tokens);
|
|
258
|
+
console.log('Authentication successful!');
|
|
259
|
+
return tokens;
|
|
260
|
+
}
|
|
261
|
+
async getValidAccessToken() {
|
|
262
|
+
const tokens = await this.authenticate();
|
|
263
|
+
return tokens.access_token;
|
|
264
|
+
}
|
|
265
|
+
async getStoredTokens() {
|
|
266
|
+
return await this.loadTokens();
|
|
267
|
+
}
|
|
268
|
+
async clearTokens() {
|
|
269
|
+
try {
|
|
270
|
+
await fs.unlink(TOKEN_FILE_PATH);
|
|
271
|
+
console.log('Authentication tokens cleared');
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
// File doesn't exist, which is fine
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAUpB,MAAM,gBAAgB,GAAG,yDAAyD,CAAC;AACnF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAE1E,MAAM,OAAO,UAAU;IACb,QAAQ,CAAS;IACjB,YAAY,CAAU;IACtB,WAAW,CAAS;IACpB,MAAM,CAAW;IACjB,qBAAqB,GAAgC,IAAI,CAAC;IAElE,YACE,QAAgB,EAChB,YAAqB,EACrB,WAAW,GAAG,gCAAgC,EAC9C,MAAM,GAAG;QACP,iBAAiB;QACjB,YAAY;QACZ,aAAa;QACb,aAAa;QACb,cAAc;QACd,gBAAgB;QAChB,iBAAiB;QACjB,eAAe;KAChB;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,qBAAqB;QAC3B,MAAM,YAAY,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC;aACvC,MAAM,CAAC,YAAY,CAAC;aACpB,MAAM,CAAC,WAAW,CAAC,CAAC;QAEvB,OAAO;YACL,YAAY;YACZ,aAAa;YACb,mBAAmB,EAAE,MAAM;SAC5B,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAAC,IAAmB,EAAE,KAAc;QAClE,MAAM,MAAM,GAAwB;YAClC,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,YAAY,EAAE,IAAI,CAAC,WAAW;YAC9B,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5B,aAAa,EAAE,MAAM;YACrB,cAAc,EAAE,IAAI,CAAC,aAAa;YAClC,qBAAqB,EAAE,IAAI,CAAC,mBAAmB;YAC/C,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;SACxB,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,IAAY,EACZ,YAAoB;QAEpB,MAAM,MAAM,GAAwB;YAClC,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9D,IAAI;YACJ,aAAa,EAAE,YAAY;YAC3B,UAAU,EAAE,oBAAoB;YAChC,YAAY,EAAE,IAAI,CAAC,WAAW;SAC/B,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,gBAAgB,QAAQ,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;gBACnD,QAAQ,EAAE,kBAAkB;aAC7B;YACD,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC,WAAW,CAC1C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAClE,CAAC;SACH,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAkB,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,iBAAiB,IAAI,eAAe,EAAE,CAAC,CAAC;QACjH,CAAC;QAED,MAAM,MAAM,GAAG,IAAmB,CAAC;QACnC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QAE5D,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,YAAoB;QACnD,MAAM,MAAM,GAAuB;YACjC,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9D,aAAa,EAAE,YAAY;YAC3B,UAAU,EAAE,eAAe;SAC5B,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,gBAAgB,QAAQ,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;gBACnD,QAAQ,EAAE,kBAAkB;aAC7B;YACD,IAAI,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC,WAAW,CAC1C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAClE,CAAC;SACH,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAkB,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,iBAAiB,IAAI,eAAe,EAAE,CAAC,CAAC;QAChH,CAAC;QAED,MAAM,MAAM,GAAG,IAAmB,CAAC;QACnC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QAE5D,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,MAAmB;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,aAAsB;QACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC5C,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBACrC,+BAA+B;oBAC/B,IAAI,QAAQ,EAAE,CAAC;wBACb,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;wBACpD,GAAG,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC;wBACvG,OAAO;oBACT,CAAC;oBAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;oBACtD,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAE5C,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,YAAY,KAAK,eAAe,aAAa,EAAE,CAAC,CAAC;oBAEtH,IAAI,KAAK,EAAE,CAAC;wBACV,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;wBACpD,GAAG,CAAC,GAAG,CAAC,mCAAmC,KAAK,MAAM,CAAC,CAAC;wBACxD,QAAQ,GAAG,IAAI,CAAC;wBAChB,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC;wBAC3C,OAAO;oBACT,CAAC;oBAED,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;wBACpD,GAAG,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;wBAC/D,QAAQ,GAAG,IAAI,CAAC;wBAChB,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;wBACpD,OAAO;oBACT,CAAC;oBAED,IAAI,aAAa,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;wBAC7C,OAAO,CAAC,KAAK,CAAC,+BAA+B,aAAa,iBAAiB,KAAK,GAAG,CAAC,CAAC;wBACrF,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;wBACpD,GAAG,CAAC,GAAG,CAAC,uDAAuD,aAAa,UAAU,KAAK,MAAM,CAAC,CAAC;wBACnG,QAAQ,GAAG,IAAI,CAAC;wBAChB,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,IAAI,KAAK,CAAC,sCAAsC,aAAa,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC;wBACxF,OAAO;oBACT,CAAC;oBAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;oBACzF,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;gBACvB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,iCAAiC;YACjC,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,wEAAwE;QACxE,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACpC,CAAC;QAED,iDAAiD;QACjD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE1D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC;YAChD,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,mDAAmD;YACnD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,kCAAkC;QAClC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/C,IAAI,cAAc,IAAI,cAAc,CAAC,UAAU,IAAI,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC1F,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,4CAA4C;QAC5C,IAAI,cAAc,EAAE,aAAa,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;gBACpF,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;gBACvC,OAAO,eAAe,CAAC;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE3D,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QAExD,8CAA8C;QAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAExD,yCAAyC;QACzC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,MAAM,OAAO,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;QAE7F,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACtF,6EAA6E;YAC7E,iFAAiF;YACjF,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC9B,6EAA6E;YAC/E,CAAC,CAAC,CAAC;YACH,cAAc,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0DAA0D;QAC5D,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAe,CAAC;QAEvC,2BAA2B;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACzE,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE9B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,OAAO,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oCAAoC;QACtC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { RateLimitStatus, RateLimitConfig } from './types.js';
|
|
2
|
+
export declare class MuralRateLimiter {
|
|
3
|
+
private config;
|
|
4
|
+
private state;
|
|
5
|
+
constructor(config?: Partial<RateLimitConfig>);
|
|
6
|
+
private createBucket;
|
|
7
|
+
private loadState;
|
|
8
|
+
private saveState;
|
|
9
|
+
private refillBucket;
|
|
10
|
+
private canConsume;
|
|
11
|
+
private consume;
|
|
12
|
+
private getWaitTime;
|
|
13
|
+
canMakeRequest(): Promise<{
|
|
14
|
+
allowed: boolean;
|
|
15
|
+
waitTimeMs?: number;
|
|
16
|
+
reason?: string;
|
|
17
|
+
}>;
|
|
18
|
+
consumeRequest(): Promise<boolean>;
|
|
19
|
+
getRateLimitStatus(): Promise<RateLimitStatus>;
|
|
20
|
+
waitForAvailability(maxWaitMs?: number): Promise<boolean>;
|
|
21
|
+
reset(): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAmC,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIpG,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAAiB;gBAElB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAe7C,OAAO,CAAC,YAAY;YAUN,SAAS;YAgBT,SAAS;IAUvB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,WAAW;IAWb,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BrF,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAelC,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC;IAuB9C,mBAAmB,CAAC,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAehE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAe7B"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
const RATE_LIMIT_FILE_PATH = path.join(os.homedir(), '.mural-mcp-rate-limit.json');
|
|
5
|
+
export class MuralRateLimiter {
|
|
6
|
+
config;
|
|
7
|
+
state;
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.config = {
|
|
10
|
+
userRequestsPerSecond: config?.userRequestsPerSecond ?? 25,
|
|
11
|
+
appRequestsPerMinute: config?.appRequestsPerMinute ?? 10000,
|
|
12
|
+
persistState: config?.persistState ?? true,
|
|
13
|
+
...config
|
|
14
|
+
};
|
|
15
|
+
this.state = {
|
|
16
|
+
userBucket: this.createBucket(this.config.userRequestsPerSecond, 1000), // 1 second window
|
|
17
|
+
appBucket: this.createBucket(this.config.appRequestsPerMinute, 60000), // 60 second window
|
|
18
|
+
lastUpdated: Date.now()
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
createBucket(capacity, refillIntervalMs) {
|
|
22
|
+
return {
|
|
23
|
+
capacity,
|
|
24
|
+
tokens: capacity,
|
|
25
|
+
refillRate: capacity / (refillIntervalMs / 1000), // tokens per second
|
|
26
|
+
lastRefill: Date.now(),
|
|
27
|
+
refillIntervalMs
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async loadState() {
|
|
31
|
+
if (!this.config.persistState)
|
|
32
|
+
return;
|
|
33
|
+
try {
|
|
34
|
+
const data = await fs.readFile(RATE_LIMIT_FILE_PATH, 'utf-8');
|
|
35
|
+
const savedState = JSON.parse(data);
|
|
36
|
+
// Only use saved state if it's recent (within 5 minutes)
|
|
37
|
+
if (Date.now() - savedState.lastUpdated < 300000) {
|
|
38
|
+
this.state = savedState;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
// File doesn't exist or is invalid, use default state
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async saveState() {
|
|
46
|
+
if (!this.config.persistState)
|
|
47
|
+
return;
|
|
48
|
+
try {
|
|
49
|
+
await fs.writeFile(RATE_LIMIT_FILE_PATH, JSON.stringify(this.state, null, 2));
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.warn('Failed to save rate limit state:', error);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
refillBucket(bucket) {
|
|
56
|
+
const now = Date.now();
|
|
57
|
+
const timePassed = now - bucket.lastRefill;
|
|
58
|
+
if (timePassed > 0) {
|
|
59
|
+
const tokensToAdd = Math.floor((timePassed / 1000) * bucket.refillRate);
|
|
60
|
+
bucket.tokens = Math.min(bucket.capacity, bucket.tokens + tokensToAdd);
|
|
61
|
+
bucket.lastRefill = now;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
canConsume(bucket, tokens = 1) {
|
|
65
|
+
this.refillBucket(bucket);
|
|
66
|
+
return bucket.tokens >= tokens;
|
|
67
|
+
}
|
|
68
|
+
consume(bucket, tokens = 1) {
|
|
69
|
+
if (!this.canConsume(bucket, tokens)) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
bucket.tokens -= tokens;
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
getWaitTime(bucket, tokens = 1) {
|
|
76
|
+
this.refillBucket(bucket);
|
|
77
|
+
if (bucket.tokens >= tokens) {
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
const tokensNeeded = tokens - bucket.tokens;
|
|
81
|
+
return Math.ceil((tokensNeeded / bucket.refillRate) * 1000);
|
|
82
|
+
}
|
|
83
|
+
async canMakeRequest() {
|
|
84
|
+
await this.loadState();
|
|
85
|
+
// Check user bucket first (stricter limit)
|
|
86
|
+
if (!this.canConsume(this.state.userBucket, 1)) {
|
|
87
|
+
const waitTime = this.getWaitTime(this.state.userBucket, 1);
|
|
88
|
+
return {
|
|
89
|
+
allowed: false,
|
|
90
|
+
waitTimeMs: waitTime,
|
|
91
|
+
reason: `User rate limit exceeded (${this.config.userRequestsPerSecond} requests/second)`
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// Check app bucket
|
|
95
|
+
if (!this.canConsume(this.state.appBucket, 1)) {
|
|
96
|
+
const waitTime = this.getWaitTime(this.state.appBucket, 1);
|
|
97
|
+
return {
|
|
98
|
+
allowed: false,
|
|
99
|
+
waitTimeMs: waitTime,
|
|
100
|
+
reason: `Application rate limit exceeded (${this.config.appRequestsPerMinute} requests/minute)`
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return { allowed: true };
|
|
104
|
+
}
|
|
105
|
+
async consumeRequest() {
|
|
106
|
+
await this.loadState();
|
|
107
|
+
const userConsumed = this.consume(this.state.userBucket, 1);
|
|
108
|
+
const appConsumed = this.consume(this.state.appBucket, 1);
|
|
109
|
+
if (userConsumed && appConsumed) {
|
|
110
|
+
this.state.lastUpdated = Date.now();
|
|
111
|
+
await this.saveState();
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
async getRateLimitStatus() {
|
|
117
|
+
await this.loadState();
|
|
118
|
+
this.refillBucket(this.state.userBucket);
|
|
119
|
+
this.refillBucket(this.state.appBucket);
|
|
120
|
+
return {
|
|
121
|
+
user: {
|
|
122
|
+
tokensRemaining: this.state.userBucket.tokens,
|
|
123
|
+
capacity: this.state.userBucket.capacity,
|
|
124
|
+
refillRate: this.state.userBucket.refillRate,
|
|
125
|
+
nextRefillIn: Math.max(0, this.state.userBucket.refillIntervalMs - (Date.now() - this.state.userBucket.lastRefill))
|
|
126
|
+
},
|
|
127
|
+
app: {
|
|
128
|
+
tokensRemaining: this.state.appBucket.tokens,
|
|
129
|
+
capacity: this.state.appBucket.capacity,
|
|
130
|
+
refillRate: this.state.appBucket.refillRate,
|
|
131
|
+
nextRefillIn: Math.max(0, this.state.appBucket.refillIntervalMs - (Date.now() - this.state.appBucket.lastRefill))
|
|
132
|
+
},
|
|
133
|
+
lastUpdated: this.state.lastUpdated
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
async waitForAvailability(maxWaitMs = 30000) {
|
|
137
|
+
const checkResult = await this.canMakeRequest();
|
|
138
|
+
if (checkResult.allowed) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
if (!checkResult.waitTimeMs || checkResult.waitTimeMs > maxWaitMs) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
await new Promise(resolve => setTimeout(resolve, checkResult.waitTimeMs));
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
async reset() {
|
|
148
|
+
this.state = {
|
|
149
|
+
userBucket: this.createBucket(this.config.userRequestsPerSecond, 1000),
|
|
150
|
+
appBucket: this.createBucket(this.config.appRequestsPerMinute, 60000),
|
|
151
|
+
lastUpdated: Date.now()
|
|
152
|
+
};
|
|
153
|
+
if (this.config.persistState) {
|
|
154
|
+
try {
|
|
155
|
+
await fs.unlink(RATE_LIMIT_FILE_PATH);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
// File doesn't exist, which is fine
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"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"}
|