@heyseo/mcp-server 0.1.1 → 0.1.3

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.
@@ -3,6 +3,10 @@
3
3
  * Tools for creating and managing SEO tasks in HeySeo Kanban
4
4
  */
5
5
  import { z } from 'zod';
6
+ // Common enums
7
+ const statusEnum = z.enum(['todo', 'in_progress', 'done']);
8
+ const priorityEnum = z.enum(['low', 'medium', 'high']);
9
+ const categoryEnum = z.enum(['technical', 'content', 'links', 'ux']);
6
10
  // Schema for create task tool
7
11
  export const createTaskSchema = z.object({
8
12
  siteId: z.string().describe('The ID of the site this task is for'),
@@ -12,17 +16,69 @@ export const createTaskSchema = z.object({
12
16
  .max(2000)
13
17
  .optional()
14
18
  .describe('Detailed task description with context and steps'),
15
- priority: z
16
- .enum(['low', 'medium', 'high'])
19
+ priority: priorityEnum
17
20
  .optional()
18
21
  .default('medium')
19
22
  .describe('Task priority level'),
20
- category: z
21
- .enum(['technical', 'content', 'links', 'ux'])
23
+ category: categoryEnum
22
24
  .optional()
23
25
  .default('technical')
24
26
  .describe('Task category for organization'),
25
27
  });
28
+ // Schema for list tasks tool
29
+ export const listTasksSchema = z.object({
30
+ siteId: z.string().describe('The ID of the site to list tasks for'),
31
+ status: statusEnum.optional().describe('Filter by task status'),
32
+ priority: priorityEnum.optional().describe('Filter by task priority'),
33
+ category: categoryEnum.optional().describe('Filter by task category'),
34
+ });
35
+ // Schema for get task tool
36
+ export const getTaskSchema = z.object({
37
+ taskId: z.string().describe('The ID of the task to retrieve'),
38
+ });
39
+ // Schema for update task tool
40
+ export const updateTaskSchema = z.object({
41
+ taskId: z.string().describe('The ID of the task to update'),
42
+ title: z.string().min(1).max(200).optional().describe('New task title'),
43
+ description: z
44
+ .string()
45
+ .max(2000)
46
+ .optional()
47
+ .describe('New task description'),
48
+ status: statusEnum.optional().describe('New task status'),
49
+ priority: priorityEnum.optional().describe('New task priority'),
50
+ category: categoryEnum.optional().describe('New task category'),
51
+ });
52
+ // Schema for delete task tool
53
+ export const deleteTaskSchema = z.object({
54
+ taskId: z.string().describe('The ID of the task to delete'),
55
+ });
56
+ // Schema for bulk create tasks tool
57
+ export const bulkCreateTasksSchema = z.object({
58
+ siteId: z.string().describe('The ID of the site these tasks are for'),
59
+ tasks: z
60
+ .array(z.object({
61
+ title: z.string().min(1).max(200).describe('Task title'),
62
+ description: z.string().max(2000).optional().describe('Task description'),
63
+ priority: priorityEnum.optional().default('medium').describe('Task priority'),
64
+ category: categoryEnum.optional().default('technical').describe('Task category'),
65
+ }))
66
+ .min(1)
67
+ .max(10)
68
+ .describe('Array of tasks to create (max 10)'),
69
+ });
70
+ // Schema for bulk update tasks tool
71
+ export const bulkUpdateTasksSchema = z.object({
72
+ taskIds: z
73
+ .array(z.string())
74
+ .min(1)
75
+ .max(10)
76
+ .describe('Array of task IDs to update (max 10)'),
77
+ updates: z.object({
78
+ status: statusEnum.optional().describe('New status for all tasks'),
79
+ priority: priorityEnum.optional().describe('New priority for all tasks'),
80
+ }),
81
+ });
26
82
  /**
27
83
  * Execute create task tool
28
84
  */
@@ -57,6 +113,173 @@ export async function executeCreateTask(client, input) {
57
113
  });
58
114
  }
59
115
  }
