clawdbot-workspace/meta-ads-mcp/FIXES_REMAINING.md

182 lines
5.8 KiB
Markdown

# TypeScript Compilation Fixes - Progress Report
## ✅ COMPLETED
### 1. Core Infrastructure
- ✅ Fixed `src/tools/analytics.ts` - Converted all 8 tools from `server.tool()` to `registry.registerTool()` pattern
- ✅ Fixed `src/tools/audiences.ts` - Converted first tool (need to complete remaining 6 tools)
- ✅ Fixed `src/tools/ad-sets.ts` - Fixed TS2352 type conversion error
- ✅ Fixed `src/index.ts` - Removed unused SimpleCache import
### 2. Pattern Established
The working pattern for tier-2 modules (analytics, audiences, budget, catalog, competitive, experiments, leads):
**Before:**
```typescript
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
interface MetaApiClient { ... }
export function register(server: McpServer, client: MetaApiClient): void {
const toolAnnotations: ToolAnnotations = { ... };
server.tool(
"tool_name",
"description",
{ schema },
async (params) => {
// ...
return { data };
},
toolAnnotations
);
}
```
**After:**
```typescript
import type { ToolRegistry } from "../server.js";
export function registerXxxTools(registry: ToolRegistry): void {
const client = registry.getClient();
registry.registerTool({
name: "tool_name",
description: "description",
inputSchema: z.object({ schema }),
annotations: { ... },
handler: async (args) => {
const params = args as { types };
// ...
const result = { data };
return {
content: [{
type: 'text',
text: JSON.stringify(result, null, 2),
}],
};
},
});
}
```
## 🔧 REMAINING WORK
### Tier-2 Modules (Need Same Pattern as Analytics)
**5 files remaining - Each needs full conversion:**
1.`src/tools/analytics.ts` - **DONE** (8/8 tools converted)
2. 🔄 `src/tools/audiences.ts` - **PARTIAL** (1/7 tools converted)
- ✅ list_audiences
- ❌ create_custom_audience
- ❌ create_lookalike_audience
- ❌ get_targeting_reach
- ❌ suggest_interests
- ❌ search_targeting
- ❌ calculate_audience_overlap
3.`src/tools/budget.ts` - 5 tools to convert
4.`src/tools/catalog.ts` - 4 tools to convert
5.`src/tools/competitive.ts` - 3 tools to convert
6.`src/tools/experiments.ts` - 3 tools to convert
7.`src/tools/leads.ts` - 3 tools to convert
**Steps for each file:**
1. Replace imports: Remove `McpServer`, `interface MetaApiClient`, and `ToolAnnotations`
2. Add: `import type { ToolRegistry } from "../server.js";`
3. Change function signature: `export function registerXxxTools(registry: ToolRegistry)`
4. Add at function start: `const client = registry.getClient();`
5. For each tool: Convert `server.tool()` structure to `registry.registerTool()` structure
6. Add type annotations to all handler parameters
7. Wrap return values in `{ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }`
8. Cast client method params: `client.get(..., params as Record<string, unknown>)`
### Apps Folder (Different Issues)
**10 app files with TS2347, TS7006, TS6133, TS2339 errors:**
#### TS2347: "Untyped function calls may not accept type arguments"
These are in apps that import and call client methods with generic type arguments.
**Fix:** The apps need to properly type the client parameter or import the MetaApiClient type.
Example files:
- `src/apps/ab-test-results.ts` (lines 45, 56)
- `src/apps/account-health.ts` (lines 42, 48, 55, 62, 73)
- `src/apps/ad-library-browser.ts` (line 64)
- `src/apps/ad-performance-grid.ts` (lines 44, 51)
- `src/apps/audience-builder.ts` (line 49)
- `src/apps/campaign-dashboard.ts` (lines 43, 50)
- `src/apps/creative-preview.ts` (lines 41, 53)
- `src/apps/funnel-analyzer.ts` (line 47)
- `src/apps/performance-heatmap.ts` (line 48)
- `src/apps/spend-tracker.ts` (lines 47, 56)
**Fix pattern:**
Check app function signature - if `client` parameter is typed as `any`, change to:
```typescript
import type { MetaApiClient } from '../client/meta-client.js';
export async function myApp(client: MetaApiClient, ...otherParams) {
// Now client.get<Type>() will work
}
```
#### TS7006: "Parameter implicitly has 'any' type"
Add explicit types to all callback parameters.
**Fix:**
```typescript
// Before
.map((item) => ...)
.filter((x) => ...)
// After
.map((item: ItemType) => ...)
.filter((x: XType) => ...)
```
#### TS6133: "declared but its value is never read"
Remove or use the unused variables.
Examples:
- `src/apps/ab-test-results.ts:54` - Remove `index` parameter
- `src/apps/account-health.ts:81` - Remove or use `previousData`
- `src/apps/account-health.ts:123` - Remove or use `currentCPA`
- `src/apps/campaign-builder.ts:43` - Remove unused `client` parameter
- `src/apps/spend-tracker.ts:53` - Remove or use `amountSpent`
#### TS2339: Property does not exist
These are type narrowing issues where TypeScript doesn't know which union type variant you're using.
**Files:**
- `src/apps/ab-test-results.ts` - Properties `confidence` and `roasLift` don't exist on base type
- **Fix:** Add type guard or use optional chaining: `result.confidence ?? 0`
## 📊 Current Error Count
Total errors: ~140
- Tier-2 modules: ~60 errors (5 files)
- Apps folder: ~80 errors (10 files)
## 🎯 Recommended Next Steps
1. **Complete tier-2 modules** - These follow a consistent pattern and can be batch-processed
2. **Fix app client typing** - Add proper MetaApiClient types to all app functions
3. **Add callback parameter types** - Go through each TS7006 error and add types
4. **Clean up unused variables** - Remove or use all TS6133 flagged variables
5. **Fix property access issues** - Handle union types properly in ab-test-results.ts
## 🛠 Quick Fix Commands
```bash
# Check remaining error count
npx tsc --noEmit 2>&1 | wc -l
# See errors by file
npx tsc --noEmit 2>&1 | grep "^src/" | cut -d'(' -f1 | sort | uniq -c | sort -rn
# Test specific file
npx tsc --noEmit src/tools/audiences.ts 2>&1
```