react-native-nfc-manager 4.0.0-beta.1 → 4.0.0-beta.10
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 +146 -49
- package/android/src/main/java/community/revteltech/nfc/MifareClassicHandler.java +419 -0
- package/android/src/main/java/community/revteltech/nfc/MifareUltralightHandler.java +84 -0
- package/android/src/main/java/community/revteltech/nfc/NdefHandler.java +373 -0
- package/android/src/main/java/community/revteltech/nfc/NfcAdapterStateChangedReceiver.java +48 -0
- package/android/src/main/java/community/revteltech/nfc/NfcErrorCodes.java +16 -0
- package/android/src/main/java/community/revteltech/nfc/NfcManager.java +348 -1087
- package/android/src/main/java/community/revteltech/nfc/NfcManagerIOSStubBase.java +130 -0
- package/android/src/main/java/community/revteltech/nfc/NfcTechIoRouter.java +258 -0
- package/android/src/main/java/community/revteltech/nfc/TagTechnologyRequest.java +19 -7
- package/android/src/main/java/community/revteltech/nfc/Util.java +275 -2
- package/app.plugin.js +8 -9
- package/dist/ndef-lib/constants.js +67 -0
- package/dist/ndef-lib/constants.js.map +1 -0
- package/dist/ndef-lib/index.js +79 -0
- package/dist/ndef-lib/index.js.map +1 -0
- package/dist/ndef-lib/ndef-text.js +29 -0
- package/dist/ndef-lib/ndef-text.js.map +1 -0
- package/dist/ndef-lib/ndef-uri.js +40 -0
- package/dist/ndef-lib/ndef-uri.js.map +1 -0
- package/dist/ndef-lib/ndef-wifi-simple.js +100 -0
- package/dist/ndef-lib/ndef-wifi-simple.js.map +1 -0
- package/dist/ndef-lib/ndef.js +152 -0
- package/dist/ndef-lib/ndef.js.map +1 -0
- package/dist/ndef-lib/stringifier.js +155 -0
- package/dist/ndef-lib/stringifier.js.map +1 -0
- package/dist/ndef-lib/util.js +126 -0
- package/dist/ndef-lib/util.js.map +1 -0
- package/dist/specs/NativeNfcManager.js +5 -0
- package/dist/specs/NativeNfcManager.js.map +1 -0
- package/dist/src/NativeNfcManager.js +55 -0
- package/dist/src/NativeNfcManager.js.map +1 -0
- package/dist/src/NfcError.js +220 -0
- package/dist/src/NfcError.js.map +1 -0
- package/dist/src/NfcManager.js +175 -0
- package/dist/src/NfcManager.js.map +1 -0
- package/dist/src/NfcManagerAndroid.js +112 -0
- package/dist/src/NfcManagerAndroid.js.map +1 -0
- package/dist/src/NfcManagerIOS.js +119 -0
- package/dist/src/NfcManagerIOS.js.map +1 -0
- package/dist/src/NfcTech/Iso15693HandlerIOS.js +99 -0
- package/dist/src/NfcTech/Iso15693HandlerIOS.js.map +1 -0
- package/dist/src/NfcTech/IsoDepHandler.js +29 -0
- package/dist/src/NfcTech/IsoDepHandler.js.map +1 -0
- package/dist/src/NfcTech/MifareClassicHandlerAndroid.js +68 -0
- package/dist/src/NfcTech/MifareClassicHandlerAndroid.js.map +1 -0
- package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js +23 -0
- package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js.map +1 -0
- package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js +16 -0
- package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js.map +1 -0
- package/dist/src/NfcTech/NdefHandler.js +54 -0
- package/dist/src/NfcTech/NdefHandler.js.map +1 -0
- package/dist/src/NfcTech/NfcAHandler.js +16 -0
- package/dist/src/NfcTech/NfcAHandler.js.map +1 -0
- package/dist/src/NfcTech/NfcVHandler.js +33 -0
- package/dist/src/NfcTech/NfcVHandler.js.map +1 -0
- package/dist/src/index.js +53 -0
- package/dist/src/index.js.map +1 -0
- package/index.d.ts +110 -46
- package/ios/NfcManager.h +2 -11
- package/ios/NfcManager.mm +264 -438
- package/ios/RNNfcBridgeUtil.h +28 -0
- package/ios/RNNfcBridgeUtil.mm +52 -0
- package/ios/RNNfcManager+Felica.swift +61 -0
- package/ios/RNNfcManager+Iso15693.swift +895 -0
- package/ios/RNNfcManager+IsoDep.swift +145 -0
- package/ios/RNNfcManager+Mifare.swift +61 -0
- package/ios/RNNfcManager+Ndef.swift +120 -0
- package/ios/RNNfcManager.h +251 -0
- package/ios/RNNfcManager.swift +648 -0
- package/ios/RNNfcSessionDelegateProxy.swift +104 -0
- package/ios/RNNfcSwiftUtil.swift +34 -0
- package/ndef-lib/{constants.js → constants.ts} +2 -0
- package/ndef-lib/{index.js → index.ts} +23 -12
- package/ndef-lib/{ndef-text.js → ndef-text.ts} +7 -2
- package/ndef-lib/{ndef-uri.js → ndef-uri.ts} +8 -3
- package/ndef-lib/{ndef-wifi-simple.js → ndef-wifi-simple.ts} +34 -11
- package/ndef-lib/{ndef.js → ndef.ts} +53 -25
- package/ndef-lib/{stringifier.js → stringifier.ts} +27 -10
- package/ndef-lib/{util.js → util.ts} +13 -8
- package/package.json +42 -13
- package/react-native-nfc-manager.podspec +3 -2
- package/specs/NativeNfcManager.ts +18 -4
- package/src/NativeNfcManager.ts +84 -0
- package/src/{NfcError.js → NfcError.ts} +6 -17
- package/src/{NfcManager.js → NfcManager.ts} +51 -34
- package/src/{NfcManagerAndroid.js → NfcManagerAndroid.ts} +27 -8
- package/src/{NfcManagerIOS.js → NfcManagerIOS.ts} +31 -10
- package/src/NfcTech/{Iso15693HandlerIOS.js → Iso15693HandlerIOS.ts} +64 -36
- package/src/NfcTech/{IsoDepHandler.js → IsoDepHandler.ts} +8 -5
- package/src/NfcTech/{MifareClassicHandlerAndroid.js → MifareClassicHandlerAndroid.ts} +33 -24
- package/src/NfcTech/{MifareUltralightHandlerAndroid.js → MifareUltralightHandlerAndroid.ts} +14 -5
- package/src/NfcTech/{NdefFormatableHandlerAndroid.js → NdefFormatableHandlerAndroid.ts} +9 -2
- package/src/NfcTech/{NdefHandler.js → NdefHandler.ts} +19 -6
- package/src/NfcTech/{NfcAHandler.js → NfcAHandler.ts} +6 -3
- package/src/NfcTech/{NfcVHandler.js → NfcVHandler.ts} +8 -5
- package/src/__mocks__/{NativeNfcManager.js → NativeNfcManager.ts} +4 -1
- package/src/{index.js → index.ts} +1 -1
- package/android/src/main/java/community/revteltech/nfc/JsonConvert.java +0 -141
- package/android/src/main/java/community/revteltech/nfc/MifareUtil.java +0 -84
- package/ios/NfcManager+Felica.mm +0 -43
- package/ios/NfcManager+Iso15693.mm +0 -600
- package/ios/NfcManager+IsoDep.mm +0 -83
- package/ios/NfcManager+Mifare.mm +0 -43
- package/ios/Util.mm +0 -55
- package/specs/NativeNfcManager.d.ts +0 -6
- package/specs/NativeNfcManager.js +0 -3
- package/specs/NativeNfcManager.js.map +0 -1
- package/src/NativeNfcManager.js +0 -37
|
@@ -5,6 +5,12 @@ import {MifareUltralightHandlerAndroid} from './NfcTech/MifareUltralightHandlerA
|
|
|
5
5
|
import {NdefFormatableHandlerAndroid} from './NfcTech/NdefFormatableHandlerAndroid';
|
|
6
6
|
import {handleNativeException, buildNfcExceptionAndroid} from './NfcError';
|
|
7
7
|
|
|
8
|
+
type RequestTechnologyOptions = Record<string, unknown>;
|
|
9
|
+
type CancelTechnologyRequestOptions = {
|
|
10
|
+
throwOnError?: boolean;
|
|
11
|
+
delayMsAndroid?: number;
|
|
12
|
+
};
|
|
13
|
+
|
|
8
14
|
const NfcAdapter = {
|
|
9
15
|
FLAG_READER_NFC_A: 0x1,
|
|
10
16
|
FLAG_READER_NFC_B: 0x2,
|
|
@@ -15,15 +21,26 @@ const NfcAdapter = {
|
|
|
15
21
|
FLAG_READER_NO_PLATFORM_SOUNDS: 0x100,
|
|
16
22
|
};
|
|
17
23
|
|
|
18
|
-
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
|
|
24
|
+
const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
19
25
|
|
|
20
26
|
class NfcManagerAndroid extends NfcManagerBase {
|
|
27
|
+
cleanUpTagRegistration: boolean;
|
|
28
|
+
_mifareClassicHandlerAndroid: MifareClassicHandlerAndroid | null;
|
|
29
|
+
_mifareUltralightHandlerAndroid: MifareUltralightHandlerAndroid | null;
|
|
30
|
+
_ndefFormatableHandlerAndroid: NdefFormatableHandlerAndroid | null;
|
|
31
|
+
|
|
21
32
|
constructor() {
|
|
22
33
|
super();
|
|
23
34
|
this.cleanUpTagRegistration = false;
|
|
35
|
+
this._mifareClassicHandlerAndroid = null;
|
|
36
|
+
this._mifareUltralightHandlerAndroid = null;
|
|
37
|
+
this._ndefFormatableHandlerAndroid = null;
|
|
24
38
|
}
|
|
25
39
|
|
|
26
|
-
requestTechnology = async (
|
|
40
|
+
requestTechnology = async (
|
|
41
|
+
tech: string | string[],
|
|
42
|
+
options: RequestTechnologyOptions = {},
|
|
43
|
+
) => {
|
|
27
44
|
try {
|
|
28
45
|
if (typeof tech === 'string') {
|
|
29
46
|
tech = [tech];
|
|
@@ -43,7 +60,7 @@ class NfcManagerAndroid extends NfcManagerBase {
|
|
|
43
60
|
}
|
|
44
61
|
};
|
|
45
62
|
|
|
46
|
-
cancelTechnologyRequest = async (options = {}) => {
|
|
63
|
+
cancelTechnologyRequest = async (options: CancelTechnologyRequestOptions = {}) => {
|
|
47
64
|
const {throwOnError = false, delayMsAndroid = 1000} = options;
|
|
48
65
|
|
|
49
66
|
try {
|
|
@@ -77,18 +94,20 @@ class NfcManagerAndroid extends NfcManagerBase {
|
|
|
77
94
|
getLaunchTagEvent = () =>
|
|
78
95
|
handleNativeException(callNative('getLaunchTagEvent'));
|
|
79
96
|
|
|
80
|
-
setNdefPushMessage = (
|
|
97
|
+
setNdefPushMessage = (_bytes: number[]) => {
|
|
81
98
|
return Promise.reject('this api is deprecated');
|
|
82
99
|
}
|
|
83
100
|
|
|
84
|
-
setTimeout = (timeout) =>
|
|
101
|
+
setTimeout = (timeout: number) =>
|
|
85
102
|
handleNativeException(callNative('setTimeout', [timeout]));
|
|
86
103
|
|
|
87
|
-
|
|
104
|
+
getTimeout = () => handleNativeException(callNative('getTimeout'));
|
|
105
|
+
|
|
106
|
+
connect = (techs: string[]) => handleNativeException(callNative('connect', [techs]));
|
|
88
107
|
|
|
89
108
|
close = () => handleNativeException(callNative('close'));
|
|
90
109
|
|
|
91
|
-
transceive = (bytes) =>
|
|
110
|
+
transceive = (bytes: number[]) =>
|
|
92
111
|
handleNativeException(callNative('transceive', [bytes]));
|
|
93
112
|
|
|
94
113
|
getMaxTransceiveLength = () =>
|
|
@@ -121,7 +140,7 @@ class NfcManagerAndroid extends NfcManagerBase {
|
|
|
121
140
|
// -------------------------------------
|
|
122
141
|
get ndefFormatableHandlerAndroid() {
|
|
123
142
|
if (!this._ndefFormatableHandlerAndroid) {
|
|
124
|
-
this._ndefFormatableHandlerAndroid = new NdefFormatableHandlerAndroid(
|
|
143
|
+
this._ndefFormatableHandlerAndroid = new NdefFormatableHandlerAndroid();
|
|
125
144
|
}
|
|
126
145
|
return this._ndefFormatableHandlerAndroid;
|
|
127
146
|
}
|
|
@@ -13,16 +13,34 @@ import {
|
|
|
13
13
|
} from './NfcTech/Iso15693HandlerIOS';
|
|
14
14
|
import {handleNativeException} from './NfcError';
|
|
15
15
|
|
|
16
|
+
type RegisterTagEventOptions = Partial<typeof DEFAULT_REGISTER_TAG_EVENT_OPTIONS>;
|
|
17
|
+
type CancelTechnologyRequestOptions = {throwOnError?: boolean};
|
|
18
|
+
type BackgroundTag = {ndefMessage?: unknown[]};
|
|
19
|
+
type IsoDepApdu = {
|
|
20
|
+
cla: number;
|
|
21
|
+
ins: number;
|
|
22
|
+
p1: number;
|
|
23
|
+
p2: number;
|
|
24
|
+
data: number[];
|
|
25
|
+
le: number;
|
|
26
|
+
};
|
|
27
|
+
|
|
16
28
|
class NfcManagerIOS extends NfcManagerBase {
|
|
29
|
+
_iso15693HandlerIOS: Iso15693HandlerIOS | null;
|
|
30
|
+
|
|
17
31
|
constructor() {
|
|
18
32
|
super();
|
|
33
|
+
this._iso15693HandlerIOS = null;
|
|
19
34
|
}
|
|
20
35
|
|
|
21
36
|
isEnabled = async () => {
|
|
22
37
|
return true;
|
|
23
38
|
};
|
|
24
39
|
|
|
25
|
-
requestTechnology = async (
|
|
40
|
+
requestTechnology = async (
|
|
41
|
+
tech: string | string[],
|
|
42
|
+
options: RegisterTagEventOptions = {},
|
|
43
|
+
) => {
|
|
26
44
|
if (typeof tech === 'string') {
|
|
27
45
|
tech = [tech];
|
|
28
46
|
}
|
|
@@ -55,7 +73,7 @@ class NfcManagerIOS extends NfcManagerBase {
|
|
|
55
73
|
);
|
|
56
74
|
};
|
|
57
75
|
|
|
58
|
-
cancelTechnologyRequest = async (options = {}) => {
|
|
76
|
+
cancelTechnologyRequest = async (options: CancelTechnologyRequestOptions = {}) => {
|
|
59
77
|
const {throwOnError = false} = options;
|
|
60
78
|
return handleNativeException(
|
|
61
79
|
callNative('cancelTechnologyRequest'),
|
|
@@ -66,18 +84,21 @@ class NfcManagerIOS extends NfcManagerBase {
|
|
|
66
84
|
getBackgroundTag = () =>
|
|
67
85
|
handleNativeException(callNative('getBackgroundTag'));
|
|
68
86
|
|
|
69
|
-
clearBackgroundTag =
|
|
87
|
+
clearBackgroundTag = () =>
|
|
88
|
+
handleNativeException(callNative('clearBackgroundTag'));
|
|
70
89
|
|
|
71
90
|
// -------------------------------------
|
|
72
91
|
// public only for iOS
|
|
73
92
|
// -------------------------------------
|
|
74
|
-
getBackgroundNdef = () =>
|
|
75
|
-
|
|
93
|
+
getBackgroundNdef = async () => {
|
|
94
|
+
const tag = await this.getBackgroundTag() as BackgroundTag | null | undefined;
|
|
95
|
+
return tag?.ndefMessage ?? null;
|
|
96
|
+
};
|
|
76
97
|
|
|
77
|
-
setAlertMessage = (alertMessage) =>
|
|
98
|
+
setAlertMessage = (alertMessage: string) =>
|
|
78
99
|
handleNativeException(callNative('setAlertMessage', [alertMessage]));
|
|
79
100
|
|
|
80
|
-
setAlertMessageIOS = (alertMessage) =>
|
|
101
|
+
setAlertMessageIOS = (alertMessage: string) =>
|
|
81
102
|
handleNativeException(callNative('setAlertMessage', [alertMessage]));
|
|
82
103
|
|
|
83
104
|
invalidateSessionIOS = () =>
|
|
@@ -97,19 +118,19 @@ class NfcManagerIOS extends NfcManagerBase {
|
|
|
97
118
|
// -------------------------------------
|
|
98
119
|
// (iOS) NfcTech.MifareIOS API
|
|
99
120
|
// -------------------------------------
|
|
100
|
-
sendMifareCommandIOS = (bytes) =>
|
|
121
|
+
sendMifareCommandIOS = (bytes: number[]) =>
|
|
101
122
|
handleNativeException(callNative('sendMifareCommand', [bytes]));
|
|
102
123
|
|
|
103
124
|
// -------------------------------------
|
|
104
125
|
// (iOS) NfcTech.FelicaIOS API
|
|
105
126
|
// -------------------------------------
|
|
106
|
-
sendFelicaCommandIOS = (bytes) =>
|
|
127
|
+
sendFelicaCommandIOS = (bytes: number[]) =>
|
|
107
128
|
handleNativeException(callNative('sendFelicaCommand', [bytes]));
|
|
108
129
|
|
|
109
130
|
// -------------------------------------
|
|
110
131
|
// (iOS) NfcTech.IsoDep API
|
|
111
132
|
// -------------------------------------
|
|
112
|
-
sendCommandAPDUIOS = (bytesOrApdu) => {
|
|
133
|
+
sendCommandAPDUIOS = (bytesOrApdu: number[] | IsoDepApdu) => {
|
|
113
134
|
if (Platform.OS !== 'ios') {
|
|
114
135
|
return Promise.reject('not implemented');
|
|
115
136
|
}
|
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
import {callNative} from '../NativeNfcManager';
|
|
2
2
|
import {handleNativeException} from '../NfcError';
|
|
3
3
|
|
|
4
|
+
type Byte = number;
|
|
5
|
+
type ByteArray = Byte[];
|
|
6
|
+
|
|
7
|
+
type FlagsOnly = {flags: number};
|
|
8
|
+
type BlockOptions = {flags: number; blockNumber: number};
|
|
9
|
+
type MultiBlockOptions = {flags: number; blockNumber: number; blockCount: number};
|
|
10
|
+
type WriteBlockOptions = {flags: number; blockNumber: number; dataBlock: ByteArray};
|
|
11
|
+
type WriteAfiOptions = {flags: number; afi: number};
|
|
12
|
+
type WriteDsfidOptions = {flags: number; dsfid: number};
|
|
13
|
+
type CustomCommandOptions = {
|
|
14
|
+
flags: number;
|
|
15
|
+
customCommandCode: number;
|
|
16
|
+
customRequestParameters: ByteArray;
|
|
17
|
+
};
|
|
18
|
+
type SendRequestOptions = {flags: number; commandCode: number; data: ByteArray};
|
|
19
|
+
|
|
20
|
+
type Iso15693SystemInfo = {
|
|
21
|
+
dsfid: number;
|
|
22
|
+
afi: number;
|
|
23
|
+
blockSize: number;
|
|
24
|
+
blockCount: number;
|
|
25
|
+
icReference: number;
|
|
26
|
+
};
|
|
27
|
+
|
|
4
28
|
const Nfc15693RequestFlagIOS = {
|
|
5
29
|
DualSubCarriers: 1 << 0,
|
|
6
30
|
HighDataRate: 1 << 1,
|
|
@@ -22,117 +46,121 @@ const Nfc15693ResponseFlagIOS = {
|
|
|
22
46
|
};
|
|
23
47
|
|
|
24
48
|
class Iso15693HandlerIOS {
|
|
25
|
-
getSystemInfo(requestFlag) {
|
|
49
|
+
getSystemInfo(requestFlag: number): Promise<Iso15693SystemInfo> {
|
|
26
50
|
return handleNativeException(
|
|
27
51
|
callNative('iso15693_getSystemInfo', [requestFlag]),
|
|
28
|
-
)
|
|
52
|
+
) as Promise<Iso15693SystemInfo>;
|
|
29
53
|
}
|
|
30
54
|
|
|
31
|
-
readSingleBlock({flags, blockNumber}) {
|
|
55
|
+
readSingleBlock({flags, blockNumber}: BlockOptions): Promise<ByteArray> {
|
|
32
56
|
return handleNativeException(
|
|
33
57
|
callNative('iso15693_readSingleBlock', [{flags, blockNumber}]),
|
|
34
|
-
)
|
|
58
|
+
) as Promise<ByteArray>;
|
|
35
59
|
}
|
|
36
60
|
|
|
37
|
-
readMultipleBlocks({flags, blockNumber, blockCount}) {
|
|
61
|
+
readMultipleBlocks({flags, blockNumber, blockCount}: MultiBlockOptions): Promise<ByteArray[]> {
|
|
38
62
|
return handleNativeException(
|
|
39
63
|
callNative('iso15693_readMultipleBlocks', [
|
|
40
64
|
{flags, blockNumber, blockCount},
|
|
41
65
|
]),
|
|
42
|
-
)
|
|
66
|
+
) as Promise<ByteArray[]>;
|
|
43
67
|
}
|
|
44
68
|
|
|
45
|
-
writeSingleBlock({flags, blockNumber, dataBlock}) {
|
|
69
|
+
writeSingleBlock({flags, blockNumber, dataBlock}: WriteBlockOptions): Promise<void> {
|
|
46
70
|
return handleNativeException(
|
|
47
71
|
callNative('iso15693_writeSingleBlock', [
|
|
48
72
|
{flags, blockNumber, dataBlock},
|
|
49
73
|
]),
|
|
50
|
-
)
|
|
74
|
+
) as Promise<void>;
|
|
51
75
|
}
|
|
52
76
|
|
|
53
|
-
lockBlock({flags, blockNumber}) {
|
|
77
|
+
lockBlock({flags, blockNumber}: BlockOptions): Promise<void> {
|
|
54
78
|
return handleNativeException(
|
|
55
79
|
callNative('iso15693_lockBlock', [{flags, blockNumber}]),
|
|
56
|
-
)
|
|
80
|
+
) as Promise<void>;
|
|
57
81
|
}
|
|
58
82
|
|
|
59
|
-
writeAFI({flags, afi}) {
|
|
83
|
+
writeAFI({flags, afi}: WriteAfiOptions): Promise<void> {
|
|
60
84
|
return handleNativeException(
|
|
61
85
|
callNative('iso15693_writeAFI', [{flags, afi}]),
|
|
62
|
-
)
|
|
86
|
+
) as Promise<void>;
|
|
63
87
|
}
|
|
64
88
|
|
|
65
|
-
lockAFI({flags}) {
|
|
66
|
-
return handleNativeException(callNative('iso15693_lockAFI', [{flags}]))
|
|
89
|
+
lockAFI({flags}: FlagsOnly): Promise<void> {
|
|
90
|
+
return handleNativeException(callNative('iso15693_lockAFI', [{flags}])) as Promise<void>;
|
|
67
91
|
}
|
|
68
92
|
|
|
69
|
-
writeDSFID({flags, dsfid}) {
|
|
93
|
+
writeDSFID({flags, dsfid}: WriteDsfidOptions): Promise<void> {
|
|
70
94
|
return handleNativeException(
|
|
71
95
|
callNative('iso15693_writeDSFID', [{flags, dsfid}]),
|
|
72
|
-
)
|
|
96
|
+
) as Promise<void>;
|
|
73
97
|
}
|
|
74
98
|
|
|
75
|
-
lockDSFID({flags}) {
|
|
76
|
-
return handleNativeException(callNative('iso15693_lockDSFID', [{flags}]))
|
|
99
|
+
lockDSFID({flags}: FlagsOnly): Promise<void> {
|
|
100
|
+
return handleNativeException(callNative('iso15693_lockDSFID', [{flags}])) as Promise<void>;
|
|
77
101
|
}
|
|
78
102
|
|
|
79
|
-
resetToReady({flags}) {
|
|
103
|
+
resetToReady({flags}: FlagsOnly): Promise<void> {
|
|
80
104
|
return handleNativeException(
|
|
81
105
|
callNative('iso15693_resetToReady', [{flags}]),
|
|
82
|
-
)
|
|
106
|
+
) as Promise<void>;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
select({flags}: FlagsOnly): Promise<void> {
|
|
110
|
+
return handleNativeException(callNative('iso15693_select', [{flags}])) as Promise<void>;
|
|
83
111
|
}
|
|
84
112
|
|
|
85
|
-
|
|
86
|
-
return handleNativeException(callNative('
|
|
113
|
+
stayQuiet(): Promise<void> {
|
|
114
|
+
return handleNativeException(callNative('iso15693_stayQuiet')) as Promise<void>;
|
|
87
115
|
}
|
|
88
116
|
|
|
89
|
-
stayQuite() {
|
|
90
|
-
return
|
|
117
|
+
stayQuite(): Promise<void> {
|
|
118
|
+
return this.stayQuiet();
|
|
91
119
|
}
|
|
92
120
|
|
|
93
|
-
customCommand({flags, customCommandCode, customRequestParameters}) {
|
|
121
|
+
customCommand({flags, customCommandCode, customRequestParameters}: CustomCommandOptions): Promise<ByteArray> {
|
|
94
122
|
return handleNativeException(
|
|
95
123
|
callNative('iso15693_customCommand', [
|
|
96
124
|
{flags, customCommandCode, customRequestParameters},
|
|
97
125
|
]),
|
|
98
|
-
)
|
|
126
|
+
) as Promise<ByteArray>;
|
|
99
127
|
}
|
|
100
128
|
|
|
101
129
|
// https://developer.apple.com/documentation/corenfc/nfciso15693tag/3551933-sendrequestwithflag?language=objc
|
|
102
|
-
sendRequest({flags, commandCode, data}) {
|
|
130
|
+
sendRequest({flags, commandCode, data}: SendRequestOptions): Promise<[number, ByteArray]> {
|
|
103
131
|
return handleNativeException(
|
|
104
132
|
callNative('iso15693_sendRequest', [
|
|
105
133
|
{flags, commandCode, data},
|
|
106
134
|
]),
|
|
107
|
-
)
|
|
135
|
+
) as Promise<[number, ByteArray]>;
|
|
108
136
|
}
|
|
109
137
|
|
|
110
|
-
extendedReadSingleBlock({flags, blockNumber}) {
|
|
138
|
+
extendedReadSingleBlock({flags, blockNumber}: BlockOptions): Promise<ByteArray> {
|
|
111
139
|
return handleNativeException(
|
|
112
140
|
callNative('iso15693_extendedReadSingleBlock', [{flags, blockNumber}]),
|
|
113
|
-
)
|
|
141
|
+
) as Promise<ByteArray>;
|
|
114
142
|
}
|
|
115
143
|
|
|
116
|
-
extendedReadMultipleBlocks({flags, blockNumber, blockCount}) {
|
|
144
|
+
extendedReadMultipleBlocks({flags, blockNumber, blockCount}: MultiBlockOptions): Promise<ByteArray[]> {
|
|
117
145
|
return handleNativeException(
|
|
118
146
|
callNative('iso15693_extendedReadMultipleBlocks', [
|
|
119
147
|
{flags, blockNumber, blockCount},
|
|
120
148
|
]),
|
|
121
|
-
)
|
|
149
|
+
) as Promise<ByteArray[]>;
|
|
122
150
|
}
|
|
123
151
|
|
|
124
|
-
extendedWriteSingleBlock({flags, blockNumber, dataBlock}) {
|
|
152
|
+
extendedWriteSingleBlock({flags, blockNumber, dataBlock}: WriteBlockOptions): Promise<void> {
|
|
125
153
|
return handleNativeException(
|
|
126
154
|
callNative('iso15693_extendedWriteSingleBlock', [
|
|
127
155
|
{flags, blockNumber, dataBlock},
|
|
128
156
|
]),
|
|
129
|
-
)
|
|
157
|
+
) as Promise<void>;
|
|
130
158
|
}
|
|
131
159
|
|
|
132
|
-
extendedLockBlock({flags, blockNumber}) {
|
|
160
|
+
extendedLockBlock({flags, blockNumber}: BlockOptions): Promise<void> {
|
|
133
161
|
return handleNativeException(
|
|
134
162
|
callNative('iso15693_extendedLockBlock', [{flags, blockNumber}]),
|
|
135
|
-
)
|
|
163
|
+
) as Promise<void>;
|
|
136
164
|
}
|
|
137
165
|
}
|
|
138
166
|
|
|
@@ -2,8 +2,11 @@ import {Platform} from 'react-native';
|
|
|
2
2
|
import {callNative, NativeNfcManager} from '../NativeNfcManager';
|
|
3
3
|
import {handleNativeException} from '../NfcError';
|
|
4
4
|
|
|
5
|
+
type Byte = number;
|
|
6
|
+
type ByteArray = Byte[];
|
|
7
|
+
|
|
5
8
|
class IsoDepHandler {
|
|
6
|
-
async transceive(bytes) {
|
|
9
|
+
async transceive(bytes: ByteArray): Promise<ByteArray> {
|
|
7
10
|
if (!Array.isArray(bytes)) {
|
|
8
11
|
throw new Error(
|
|
9
12
|
'IsoDepHandler.transceive only takes input as a byte array',
|
|
@@ -12,10 +15,10 @@ class IsoDepHandler {
|
|
|
12
15
|
|
|
13
16
|
if (Platform.OS === 'ios') {
|
|
14
17
|
return handleNativeException(
|
|
15
|
-
new Promise((resolve, reject) => {
|
|
18
|
+
new Promise<ByteArray>((resolve, reject) => {
|
|
16
19
|
NativeNfcManager.sendCommandAPDUBytes(
|
|
17
20
|
bytes,
|
|
18
|
-
(err, response, sw1, sw2) => {
|
|
21
|
+
(err: string | null, response: ByteArray, sw1: number, sw2: number) => {
|
|
19
22
|
if (err) {
|
|
20
23
|
reject(err);
|
|
21
24
|
} else {
|
|
@@ -25,10 +28,10 @@ class IsoDepHandler {
|
|
|
25
28
|
},
|
|
26
29
|
);
|
|
27
30
|
}),
|
|
28
|
-
)
|
|
31
|
+
) as Promise<ByteArray>;
|
|
29
32
|
}
|
|
30
33
|
|
|
31
|
-
return handleNativeException(callNative('transceive', [bytes]))
|
|
34
|
+
return handleNativeException(callNative('transceive', [bytes])) as Promise<ByteArray>;
|
|
32
35
|
}
|
|
33
36
|
}
|
|
34
37
|
|
|
@@ -1,58 +1,67 @@
|
|
|
1
1
|
import {callNative} from '../NativeNfcManager';
|
|
2
2
|
import {handleNativeException} from '../NfcError';
|
|
3
3
|
|
|
4
|
+
type Byte = number;
|
|
5
|
+
type ByteArray = Byte[];
|
|
6
|
+
|
|
7
|
+
type AndroidMifareManager = {
|
|
8
|
+
MIFARE_BLOCK_SIZE: number;
|
|
9
|
+
};
|
|
10
|
+
|
|
4
11
|
class MifareClassicHandlerAndroid {
|
|
5
|
-
|
|
12
|
+
nfcManager: AndroidMifareManager;
|
|
13
|
+
|
|
14
|
+
constructor(nfcManager: AndroidMifareManager) {
|
|
6
15
|
this.nfcManager = nfcManager;
|
|
7
16
|
}
|
|
8
17
|
|
|
9
|
-
async mifareClassicAuthenticateA(sector, key) {
|
|
18
|
+
async mifareClassicAuthenticateA(sector: number, key: ByteArray): Promise<boolean> {
|
|
10
19
|
if (!key || !Array.isArray(key) || key.length !== 6) {
|
|
11
20
|
throw new Error('key should be an Array[6] of integers (0 - 255)');
|
|
12
21
|
}
|
|
13
22
|
|
|
14
23
|
return handleNativeException(
|
|
15
24
|
callNative('mifareClassicAuthenticateA', [sector, key]),
|
|
16
|
-
)
|
|
25
|
+
) as Promise<boolean>;
|
|
17
26
|
}
|
|
18
27
|
|
|
19
|
-
async mifareClassicAuthenticateB(sector, key) {
|
|
28
|
+
async mifareClassicAuthenticateB(sector: number, key: ByteArray): Promise<boolean> {
|
|
20
29
|
if (!key || !Array.isArray(key) || key.length !== 6) {
|
|
21
30
|
throw new Error('key should be an Array[6] of integers (0 - 255)');
|
|
22
31
|
}
|
|
23
32
|
|
|
24
33
|
return handleNativeException(
|
|
25
34
|
callNative('mifareClassicAuthenticateB', [sector, key]),
|
|
26
|
-
)
|
|
35
|
+
) as Promise<boolean>;
|
|
27
36
|
}
|
|
28
37
|
|
|
29
|
-
async mifareClassicGetBlockCountInSector(sector) {
|
|
38
|
+
async mifareClassicGetBlockCountInSector(sector: number): Promise<number> {
|
|
30
39
|
return handleNativeException(
|
|
31
40
|
callNative('mifareClassicGetBlockCountInSector', [sector]),
|
|
32
|
-
)
|
|
41
|
+
) as Promise<number>;
|
|
33
42
|
}
|
|
34
43
|
|
|
35
|
-
async mifareClassicGetSectorCount() {
|
|
36
|
-
return handleNativeException(callNative('mifareClassicGetSectorCount'))
|
|
44
|
+
async mifareClassicGetSectorCount(): Promise<number> {
|
|
45
|
+
return handleNativeException(callNative('mifareClassicGetSectorCount')) as Promise<number>;
|
|
37
46
|
}
|
|
38
47
|
|
|
39
|
-
async mifareClassicSectorToBlock(sector) {
|
|
48
|
+
async mifareClassicSectorToBlock(sector: number): Promise<number> {
|
|
40
49
|
return handleNativeException(
|
|
41
50
|
callNative('mifareClassicSectorToBlock', [sector]),
|
|
42
|
-
)
|
|
51
|
+
) as Promise<number>;
|
|
43
52
|
}
|
|
44
53
|
|
|
45
|
-
async mifareClassicReadBlock(block) {
|
|
46
|
-
return handleNativeException(callNative('mifareClassicReadBlock', [block]))
|
|
54
|
+
async mifareClassicReadBlock(block: number): Promise<ByteArray> {
|
|
55
|
+
return handleNativeException(callNative('mifareClassicReadBlock', [block])) as Promise<ByteArray>;
|
|
47
56
|
}
|
|
48
57
|
|
|
49
|
-
async mifareClassicReadSector(sector) {
|
|
58
|
+
async mifareClassicReadSector(sector: number): Promise<ByteArray> {
|
|
50
59
|
return handleNativeException(
|
|
51
60
|
callNative('mifareClassicReadSector', [sector]),
|
|
52
|
-
)
|
|
61
|
+
) as Promise<ByteArray>;
|
|
53
62
|
}
|
|
54
63
|
|
|
55
|
-
async mifareClassicWriteBlock(block, data) {
|
|
64
|
+
async mifareClassicWriteBlock(block: number, data: ByteArray): Promise<boolean> {
|
|
56
65
|
if (
|
|
57
66
|
!data ||
|
|
58
67
|
!Array.isArray(data) ||
|
|
@@ -65,10 +74,10 @@ class MifareClassicHandlerAndroid {
|
|
|
65
74
|
|
|
66
75
|
return handleNativeException(
|
|
67
76
|
callNative('mifareClassicWriteBlock', [block, data]),
|
|
68
|
-
)
|
|
77
|
+
) as Promise<boolean>;
|
|
69
78
|
}
|
|
70
79
|
|
|
71
|
-
async mifareClassicIncrementBlock(block, value) {
|
|
80
|
+
async mifareClassicIncrementBlock(block: number, value: number): Promise<boolean> {
|
|
72
81
|
if (
|
|
73
82
|
!value ||
|
|
74
83
|
Number.isNaN(value)) {
|
|
@@ -79,10 +88,10 @@ class MifareClassicHandlerAndroid {
|
|
|
79
88
|
|
|
80
89
|
return handleNativeException(
|
|
81
90
|
callNative('mifareClassicIncrementBlock', [block, value]),
|
|
82
|
-
)
|
|
91
|
+
) as Promise<boolean>;
|
|
83
92
|
}
|
|
84
93
|
|
|
85
|
-
async mifareClassicDecrementBlock(block, value) {
|
|
94
|
+
async mifareClassicDecrementBlock(block: number, value: number): Promise<boolean> {
|
|
86
95
|
if (
|
|
87
96
|
!value ||
|
|
88
97
|
Number.isNaN(value)) {
|
|
@@ -93,9 +102,10 @@ class MifareClassicHandlerAndroid {
|
|
|
93
102
|
|
|
94
103
|
return handleNativeException(
|
|
95
104
|
callNative('mifareClassicDecrementBlock', [block, value]),
|
|
96
|
-
)
|
|
105
|
+
) as Promise<boolean>;
|
|
97
106
|
}
|
|
98
|
-
|
|
107
|
+
|
|
108
|
+
async mifareClassicTransferBlock(block: number): Promise<boolean> {
|
|
99
109
|
if (
|
|
100
110
|
!block ||
|
|
101
111
|
Number.isNaN(block)) {
|
|
@@ -106,9 +116,8 @@ class MifareClassicHandlerAndroid {
|
|
|
106
116
|
|
|
107
117
|
return handleNativeException(
|
|
108
118
|
callNative('mifareClassicTransferBlock', [block]),
|
|
109
|
-
)
|
|
119
|
+
) as Promise<boolean>;
|
|
110
120
|
}
|
|
111
|
-
|
|
112
121
|
}
|
|
113
122
|
|
|
114
123
|
export {MifareClassicHandlerAndroid};
|
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
import {callNative} from '../NativeNfcManager';
|
|
2
2
|
import {handleNativeException} from '../NfcError';
|
|
3
3
|
|
|
4
|
+
type Byte = number;
|
|
5
|
+
type ByteArray = Byte[];
|
|
6
|
+
|
|
7
|
+
type AndroidMifareUltralightManager = {
|
|
8
|
+
MIFARE_ULTRALIGHT_PAGE_SIZE: number;
|
|
9
|
+
};
|
|
10
|
+
|
|
4
11
|
class MifareUltralightHandlerAndroid {
|
|
5
|
-
|
|
12
|
+
nfcManager: AndroidMifareUltralightManager;
|
|
13
|
+
|
|
14
|
+
constructor(nfcManager: AndroidMifareUltralightManager) {
|
|
6
15
|
this.nfcManager = nfcManager;
|
|
7
16
|
}
|
|
8
17
|
|
|
9
|
-
async mifareUltralightReadPages(pageOffset) {
|
|
18
|
+
async mifareUltralightReadPages(pageOffset: number): Promise<ByteArray> {
|
|
10
19
|
return handleNativeException(
|
|
11
20
|
callNative('mifareUltralightReadPages', [pageOffset]),
|
|
12
|
-
)
|
|
21
|
+
) as Promise<ByteArray>;
|
|
13
22
|
}
|
|
14
23
|
|
|
15
|
-
async mifareUltralightWritePage(pageOffset, data) {
|
|
24
|
+
async mifareUltralightWritePage(pageOffset: number, data: ByteArray): Promise<void> {
|
|
16
25
|
if (
|
|
17
26
|
!data ||
|
|
18
27
|
!Array.isArray(data) ||
|
|
@@ -25,7 +34,7 @@ class MifareUltralightHandlerAndroid {
|
|
|
25
34
|
|
|
26
35
|
return handleNativeException(
|
|
27
36
|
callNative('mifareUltralightWritePage', [pageOffset, data]),
|
|
28
|
-
)
|
|
37
|
+
) as Promise<void>;
|
|
29
38
|
}
|
|
30
39
|
}
|
|
31
40
|
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import {callNative} from '../NativeNfcManager';
|
|
2
2
|
import {handleNativeException} from '../NfcError';
|
|
3
3
|
|
|
4
|
+
type Byte = number;
|
|
5
|
+
type ByteArray = Byte[];
|
|
6
|
+
|
|
7
|
+
type NdefFormatOptions = {
|
|
8
|
+
readOnly?: boolean;
|
|
9
|
+
};
|
|
10
|
+
|
|
4
11
|
class NdefFormatableHandlerAndroid {
|
|
5
|
-
async formatNdef(bytes, options={}) {
|
|
12
|
+
async formatNdef(bytes: ByteArray, options: NdefFormatOptions = {}): Promise<void> {
|
|
6
13
|
const defaultOptions = { readOnly: false };
|
|
7
14
|
return handleNativeException(
|
|
8
15
|
callNative('formatNdef', [
|
|
9
16
|
bytes,
|
|
10
17
|
{...defaultOptions, ...options}
|
|
11
18
|
])
|
|
12
|
-
)
|
|
19
|
+
) as Promise<void>;
|
|
13
20
|
}
|
|
14
21
|
}
|
|
15
22
|
|
|
@@ -2,6 +2,18 @@ import {Platform} from 'react-native';
|
|
|
2
2
|
import {callNative} from '../NativeNfcManager';
|
|
3
3
|
import {handleNativeException} from '../NfcError';
|
|
4
4
|
|
|
5
|
+
type Byte = number;
|
|
6
|
+
type ByteArray = Byte[];
|
|
7
|
+
|
|
8
|
+
type WriteNdefOptions = {
|
|
9
|
+
reconnectAfterWrite?: boolean;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
type NdefStatusResult = {
|
|
13
|
+
status: number;
|
|
14
|
+
capacity: number;
|
|
15
|
+
};
|
|
16
|
+
|
|
5
17
|
const NdefStatus = {
|
|
6
18
|
NotSupported: 1,
|
|
7
19
|
ReadWrite: 2,
|
|
@@ -9,8 +21,7 @@ const NdefStatus = {
|
|
|
9
21
|
};
|
|
10
22
|
|
|
11
23
|
class NdefHandler {
|
|
12
|
-
async writeNdefMessage(bytes, options) {
|
|
13
|
-
|
|
24
|
+
async writeNdefMessage(bytes: ByteArray, options?: WriteNdefOptions) {
|
|
14
25
|
const defaultOptions = { reconnectAfterWrite: false };
|
|
15
26
|
return handleNativeException(
|
|
16
27
|
callNative('writeNdefMessage', [
|
|
@@ -18,7 +29,6 @@ class NdefHandler {
|
|
|
18
29
|
{...defaultOptions, ...options}
|
|
19
30
|
])
|
|
20
31
|
);
|
|
21
|
-
|
|
22
32
|
}
|
|
23
33
|
|
|
24
34
|
async getNdefMessage() {
|
|
@@ -29,12 +39,15 @@ class NdefHandler {
|
|
|
29
39
|
return handleNativeException(callNative('makeReadOnly'));
|
|
30
40
|
}
|
|
31
41
|
|
|
32
|
-
async getNdefStatus() {
|
|
42
|
+
async getNdefStatus(): Promise<NdefStatusResult> {
|
|
33
43
|
if (Platform.OS === 'ios') {
|
|
34
|
-
return handleNativeException(callNative('queryNdefStatus'))
|
|
44
|
+
return handleNativeException(callNative('queryNdefStatus')) as Promise<NdefStatusResult>;
|
|
35
45
|
} else {
|
|
36
46
|
try {
|
|
37
|
-
const result = await handleNativeException(callNative('queryNdefStatus'))
|
|
47
|
+
const result = await handleNativeException(callNative('queryNdefStatus')) as {
|
|
48
|
+
isWritable: boolean;
|
|
49
|
+
maxSize: number;
|
|
50
|
+
};
|
|
38
51
|
return {
|
|
39
52
|
status: result.isWritable
|
|
40
53
|
? NdefStatus.ReadWrite
|
|
@@ -2,12 +2,15 @@ import {Platform} from 'react-native';
|
|
|
2
2
|
import {callNative} from '../NativeNfcManager';
|
|
3
3
|
import {handleNativeException} from '../NfcError';
|
|
4
4
|
|
|
5
|
+
type Byte = number;
|
|
6
|
+
type ByteArray = Byte[];
|
|
7
|
+
|
|
5
8
|
class NfcAHandler {
|
|
6
|
-
async transceive(bytes) {
|
|
9
|
+
async transceive(bytes: ByteArray): Promise<ByteArray> {
|
|
7
10
|
if (Platform.OS === 'ios') {
|
|
8
|
-
return handleNativeException(callNative('sendMifareCommand', [bytes]))
|
|
11
|
+
return handleNativeException(callNative('sendMifareCommand', [bytes])) as Promise<ByteArray>;
|
|
9
12
|
}
|
|
10
|
-
return handleNativeException(callNative('transceive', [bytes]))
|
|
13
|
+
return handleNativeException(callNative('transceive', [bytes])) as Promise<ByteArray>;
|
|
11
14
|
}
|
|
12
15
|
}
|
|
13
16
|
|