@valeostratum/facilitator
v0.3.0
Published
Run a Stratum settlement facilitator in 4 lines of code.
Downloads
135
Readme
@valeostratum/facilitator
Run a Stratum settlement facilitator in 4 lines of code.
Install
npm install @valeostratum/facilitatorQuickstart
const { StratumFacilitator } = require('@valeostratum/facilitator');
const facilitator = new StratumFacilitator({
apiKey: process.env.STRATUM_API_KEY,
solanaPrivateKey: process.env.SOLANA_PRIVATE_KEY,
});
facilitator.start();That's it. The SDK:
- Starts an HTTP server on port 3200 with a
POST /settleendpoint - Generates a webhook secret automatically
- If
PUBLIC_URLis set, registers the webhook with the Stratum Gateway - Verifies incoming HMAC signatures
- Executes Solana USDC transfers
- Confirms settlement back to the Gateway
Events
facilitator.on('batch', (batch) => {
console.log(`Received batch ${batch.batch_id} with ${batch.transfers.length} transfers`);
});
facilitator.on('settled', (result) => {
console.log(`Settled batch ${result.batchId}: ${result.txHashes.length} transactions`);
});
facilitator.on('error', (err) => {
console.error('Settlement error:', err.message);
});Configuration
new StratumFacilitator({
apiKey: 'sk_live_...', // required: Facilitator API key
solanaPrivateKey: '<base64>', // required: Base64-encoded Solana keypair
port: 3200, // optional, default: 3200
publicUrl: 'https://my-server.com', // optional, reads PUBLIC_URL env
gatewayUrl: 'https://...', // optional, default: gateway.stratumx402.com
solanaRpcUrl: 'https://...', // optional, default: mainnet
usdcMint: 'EPjFWdd5...', // optional, default: mainnet USDC
});Environment Variables
STRATUM_API_KEY=sk_live_...
SOLANA_PRIVATE_KEY=<base64 keypair>
PUBLIC_URL=https://your-server.com # for auto webhook registration
SOLANA_RPC_URL=https://api.mainnet-beta.solana.comBring Your Own Server
If you already have an Express/Fastify/etc. server, use handler() instead of start():
const express = require('express');
const { StratumFacilitator } = require('@valeostratum/facilitator');
const app = express();
const facilitator = new StratumFacilitator({
apiKey: process.env.STRATUM_API_KEY,
solanaPrivateKey: process.env.SOLANA_PRIVATE_KEY,
});
app.post('/settle', express.raw({ type: '*/*' }), facilitator.handler());
app.listen(3200);Or use processWebhook() directly for any framework:
const result = await facilitator.processWebhook(rawBody, signatureHeader);
// { success: boolean, txHashes: string[], batchId?: string }