116
+ /**
117
+ * Execute list tasks tool
118
+ */
119
+ export async function executeListTasks(client, input) {
120
+ try {
121
+ const tasks = await client.getTasks(input.siteId, {
122
+ status: input.status,
123
+ priority: input.priority,
124
+ category: input.category,
125
+ });
126
+ return JSON.stringify({
127
+ success: true,
128
+ count: tasks.length,
129
+ tasks: tasks.map((task) => ({
130
+ id: task.id,
131
+ title: task.title,
132
+ description: task.description,
133
+ status: task.status,
134
+ priority: task.priority,
135
+ category: task.category,
136
+ createdAt: task.createdAt,
137
+ updatedAt: task.updatedAt,
138
+ })),
139
+ }, null, 2);
140
+ }
141
+ catch (error) {
142
+ return JSON.stringify({
143
+ success: false,
144
+ error: error instanceof Error ? error.message : 'Unknown error',
145
+ });
146
+ }
147
+ }
148
+ /**
149
+ * Execute get task tool
150
+ */
151
+ export async function executeGetTask(client, input) {
152
+ try {
153
+ const task = await client.getTask(input.taskId);
154
+ return JSON.stringify({
155
+ success: true,
156
+ task: {
157
+ id: task.id,
158
+ title: task.title,
159
+ description: task.description,
160
+ status: task.status,
161
+ priority: task.priority,
162
+ category: task.category,
163
+ siteId: task.siteId,
164
+ createdAt: task.createdAt,
165
+ updatedAt: task.updatedAt,
166
+ },
167
+ }, null, 2);
168
+ }
169
+ catch (error) {
170
+ return JSON.stringify({
171
+ success: false,
172
+ error: error instanceof Error ? error.message : 'Unknown error',
173
+ });
174
+ }
175
+ }
176
+ /**
177
+ * Execute update task tool
178
+ */
179
+ export async function executeUpdateTask(client, input) {
180
+ try {
181
+ const updates = {};
182
+ if (input.title !== undefined)
183
+ updates.title = input.title;
184
+ if (input.description !== undefined)
185
+ updates.description = input.description;
186
+ if (input.status !== undefined)
187
+ updates.status = input.status;
188
+ if (input.priority !== undefined)
189
+ updates.priority = input.priority;
190
+ if (input.category !== undefined)
191
+ updates.category = input.category;
192
+ const task = await client.updateTask(input.taskId, updates);
193
+ return JSON.stringify({
194
+ success: true,
195
+ message: 'Task updated successfully',
196
+ task: {
197
+ id: task.id,
198
+ title: task.title,
199
+ description: task.description,
200
+ status: task.status,
201
+ priority: task.priority,
202
+ category: task.category,
203
+ updatedAt: task.updatedAt,
204
+ },
205
+ }, null, 2);
206
+ }
207
+ catch (error) {
208
+ return JSON.stringify({
209
+ success: false,
210
+ error: error instanceof Error ? error.message : 'Unknown error',
211
+ });
212
+ }
213
+ }
214
+ /**
215
+ * Execute delete task tool
216
+ */
217
+ export async function executeDeleteTask(client, input) {
218
+ try {
219
+ await client.deleteTask(input.taskId);
220
+ return JSON.stringify({
221
+ success: true,
222
+ message: 'Task deleted successfully',
223
+ taskId: input.taskId,
224
+ }, null, 2);
225
+ }
226
+ catch (error) {
227
+ return JSON.stringify({
228
+ success: false,
229
+ error: error instanceof Error ? error.message : 'Unknown error',
230
+ });
231
+ }
232
+ }
233
+ /**
234
+ * Execute bulk create tasks tool
235
+ */
236
+ export async function executeBulkCreateTasks(client, input) {
237
+ try {
238
+ const createdTasks = await client.bulkCreateTasks(input.siteId, input.tasks);
239
+ return JSON.stringify({
240
+ success: true,
241
+ message: `Successfully created ${createdTasks.length} tasks`,
242
+ tasks: createdTasks.map((task) => ({
243
+ id: task.id,
244
+ title: task.title,
245
+ priority: task.priority,
246
+ category: task.category,
247
+ status: task.status,
248
+ })),
249
+ }, null, 2);
250
+ }
251
+ catch (error) {
252
+ return JSON.stringify({
253
+ success: false,
254
+ error: error instanceof Error ? error.message : 'Unknown error',
255
+ });
256
+ }
257
+ }
258
+ /**
259
+ * Execute bulk update tasks tool
260
+ */
261
+ export async function executeBulkUpdateTasks(client, input) {
262
+ try {
263
+ const updatedTasks = await client.bulkUpdateTasks(input.taskIds, input.updates);
264
+ return JSON.stringify({
265
+ success: true,
266
+ message: `Successfully updated ${updatedTasks.length} tasks`,
267
+ tasks: updatedTasks.map((task) => ({
268
+ id: task.id,
269
+ title: task.title,
270
+ status: task.status,
271
+ priority: task.priority,
272
+ updatedAt: task.updatedAt,
273
+ })),
274
+ }, null, 2);
275
+ }
276
+ catch (error) {
277
+ return JSON.stringify({
278
+ success: false,
279
+ error: error instanceof Error ? error.message : 'Unknown error',
280
+ });
281
+ }
282
+ }
60
283
  /**
61
284
  * Task tool definitions for MCP
62
285
  */
