zklib-ts
Version:
Unofficial zkteco library allows Node.js developers to easily interface with ZK BioMetric Fingerprint Attendance Devices
108 lines (107 loc) • 3.96 kB
TypeScript
import { RTEvent } from "./command";
import { User } from "../models/User";
import { Attendance } from "../models/Attendance";
export interface DeviceInfo {
userCounts: number;
logCounts: number;
logCapacity: number;
}
export type UserData28 = Omit<User, "password" | "group_id" | "card" | "repack29" | "repack73">;
export interface RecordData16 {
record_time: Date;
user_id: string;
ip?: string;
}
export interface AlarmEvent {
/** Misoperation [0x3A], Tamper [0x37], Exit Button [0x35] */
alarm_type: any;
/** indicates cause, 20 = Duress, 22 = Passback */
alarm_cause: any;
/** user serial number */
user_uid: any;
/** matching way */
match_type: any;
}
export interface EnrolledFingerEvent {
/** Error code */
result: number;
/** finger size */
size: number;
/** user pin, storedAsString */
pin: string;
/** finger index */
fid: number;
}
export interface FingerScoreEvent {
/** a number between 0 [0x00] and 100 [0x64] indicating the quality ofThe finger during enrolling process */
score: number;
}
export type RealTimeLog = {
event: RTEvent;
payload?: RecordData16 | EnrolledFingerEvent | AlarmEvent | FingerScoreEvent;
};
interface UDPHeader {
commandId: number;
checkSum: number;
sessionId: number;
replyId: number;
}
interface TCPHeader extends UDPHeader {
payloadSize: number;
}
export type FreeSizes = {
/** Number of users */
userCounts: number;
/** Number of logs */
logCounts: number;
/** Number of fingerprints */
fingerCount: number;
/** Number of admins */
adminCount: number;
/** Number or opLogs, maybe access control events? */
opLogCount: number;
/** Capacity of logs in bytes */
logCapacity: number;
/** Capacity of fingerprints */
fingerCapacity: number;
/** Capacity of users */
userCapacity: number;
/** Capacity of oplog */
attLogCapacity: number;
/** Number of available finger templates */
fingerAvailable: number;
/** Number of available Users */
userAvailable: number;
/** Number of attendanceLog available */
attLogAvailable: number;
/** Number of faces */
faceCount: number;
/** Capacity of faces */
faceCapacity: number;
};
export declare const createUDPHeader: (command: number, sessionId: number, replyId: number, data: any) => Buffer;
export declare const createTCPHeader: (command: number, sessionId: number, replyId: number, data: any) => Buffer;
export declare const removeTcpHeader: (buf: Buffer) => Buffer;
export declare const parseTimeToDate: (time: number) => Date;
export declare const decodeUserData28: (userData: Buffer) => UserData28;
export declare const decodeUserData72: (userData: Buffer) => User;
export declare const decodeRecordData40: (recordData: Buffer) => Attendance;
export declare const decodeRecordData16: (recordData: Buffer) => RecordData16;
export declare const decodeRecordRealTimeLog18: (recordData: Buffer) => RecordData16;
export declare const decodeUDPHeader: (header: Buffer) => UDPHeader;
export declare const decodeTCPHeader: (header: Buffer) => TCPHeader;
export declare const exportErrorMessage: (commandValue: number) => string;
export declare const checkNotEventTCP: (data: Buffer) => boolean;
export declare const checkNotEventUDP: (data: Buffer) => boolean;
export declare const decodeRTEvent: (data: Buffer) => {
event: RTEvent.EF_FINGER;
payload?: undefined;
} | {
event: RTEvent.EF_FPFTR;
payload: FingerScoreEvent;
};
export declare const decodeRecordRealTimeLog52: (recordData: Buffer) => RecordData16;
export declare const authKey: (comKey: number, sessionId: number) => number[];
/** Some Tcp packets receibed by the socket client can be merged in one single data event by the OS, and we need to split to handle correctly */
export declare const splitTcpPackets: (data: Buffer) => Buffer<ArrayBufferLike>[];
export {};