Docs / Contact / sdks/javascript/examples

JavaScript SDK: Examples

Practical examples for common use cases with the Tendrl JavaScript SDK.

React Dashboard

A complete React component that displays connection status and sends/receives messages:

javascript


function DeviceDashboard() {
    const [messages, setMessages] = useState([]);
    const [sensorData, setSensorData] = useState({ temperature: 0, humidity: 0 });

    const { isConnected, publish } = useTendrlClient({
        onMessage: (msg) => {
            setMessages(prev => [...prev.slice(-49), msg]); // Keep last 50
            return true;
        },
        offlineStorage: true,
        checkMsgRate: 3000,
        checkMsgLimit: 10
    });

    const sendReading = () => {
        publish(sensorData, ['sensor', 'dashboard']);
    };

    return (
        <div>
            <h2>Device Dashboard</h2>
            <p>Status: {isConnected ? 'Online' : 'Offline'}</p>

            <div>
                <input
                    type="number"
                    value={sensorData.temperature}
                    onChange={e => setSensorData(prev => ({
                        ...prev,
                        temperature: parseFloat(e.target.value)
                    }))}
                    placeholder="Temperature"
                />
                <button onClick={sendReading}>Send</button>

            <h3>Messages ({messages.length})</h3>
            <ul>
                {messages.map((msg, i) => (
                    <li key={i}>
                        [{msg.msg_type}] {JSON.stringify(msg.data)}
                    </li>
                ))}
            </ul>
    );
}

Node.js Service

A Node.js service that collects and forwards data:

javascript


const client = new TendrlClient({
    apiKey: process.env.TENDRL_KEY,
    offlineStorage: false, // IndexedDB not available in Node
    debug: true
});

// Route inbound messages by tag
client.on({ tag: 'ai-response' }, (message) => {
    const { msg_type, data, source } = message;
    console.log(`[${msg_type}] from ${source}:`, data);
    return true;
});
client.on({ tags: ['alert', 'anomaly'] }, (message) => {
    console.log('Alert:', message.data);
    return true;
});
client.setMessageCheckRate(5000);

client.start();

// Periodic metrics
setInterval(() => {
    const mem = process.memoryUsage();
    client.publish({
        heap_used: mem.heapUsed,
        heap_total: mem.heapTotal,
        rss: mem.rss,
        uptime: process.uptime()
    }, ['metrics', 'node']);
}, 30000);

process.on('SIGINT', () => {
    client.stop();
    process.exit();
});

State Table Management

javascript

const client = new TendrlClient({ apiKey: 'your_key' });
client.start();

// Read current state
const state = await client.getState();
console.log('Current state:', state);

// Merge new data (PATCH)
await client.updateState({
    firmware: '2.1.0',
    lastSeen: new Date().toISOString()
});

// Merge with tags to trigger flows
await client.updateState(
    { status: 'active' },
    ['device', 'status-change']
);

// Replace entire state (PUT)
await client.replaceState({
    firmware: '2.1.0',
    status: 'active'
});

Heartbeat

Send system information to Contact:

javascript

await client.sendHeartbeat({
    mem_free: 8589934592,
    mem_total: 17179869184,
    disk_free: 107374182400,
    disk_size: 1073741824000
});

Data Types

The SDK accepts any JSON-serializable data:

javascript

// Object (most common)
client.publish({ key: 'value' }, ['tag']);

// String (auto-wrapped as {data: "..."})
client.publish('simple message', ['tag']);

// Array
client.publish([1, 2, 3], ['tag']);

// Nested structures
client.publish({
    sensors: [
        { id: 'temp-1', value: 23.5 },
        { id: 'temp-2', value: 24.1 }
    ],
    timestamp: new Date().toISOString()
}, ['sensor', 'batch']);

Connection Monitoring

javascript

// Check connection state
const online = await client.checkConnectionState();
console.log('Connected:', online);

// React hook provides reactive state
const { isConnected } = useTendrlClient({ ... });
// isConnected updates automatically