@jitterflow/sdk-node
v0.1.0
Published
Official Node.js/TypeScript client for the Jitterflow webhook delivery API — endpoint management, ingestion, DLQ replay, and outbound signature verification (legacy + Standard Webhooks).
Maintainers
Readme
📦 @jitterflow/sdk-node
Official Node.js/TypeScript client for the jitterflow webhook delivery API.
📥 Install
npm install @jitterflow/sdk-node🚀 Quickstart
import { JitterflowClient } from '@jitterflow/sdk-node';
const client = new JitterflowClient({ apiKey: process.env.JITTERFLOW_API_KEY! });
// 1. Create an endpoint
const endpoint = await client.createEndpoint({
name: 'orders-webhook',
destinationUrl: 'https://example.com/hooks/orders',
});
// 2. Send a payload
const { jobId, scheduledFor } = await client.ingest(endpoint.endpointKey, {
payload: { event: 'order.created', orderId: 42 },
});
// 3. Check the dead-letter queue for anything that failed
const failed = await client.listDlq({ resolved: false });See the API docs for the full request/response reference every method here wraps.
🔑 Verifying inbound signatures
Jitterflow signs every delivery twice: the legacy X-Jitterflow-Signature header, and — alongside it — Standard Webhooks-compliant svix-id/svix-timestamp/svix-signature headers. Verify with whichever your framework already supports:
import { verifyLegacySignature, verifyStandardWebhookSignature } from '@jitterflow/sdk-node';
// Legacy header
verifyLegacySignature(endpointSecret, rawBody, req.headers['x-jitterflow-signature']);
// Standard Webhooks headers
verifyStandardWebhookSignature(endpointSecret, rawBody, {
'svix-id': req.headers['svix-id'],
'svix-timestamp': req.headers['svix-timestamp'],
'svix-signature': req.headers['svix-signature'],
});⚠️
rawBodymust be the exact, unparsed request body string — verification hashes the raw bytes Jitterflow signed, not a re-serialized version of the parsed JSON.
🗺️ API
| Method | Wraps |
|---|---|
| createEndpoint(input) | POST /v1/endpoints |
| listEndpoints() | GET /v1/endpoints |
| updateEndpoint(id, patch) | PATCH /v1/endpoints/:id |
| deleteEndpoint(id) | DELETE /v1/endpoints/:id |
| rotateEndpointSecret(id) | POST /v1/endpoints/:id/rotate-key |
| listEndpointJobs(id) | GET /v1/endpoints/:id/jobs |
| ingest(endpointKey, input) | POST /v1/ingest/:endpointKey |
| listDlq(options) | GET /v1/dlq |
| retryDlq(jobId) | POST /v1/dlq/:jobId/retry |
| resolveDlq(jobId) | POST /v1/dlq/:jobId/resolve |
A non-2xx response from any method throws JitterflowApiError (.status, .message).
