Salesloft deploy integration
425 plugins, 2,810 skills, 200 agents for Claude Code. Open-source marketplace at tonsofskills.com with the ccpi CLI package manager.
npx -y skills add jeremylongshore/claude-code-plugins-plus-skills --skill salesloft-deploy-integrationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
'Deploy SalesLoft integrations to Vercel, Fly.io, and Cloud Run.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
3.9 KB, 874 tokens by cl100k_base, as published. Nobody here has run it
SalesLoft Deploy Integration
Overview
Deploy SalesLoft-powered applications to cloud platforms with proper secrets management, webhook endpoint configuration, and health checks. SalesLoft requires HTTPS webhook endpoints and OAuth tokens stored securely.
Instructions
Vercel Deployment
# Set secrets
vercel env add SALESLOFT_CLIENT_ID production
vercel env add SALESLOFT_CLIENT_SECRET production
vercel env add SALESLOFT_WEBHOOK_SECRET production
# Deploy
vercel --prod
// api/webhooks/salesloft.ts (Vercel serverless function)
import { verifyWebhookSignature } from '../../lib/salesloft';
export const config = { api: { bodyParser: false } }; // Raw body for HMAC
export default async function handler(req: Request) {
const body = await req.text();
const sig = req.headers.get('x-salesloft-signature')!;
const ts = req.headers.get('x-salesloft-timestamp')!;
if (!verifyWebhookSignature(Buffer.from(body), sig, ts, process.env.SALESLOFT_WEBHOOK_SECRET!)) {
return new Response('Invalid signature', { status: 401 });
}
const event = JSON.parse(body);
// Process event...
return new Response(JSON.stringify({ received: true }), { status: 200 });
}
Fly.io Deployment
# fly.toml
app = "salesloft-sync"
primary_region = "iad"
[env]
NODE_ENV = "production"
[http_service]
internal_port = 3000
force_https = true
auto_stop_machines = true
auto_start_machines = true
[[services.http_checks]]
interval = "30s"
timeout = "5s"
path = "/health"
fly secrets set SALESLOFT_CLIENT_ID=xxx SALESLOFT_CLIENT_SECRET=xxx
fly secrets set SALESLOFT_WEBHOOK_SECRET=xxx
fly deploy
Cloud Run Deployment
# Store secrets in Secret Manager
echo -n "client-id" | gcloud secrets create salesloft-client-id --data-file=-
echo -n "client-secret" | gcloud secrets create salesloft-client-secret --data-file=-
# Deploy with secret mounts
gcloud run deploy salesloft-sync \
--image gcr.io/$PROJECT_ID/salesloft-sync \
--region us-central1 \
--set-secrets=SALESLOFT_CLIENT_ID=salesloft-client-id:latest \
--set-secrets=SALESLOFT_CLIENT_SECRET=salesloft-client-secret:latest \
--allow-unauthenticated
Health Check (All Platforms)
app.get('/health', async (req, res) => {
const start = Date.now();
try {
const { data } = await api.get('/me.json');
res.json({
status: 'healthy',
salesloft: { user: data.data.email, latencyMs: Date.now() - start },
});
} catch (err: any) {
res.status(503).json({
status: 'degraded',
salesloft: { error: err.message, latencyMs: Date.now() - start },
});
}
});
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| Webhook 401 | Wrong signing secret | Verify secret matches SalesLoft config |
| Cold start timeout | Webhook response > 30s | Process async, respond 200 immediately |
| Secret not found | Missing env var | Check platform secret configuration |
| Health check fails | Token expired | Ensure token refresh is automated |
Resources
Next Steps
For webhook handling, see salesloft-webhooks-events.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.