@@ -112,5 +335,221 @@ Example tasks:
112
335
  required: ['siteId', 'title'],
113
336
  },
114
337
  },
338
+ {
339
+ name: 'heyseo_list_tasks',
340
+ description: `List all SEO tasks for a site from the HeySeo Kanban board.
341
+
342
+ Retrieve tasks with optional filtering by status, priority, or category.
343
+ Use this to review existing tasks, check progress, or find tasks to work on.
344
+
345
+ Status values:
346
+ - todo: Tasks that haven't been started
347
+ - in_progress: Tasks currently being worked on
348
+ - done: Completed tasks`,
349
+ inputSchema: {
350
+ type: 'object',
351
+ properties: {
352
+ siteId: {
353
+ type: 'string',
354
+ description: 'The ID of the site to list tasks for',
355
+ },
356
+ status: {
357
+ type: 'string',
358
+ enum: ['todo', 'in_progress', 'done'],
359
+ description: 'Filter by task status',
360
+ },
361
+ priority: {
362
+ type: 'string',
363
+ enum: ['low', 'medium', 'high'],
364
+ description: 'Filter by task priority',
365
+ },
366
+ category: {
367
+ type: 'string',
368
+ enum: ['technical', 'content', 'links', 'ux'],
369
+ description: 'Filter by task category',
370
+ },
371
+ },
372
+ required: ['siteId'],
373
+ },
374
+ },
375
+ {
376
+ name: 'heyseo_get_task',
377
+ description: `Get detailed information about a specific task.
378
+
379
+ Retrieve all details of a single task by its ID, including full description,
380
+ status, priority, category, and timestamps.`,
381
+ inputSchema: {
382
+ type: 'object',
383
+ properties: {
384
+ taskId: {
385
+ type: 'string',
386
+ description: 'The ID of the task to retrieve',
387
+ },
388
+ },
389
+ required: ['taskId'],
390
+ },
391
+ },
392
+ {
393
+ name: 'heyseo_update_task',
394
+ description: `Update an existing task in the HeySeo Kanban board.
395
+
396
+ Modify any combination of: title, description, status, priority, or category.
397
+ Use this to:
398
+ - Change task status (todo → in_progress → done)
399
+ - Adjust priority based on new insights
400
+ - Update descriptions with more details
401
+ - Recategorize tasks`,
402
+ inputSchema: {
403
+ type: 'object',
404
+ properties: {
405
+ taskId: {
406
+ type: 'string',
407
+ description: 'The ID of the task to update',
408
+ },
409
+ title: {
410
+ type: 'string',
411
+ minLength: 1,
412
+ maxLength: 200,
413
+ description: 'New task title',
414
+ },
415
+ description: {
416
+ type: 'string',
417
+ maxLength: 2000,
418
+ description: 'New task description',
419
+ },
420
+ status: {
421
+ type: 'string',
422
+ enum: ['todo', 'in_progress', 'done'],
423
+ description: 'New task status',
424
+ },
425
+ priority: {
426
+ type: 'string',
427
+ enum: ['low', 'medium', 'high'],
428
+ description: 'New task priority',
429
+ },
430
+ category: {
431
+ type: 'string',
432
+ enum: ['technical', 'content', 'links', 'ux'],
433
+ description: 'New task category',
434
+ },
435
+ },
436
+ required: ['taskId'],
437
+ },
438
+ },
439
+ {
440
+ name: 'heyseo_delete_task',
441
+ description: `Delete a task from the HeySeo Kanban board.
442
+
443
+ Permanently remove a task by its ID. Use with caution as this action cannot be undone.
444
+ Consider marking tasks as "done" instead if you want to keep a record.`,
445
+ inputSchema: {
446
+ type: 'object',
447
+ properties: {
448
+ taskId: {
449
+ type: 'string',
450
+ description: 'The ID of the task to delete',
451
+ },
452
+ },
453
+ required: ['taskId'],
454
+ },
455
+ },
456
+ {
457
+ name: 'heyseo_bulk_create_tasks',
458
+ description: `Create multiple SEO tasks at once from opportunities or audit findings.
459
+
460
+ Efficiently batch-create up to 10 tasks in a single call. Ideal for:
461
+ - Converting SEO audit findings into actionable tasks
462
+ - Creating tasks from identified opportunities
463
+ - Setting up initial task lists for new projects
464
+
465
+ Each task can have its own title, description, priority, and category.`,
466
+ inputSchema: {
467
+ type: 'object',
468
+ properties: {
469
+ siteId: {
470
+ type: 'string',
471
+ description: 'The ID of the site these tasks are for',
472
+ },
473
+ tasks: {
474
+ type: 'array',
475
+ minItems: 1,
476
+ maxItems: 10,
477
+ items: {
478
+ type: 'object',
479
+ properties: {
480
+ title: {
481
+ type: 'string',
482
+ minLength: 1,
483
+ maxLength: 200,
484
+ description: 'Task title',
485
+ },
486
+ description: {
487
+ type: 'string',
488
+ maxLength: 2000,
489
+ description: 'Task description',
490
+ },
491
+ priority: {
492
+ type: 'string',
493
+ enum: ['low', 'medium', 'high'],
494
+ default: 'medium',
495
+ description: 'Task priority',
496
+ },
497
+ category: {
498
+ type: 'string',
499
+ enum: ['technical', 'content', 'links', 'ux'],
500
+ default: 'technical',
501
+ description: 'Task category',
502
+ },
503
+ },
504
+ required: ['title'],
505
+ },
506
+ description: 'Array of tasks to create (max 10)',
507
+ },
508
+ },
509
+ required: ['siteId', 'tasks'],
510
+ },
511
+ },
512
+ {
513
+ name: 'heyseo_bulk_update_tasks',
514
+ description: `Update multiple tasks at once with the same changes.
515
+
516
+ Efficiently batch-update up to 10 tasks. Ideal for:
517
+ - Marking multiple completed tasks as "done"
518
+ - Changing priority of related tasks
519
+ - Moving tasks through workflow stages together
520
+
521
+ All specified tasks will receive the same status and/or priority update.`,
522
+ inputSchema: {
523
+ type: 'object',
524
+ properties: {
525
+ taskIds: {
526
+ type: 'array',
527
+ minItems: 1,
528
+ maxItems: 10,
529
+ items: {
530
+ type: 'string',
531
+ },
532
+ description: 'Array of task IDs to update (max 10)',
533
+ },
534
+ updates: {
535
+ type: 'object',
536
+ properties: {
537
+ status: {
538
+ type: 'string',
539
+ enum: ['todo', 'in_progress', 'done'],
540
+ description: 'New status for all tasks',
541
+ },
542
+ priority: {
543
+ type: 'string',
544
+ enum: ['low', 'medium', 'high'],
545
+ description: 'New priority for all tasks',
546
+ },
547
+ },
548
+ description: 'Updates to apply to all tasks',
549
+ },
550
+ },
551
+ required: ['taskIds', 'updates'],
552
+ },
553
+ },
115
554
  ];
