@warmio/mcp 11.0.14 → 11.2.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.
- package/README.md +15 -2
- package/dist/cli.js +15 -2
- package/dist/cli.js.map +1 -1
- package/dist/hosted-bridge.d.ts +8 -0
- package/dist/hosted-bridge.d.ts.map +1 -0
- package/dist/hosted-bridge.js +139 -0
- package/dist/hosted-bridge.js.map +1 -0
- package/dist/hosted-http.d.ts +1 -0
- package/dist/hosted-http.d.ts.map +1 -1
- package/dist/hosted-http.js +8 -2
- package/dist/hosted-http.js.map +1 -1
- package/dist/hosted-write-client.d.ts +4 -1
- package/dist/hosted-write-client.d.ts.map +1 -1
- package/dist/oauth-login.d.ts +43 -0
- package/dist/oauth-login.d.ts.map +1 -0
- package/dist/oauth-login.js +324 -0
- package/dist/oauth-login.js.map +1 -0
- package/dist/public-server.d.ts +1 -0
- package/dist/public-server.d.ts.map +1 -1
- package/dist/public-server.js +29 -1
- package/dist/public-server.js.map +1 -1
- package/dist/server.d.ts +7 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +8 -2
- package/dist/server.js.map +1 -1
- package/dist/spending-app.d.ts +11 -0
- package/dist/spending-app.d.ts.map +1 -0
- package/dist/spending-app.js +281 -0
- package/dist/spending-app.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { randomBytes } from 'node:crypto';
|
|
3
|
+
import * as fs from 'node:fs';
|
|
4
|
+
import { createServer } from 'node:http';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
import { auth } from '@modelcontextprotocol/sdk/client/auth.js';
|
|
7
|
+
import { OAuthTokensSchema, } from '@modelcontextprotocol/sdk/shared/auth.js';
|
|
8
|
+
import { API_ORIGIN } from '@warmio/contracts/api';
|
|
9
|
+
import { WARM_MCP_SERVER_COMMAND } from '@warmio/contracts/mcp';
|
|
10
|
+
import { getWarmConfigDir } from './config-paths.js';
|
|
11
|
+
export const WARM_HOSTED_MCP_URL = `${API_ORIGIN}/mcp`;
|
|
12
|
+
export const WARM_CLI_CLIENT_ID = `${API_ORIGIN}/oauth-clients/warm-cli.json`;
|
|
13
|
+
const WARM_LOGIN_COMMAND = WARM_MCP_SERVER_COMMAND.replace(/ mcp$/u, ' login');
|
|
14
|
+
const LOGIN_TIMEOUT_MS = 5 * 60 * 1000;
|
|
15
|
+
const CALLBACK_PATH = '/callback';
|
|
16
|
+
const LOCK_STALE_MS = 30_000;
|
|
17
|
+
const LOCK_WAIT_MS = 100;
|
|
18
|
+
const LOCK_GIVE_UP_MS = 45_000;
|
|
19
|
+
const REFRESH_TIMEOUT_MS = 20_000;
|
|
20
|
+
const REVOKE_TIMEOUT_MS = 10_000;
|
|
21
|
+
export function getWarmOAuthTokenPath() {
|
|
22
|
+
return path.join(getWarmConfigDir(), 'oauth_tokens.json');
|
|
23
|
+
}
|
|
24
|
+
export function readWarmOAuthTokens() {
|
|
25
|
+
let content;
|
|
26
|
+
try {
|
|
27
|
+
content = fs.readFileSync(getWarmOAuthTokenPath(), 'utf8');
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const parsed = OAuthTokensSchema.safeParse(JSON.parse(content));
|
|
34
|
+
return parsed.success ? parsed.data : undefined;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function writeWarmOAuthTokens(tokens) {
|
|
41
|
+
const target = getWarmOAuthTokenPath();
|
|
42
|
+
fs.mkdirSync(path.dirname(target), { recursive: true, mode: 0o700 });
|
|
43
|
+
const temporary = `${target}.${process.pid}.${randomBytes(6).toString('hex')}.tmp`;
|
|
44
|
+
fs.writeFileSync(temporary, `${JSON.stringify(tokens)}\n`, { mode: 0o600 });
|
|
45
|
+
fs.renameSync(temporary, target);
|
|
46
|
+
}
|
|
47
|
+
function deleteWarmOAuthTokens() {
|
|
48
|
+
fs.rmSync(getWarmOAuthTokenPath(), { force: true });
|
|
49
|
+
}
|
|
50
|
+
function delay(milliseconds) {
|
|
51
|
+
return new Promise((resolve) => setTimeout(resolve, milliseconds));
|
|
52
|
+
}
|
|
53
|
+
function isAlreadyExistsError(error) {
|
|
54
|
+
return error instanceof Error && 'code' in error && error.code === 'EEXIST';
|
|
55
|
+
}
|
|
56
|
+
function tryAcquireTokenLock(lockPath) {
|
|
57
|
+
try {
|
|
58
|
+
fs.closeSync(fs.openSync(lockPath, 'wx', 0o600));
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (!isAlreadyExistsError(error))
|
|
63
|
+
throw error;
|
|
64
|
+
try {
|
|
65
|
+
if (Date.now() - fs.statSync(lockPath).mtimeMs > LOCK_STALE_MS)
|
|
66
|
+
fs.rmSync(lockPath, { force: true });
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function withWarmOAuthTokenLock(work) {
|
|
75
|
+
const lockPath = `${getWarmOAuthTokenPath()}.lock`;
|
|
76
|
+
fs.mkdirSync(path.dirname(lockPath), { recursive: true, mode: 0o700 });
|
|
77
|
+
const giveUpAt = Date.now() + LOCK_GIVE_UP_MS;
|
|
78
|
+
while (!tryAcquireTokenLock(lockPath)) {
|
|
79
|
+
if (Date.now() > giveUpAt)
|
|
80
|
+
throw new Error(`Warm sign-in is busy. Remove ${lockPath} and try again.`);
|
|
81
|
+
await delay(LOCK_WAIT_MS);
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
return await work();
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
fs.rmSync(lockPath, { force: true });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function revokeWarmRefreshToken(refreshToken) {
|
|
91
|
+
try {
|
|
92
|
+
const response = await fetch(`${API_ORIGIN}/oauth/token`, {
|
|
93
|
+
method: 'POST',
|
|
94
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
95
|
+
body: new URLSearchParams({
|
|
96
|
+
client_id: WARM_CLI_CLIENT_ID,
|
|
97
|
+
token: refreshToken,
|
|
98
|
+
token_type_hint: 'refresh_token',
|
|
99
|
+
}).toString(),
|
|
100
|
+
signal: AbortSignal.timeout(REVOKE_TIMEOUT_MS),
|
|
101
|
+
});
|
|
102
|
+
return response.ok;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export class WarmLoginRequiredError extends Error {
|
|
109
|
+
constructor() {
|
|
110
|
+
super(`Warm sign-in is missing or expired. Run "${WARM_LOGIN_COMMAND}" and try again.`);
|
|
111
|
+
this.name = 'WarmLoginRequiredError';
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export class WarmCliOAuthProvider {
|
|
115
|
+
options;
|
|
116
|
+
clientMetadataUrl = WARM_CLI_CLIENT_ID;
|
|
117
|
+
verifier;
|
|
118
|
+
memoryTokens;
|
|
119
|
+
lastReadRefreshToken;
|
|
120
|
+
expectedState = randomBytes(24).toString('base64url');
|
|
121
|
+
constructor(options = {}) {
|
|
122
|
+
this.options = options;
|
|
123
|
+
}
|
|
124
|
+
get redirectUrl() {
|
|
125
|
+
return this.options.redirectUrl ?? `http://127.0.0.1${CALLBACK_PATH}`;
|
|
126
|
+
}
|
|
127
|
+
get clientMetadata() {
|
|
128
|
+
return {
|
|
129
|
+
client_name: 'Warm CLI',
|
|
130
|
+
redirect_uris: [this.redirectUrl],
|
|
131
|
+
grant_types: ['authorization_code', 'refresh_token'],
|
|
132
|
+
response_types: ['code'],
|
|
133
|
+
token_endpoint_auth_method: 'none',
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
state() {
|
|
137
|
+
return this.expectedState;
|
|
138
|
+
}
|
|
139
|
+
clientInformation() {
|
|
140
|
+
return { client_id: WARM_CLI_CLIENT_ID };
|
|
141
|
+
}
|
|
142
|
+
tokens() {
|
|
143
|
+
if (this.options.inMemory === true)
|
|
144
|
+
return this.memoryTokens;
|
|
145
|
+
const tokens = readWarmOAuthTokens();
|
|
146
|
+
this.lastReadRefreshToken = tokens?.refresh_token;
|
|
147
|
+
return tokens;
|
|
148
|
+
}
|
|
149
|
+
saveTokens(tokens) {
|
|
150
|
+
if (this.options.inMemory === true) {
|
|
151
|
+
this.memoryTokens = tokens;
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
writeWarmOAuthTokens(tokens);
|
|
155
|
+
}
|
|
156
|
+
redirectToAuthorization(authorizationUrl) {
|
|
157
|
+
if (this.options.onAuthorizationUrl === undefined)
|
|
158
|
+
throw new WarmLoginRequiredError();
|
|
159
|
+
this.options.onAuthorizationUrl(authorizationUrl);
|
|
160
|
+
}
|
|
161
|
+
saveCodeVerifier(codeVerifier) {
|
|
162
|
+
this.verifier = codeVerifier;
|
|
163
|
+
}
|
|
164
|
+
codeVerifier() {
|
|
165
|
+
if (this.verifier === undefined)
|
|
166
|
+
throw new WarmLoginRequiredError();
|
|
167
|
+
return this.verifier;
|
|
168
|
+
}
|
|
169
|
+
invalidateCredentials(scope) {
|
|
170
|
+
if (scope === 'all' || scope === 'tokens')
|
|
171
|
+
this.invalidateTokens();
|
|
172
|
+
if (scope === 'all' || scope === 'verifier')
|
|
173
|
+
this.verifier = undefined;
|
|
174
|
+
}
|
|
175
|
+
invalidateTokens() {
|
|
176
|
+
if (this.options.inMemory === true) {
|
|
177
|
+
this.memoryTokens = undefined;
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (readWarmOAuthTokens()?.refresh_token === this.lastReadRefreshToken)
|
|
181
|
+
deleteWarmOAuthTokens();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
let refreshInFlight;
|
|
185
|
+
export function refreshWarmOAuthTokens(provider, failedAccessToken, fetchImplementation) {
|
|
186
|
+
refreshInFlight ??= withWarmOAuthTokenLock(async () => {
|
|
187
|
+
const current = readWarmOAuthTokens();
|
|
188
|
+
if (current !== undefined && current.access_token !== failedAccessToken)
|
|
189
|
+
return;
|
|
190
|
+
const refreshSignal = AbortSignal.timeout(REFRESH_TIMEOUT_MS);
|
|
191
|
+
const result = await auth(provider, {
|
|
192
|
+
serverUrl: WARM_HOSTED_MCP_URL,
|
|
193
|
+
fetchFn: (input, init) => fetchImplementation(input, { ...init, signal: refreshSignal }),
|
|
194
|
+
});
|
|
195
|
+
if (result !== 'AUTHORIZED')
|
|
196
|
+
throw new WarmLoginRequiredError();
|
|
197
|
+
}).finally(() => {
|
|
198
|
+
refreshInFlight = undefined;
|
|
199
|
+
});
|
|
200
|
+
return refreshInFlight;
|
|
201
|
+
}
|
|
202
|
+
function openInBrowser(url) {
|
|
203
|
+
const [command, args] = process.platform === 'darwin'
|
|
204
|
+
? ['open', [url]]
|
|
205
|
+
: process.platform === 'win32'
|
|
206
|
+
? ['rundll32', ['url.dll,FileProtocolHandler', url]]
|
|
207
|
+
: ['xdg-open', [url]];
|
|
208
|
+
try {
|
|
209
|
+
const child = spawn(command, args, { detached: true, stdio: 'ignore' });
|
|
210
|
+
child.on('error', () => undefined);
|
|
211
|
+
child.unref();
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function listenOnLoopback(server) {
|
|
218
|
+
return new Promise((resolve, reject) => {
|
|
219
|
+
server.once('error', reject);
|
|
220
|
+
server.listen(0, '127.0.0.1', () => {
|
|
221
|
+
const address = server.address();
|
|
222
|
+
if (address === null || typeof address === 'string') {
|
|
223
|
+
reject(new Error('Could not open a local sign-in port.'));
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
resolve(address.port);
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
function waitForCallback(server) {
|
|
231
|
+
let timer;
|
|
232
|
+
const result = new Promise((resolve, reject) => {
|
|
233
|
+
timer = setTimeout(() => {
|
|
234
|
+
reject(new Error('Sign-in timed out. Run the login command again.'));
|
|
235
|
+
}, LOGIN_TIMEOUT_MS);
|
|
236
|
+
server.on('request', (request, response) => {
|
|
237
|
+
const url = new URL(request.url ?? '/', 'http://127.0.0.1');
|
|
238
|
+
if (url.pathname !== CALLBACK_PATH) {
|
|
239
|
+
response.writeHead(404).end();
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const code = url.searchParams.get('code');
|
|
243
|
+
const failed = code === null;
|
|
244
|
+
response.writeHead(failed ? 400 : 200, {
|
|
245
|
+
'Content-Type': 'text/html; charset=utf-8',
|
|
246
|
+
'Cache-Control': 'no-store',
|
|
247
|
+
});
|
|
248
|
+
response.end(failed
|
|
249
|
+
? '<!doctype html><title>Warm</title><p>Sign-in was not completed. Return to your terminal.</p>'
|
|
250
|
+
: '<!doctype html><title>Warm</title><p>Signed in to Warm. You can close this tab.</p>');
|
|
251
|
+
clearTimeout(timer);
|
|
252
|
+
if (failed) {
|
|
253
|
+
reject(new Error(`Sign-in was not completed: ${url.searchParams.get('error') ?? 'no code'}.`));
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
resolve({ code, state: url.searchParams.get('state'), issuer: url.searchParams.get('iss') });
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
result.catch(() => undefined);
|
|
260
|
+
return { result, dispose: () => clearTimeout(timer) };
|
|
261
|
+
}
|
|
262
|
+
export async function login(options = {}) {
|
|
263
|
+
const output = options.output ?? ((message) => console.log(message));
|
|
264
|
+
const openUrl = options.openUrl ?? openInBrowser;
|
|
265
|
+
const server = createServer();
|
|
266
|
+
let callback;
|
|
267
|
+
try {
|
|
268
|
+
const port = await listenOnLoopback(server);
|
|
269
|
+
callback = waitForCallback(server);
|
|
270
|
+
const provider = new WarmCliOAuthProvider({
|
|
271
|
+
inMemory: true,
|
|
272
|
+
redirectUrl: `http://127.0.0.1:${port}${CALLBACK_PATH}`,
|
|
273
|
+
onAuthorizationUrl: (url) => {
|
|
274
|
+
output(`Opening your browser to sign in to Warm. If it does not open, visit:\n${url}`);
|
|
275
|
+
openUrl(url.toString());
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
const started = await auth(provider, { serverUrl: WARM_HOSTED_MCP_URL });
|
|
279
|
+
if (started !== 'REDIRECT')
|
|
280
|
+
throw new Error('Warm did not start a browser sign-in.');
|
|
281
|
+
const result = await callback.result;
|
|
282
|
+
if (result.state !== provider.state())
|
|
283
|
+
throw new Error('Sign-in state did not match.');
|
|
284
|
+
if (result.issuer !== null && result.issuer !== API_ORIGIN) {
|
|
285
|
+
throw new Error('Sign-in came from an unexpected issuer.');
|
|
286
|
+
}
|
|
287
|
+
const finished = await auth(provider, {
|
|
288
|
+
serverUrl: WARM_HOSTED_MCP_URL,
|
|
289
|
+
authorizationCode: result.code,
|
|
290
|
+
});
|
|
291
|
+
const tokens = provider.tokens();
|
|
292
|
+
if (finished !== 'AUTHORIZED' || tokens === undefined) {
|
|
293
|
+
throw new Error('Warm did not return a sign-in token.');
|
|
294
|
+
}
|
|
295
|
+
const previous = await withWarmOAuthTokenLock(async () => {
|
|
296
|
+
const stored = readWarmOAuthTokens();
|
|
297
|
+
writeWarmOAuthTokens(tokens);
|
|
298
|
+
return stored;
|
|
299
|
+
});
|
|
300
|
+
if (previous?.refresh_token !== undefined)
|
|
301
|
+
await revokeWarmRefreshToken(previous.refresh_token);
|
|
302
|
+
output(`Signed in to Warm. Add Warm to your AI app with its MCP server command:\n${WARM_MCP_SERVER_COMMAND}\nFor Claude Code: claude mcp add warm -- ${WARM_MCP_SERVER_COMMAND}`);
|
|
303
|
+
}
|
|
304
|
+
finally {
|
|
305
|
+
callback?.dispose();
|
|
306
|
+
server.close();
|
|
307
|
+
server.closeAllConnections();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
export async function logout(options = {}) {
|
|
311
|
+
const output = options.output ?? ((message) => console.log(message));
|
|
312
|
+
const tokens = await withWarmOAuthTokenLock(async () => {
|
|
313
|
+
const stored = readWarmOAuthTokens();
|
|
314
|
+
deleteWarmOAuthTokens();
|
|
315
|
+
return stored;
|
|
316
|
+
});
|
|
317
|
+
if (tokens?.refresh_token !== undefined &&
|
|
318
|
+
!(await revokeWarmRefreshToken(tokens.refresh_token))) {
|
|
319
|
+
output('Signed out on this computer, but Warm did not confirm the sign-in was revoked. Remove "Warm CLI" from connected apps in Warm Settings.');
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
output('Signed out of Warm.');
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=oauth-login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-login.js","sourceRoot":"","sources":["../src/oauth-login.ts"],"names":[],"mappings":"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"}
|
package/dist/public-server.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { HostedWriteMcpClient } from './hosted-write-client.js';
|
|
|
6
6
|
type HostedMcpPermission = PublicMcpToolPermission | HostedMcpWritePermission;
|
|
7
7
|
export interface PublicWarmServerOptions {
|
|
8
8
|
allowedPermissions?: readonly HostedMcpPermission[];
|
|
9
|
+
appUi?: boolean;
|
|
9
10
|
authorize: (permission: HostedMcpPermission) => boolean | Promise<boolean>;
|
|
10
11
|
hostedWriteClient: HostedWriteMcpClient;
|
|
11
12
|
jsonSchemaValidator?: McpServerOptions['jsonSchemaValidator'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-server.d.ts","sourceRoot":"","sources":["../src/public-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,
|
|
1
|
+
{"version":3,"file":"public-server.d.ts","sourceRoot":"","sources":["../src/public-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAqBL,KAAK,wBAAwB,EAK7B,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AASrE,KAAK,mBAAmB,GAAG,uBAAuB,GAAG,wBAAwB,CAAC;AAE9E,MAAM,WAAW,uBAAuB;IACtC,kBAAkB,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACpD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,UAAU,EAAE,mBAAmB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3E,iBAAiB,EAAE,oBAAoB,CAAC;IACxC,mBAAmB,CAAC,EAAE,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IAC9D,UAAU,EAAE,IAAI,CAAC,qBAAqB,EAAE,qBAAqB,GAAG,iBAAiB,CAAC,CAAC;IACnF,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC,YAAY,MAAM,EAAE,MAAM,EAAE,aAAa,GAAE,MAAM,GAAG,IAAW,EAK9D;CACF;AAoBD,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAiJD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,SAAS,CAsClF"}
|
package/dist/public-server.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import { HOSTED_MCP_WRITE_PERMISSION, describeHostedOperationMcpOutputSchema, findingsResponseSchema, findTransactionsMcpOutputSchema, getOperationStatusMcpOutputSchema, hostedWriteMcpToolDefinitions, hostedWriteMcpToolDescriptors, invokeHostedOperationMcpOutputSchema, normalizeGetTransactionsMcpInput, projectPublicMcpFinancialContext, projectPublicMcpTransactions, publicMcpToolDefinitions, publicMcpToolDescriptors, publicMcpToolPermissionContract, } from '@warmio/contracts/mcp';
|
|
2
|
+
import { HOSTED_MCP_WRITE_PERMISSION, cardBenefitsResponseSchema, describeHostedOperationMcpOutputSchema, findingsResponseSchema, findTransactionsMcpOutputSchema, getOperationStatusMcpOutputSchema, hostedWriteMcpToolDefinitions, hostedWriteMcpToolDescriptors, invokeHostedOperationMcpOutputSchema, normalizeGetTransactionsMcpInput, projectPublicMcpFinancialContext, projectPublicMcpTransactions, publicMcpToolDefinitions, publicMcpToolDescriptors, publicMcpToolPermissionContract, } from '@warmio/contracts/mcp';
|
|
3
3
|
import { registerTools, structuredResult, WarmApiError, } from './server.js';
|
|
4
|
+
import { MCP_APP_MIME_TYPE, SPENDING_APP_TOOL, SPENDING_APP_URI, spendingAppHtml, spendingAppToolMeta, } from './spending-app.js';
|
|
4
5
|
export class HostedApiResultError extends Error {
|
|
5
6
|
status;
|
|
6
7
|
clientMessage;
|
|
@@ -98,6 +99,11 @@ function hostedWriteToolHandlers(client) {
|
|
|
98
99
|
hostedWrite: true,
|
|
99
100
|
handler: async (args) => await client.getFindings(args),
|
|
100
101
|
},
|
|
102
|
+
{
|
|
103
|
+
...hostedWriteDescriptor('get_card_benefits'),
|
|
104
|
+
hostedWrite: true,
|
|
105
|
+
handler: async (args) => await client.getCardBenefits(args),
|
|
106
|
+
},
|
|
101
107
|
{
|
|
102
108
|
...hostedWriteDescriptor('describe_operation'),
|
|
103
109
|
hostedWrite: true,
|
|
@@ -124,6 +130,7 @@ function publicPermissionForTool(name) {
|
|
|
124
130
|
}
|
|
125
131
|
if (name === 'find_transactions' ||
|
|
126
132
|
name === 'get_findings' ||
|
|
133
|
+
name === 'get_card_benefits' ||
|
|
127
134
|
name === 'describe_operation' ||
|
|
128
135
|
name === 'invoke_operation' ||
|
|
129
136
|
name === 'get_operation_status') {
|
|
@@ -131,6 +138,22 @@ function publicPermissionForTool(name) {
|
|
|
131
138
|
}
|
|
132
139
|
throw new Error('Unsupported public MCP tool.');
|
|
133
140
|
}
|
|
141
|
+
function registerSpendingApp(server) {
|
|
142
|
+
server.registerResource('warm-spending', SPENDING_APP_URI, {
|
|
143
|
+
description: 'Spending by category for the transactions Warm returned.',
|
|
144
|
+
mimeType: MCP_APP_MIME_TYPE,
|
|
145
|
+
title: 'Warm spending',
|
|
146
|
+
}, () => ({
|
|
147
|
+
contents: [
|
|
148
|
+
{
|
|
149
|
+
_meta: { ui: { prefersBorder: true } },
|
|
150
|
+
mimeType: MCP_APP_MIME_TYPE,
|
|
151
|
+
text: spendingAppHtml,
|
|
152
|
+
uri: SPENDING_APP_URI,
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
134
157
|
export function createPublicWarmServer(options) {
|
|
135
158
|
const server = new McpServer(options.serverInfo, {
|
|
136
159
|
instructions: 'Warm is a personal finance app that helps people understand their money. Call get_financial_context first to see the financial summary and covered transaction months. If setup is present, no accounts have been added yet; zero totals do not establish the person’s financial position. Direct them to https://app.warm.io/accounts to add accounts. Transaction amounts are positive for expenses/debits and negative for income/credits. If a limit error occurs, wait the time given in the message, or about a minute if none is given, before retrying.',
|
|
@@ -153,6 +176,8 @@ export function createPublicWarmServer(options) {
|
|
|
153
176
|
return findTransactionsMcpOutputSchema.parse(result);
|
|
154
177
|
if (name === 'get_findings')
|
|
155
178
|
return findingsResponseSchema.parse(result);
|
|
179
|
+
if (name === 'get_card_benefits')
|
|
180
|
+
return cardBenefitsResponseSchema.parse(result);
|
|
156
181
|
if (name === 'describe_operation')
|
|
157
182
|
return describeHostedOperationMcpOutputSchema.parse(result);
|
|
158
183
|
if (name === 'invoke_operation')
|
|
@@ -168,8 +193,11 @@ export function createPublicWarmServer(options) {
|
|
|
168
193
|
return parsed.success && parsed.data.execution_status === 'failed';
|
|
169
194
|
},
|
|
170
195
|
toolFailure: publicToolFailure,
|
|
196
|
+
toolMeta: (name) => options.appUi === true && name === SPENDING_APP_TOOL ? spendingAppToolMeta : undefined,
|
|
171
197
|
unknownToolMessage: () => 'Unknown tool',
|
|
172
198
|
});
|
|
199
|
+
if (options.appUi === true)
|
|
200
|
+
registerSpendingApp(server);
|
|
173
201
|
return server;
|
|
174
202
|
}
|
|
175
203
|
//# sourceMappingURL=public-server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-server.js","sourceRoot":"","sources":["../src/public-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,yCAAyC,CAAC;AAG3F,OAAO,EACL,2BAA2B,EAC3B,sCAAsC,EACtC,sBAAsB,
|
|
1
|
+
{"version":3,"file":"public-server.js","sourceRoot":"","sources":["../src/public-server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { type Implementation, type ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';
|
|
3
3
|
import { z, type ZodRawShape } from 'zod';
|
|
4
|
-
import { describeHostedOperationMcpInputSchema, describeHostedOperationMcpOutputSchema, findingsResponseSchema, findTransactionsMcpInputSchema, findTransactionsMcpOutputSchema, getFindingsMcpInputSchema, getOperationStatusMcpInputSchema, getOperationStatusMcpOutputSchema, getTransactionsMcpInputSchema, invokeHostedOperationMcpInputSchema, invokeHostedOperationMcpOutputSchema, privateMcpToolDefinitions, publicMcpFinancialContextSchema, publicMcpLatestTransactionsSchema, publicMcpTransactionMonthSchema, type HostedWriteMcpToolDescriptor, type PublicMcpToolDescriptor, type PrivateMcpToolDescriptor } from '@warmio/contracts/mcp';
|
|
4
|
+
import { describeHostedOperationMcpInputSchema, describeHostedOperationMcpOutputSchema, findingsResponseSchema, cardBenefitsResponseSchema, findTransactionsMcpInputSchema, findTransactionsMcpOutputSchema, getFindingsMcpInputSchema, getCardBenefitsMcpInputSchema, getOperationStatusMcpInputSchema, getOperationStatusMcpOutputSchema, getTransactionsMcpInputSchema, invokeHostedOperationMcpInputSchema, invokeHostedOperationMcpOutputSchema, privateMcpToolDefinitions, publicMcpFinancialContextSchema, publicMcpLatestTransactionsSchema, publicMcpTransactionMonthSchema, publicMcpTransactionPeriodsSchema, type HostedWriteMcpToolDescriptor, type PublicMcpToolDescriptor, type PrivateMcpToolDescriptor } from '@warmio/contracts/mcp';
|
|
5
5
|
import { type ReadOnlyWarmApiClient, type ReadOnlyWarmApiClientOptions, type WarmApiClient, type WarmApiClientOptions } from './warm-api-client.js';
|
|
6
6
|
import type { GetTransactionsOutput } from './warm-api-client.js';
|
|
7
7
|
export { createReadOnlyWarmApiClient, createWarmApiClient, getConfiguredApiKey, WarmApiError, } from './warm-api-client.js';
|
|
@@ -28,7 +28,7 @@ type NonHostedWarmToolDefinitionBase = WarmToolDefinitionBase & {
|
|
|
28
28
|
declare const dynamicMcpToolArgumentsSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
29
29
|
type DynamicMcpToolArguments = z.infer<typeof dynamicMcpToolArgumentsSchema>;
|
|
30
30
|
export type GetTransactionsMcpInput = z.infer<typeof getTransactionsMcpInputSchema>;
|
|
31
|
-
type WarmToolResult = Awaited<ReturnType<ReadOnlyWarmApiClient['getFinancialContext']>> | GetTransactionsOutput | Awaited<ReturnType<WarmApiClient['searchOperations']>> | Awaited<ReturnType<WarmApiClient['describeOperation']>> | Awaited<ReturnType<WarmApiClient['invokeOperation']>> | z.infer<typeof publicMcpFinancialContextSchema> | z.infer<typeof publicMcpLatestTransactionsSchema> | z.infer<typeof publicMcpTransactionMonthSchema> | z.infer<typeof findTransactionsMcpOutputSchema> | z.infer<typeof findingsResponseSchema> | z.infer<typeof describeHostedOperationMcpOutputSchema> | z.infer<typeof invokeHostedOperationMcpOutputSchema> | z.infer<typeof getOperationStatusMcpOutputSchema>;
|
|
31
|
+
type WarmToolResult = Awaited<ReturnType<ReadOnlyWarmApiClient['getFinancialContext']>> | GetTransactionsOutput | Awaited<ReturnType<WarmApiClient['searchOperations']>> | Awaited<ReturnType<WarmApiClient['describeOperation']>> | Awaited<ReturnType<WarmApiClient['invokeOperation']>> | z.infer<typeof publicMcpFinancialContextSchema> | z.infer<typeof publicMcpLatestTransactionsSchema> | z.infer<typeof publicMcpTransactionMonthSchema> | z.infer<typeof publicMcpTransactionPeriodsSchema> | z.infer<typeof findTransactionsMcpOutputSchema> | z.infer<typeof findingsResponseSchema> | z.infer<typeof cardBenefitsResponseSchema> | z.infer<typeof describeHostedOperationMcpOutputSchema> | z.infer<typeof invokeHostedOperationMcpOutputSchema> | z.infer<typeof getOperationStatusMcpOutputSchema>;
|
|
32
32
|
export type WarmToolDefinition = (NonHostedWarmToolDefinitionBase & {
|
|
33
33
|
name: 'get_transactions';
|
|
34
34
|
handler: (args: GetTransactionsMcpInput) => Promise<WarmToolResult>;
|
|
@@ -40,6 +40,10 @@ export type WarmToolDefinition = (NonHostedWarmToolDefinitionBase & {
|
|
|
40
40
|
name: 'get_findings';
|
|
41
41
|
hostedWrite: true;
|
|
42
42
|
handler: (args: z.infer<typeof getFindingsMcpInputSchema>) => Promise<WarmToolResult>;
|
|
43
|
+
}) | (WarmToolDefinitionBase & {
|
|
44
|
+
name: 'get_card_benefits';
|
|
45
|
+
hostedWrite: true;
|
|
46
|
+
handler: (args: z.infer<typeof getCardBenefitsMcpInputSchema>) => Promise<WarmToolResult>;
|
|
43
47
|
}) | (WarmToolDefinitionBase & {
|
|
44
48
|
name: 'describe_operation';
|
|
45
49
|
hostedWrite: true;
|
|
@@ -65,6 +69,7 @@ type ToolRegistrationOptions = {
|
|
|
65
69
|
projectResult?: (name: WarmToolDefinition['name'], result: WarmToolResult) => WarmToolResult;
|
|
66
70
|
toolResultIsError?: (name: WarmToolDefinition['name'], result: WarmToolResult) => boolean;
|
|
67
71
|
toolFailure?: (error: Error) => ReturnType<typeof structuredResult>;
|
|
72
|
+
toolMeta?: (name: WarmToolDefinition['name']) => Record<string, unknown> | undefined;
|
|
68
73
|
unknownToolMessage?: (name: string) => string;
|
|
69
74
|
};
|
|
70
75
|
export declare function structuredResult(value: object, isError?: boolean): {
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAML,KAAK,cAAc,EAEnB,KAAK,eAAe,EACrB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EACL,qCAAqC,EACrC,sCAAsC,EACtC,sBAAsB,EACtB,8BAA8B,EAC9B,+BAA+B,EAC/B,yBAAyB,EACzB,gCAAgC,EAChC,iCAAiC,EACjC,6BAA6B,EAC7B,mCAAmC,EACnC,oCAAoC,EAEpC,yBAAyB,EAEzB,+BAA+B,EAC/B,iCAAiC,EACjC,+BAA+B,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from '@modelcontextprotocol/sdk/types.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import { describeHostedOperationMcpInputSchema, findTransactionsMcpInputSchema, getFindingsMcpInputSchema, getOperationStatusMcpInputSchema, getTransactionsMcpInputSchema, invokeHostedOperationMcpInputSchema, normalizeGetTransactionsMcpInput, privateMcpToolDefinitions, privateMcpToolDescriptors, WARM_MCP_PACKAGE_VERSION, } from '@warmio/contracts/mcp';
|
|
4
|
+
import { describeHostedOperationMcpInputSchema, findTransactionsMcpInputSchema, getFindingsMcpInputSchema, getCardBenefitsMcpInputSchema, getOperationStatusMcpInputSchema, getTransactionsMcpInputSchema, invokeHostedOperationMcpInputSchema, normalizeGetTransactionsMcpInput, privateMcpToolDefinitions, privateMcpToolDescriptors, WARM_MCP_PACKAGE_VERSION, } from '@warmio/contracts/mcp';
|
|
5
5
|
import { automationInputSchema } from '@warmio/contracts/schemas';
|
|
6
6
|
import { createReadOnlyWarmApiClient, createWarmApiClient, WarmApiError, } from './warm-api-client.js';
|
|
7
7
|
export { createReadOnlyWarmApiClient, createWarmApiClient, getConfiguredApiKey, WarmApiError, } from './warm-api-client.js';
|
|
@@ -53,6 +53,10 @@ async function invokeHostedWriteTool(tool, args, options, invoke) {
|
|
|
53
53
|
const parsed = await parseHostedToolArguments(getFindingsMcpInputSchema, args, tool.name, options);
|
|
54
54
|
return await invoke(tool.name, () => tool.handler(parsed));
|
|
55
55
|
}
|
|
56
|
+
if (tool.name === 'get_card_benefits') {
|
|
57
|
+
const parsed = await parseHostedToolArguments(getCardBenefitsMcpInputSchema, args, tool.name, options);
|
|
58
|
+
return await invoke(tool.name, () => tool.handler(parsed));
|
|
59
|
+
}
|
|
56
60
|
if (tool.name === 'describe_operation') {
|
|
57
61
|
const parsed = await parseHostedToolArguments(describeHostedOperationMcpInputSchema, args, tool.name, options);
|
|
58
62
|
return await invoke(tool.name, () => tool.handler(parsed));
|
|
@@ -128,7 +132,9 @@ export function registerTools(server, tools, options = {}) {
|
|
|
128
132
|
outputSchema: mcpOutputSchema(contract.output_schema),
|
|
129
133
|
name: tool.name,
|
|
130
134
|
};
|
|
131
|
-
|
|
135
|
+
const meta = options.toolMeta?.(tool.name);
|
|
136
|
+
const withMeta = meta ? { ...listedTool, _meta: meta } : listedTool;
|
|
137
|
+
return 'title' in contract ? { ...withMeta, title: contract.title } : withMeta;
|
|
132
138
|
}),
|
|
133
139
|
}));
|
|
134
140
|
server.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,sBAAsB,EACtB,QAAQ,GAKT,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAoB,MAAM,KAAK,CAAC;AAC1C,OAAO,EACL,qCAAqC,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,sBAAsB,EACtB,QAAQ,GAKT,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAoB,MAAM,KAAK,CAAC;AAC1C,OAAO,EACL,qCAAqC,EAIrC,8BAA8B,EAE9B,yBAAyB,EACzB,6BAA6B,EAC7B,gCAAgC,EAEhC,6BAA6B,EAC7B,mCAAmC,EAEnC,gCAAgC,EAChC,yBAAyB,EACzB,yBAAyB,EAKzB,wBAAwB,GAKzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EAKnB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAU9B,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,wBAAwB;CAClC,CAAC;AASF,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AA+ExE,mHAAmH;AACnH,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,OAAO,GAAG,KAAK;IAC7D,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;KAChE,CAAC;AACJ,CAAC;AAED,yGAAyG;AACzG,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACnG,CAAC;AAGD,SAAS,UAAU,CACjB,IAAU;IAEV,MAAM,UAAU,GAAG,yBAAyB,CAAC,IAAI,CAC/C,CAAC,SAAS,EAAkE,EAAE,CAC5E,SAAS,CAAC,IAAI,KAAK,IAAI,CAC1B,CAAC;IACF,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,GAAG,CAAC,CAAC;IACtE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC3C,MAAM,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACpF,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,GAAG,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,MAAc,EACd,IAA4C,EAC5C,IAA4B,EAC5B,OAAgC;IAEhC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,aAAa,EACvB,OAAO,CAAC,uBAAuB,EAAE,CAAC,IAAI,CAAC;YACrC,8BAA8B,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAChE,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAQD,KAAK,UAAU,qBAAqB,CAClC,IAA+B,EAC/B,IAA4C,EAC5C,OAAgC,EAChC,MAAqB;IAErB,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,8BAA8B,EAC9B,IAAI,EACJ,IAAI,CAAC,IAAI,EACT,OAAO,CACR,CAAC;QACF,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,yBAAyB,EACzB,IAAI,EACJ,IAAI,CAAC,IAAI,EACT,OAAO,CACR,CAAC;QACF,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,6BAA6B,EAC7B,IAAI,EACJ,IAAI,CAAC,IAAI,EACT,OAAO,CACR,CAAC;QACF,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,qCAAqC,EACrC,IAAI,EACJ,IAAI,CAAC,IAAI,EACT,OAAO,CACR,CAAC;QACF,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,mCAAmC,EACnC,IAAI,EACJ,IAAI,CAAC,IAAI,EACT,OAAO,CACR,CAAC;QACF,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC3C,gCAAgC,EAChC,IAAI,EACJ,IAAI,CAAC,IAAI,EACT,OAAO,CACR,CAAC;IACF,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,IAAwB,EACxB,OAAgC;IAEhC,IAAI,CAAC,OAAO,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,CAAC;QACH,IAAI,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACpD,OAAO,OAAO,CAAC,mBAAmB,EAAE,EAAE,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC,CACzC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAC7D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,YAAoD;IAC3E,OAAO,MAAM,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ;QAC7D,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAkE;IAElE,OAAO,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACpD,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA6B;IACxD,OAAO;QACL;YACE,GAAG,UAAU,CAAC,uBAAuB,CAAC;YACtC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,mBAAmB,EAAE;SACxD;QACD;YACE,GAAG,UAAU,CAAC,kBAAkB,CAAC;YACjC,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE,CAC/C,MAAM,MAAM,CAAC,eAAe,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC;SACvE;KACF,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAqB;IACtD,OAAO;QACL;YACE,GAAG,UAAU,CAAC,mBAAmB,CAAC;YAClC,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE,CAC/C,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;SAC5E;QACD;YACE,GAAG,UAAU,CAAC,oBAAoB,CAAC;YACnC,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE,CAC/C,MAAM,MAAM,CAAC,iBAAiB,CAC5B,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EACtC,qBAAqB,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CACtD;SACJ;QACD;YACE,GAAG,UAAU,CAAC,kBAAkB,CAAC;YACjC,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE,CAC/C,MAAM,MAAM,CAAC,eAAe,CAC1B,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EACtC,qBAAqB,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EACrD,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CACxD;SACJ;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAiB,EACjB,KAA2B,EAC3B,OAAO,GAA4B,EAAE;IAErC,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACrE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5F,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC;YAC1C,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,UAAU,GAAG;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW;gBACX,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC;gBACrD,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;YACF,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;YACpE,OAAO,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjF,CAAC,CAAC;KACH,CAAC,CAAC,CAAC;IACJ,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACvE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI;YACP,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,aAAa,EACvB,OAAO,CAAC,kBAAkB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,OAAO,CAAC,MAAM,CAAC,IAAI,YAAY,CAC7F,CAAC;QAEJ,MAAM,MAAM,GAAG,KAAK,EAClB,IAAgC,EAChC,OAAsC,EACtC,EAAE;YACF,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC;gBAC/D,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACxE,MAAM,OAAO,GACX,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;oBACzC,CAAC,IAAI,KAAK,kBAAkB,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;gBAC3F,OAAO,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC,CACzC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAC7D,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QAEnC,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,cAAc,CAC/D,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAC/B,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,OAAO;gBACjB,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,aAAa,EACvB,OAAO,CAAC,uBAAuB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC1C,8BAA8B,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CACrE,CAAC;YACJ,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO,MAAM,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC;aACnB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;aACvB,MAAM,EAAE;aACR,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,OAAO;YACjB,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,aAAa,EACvB,OAAO,CAAC,uBAAuB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1C,8BAA8B,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CACrE,CAAC;QACJ,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAO,GAAsB,EAAE;IAC9D,MAAM,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,UAAU,IAAI,gBAAgB,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAClD,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,CAAC,EAAE,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAkC;IACzE,MAAM,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,UAAU,IAAI,gBAAgB,CAAC,CAAC;IAC7D,aAAa,CAAC,MAAM,EAAE,mBAAmB,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACvF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|