atproto-mcp 0.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.
Files changed (131) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +293 -0
  3. package/dist/cli.d.ts +10 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +261 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/health-check.d.ts +7 -0
  8. package/dist/health-check.d.ts.map +1 -0
  9. package/dist/health-check.js +57 -0
  10. package/dist/health-check.js.map +1 -0
  11. package/dist/index.d.ts +122 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +612 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/prompts/index.d.ts +77 -0
  16. package/dist/prompts/index.d.ts.map +1 -0
  17. package/dist/prompts/index.js +186 -0
  18. package/dist/prompts/index.js.map +1 -0
  19. package/dist/resources/index.d.ts +75 -0
  20. package/dist/resources/index.d.ts.map +1 -0
  21. package/dist/resources/index.js +218 -0
  22. package/dist/resources/index.js.map +1 -0
  23. package/dist/test/setup.d.ts +78 -0
  24. package/dist/test/setup.d.ts.map +1 -0
  25. package/dist/test/setup.js +138 -0
  26. package/dist/test/setup.js.map +1 -0
  27. package/dist/tools/implementations/advanced-social-tools.d.ts +250 -0
  28. package/dist/tools/implementations/advanced-social-tools.d.ts.map +1 -0
  29. package/dist/tools/implementations/advanced-social-tools.js +380 -0
  30. package/dist/tools/implementations/advanced-social-tools.js.map +1 -0
  31. package/dist/tools/implementations/base-tool.d.ts +73 -0
  32. package/dist/tools/implementations/base-tool.d.ts.map +1 -0
  33. package/dist/tools/implementations/base-tool.js +225 -0
  34. package/dist/tools/implementations/base-tool.js.map +1 -0
  35. package/dist/tools/implementations/content-management-tools.d.ts +81 -0
  36. package/dist/tools/implementations/content-management-tools.d.ts.map +1 -0
  37. package/dist/tools/implementations/content-management-tools.js +236 -0
  38. package/dist/tools/implementations/content-management-tools.js.map +1 -0
  39. package/dist/tools/implementations/create-post-tool.d.ts +131 -0
  40. package/dist/tools/implementations/create-post-tool.d.ts.map +1 -0
  41. package/dist/tools/implementations/create-post-tool.js +182 -0
  42. package/dist/tools/implementations/create-post-tool.js.map +1 -0
  43. package/dist/tools/implementations/follow-user-tool.d.ts +69 -0
  44. package/dist/tools/implementations/follow-user-tool.d.ts.map +1 -0
  45. package/dist/tools/implementations/follow-user-tool.js +200 -0
  46. package/dist/tools/implementations/follow-user-tool.js.map +1 -0
  47. package/dist/tools/implementations/get-user-profile-tool.d.ts +61 -0
  48. package/dist/tools/implementations/get-user-profile-tool.d.ts.map +1 -0
  49. package/dist/tools/implementations/get-user-profile-tool.js +139 -0
  50. package/dist/tools/implementations/get-user-profile-tool.js.map +1 -0
  51. package/dist/tools/implementations/index.d.ts +22 -0
  52. package/dist/tools/implementations/index.d.ts.map +1 -0
  53. package/dist/tools/implementations/index.js +32 -0
  54. package/dist/tools/implementations/index.js.map +1 -0
  55. package/dist/tools/implementations/like-post-tool.d.ts +68 -0
  56. package/dist/tools/implementations/like-post-tool.d.ts.map +1 -0
  57. package/dist/tools/implementations/like-post-tool.js +184 -0
  58. package/dist/tools/implementations/like-post-tool.js.map +1 -0
  59. package/dist/tools/implementations/media-tools.d.ts +360 -0
  60. package/dist/tools/implementations/media-tools.d.ts.map +1 -0
  61. package/dist/tools/implementations/media-tools.js +444 -0
  62. package/dist/tools/implementations/media-tools.js.map +1 -0
  63. package/dist/tools/implementations/moderation-tools.d.ts +189 -0
  64. package/dist/tools/implementations/moderation-tools.d.ts.map +1 -0
  65. package/dist/tools/implementations/moderation-tools.js +289 -0
  66. package/dist/tools/implementations/moderation-tools.js.map +1 -0
  67. package/dist/tools/implementations/oauth-tools.d.ts +108 -0
  68. package/dist/tools/implementations/oauth-tools.d.ts.map +1 -0
  69. package/dist/tools/implementations/oauth-tools.js +183 -0
  70. package/dist/tools/implementations/oauth-tools.js.map +1 -0
  71. package/dist/tools/implementations/reply-to-post-tool.d.ts +52 -0
  72. package/dist/tools/implementations/reply-to-post-tool.d.ts.map +1 -0
  73. package/dist/tools/implementations/reply-to-post-tool.js +167 -0
  74. package/dist/tools/implementations/reply-to-post-tool.js.map +1 -0
  75. package/dist/tools/implementations/repost-tool.d.ts +76 -0
  76. package/dist/tools/implementations/repost-tool.d.ts.map +1 -0
  77. package/dist/tools/implementations/repost-tool.js +181 -0
  78. package/dist/tools/implementations/repost-tool.js.map +1 -0
  79. package/dist/tools/implementations/search-posts-tool.d.ts +95 -0
  80. package/dist/tools/implementations/search-posts-tool.d.ts.map +1 -0
  81. package/dist/tools/implementations/search-posts-tool.js +208 -0
  82. package/dist/tools/implementations/search-posts-tool.js.map +1 -0
  83. package/dist/tools/implementations/social-graph-tools.d.ts +119 -0
  84. package/dist/tools/implementations/social-graph-tools.d.ts.map +1 -0
  85. package/dist/tools/implementations/social-graph-tools.js +262 -0
  86. package/dist/tools/implementations/social-graph-tools.js.map +1 -0
  87. package/dist/tools/implementations/streaming-tools.d.ts +130 -0
  88. package/dist/tools/implementations/streaming-tools.d.ts.map +1 -0
  89. package/dist/tools/implementations/streaming-tools.js +241 -0
  90. package/dist/tools/implementations/streaming-tools.js.map +1 -0
  91. package/dist/tools/implementations/timeline-tools.d.ts +69 -0
  92. package/dist/tools/implementations/timeline-tools.d.ts.map +1 -0
  93. package/dist/tools/implementations/timeline-tools.js +194 -0
  94. package/dist/tools/implementations/timeline-tools.js.map +1 -0
  95. package/dist/tools/index.d.ts +23 -0
  96. package/dist/tools/index.d.ts.map +1 -0
  97. package/dist/tools/index.js +73 -0
  98. package/dist/tools/index.js.map +1 -0
  99. package/dist/types/index.d.ts +242 -0
  100. package/dist/types/index.d.ts.map +1 -0
  101. package/dist/types/index.js +73 -0
  102. package/dist/types/index.js.map +1 -0
  103. package/dist/utils/atp-client.d.ts +109 -0
  104. package/dist/utils/atp-client.d.ts.map +1 -0
  105. package/dist/utils/atp-client.js +451 -0
  106. package/dist/utils/atp-client.js.map +1 -0
  107. package/dist/utils/config.d.ts +74 -0
  108. package/dist/utils/config.d.ts.map +1 -0
  109. package/dist/utils/config.js +311 -0
  110. package/dist/utils/config.js.map +1 -0
  111. package/dist/utils/firehose-client.d.ts +96 -0
  112. package/dist/utils/firehose-client.d.ts.map +1 -0
  113. package/dist/utils/firehose-client.js +252 -0
  114. package/dist/utils/firehose-client.js.map +1 -0
  115. package/dist/utils/logger.d.ts +74 -0
  116. package/dist/utils/logger.d.ts.map +1 -0
  117. package/dist/utils/logger.js +142 -0
  118. package/dist/utils/logger.js.map +1 -0
  119. package/dist/utils/oauth-client.d.ts +61 -0
  120. package/dist/utils/oauth-client.d.ts.map +1 -0
  121. package/dist/utils/oauth-client.js +224 -0
  122. package/dist/utils/oauth-client.js.map +1 -0
  123. package/dist/utils/performance.d.ts +102 -0
  124. package/dist/utils/performance.d.ts.map +1 -0
  125. package/dist/utils/performance.js +302 -0
  126. package/dist/utils/performance.js.map +1 -0
  127. package/dist/utils/security.d.ts +154 -0
  128. package/dist/utils/security.d.ts.map +1 -0
  129. package/dist/utils/security.js +358 -0
  130. package/dist/utils/security.js.map +1 -0
  131. package/package.json +93 -0
