zklib-ts 1.0.1-development → 1.0.2-development
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -5
- package/dist/helper/command.d.ts +101 -99
- package/dist/index.cjs.js +210 -163
- package/dist/index.d.ts +1 -1
- package/dist/index.es.js +210 -163
- package/dist/ztcp.d.ts +17 -6
- package/package.json +1 -1
- package/dist/helper/models/Attendance.d.ts +0 -12
- package/dist/helper/models/Finger.d.ts +0 -35
- package/dist/helper/models/User.d.ts +0 -26
package/dist/index.cjs.js
CHANGED
|
@@ -23,103 +23,109 @@ function _interopNamespaceDefault(e) {
|
|
|
23
23
|
|
|
24
24
|
var dgram__namespace = /*#__PURE__*/_interopNamespaceDefault(dgram);
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
CMD_TMP_WRITE
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
EF_FPFTR
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
26
|
+
var COMMANDS;
|
|
27
|
+
(function (COMMANDS) {
|
|
28
|
+
COMMANDS[COMMANDS["CMD_ACK_DATA"] = 2002] = "CMD_ACK_DATA";
|
|
29
|
+
COMMANDS[COMMANDS["CMD_ACK_ERROR"] = 2001] = "CMD_ACK_ERROR";
|
|
30
|
+
COMMANDS[COMMANDS["CMD_ACK_ERROR_CMD"] = 65533] = "CMD_ACK_ERROR_CMD";
|
|
31
|
+
COMMANDS[COMMANDS["CMD_ACK_ERROR_DATA"] = 65531] = "CMD_ACK_ERROR_DATA";
|
|
32
|
+
COMMANDS[COMMANDS["CMD_ACK_ERROR_INIT"] = 65532] = "CMD_ACK_ERROR_INIT";
|
|
33
|
+
COMMANDS[COMMANDS["CMD_ACK_OK"] = 2000] = "CMD_ACK_OK";
|
|
34
|
+
COMMANDS[COMMANDS["CMD_ACK_REPEAT"] = 2004] = "CMD_ACK_REPEAT";
|
|
35
|
+
COMMANDS[COMMANDS["CMD_ACK_RETRY"] = 2003] = "CMD_ACK_RETRY";
|
|
36
|
+
COMMANDS[COMMANDS["CMD_ACK_UNAUTH"] = 2005] = "CMD_ACK_UNAUTH";
|
|
37
|
+
COMMANDS[COMMANDS["CMD_ACK_UNKNOWN"] = 65535] = "CMD_ACK_UNKNOWN";
|
|
38
|
+
COMMANDS[COMMANDS["CMD_ATTLOG_RRQ"] = 13] = "CMD_ATTLOG_RRQ";
|
|
39
|
+
COMMANDS[COMMANDS["CMD_AUTH"] = 1102] = "CMD_AUTH";
|
|
40
|
+
COMMANDS[COMMANDS["CMD_CANCELCAPTURE"] = 62] = "CMD_CANCELCAPTURE";
|
|
41
|
+
COMMANDS[COMMANDS["CMD_CAPTUREFINGER"] = 1009] = "CMD_CAPTUREFINGER";
|
|
42
|
+
COMMANDS[COMMANDS["CMD_CAPTUREIMAGE"] = 1012] = "CMD_CAPTUREIMAGE";
|
|
43
|
+
COMMANDS[COMMANDS["CMD_CHANGE_SPEED"] = 1101] = "CMD_CHANGE_SPEED";
|
|
44
|
+
COMMANDS[COMMANDS["CMD_CHECKSUM_BUFFER"] = 119] = "CMD_CHECKSUM_BUFFER";
|
|
45
|
+
COMMANDS[COMMANDS["CMD_CLEAR_ACC"] = 32] = "CMD_CLEAR_ACC";
|
|
46
|
+
COMMANDS[COMMANDS["CMD_CLEAR_ADMIN"] = 20] = "CMD_CLEAR_ADMIN";
|
|
47
|
+
COMMANDS[COMMANDS["CMD_CLEAR_ATTLOG"] = 15] = "CMD_CLEAR_ATTLOG";
|
|
48
|
+
COMMANDS[COMMANDS["CMD_CLEAR_DATA"] = 14] = "CMD_CLEAR_DATA";
|
|
49
|
+
COMMANDS[COMMANDS["CMD_CLEAR_LCD"] = 67] = "CMD_CLEAR_LCD";
|
|
50
|
+
COMMANDS[COMMANDS["CMD_CLEAR_OPLOG"] = 33] = "CMD_CLEAR_OPLOG";
|
|
51
|
+
COMMANDS[COMMANDS["CMD_CONNECT"] = 1000] = "CMD_CONNECT";
|
|
52
|
+
COMMANDS[COMMANDS["CMD_DATA"] = 1501] = "CMD_DATA";
|
|
53
|
+
COMMANDS[COMMANDS["CMD_DATA_RDY"] = 1504] = "CMD_DATA_RDY";
|
|
54
|
+
COMMANDS[COMMANDS["CMD_DATA_WRRQ"] = 1503] = "CMD_DATA_WRRQ";
|
|
55
|
+
COMMANDS[COMMANDS["CMD_DB_RRQ"] = 7] = "CMD_DB_RRQ";
|
|
56
|
+
COMMANDS[COMMANDS["CMD_DEL_FPTMP"] = 134] = "CMD_DEL_FPTMP";
|
|
57
|
+
COMMANDS[COMMANDS["CMD_DELETE_SMS"] = 72] = "CMD_DELETE_SMS";
|
|
58
|
+
COMMANDS[COMMANDS["CMD_DELETE_UDATA"] = 74] = "CMD_DELETE_UDATA";
|
|
59
|
+
COMMANDS[COMMANDS["CMD_DELETE_USER"] = 18] = "CMD_DELETE_USER";
|
|
60
|
+
COMMANDS[COMMANDS["CMD_DELETE_USERTEMP"] = 19] = "CMD_DELETE_USERTEMP";
|
|
61
|
+
COMMANDS[COMMANDS["CMD_DISABLEDEVICE"] = 1003] = "CMD_DISABLEDEVICE";
|
|
62
|
+
COMMANDS[COMMANDS["CMD_DOORSTATE_RRQ"] = 75] = "CMD_DOORSTATE_RRQ";
|
|
63
|
+
COMMANDS[COMMANDS["CMD_EMPTY_MIFARE"] = 78] = "CMD_EMPTY_MIFARE";
|
|
64
|
+
COMMANDS[COMMANDS["CMD_ENABLE_CLOCK"] = 57] = "CMD_ENABLE_CLOCK";
|
|
65
|
+
COMMANDS[COMMANDS["CMD_ENABLEDEVICE"] = 1002] = "CMD_ENABLEDEVICE";
|
|
66
|
+
COMMANDS[COMMANDS["CMD_EXIT"] = 1001] = "CMD_EXIT";
|
|
67
|
+
COMMANDS[COMMANDS["CMD_FREE_DATA"] = 1502] = "CMD_FREE_DATA";
|
|
68
|
+
COMMANDS[COMMANDS["CMD_GET_FREE_SIZES"] = 50] = "CMD_GET_FREE_SIZES";
|
|
69
|
+
COMMANDS[COMMANDS["CMD_GET_PINWIDTH"] = 69] = "CMD_GET_PINWIDTH";
|
|
70
|
+
COMMANDS[COMMANDS["CMD_GET_TIME"] = 201] = "CMD_GET_TIME";
|
|
71
|
+
COMMANDS[COMMANDS["CMD_GET_USERTEMP"] = 88] = "CMD_GET_USERTEMP";
|
|
72
|
+
COMMANDS[COMMANDS["CMD_GET_VERSION"] = 1100] = "CMD_GET_VERSION";
|
|
73
|
+
COMMANDS[COMMANDS["CMD_GRPTZ_RRQ"] = 25] = "CMD_GRPTZ_RRQ";
|
|
74
|
+
COMMANDS[COMMANDS["CMD_GRPTZ_WRQ"] = 26] = "CMD_GRPTZ_WRQ";
|
|
75
|
+
COMMANDS[COMMANDS["CMD_OPLOG_RRQ"] = 34] = "CMD_OPLOG_RRQ";
|
|
76
|
+
COMMANDS[COMMANDS["CMD_OPTIONS_RRQ"] = 11] = "CMD_OPTIONS_RRQ";
|
|
77
|
+
COMMANDS[COMMANDS["CMD_OPTIONS_WRQ"] = 12] = "CMD_OPTIONS_WRQ";
|
|
78
|
+
COMMANDS[COMMANDS["CMD_POWEROFF"] = 1005] = "CMD_POWEROFF";
|
|
79
|
+
COMMANDS[COMMANDS["CMD_PREPARE_DATA"] = 1500] = "CMD_PREPARE_DATA";
|
|
80
|
+
COMMANDS[COMMANDS["CMD_REFRESHDATA"] = 1013] = "CMD_REFRESHDATA";
|
|
81
|
+
COMMANDS[COMMANDS["CMD_REFRESHOPTION"] = 1014] = "CMD_REFRESHOPTION";
|
|
82
|
+
COMMANDS[COMMANDS["CMD_REG_EVENT"] = 500] = "CMD_REG_EVENT";
|
|
83
|
+
COMMANDS[COMMANDS["CMD_RESTART"] = 1004] = "CMD_RESTART";
|
|
84
|
+
COMMANDS[COMMANDS["CMD_RESUME"] = 1007] = "CMD_RESUME";
|
|
85
|
+
COMMANDS[COMMANDS["CMD_SET_TIME"] = 202] = "CMD_SET_TIME";
|
|
86
|
+
COMMANDS[COMMANDS["CMD_SLEEP"] = 1006] = "CMD_SLEEP";
|
|
87
|
+
COMMANDS[COMMANDS["CMD_SMS_RRQ"] = 71] = "CMD_SMS_RRQ";
|
|
88
|
+
COMMANDS[COMMANDS["CMD_SMS_WRQ"] = 70] = "CMD_SMS_WRQ";
|
|
89
|
+
COMMANDS[COMMANDS["CMD_STARTENROLL"] = 61] = "CMD_STARTENROLL";
|
|
90
|
+
COMMANDS[COMMANDS["CMD_STARTVERIFY"] = 60] = "CMD_STARTVERIFY";
|
|
91
|
+
COMMANDS[COMMANDS["CMD_STATE_RRQ"] = 64] = "CMD_STATE_RRQ";
|
|
92
|
+
COMMANDS[COMMANDS["CMD_TEST_TEMP"] = 1011] = "CMD_TEST_TEMP";
|
|
93
|
+
COMMANDS[COMMANDS["CMD_TESTVOICE"] = 1017] = "CMD_TESTVOICE";
|
|
94
|
+
COMMANDS[COMMANDS["CMD_TMP_WRITE"] = 87] = "CMD_TMP_WRITE";
|
|
95
|
+
COMMANDS[COMMANDS["CMD_TZ_RRQ"] = 27] = "CMD_TZ_RRQ";
|
|
96
|
+
COMMANDS[COMMANDS["CMD_TZ_WRQ"] = 28] = "CMD_TZ_WRQ";
|
|
97
|
+
COMMANDS[COMMANDS["CMD_UDATA_WRQ"] = 73] = "CMD_UDATA_WRQ";
|
|
98
|
+
COMMANDS[COMMANDS["CMD_ULG_RRQ"] = 29] = "CMD_ULG_RRQ";
|
|
99
|
+
COMMANDS[COMMANDS["CMD_ULG_WRQ"] = 30] = "CMD_ULG_WRQ";
|
|
100
|
+
COMMANDS[COMMANDS["CMD_UNLOCK"] = 31] = "CMD_UNLOCK";
|
|
101
|
+
COMMANDS[COMMANDS["CMD_USER_WRQ"] = 8] = "CMD_USER_WRQ";
|
|
102
|
+
COMMANDS[COMMANDS["CMD_USERGRP_RRQ"] = 21] = "CMD_USERGRP_RRQ";
|
|
103
|
+
COMMANDS[COMMANDS["CMD_USERGRP_WRQ"] = 22] = "CMD_USERGRP_WRQ";
|
|
104
|
+
COMMANDS[COMMANDS["CMD_USERTEMP_RRQ"] = 9] = "CMD_USERTEMP_RRQ";
|
|
105
|
+
COMMANDS[COMMANDS["CMD_USERTEMP_WRQ"] = 10] = "CMD_USERTEMP_WRQ";
|
|
106
|
+
COMMANDS[COMMANDS["CMD_USERTZ_RRQ"] = 23] = "CMD_USERTZ_RRQ";
|
|
107
|
+
COMMANDS[COMMANDS["CMD_USERTZ_WRQ"] = 24] = "CMD_USERTZ_WRQ";
|
|
108
|
+
COMMANDS[COMMANDS["CMD_VERIFY_RRQ"] = 80] = "CMD_VERIFY_RRQ";
|
|
109
|
+
COMMANDS[COMMANDS["CMD_VERIFY_WRQ"] = 79] = "CMD_VERIFY_WRQ";
|
|
110
|
+
COMMANDS[COMMANDS["CMD_WRITE_LCD"] = 66] = "CMD_WRITE_LCD";
|
|
111
|
+
COMMANDS[COMMANDS["CMD_WRITE_MIFARE"] = 76] = "CMD_WRITE_MIFARE";
|
|
112
|
+
COMMANDS[COMMANDS["EF_ALARM"] = 512] = "EF_ALARM";
|
|
113
|
+
COMMANDS[COMMANDS["EF_ATTLOG"] = 1] = "EF_ATTLOG";
|
|
114
|
+
COMMANDS[COMMANDS["EF_BUTTON"] = 16] = "EF_BUTTON";
|
|
115
|
+
COMMANDS[COMMANDS["EF_ENROLLFINGER"] = 8] = "EF_ENROLLFINGER";
|
|
116
|
+
COMMANDS[COMMANDS["EF_ENROLLUSER"] = 4] = "EF_ENROLLUSER";
|
|
117
|
+
COMMANDS[COMMANDS["EF_FINGER"] = 2] = "EF_FINGER";
|
|
118
|
+
COMMANDS[COMMANDS["EF_FPFTR"] = 256] = "EF_FPFTR";
|
|
119
|
+
COMMANDS[COMMANDS["EF_UNLOCK"] = 32] = "EF_UNLOCK";
|
|
120
|
+
COMMANDS[COMMANDS["EF_VERIFY"] = 128] = "EF_VERIFY";
|
|
121
|
+
})(COMMANDS || (COMMANDS = {}));
|
|
122
|
+
var Constants;
|
|
123
|
+
(function (Constants) {
|
|
124
|
+
Constants[Constants["USHRT_MAX"] = 65535] = "USHRT_MAX";
|
|
125
|
+
Constants[Constants["MAX_CHUNK"] = 65472] = "MAX_CHUNK";
|
|
126
|
+
Constants[Constants["MACHINE_PREPARE_DATA_1"] = 20560] = "MACHINE_PREPARE_DATA_1";
|
|
127
|
+
Constants[Constants["MACHINE_PREPARE_DATA_2"] = 32130] = "MACHINE_PREPARE_DATA_2";
|
|
128
|
+
})(Constants || (Constants = {}));
|
|
123
129
|
const REQUEST_DATA = {
|
|
124
130
|
DISABLE_DEVICE: Buffer.from([0, 0, 0, 0]),
|
|
125
131
|
GET_REAL_TIME_EVENT: Buffer.from([0x01, 0x00, 0x00, 0x00]),
|
|
@@ -303,9 +309,9 @@ const createChkSum = (buf) => {
|
|
|
303
309
|
else {
|
|
304
310
|
chksum += buf.readUInt16LE(i);
|
|
305
311
|
}
|
|
306
|
-
chksum %= USHRT_MAX;
|
|
312
|
+
chksum %= Constants.USHRT_MAX;
|
|
307
313
|
}
|
|
308
|
-
chksum = USHRT_MAX - chksum - 1;
|
|
314
|
+
chksum = Constants.USHRT_MAX - chksum - 1;
|
|
309
315
|
return chksum;
|
|
310
316
|
};
|
|
311
317
|
const createUDPHeader = (command, sessionId, replyId, data) => {
|
|
@@ -318,7 +324,7 @@ const createUDPHeader = (command, sessionId, replyId, data) => {
|
|
|
318
324
|
dataBuffer.copy(buf, 8);
|
|
319
325
|
const chksum2 = createChkSum(buf);
|
|
320
326
|
buf.writeUInt16LE(chksum2, 2);
|
|
321
|
-
replyId = (replyId + 1) % USHRT_MAX;
|
|
327
|
+
replyId = (replyId + 1) % Constants.USHRT_MAX;
|
|
322
328
|
buf.writeUInt16LE(replyId, 6);
|
|
323
329
|
return buf;
|
|
324
330
|
};
|
|
@@ -332,7 +338,7 @@ const createTCPHeader = (command, sessionId, replyId, data) => {
|
|
|
332
338
|
dataBuffer.copy(buf, 8);
|
|
333
339
|
const chksum2 = createChkSum(buf);
|
|
334
340
|
buf.writeUInt16LE(chksum2, 2);
|
|
335
|
-
replyId = (replyId + 1) % USHRT_MAX;
|
|
341
|
+
replyId = (replyId + 1) % Constants.USHRT_MAX;
|
|
336
342
|
buf.writeUInt16LE(replyId, 6);
|
|
337
343
|
const prefixBuf = Buffer.from([0x50, 0x50, 0x82, 0x7d, 0x13, 0x00, 0x00, 0x00]);
|
|
338
344
|
prefixBuf.writeUInt16LE(buf.length, 4);
|
|
@@ -533,8 +539,8 @@ class Finger {
|
|
|
533
539
|
this.template = template;
|
|
534
540
|
this.size = template.length;
|
|
535
541
|
// Create mark showing first and last 8 bytes as hex
|
|
536
|
-
const start =
|
|
537
|
-
const end =
|
|
542
|
+
const start = Uint8Array.prototype.slice.call(template, 0, 8).toString('hex');
|
|
543
|
+
const end = Uint8Array.prototype.slice.call(template, -8).toString('hex');
|
|
538
544
|
this.mark = `${start}...${end}`;
|
|
539
545
|
}
|
|
540
546
|
/**
|
|
@@ -665,10 +671,12 @@ class ZTCP {
|
|
|
665
671
|
face_cap = 0;
|
|
666
672
|
userPacketSize = 72;
|
|
667
673
|
verbose = false;
|
|
674
|
+
packetNumber = 0;
|
|
675
|
+
replyData = Buffer.from([]);
|
|
668
676
|
constructor(ip, port, timeout, comm_key, verbose) {
|
|
669
677
|
this.ip = ip;
|
|
670
678
|
this.port = port;
|
|
671
|
-
this.timeout = timeout;
|
|
679
|
+
this.timeout = timeout ? timeout : 10000;
|
|
672
680
|
this.replyId = 0;
|
|
673
681
|
this.comm_key = comm_key;
|
|
674
682
|
this.verbose = verbose;
|
|
@@ -889,9 +897,6 @@ class ZTCP {
|
|
|
889
897
|
else {
|
|
890
898
|
this.replyId++;
|
|
891
899
|
}
|
|
892
|
-
if (this.verbose) {
|
|
893
|
-
console.log("linea 305: replyId: ", this.replyId, " command: ", command, Object.keys(COMMANDS).find(u => COMMANDS[u] == command));
|
|
894
|
-
}
|
|
895
900
|
const buf = createTCPHeader(command, this.sessionId, this.replyId, data);
|
|
896
901
|
try {
|
|
897
902
|
// Write the message to the socket and wait for a response
|
|
@@ -937,8 +942,8 @@ class ZTCP {
|
|
|
937
942
|
}
|
|
938
943
|
/**
|
|
939
944
|
*
|
|
940
|
-
* @param {
|
|
941
|
-
* @param {
|
|
945
|
+
* @param {Buffer} reqData - indicate the type of data that need to receive ( user or attLog)
|
|
946
|
+
* @param {Function} cb - callback is triggered when receiving packets
|
|
942
947
|
*
|
|
943
948
|
* readWithBuffer will reject error if it'wrong when starting request data
|
|
944
949
|
* readWithBuffer will return { data: replyData , err: Error } when receiving requested data
|
|
@@ -953,7 +958,6 @@ class ZTCP {
|
|
|
953
958
|
}
|
|
954
959
|
catch (err) {
|
|
955
960
|
reject(err);
|
|
956
|
-
console.log(reply);
|
|
957
961
|
}
|
|
958
962
|
const header = decodeTCPHeader(reply.subarray(0, 16));
|
|
959
963
|
switch (header.commandId) {
|
|
@@ -969,56 +973,73 @@ class ZTCP {
|
|
|
969
973
|
const size = recvData.readUIntLE(1, 4);
|
|
970
974
|
// We need to split the data to many chunks to receive , because it's to large
|
|
971
975
|
// After receiving all chunk data , we concat it to TotalBuffer variable , that 's the data we want
|
|
972
|
-
let remain = size % MAX_CHUNK;
|
|
973
|
-
let numberChunks = Math.round(size - remain) / MAX_CHUNK;
|
|
974
|
-
|
|
975
|
-
let replyData = Buffer.from([])
|
|
976
|
+
let remain = size % Constants.MAX_CHUNK;
|
|
977
|
+
let numberChunks = Math.round(size - remain) / Constants.MAX_CHUNK;
|
|
978
|
+
this.packetNumber = numberChunks + (remain > 0 ? 1 : 0);
|
|
979
|
+
//let replyData = Buffer.from([])
|
|
976
980
|
let totalBuffer = Buffer.from([]);
|
|
977
981
|
let realTotalBuffer = Buffer.from([]);
|
|
978
|
-
const timeout = 10000;
|
|
979
982
|
let timer = setTimeout(() => {
|
|
980
|
-
internalCallback(replyData, new Error('TIMEOUT WHEN RECEIVING PACKET'));
|
|
981
|
-
}, timeout);
|
|
983
|
+
internalCallback(this.replyData, new Error('TIMEOUT WHEN RECEIVING PACKET'));
|
|
984
|
+
}, this.timeout);
|
|
982
985
|
const internalCallback = (replyData, err = null) => {
|
|
983
|
-
|
|
986
|
+
this.socket && this.socket.removeAllListeners('data');
|
|
984
987
|
timer && clearTimeout(timer);
|
|
985
988
|
resolve({ data: replyData, err });
|
|
986
989
|
};
|
|
987
|
-
const handleOnData = (reply) => {
|
|
988
|
-
if (checkNotEventTCP(reply))
|
|
989
|
-
return;
|
|
990
|
-
clearTimeout(timer);
|
|
991
|
-
timer = setTimeout(() => {
|
|
992
|
-
internalCallback(replyData, new Error(`TIME OUT !! ${totalPackets} PACKETS REMAIN !`));
|
|
993
|
-
}, timeout);
|
|
994
|
-
totalBuffer = Buffer.concat([totalBuffer, reply]);
|
|
995
|
-
const packetLength = totalBuffer.readUIntLE(4, 2);
|
|
996
|
-
if (totalBuffer.length >= 8 + packetLength) {
|
|
997
|
-
realTotalBuffer = Buffer.concat([realTotalBuffer, totalBuffer.subarray(16, 8 + packetLength)]);
|
|
998
|
-
totalBuffer = totalBuffer.subarray(8 + packetLength);
|
|
999
|
-
if ((totalPackets > 1 && realTotalBuffer.length === MAX_CHUNK + 8)
|
|
1000
|
-
|| (totalPackets === 1 && realTotalBuffer.length === remain + 8)) {
|
|
1001
|
-
replyData = Buffer.concat([replyData, realTotalBuffer.subarray(8)]);
|
|
1002
|
-
totalBuffer = Buffer.from([]);
|
|
1003
|
-
realTotalBuffer = Buffer.from([]);
|
|
1004
|
-
totalPackets -= 1;
|
|
1005
|
-
cb && cb(replyData.length, size);
|
|
1006
|
-
if (totalPackets <= 0) {
|
|
1007
|
-
internalCallback(replyData);
|
|
1008
|
-
}
|
|
1009
|
-
}
|
|
1010
|
-
}
|
|
1011
|
-
};
|
|
1012
990
|
this.socket.once('close', () => {
|
|
1013
|
-
internalCallback(replyData, new Error('Socket is disconnected unexpectedly'));
|
|
991
|
+
internalCallback(this.replyData, new Error('Socket is disconnected unexpectedly'));
|
|
1014
992
|
});
|
|
1015
|
-
this.socket.on('data', handleOnData);
|
|
1016
993
|
for (let i = 0; i <= numberChunks; i++) {
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
994
|
+
const data = await new Promise((resolve2, reject2) => {
|
|
995
|
+
try {
|
|
996
|
+
this.sendChunkRequest(i * Constants.MAX_CHUNK, (i === numberChunks)
|
|
997
|
+
? remain
|
|
998
|
+
: Constants.MAX_CHUNK);
|
|
999
|
+
this.socket.on('data', (reply) => {
|
|
1000
|
+
clearTimeout(timer);
|
|
1001
|
+
timer = setTimeout(() => {
|
|
1002
|
+
internalCallback(this.replyData, new Error(`TIME OUT !! ${this.packetNumber} PACKETS REMAIN !`));
|
|
1003
|
+
}, this.timeout);
|
|
1004
|
+
const headers = decodeTCPHeader(reply);
|
|
1005
|
+
if (COMMANDS[headers.commandId]) {
|
|
1006
|
+
switch (headers.commandId) {
|
|
1007
|
+
case COMMANDS.CMD_ACK_OK:
|
|
1008
|
+
case COMMANDS.CMD_DATA:
|
|
1009
|
+
this.verbose && console.log("CMD received: ", COMMANDS[headers.commandId]);
|
|
1010
|
+
break;
|
|
1011
|
+
case COMMANDS.CMD_PREPARE_DATA:
|
|
1012
|
+
this.verbose && console.log("CMD received: ", COMMANDS[headers.commandId]);
|
|
1013
|
+
this.verbose && console.log(`recieve chunk: prepare data size is ${headers.payloadSize}`);
|
|
1014
|
+
break;
|
|
1015
|
+
default:
|
|
1016
|
+
break;
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
totalBuffer = Buffer.concat([totalBuffer, reply]);
|
|
1020
|
+
const packetLength = totalBuffer.readUIntLE(4, 2);
|
|
1021
|
+
if (totalBuffer.length >= 8 + packetLength) {
|
|
1022
|
+
realTotalBuffer = Buffer.concat([realTotalBuffer, totalBuffer.subarray(16, 8 + packetLength)]);
|
|
1023
|
+
totalBuffer = totalBuffer.subarray(8 + packetLength);
|
|
1024
|
+
if ((this.packetNumber > 1 && realTotalBuffer.length === (Constants.MAX_CHUNK + 8))
|
|
1025
|
+
|| (this.packetNumber === 1 && realTotalBuffer.length === remain + 8)) {
|
|
1026
|
+
this.packetNumber--;
|
|
1027
|
+
cb && cb(realTotalBuffer.length, size);
|
|
1028
|
+
resolve2(realTotalBuffer.subarray(8));
|
|
1029
|
+
totalBuffer = Buffer.from([]);
|
|
1030
|
+
realTotalBuffer = Buffer.from([]);
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
});
|
|
1034
|
+
}
|
|
1035
|
+
catch (e) {
|
|
1036
|
+
reject2(e);
|
|
1037
|
+
}
|
|
1038
|
+
});
|
|
1039
|
+
this.replyData = Buffer.concat([this.replyData, data]);
|
|
1040
|
+
this.socket.removeAllListeners('data');
|
|
1041
|
+
if (this.packetNumber <= 0) {
|
|
1042
|
+
resolve({ data: this.replyData });
|
|
1022
1043
|
}
|
|
1023
1044
|
}
|
|
1024
1045
|
break;
|
|
@@ -1650,32 +1671,58 @@ class ZTCP {
|
|
|
1650
1671
|
throw err;
|
|
1651
1672
|
}
|
|
1652
1673
|
}
|
|
1653
|
-
|
|
1674
|
+
/**
|
|
1675
|
+
* Get all Finger objects
|
|
1676
|
+
* @returns {Record<string, Finger[]>}
|
|
1677
|
+
*/
|
|
1678
|
+
async getTemplates(callbackInProcess = () => { }) {
|
|
1679
|
+
let templates = [];
|
|
1654
1680
|
try {
|
|
1681
|
+
await this.getSizes();
|
|
1682
|
+
if (this.fp_count == 0)
|
|
1683
|
+
return { data: [] };
|
|
1655
1684
|
await this.freeData();
|
|
1656
1685
|
await this.disableDevice();
|
|
1657
1686
|
const Buffer = await this.readWithBuffer(REQUEST_DATA.GET_TEMPLATES);
|
|
1658
|
-
let templateData = Buffer.data.
|
|
1687
|
+
let templateData = Buffer.data.subarray(4);
|
|
1659
1688
|
let totalSize = Buffer.data.readUIntLE(0, 4);
|
|
1660
|
-
let templates = [];
|
|
1661
1689
|
while (totalSize) {
|
|
1662
|
-
const buf = templateData.
|
|
1690
|
+
const buf = templateData.subarray(0, 6);
|
|
1663
1691
|
const size = buf.readUIntLE(0, 2);
|
|
1664
|
-
templates.push(new Finger(buf.readUIntLE(2, 2), buf.readUIntLE(4, 1), buf.readUIntLE(5, 1), templateData.
|
|
1665
|
-
templateData = templateData.
|
|
1692
|
+
templates.push(new Finger(buf.readUIntLE(2, 2), buf.readUIntLE(4, 1), buf.readUIntLE(5, 1), templateData.subarray(6, size)));
|
|
1693
|
+
templateData = templateData.subarray(size);
|
|
1666
1694
|
totalSize -= size;
|
|
1667
1695
|
}
|
|
1668
|
-
return templates;
|
|
1696
|
+
return { data: templates };
|
|
1669
1697
|
}
|
|
1670
1698
|
catch (err) {
|
|
1671
|
-
console.
|
|
1672
|
-
|
|
1699
|
+
this.verbose && console.log("Error getting templates", err);
|
|
1700
|
+
return { data: templates };
|
|
1673
1701
|
}
|
|
1674
1702
|
finally {
|
|
1675
1703
|
await this.enableDevice();
|
|
1676
1704
|
await this.freeData();
|
|
1677
1705
|
}
|
|
1678
1706
|
}
|
|
1707
|
+
/**
|
|
1708
|
+
* Return size
|
|
1709
|
+
* @param packet
|
|
1710
|
+
*/
|
|
1711
|
+
testTcpTop(packet) {
|
|
1712
|
+
// Check if packet is too small
|
|
1713
|
+
if (packet.length <= 8)
|
|
1714
|
+
return 0;
|
|
1715
|
+
// Extract header values using little-endian format
|
|
1716
|
+
const headerValue1 = packet.readUInt16LE(0);
|
|
1717
|
+
const headerValue2 = packet.readUInt16LE(2);
|
|
1718
|
+
const size = packet.readUInt32LE(4);
|
|
1719
|
+
// Check if magic numbers match
|
|
1720
|
+
if (headerValue1 === Constants.MACHINE_PREPARE_DATA_1 &&
|
|
1721
|
+
headerValue2 === Constants.MACHINE_PREPARE_DATA_2) {
|
|
1722
|
+
return size;
|
|
1723
|
+
}
|
|
1724
|
+
return 0;
|
|
1725
|
+
}
|
|
1679
1726
|
async refreshData() {
|
|
1680
1727
|
try {
|
|
1681
1728
|
const reply = await this.executeCmd(COMMANDS.CMD_REFRESHDATA, '');
|
|
@@ -1973,7 +2020,7 @@ class ZTCP {
|
|
|
1973
2020
|
}
|
|
1974
2021
|
async ackOk() {
|
|
1975
2022
|
try {
|
|
1976
|
-
const buf = createTCPHeader(COMMANDS.CMD_ACK_OK, this.sessionId, USHRT_MAX - 1, Buffer.from([]));
|
|
2023
|
+
const buf = createTCPHeader(COMMANDS.CMD_ACK_OK, this.sessionId, Constants.USHRT_MAX - 1, Buffer.from([]));
|
|
1977
2024
|
this.socket.write(buf);
|
|
1978
2025
|
}
|
|
1979
2026
|
catch (e) {
|
|
@@ -2284,10 +2331,10 @@ class ZUDP {
|
|
|
2284
2331
|
}
|
|
2285
2332
|
};
|
|
2286
2333
|
this.socket.on('message', handleOnData);
|
|
2287
|
-
const chunkCount = Math.ceil(size / MAX_CHUNK);
|
|
2334
|
+
const chunkCount = Math.ceil(size / Constants.MAX_CHUNK);
|
|
2288
2335
|
for (let i = 0; i < chunkCount; i++) {
|
|
2289
|
-
const start = i * MAX_CHUNK;
|
|
2290
|
-
const chunkSize = (i === chunkCount - 1) ? size % MAX_CHUNK : MAX_CHUNK;
|
|
2336
|
+
const start = i * Constants.MAX_CHUNK;
|
|
2337
|
+
const chunkSize = (i === chunkCount - 1) ? size % Constants.MAX_CHUNK : Constants.MAX_CHUNK;
|
|
2291
2338
|
this.sendChunkRequest(start, chunkSize).catch(err => {
|
|
2292
2339
|
internalCallback(Buffer.from([]), err);
|
|
2293
2340
|
});
|
package/dist/index.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ export default class Zklib {
|
|
|
54
54
|
err?: Error | null;
|
|
55
55
|
}>;
|
|
56
56
|
getRealTimeLogs(cb: (log: any) => void): Promise<void>;
|
|
57
|
-
getTemplates(): Promise<Finger[]
|
|
57
|
+
getTemplates(): Promise<Record<string, Finger[]>>;
|
|
58
58
|
saveUserTemplate(user: User, fingers?: Finger[]): Promise<void>;
|
|
59
59
|
deleteFinger(uid: number, fid: number): Promise<boolean>;
|
|
60
60
|
enrollUser(uid: number, temp_id: number, user_id: string): Promise<boolean>;
|