Apply production-ready Vercel SDK patterns for TypeScript and Python. Use when implementing Vercel integrations, refactoring SDK usage, or establishing team coding standards for Vercel. Trigger with phrases like "vercel SDK patterns", "vercel best practices", "vercel code patterns", "idiomatic vercel".
/plugin marketplace add jeremylongshore/claude-code-plugins-plus-skills/plugin install vercel-pack@claude-code-plugins-plusThis skill is limited to using the following tools:
Production-ready patterns for Vercel SDK usage in TypeScript and Python.
vercel-install-auth setup// src/vercel/client.ts
import { VercelClient } from 'vercel';
let instance: VercelClient | null = null;
export function getVercelClient(): VercelClient {
if (!instance) {
instance = new VercelClient({
apiKey: process.env.VERCEL_API_KEY!,
// Additional options
});
}
return instance;
}
import { VercelError } from 'vercel';
async function safeVercelCall<T>(
operation: () => Promise<T>
): Promise<{ data: T | null; error: Error | null }> {
try {
const data = await operation();
return { data, error: null };
} catch (err) {
if (err instanceof VercelError) {
console.error({
code: err.code,
message: err.message,
});
}
return { data: null, error: err as Error };
}
}
async function withRetry<T>(
operation: () => Promise<T>,
maxRetries = 3,
backoffMs = 1000
): Promise<T> {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
return await operation();
} catch (err) {
if (attempt === maxRetries) throw err;
const delay = backoffMs * Math.pow(2, attempt - 1);
await new Promise(r => setTimeout(r, delay));
}
}
throw new Error('Unreachable');
}
| Pattern | Use Case | Benefit |
|---|---|---|
| Safe wrapper | All API calls | Prevents uncaught exceptions |
| Retry logic | Transient failures | Improves reliability |
| Type guards | Response validation | Catches API changes |
| Logging | All operations | Debugging and monitoring |
const clients = new Map<string, VercelClient>();
export function getClientForTenant(tenantId: string): VercelClient {
if (!clients.has(tenantId)) {
const apiKey = getTenantApiKey(tenantId);
clients.set(tenantId, new VercelClient({ apiKey }));
}
return clients.get(tenantId)!;
}
from contextlib import asynccontextmanager
from None import VercelClient
@asynccontextmanager
async def get_vercel_client():
client = VercelClient()
try:
yield client
finally:
await client.close()
import { z } from 'zod';
const vercelResponseSchema = z.object({
id: z.string(),
status: z.enum(['active', 'inactive']),
createdAt: z.string().datetime(),
});
Apply patterns in vercel-core-workflow-a for real-world usage.