@@ -0,0 +1,380 @@
1
+ /**
2
+ * Advanced social features for AT Protocol
3
+ */
4
+ import { z } from 'zod';
5
+ import { BaseTool } from './base-tool.js';
6
+ const CreateListSchema = z.object({
7
+ name: z.string().min(1, 'List name is required').max(64, 'List name cannot exceed 64 characters'),
8
+ description: z.string().max(300, 'Description cannot exceed 300 characters').optional(),
9
+ purpose: z.enum(['modlist', 'curatelist']).default('curatelist'),
10
+ });
11
+ const AddToListSchema = z.object({
12
+ listUri: z.string().min(1, 'List URI is required'),
13
+ actor: z.string().min(1, 'Actor (DID or handle) is required'),
14
+ });
15
+ const RemoveFromListSchema = z.object({
16
+ listUri: z.string().min(1, 'List URI is required'),
17
+ actor: z.string().min(1, 'Actor (DID or handle) is required'),
18
+ });
19
+ const GetListSchema = z.object({
20
+ listUri: z.string().min(1, 'List URI is required'),
21
+ limit: z.number().min(1).max(100).default(50),
22
+ cursor: z.string().optional(),
23
+ });
24
+ const GetThreadSchema = z.object({
25
+ uri: z.string().min(1, 'Post URI is required'),
26
+ depth: z.number().min(1).max(10).default(6),
27
+ parentHeight: z.number().min(0).max(10).default(80),
28
+ });
29
+ const GetCustomFeedSchema = z.object({
30
+ feedUri: z.string().min(1, 'Feed URI is required'),
31
+ limit: z.number().min(1).max(100).default(50),
32
+ cursor: z.string().optional(),
33
+ });
34
+ export class CreateListTool extends BaseTool {
35
+ schema = {
36
+ method: 'create_list',
37
+ description: 'Create a new list for organizing users (curate list) or moderation purposes (mod list).',
38
+ params: CreateListSchema,
39
+ };
40
+ constructor(atpClient) {
41
+ super(atpClient, 'CreateList');
42
+ }
43
+ async execute(params) {
44
+ try {
45
+ this.logger.info('Creating list', {
46
+ name: params.name,
47
+ purpose: params.purpose,
48
+ });
49
+ const response = await this.executeAtpOperation(async () => {
50
+ const agent = this.atpClient.getAgent();
51
+ return await agent.app.bsky.graph.list.create({ repo: agent.session?.did || '' }, {
52
+ name: params.name,
53
+ description: params.description,
54
+ purpose: params.purpose === 'modlist'
55
+ ? 'app.bsky.graph.defs#modlist'
56
+ : 'app.bsky.graph.defs#curatelist',
57
+ createdAt: new Date().toISOString(),
58
+ });
59
+ }, 'createList', { name: params.name, purpose: params.purpose });
60
+ this.logger.info('List created successfully', {
61
+ uri: response.uri,
62
+ name: params.name,
63
+ });
64
+ return {
65
+ success: true,
66
+ message: `List "${params.name}" created successfully`,
67
+ list: {
68
+ uri: response.uri,
69
+ cid: response.cid,
70
+ name: params.name,
71
+ description: params.description,
72
+ purpose: params.purpose || 'curatelist',
73
+ createdAt: new Date().toISOString(),
74
+ },
75
+ };
76
+ }
77
+ catch (error) {
78
+ this.logger.error('Failed to create list', error);
79
+ this.formatError(error);
80
+ }
81
+ }
82
+ }
83
+ export class AddToListTool extends BaseTool {
84
+ schema = {
85
+ method: 'add_to_list',
86
+ description: 'Add a user to an existing list.',
87
+ params: AddToListSchema,
88
+ };
89
+ constructor(atpClient) {
90
+ super(atpClient, 'AddToList');
91
+ }
92
+ async execute(params) {
93
+ try {
94
+ this.logger.info('Adding user to list', {
95
+ listUri: params.listUri,
96
+ actor: params.actor,
97
+ });
98
+ this.validateAtUri(params.listUri);
99
+ this.validateActor(params.actor);
100
+ const response = await this.executeAtpOperation(async () => {
101
+ const agent = this.atpClient.getAgent();
102
+ return await agent.app.bsky.graph.listitem.create({ repo: agent.session?.did || '' }, {
103
+ subject: params.actor,
104
+ list: params.listUri,
105
+ createdAt: new Date().toISOString(),
106
+ });
107
+ }, 'addToList', { listUri: params.listUri, actor: params.actor });
108
+ this.logger.info('User added to list successfully', {
109
+ uri: response.uri,
110
+ listUri: params.listUri,
111
+ actor: params.actor,
112
+ });
113
+ return {
114
+ success: true,
115
+ message: `User ${params.actor} added to list successfully`,
116
+ listItem: {
117
+ uri: response.uri,
118
+ listUri: params.listUri,
119
+ actor: params.actor,
120
+ },
121
+ };
122
+ }
123
+ catch (error) {
124
+ this.logger.error('Failed to add user to list', error);
125
+ this.formatError(error);
126
+ }
127
+ }
128
+ }
129
+ export class RemoveFromListTool extends BaseTool {
130
+ schema = {
131
+ method: 'remove_from_list',
132
+ description: 'Remove a user from an existing list.',
133
+ params: RemoveFromListSchema,
134
+ };
135
+ constructor(atpClient) {
136
+ super(atpClient, 'RemoveFromList');
137
+ }
138
+ async execute(params) {
139
+ try {
140
+ this.logger.info('Removing user from list', {
141
+ listUri: params.listUri,
142
+ actor: params.actor,
143
+ });
144
+ this.validateAtUri(params.listUri);
145
+ this.validateActor(params.actor);
146
+ // First, find the list item to delete
147
+ const agent = this.atpClient.getAgent();
148
+ const listResponse = await this.executeAtpOperation(async () => await agent.app.bsky.graph.getList({
149
+ list: params.listUri,
150
+ limit: 100,
151
+ }), 'getList', { listUri: params.listUri });
152
+ const listItem = listResponse.data.items.find((item) => item.subject.did === params.actor || item.subject.handle === params.actor);
153
+ if (!listItem) {
154
+ return {
155
+ success: false,
156
+ message: `User ${params.actor} is not in the specified list`,
157
+ removedFrom: {
158
+ listUri: params.listUri,
159
+ actor: params.actor,
160
+ },
161
+ };
162
+ }
163
+ // Delete the list item
164
+ await this.executeAtpOperation(async () => await agent.app.bsky.graph.listitem.delete({
165
+ repo: agent.session?.did || '',
166
+ rkey: listItem.uri.split('/').pop() || '',
167
+ }), 'removeFromList', { listUri: params.listUri, actor: params.actor });
168
+ this.logger.info('User removed from list successfully', {
169
+ listUri: params.listUri,
170
+ actor: params.actor,
171
+ });
172
+ return {
173
+ success: true,
174
+ message: `User ${params.actor} removed from list successfully`,
175
+ removedFrom: {
176
+ listUri: params.listUri,
177
+ actor: params.actor,
178
+ },
179
+ };
180
+ }
181
+ catch (error) {
182
+ this.logger.error('Failed to remove user from list', error);
183
+ this.formatError(error);
184
+ }
185
+ }
186
+ }
187
+ export class GetListTool extends BaseTool {
188
+ schema = {
189
+ method: 'get_list',
190
+ description: 'Get the contents of a list, including all users in the list.',
191
+ params: GetListSchema,
192
+ };
193
+ constructor(atpClient) {
194
+ super(atpClient, 'GetList');
195
+ }
196
+ async execute(params) {
197
+ try {
198
+ this.logger.info('Getting list contents', {
199
+ listUri: params.listUri,
200
+ limit: params.limit,
201
+ });
202
+ this.validateAtUri(params.listUri);
203
+ const response = await this.executeAtpOperation(async () => {
204
+ const agent = this.atpClient.getAgent();
205
+ return await agent.app.bsky.graph.getList({
206
+ list: params.listUri,
207
+ limit: params.limit || 50,
208
+ cursor: params.cursor,
209
+ });
210
+ }, 'getList', { listUri: params.listUri });
211
+ this.logger.info('List contents retrieved successfully', {
212
+ listUri: params.listUri,
213
+ itemCount: response.data.items.length,
214
+ });
215
+ return {
216
+ success: true,
217
+ list: {
218
+ uri: response.data.list.uri,
219
+ name: response.data.list.name,
220
+ description: response.data.list.description,
221
+ purpose: response.data.list.purpose,
222
+ creator: {
223
+ did: response.data.list.creator.did,
224
+ handle: response.data.list.creator.handle,
225
+ displayName: response.data.list.creator.displayName,
226
+ },
227
+ itemCount: response.data.items.length,
228
+ },
229
+ items: response.data.items.map((item) => ({
230
+ uri: item.uri,
231
+ subject: {
232
+ did: item.subject.did,
233
+ handle: item.subject.handle,
234
+ displayName: item.subject.displayName,
235
+ avatar: item.subject.avatar,
236
+ },
237
+ })),
238
+ cursor: response.data.cursor,
239
+ };
240
+ }
241
+ catch (error) {
242
+ this.logger.error('Failed to get list contents', error);
243
+ this.formatError(error);
244
+ }
245
+ }
246
+ }
247
+ export class GetThreadTool extends BaseTool {
248
+ schema = {
249
+ method: 'get_thread',
250
+ description: 'Get a complete thread/conversation starting from a specific post, including replies and parent posts.',
251
+ params: GetThreadSchema,
252
+ };
253
+ constructor(atpClient) {
254
+ super(atpClient, 'GetThread');
255
+ }
256
+ async execute(params) {
257
+ try {
258
+ this.logger.info('Getting thread', {
259
+ uri: params.uri,
260
+ depth: params.depth,
261
+ parentHeight: params.parentHeight,
262
+ });
263
+ this.validateAtUri(params.uri);
264
+ const response = await this.executeAtpOperation(async () => {
265
+ const agent = this.atpClient.getAgent();
266
+ return await agent.getPostThread({
267
+ uri: params.uri,
268
+ depth: params.depth || 6,
269
+ parentHeight: params.parentHeight || 80,
270
+ });
271
+ }, 'getThread', { uri: params.uri });
272
+ // Type-safe access to thread data
273
+ const thread = response.data.thread;
274
+ const hasParent = thread && 'parent' in thread && !!thread.parent;
275
+ const replyCount = thread && 'replies' in thread ? thread.replies?.length || 0 : 0;
276
+ this.logger.info('Thread retrieved successfully', {
277
+ uri: params.uri,
278
+ hasParent,
279
+ replyCount,
280
+ });
281
+ // Extract post data safely
282
+ const post = thread && 'post' in thread ? thread.post : null;
283
+ if (!post) {
284
+ throw new Error('Thread post data not found');
285
+ }
286
+ return {
287
+ success: true,
288
+ thread: {
289
+ post: {
290
+ uri: post.uri || '',
291
+ cid: post.cid || '',
292
+ author: {
293
+ did: post.author?.did || '',
294
+ handle: post.author?.handle || '',
295
+ displayName: post.author?.displayName,
296
+ avatar: post.author?.avatar,
297
+ },
298
+ text: post.record?.text || '',
299
+ createdAt: post.record?.createdAt || new Date().toISOString(),
300
+ replyCount: post.replyCount || 0,
301
+ repostCount: post.repostCount || 0,
302
+ likeCount: post.likeCount || 0,
303
+ },
304
+ parent: hasParent ? thread.parent : undefined,
305
+ replies: thread && 'replies' in thread ? thread.replies : [],
306
+ },
307
+ };
308
+ }
309
+ catch (error) {
310
+ this.logger.error('Failed to get thread', error);
311
+ this.formatError(error);
312
+ }
313
+ }
314
+ }
315
+ export class GetCustomFeedTool extends BaseTool {
316
+ schema = {
317
+ method: 'get_custom_feed',
318
+ description: 'Get posts from a custom algorithm feed.',
319
+ params: GetCustomFeedSchema,
320
+ };
321
+ constructor(atpClient) {
322
+ super(atpClient, 'GetCustomFeed');
323
+ }
324
+ async execute(params) {
325
+ try {
326
+ this.logger.info('Getting custom feed', {
327
+ feedUri: params.feedUri,
328
+ limit: params.limit,
329
+ });
330
+ this.validateAtUri(params.feedUri);
331
+ const response = await this.executeAtpOperation(async () => {
332
+ const agent = this.atpClient.getAgent();
333
+ return await agent.app.bsky.feed.getFeed({
334
+ feed: params.feedUri,
335
+ limit: params.limit || 50,
336
+ cursor: params.cursor,
337
+ });
338
+ }, 'getCustomFeed', { feedUri: params.feedUri });
339
+ this.logger.info('Custom feed retrieved successfully', {
340
+ feedUri: params.feedUri,
341
+ postCount: response.data.feed.length,
342
+ });
343
+ // Extract feed metadata safely
344
+ const feedData = response.data.feed;
345
+ const feedMeta = response.data;
346
+ return {
347
+ success: true,
348
+ feed: {
349
+ uri: params.feedUri,
350
+ displayName: feedMeta.displayName,
351
+ description: feedMeta.description,
352
+ creator: feedMeta.creator,
353
+ },
354
+ posts: feedData.map((item) => ({
355
+ uri: item.post.uri,
356
+ cid: item.post.cid,
357
+ author: {
358
+ did: item.post.author.did,
359
+ handle: item.post.author.handle,
360
+ displayName: item.post.author.displayName,
361
+ avatar: item.post.author.avatar,
362
+ },
363
+ text: item.post.record.text,
364
+ createdAt: item.post.record.createdAt,
365
+ replyCount: item.post.replyCount || 0,
366
+ repostCount: item.post.repostCount || 0,
367
+ likeCount: item.post.likeCount || 0,
368
+ isLiked: !!item.post.viewer?.like,
369
+ isReposted: !!item.post.viewer?.repost,
370
+ })),
371
+ cursor: response.data.cursor,
372
+ };
373
+ }
374
+ catch (error) {
375
+ this.logger.error('Failed to get custom feed', error);
376
+ this.formatError(error);
377
+ }
378
+ }
379
+ }
380
+ //# sourceMappingURL=advanced-social-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced-social-tools.js","sourceRoot":"","sources":["../../../src/tools/implementations/advanced-social-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,uCAAuC,CAAC;IACjG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,0CAA0C,CAAC,CAAC,QAAQ,EAAE;IACvF,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;CACjE,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,mCAAmC,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,mCAAmC,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;IAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACpD,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAC1B,MAAM,GAAG;QACvB,MAAM,EAAE,aAAa;QACrB,WAAW,EACT,yFAAyF;QAC3F,MAAM,EAAE,gBAAgB;KACzB,CAAC;IAEF,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACjC,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,MAIvB;QAYC,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;gBAChC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC7C,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACxC,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAC3C,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,EAClC;oBACE,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,OAAO,EACL,MAAM,CAAC,OAAO,KAAK,SAAS;wBAC1B,CAAC,CAAC,6BAA6B;wBAC/B,CAAC,CAAC,gCAAgC;oBACtC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CACF,CAAC;YACJ,CAAC,EACD,YAAY,EACZ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAC/C,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE;gBAC5C,GAAG,EAAE,QAAQ,CAAC,GAAG;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS,MAAM,CAAC,IAAI,wBAAwB;gBACrD,IAAI,EAAE;oBACJ,GAAG,EAAE,QAAQ,CAAC,GAAG;oBACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;oBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,YAAY;oBACvC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzB,MAAM,GAAG;QACvB,MAAM,EAAE,aAAa;QACrB,WAAW,EAAE,iCAAiC;QAC9C,MAAM,EAAE,eAAe;KACxB,CAAC;IAEF,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAChC,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,MAA0C;QAShE,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBACtC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC7C,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACxC,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAC/C,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,EAClC;oBACE,OAAO,EAAE,MAAM,CAAC,KAAK;oBACrB,IAAI,EAAE,MAAM,CAAC,OAAO;oBACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CACF,CAAC;YACJ,CAAC,EACD,WAAW,EACX,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CACjD,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;gBAClD,GAAG,EAAE,QAAQ,CAAC,GAAG;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,QAAQ,MAAM,CAAC,KAAK,6BAA6B;gBAC1D,QAAQ,EAAE;oBACR,GAAG,EAAE,QAAQ,CAAC,GAAG;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACvD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IAC9B,MAAM,GAAG;QACvB,MAAM,EAAE,kBAAkB;QAC1B,WAAW,EAAE,sCAAsC;QACnD,MAAM,EAAE,oBAAoB;KAC7B,CAAC;IAEF,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACrC,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,MAA0C;QAQhE,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBAC1C,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEjC,sCAAsC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CACjD,KAAK,IAAI,EAAE,CACT,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBACjC,IAAI,EAAE,MAAM,CAAC,OAAO;gBACpB,KAAK,EAAE,GAAG;aACX,CAAC,EACJ,SAAS,EACT,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAC5B,CAAC;YAEF,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAC3C,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CACzF,CAAC;YAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,QAAQ,MAAM,CAAC,KAAK,+BAA+B;oBAC5D,WAAW,EAAE;wBACX,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;qBACpB;iBACF,CAAC;YACJ,CAAC;YAED,uBAAuB;YACvB,MAAM,IAAI,CAAC,mBAAmB,CAC5B,KAAK,IAAI,EAAE,CACT,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACzC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE;gBAC9B,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE;aAC1C,CAAC,EACJ,gBAAgB,EAChB,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CACjD,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;gBACtD,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,QAAQ,MAAM,CAAC,KAAK,iCAAiC;gBAC9D,WAAW,EAAE;oBACX,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YAC5D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvB,MAAM,GAAG;QACvB,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,8DAA8D;QAC3E,MAAM,EAAE,aAAa;KACtB,CAAC;IAEF,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC9B,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,MAA4D;QAyBlF,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBACxC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC7C,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACxC,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;oBACxC,IAAI,EAAE,MAAM,CAAC,OAAO;oBACpB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;oBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC,CAAC;YACL,CAAC,EACD,SAAS,EACT,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAC5B,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE;gBACvD,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;aACtC,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;oBAC7B,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;oBAC3C,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;oBACnC,OAAO,EAAE;wBACP,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;wBACnC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;wBACzC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW;qBACpD;oBACD,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;iBACtC;gBACD,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;oBAC7C,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,OAAO,EAAE;wBACP,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;wBACrB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;wBAC3B,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;wBACrC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;qBAC5B;iBACF,CAAC,CAAC;gBACH,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM;aAC7B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACxD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzB,MAAM,GAAG;QACvB,MAAM,EAAE,YAAY;QACpB,WAAW,EACT,uGAAuG;QACzG,MAAM,EAAE,eAAe;KACxB,CAAC;IAEF,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAChC,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,MAA8D;QAsBpF,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACjC,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAE/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC7C,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACxC,OAAO,MAAM,KAAK,CAAC,aAAa,CAAC;oBAC/B,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;oBACxB,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;iBACxC,CAAC,CAAC;YACL,CAAC,EACD,WAAW,EACX,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CACpB,CAAC;YAEF,kCAAkC;YAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAa,CAAC;YAC3C,MAAM,SAAS,GAAG,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YAClE,MAAM,UAAU,GAAG,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEnF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;gBAChD,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,SAAS;gBACT,UAAU;aACX,CAAC,CAAC;YAEH,2BAA2B;YAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE;oBACN,IAAI,EAAE;wBACJ,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;wBACnB,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;wBACnB,MAAM,EAAE;4BACN,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE;4BAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE;4BACjC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW;4BACrC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;yBAC5B;wBACD,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE;wBAC7B,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBAC7D,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;wBAChC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC;wBAClC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC;qBAC/B;oBACD,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;oBAC7C,OAAO,EAAE,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;iBAC7D;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAC7B,MAAM,GAAG;QACvB,MAAM,EAAE,iBAAiB;QACzB,WAAW,EAAE,yCAAyC;QACtD,MAAM,EAAE,mBAAmB;KAC5B,CAAC;IAEF,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACpC,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,MAA4D;QA+BlF,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBACtC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC7C,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACxC,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;oBACvC,IAAI,EAAE,MAAM,CAAC,OAAO;oBACpB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;oBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC,CAAC;YACL,CAAC,EACD,eAAe,EACf,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAC5B,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;gBACrD,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;aACrC,CAAC,CAAC;YAEH,+BAA+B;YAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAa,CAAC;YAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAW,CAAC;YAEtC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACJ,GAAG,EAAE,MAAM,CAAC,OAAO;oBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;oBACjC,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B;gBACD,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;oBAClC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;oBAClB,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;oBAClB,MAAM,EAAE;wBACN,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;wBACzB,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;wBAC/B,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW;wBACzC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;qBAChC;oBACD,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;oBAC3B,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;oBACrC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC;oBACrC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC;oBACvC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC;oBACnC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI;oBACjC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;iBACvC,CAAC,CAAC;gBACH,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM;aAC7B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Base class for AT Protocol MCP tools
3
+ * Provides common functionality and error handling
4
+ * Supports both authenticated and unauthenticated modes
5
+ */
6
+ import { z } from 'zod';
7
+ import type { AtpClient } from '../../utils/atp-client.js';
8
+ import type { IMcpTool } from '../index.js';
9
+ import { Logger } from '../../utils/logger.js';
10
+ /**
11
+ * Tool authentication requirements
12
+ */
13
+ export declare enum ToolAuthMode {
14
+ PUBLIC = "public",// Works without authentication
15
+ PRIVATE = "private",// Requires authentication
16
+ ENHANCED = "enhanced"
17
+ }
18
+ /**
19
+ * Abstract base class for all AT Protocol MCP tools
20
+ */
21
+ export declare abstract class BaseTool implements IMcpTool {
22
+ protected atpClient: AtpClient;
23
+ protected logger: Logger;
24
+ protected authMode: ToolAuthMode;
25
+ abstract readonly schema: {
26
+ method: string;
27
+ description: string;
28
+ params?: z.ZodSchema;
29
+ };
30
+ constructor(atpClient: AtpClient, toolName: string, authMode?: ToolAuthMode);
31
+ /**
32
+ * Main handler method that validates input and executes the tool
33
+ */
34
+ handler(params: unknown): Promise<any>;
35
+ /**
36
+ * Abstract method that each tool must implement
37
+ */
38
+ protected abstract execute(params: any): Promise<any>;
39
+ /**
40
+ * Check if this tool is available in the current authentication mode
41
+ */
42
+ isAvailable(): boolean;
43
+ /**
44
+ * Get availability status message
45
+ */
46
+ getAvailabilityMessage(): string;
47
+ /**
48
+ * Execute an AT Protocol operation with error handling
49
+ * Automatically handles authentication requirements based on tool mode
50
+ */
51
+ protected executeAtpOperation<T>(operation: () => Promise<T>, operationName: string, context?: Record<string, unknown>): Promise<T>;
52
+ /**
53
+ * Sanitize parameters for logging (remove sensitive data)
54
+ */
55
+ private sanitizeParams;
56
+ /**
57
+ * Validate AT Protocol identifier (DID or handle)
58
+ */
59
+ protected validateActor(actor: string): void;
60
+ /**
61
+ * Validate AT Protocol URI
62
+ */
63
+ protected validateAtUri(uri: string): void;
64
+ /**
65
+ * Validate CID
66
+ */
67
+ protected validateCid(cid: string): void;
68
+ /**
69
+ * Format error for MCP response
70
+ */
71
+ protected formatError(error: unknown): never;
72
+ }
73
+ //# sourceMappingURL=base-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-tool.d.ts","sourceRoot":"","sources":["../../../src/tools/implementations/base-tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C;;GAEG;AACH,oBAAY,YAAY;IACtB,MAAM,WAAW,CAAE,+BAA+B;IAClD,OAAO,YAAY,CAAE,0BAA0B;IAC/C,QAAQ,aAAa;CACtB;AAED;;GAEG;AACH,8BAAsB,QAAS,YAAW,QAAQ;IAChD,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEjC,kBAAyB,MAAM,EAAE;QAC/B,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;KACtB,CAAC;gBAGA,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,YAAmC;IAO/C;;OAEG;IACU,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAmDnD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAErD;;OAEG;IACI,WAAW,IAAI,OAAO;IAY7B;;OAEG;IACI,sBAAsB,IAAI,MAAM;IAiBvC;;;OAGG;cACa,mBAAmB,CAAC,CAAC,EACnC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,CAAC,CAAC;IAiDb;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAkB5C;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAU1C;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAWxC;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK;CAmB7C"}