betfair-node
Version:
A comprehensive Node.js TypeScript library for the Betfair Exchange API, providing both JSON-RPC API integration and real-time Exchange Stream API support for automated betting and trading applications.
103 lines • 3.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getHeartbeatInterval = exports.isHeartbeatActive = exports.updateHeartbeatInterval = exports.refreshHeartbeat = exports.stopHeartbeat = exports.startHeartbeat = exports.createHeartbeatState = void 0;
/**
* Creates a new heartbeat state
* @param heartbeatMs - Heartbeat interval in milliseconds
* @param onHeartAttack - Callback function when heartbeat fails
* @returns Initial heartbeat state
*/
const createHeartbeatState = (heartbeatMs, onHeartAttack) => ({
isBeating: false,
heartbeatMs,
onHeartAttack,
});
exports.createHeartbeatState = createHeartbeatState;
/**
* Starts the heartbeat monitoring
* @param state - Current heartbeat state
* @returns Updated heartbeat state
*/
const startHeartbeat = (state) => {
if (state.isBeating) {
return state; // Already beating
}
// Starting heartbeat
// Add extra 2 seconds to reduce chance of accidental heart attack
const timeout = setTimeout(state.onHeartAttack, state.heartbeatMs + 2000);
return {
...state,
isBeating: true,
timeout,
};
};
exports.startHeartbeat = startHeartbeat;
/**
* Stops the heartbeat monitoring
* @param state - Current heartbeat state
* @returns Updated heartbeat state
*/
const stopHeartbeat = (state) => {
if (!state.isBeating) {
return state; // Already stopped
}
// Stopping heartbeat
if (state.timeout) {
clearTimeout(state.timeout);
}
return {
...state,
isBeating: false,
timeout: undefined,
};
};
exports.stopHeartbeat = stopHeartbeat;
/**
* Refreshes the heartbeat timer by stopping and restarting it
* @param state - Current heartbeat state
* @returns Updated heartbeat state
*/
const refreshHeartbeat = (state) => {
if (!state.isBeating) {
return state; // Don't warn - just return if not beating
}
// Stop and restart for a more reliable refresh
const stoppedState = (0, exports.stopHeartbeat)(state);
return (0, exports.startHeartbeat)(stoppedState);
};
exports.refreshHeartbeat = refreshHeartbeat;
/**
* Updates the heartbeat interval
* @param state - Current heartbeat state
* @param newHeartbeatMs - New heartbeat interval in milliseconds
* @returns Updated heartbeat state
*/
const updateHeartbeatInterval = (state, newHeartbeatMs) => {
const updatedState = { ...state, heartbeatMs: newHeartbeatMs };
if (state.isBeating) {
// Restart with new interval
const stoppedState = (0, exports.stopHeartbeat)(updatedState);
return (0, exports.startHeartbeat)(stoppedState);
}
return updatedState;
};
exports.updateHeartbeatInterval = updateHeartbeatInterval;
/**
* Checks if the heartbeat is currently active
* @param state - Current heartbeat state
* @returns True if heartbeat is active
*/
const isHeartbeatActive = (state) => {
return state.isBeating;
};
exports.isHeartbeatActive = isHeartbeatActive;
/**
* Gets the current heartbeat interval
* @param state - Current heartbeat state
* @returns Heartbeat interval in milliseconds
*/
const getHeartbeatInterval = (state) => {
return state.heartbeatMs;
};
exports.getHeartbeatInterval = getHeartbeatInterval;
//# sourceMappingURL=heartbeat.js.map