116
555
  //# sourceMappingURL=tasks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAe;AACf,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;AAC3D,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACvD,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AAErE,8BAA8B;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAClE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IACxD,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,QAAQ,EAAE,YAAY;SACnB,QAAQ,EAAE;SACV,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,qBAAqB,CAAC;IAClC,QAAQ,EAAE,YAAY;SACnB,QAAQ,EAAE;SACV,OAAO,CAAC,WAAW,CAAC;SACpB,QAAQ,CAAC,gCAAgC,CAAC;CAC9C,CAAC,CAAC;AAEH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACnE,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC/D,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACrE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CACtE,CAAC,CAAC;AAEH,2BAA2B;AAC3B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CAC9D,CAAC,CAAC;AAEH,8BAA8B;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC3D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACvE,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,sBAAsB,CAAC;IACnC,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACzD,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/D,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CAChE,CAAC,CAAC;AAEH,8BAA8B;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC5D,CAAC,CAAC;AAEH,oCAAoC;AACpC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACrE,KAAK,EAAE,CAAC;SACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACzE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC7E,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;KACjF,CAAC,CACH;SACA,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,CAAC,mCAAmC,CAAC;CACjD,CAAC,CAAC;AAEH,oCAAoC;AACpC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,CAAC,sCAAsC,CAAC;IACnD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAClE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KACzE,CAAC;CACH,CAAC,CAAC;AAUH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAuB,EACvB,KAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;YACnC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;YACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,QAAQ;YACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,WAAW;YACvC,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,2BAA2B;YACpC,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B;SACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAuB,EACvB,KAAqB;IAErB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE;YAChD,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC1B,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;SACJ,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAuB,EACvB,KAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEhD,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B;SACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAuB,EACvB,KAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC3D,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QAC7E,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC9D,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QACpE,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEpE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE5D,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,2BAA2B;YACpC,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B;SACF,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAuB,EACvB,KAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,2BAA2B;YACpC,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAuB,EACvB,KAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAE7E,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,wBAAwB,YAAY,CAAC,MAAM,QAAQ;YAC5D,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACjC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;SACJ,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAuB,EACvB,KAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAEhF,OAAO,IAAI,CAAC,SAAS,CACnB;YACE,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,wBAAwB,YAAY,CAAC,MAAM,QAAQ;YAC5D,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACjC,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;SACJ,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE;;;;;;;;;;;;;;0DAcyC;QACtD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qCAAqC;iBACnD;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,CAAC;oBACZ,SAAS,EAAE,GAAG;oBACd,WAAW,EAAE,oBAAoB;iBAClC;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,IAAI;oBACf,WAAW,EAAE,+DAA+D;iBAC7E;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;oBAC/B,OAAO,EAAE,QAAQ;oBACjB,WAAW,EAAE,eAAe;iBAC7B;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;oBAC7C,OAAO,EAAE,WAAW;oBACpB,WAAW,EAAE,eAAe;iBAC7B;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;SAC9B;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE;;;;;;;;wBAQO;QACpB,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sCAAsC;iBACpD;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC;oBACrC,WAAW,EAAE,uBAAuB;iBACrC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;oBAC/B,WAAW,EAAE,yBAAyB;iBACvC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;oBAC7C,WAAW,EAAE,yBAAyB;iBACvC;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE;;;4CAG2B;QACxC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gCAAgC;iBAC9C;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE;;;;;;;qBAOI;QACjB,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;iBAC5C;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,CAAC;oBACZ,SAAS,EAAE,GAAG;oBACd,WAAW,EAAE,gBAAgB;iBAC9B;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,IAAI;oBACf,WAAW,EAAE,sBAAsB;iBACpC;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC;oBACrC,WAAW,EAAE,iBAAiB;iBAC/B;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;oBAC/B,WAAW,EAAE,mBAAmB;iBACjC;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;oBAC7C,WAAW,EAAE,mBAAmB;iBACjC;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE;;;uEAGsD;QACnE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;iBAC5C;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE;;;;;;;uEAOsD;QACnE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wCAAwC;iBACtD;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,EAAE;oBACZ,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;gCACd,SAAS,EAAE,CAAC;gCACZ,SAAS,EAAE,GAAG;gCACd,WAAW,EAAE,YAAY;6BAC1B;4BACD,WAAW,EAAE;gCACX,IAAI,EAAE,QAAQ;gCACd,SAAS,EAAE,IAAI;gCACf,WAAW,EAAE,kBAAkB;6BAChC;4BACD,QAAQ,EAAE;gCACR,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;gCAC/B,OAAO,EAAE,QAAQ;gCACjB,WAAW,EAAE,eAAe;6BAC7B;4BACD,QAAQ,EAAE;gCACR,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;gCAC7C,OAAO,EAAE,WAAW;gCACpB,WAAW,EAAE,eAAe;6BAC7B;yBACF;wBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;qBACpB;oBACD,WAAW,EAAE,mCAAmC;iBACjD;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;SAC9B;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE;;;;;;;yEAOwD;QACrE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,EAAE;oBACZ,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;qBACf;oBACD,WAAW,EAAE,sCAAsC;iBACpD;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,MAAM,EAAE;4BACN,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC;4BACrC,WAAW,EAAE,0BAA0B;yBACxC;wBACD,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;4BAC/B,WAAW,EAAE,4BAA4B;yBAC1C;qBACF;oBACD,WAAW,EAAE,+BAA+B;iBAC7C;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;SACjC;KACF;CACF,CAAC"}
