@warmio/mcp 11.0.9 → 11.0.11
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 +81 -1
- package/dist/hosted-http.d.ts +11 -0
- package/dist/hosted-http.d.ts.map +1 -0
- package/dist/hosted-http.js +263 -0
- package/dist/hosted-http.js.map +1 -0
- package/dist/hosted-write-client.d.ts +8 -0
- package/dist/hosted-write-client.d.ts.map +1 -0
- package/dist/hosted-write-client.js +2 -0
- package/dist/hosted-write-client.js.map +1 -0
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +2 -3
- package/dist/install.js.map +1 -1
- package/dist/load-env.d.ts +1 -1
- package/dist/load-env.d.ts.map +1 -1
- package/dist/load-env.js +3 -2
- package/dist/load-env.js.map +1 -1
- package/dist/public-server.d.ts +25 -0
- package/dist/public-server.d.ts.map +1 -0
- package/dist/public-server.js +164 -0
- package/dist/public-server.js.map +1 -0
- package/dist/server.d.ts +66 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +68 -35
- package/dist/server.js.map +1 -1
- package/dist/warm-api-client.d.ts +6 -3
- package/dist/warm-api-client.d.ts.map +1 -1
- package/dist/warm-api-client.js +14 -3
- package/dist/warm-api-client.js.map +1 -1
- package/package.json +10 -5
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { HOSTED_MCP_WRITE_PERMISSION, describeHostedOperationMcpOutputSchema, findTransactionsMcpOutputSchema, getOperationStatusMcpOutputSchema, hostedWriteMcpToolDefinitions, hostedWriteMcpToolDescriptors, invokeHostedOperationMcpOutputSchema, normalizeGetTransactionsMcpInput, projectPublicMcpFinancialContext, projectPublicMcpTransactions, publicMcpToolDefinitions, publicMcpToolDescriptors, publicMcpToolPermissionContract, } from '@warmio/contracts/mcp';
|
|
3
|
+
import { registerTools, structuredResult, WarmApiError, } from './server.js';
|
|
4
|
+
export class HostedApiResultError extends Error {
|
|
5
|
+
status;
|
|
6
|
+
clientMessage;
|
|
7
|
+
constructor(status, clientMessage = null) {
|
|
8
|
+
super('Request failed');
|
|
9
|
+
this.name = 'HostedApiResultError';
|
|
10
|
+
this.status = status;
|
|
11
|
+
this.clientMessage = clientMessage;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function publicErrorStatus(error) {
|
|
15
|
+
if (error instanceof WarmApiError)
|
|
16
|
+
return error.status;
|
|
17
|
+
if (error instanceof HostedApiResultError)
|
|
18
|
+
return error.status;
|
|
19
|
+
return 500;
|
|
20
|
+
}
|
|
21
|
+
function publicErrorMessage(status) {
|
|
22
|
+
if (status === 400 || status === 422)
|
|
23
|
+
return 'Invalid request';
|
|
24
|
+
if (status === 401)
|
|
25
|
+
return 'Unauthorized';
|
|
26
|
+
if (status === 403)
|
|
27
|
+
return 'Forbidden';
|
|
28
|
+
if (status === 404)
|
|
29
|
+
return 'Not found';
|
|
30
|
+
if (status === 408 || status === 504)
|
|
31
|
+
return 'Request timed out';
|
|
32
|
+
if (status === 409)
|
|
33
|
+
return 'Conflict';
|
|
34
|
+
if (status === 429)
|
|
35
|
+
return 'Rate limit exceeded';
|
|
36
|
+
if (status >= 500)
|
|
37
|
+
return 'Service unavailable';
|
|
38
|
+
return 'Request failed';
|
|
39
|
+
}
|
|
40
|
+
export class HostedMcpLimitError extends Error {
|
|
41
|
+
constructor(message) {
|
|
42
|
+
super(message);
|
|
43
|
+
this.name = 'HostedMcpLimitError';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function publicToolFailure(error) {
|
|
47
|
+
if (error instanceof HostedMcpLimitError) {
|
|
48
|
+
return structuredResult({ error: error.message }, true);
|
|
49
|
+
}
|
|
50
|
+
const status = publicErrorStatus(error);
|
|
51
|
+
const message = error instanceof HostedApiResultError && error.clientMessage !== null && status < 500
|
|
52
|
+
? error.clientMessage
|
|
53
|
+
: publicErrorMessage(status);
|
|
54
|
+
return structuredResult({ error: message, status }, true);
|
|
55
|
+
}
|
|
56
|
+
function publicCanonicalToolDescriptor(name) {
|
|
57
|
+
const hostedTool = hostedWriteMcpToolDescriptors.find((candidate) => candidate.name === name);
|
|
58
|
+
if (hostedTool)
|
|
59
|
+
return hostedTool;
|
|
60
|
+
const tool = publicMcpToolDescriptors.find((candidate) => candidate.name === name);
|
|
61
|
+
if (!tool)
|
|
62
|
+
throw new Error(`Missing public MCP contract for ${name}.`);
|
|
63
|
+
return tool;
|
|
64
|
+
}
|
|
65
|
+
function publicDescriptor(name) {
|
|
66
|
+
const definition = publicMcpToolDefinitions.find((candidate) => candidate.name === name);
|
|
67
|
+
if (!definition)
|
|
68
|
+
throw new Error(`Missing public MCP contract for ${name}.`);
|
|
69
|
+
return definition;
|
|
70
|
+
}
|
|
71
|
+
function publicReadToolDefinitions(client) {
|
|
72
|
+
return [
|
|
73
|
+
{
|
|
74
|
+
...publicDescriptor('get_financial_context'),
|
|
75
|
+
handler: async () => await client.getFinancialContext(),
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
...publicDescriptor('get_transactions'),
|
|
79
|
+
handler: async (args) => await client.getTransactions(normalizeGetTransactionsMcpInput(args)),
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
}
|
|
83
|
+
function hostedWriteDescriptor(name) {
|
|
84
|
+
const definition = hostedWriteMcpToolDefinitions.find((candidate) => candidate.name === name);
|
|
85
|
+
if (!definition)
|
|
86
|
+
throw new Error(`Missing hosted write MCP contract for ${name}.`);
|
|
87
|
+
return definition;
|
|
88
|
+
}
|
|
89
|
+
function hostedWriteToolHandlers(client) {
|
|
90
|
+
return [
|
|
91
|
+
{
|
|
92
|
+
...hostedWriteDescriptor('find_transactions'),
|
|
93
|
+
hostedWrite: true,
|
|
94
|
+
handler: async (args) => await client.findTransactions(args),
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
...hostedWriteDescriptor('describe_operation'),
|
|
98
|
+
hostedWrite: true,
|
|
99
|
+
handler: async (args) => await client.describeOperation(args),
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
...hostedWriteDescriptor('invoke_operation'),
|
|
103
|
+
hostedWrite: true,
|
|
104
|
+
handler: async (args) => await client.invokeOperation(args),
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
...hostedWriteDescriptor('get_operation_status'),
|
|
108
|
+
hostedWrite: true,
|
|
109
|
+
handler: async (args) => await client.getOperationStatus(args),
|
|
110
|
+
},
|
|
111
|
+
];
|
|
112
|
+
}
|
|
113
|
+
function publicPermissionForTool(name) {
|
|
114
|
+
if (name === 'get_financial_context') {
|
|
115
|
+
return publicMcpToolPermissionContract.byTool.get_financial_context;
|
|
116
|
+
}
|
|
117
|
+
if (name === 'get_transactions') {
|
|
118
|
+
return publicMcpToolPermissionContract.byTool.get_transactions;
|
|
119
|
+
}
|
|
120
|
+
if (name === 'find_transactions' ||
|
|
121
|
+
name === 'describe_operation' ||
|
|
122
|
+
name === 'invoke_operation' ||
|
|
123
|
+
name === 'get_operation_status') {
|
|
124
|
+
return HOSTED_MCP_WRITE_PERMISSION;
|
|
125
|
+
}
|
|
126
|
+
throw new Error('Unsupported public MCP tool.');
|
|
127
|
+
}
|
|
128
|
+
export function createPublicWarmServer(options) {
|
|
129
|
+
const server = new McpServer(options.serverInfo, options.jsonSchemaValidator ? { jsonSchemaValidator: options.jsonSchemaValidator } : undefined);
|
|
130
|
+
const writeTools = (options.allowedPermissions ?? []).includes(HOSTED_MCP_WRITE_PERMISSION)
|
|
131
|
+
? hostedWriteToolHandlers(options.hostedWriteClient)
|
|
132
|
+
: [];
|
|
133
|
+
registerTools(server, [...publicReadToolDefinitions(options.readClient), ...writeTools], {
|
|
134
|
+
authorizationDenied: () => structuredResult({ error: 'Forbidden', status: 403 }, true),
|
|
135
|
+
authorize: (name) => options.authorize(publicPermissionForTool(name)),
|
|
136
|
+
contractForTool: (name) => publicCanonicalToolDescriptor(name),
|
|
137
|
+
invalidArgumentsMessage: () => 'Invalid arguments',
|
|
138
|
+
projectResult: (name, result) => {
|
|
139
|
+
if (name === 'get_financial_context')
|
|
140
|
+
return projectPublicMcpFinancialContext(result);
|
|
141
|
+
if (name === 'get_transactions')
|
|
142
|
+
return projectPublicMcpTransactions(result);
|
|
143
|
+
if (name === 'find_transactions')
|
|
144
|
+
return findTransactionsMcpOutputSchema.parse(result);
|
|
145
|
+
if (name === 'describe_operation')
|
|
146
|
+
return describeHostedOperationMcpOutputSchema.parse(result);
|
|
147
|
+
if (name === 'invoke_operation')
|
|
148
|
+
return invokeHostedOperationMcpOutputSchema.parse(result);
|
|
149
|
+
if (name === 'get_operation_status')
|
|
150
|
+
return getOperationStatusMcpOutputSchema.parse(result);
|
|
151
|
+
throw new Error('Unsupported public MCP tool.');
|
|
152
|
+
},
|
|
153
|
+
toolResultIsError: (name, result) => {
|
|
154
|
+
if (name !== 'invoke_operation')
|
|
155
|
+
return false;
|
|
156
|
+
const parsed = invokeHostedOperationMcpOutputSchema.safeParse(result);
|
|
157
|
+
return parsed.success && parsed.data.execution_status === 'failed';
|
|
158
|
+
},
|
|
159
|
+
toolFailure: publicToolFailure,
|
|
160
|
+
unknownToolMessage: () => 'Unknown tool',
|
|
161
|
+
});
|
|
162
|
+
return server;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=public-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,6 +1,9 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import { type Implementation } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
-
import {
|
|
2
|
+
import { type Implementation, type ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
import { z, type ZodRawShape } from 'zod';
|
|
4
|
+
import { describeHostedOperationMcpInputSchema, describeHostedOperationMcpOutputSchema, findTransactionsMcpInputSchema, findTransactionsMcpOutputSchema, getOperationStatusMcpInputSchema, getOperationStatusMcpOutputSchema, getTransactionsMcpInputSchema, invokeHostedOperationMcpInputSchema, invokeHostedOperationMcpOutputSchema, privateMcpToolDefinitions, publicMcpFinancialContextSchema, publicMcpLatestTransactionsSchema, publicMcpTransactionMonthSchema, type HostedWriteMcpToolDescriptor, type PublicMcpToolDescriptor, type PrivateMcpToolDescriptor } from '@warmio/contracts/mcp';
|
|
5
|
+
import { type ReadOnlyWarmApiClient, type ReadOnlyWarmApiClientOptions, type WarmApiClient, type WarmApiClientOptions } from './warm-api-client.js';
|
|
6
|
+
import type { GetTransactionsOutput } from './warm-api-client.js';
|
|
4
7
|
export { createReadOnlyWarmApiClient, createWarmApiClient, getConfiguredApiKey, WarmApiError, } from './warm-api-client.js';
|
|
5
8
|
export type { ReadOnlyWarmApiClientOptions, WarmApiClientOptions } from './warm-api-client.js';
|
|
6
9
|
export interface WarmServerOptions extends WarmApiClientOptions {
|
|
@@ -13,6 +16,67 @@ export declare const WARM_SERVER_INFO: {
|
|
|
13
16
|
name: string;
|
|
14
17
|
version: string;
|
|
15
18
|
};
|
|
19
|
+
type WarmToolDefinitionBase = {
|
|
20
|
+
annotations?: ToolAnnotations;
|
|
21
|
+
description: string;
|
|
22
|
+
inputShape: ZodRawShape;
|
|
23
|
+
title?: string;
|
|
24
|
+
};
|
|
25
|
+
type NonHostedWarmToolDefinitionBase = WarmToolDefinitionBase & {
|
|
26
|
+
hostedWrite?: false;
|
|
27
|
+
};
|
|
28
|
+
declare const dynamicMcpToolArgumentsSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
29
|
+
type DynamicMcpToolArguments = z.infer<typeof dynamicMcpToolArgumentsSchema>;
|
|
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 describeHostedOperationMcpOutputSchema> | z.infer<typeof invokeHostedOperationMcpOutputSchema> | z.infer<typeof getOperationStatusMcpOutputSchema>;
|
|
32
|
+
export type WarmToolDefinition = (NonHostedWarmToolDefinitionBase & {
|
|
33
|
+
name: 'get_transactions';
|
|
34
|
+
handler: (args: GetTransactionsMcpInput) => Promise<WarmToolResult>;
|
|
35
|
+
}) | (WarmToolDefinitionBase & {
|
|
36
|
+
name: 'find_transactions';
|
|
37
|
+
hostedWrite: true;
|
|
38
|
+
handler: (args: z.infer<typeof findTransactionsMcpInputSchema>) => Promise<WarmToolResult>;
|
|
39
|
+
}) | (WarmToolDefinitionBase & {
|
|
40
|
+
name: 'describe_operation';
|
|
41
|
+
hostedWrite: true;
|
|
42
|
+
handler: (args: z.infer<typeof describeHostedOperationMcpInputSchema>) => Promise<WarmToolResult>;
|
|
43
|
+
}) | (WarmToolDefinitionBase & {
|
|
44
|
+
name: 'invoke_operation';
|
|
45
|
+
hostedWrite: true;
|
|
46
|
+
handler: (args: z.infer<typeof invokeHostedOperationMcpInputSchema>) => Promise<WarmToolResult>;
|
|
47
|
+
}) | (WarmToolDefinitionBase & {
|
|
48
|
+
name: 'get_operation_status';
|
|
49
|
+
hostedWrite: true;
|
|
50
|
+
handler: (args: z.infer<typeof getOperationStatusMcpInputSchema>) => Promise<WarmToolResult>;
|
|
51
|
+
}) | (NonHostedWarmToolDefinitionBase & {
|
|
52
|
+
name: Exclude<(typeof privateMcpToolDefinitions)[number]['name'], 'get_transactions'>;
|
|
53
|
+
handler: (args: DynamicMcpToolArguments) => Promise<WarmToolResult>;
|
|
54
|
+
});
|
|
55
|
+
type McpContractDescriptor = PrivateMcpToolDescriptor | PublicMcpToolDescriptor | HostedWriteMcpToolDescriptor;
|
|
56
|
+
type ToolRegistrationOptions = {
|
|
57
|
+
authorize?: (name: WarmToolDefinition['name']) => boolean | Promise<boolean>;
|
|
58
|
+
authorizationDenied?: () => ReturnType<typeof structuredResult>;
|
|
59
|
+
contractForTool?: (name: WarmToolDefinition['name']) => McpContractDescriptor;
|
|
60
|
+
invalidArgumentsMessage?: (name: WarmToolDefinition['name']) => string;
|
|
61
|
+
projectResult?: (name: WarmToolDefinition['name'], result: WarmToolResult) => WarmToolResult;
|
|
62
|
+
toolResultIsError?: (name: WarmToolDefinition['name'], result: WarmToolResult) => boolean;
|
|
63
|
+
toolFailure?: (error: Error) => ReturnType<typeof structuredResult>;
|
|
64
|
+
unknownToolMessage?: (name: string) => string;
|
|
65
|
+
};
|
|
66
|
+
export declare function structuredResult(value: object, isError?: boolean): {
|
|
67
|
+
content: {
|
|
68
|
+
type: 'text';
|
|
69
|
+
text: string;
|
|
70
|
+
}[];
|
|
71
|
+
isError: boolean;
|
|
72
|
+
} | {
|
|
73
|
+
content: {
|
|
74
|
+
type: 'text';
|
|
75
|
+
text: string;
|
|
76
|
+
}[];
|
|
77
|
+
structuredContent: object;
|
|
78
|
+
};
|
|
79
|
+
export declare function registerTools(server: McpServer, tools: WarmToolDefinition[], options?: ToolRegistrationOptions): void;
|
|
16
80
|
/** Full API-key MCP server with read and automation tools. */
|
|
17
81
|
export declare function createWarmServer(options?: WarmServerOptions): McpServer;
|
|
18
82
|
/** JWT-only MCP server for Warm Chat. It never reads or falls back to an API key. */
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -1,26 +1,18 @@
|
|
|
1
|
-
import * as fs from 'node:fs';
|
|
2
1
|
/* oxlint-disable anti-slop/no-shape-in-symbol-names -- inputShape and ZodRawShape are canonical MCP/Zod contract terms. */
|
|
3
2
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
4
3
|
import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from '@modelcontextprotocol/sdk/types.js';
|
|
5
4
|
import { z } from 'zod';
|
|
6
|
-
import { getTransactionsMcpInputSchema, normalizeGetTransactionsMcpInput, privateMcpToolDefinitions, privateMcpToolDescriptors, } from '@warmio/contracts/mcp';
|
|
5
|
+
import { describeHostedOperationMcpInputSchema, findTransactionsMcpInputSchema, getOperationStatusMcpInputSchema, getTransactionsMcpInputSchema, invokeHostedOperationMcpInputSchema, normalizeGetTransactionsMcpInput, privateMcpToolDefinitions, privateMcpToolDescriptors, WARM_MCP_PACKAGE_VERSION, } from '@warmio/contracts/mcp';
|
|
7
6
|
import { automationInputSchema } from '@warmio/contracts/schemas';
|
|
8
7
|
import { createReadOnlyWarmApiClient, createWarmApiClient, WarmApiError, } from './warm-api-client.js';
|
|
9
8
|
export { createReadOnlyWarmApiClient, createWarmApiClient, getConfiguredApiKey, WarmApiError, } from './warm-api-client.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version || '0.0.0');
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
return '0.0.0';
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
export const WARM_SERVER_INFO = { name: 'warm', version: packageVersion() };
|
|
9
|
+
export const WARM_SERVER_INFO = {
|
|
10
|
+
name: 'warm',
|
|
11
|
+
version: WARM_MCP_PACKAGE_VERSION,
|
|
12
|
+
};
|
|
13
|
+
const dynamicMcpToolArgumentsSchema = z.record(z.string(), z.unknown());
|
|
22
14
|
// oxlint-disable-next-line anti-slop/no-object-parameters -- MCP structured content requires a JSON object result.
|
|
23
|
-
function structuredResult(value, isError = false) {
|
|
15
|
+
export function structuredResult(value, isError = false) {
|
|
24
16
|
return {
|
|
25
17
|
content: [{ type: 'text', text: JSON.stringify(value) }],
|
|
26
18
|
...(isError ? { isError: true } : { structuredContent: value }),
|
|
@@ -45,8 +37,43 @@ function canonicalToolDescriptor(name) {
|
|
|
45
37
|
throw new Error(`Missing MCP contract for ${name}.`);
|
|
46
38
|
return tool;
|
|
47
39
|
}
|
|
48
|
-
function
|
|
49
|
-
const
|
|
40
|
+
async function parseHostedToolArguments(schema, args, name, options) {
|
|
41
|
+
const parsed = await schema.safeParseAsync(args ?? {});
|
|
42
|
+
if (!parsed.success) {
|
|
43
|
+
throw new McpError(ErrorCode.InvalidParams, options.invalidArgumentsMessage?.(name) ??
|
|
44
|
+
`Invalid arguments for tool ${name}: ${parsed.error.message}`);
|
|
45
|
+
}
|
|
46
|
+
return parsed.data;
|
|
47
|
+
}
|
|
48
|
+
async function invokeHostedWriteTool(tool, args, options, invoke) {
|
|
49
|
+
if (tool.name === 'find_transactions') {
|
|
50
|
+
const parsed = await parseHostedToolArguments(findTransactionsMcpInputSchema, args, tool.name, options);
|
|
51
|
+
return await invoke(tool.name, () => tool.handler(parsed));
|
|
52
|
+
}
|
|
53
|
+
if (tool.name === 'describe_operation') {
|
|
54
|
+
const parsed = await parseHostedToolArguments(describeHostedOperationMcpInputSchema, args, tool.name, options);
|
|
55
|
+
return await invoke(tool.name, () => tool.handler(parsed));
|
|
56
|
+
}
|
|
57
|
+
if (tool.name === 'invoke_operation') {
|
|
58
|
+
const parsed = await parseHostedToolArguments(invokeHostedOperationMcpInputSchema, args, tool.name, options);
|
|
59
|
+
return await invoke(tool.name, () => tool.handler(parsed));
|
|
60
|
+
}
|
|
61
|
+
const parsed = await parseHostedToolArguments(getOperationStatusMcpInputSchema, args, tool.name, options);
|
|
62
|
+
return await invoke(tool.name, () => tool.handler(parsed));
|
|
63
|
+
}
|
|
64
|
+
async function authorizeToolCall(tool, options) {
|
|
65
|
+
if (!options.authorize)
|
|
66
|
+
return null;
|
|
67
|
+
try {
|
|
68
|
+
if (await options.authorize(tool.name))
|
|
69
|
+
return null;
|
|
70
|
+
return options.authorizationDenied?.() ?? structuredResult({ error: 'Forbidden' }, true);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
return (options.toolFailure ?? toolFailure)(error instanceof Error ? error : new Error('Request failed'));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function mcpOutputSchema(outputSchema) {
|
|
50
77
|
return 'type' in outputSchema && outputSchema.type === 'object'
|
|
51
78
|
? outputSchema
|
|
52
79
|
: { ...outputSchema, type: 'object' };
|
|
@@ -82,57 +109,63 @@ function automationToolDefinitions(client) {
|
|
|
82
109
|
},
|
|
83
110
|
];
|
|
84
111
|
}
|
|
85
|
-
function registerTools(server, tools) {
|
|
112
|
+
export function registerTools(server, tools, options = {}) {
|
|
86
113
|
server.server.registerCapabilities({ tools: { listChanged: true } });
|
|
87
114
|
server.server.setRequestHandler(ListToolsRequestSchema, () => ({
|
|
88
115
|
tools: tools.map((tool) => {
|
|
89
|
-
const
|
|
116
|
+
const contract = options.contractForTool?.(tool.name) ?? canonicalToolDescriptor(tool.name);
|
|
117
|
+
const inputSchema = contract.input_schema;
|
|
90
118
|
if (!isMcpToolInputSchema(inputSchema)) {
|
|
91
119
|
throw new Error(`Invalid MCP input schema for ${tool.name}.`);
|
|
92
120
|
}
|
|
93
|
-
|
|
121
|
+
const listedTool = {
|
|
94
122
|
annotations: tool.annotations,
|
|
95
123
|
description: tool.description,
|
|
96
124
|
inputSchema,
|
|
97
|
-
outputSchema: mcpOutputSchema(
|
|
125
|
+
outputSchema: mcpOutputSchema(contract.output_schema),
|
|
98
126
|
name: tool.name,
|
|
99
127
|
};
|
|
128
|
+
return 'title' in contract ? { ...listedTool, title: contract.title } : listedTool;
|
|
100
129
|
}),
|
|
101
130
|
}));
|
|
102
131
|
server.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
103
132
|
const tool = tools.find((candidate) => candidate.name === request.params.name);
|
|
104
133
|
if (!tool)
|
|
105
|
-
throw new McpError(ErrorCode.InvalidParams, `Tool ${request.params.name} not found`);
|
|
134
|
+
throw new McpError(ErrorCode.InvalidParams, options.unknownToolMessage?.(request.params.name) ?? `Tool ${request.params.name} not found`);
|
|
106
135
|
const invoke = async (name, handler) => {
|
|
107
136
|
try {
|
|
108
137
|
const result = await handler();
|
|
109
|
-
const
|
|
110
|
-
|
|
138
|
+
const output = options.projectResult?.(name, result) ?? result;
|
|
139
|
+
const invokeStatus = z.object({ status: z.number() }).safeParse(output);
|
|
140
|
+
const isError = options.toolResultIsError?.(name, output) ??
|
|
141
|
+
(name === 'invoke_operation' && invokeStatus.success && invokeStatus.data.status >= 400);
|
|
142
|
+
return structuredResult(output, isError);
|
|
111
143
|
}
|
|
112
144
|
catch (error) {
|
|
113
|
-
return toolFailure(error);
|
|
145
|
+
return (options.toolFailure ?? toolFailure)(error instanceof Error ? error : new Error('Request failed'));
|
|
114
146
|
}
|
|
115
147
|
};
|
|
148
|
+
const denied = await authorizeToolCall(tool, options);
|
|
149
|
+
if (denied !== null)
|
|
150
|
+
return denied;
|
|
116
151
|
if (tool.name === 'get_transactions') {
|
|
117
152
|
const parsed = await getTransactionsMcpInputSchema.safeParseAsync(request.params.arguments ?? {});
|
|
118
153
|
if (!parsed.success)
|
|
119
|
-
throw new McpError(ErrorCode.InvalidParams,
|
|
154
|
+
throw new McpError(ErrorCode.InvalidParams, options.invalidArgumentsMessage?.(tool.name) ??
|
|
155
|
+
`Invalid arguments for tool ${tool.name}: ${parsed.error.message}`);
|
|
120
156
|
return await invoke(tool.name, () => tool.handler(parsed.data));
|
|
121
157
|
}
|
|
158
|
+
if (tool.hostedWrite === true) {
|
|
159
|
+
return await invokeHostedWriteTool(tool, request.params.arguments, options, invoke);
|
|
160
|
+
}
|
|
122
161
|
const parsed = await z
|
|
123
162
|
.object(tool.inputShape)
|
|
124
163
|
.strict()
|
|
125
164
|
.safeParseAsync(request.params.arguments ?? {});
|
|
126
165
|
if (!parsed.success)
|
|
127
|
-
throw new McpError(ErrorCode.InvalidParams,
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
const invokeStatus = z.object({ status: z.number() }).safeParse(result);
|
|
131
|
-
return structuredResult(result, tool.name === 'invoke_operation' && invokeStatus.success && invokeStatus.data.status >= 400);
|
|
132
|
-
}
|
|
133
|
-
catch (error) {
|
|
134
|
-
return toolFailure(error);
|
|
135
|
-
}
|
|
166
|
+
throw new McpError(ErrorCode.InvalidParams, options.invalidArgumentsMessage?.(tool.name) ??
|
|
167
|
+
`Invalid arguments for tool ${tool.name}: ${parsed.error.message}`);
|
|
168
|
+
return await invoke(tool.name, () => tool.handler(parsed.data));
|
|
136
169
|
});
|
|
137
170
|
}
|
|
138
171
|
/** Full API-key MCP server with read and automation tools. */
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { BANK_LOGIN_CAPACITY_EXCEEDED_CODE } from '@warmio/contracts/api';
|
|
2
|
+
import { latestTransactionsMcpOutputSchema, transactionMonthMcpOutputSchema, transactionPeriodsMcpOutputSchema } from '@warmio/contracts/mcp';
|
|
1
3
|
import type { normalizeGetTransactionsMcpInput } from '@warmio/contracts/mcp';
|
|
2
|
-
import
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import type { AutomationInput, AutomationOperation, FinancialContext, FinancialContextMeta, FinancialContextTransactionsRequest } from '@warmio/contracts/types';
|
|
3
6
|
export type { AutomationInput, AutomationOperation, FinancialContext, FinancialContextMeta, FinancialContextTransactionsRequest, LatestTransactions, TransactionMonth, } from '@warmio/contracts/types';
|
|
4
7
|
export type FinancialContextMonth = Extract<FinancialContextTransactionsRequest, {
|
|
5
8
|
month: string;
|
|
@@ -14,7 +17,7 @@ export interface ReadOnlyWarmApiClientOptions extends Omit<WarmApiClientOptions,
|
|
|
14
17
|
accessTokenResolver: () => string | null;
|
|
15
18
|
}
|
|
16
19
|
export type GetTransactionsInput = ReturnType<typeof normalizeGetTransactionsMcpInput>;
|
|
17
|
-
export type GetTransactionsOutput =
|
|
20
|
+
export type GetTransactionsOutput = z.infer<typeof transactionMonthMcpOutputSchema> | z.infer<typeof latestTransactionsMcpOutputSchema> | z.infer<typeof transactionPeriodsMcpOutputSchema>;
|
|
18
21
|
export type AutomationOperationDescription = AutomationOperation & {
|
|
19
22
|
input_schema: Record<string, unknown>;
|
|
20
23
|
};
|
|
@@ -60,7 +63,7 @@ export declare class WarmApiError extends Error {
|
|
|
60
63
|
get headers(): Record<string, string>;
|
|
61
64
|
get status(): number;
|
|
62
65
|
}
|
|
63
|
-
export
|
|
66
|
+
export { BANK_LOGIN_CAPACITY_EXCEEDED_CODE };
|
|
64
67
|
export declare function createWarmApiClient(options?: WarmApiClientOptions): WarmApiClient;
|
|
65
68
|
export declare function createReadOnlyWarmApiClient(options: ReadOnlyWarmApiClientOptions): ReadOnlyWarmApiClient;
|
|
66
69
|
//# sourceMappingURL=warm-api-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warm-api-client.d.ts","sourceRoot":"","sources":["../src/warm-api-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"warm-api-client.d.ts","sourceRoot":"","sources":["../src/warm-api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/warm-api-client.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { BANK_LOGIN_CAPACITY_EXCEEDED_CODE } from '@warmio/contracts/api';
|
|
1
2
|
import { API_ORIGIN, apiEndpointManifest } from '@warmio/contracts/api';
|
|
2
3
|
import { automationInvocationResponseSchema, automationOperationDescriptionResponseSchema, automationOperationSearchResponseSchema, financialContextMetaSchema, financialContextSchema, latestTransactionsSchema, transactionMonthSchema, } from '@warmio/contracts/schemas';
|
|
3
|
-
import { WARM_MCP_CREDENTIALS, WARM_MCP_INSTALLER_COMMAND } from '@warmio/contracts/mcp';
|
|
4
|
+
import { transactionPeriodsMcpOutputSchema, WARM_MCP_CREDENTIALS, WARM_MCP_INSTALLER_COMMAND, } from '@warmio/contracts/mcp';
|
|
4
5
|
import { z } from 'zod';
|
|
5
6
|
import { getWarmApiKeyPath, readConfigFile } from './config-paths.js';
|
|
6
7
|
export const API_URL = API_ORIGIN;
|
|
@@ -77,7 +78,7 @@ const describeOperationResponseParser = {
|
|
|
77
78
|
const invokeOperationResponseParser = {
|
|
78
79
|
parse: parseInvokeOperationResponse,
|
|
79
80
|
};
|
|
80
|
-
export
|
|
81
|
+
export { BANK_LOGIN_CAPACITY_EXCEEDED_CODE };
|
|
81
82
|
const MESSAGE_BY_ERROR_CODE = {
|
|
82
83
|
[BANK_LOGIN_CAPACITY_EXCEEDED_CODE]: 'Your Warm product is locked because you have more bank logins than your plan includes. Remove a bank login or change your plan to restore access.',
|
|
83
84
|
};
|
|
@@ -146,7 +147,17 @@ function createReadOnlyClient(request) {
|
|
|
146
147
|
return {
|
|
147
148
|
getFinancialContext: () => request({ endpoint: endpointFor('getFinancialContext') }, financialContextSchema),
|
|
148
149
|
getFinancialContextMeta: () => request({ endpoint: endpointFor('getFinancialContextMeta') }, financialContextMetaSchema),
|
|
149
|
-
getTransactions: (input) => {
|
|
150
|
+
getTransactions: async (input) => {
|
|
151
|
+
if ('periods' in input) {
|
|
152
|
+
const periods = [];
|
|
153
|
+
for (const month of input.periods) {
|
|
154
|
+
periods.push(await request({
|
|
155
|
+
endpoint: endpointFor('getFinancialContextTransactions'),
|
|
156
|
+
query: { month },
|
|
157
|
+
}, transactionMonthSchema));
|
|
158
|
+
}
|
|
159
|
+
return transactionPeriodsMcpOutputSchema.parse({ periods });
|
|
160
|
+
}
|
|
150
161
|
if ('month' in input) {
|
|
151
162
|
return request({
|
|
152
163
|
endpoint: endpointFor('getFinancialContextTransactions'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warm-api-client.js","sourceRoot":"","sources":["../src/warm-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EACL,kCAAkC,EAClC,4CAA4C,EAC5C,uCAAuC,EACvC,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,
|
|
1
|
+
{"version":3,"file":"warm-api-client.js","sourceRoot":"","sources":["../src/warm-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EACL,kCAAkC,EAClC,4CAA4C,EAC5C,uCAAuC,EACvC,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAGL,iCAAiC,EACjC,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAmEtE,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAC;AAElC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CACnC,mBAAmB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAU,CAAC,CACvF,CAAC;AAEF,SAAS,WAAW,CAAC,WAA2B;IAC9C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;IAC7E,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC;AAC1F,IAAI,YAAuC,CAAC;AAE5C,MAAM,UAAU,mBAAmB;IACjC,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IACpD,YAAY;QACV,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC7F,OAAO,YAAY,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,YAAY,GAAG,SAAS,CAAC;AAC3B,CAAC;AAQD,MAAM,OAAO,YAAa,SAAQ,KAAK;IAG1B,QAAQ;IAFnB,YACE,OAAe,EACN,QAAkC;QAE3C,KAAK,CAAC,OAAO,CAAC,CAAC;wBAFN,QAAQ;QAGjB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;IAED,0IAA0I;IAC1I,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;CACF;AAaD,SAAS,aAAa,CAAC,SAAiB;IACtC,OAAO,WAAW,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,MAAM,CAAC;AAC1E,CAAC;AACD,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CACrC,KAAmE;IAEnE,MAAM,MAAM,GAAG,4CAA4C,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzE,MAAM,MAAM,GAA4B,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IACxE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,4BAA4B,CACnC,KAAyD;IAEzD,MAAM,MAAM,GAAG,kCAAkC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC;AAID,MAAM,+BAA+B,GAA4C;IAC/E,KAAK,EAAE,8BAA8B;CACtC,CAAC;AACF,MAAM,6BAA6B,GAA0C;IAC3E,KAAK,EAAE,4BAA4B;CACpC,CAAC;AAIF,OAAO,EAAE,iCAAiC,EAAE,CAAC;AAE7C,MAAM,qBAAqB,GAA0B;IACnD,CAAC,iCAAiC,CAAC,EACjC,mJAAmJ;CACtJ,CAAC;AAEF,SAAS,iBAAiB,CAAC,QAAkC;IAC3D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;QAC5B,CAAC,GAAG,EAAE,kDAAkD,CAAC;QACzD,CAAC,GAAG,EAAE,6CAA6C,CAAC;QACpD,CAAC,GAAG,EAAE,kDAAkD,CAAC;KAC1D,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,CAAC;SAChB,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IACjC,MAAM,WAAW,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,OAAO,IAAI,YAAY,CACrB,WAAW;QACT,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/C,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClC,SAAS,EAAE,KAAK;QAChB,8BAA8B,QAAQ,CAAC,MAAM,EAAE,EACjD,QAAQ,CACT,CAAC;AACJ,CAAC;AACD,SAAS,aAAa,CACpB,qBAA4C,EAC5C,OAAqD;IAKrD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC;IACzC,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,IAAI,KAAK,CAAC;IACjE,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,kBAAkB,CAAC;IAExE,OAAO,KAAK,EACV,KAAqB,EACrB,cAAyC,EACrB,EAAE;QACtB,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK;YACR,MAAM,IAAI,KAAK,CACb,qCAAqC,0BAA0B,aAAa,oBAAoB,CAAC,SAAS,GAAG,CAC9G,CAAC;QACJ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1D,IAAI,KAAK;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI;YACxB,CAAC,CAAC;gBACE,MAAM,EAAE,kBAAkB;gBAC1B,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,kBAAkB;aACnC;YACH,CAAC,CAAC;gBACE,MAAM,EAAE,kBAAkB;gBAC1B,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC,CAAC;QACN,MAAM,WAAW,GAAgB;YAC/B,OAAO;YACP,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC;SACxC,CAAC;QACF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACpC,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG;YAClB,IAAI;YACJ,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvD,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACvD,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAGuB;IAEvB,OAAO;QACL,mBAAmB,EAAE,GAAG,EAAE,CACxB,OAAO,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,qBAAqB,CAAC,EAAE,EAAE,sBAAsB,CAAC;QACnF,uBAAuB,EAAE,GAAG,EAAE,CAC5B,OAAO,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,yBAAyB,CAAC,EAAE,EAAE,0BAA0B,CAAC;QAC3F,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/B,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAuB,EAAE,CAAC;gBACvC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAClC,OAAO,CAAC,IAAI,CACV,MAAM,OAAO,CACX;wBACE,QAAQ,EAAE,WAAW,CAAC,iCAAiC,CAAC;wBACxD,KAAK,EAAE,EAAE,KAAK,EAAE;qBACjB,EACD,sBAAsB,CACvB,CACF,CAAC;gBACJ,CAAC;gBACD,OAAO,iCAAiC,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;YAED,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;gBACrB,OAAO,OAAO,CACZ;oBACE,QAAQ,EAAE,WAAW,CAAC,iCAAiC,CAAC;oBACxD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;iBAC9B,EACD,sBAAsB,CACvB,CAAC;YACJ,CAAC;YAED,OAAO,OAAO,CACZ;gBACE,QAAQ,EAAE,WAAW,CAAC,iCAAiC,CAAC;gBACxD,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;aACvB,EACD,wBAAwB,CACzB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,qBAA4C,EAC5C,OAAqD;IAErD,MAAM,OAAO,GAAG,aAAa,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAC9D,OAAO;QACL,GAAG,oBAAoB,CAAC,OAAO,CAAC;QAChC,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC1B,OAAO,CACL;YACE,QAAQ,EAAE,WAAW,CAAC,kBAAkB,CAAC;YACzC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;SAC7B,EACD,uCAAuC,CACxC;QACH,iBAAiB,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE;YACzC,MAAM,IAAI,GAAG,EAAE,YAAY,EAAE,CAAC;YAC9B,IAAI,KAAK;gBAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1C,OAAO,OAAO,CACZ;gBACE,QAAQ,EAAE,WAAW,CAAC,mBAAmB,CAAC;gBAC1C,MAAM,EAAE,MAAM;gBACd,IAAI;aACL,EACD,+BAA+B,CAChC,CAAC;QACJ,CAAC;QACD,eAAe,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;YACpD,MAAM,IAAI,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YAClD,IAAI,WAAW;gBAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;YACtD,OAAO,OAAO,CACZ;gBACE,QAAQ,EAAE,WAAW,CAAC,iBAAiB,CAAC;gBACxC,MAAM,EAAE,MAAM;gBACd,IAAI;aACL,EACD,6BAA6B,CAC9B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAO,GAAyB,EAAE;IACpE,OAAO,YAAY,CAAC,OAAO,CAAC,cAAc,IAAI,mBAAmB,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,OAAqC;IAErC,OAAO,oBAAoB,CAAC,aAAa,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC;AACnF,CAAC"}
|