122 lines
4.5 KiB
JavaScript
122 lines
4.5 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
var statusCodes = {
|
||
|
'^9000$': 'Normal processing',
|
||
|
'^61(.{2})$': 'Normal processing, (sw2 indicates the number of response bytes still available)',
|
||
|
'^62(.{2})$': 'Warning processing',
|
||
|
'^6200$': 'no info',
|
||
|
'^6281$': 'Part of return data may be corrupted',
|
||
|
'^6282$': 'end of file/record reached before reading le bytes',
|
||
|
'^6283$': 'ret data may contain structural info',
|
||
|
'^6284$': 'selected file is invalidated',
|
||
|
'^6285$': 'file control info not in required format',
|
||
|
'^6286$': 'unsuccessful writing',
|
||
|
'^63(.{2})$': 'Warning processing',
|
||
|
'^6300$': 'no info',
|
||
|
'^6381$': 'last write filled up file',
|
||
|
'^6382$': 'execution successful after retry',
|
||
|
// c0 least significant nibble is a counter....
|
||
|
// .. ..valued from 0 to 15
|
||
|
// cf
|
||
|
'^64(.{2})$': 'Execution error',
|
||
|
'^65(.{2})$': 'Execution error',
|
||
|
'^6500$': 'no info',
|
||
|
'^6581$': 'memory failure',
|
||
|
'^66(.{2})$': 'Reserved for future use',
|
||
|
'^6700$': 'Wrong length',
|
||
|
'^68(.{2})$': 'Checking error: functions in CLA not supported (see sw2)',
|
||
|
'^6800$': 'no info',
|
||
|
'^6881$': 'logical channel not supported',
|
||
|
'^6882$': 'secure messaging not supported',
|
||
|
'^69(.{2})$': 'Checking error: command not allowed (see sw2)',
|
||
|
'^6a(.{2})$': 'Checking error: wrong parameters (p1 or p2) (see sw2)',
|
||
|
'^6b(.{2})$': 'Checking error: wrong parameters',
|
||
|
'^6c(.{2})$': 'Checking error: wrong length (sw2 indicates correct length for le)',
|
||
|
'^6d(.{2})$': 'Checking error: wrong ins',
|
||
|
'^6e(.{2})$': 'Checking error: class not supported',
|
||
|
'^6f(.{2})$': 'Checking error: no precise diagnosis'
|
||
|
};
|
||
|
|
||
|
var ResponseApdu = function () {
|
||
|
function ResponseApdu(buffer) {
|
||
|
_classCallCheck(this, ResponseApdu);
|
||
|
|
||
|
this.buffer = buffer;
|
||
|
this.data = buffer.toString('hex');
|
||
|
}
|
||
|
|
||
|
_createClass(ResponseApdu, [{
|
||
|
key: 'meaning',
|
||
|
value: function meaning() {
|
||
|
var statusCode = this.getStatusCode();
|
||
|
for (var prop in statusCodes) {
|
||
|
if (statusCodes.hasOwnProperty(prop)) {
|
||
|
var result = statusCodes[prop];
|
||
|
if (statusCode.match(prop)) {
|
||
|
return result;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return 'Unknown';
|
||
|
}
|
||
|
}, {
|
||
|
key: 'getDataOnly',
|
||
|
value: function getDataOnly() {
|
||
|
return this.data.substr(0, this.data.length - 4);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'getStatusCode',
|
||
|
value: function getStatusCode() {
|
||
|
return this.data.substr(-4);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'isOk',
|
||
|
value: function isOk() {
|
||
|
return this.getStatusCode() === '9000';
|
||
|
}
|
||
|
}, {
|
||
|
key: 'buffer',
|
||
|
value: function buffer() {
|
||
|
return this.buffer;
|
||
|
}
|
||
|
}, {
|
||
|
key: 'hasMoreBytesAvailable',
|
||
|
value: function hasMoreBytesAvailable() {
|
||
|
return this.data.substr(-4, 2) === '61';
|
||
|
}
|
||
|
}, {
|
||
|
key: 'numberOfBytesAvailable',
|
||
|
value: function numberOfBytesAvailable() {
|
||
|
var hexLength = this.data.substr(-2, 2);
|
||
|
return parseInt(hexLength, 16);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'isWrongLength',
|
||
|
value: function isWrongLength() {
|
||
|
return this.data.substr(-4, 2) === '6c';
|
||
|
}
|
||
|
}, {
|
||
|
key: 'correctLength',
|
||
|
value: function correctLength() {
|
||
|
var hexLength = this.data.substr(-2, 2);
|
||
|
return parseInt(hexLength, 16);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'toString',
|
||
|
value: function toString() {
|
||
|
return this.data.toString('hex');
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return ResponseApdu;
|
||
|
}();
|
||
|
|
||
|
exports.default = ResponseApdu;
|