smartcard 3.2.1 → 3.4.0
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 -3
- package/dist/lib/control-codes.d.ts +32 -0
- package/dist/lib/control-codes.d.ts.map +1 -0
- package/dist/lib/control-codes.js +66 -0
- package/dist/lib/control-codes.js.map +1 -0
- package/dist/lib/devices.d.ts +75 -0
- package/dist/lib/devices.d.ts.map +1 -0
- package/{lib → dist/lib}/devices.js +76 -115
- package/dist/lib/devices.js.map +1 -0
- package/dist/lib/errors.d.ts +42 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/{lib → dist/lib}/errors.js +21 -37
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/index.d.ts +31 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +71 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/types.d.ts +207 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +6 -0
- package/dist/lib/types.js.map +1 -0
- package/package.json +27 -16
- package/src/async_workers.cpp +6 -0
- package/src/async_workers.h +2 -0
- package/src/pcsc_card.cpp +1 -1
- package/lib/control-codes.js +0 -107
- package/lib/index.d.ts +0 -325
- package/lib/index.js +0 -151
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SharingViolationError = exports.ServiceNotRunningError = exports.NoReadersError = exports.TimeoutError = exports.CardRemovedError = exports.PCSCError = void 0;
|
|
4
|
+
exports.createPCSCError = createPCSCError;
|
|
4
5
|
/**
|
|
5
6
|
* Base error class for PC/SC errors
|
|
6
7
|
*/
|
|
7
8
|
class PCSCError extends Error {
|
|
8
|
-
|
|
9
|
-
* @param {string} message
|
|
10
|
-
* @param {number} code
|
|
11
|
-
*/
|
|
9
|
+
code;
|
|
12
10
|
constructor(message, code) {
|
|
13
11
|
super(message);
|
|
14
12
|
this.name = 'PCSCError';
|
|
@@ -16,7 +14,7 @@ class PCSCError extends Error {
|
|
|
16
14
|
Error.captureStackTrace(this, this.constructor);
|
|
17
15
|
}
|
|
18
16
|
}
|
|
19
|
-
|
|
17
|
+
exports.PCSCError = PCSCError;
|
|
20
18
|
/**
|
|
21
19
|
* Error thrown when a card is removed during an operation
|
|
22
20
|
*/
|
|
@@ -26,64 +24,59 @@ class CardRemovedError extends PCSCError {
|
|
|
26
24
|
this.name = 'CardRemovedError';
|
|
27
25
|
}
|
|
28
26
|
}
|
|
29
|
-
|
|
27
|
+
exports.CardRemovedError = CardRemovedError;
|
|
30
28
|
/**
|
|
31
29
|
* Error thrown when an operation times out
|
|
32
30
|
*/
|
|
33
31
|
class TimeoutError extends PCSCError {
|
|
34
32
|
constructor(message = 'Operation timed out') {
|
|
35
|
-
super(message,
|
|
33
|
+
super(message, 0x8010000a);
|
|
36
34
|
this.name = 'TimeoutError';
|
|
37
35
|
}
|
|
38
36
|
}
|
|
39
|
-
|
|
37
|
+
exports.TimeoutError = TimeoutError;
|
|
40
38
|
/**
|
|
41
39
|
* Error thrown when no readers are available
|
|
42
40
|
*/
|
|
43
41
|
class NoReadersError extends PCSCError {
|
|
44
42
|
constructor(message = 'No readers available') {
|
|
45
|
-
super(message,
|
|
43
|
+
super(message, 0x8010002e);
|
|
46
44
|
this.name = 'NoReadersError';
|
|
47
45
|
}
|
|
48
46
|
}
|
|
49
|
-
|
|
47
|
+
exports.NoReadersError = NoReadersError;
|
|
50
48
|
/**
|
|
51
49
|
* Error thrown when PC/SC service is not running
|
|
52
50
|
*/
|
|
53
51
|
class ServiceNotRunningError extends PCSCError {
|
|
54
52
|
constructor(message = 'PC/SC service not running') {
|
|
55
|
-
super(message,
|
|
53
|
+
super(message, 0x8010001d);
|
|
56
54
|
this.name = 'ServiceNotRunningError';
|
|
57
55
|
}
|
|
58
56
|
}
|
|
59
|
-
|
|
57
|
+
exports.ServiceNotRunningError = ServiceNotRunningError;
|
|
60
58
|
/**
|
|
61
59
|
* Error thrown when there's a sharing violation
|
|
62
60
|
*/
|
|
63
61
|
class SharingViolationError extends PCSCError {
|
|
64
62
|
constructor(message = 'Sharing violation - card is in use') {
|
|
65
|
-
super(message,
|
|
63
|
+
super(message, 0x8010000b);
|
|
66
64
|
this.name = 'SharingViolationError';
|
|
67
65
|
}
|
|
68
66
|
}
|
|
69
|
-
|
|
67
|
+
exports.SharingViolationError = SharingViolationError;
|
|
70
68
|
/**
|
|
71
69
|
* PC/SC error codes mapped to specific error classes
|
|
72
|
-
* @type {Map<number, typeof PCSCError>}
|
|
73
70
|
*/
|
|
74
71
|
const ERROR_CODE_MAP = new Map([
|
|
75
|
-
[0x80100069, CardRemovedError],
|
|
76
|
-
[
|
|
77
|
-
[
|
|
78
|
-
[
|
|
79
|
-
[
|
|
72
|
+
[0x80100069, CardRemovedError], // SCARD_W_REMOVED_CARD
|
|
73
|
+
[0x8010000a, TimeoutError], // SCARD_E_TIMEOUT
|
|
74
|
+
[0x8010002e, NoReadersError], // SCARD_E_NO_READERS_AVAILABLE
|
|
75
|
+
[0x8010001d, ServiceNotRunningError], // SCARD_E_NO_SERVICE
|
|
76
|
+
[0x8010000b, SharingViolationError], // SCARD_E_SHARING_VIOLATION
|
|
80
77
|
]);
|
|
81
|
-
|
|
82
78
|
/**
|
|
83
79
|
* Factory function to create the appropriate error class based on PC/SC error code
|
|
84
|
-
* @param {string} message - Error message
|
|
85
|
-
* @param {number} code - PC/SC error code
|
|
86
|
-
* @returns {PCSCError} The appropriate error instance
|
|
87
80
|
*/
|
|
88
81
|
function createPCSCError(message, code) {
|
|
89
82
|
const ErrorClass = ERROR_CODE_MAP.get(code);
|
|
@@ -92,13 +85,4 @@ function createPCSCError(message, code) {
|
|
|
92
85
|
}
|
|
93
86
|
return new PCSCError(message, code);
|
|
94
87
|
}
|
|
95
|
-
|
|
96
|
-
module.exports = {
|
|
97
|
-
PCSCError,
|
|
98
|
-
CardRemovedError,
|
|
99
|
-
TimeoutError,
|
|
100
|
-
NoReadersError,
|
|
101
|
-
ServiceNotRunningError,
|
|
102
|
-
SharingViolationError,
|
|
103
|
-
createPCSCError,
|
|
104
|
-
};
|
|
88
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../lib/errors.ts"],"names":[],"mappings":";;;AAgFA,0CAMC;AAtFD;;GAEG;AACH,MAAa,SAAU,SAAQ,KAAK;IACvB,IAAI,CAAS;IAEtB,YAAY,OAAe,EAAE,IAAY;QACrC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC;CACJ;AATD,8BASC;AAED;;GAEG;AACH,MAAa,gBAAiB,SAAQ,SAAS;IAC3C,YAAY,OAAO,GAAG,kBAAkB;QACpC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACnC,CAAC;CACJ;AALD,4CAKC;AAED;;GAEG;AACH,MAAa,YAAa,SAAQ,SAAS;IACvC,YAAY,OAAO,GAAG,qBAAqB;QACvC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC/B,CAAC;CACJ;AALD,oCAKC;AAED;;GAEG;AACH,MAAa,cAAe,SAAQ,SAAS;IACzC,YAAY,OAAO,GAAG,sBAAsB;QACxC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IACjC,CAAC;CACJ;AALD,wCAKC;AAED;;GAEG;AACH,MAAa,sBAAuB,SAAQ,SAAS;IACjD,YAAY,OAAO,GAAG,2BAA2B;QAC7C,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACzC,CAAC;CACJ;AALD,wDAKC;AAED;;GAEG;AACH,MAAa,qBAAsB,SAAQ,SAAS;IAChD,YAAY,OAAO,GAAG,oCAAoC;QACtD,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACxC,CAAC;CACJ;AALD,sDAKC;AAID;;GAEG;AACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAA+B;IACzD,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,uBAAuB;IACvD,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,kBAAkB;IAC9C,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,+BAA+B;IAC7D,CAAC,UAAU,EAAE,sBAAsB,CAAC,EAAE,qBAAqB;IAC3D,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAAE,4BAA4B;CACpE,CAAC,CAAC;AAEH;;GAEG;AACH,SAAgB,eAAe,CAAC,OAAe,EAAE,IAAY;IACzD,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const Context: import("./types").ContextConstructor;
|
|
2
|
+
export declare const Reader: unknown;
|
|
3
|
+
export declare const Card: unknown;
|
|
4
|
+
export declare const ReaderMonitor: import("./types").ReaderMonitorConstructor;
|
|
5
|
+
export declare const SCARD_SHARE_EXCLUSIVE: number;
|
|
6
|
+
export declare const SCARD_SHARE_SHARED: number;
|
|
7
|
+
export declare const SCARD_SHARE_DIRECT: number;
|
|
8
|
+
export declare const SCARD_PROTOCOL_T0: number;
|
|
9
|
+
export declare const SCARD_PROTOCOL_T1: number;
|
|
10
|
+
export declare const SCARD_PROTOCOL_RAW: number;
|
|
11
|
+
export declare const SCARD_PROTOCOL_UNDEFINED: number;
|
|
12
|
+
export declare const SCARD_LEAVE_CARD: number;
|
|
13
|
+
export declare const SCARD_RESET_CARD: number;
|
|
14
|
+
export declare const SCARD_UNPOWER_CARD: number;
|
|
15
|
+
export declare const SCARD_EJECT_CARD: number;
|
|
16
|
+
export declare const SCARD_STATE_UNAWARE: number;
|
|
17
|
+
export declare const SCARD_STATE_IGNORE: number;
|
|
18
|
+
export declare const SCARD_STATE_CHANGED: number;
|
|
19
|
+
export declare const SCARD_STATE_UNKNOWN: number;
|
|
20
|
+
export declare const SCARD_STATE_UNAVAILABLE: number;
|
|
21
|
+
export declare const SCARD_STATE_EMPTY: number;
|
|
22
|
+
export declare const SCARD_STATE_PRESENT: number;
|
|
23
|
+
export declare const SCARD_STATE_ATRMATCH: number;
|
|
24
|
+
export declare const SCARD_STATE_EXCLUSIVE: number;
|
|
25
|
+
export declare const SCARD_STATE_INUSE: number;
|
|
26
|
+
export declare const SCARD_STATE_MUTE: number;
|
|
27
|
+
export { Devices } from './devices';
|
|
28
|
+
export { PCSCError, CardRemovedError, TimeoutError, NoReadersError, ServiceNotRunningError, SharingViolationError, createPCSCError, } from './errors';
|
|
29
|
+
export { SCARD_CTL_CODE, CM_IOCTL_GET_FEATURE_REQUEST, FEATURE_VERIFY_PIN_START, FEATURE_VERIFY_PIN_FINISH, FEATURE_MODIFY_PIN_START, FEATURE_MODIFY_PIN_FINISH, FEATURE_GET_KEY_PRESSED, FEATURE_VERIFY_PIN_DIRECT, FEATURE_MODIFY_PIN_DIRECT, FEATURE_MCT_READER_DIRECT, FEATURE_MCT_UNIVERSAL, FEATURE_IFD_PIN_PROPERTIES, FEATURE_ABORT, FEATURE_SET_SPE_MESSAGE, FEATURE_VERIFY_PIN_DIRECT_APP_ID, FEATURE_MODIFY_PIN_DIRECT_APP_ID, FEATURE_WRITE_DISPLAY, FEATURE_GET_KEY, FEATURE_IFD_DISPLAY_PROPERTIES, FEATURE_GET_TLV_PROPERTIES, FEATURE_CCID_ESC_COMMAND, parseFeatures, } from './control-codes';
|
|
30
|
+
export type { ReaderState, CardStatus, TransmitOptions, Card as CardInterface, Reader as ReaderInterface, Context as ContextInterface, MonitorEvent, ReaderMonitor as ReaderMonitorInterface, DeviceEvents, DevicesOptions, } from './types';
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,EACC,OAAO,SAAS,EAAE,kBAAkB,CAAC;AAC1D,eAAO,MAAM,MAAM,SAAe,CAAC;AACnC,eAAO,MAAM,IAAI,SAAa,CAAC;AAC/B,eAAO,MAAM,aAAa,EACC,OAAO,SAAS,EAAE,wBAAwB,CAAC;AAGtE,eAAO,MAAM,qBAAqB,QAA8B,CAAC;AACjE,eAAO,MAAM,kBAAkB,QAA2B,CAAC;AAC3D,eAAO,MAAM,kBAAkB,QAA2B,CAAC;AAE3D,eAAO,MAAM,iBAAiB,QAA0B,CAAC;AACzD,eAAO,MAAM,iBAAiB,QAA0B,CAAC;AACzD,eAAO,MAAM,kBAAkB,QAA2B,CAAC;AAC3D,eAAO,MAAM,wBAAwB,QAAiC,CAAC;AAEvE,eAAO,MAAM,gBAAgB,QAAyB,CAAC;AACvD,eAAO,MAAM,gBAAgB,QAAyB,CAAC;AACvD,eAAO,MAAM,kBAAkB,QAA2B,CAAC;AAC3D,eAAO,MAAM,gBAAgB,QAAyB,CAAC;AAEvD,eAAO,MAAM,mBAAmB,QAA4B,CAAC;AAC7D,eAAO,MAAM,kBAAkB,QAA2B,CAAC;AAC3D,eAAO,MAAM,mBAAmB,QAA4B,CAAC;AAC7D,eAAO,MAAM,mBAAmB,QAA4B,CAAC;AAC7D,eAAO,MAAM,uBAAuB,QAAgC,CAAC;AACrE,eAAO,MAAM,iBAAiB,QAA0B,CAAC;AACzD,eAAO,MAAM,mBAAmB,QAA4B,CAAC;AAC7D,eAAO,MAAM,oBAAoB,QAA6B,CAAC;AAC/D,eAAO,MAAM,qBAAqB,QAA8B,CAAC;AACjE,eAAO,MAAM,iBAAiB,QAA0B,CAAC;AACzD,eAAO,MAAM,gBAAgB,QAAyB,CAAC;AAGvD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EACH,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,GAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACH,cAAc,EACd,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,qBAAqB,EACrB,0BAA0B,EAC1B,aAAa,EACb,uBAAuB,EACvB,gCAAgC,EAChC,gCAAgC,EAChC,qBAAqB,EACrB,eAAe,EACf,8BAA8B,EAC9B,0BAA0B,EAC1B,wBAAwB,EACxB,aAAa,GAChB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACR,WAAW,EACX,UAAU,EACV,eAAe,EACf,IAAI,IAAI,aAAa,EACrB,MAAM,IAAI,eAAe,EACzB,OAAO,IAAI,gBAAgB,EAC3B,YAAY,EACZ,aAAa,IAAI,sBAAsB,EACvC,YAAY,EACZ,cAAc,GACjB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FEATURE_MODIFY_PIN_DIRECT_APP_ID = exports.FEATURE_VERIFY_PIN_DIRECT_APP_ID = exports.FEATURE_SET_SPE_MESSAGE = exports.FEATURE_ABORT = exports.FEATURE_IFD_PIN_PROPERTIES = exports.FEATURE_MCT_UNIVERSAL = exports.FEATURE_MCT_READER_DIRECT = exports.FEATURE_MODIFY_PIN_DIRECT = exports.FEATURE_VERIFY_PIN_DIRECT = exports.FEATURE_GET_KEY_PRESSED = exports.FEATURE_MODIFY_PIN_FINISH = exports.FEATURE_MODIFY_PIN_START = exports.FEATURE_VERIFY_PIN_FINISH = exports.FEATURE_VERIFY_PIN_START = exports.CM_IOCTL_GET_FEATURE_REQUEST = exports.SCARD_CTL_CODE = exports.createPCSCError = exports.SharingViolationError = exports.ServiceNotRunningError = exports.NoReadersError = exports.TimeoutError = exports.CardRemovedError = exports.PCSCError = exports.Devices = exports.SCARD_STATE_MUTE = exports.SCARD_STATE_INUSE = exports.SCARD_STATE_EXCLUSIVE = exports.SCARD_STATE_ATRMATCH = exports.SCARD_STATE_PRESENT = exports.SCARD_STATE_EMPTY = exports.SCARD_STATE_UNAVAILABLE = exports.SCARD_STATE_UNKNOWN = exports.SCARD_STATE_CHANGED = exports.SCARD_STATE_IGNORE = exports.SCARD_STATE_UNAWARE = exports.SCARD_EJECT_CARD = exports.SCARD_UNPOWER_CARD = exports.SCARD_RESET_CARD = exports.SCARD_LEAVE_CARD = exports.SCARD_PROTOCOL_UNDEFINED = exports.SCARD_PROTOCOL_RAW = exports.SCARD_PROTOCOL_T1 = exports.SCARD_PROTOCOL_T0 = exports.SCARD_SHARE_DIRECT = exports.SCARD_SHARE_SHARED = exports.SCARD_SHARE_EXCLUSIVE = exports.ReaderMonitor = exports.Card = exports.Reader = exports.Context = void 0;
|
|
4
|
+
exports.parseFeatures = exports.FEATURE_CCID_ESC_COMMAND = exports.FEATURE_GET_TLV_PROPERTIES = exports.FEATURE_IFD_DISPLAY_PROPERTIES = exports.FEATURE_GET_KEY = exports.FEATURE_WRITE_DISPLAY = void 0;
|
|
5
|
+
// Load native addon
|
|
6
|
+
const addon = require('../../build/Release/smartcard_napi.node');
|
|
7
|
+
// Re-export native classes
|
|
8
|
+
exports.Context = addon.Context;
|
|
9
|
+
exports.Reader = addon.Reader;
|
|
10
|
+
exports.Card = addon.Card;
|
|
11
|
+
exports.ReaderMonitor = addon.ReaderMonitor;
|
|
12
|
+
// Re-export constants
|
|
13
|
+
exports.SCARD_SHARE_EXCLUSIVE = addon.SCARD_SHARE_EXCLUSIVE;
|
|
14
|
+
exports.SCARD_SHARE_SHARED = addon.SCARD_SHARE_SHARED;
|
|
15
|
+
exports.SCARD_SHARE_DIRECT = addon.SCARD_SHARE_DIRECT;
|
|
16
|
+
exports.SCARD_PROTOCOL_T0 = addon.SCARD_PROTOCOL_T0;
|
|
17
|
+
exports.SCARD_PROTOCOL_T1 = addon.SCARD_PROTOCOL_T1;
|
|
18
|
+
exports.SCARD_PROTOCOL_RAW = addon.SCARD_PROTOCOL_RAW;
|
|
19
|
+
exports.SCARD_PROTOCOL_UNDEFINED = addon.SCARD_PROTOCOL_UNDEFINED;
|
|
20
|
+
exports.SCARD_LEAVE_CARD = addon.SCARD_LEAVE_CARD;
|
|
21
|
+
exports.SCARD_RESET_CARD = addon.SCARD_RESET_CARD;
|
|
22
|
+
exports.SCARD_UNPOWER_CARD = addon.SCARD_UNPOWER_CARD;
|
|
23
|
+
exports.SCARD_EJECT_CARD = addon.SCARD_EJECT_CARD;
|
|
24
|
+
exports.SCARD_STATE_UNAWARE = addon.SCARD_STATE_UNAWARE;
|
|
25
|
+
exports.SCARD_STATE_IGNORE = addon.SCARD_STATE_IGNORE;
|
|
26
|
+
exports.SCARD_STATE_CHANGED = addon.SCARD_STATE_CHANGED;
|
|
27
|
+
exports.SCARD_STATE_UNKNOWN = addon.SCARD_STATE_UNKNOWN;
|
|
28
|
+
exports.SCARD_STATE_UNAVAILABLE = addon.SCARD_STATE_UNAVAILABLE;
|
|
29
|
+
exports.SCARD_STATE_EMPTY = addon.SCARD_STATE_EMPTY;
|
|
30
|
+
exports.SCARD_STATE_PRESENT = addon.SCARD_STATE_PRESENT;
|
|
31
|
+
exports.SCARD_STATE_ATRMATCH = addon.SCARD_STATE_ATRMATCH;
|
|
32
|
+
exports.SCARD_STATE_EXCLUSIVE = addon.SCARD_STATE_EXCLUSIVE;
|
|
33
|
+
exports.SCARD_STATE_INUSE = addon.SCARD_STATE_INUSE;
|
|
34
|
+
exports.SCARD_STATE_MUTE = addon.SCARD_STATE_MUTE;
|
|
35
|
+
// Import and re-export Devices class
|
|
36
|
+
var devices_1 = require("./devices");
|
|
37
|
+
Object.defineProperty(exports, "Devices", { enumerable: true, get: function () { return devices_1.Devices; } });
|
|
38
|
+
// Import and re-export error classes
|
|
39
|
+
var errors_1 = require("./errors");
|
|
40
|
+
Object.defineProperty(exports, "PCSCError", { enumerable: true, get: function () { return errors_1.PCSCError; } });
|
|
41
|
+
Object.defineProperty(exports, "CardRemovedError", { enumerable: true, get: function () { return errors_1.CardRemovedError; } });
|
|
42
|
+
Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function () { return errors_1.TimeoutError; } });
|
|
43
|
+
Object.defineProperty(exports, "NoReadersError", { enumerable: true, get: function () { return errors_1.NoReadersError; } });
|
|
44
|
+
Object.defineProperty(exports, "ServiceNotRunningError", { enumerable: true, get: function () { return errors_1.ServiceNotRunningError; } });
|
|
45
|
+
Object.defineProperty(exports, "SharingViolationError", { enumerable: true, get: function () { return errors_1.SharingViolationError; } });
|
|
46
|
+
Object.defineProperty(exports, "createPCSCError", { enumerable: true, get: function () { return errors_1.createPCSCError; } });
|
|
47
|
+
// Import and re-export control codes
|
|
48
|
+
var control_codes_1 = require("./control-codes");
|
|
49
|
+
Object.defineProperty(exports, "SCARD_CTL_CODE", { enumerable: true, get: function () { return control_codes_1.SCARD_CTL_CODE; } });
|
|
50
|
+
Object.defineProperty(exports, "CM_IOCTL_GET_FEATURE_REQUEST", { enumerable: true, get: function () { return control_codes_1.CM_IOCTL_GET_FEATURE_REQUEST; } });
|
|
51
|
+
Object.defineProperty(exports, "FEATURE_VERIFY_PIN_START", { enumerable: true, get: function () { return control_codes_1.FEATURE_VERIFY_PIN_START; } });
|
|
52
|
+
Object.defineProperty(exports, "FEATURE_VERIFY_PIN_FINISH", { enumerable: true, get: function () { return control_codes_1.FEATURE_VERIFY_PIN_FINISH; } });
|
|
53
|
+
Object.defineProperty(exports, "FEATURE_MODIFY_PIN_START", { enumerable: true, get: function () { return control_codes_1.FEATURE_MODIFY_PIN_START; } });
|
|
54
|
+
Object.defineProperty(exports, "FEATURE_MODIFY_PIN_FINISH", { enumerable: true, get: function () { return control_codes_1.FEATURE_MODIFY_PIN_FINISH; } });
|
|
55
|
+
Object.defineProperty(exports, "FEATURE_GET_KEY_PRESSED", { enumerable: true, get: function () { return control_codes_1.FEATURE_GET_KEY_PRESSED; } });
|
|
56
|
+
Object.defineProperty(exports, "FEATURE_VERIFY_PIN_DIRECT", { enumerable: true, get: function () { return control_codes_1.FEATURE_VERIFY_PIN_DIRECT; } });
|
|
57
|
+
Object.defineProperty(exports, "FEATURE_MODIFY_PIN_DIRECT", { enumerable: true, get: function () { return control_codes_1.FEATURE_MODIFY_PIN_DIRECT; } });
|
|
58
|
+
Object.defineProperty(exports, "FEATURE_MCT_READER_DIRECT", { enumerable: true, get: function () { return control_codes_1.FEATURE_MCT_READER_DIRECT; } });
|
|
59
|
+
Object.defineProperty(exports, "FEATURE_MCT_UNIVERSAL", { enumerable: true, get: function () { return control_codes_1.FEATURE_MCT_UNIVERSAL; } });
|
|
60
|
+
Object.defineProperty(exports, "FEATURE_IFD_PIN_PROPERTIES", { enumerable: true, get: function () { return control_codes_1.FEATURE_IFD_PIN_PROPERTIES; } });
|
|
61
|
+
Object.defineProperty(exports, "FEATURE_ABORT", { enumerable: true, get: function () { return control_codes_1.FEATURE_ABORT; } });
|
|
62
|
+
Object.defineProperty(exports, "FEATURE_SET_SPE_MESSAGE", { enumerable: true, get: function () { return control_codes_1.FEATURE_SET_SPE_MESSAGE; } });
|
|
63
|
+
Object.defineProperty(exports, "FEATURE_VERIFY_PIN_DIRECT_APP_ID", { enumerable: true, get: function () { return control_codes_1.FEATURE_VERIFY_PIN_DIRECT_APP_ID; } });
|
|
64
|
+
Object.defineProperty(exports, "FEATURE_MODIFY_PIN_DIRECT_APP_ID", { enumerable: true, get: function () { return control_codes_1.FEATURE_MODIFY_PIN_DIRECT_APP_ID; } });
|
|
65
|
+
Object.defineProperty(exports, "FEATURE_WRITE_DISPLAY", { enumerable: true, get: function () { return control_codes_1.FEATURE_WRITE_DISPLAY; } });
|
|
66
|
+
Object.defineProperty(exports, "FEATURE_GET_KEY", { enumerable: true, get: function () { return control_codes_1.FEATURE_GET_KEY; } });
|
|
67
|
+
Object.defineProperty(exports, "FEATURE_IFD_DISPLAY_PROPERTIES", { enumerable: true, get: function () { return control_codes_1.FEATURE_IFD_DISPLAY_PROPERTIES; } });
|
|
68
|
+
Object.defineProperty(exports, "FEATURE_GET_TLV_PROPERTIES", { enumerable: true, get: function () { return control_codes_1.FEATURE_GET_TLV_PROPERTIES; } });
|
|
69
|
+
Object.defineProperty(exports, "FEATURE_CCID_ESC_COMMAND", { enumerable: true, get: function () { return control_codes_1.FEATURE_CCID_ESC_COMMAND; } });
|
|
70
|
+
Object.defineProperty(exports, "parseFeatures", { enumerable: true, get: function () { return control_codes_1.parseFeatures; } });
|
|
71
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the native PC/SC addon
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Reader state information returned from waitForChange
|
|
6
|
+
*/
|
|
7
|
+
export interface ReaderState {
|
|
8
|
+
name: string;
|
|
9
|
+
state: number;
|
|
10
|
+
changed: boolean;
|
|
11
|
+
atr: Buffer | null;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Card status information
|
|
15
|
+
*/
|
|
16
|
+
export interface CardStatus {
|
|
17
|
+
state: number;
|
|
18
|
+
protocol: number;
|
|
19
|
+
atr: Buffer;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Options for card.transmit()
|
|
23
|
+
*/
|
|
24
|
+
export interface TransmitOptions {
|
|
25
|
+
/**
|
|
26
|
+
* Maximum receive buffer size in bytes.
|
|
27
|
+
* Default: 258 (standard APDU: 256 data + 2 status bytes)
|
|
28
|
+
* Maximum: 262144 (256KB for extended APDUs)
|
|
29
|
+
*/
|
|
30
|
+
maxRecvLength?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Represents a connected smart card
|
|
34
|
+
*/
|
|
35
|
+
export interface Card {
|
|
36
|
+
/** The active protocol (T0, T1, or RAW) */
|
|
37
|
+
readonly protocol: number;
|
|
38
|
+
/** Whether the card is still connected */
|
|
39
|
+
readonly connected: boolean;
|
|
40
|
+
/** The card's ATR (Answer To Reset) */
|
|
41
|
+
readonly atr: Buffer | null;
|
|
42
|
+
/**
|
|
43
|
+
* Transmit an APDU command to the card
|
|
44
|
+
*/
|
|
45
|
+
transmit(command: Buffer | number[], options?: TransmitOptions): Promise<Buffer>;
|
|
46
|
+
/**
|
|
47
|
+
* Send a control command to the reader
|
|
48
|
+
*/
|
|
49
|
+
control(code: number, data?: Buffer | number[]): Promise<Buffer>;
|
|
50
|
+
/**
|
|
51
|
+
* Get the current card status
|
|
52
|
+
*/
|
|
53
|
+
getStatus(): CardStatus;
|
|
54
|
+
/**
|
|
55
|
+
* Disconnect from the card
|
|
56
|
+
*/
|
|
57
|
+
disconnect(disposition?: number): void;
|
|
58
|
+
/**
|
|
59
|
+
* Reconnect to the card (async)
|
|
60
|
+
*/
|
|
61
|
+
reconnect(shareMode?: number, protocol?: number, initialization?: number): Promise<number>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Represents a smart card reader
|
|
65
|
+
*/
|
|
66
|
+
export interface Reader {
|
|
67
|
+
/** The reader name */
|
|
68
|
+
readonly name: string;
|
|
69
|
+
/** Current reader state flags */
|
|
70
|
+
readonly state: number;
|
|
71
|
+
/** ATR of the card if present */
|
|
72
|
+
readonly atr: Buffer | null;
|
|
73
|
+
/**
|
|
74
|
+
* Connect to a card in the reader
|
|
75
|
+
*/
|
|
76
|
+
connect(shareMode?: number, protocol?: number): Promise<Card>;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Low-level PC/SC context
|
|
80
|
+
*/
|
|
81
|
+
export interface Context {
|
|
82
|
+
/** Whether the context is still valid */
|
|
83
|
+
readonly isValid: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* List available readers
|
|
86
|
+
*/
|
|
87
|
+
listReaders(): Reader[];
|
|
88
|
+
/**
|
|
89
|
+
* Wait for reader/card state changes
|
|
90
|
+
*/
|
|
91
|
+
waitForChange(readers?: Reader[] | ReaderState[], timeout?: number): Promise<ReaderState[] | null>;
|
|
92
|
+
/**
|
|
93
|
+
* Cancel a pending waitForChange call
|
|
94
|
+
*/
|
|
95
|
+
cancel(): void;
|
|
96
|
+
/**
|
|
97
|
+
* Close the context and release resources
|
|
98
|
+
*/
|
|
99
|
+
close(): void;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Monitor event from native ReaderMonitor
|
|
103
|
+
*/
|
|
104
|
+
export interface MonitorEvent {
|
|
105
|
+
type: 'reader-attached' | 'reader-detached' | 'card-inserted' | 'card-removed' | 'error';
|
|
106
|
+
reader: string;
|
|
107
|
+
state: number;
|
|
108
|
+
atr: Buffer | null;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Native PC/SC event monitor using ThreadSafeFunction
|
|
112
|
+
* Runs monitoring on a background thread for efficiency
|
|
113
|
+
*/
|
|
114
|
+
export interface ReaderMonitor {
|
|
115
|
+
/** Whether the monitor is currently running */
|
|
116
|
+
readonly isRunning: boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Start monitoring for reader/card changes
|
|
119
|
+
*/
|
|
120
|
+
start(callback: (event: MonitorEvent) => void): void;
|
|
121
|
+
/**
|
|
122
|
+
* Stop monitoring
|
|
123
|
+
*/
|
|
124
|
+
stop(): void;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Partial reader info emitted in device events
|
|
128
|
+
*/
|
|
129
|
+
export interface ReaderEventInfo {
|
|
130
|
+
name: string;
|
|
131
|
+
state?: number;
|
|
132
|
+
atr?: Buffer | null;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Event types for Devices class
|
|
136
|
+
*/
|
|
137
|
+
export interface DeviceEvents {
|
|
138
|
+
'reader-attached': (reader: ReaderEventInfo) => void;
|
|
139
|
+
'reader-detached': (reader: ReaderEventInfo) => void;
|
|
140
|
+
'card-inserted': (event: {
|
|
141
|
+
reader: ReaderEventInfo;
|
|
142
|
+
card: Card;
|
|
143
|
+
}) => void;
|
|
144
|
+
'card-removed': (event: {
|
|
145
|
+
reader: ReaderEventInfo;
|
|
146
|
+
card: Card | null;
|
|
147
|
+
}) => void;
|
|
148
|
+
error: (error: Error) => void;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Constructor interfaces for native classes
|
|
152
|
+
*/
|
|
153
|
+
export interface ContextConstructor {
|
|
154
|
+
new (): Context;
|
|
155
|
+
}
|
|
156
|
+
export interface ReaderMonitorConstructor {
|
|
157
|
+
new (): ReaderMonitor;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Options for Devices class constructor (for dependency injection)
|
|
161
|
+
*/
|
|
162
|
+
export interface DevicesOptions {
|
|
163
|
+
/** Custom Context constructor (for testing) */
|
|
164
|
+
Context?: ContextConstructor;
|
|
165
|
+
/** Custom ReaderMonitor constructor (for testing) */
|
|
166
|
+
ReaderMonitor?: ReaderMonitorConstructor;
|
|
167
|
+
/** SCARD_STATE_PRESENT constant */
|
|
168
|
+
SCARD_STATE_PRESENT?: number;
|
|
169
|
+
/** SCARD_SHARE_SHARED constant */
|
|
170
|
+
SCARD_SHARE_SHARED?: number;
|
|
171
|
+
/** SCARD_PROTOCOL_T0 constant */
|
|
172
|
+
SCARD_PROTOCOL_T0?: number;
|
|
173
|
+
/** SCARD_PROTOCOL_T1 constant */
|
|
174
|
+
SCARD_PROTOCOL_T1?: number;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Native addon interface
|
|
178
|
+
*/
|
|
179
|
+
export interface NativeAddon {
|
|
180
|
+
Context: ContextConstructor;
|
|
181
|
+
Reader: unknown;
|
|
182
|
+
Card: unknown;
|
|
183
|
+
ReaderMonitor: ReaderMonitorConstructor;
|
|
184
|
+
SCARD_SHARE_EXCLUSIVE: number;
|
|
185
|
+
SCARD_SHARE_SHARED: number;
|
|
186
|
+
SCARD_SHARE_DIRECT: number;
|
|
187
|
+
SCARD_PROTOCOL_T0: number;
|
|
188
|
+
SCARD_PROTOCOL_T1: number;
|
|
189
|
+
SCARD_PROTOCOL_RAW: number;
|
|
190
|
+
SCARD_PROTOCOL_UNDEFINED: number;
|
|
191
|
+
SCARD_LEAVE_CARD: number;
|
|
192
|
+
SCARD_RESET_CARD: number;
|
|
193
|
+
SCARD_UNPOWER_CARD: number;
|
|
194
|
+
SCARD_EJECT_CARD: number;
|
|
195
|
+
SCARD_STATE_UNAWARE: number;
|
|
196
|
+
SCARD_STATE_IGNORE: number;
|
|
197
|
+
SCARD_STATE_CHANGED: number;
|
|
198
|
+
SCARD_STATE_UNKNOWN: number;
|
|
199
|
+
SCARD_STATE_UNAVAILABLE: number;
|
|
200
|
+
SCARD_STATE_EMPTY: number;
|
|
201
|
+
SCARD_STATE_PRESENT: number;
|
|
202
|
+
SCARD_STATE_ATRMATCH: number;
|
|
203
|
+
SCARD_STATE_EXCLUSIVE: number;
|
|
204
|
+
SCARD_STATE_INUSE: number;
|
|
205
|
+
SCARD_STATE_MUTE: number;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "smartcard",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"description": "PC/SC bindings for Node.js using N-API - ABI stable across Node.js versions",
|
|
5
5
|
"author": "Tom KP",
|
|
6
6
|
"license": "MIT",
|
|
@@ -12,22 +12,33 @@
|
|
|
12
12
|
"url": "https://github.com/tomkp/smartcard/issues"
|
|
13
13
|
},
|
|
14
14
|
"homepage": "https://github.com/tomkp/smartcard#readme",
|
|
15
|
-
"main": "lib/index.js",
|
|
16
|
-
"types": "lib/index.d.ts",
|
|
15
|
+
"main": "dist/lib/index.js",
|
|
16
|
+
"types": "dist/lib/index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./dist/lib/index.d.ts",
|
|
20
|
+
"require": "./dist/lib/index.js"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
17
23
|
"gypfile": true,
|
|
18
24
|
"scripts": {
|
|
19
25
|
"install": "node-gyp rebuild",
|
|
20
|
-
"build": "node-gyp rebuild",
|
|
26
|
+
"build": "tsc && node-gyp rebuild",
|
|
27
|
+
"build:ts": "tsc",
|
|
21
28
|
"rebuild": "node-gyp rebuild",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"test:
|
|
25
|
-
"test:
|
|
26
|
-
"test:
|
|
27
|
-
"coverage:
|
|
29
|
+
"clean": "rm -rf dist",
|
|
30
|
+
"prepublishOnly": "npm run build",
|
|
31
|
+
"test": "npm run build:ts && node --test dist/test/integration/index.js && node --test dist/test/unit/index.js",
|
|
32
|
+
"test:unit": "npm run build:ts && node --test dist/test/unit/index.js",
|
|
33
|
+
"test:integration": "npm run build:ts && node --test dist/test/integration/index.js",
|
|
34
|
+
"test:coverage": "npm run build:ts && c8 --include=dist/lib/**/*.js node --test dist/test/unit/index.js",
|
|
35
|
+
"typecheck": "tsc --noEmit",
|
|
36
|
+
"coverage:report": "c8 report --reporter=text --reporter=html",
|
|
37
|
+
"lint": "eslint lib test examples",
|
|
38
|
+
"lint:fix": "eslint lib test examples --fix"
|
|
28
39
|
},
|
|
29
40
|
"files": [
|
|
30
|
-
"lib/",
|
|
41
|
+
"dist/lib/",
|
|
31
42
|
"src/",
|
|
32
43
|
"binding.gyp",
|
|
33
44
|
"README.md",
|
|
@@ -37,10 +48,13 @@
|
|
|
37
48
|
"node-addon-api": "^7.0.0"
|
|
38
49
|
},
|
|
39
50
|
"devDependencies": {
|
|
51
|
+
"@eslint/js": "^9.39.2",
|
|
40
52
|
"@types/node": "^25.0.3",
|
|
41
53
|
"c8": "^10.1.3",
|
|
54
|
+
"eslint": "^9.39.2",
|
|
42
55
|
"node-gyp": "^10.0.0",
|
|
43
|
-
"
|
|
56
|
+
"typescript": "^5.7.2",
|
|
57
|
+
"typescript-eslint": "^8.50.1"
|
|
44
58
|
},
|
|
45
59
|
"engines": {
|
|
46
60
|
"node": ">=18.0.0"
|
|
@@ -62,8 +76,5 @@
|
|
|
62
76
|
"node-addon-api",
|
|
63
77
|
"acr122",
|
|
64
78
|
"card-reader"
|
|
65
|
-
]
|
|
66
|
-
"tsd": {
|
|
67
|
-
"directory": "test/types"
|
|
68
|
-
}
|
|
79
|
+
]
|
|
69
80
|
}
|
package/src/async_workers.cpp
CHANGED
|
@@ -252,6 +252,7 @@ ReconnectWorker::ReconnectWorker(
|
|
|
252
252
|
DWORD shareMode,
|
|
253
253
|
DWORD preferredProtocols,
|
|
254
254
|
DWORD initialization,
|
|
255
|
+
DWORD* protocolOut,
|
|
255
256
|
Napi::Promise::Deferred deferred)
|
|
256
257
|
: Napi::AsyncWorker(env),
|
|
257
258
|
card_(card),
|
|
@@ -259,6 +260,7 @@ ReconnectWorker::ReconnectWorker(
|
|
|
259
260
|
preferredProtocols_(preferredProtocols),
|
|
260
261
|
initialization_(initialization),
|
|
261
262
|
activeProtocol_(0),
|
|
263
|
+
protocolOut_(protocolOut),
|
|
262
264
|
result_(SCARD_S_SUCCESS),
|
|
263
265
|
deferred_(deferred) {
|
|
264
266
|
}
|
|
@@ -277,6 +279,10 @@ void ReconnectWorker::OnOK() {
|
|
|
277
279
|
Napi::Env env = Env();
|
|
278
280
|
|
|
279
281
|
if (result_ == SCARD_S_SUCCESS) {
|
|
282
|
+
// Update the card object's protocol
|
|
283
|
+
if (protocolOut_) {
|
|
284
|
+
*protocolOut_ = activeProtocol_;
|
|
285
|
+
}
|
|
280
286
|
deferred_.Resolve(Napi::Number::New(env, activeProtocol_));
|
|
281
287
|
} else {
|
|
282
288
|
deferred_.Reject(Napi::Error::New(env, GetPCSCErrorString(result_)).Value());
|
package/src/async_workers.h
CHANGED
|
@@ -108,6 +108,7 @@ public:
|
|
|
108
108
|
DWORD shareMode,
|
|
109
109
|
DWORD preferredProtocols,
|
|
110
110
|
DWORD initialization,
|
|
111
|
+
DWORD* protocolOut,
|
|
111
112
|
Napi::Promise::Deferred deferred);
|
|
112
113
|
|
|
113
114
|
void Execute() override;
|
|
@@ -122,6 +123,7 @@ private:
|
|
|
122
123
|
DWORD preferredProtocols_;
|
|
123
124
|
DWORD initialization_;
|
|
124
125
|
DWORD activeProtocol_;
|
|
126
|
+
DWORD* protocolOut_;
|
|
125
127
|
LONG result_;
|
|
126
128
|
Napi::Promise::Deferred deferred_;
|
|
127
129
|
};
|
package/src/pcsc_card.cpp
CHANGED
|
@@ -248,7 +248,7 @@ Napi::Value PCSCCard::Reconnect(const Napi::CallbackInfo& info) {
|
|
|
248
248
|
Napi::Promise::Deferred deferred = Napi::Promise::Deferred::New(env);
|
|
249
249
|
|
|
250
250
|
ReconnectWorker* worker = new ReconnectWorker(
|
|
251
|
-
env, card_, shareMode, preferredProtocols, initialization, deferred);
|
|
251
|
+
env, card_, shareMode, preferredProtocols, initialization, &protocol_, deferred);
|
|
252
252
|
worker->Queue();
|
|
253
253
|
|
|
254
254
|
return deferred.Promise();
|