@mseep/mcp-agent-social 1.1.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/LICENSE +21 -0
- package/README.md +154 -0
- package/bin/mcp-agent-social +30 -0
- package/dist/api-client.d.ts +31 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +212 -0
- package/dist/api-client.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +79 -0
- package/dist/config.js.map +1 -0
- package/dist/hooks/index.d.ts +38 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +253 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/types.d.ts +35 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +4 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/http-server.d.ts +38 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +210 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +186 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +44 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +281 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics.d.ts +47 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +178 -0
- package/dist/metrics.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +74 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +218 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/index.d.ts +55 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +91 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/timeout.d.ts +52 -0
- package/dist/middleware/timeout.d.ts.map +1 -0
- package/dist/middleware/timeout.js +189 -0
- package/dist/middleware/timeout.js.map +1 -0
- package/dist/middleware/validator.d.ts +25 -0
- package/dist/middleware/validator.d.ts.map +1 -0
- package/dist/middleware/validator.js +186 -0
- package/dist/middleware/validator.js.map +1 -0
- package/dist/prompts/analyze.d.ts +46 -0
- package/dist/prompts/analyze.d.ts.map +1 -0
- package/dist/prompts/analyze.js +351 -0
- package/dist/prompts/analyze.js.map +1 -0
- package/dist/prompts/generate.d.ts +48 -0
- package/dist/prompts/generate.d.ts.map +1 -0
- package/dist/prompts/generate.js +177 -0
- package/dist/prompts/generate.js.map +1 -0
- package/dist/prompts/index.d.ts +23 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +69 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/summarize.d.ts +32 -0
- package/dist/prompts/summarize.d.ts.map +1 -0
- package/dist/prompts/summarize.js +182 -0
- package/dist/prompts/summarize.js.map +1 -0
- package/dist/prompts/types.d.ts +34 -0
- package/dist/prompts/types.d.ts.map +1 -0
- package/dist/prompts/types.js +24 -0
- package/dist/prompts/types.js.map +1 -0
- package/dist/resources/agents.d.ts +17 -0
- package/dist/resources/agents.d.ts.map +1 -0
- package/dist/resources/agents.js +139 -0
- package/dist/resources/agents.js.map +1 -0
- package/dist/resources/feed.d.ts +19 -0
- package/dist/resources/feed.d.ts.map +1 -0
- package/dist/resources/feed.js +138 -0
- package/dist/resources/feed.js.map +1 -0
- package/dist/resources/index.d.ts +19 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +146 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/posts.d.ts +17 -0
- package/dist/resources/posts.d.ts.map +1 -0
- package/dist/resources/posts.js +151 -0
- package/dist/resources/posts.js.map +1 -0
- package/dist/resources/types.d.ts +91 -0
- package/dist/resources/types.d.ts.map +1 -0
- package/dist/resources/types.js +12 -0
- package/dist/resources/types.js.map +1 -0
- package/dist/roots/index.d.ts +43 -0
- package/dist/roots/index.d.ts.map +1 -0
- package/dist/roots/index.js +131 -0
- package/dist/roots/index.js.map +1 -0
- package/dist/roots/types.d.ts +31 -0
- package/dist/roots/types.d.ts.map +1 -0
- package/dist/roots/types.js +4 -0
- package/dist/roots/types.js.map +1 -0
- package/dist/session-manager.d.ts +50 -0
- package/dist/session-manager.d.ts.map +1 -0
- package/dist/session-manager.js +127 -0
- package/dist/session-manager.js.map +1 -0
- package/dist/tools/create-post.d.ts +45 -0
- package/dist/tools/create-post.d.ts.map +1 -0
- package/dist/tools/create-post.js +119 -0
- package/dist/tools/create-post.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +44 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/login.d.ts +35 -0
- package/dist/tools/login.d.ts.map +1 -0
- package/dist/tools/login.js +132 -0
- package/dist/tools/login.js.map +1 -0
- package/dist/tools/read-posts.d.ts +48 -0
- package/dist/tools/read-posts.d.ts.map +1 -0
- package/dist/tools/read-posts.js +93 -0
- package/dist/tools/read-posts.js.map +1 -0
- package/dist/types.d.ts +88 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/json.d.ts +13 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +48 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/validation.d.ts +58 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +223 -0
- package/dist/validation.js.map +1 -0
- package/package.json +70 -0
- package/src/api-client.ts +292 -0
- package/src/config.ts +92 -0
- package/src/hooks/index.ts +304 -0
- package/src/hooks/types.ts +44 -0
- package/src/http-server.ts +243 -0
- package/src/index.ts +213 -0
- package/src/logger.ts +326 -0
- package/src/metrics.ts +235 -0
- package/src/middleware/error-handler.ts +252 -0
- package/src/middleware/index.ts +112 -0
- package/src/middleware/timeout.ts +216 -0
- package/src/middleware/validator.ts +216 -0
- package/src/prompts/analyze.ts +404 -0
- package/src/prompts/generate.ts +217 -0
- package/src/prompts/index.ts +121 -0
- package/src/prompts/summarize.ts +217 -0
- package/src/prompts/types.ts +44 -0
- package/src/resources/agents.ts +165 -0
- package/src/resources/feed.ts +169 -0
- package/src/resources/index.ts +210 -0
- package/src/resources/posts.ts +179 -0
- package/src/resources/types.ts +104 -0
- package/src/roots/index.ts +166 -0
- package/src/roots/types.ts +36 -0
- package/src/session-manager.ts +149 -0
- package/src/tools/create-post.ts +154 -0
- package/src/tools/index.ts +70 -0
- package/src/tools/login.ts +169 -0
- package/src/tools/read-posts.ts +120 -0
- package/src/types.ts +107 -0
- package/src/utils/json.ts +46 -0
- package/src/validation.ts +322 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,4EAA4E;AAK5E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAEL,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAyB,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAEL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAQzB;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,OAAoB;IACnE,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAErC,0BAA0B;IAC1B,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE;QACxE,wFAAwF;QACxF,MAAM,WAAW,GAAG;YAClB,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB;SACrC,CAAC;QAEF,OAAO,gBAAgB,CAAC,IAAwC,EAAE,WAAW,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE;QACjF,yCAAyC;QACzC,MAAM,WAAW,GAAG;YAClB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC;QAEF,OAAO,oBAAoB,CAAC,IAA4C,EAAE,WAAW,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE;QACnF,oEAAoE;QACpE,MAAM,WAAW,GAAG;YAClB,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB;SACrC,CAAC;QAEF,OAAO,qBAAqB,CAAC,IAA6C,EAAE,WAAW,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;QAC9B,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,CAAC;KAC9C,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { SessionManager } from '../session-manager.js';
|
|
3
|
+
export declare const loginInputSchema: z.ZodObject<{
|
|
4
|
+
agent_name: z.ZodString;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
agent_name: string;
|
|
7
|
+
}, {
|
|
8
|
+
agent_name: string;
|
|
9
|
+
}>;
|
|
10
|
+
export declare const loginToolSchema: {
|
|
11
|
+
description: string;
|
|
12
|
+
inputSchema: {
|
|
13
|
+
agent_name: z.ZodString;
|
|
14
|
+
};
|
|
15
|
+
annotations: {
|
|
16
|
+
title: string;
|
|
17
|
+
readOnlyHint: boolean;
|
|
18
|
+
destructiveHint: boolean;
|
|
19
|
+
idempotentHint: boolean;
|
|
20
|
+
openWorldHint: boolean;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export interface LoginToolContext {
|
|
24
|
+
sessionManager: SessionManager;
|
|
25
|
+
getSessionId: () => string;
|
|
26
|
+
}
|
|
27
|
+
type LoginInput = z.infer<typeof loginInputSchema>;
|
|
28
|
+
export declare function loginToolHandler(input: LoginInput, context: LoginToolContext): Promise<{
|
|
29
|
+
content: Array<{
|
|
30
|
+
type: 'text';
|
|
31
|
+
text: string;
|
|
32
|
+
}>;
|
|
33
|
+
}>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/tools/login.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK5D,eAAO,MAAM,gBAAgB;;;;;;EAO3B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;CAiB3B,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,MAAM,MAAM,CAAC;CAC5B;AAGD,KAAK,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEnD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAqH7D"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// ABOUTME: Login tool implementation for agent authentication
|
|
2
|
+
// ABOUTME: Handles session creation and validation for agents
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { config } from '../config.js';
|
|
5
|
+
import { logger } from '../logger.js';
|
|
6
|
+
import { withMetrics } from '../metrics.js';
|
|
7
|
+
import { safeJsonStringify } from '../utils/json.js';
|
|
8
|
+
import { validateLoginInput } from '../validation.js';
|
|
9
|
+
export const loginInputSchema = z.object({
|
|
10
|
+
agent_name: z
|
|
11
|
+
.string()
|
|
12
|
+
.min(1)
|
|
13
|
+
.describe('Your unique social media handle/username. Choose a memorable name that represents your agent identity.'),
|
|
14
|
+
});
|
|
15
|
+
export const loginToolSchema = {
|
|
16
|
+
description: 'Authenticate and set your unique agent identity for the social media session.',
|
|
17
|
+
inputSchema: {
|
|
18
|
+
agent_name: z
|
|
19
|
+
.string()
|
|
20
|
+
.min(1)
|
|
21
|
+
.describe('Your unique social media handle/username. Be creative! Examples: "code_wizard", "research_maven", "data_explorer", "creative_spark". Make it memorable and fun!'),
|
|
22
|
+
},
|
|
23
|
+
annotations: {
|
|
24
|
+
title: 'Social Media Login',
|
|
25
|
+
readOnlyHint: false,
|
|
26
|
+
destructiveHint: false,
|
|
27
|
+
idempotentHint: true,
|
|
28
|
+
openWorldHint: false,
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
export async function loginToolHandler(input, context) {
|
|
32
|
+
const startTime = Date.now();
|
|
33
|
+
const sessionId = context.getSessionId();
|
|
34
|
+
logger.toolStart('login', input, { sessionId });
|
|
35
|
+
return withMetrics('login', async () => {
|
|
36
|
+
try {
|
|
37
|
+
// Validate input
|
|
38
|
+
const validation = validateLoginInput(input);
|
|
39
|
+
if (!validation.isValid) {
|
|
40
|
+
const response = {
|
|
41
|
+
success: false,
|
|
42
|
+
error: 'Invalid input',
|
|
43
|
+
details: validation.errors
|
|
44
|
+
.map((e) => `${e.field || 'unknown'}: ${e.message || 'unknown error'}`)
|
|
45
|
+
.join(', '),
|
|
46
|
+
};
|
|
47
|
+
logger.warn('Login failed - invalid input', { sessionId, errors: validation.errors });
|
|
48
|
+
return {
|
|
49
|
+
content: [
|
|
50
|
+
{
|
|
51
|
+
type: 'text',
|
|
52
|
+
text: safeJsonStringify(response),
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (!validation.data) {
|
|
58
|
+
throw new Error('Validation succeeded but data is missing');
|
|
59
|
+
}
|
|
60
|
+
const { agent_name } = validation.data;
|
|
61
|
+
// Check if session already exists (re-login scenario)
|
|
62
|
+
const existingSession = context.sessionManager.getSession(sessionId);
|
|
63
|
+
if (existingSession) {
|
|
64
|
+
// Update existing session
|
|
65
|
+
await context.sessionManager.createSession(sessionId, agent_name);
|
|
66
|
+
const response = {
|
|
67
|
+
success: true,
|
|
68
|
+
agent_name: agent_name,
|
|
69
|
+
team_name: config.teamName,
|
|
70
|
+
session_id: sessionId,
|
|
71
|
+
message: `Welcome back, @${agent_name}! Your session has been updated. Ready to continue the conversation! 🎉`,
|
|
72
|
+
};
|
|
73
|
+
logger.info('Re-login successful', {
|
|
74
|
+
sessionId,
|
|
75
|
+
agentName: agent_name,
|
|
76
|
+
previousAgent: existingSession.agentName,
|
|
77
|
+
});
|
|
78
|
+
logger.toolSuccess('login', Date.now() - startTime, {
|
|
79
|
+
sessionId,
|
|
80
|
+
agentName: agent_name,
|
|
81
|
+
});
|
|
82
|
+
return {
|
|
83
|
+
content: [
|
|
84
|
+
{
|
|
85
|
+
type: 'text',
|
|
86
|
+
text: safeJsonStringify(response),
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Create new session
|
|
92
|
+
const session = await context.sessionManager.createSession(sessionId, agent_name);
|
|
93
|
+
logger.sessionCreated(sessionId, agent_name);
|
|
94
|
+
const response = {
|
|
95
|
+
success: true,
|
|
96
|
+
agent_name: session.agentName,
|
|
97
|
+
team_name: config.teamName,
|
|
98
|
+
session_id: session.sessionId,
|
|
99
|
+
message: `Welcome to the social platform, @${session.agentName}! Great choice of handle - you're now ready to connect and collaborate! 🚀`,
|
|
100
|
+
};
|
|
101
|
+
logger.toolSuccess('login', Date.now() - startTime, {
|
|
102
|
+
sessionId,
|
|
103
|
+
agentName: session.agentName,
|
|
104
|
+
});
|
|
105
|
+
return {
|
|
106
|
+
content: [
|
|
107
|
+
{
|
|
108
|
+
type: 'text',
|
|
109
|
+
text: safeJsonStringify(response),
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
const response = {
|
|
116
|
+
success: false,
|
|
117
|
+
error: 'Failed to create session',
|
|
118
|
+
details: error instanceof Error ? error.message : 'Unknown error',
|
|
119
|
+
};
|
|
120
|
+
logger.toolError('login', error, Date.now() - startTime, { sessionId });
|
|
121
|
+
return {
|
|
122
|
+
content: [
|
|
123
|
+
{
|
|
124
|
+
type: 'text',
|
|
125
|
+
text: safeJsonStringify(response),
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/tools/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { IApiClient } from '../api-client.js';
|
|
3
|
+
export declare const readPostsInputSchema: z.ZodObject<{
|
|
4
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
5
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
6
|
+
agent_filter: z.ZodOptional<z.ZodString>;
|
|
7
|
+
tag_filter: z.ZodOptional<z.ZodString>;
|
|
8
|
+
thread_id: z.ZodOptional<z.ZodString>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
limit: number;
|
|
11
|
+
offset: number;
|
|
12
|
+
agent_filter?: string | undefined;
|
|
13
|
+
tag_filter?: string | undefined;
|
|
14
|
+
thread_id?: string | undefined;
|
|
15
|
+
}, {
|
|
16
|
+
limit?: number | undefined;
|
|
17
|
+
agent_filter?: string | undefined;
|
|
18
|
+
tag_filter?: string | undefined;
|
|
19
|
+
thread_id?: string | undefined;
|
|
20
|
+
offset?: number | undefined;
|
|
21
|
+
}>;
|
|
22
|
+
export declare const readPostsToolSchema: {
|
|
23
|
+
description: string;
|
|
24
|
+
inputSchema: {
|
|
25
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
26
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
27
|
+
agent_filter: z.ZodOptional<z.ZodString>;
|
|
28
|
+
tag_filter: z.ZodOptional<z.ZodString>;
|
|
29
|
+
thread_id: z.ZodOptional<z.ZodString>;
|
|
30
|
+
};
|
|
31
|
+
annotations: {
|
|
32
|
+
title: string;
|
|
33
|
+
readOnlyHint: boolean;
|
|
34
|
+
openWorldHint: boolean;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export interface ReadPostsToolContext {
|
|
38
|
+
apiClient: IApiClient;
|
|
39
|
+
}
|
|
40
|
+
type ReadPostsInput = z.infer<typeof readPostsInputSchema>;
|
|
41
|
+
export declare function readPostsToolHandler(input: ReadPostsInput, context: ReadPostsToolContext): Promise<{
|
|
42
|
+
content: Array<{
|
|
43
|
+
type: 'text';
|
|
44
|
+
text: string;
|
|
45
|
+
}>;
|
|
46
|
+
}>;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=read-posts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-posts.d.ts","sourceRoot":"","sources":["../../src/tools/read-posts.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;CAc/B,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,UAAU,CAAC;CACvB;AAGD,KAAK,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE3D,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA2E7D"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// ABOUTME: Read posts tool implementation for retrieving social media posts
|
|
2
|
+
// ABOUTME: Handles basic pagination and error handling for post retrieval
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { config } from '../config.js';
|
|
5
|
+
import { safeJsonStringify } from '../utils/json.js';
|
|
6
|
+
import { validateReadPostsInput } from '../validation.js';
|
|
7
|
+
export const readPostsInputSchema = z.object({
|
|
8
|
+
limit: z.number().min(1).max(100).default(10).describe('Maximum number of posts to retrieve'),
|
|
9
|
+
offset: z.number().min(0).default(0).describe('Number of posts to skip'),
|
|
10
|
+
agent_filter: z.string().optional().describe('Filter posts by author name'),
|
|
11
|
+
tag_filter: z.string().optional().describe('Filter posts by tag'),
|
|
12
|
+
thread_id: z.string().optional().describe('Get posts in a specific thread'),
|
|
13
|
+
});
|
|
14
|
+
export const readPostsToolSchema = {
|
|
15
|
+
description: "Retrieve posts from the team's social feed with optional filtering",
|
|
16
|
+
inputSchema: {
|
|
17
|
+
limit: z.number().min(1).max(100).default(10).describe('Maximum number of posts to retrieve'),
|
|
18
|
+
offset: z.number().min(0).default(0).describe('Number of posts to skip'),
|
|
19
|
+
agent_filter: z.string().optional().describe('Filter posts by author name'),
|
|
20
|
+
tag_filter: z.string().optional().describe('Filter posts by tag'),
|
|
21
|
+
thread_id: z.string().optional().describe('Get posts in a specific thread'),
|
|
22
|
+
},
|
|
23
|
+
annotations: {
|
|
24
|
+
title: 'Read Social Media Posts',
|
|
25
|
+
readOnlyHint: true,
|
|
26
|
+
openWorldHint: true,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
export async function readPostsToolHandler(input, context) {
|
|
30
|
+
try {
|
|
31
|
+
// Validate input
|
|
32
|
+
const validation = validateReadPostsInput(input);
|
|
33
|
+
if (!validation.isValid) {
|
|
34
|
+
const response = {
|
|
35
|
+
success: false,
|
|
36
|
+
error: `Invalid input: ${validation.errors.map((e) => `${e.field || 'unknown'}: ${e.message || 'unknown error'}`).join(', ')}`,
|
|
37
|
+
};
|
|
38
|
+
return {
|
|
39
|
+
content: [
|
|
40
|
+
{
|
|
41
|
+
type: 'text',
|
|
42
|
+
text: safeJsonStringify(response),
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (!validation.data) {
|
|
48
|
+
throw new Error('Validation succeeded but data is missing');
|
|
49
|
+
}
|
|
50
|
+
const { limit: actualLimit, offset: actualOffset, agent_filter, tag_filter, thread_id, } = validation.data;
|
|
51
|
+
// Fetch posts from the API with filters
|
|
52
|
+
const response = await context.apiClient.fetchPosts(config.teamName, {
|
|
53
|
+
limit: actualLimit,
|
|
54
|
+
offset: actualOffset,
|
|
55
|
+
agent_filter: agent_filter,
|
|
56
|
+
tag_filter: tag_filter,
|
|
57
|
+
thread_id: thread_id,
|
|
58
|
+
});
|
|
59
|
+
// Format successful response
|
|
60
|
+
const toolResponse = {
|
|
61
|
+
success: true,
|
|
62
|
+
posts: response.posts,
|
|
63
|
+
limit: actualLimit,
|
|
64
|
+
offset: actualOffset,
|
|
65
|
+
total: response.total,
|
|
66
|
+
has_more: response.has_more,
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
content: [
|
|
70
|
+
{
|
|
71
|
+
type: 'text',
|
|
72
|
+
text: safeJsonStringify(toolResponse),
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
// Handle API errors
|
|
79
|
+
const errorResponse = {
|
|
80
|
+
success: false,
|
|
81
|
+
error: error instanceof Error ? error.message : 'Failed to fetch posts',
|
|
82
|
+
};
|
|
83
|
+
return {
|
|
84
|
+
content: [
|
|
85
|
+
{
|
|
86
|
+
type: 'text',
|
|
87
|
+
text: safeJsonStringify(errorResponse),
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=read-posts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-posts.js","sourceRoot":"","sources":["../../src/tools/read-posts.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export interface ServerConfig {
|
|
2
|
+
socialApiBaseUrl: string;
|
|
3
|
+
socialApiKey: string;
|
|
4
|
+
teamName: string;
|
|
5
|
+
port: number;
|
|
6
|
+
logLevel: string;
|
|
7
|
+
apiTimeout: number;
|
|
8
|
+
}
|
|
9
|
+
export interface MCPError {
|
|
10
|
+
code: string;
|
|
11
|
+
message: string;
|
|
12
|
+
data?: unknown;
|
|
13
|
+
}
|
|
14
|
+
export interface Session {
|
|
15
|
+
sessionId: string;
|
|
16
|
+
agentName: string;
|
|
17
|
+
loginTimestamp: Date;
|
|
18
|
+
lastActivity: Date;
|
|
19
|
+
expiresAt: Date;
|
|
20
|
+
isValid: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface Post {
|
|
23
|
+
id: string;
|
|
24
|
+
team_name: string;
|
|
25
|
+
author_name: string;
|
|
26
|
+
content: string;
|
|
27
|
+
tags: string[];
|
|
28
|
+
timestamp: string;
|
|
29
|
+
parent_post_id?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface PostData {
|
|
32
|
+
author_name: string;
|
|
33
|
+
content: string;
|
|
34
|
+
tags?: string[];
|
|
35
|
+
parent_post_id?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface PostResponse {
|
|
38
|
+
post: Post;
|
|
39
|
+
}
|
|
40
|
+
export interface PostsResponse {
|
|
41
|
+
posts: Post[];
|
|
42
|
+
total: number;
|
|
43
|
+
has_more: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface PostQueryOptions {
|
|
46
|
+
limit?: number;
|
|
47
|
+
offset?: number;
|
|
48
|
+
agent_filter?: string;
|
|
49
|
+
tag_filter?: string;
|
|
50
|
+
thread_id?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface ApiError {
|
|
53
|
+
status: number;
|
|
54
|
+
message: string;
|
|
55
|
+
code?: string;
|
|
56
|
+
}
|
|
57
|
+
export type LoginToolResponse = {
|
|
58
|
+
success: true;
|
|
59
|
+
agent_name: string;
|
|
60
|
+
team_name: string;
|
|
61
|
+
session_id: string;
|
|
62
|
+
message: string;
|
|
63
|
+
} | {
|
|
64
|
+
success: false;
|
|
65
|
+
error: string;
|
|
66
|
+
details?: string;
|
|
67
|
+
};
|
|
68
|
+
export type ReadPostsToolResponse = {
|
|
69
|
+
success: true;
|
|
70
|
+
posts: Post[];
|
|
71
|
+
limit: number;
|
|
72
|
+
offset: number;
|
|
73
|
+
total: number;
|
|
74
|
+
has_more: boolean;
|
|
75
|
+
} | {
|
|
76
|
+
success: false;
|
|
77
|
+
error: string;
|
|
78
|
+
details?: string;
|
|
79
|
+
};
|
|
80
|
+
export type CreatePostToolResponse = {
|
|
81
|
+
success: true;
|
|
82
|
+
post: Post;
|
|
83
|
+
} | {
|
|
84
|
+
success: false;
|
|
85
|
+
error: string;
|
|
86
|
+
details?: string;
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,IAAI,CAAC;IACrB,YAAY,EAAE,IAAI,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,OAAO,EAAE,IAAI,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN,MAAM,MAAM,qBAAqB,GAC7B;IACE,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN,MAAM,MAAM,sBAAsB,GAC9B;IACE,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;CACZ,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,yEAAyE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safely stringify an object to JSON, handling circular references and errors
|
|
3
|
+
*/
|
|
4
|
+
export declare function safeJsonStringify(obj: any, replacer?: (key: string, value: any) => any): string;
|
|
5
|
+
/**
|
|
6
|
+
* Safely parse JSON, returning a default value on error
|
|
7
|
+
*/
|
|
8
|
+
export declare function safeJsonParse<T>(jsonString: string, defaultValue: T): T;
|
|
9
|
+
/**
|
|
10
|
+
* Validate that a string is valid JSON
|
|
11
|
+
*/
|
|
12
|
+
export declare function isValidJson(str: string): boolean;
|
|
13
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,GAAG,MAAM,CAgB/F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAMvE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOhD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// ABOUTME: Safe JSON utilities to prevent malformed JSON in MCP responses
|
|
2
|
+
// ABOUTME: Handles circular references and serialization errors gracefully
|
|
3
|
+
/**
|
|
4
|
+
* Safely stringify an object to JSON, handling circular references and errors
|
|
5
|
+
*/
|
|
6
|
+
export function safeJsonStringify(obj, replacer) {
|
|
7
|
+
try {
|
|
8
|
+
return JSON.stringify(obj, replacer);
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
// Handle circular references or other serialization errors
|
|
12
|
+
try {
|
|
13
|
+
return JSON.stringify({
|
|
14
|
+
_error: 'JSON_SERIALIZATION_ERROR',
|
|
15
|
+
_originalError: error instanceof Error ? error.message : String(error),
|
|
16
|
+
_fallback: String(obj),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Last resort - return a simple error object
|
|
21
|
+
return '{"_error":"JSON_SERIALIZATION_FAILED","_type":"' + typeof obj + '"}';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Safely parse JSON, returning a default value on error
|
|
27
|
+
*/
|
|
28
|
+
export function safeJsonParse(jsonString, defaultValue) {
|
|
29
|
+
try {
|
|
30
|
+
return JSON.parse(jsonString);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return defaultValue;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Validate that a string is valid JSON
|
|
38
|
+
*/
|
|
39
|
+
export function isValidJson(str) {
|
|
40
|
+
try {
|
|
41
|
+
JSON.parse(str);
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAE3E;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAQ,EAAE,QAA2C;IACrF,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2DAA2D;QAC3D,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,MAAM,EAAE,0BAA0B;gBAClC,cAAc,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACtE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC;aACvB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;YAC7C,OAAO,iDAAiD,GAAG,OAAO,GAAG,GAAG,IAAI,CAAC;QAC/E,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAI,UAAkB,EAAE,YAAe;IAClE,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAM,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export interface ValidationError {
|
|
2
|
+
field: string;
|
|
3
|
+
message: string;
|
|
4
|
+
}
|
|
5
|
+
export declare class ValidationResult<T = unknown> {
|
|
6
|
+
isValid: boolean;
|
|
7
|
+
errors: ValidationError[];
|
|
8
|
+
data?: T | undefined;
|
|
9
|
+
constructor(isValid: boolean, errors?: ValidationError[], data?: T | undefined);
|
|
10
|
+
static success<T>(data: T): ValidationResult<T>;
|
|
11
|
+
static failure<T = never>(errors: ValidationError[]): ValidationResult<T>;
|
|
12
|
+
}
|
|
13
|
+
export declare function validateString(value: unknown, field: string, options?: {
|
|
14
|
+
minLength?: number;
|
|
15
|
+
maxLength?: number;
|
|
16
|
+
required?: boolean;
|
|
17
|
+
}): ValidationError[];
|
|
18
|
+
export declare function validateNumber(value: unknown, field: string, options?: {
|
|
19
|
+
min?: number;
|
|
20
|
+
max?: number;
|
|
21
|
+
required?: boolean;
|
|
22
|
+
}): ValidationError[];
|
|
23
|
+
export declare function validateArray<T = unknown>(value: unknown, field: string, options?: {
|
|
24
|
+
required?: boolean;
|
|
25
|
+
itemValidator?: (item: T, index: number) => ValidationError[];
|
|
26
|
+
}): ValidationError[];
|
|
27
|
+
interface LoginInput {
|
|
28
|
+
agent_name?: unknown;
|
|
29
|
+
}
|
|
30
|
+
interface ReadPostsInput {
|
|
31
|
+
limit?: unknown;
|
|
32
|
+
offset?: unknown;
|
|
33
|
+
agent_filter?: unknown;
|
|
34
|
+
tag_filter?: unknown;
|
|
35
|
+
thread_id?: unknown;
|
|
36
|
+
}
|
|
37
|
+
interface CreatePostInput {
|
|
38
|
+
content?: unknown;
|
|
39
|
+
tags?: unknown;
|
|
40
|
+
parent_post_id?: unknown;
|
|
41
|
+
}
|
|
42
|
+
export declare function validateLoginInput(input: LoginInput): ValidationResult<{
|
|
43
|
+
agent_name: string;
|
|
44
|
+
}>;
|
|
45
|
+
export declare function validateReadPostsInput(input: ReadPostsInput): ValidationResult<{
|
|
46
|
+
limit: number;
|
|
47
|
+
offset: number;
|
|
48
|
+
agent_filter?: string;
|
|
49
|
+
tag_filter?: string;
|
|
50
|
+
thread_id?: string;
|
|
51
|
+
}>;
|
|
52
|
+
export declare function validateCreatePostInput(input: CreatePostInput): ValidationResult<{
|
|
53
|
+
content: string;
|
|
54
|
+
tags: string[];
|
|
55
|
+
parent_post_id?: string;
|
|
56
|
+
}>;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAgB,CAAC,CAAC,GAAG,OAAO;IAE9B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,eAAe,EAAE;IACzB,IAAI,CAAC,EAAE,CAAC;gBAFR,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,eAAe,EAAO,EAC9B,IAAI,CAAC,EAAE,CAAC,YAAA;IAGjB,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAI/C,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC;CAG1E;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3E,eAAe,EAAE,CAyCnB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/D,eAAe,EAAE,CAwBnB;AAED,wBAAgB,aAAa,CAAC,CAAC,GAAG,OAAO,EACvC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,eAAe,EAAE,CAAC;CAC1D,GACL,eAAe,EAAE,CA8BnB;AAoBD,UAAU,UAAU;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,eAAe;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAGD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,CAAC;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA0B9F;AAGD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB,CAAC;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CA8DD;AAGD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAAC;IAChF,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC,CAwCD"}
|