@@ -35,6 +35,42 @@ export declare class HeySeoApiClient {
35
35
  * Create a Kanban task
36
36
  */
37
37
  createTask(task: Omit<KanbanTask, 'id' | 'createdAt' | 'updatedAt'>): Promise<KanbanTask>;
38
+ /**
39
+ * Get all tasks for a site
40
+ */
41
+ getTasks(siteId: string, options?: {
42
+ status?: 'todo' | 'in_progress' | 'done';
43
+ priority?: 'low' | 'medium' | 'high';
44
+ category?: 'technical' | 'content' | 'links' | 'ux';
45
+ }): Promise<KanbanTask[]>;
46
+ /**
47
+ * Get a single task by ID
48
+ */
49
+ getTask(taskId: string): Promise<KanbanTask>;
50
+ /**
51
+ * Update a Kanban task
52
+ */
53
+ updateTask(taskId: string, updates: Partial<Pick<KanbanTask, 'title' | 'description' | 'status' | 'priority' | 'category'>>): Promise<KanbanTask>;
54
+ /**
55
+ * Delete a Kanban task
56
+ */
57
+ deleteTask(taskId: string): Promise<void>;
58
+ /**
59
+ * Bulk create multiple tasks
60
+ */
61
+ bulkCreateTasks(siteId: string, tasks: Array<{
62
+ title: string;
63
+ description?: string;
64
+ priority?: 'low' | 'medium' | 'high';
65
+ category?: 'technical' | 'content' | 'links' | 'ux';
66
+ }>): Promise<KanbanTask[]>;
67
+ /**
68
+ * Bulk update multiple tasks
69
+ */
70
+ bulkUpdateTasks(taskIds: string[], updates: {
71
+ status?: 'todo' | 'in_progress' | 'done';
72
+ priority?: 'low' | 'medium' | 'high';
73
+ }): Promise<KanbanTask[]>;
38
74
  /**
39
75
  * Get top keywords for a site
40
76
  */
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,MAAM,EACN,eAAe,EACf,cAAc,EACd,UAAU,EAEX,MAAM,aAAa,CAAC;AAErB,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;YAIlB,OAAO;IAuBrB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAQvC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAUlD;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAqB/D;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyBzD;;OAEG;IACG,gBAAgB,CACpB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,QAAQ,GAAG,SAAoB,GACxC,OAAO,CAAC,eAAe,CAAC;IAc3B;;OAEG;IACG,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAClD,OAAO,CAAC,cAAc,EAAE,CAAC;IAW5B;;OAEG;IACG,UAAU,CACd,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GACvD,OAAO,CAAC,UAAU,CAAC;IActB;;OAEG;IACG,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GACL,OAAO,CAAC,cAAc,CAAC;IAgB1B;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GACL,OAAO,CAAC,cAAc,CAAC;IAgB1B;;OAEG;IACG,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QACP,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KACb,GACL,OAAO,CAAC;QACT,GAAG,EAAE,cAAc,CAAC;QACpB,GAAG,EAAE,MAAM,EAAE,CAAC;KACf,CAAC;CA+BH;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,eAAe,CAWnF"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"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"}
@@ -124,6 +124,95 @@ export class HeySeoApiClient {
124
124
  }
125
125
  return response.data;
126
126
  }
