182 lines
5.8 KiB
Markdown
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
|
|
```
|