react-native-nfc-manager 4.0.0-beta.1 → 4.0.0-beta.11

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.
Files changed (109) hide show
  1. package/README.md +146 -49
  2. package/android/src/main/java/community/revteltech/nfc/MifareClassicHandler.java +419 -0
  3. package/android/src/main/java/community/revteltech/nfc/MifareUltralightHandler.java +84 -0
  4. package/android/src/main/java/community/revteltech/nfc/NdefHandler.java +397 -0
  5. package/android/src/main/java/community/revteltech/nfc/NfcAdapterStateChangedReceiver.java +48 -0
  6. package/android/src/main/java/community/revteltech/nfc/NfcErrorCodes.java +16 -0
  7. package/android/src/main/java/community/revteltech/nfc/NfcManager.java +348 -1087
  8. package/android/src/main/java/community/revteltech/nfc/NfcManagerIOSStubBase.java +130 -0
  9. package/android/src/main/java/community/revteltech/nfc/NfcTechIoRouter.java +258 -0
  10. package/android/src/main/java/community/revteltech/nfc/TagTechnologyRequest.java +19 -7
  11. package/android/src/main/java/community/revteltech/nfc/Util.java +275 -2
  12. package/app.plugin.js +8 -9
  13. package/dist/ndef-lib/constants.js +67 -0
  14. package/dist/ndef-lib/constants.js.map +1 -0
  15. package/dist/ndef-lib/index.js +79 -0
  16. package/dist/ndef-lib/index.js.map +1 -0
  17. package/dist/ndef-lib/ndef-text.js +29 -0
  18. package/dist/ndef-lib/ndef-text.js.map +1 -0
  19. package/dist/ndef-lib/ndef-uri.js +40 -0
  20. package/dist/ndef-lib/ndef-uri.js.map +1 -0
  21. package/dist/ndef-lib/ndef-wifi-simple.js +100 -0
  22. package/dist/ndef-lib/ndef-wifi-simple.js.map +1 -0
  23. package/dist/ndef-lib/ndef.js +152 -0
  24. package/dist/ndef-lib/ndef.js.map +1 -0
  25. package/dist/ndef-lib/stringifier.js +155 -0
  26. package/dist/ndef-lib/stringifier.js.map +1 -0
  27. package/dist/ndef-lib/util.js +134 -0
  28. package/dist/ndef-lib/util.js.map +1 -0
  29. package/dist/specs/NativeNfcManager.js +5 -0
  30. package/dist/specs/NativeNfcManager.js.map +1 -0
  31. package/dist/src/NativeNfcManager.js +55 -0
  32. package/dist/src/NativeNfcManager.js.map +1 -0
  33. package/dist/src/NfcError.js +220 -0
  34. package/dist/src/NfcError.js.map +1 -0
  35. package/dist/src/NfcManager.js +175 -0
  36. package/dist/src/NfcManager.js.map +1 -0
  37. package/dist/src/NfcManagerAndroid.js +112 -0
  38. package/dist/src/NfcManagerAndroid.js.map +1 -0
  39. package/dist/src/NfcManagerIOS.js +119 -0
  40. package/dist/src/NfcManagerIOS.js.map +1 -0
  41. package/dist/src/NfcTech/Iso15693HandlerIOS.js +99 -0
  42. package/dist/src/NfcTech/Iso15693HandlerIOS.js.map +1 -0
  43. package/dist/src/NfcTech/IsoDepHandler.js +29 -0
  44. package/dist/src/NfcTech/IsoDepHandler.js.map +1 -0
  45. package/dist/src/NfcTech/MifareClassicHandlerAndroid.js +68 -0
  46. package/dist/src/NfcTech/MifareClassicHandlerAndroid.js.map +1 -0
  47. package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js +23 -0
  48. package/dist/src/NfcTech/MifareUltralightHandlerAndroid.js.map +1 -0
  49. package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js +16 -0
  50. package/dist/src/NfcTech/NdefFormatableHandlerAndroid.js.map +1 -0
  51. package/dist/src/NfcTech/NdefHandler.js +54 -0
  52. package/dist/src/NfcTech/NdefHandler.js.map +1 -0
  53. package/dist/src/NfcTech/NfcAHandler.js +16 -0
  54. package/dist/src/NfcTech/NfcAHandler.js.map +1 -0
  55. package/dist/src/NfcTech/NfcVHandler.js +33 -0
  56. package/dist/src/NfcTech/NfcVHandler.js.map +1 -0
  57. package/dist/src/index.js +53 -0
  58. package/dist/src/index.js.map +1 -0
  59. package/index.d.ts +110 -46
  60. package/ios/NfcManager.h +2 -11
  61. package/ios/NfcManager.mm +264 -438
  62. package/ios/RNNfcBridgeUtil.h +28 -0
  63. package/ios/RNNfcBridgeUtil.mm +52 -0
  64. package/ios/RNNfcManager+Felica.swift +61 -0
  65. package/ios/RNNfcManager+Iso15693.swift +895 -0
  66. package/ios/RNNfcManager+IsoDep.swift +145 -0
  67. package/ios/RNNfcManager+Mifare.swift +61 -0
  68. package/ios/RNNfcManager+Ndef.swift +120 -0
  69. package/ios/RNNfcManager.h +251 -0
  70. package/ios/RNNfcManager.swift +648 -0
  71. package/ios/RNNfcSessionDelegateProxy.swift +104 -0
  72. package/ios/RNNfcSwiftUtil.swift +34 -0
  73. package/ndef-lib/{constants.js → constants.ts} +2 -0
  74. package/ndef-lib/{index.js → index.ts} +23 -12
  75. package/ndef-lib/{ndef-text.js → ndef-text.ts} +7 -2
  76. package/ndef-lib/{ndef-uri.js → ndef-uri.ts} +8 -3
  77. package/ndef-lib/{ndef-wifi-simple.js → ndef-wifi-simple.ts} +34 -11
  78. package/ndef-lib/{ndef.js → ndef.ts} +53 -25
  79. package/ndef-lib/{stringifier.js → stringifier.ts} +27 -10
  80. package/ndef-lib/{util.js → util.ts} +23 -9
  81. package/package.json +39 -21
  82. package/react-native-nfc-manager.podspec +3 -2
  83. package/specs/NativeNfcManager.ts +18 -4
  84. package/src/NativeNfcManager.ts +84 -0
  85. package/src/{NfcError.js → NfcError.ts} +6 -17
  86. package/src/{NfcManager.js → NfcManager.ts} +51 -34
  87. package/src/{NfcManagerAndroid.js → NfcManagerAndroid.ts} +27 -8
  88. package/src/{NfcManagerIOS.js → NfcManagerIOS.ts} +31 -10
  89. package/src/NfcTech/{Iso15693HandlerIOS.js → Iso15693HandlerIOS.ts} +64 -36
  90. package/src/NfcTech/{IsoDepHandler.js → IsoDepHandler.ts} +8 -5
  91. package/src/NfcTech/{MifareClassicHandlerAndroid.js → MifareClassicHandlerAndroid.ts} +33 -24
  92. package/src/NfcTech/{MifareUltralightHandlerAndroid.js → MifareUltralightHandlerAndroid.ts} +14 -5
  93. package/src/NfcTech/{NdefFormatableHandlerAndroid.js → NdefFormatableHandlerAndroid.ts} +9 -2
  94. package/src/NfcTech/{NdefHandler.js → NdefHandler.ts} +19 -6
  95. package/src/NfcTech/{NfcAHandler.js → NfcAHandler.ts} +6 -3
  96. package/src/NfcTech/{NfcVHandler.js → NfcVHandler.ts} +8 -5
  97. package/src/__mocks__/{NativeNfcManager.js → NativeNfcManager.ts} +4 -1
  98. package/src/{index.js → index.ts} +1 -1
  99. package/android/src/main/java/community/revteltech/nfc/JsonConvert.java +0 -141
  100. package/android/src/main/java/community/revteltech/nfc/MifareUtil.java +0 -84
  101. package/ios/NfcManager+Felica.mm +0 -43
  102. package/ios/NfcManager+Iso15693.mm +0 -600
  103. package/ios/NfcManager+IsoDep.mm +0 -83
  104. package/ios/NfcManager+Mifare.mm +0 -43
  105. package/ios/Util.mm +0 -55
  106. package/specs/NativeNfcManager.d.ts +0 -6
  107. package/specs/NativeNfcManager.js +0 -3
  108. package/specs/NativeNfcManager.js.map +0 -1
  109. 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 (tech, options = {}) => {
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 = (bytes) => {
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
- connect = (techs) => handleNativeException(callNative('connect', [techs]));
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(this);
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 (tech, options = {}) => {
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 = async () => callNative('clearBackgroundTag');
87
+ clearBackgroundTag = () =>
88
+ handleNativeException(callNative('clearBackgroundTag'));
70
89
 
71
90
  // -------------------------------------
72
91
  // public only for iOS
73
92
  // -------------------------------------
74
- getBackgroundNdef = () =>
75
- handleNativeException(callNative('getBackgroundNdef'));
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
- select({flags}) {
86
- return handleNativeException(callNative('iso15693_select', [{flags}]));
113
+ stayQuiet(): Promise<void> {
114
+ return handleNativeException(callNative('iso15693_stayQuiet')) as Promise<void>;
87
115
  }
88
116
 
89
- stayQuite() {
90
- return handleNativeException(callNative('iso15693_stayQuiet'));
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
- constructor(nfcManager) {
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
- async mifareClassicTransferBlock(block) {
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
- constructor(nfcManager) {
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