127
+ /**
128
+ * Get all tasks for a site
129
+ */
130
+ async getTasks(siteId, options = {}) {
131
+ const queryParams = new URLSearchParams();
132
+ queryParams.append('siteId', siteId);
133
+ if (options.status)
134
+ queryParams.append('status', options.status);
135
+ if (options.priority)
136
+ queryParams.append('priority', options.priority);
137
+ if (options.category)
138
+ queryParams.append('category', options.category);
139
+ const response = await this.request(`/api/mcp/tasks?${queryParams.toString()}`);
140
+ if (!response.success || !response.data) {
141
+ throw new Error(response.error || 'Failed to fetch tasks');
142
+ }
143
+ return response.data;
144
+ }
145
+ /**
146
+ * Get a single task by ID
147
+ */
148
+ async getTask(taskId) {
149
+ const response = await this.request(`/api/mcp/tasks/${taskId}`);
150
+ if (!response.success || !response.data) {
151
+ throw new Error(response.error || 'Failed to fetch task');
152
+ }
153
+ return response.data;
154
+ }
155
+ /**
156
+ * Update a Kanban task
157
+ */
158
+ async updateTask(taskId, updates) {
159
+ const response = await this.request(`/api/mcp/tasks/${taskId}`, {
160
+ method: 'PATCH',
161
+ body: JSON.stringify(updates),
162
+ });
163
+ if (!response.success || !response.data) {
164
+ throw new Error(response.error || 'Failed to update task');
165
+ }
166
+ return response.data;
167
+ }
168
+ /**
169
+ * Delete a Kanban task
170
+ */
171
+ async deleteTask(taskId) {
172
+ const response = await this.request(`/api/mcp/tasks/${taskId}`, {
173
+ method: 'DELETE',
174
+ });
175
+ if (!response.success) {
176
+ throw new Error(response.error || 'Failed to delete task');
177
+ }
178
+ }
179
+ /**
180
+ * Bulk create multiple tasks
181
+ */
182
+ async bulkCreateTasks(siteId, tasks) {
183
+ const response = await this.request('/api/mcp/tasks/bulk', {
184
+ method: 'POST',
185
+ body: JSON.stringify({
186
+ siteId,
187
+ tasks: tasks.map((task) => ({
188
+ ...task,
189
+ status: 'todo',
190
+ priority: task.priority || 'medium',
191
+ category: task.category || 'technical',
192
+ })),
193
+ }),
194
+ });
195
+ if (!response.success || !response.data) {
196
+ throw new Error(response.error || 'Failed to bulk create tasks');
197
+ }
198
+ return response.data;
199
+ }
200
+ /**
201
+ * Bulk update multiple tasks
202
+ */
203
+ async bulkUpdateTasks(taskIds, updates) {
204
+ const response = await this.request('/api/mcp/tasks/bulk', {
205
+ method: 'PATCH',
206
+ body: JSON.stringify({
207
+ taskIds,
208
+ updates,
209
+ }),
210
+ });
211
+ if (!response.success || !response.data) {
212
+ throw new Error(response.error || 'Failed to bulk update tasks');
213
+ }
214
+ return response.data;
215
+ }
127
216
  /**
128
217
  * Get top keywords for a site
129
218
  */
@@ -193,7 +282,7 @@ export class HeySeoApiClient {
193
282
  */
194
283
  export function createApiClient(config = {}) {
195
284
  const apiKey = config.apiKey || process.env.HEYSEO_API_KEY;
196
- const baseUrl = config.baseUrl || process.env.HEYSEO_API_URL || 'https://heyseo.app';
285
+ const baseUrl = config.baseUrl || process.env.HEYSEO_API_URL || 'https://www.heyseo.app';
197
286
  if (!apiKey) {
198
287
  throw new Error('HeySeo API key is required. Set HEYSEO_API_KEY environment variable or pass apiKey in config.');
199
288
  }