sunmi-device-sdk
Version:
JavaScript SDK for Sunmi card readers and printers
93 lines (85 loc) • 2.7 kB
text/typescript
/**
* Sunmi Card Reader API
* Provides methods to interact with Sunmi device card readers
*/
import { CardType, MifareKeyType, CardReadResult } from './types';
import { getNativeBridge } from './bridge';
export class SunmiCardReader {
/**
* Start reading a card
* @param cardTypes Array of card types to detect (e.g., ['mifare', 'ic'])
* @returns Promise resolving to card information
*/
static async startReadCard(cardTypes: string[]): Promise<CardReadResult> {
const bridge = getNativeBridge();
return bridge.execute('SunmiCardReader', 'startReadCard', cardTypes);
}
/**
* Authenticate a Mifare card block
* @param blockKey The authentication key (hex string)
* @param keyType Key type (A or B)
* @param blockToRead Block number to authenticate
* @returns Promise resolving when authentication succeeds
*/
static async authMifare(
blockKey: string,
keyType: MifareKeyType,
blockToRead: number
): Promise<void> {
const bridge = getNativeBridge();
return bridge.execute('SunmiCardReader', 'authMifare', [
blockKey,
keyType,
blockToRead
]);
}
/**
* Read a block from an authenticated Mifare card
* @param blockToRead Block number to read
* @returns Promise resolving to the block data (hex string)
*/
static async readBlockMifare(blockToRead: number): Promise<string> {
const bridge = getNativeBridge();
return bridge.execute('SunmiCardReader', 'readBlockMifare', [blockToRead]);
}
/**
* Write data to a Mifare card block
* @param blockToWrite Block number to write to
* @param stringToWrite Data to write (hex string, must be 16 bytes)
* @returns Promise resolving when write completes
*/
static async writeBlockMifare(
blockToWrite: number,
stringToWrite: string
): Promise<void> {
const bridge = getNativeBridge();
return bridge.execute('SunmiCardReader', 'writeBlockMifare', [
blockToWrite,
stringToWrite
]);
}
/**
* Set PIN status
* @param pinToEdit PIN identifier
* @param statusResolved New status
* @returns Promise resolving when PIN status is updated
*/
static async setPinStatus(
pinToEdit: string,
statusResolved: boolean
): Promise<void> {
const bridge = getNativeBridge();
return bridge.execute('SunmiCardReader', 'setPinStatus', [
pinToEdit,
statusResolved
]);
}
/**
* Cancel an ongoing card reading operation
* @returns Promise resolving when operation is cancelled
*/
static async cancelCheckCard(): Promise<void> {
const bridge = getNativeBridge();
return bridge.execute('SunmiCardReader', 'cancelCheckCard', []);
}
}