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.
@@ -1,14 +1,12 @@
1
- // @ts-check
2
- 'use strict';
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, 0x8010000A);
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, 0x8010002E);
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, 0x8010001D);
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, 0x8010000B);
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], // SCARD_W_REMOVED_CARD
76
- [0x8010000A, TimeoutError], // SCARD_E_TIMEOUT
77
- [0x8010002E, NoReadersError], // SCARD_E_NO_READERS_AVAILABLE
78
- [0x8010001D, ServiceNotRunningError], // SCARD_E_NO_SERVICE
79
- [0x8010000B, SharingViolationError], // SCARD_E_SHARING_VIOLATION
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,6 @@
1
+ "use strict";
2
+ /**
3
+ * Type definitions for the native PC/SC addon
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -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.2.1",
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
- "test": "node --test test/integration/index.js && node --test test/unit/index.js",
23
- "test:unit": "node --test test/unit/index.js",
24
- "test:integration": "node --test test/integration/index.js",
25
- "test:coverage": "c8 --include=lib/**/*.js node --test test/unit/index.js",
26
- "test:types": "tsd",
27
- "coverage:report": "c8 report --reporter=text --reporter=html"
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
- "tsd": "^0.33.0"
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
  }
@@ -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());
@@ -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();