A robust TypeScript/JavaScript parser for ZKTeco iClock protocol attendance data with perfect type safety and comprehensive error handling.
- π― Perfect Type Safety - Complete TypeScript definitions
- π‘οΈ Robust Error Handling - Graceful parsing with warnings
- π Comprehensive Support - All verification types (Fingerprint, Face, Palm, Card, Password)
- π Device Info Parsing - Parse device information from requests
- β‘ High Performance - Optimized for real-time attendance processing
- π Framework Agnostic - Works with Node.js, Bun, Express, etc.
npm install @palmcode/zkteco-iclock-parserconst { ZKTecoiClockParser } = require('@palmcode/zkteco-iclock-parser');
// Parse attendance data from ZKTeco device
const attendanceData = '11\t2025-08-27 10:57:49\t0\t25\t0\t0\t0\t0\t0\t0';
const result = ZKTecoiClockParser.parseAttendanceLog(attendanceData);
if (result.success) {
result.data.forEach(log => {
console.log(`User ${log.userID} - ${log.timestamp}`);
console.log(`Type: ${ZKTecoiClockParser.getVerifyTypeName(log.verifyType)}`);
console.log(`Action: ${ZKTecoiClockParser.isCheckIn(log) ? 'Check In' : 'Check Out'}`);
});
}import { ZKTecoiClockParser, AttendanceLog, VerifyType } from '@palmcode/zkteco-iclock-parser';
const result = ZKTecoiClockParser.parseAttendanceLog(data);
if (result.success && result.data) {
result.data.forEach((log: AttendanceLog) => {
if (log.verifyType === VerifyType.PALM) {
console.log('Palm recognition used!');
}
});
}Parse raw attendance data from ZKTeco device.
Parameters:
data- Raw tab-separated attendance dataoptions- Parser options (optional)
Returns: ParseResult<AttendanceLog[]>
Parse device information from HTTP query parameters.
Returns: ParseResult<DeviceInfo>
isCheckIn(log: AttendanceLog): booleanisCheckOut(log: AttendanceLog): booleangetVerifyTypeName(type: VerifyType): stringformatAttendanceLog(log: AttendanceLog): string
import { ZKTecoiClockParser } from '@palmcode/zkteco-iclock-parser';
Bun.serve({
port: 3010,
async fetch(req) {
if (req.url.includes('/iclock/cdata')) {
const body = await req.text();
const result = ZKTecoiClockParser.parseAttendanceLog(body);
// Process attendance logs
return new Response("OK");
}
}
});const express = require('express');
const { ZKTecoiClockParser } = require('@palmcode/zkteco-iclock-parser');
const app = express();
app.use(express.text());
app.post('/iclock/cdata', (req, res) => {
const result = ZKTecoiClockParser.parseAttendanceLog(req.body);
if (result.success) {
// Process attendance data
result.data.forEach(log => {
console.log(ZKTecoiClockParser.formatAttendanceLog(log));
});
}
res.send('OK');
});
app.listen(3010);| Field | Position | Description |
|---|---|---|
| UserID | 0 | Employee/User identifier |
| Timestamp | 1 | Date and time (YYYY-MM-DD HH:mm:ss) |
| InOutMode | 2 | 0=Check In, 1=Check Out, 2=Break Out, etc. |
| VerifyType | 3 | 1=Fingerprint, 15=Face, 25=Palm, etc. |
| WorkCode | 4 | 0=Normal, 1=Overtime, 2=Holiday, etc. |
FINGERPRINT (1)- Fingerprint verificationPASSWORD (2)- Password verificationCARD (3)- Card/RFID verificationFACE (15)- Face recognitionPALM (25)- Palm recognition
CHECK_IN (0)- Regular check-inCHECK_OUT (1)- Regular check-outBREAK_OUT (2)- Break time startBREAK_IN (3)- Break time endOT_IN (4)- Overtime startOT_OUT (5)- Overtime end
const options = {
strictMode: true, // Fail on any parsing error
includeRawData: true, // Include raw line in result
timestampFormat: 'auto' // Timestamp parsing mode
};
const result = ZKTecoiClockParser.parseAttendanceLog(data, options);Contributions are welcome! Please feel free to submit a Pull Request.
MIT Β© Palm Code Software Development L.L.C