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
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var util = require('./util');
4
+ const CREDENTIAL_FIELD_ID = [0x10, 0x0e];
5
+ const SSID_FIELD_ID = [0x10, 0x45];
6
+ const AUTH_TYPE_FIELD_ID = [0x10, 0x03];
7
+ const NETWORK_KEY_FIELD_ID = [0x10, 0x27];
8
+ const AUTH_TYPES = {
9
+ OPEN: [0x00, 0x00],
10
+ WPA2_PSK: [0x00, 0x20],
11
+ };
12
+ function _getLengthBytes(valueBytes) {
13
+ if (valueBytes.length > 255) {
14
+ return [Math.floor(valueBytes.length / 256), valueBytes.length % 256];
15
+ }
16
+ return [0x0, valueBytes.length];
17
+ }
18
+ function _arrayEqual(arr1, arr2) {
19
+ if (arr1.length !== arr2.length) {
20
+ return false;
21
+ }
22
+ for (let i = 0; i < arr1.length; i++) {
23
+ if (arr1[i] !== arr2[i]) {
24
+ return false;
25
+ }
26
+ }
27
+ return true;
28
+ }
29
+ function _getNextTLV(bytes) {
30
+ const type = bytes.slice(0, 2);
31
+ const length = bytes.slice(2, 4);
32
+ const value = bytes.slice(4, 4 + (length[0] * 256 + length[1]));
33
+ return {
34
+ type,
35
+ length,
36
+ value,
37
+ };
38
+ }
39
+ // @returns an string of wifi credentials
40
+ function decode(bytes) {
41
+ let result = {};
42
+ while (bytes.length > 0) {
43
+ let { type, value } = _getNextTLV(bytes);
44
+ bytes = bytes.slice(4 + value.length, bytes.length);
45
+ if (_arrayEqual(CREDENTIAL_FIELD_ID, type)) {
46
+ let credential = value;
47
+ while (credential.length > 0) {
48
+ let tlv = _getNextTLV(credential);
49
+ credential = credential.slice(4 + tlv.value.length, credential.length);
50
+ if (_arrayEqual(AUTH_TYPE_FIELD_ID, tlv.type)) {
51
+ result.authType = tlv.value;
52
+ }
53
+ else if (_arrayEqual(SSID_FIELD_ID, tlv.type)) {
54
+ result.ssid = util.bytesToString(tlv.value);
55
+ }
56
+ else if (_arrayEqual(NETWORK_KEY_FIELD_ID, tlv.type)) {
57
+ result.networkKey = util.bytesToString(tlv.value);
58
+ }
59
+ }
60
+ }
61
+ }
62
+ return result;
63
+ }
64
+ // encode wifi object payload
65
+ // @returns an array of bytes
66
+ function encode({ ssid, networkKey, authType = AUTH_TYPES.WPA2_PSK }) {
67
+ if (typeof ssid !== 'string' || typeof networkKey !== 'string') {
68
+ throw new Error('');
69
+ }
70
+ const ssidBytes = util.stringToBytes(ssid);
71
+ const networkKeyBytes = util.stringToBytes(networkKey);
72
+ // build seperated TLV
73
+ const authTypeTLV = [
74
+ ...AUTH_TYPE_FIELD_ID,
75
+ 0x0,
76
+ authType.length,
77
+ ...authType,
78
+ ];
79
+ const ssidTLV = [...SSID_FIELD_ID, 0x0, ssidBytes.length, ...ssidBytes];
80
+ const networkKeyTLV = [
81
+ ...NETWORK_KEY_FIELD_ID,
82
+ 0x0,
83
+ networkKeyBytes.length,
84
+ ...networkKeyBytes,
85
+ ];
86
+ // build credential TLV
87
+ const credentialValue = [...authTypeTLV, ...ssidTLV, ...networkKeyTLV];
88
+ const credentialTLV = [
89
+ ...CREDENTIAL_FIELD_ID,
90
+ ..._getLengthBytes(credentialValue),
91
+ ...credentialValue,
92
+ ];
93
+ return credentialTLV;
94
+ }
95
+ module.exports = {
96
+ encodePayload: encode,
97
+ decodePayload: decode,
98
+ authTypes: AUTH_TYPES,
99
+ };
100
+ //# sourceMappingURL=ndef-wifi-simple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ndef-wifi-simple.js","sourceRoot":"","sources":["../../ndef-lib/ndef-wifi-simple.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const util = require('./util');
4
+ function createNdefRecord(tnf, type, id, payload) {
5
+ if (tnf === undefined ||
6
+ type === undefined ||
7
+ id === undefined ||
8
+ payload === undefined) {
9
+ throw new Error('missing required param');
10
+ }
11
+ // store type as String so it's easier to compare
12
+ if (type instanceof Array) {
13
+ type = util.bytesToString(type);
14
+ }
15
+ // in the future, id could be a String
16
+ if (!(id instanceof Array)) {
17
+ id = util.stringToBytes(id);
18
+ }
19
+ // Payload must be binary
20
+ if (!(payload instanceof Array)) {
21
+ payload = util.stringToBytes(payload);
22
+ }
23
+ const idBytes = id;
24
+ const payloadBytes = payload;
25
+ return {
26
+ tnf,
27
+ type,
28
+ id: idBytes,
29
+ payload: payloadBytes,
30
+ };
31
+ }
32
+ function encodeNdefMessage(ndefRecords) {
33
+ const encodeTnf = ({ mb, me, cf, sr, il, tnf }) => {
34
+ let value = tnf;
35
+ if (mb) {
36
+ value = value | 0x80;
37
+ }
38
+ if (me) {
39
+ value = value | 0x40;
40
+ }
41
+ // note if cf: me, mb, li must be false and tnf must be 0x6
42
+ if (cf) {
43
+ value = value | 0x20;
44
+ }
45
+ if (sr) {
46
+ value = value | 0x10;
47
+ }
48
+ if (il) {
49
+ value = value | 0x8;
50
+ }
51
+ return value;
52
+ };
53
+ let encoded = [], tnf_byte, record_type, payload_length, id_length, i, mb, me, // messageBegin, messageEnd
54
+ cf = false, // chunkFlag TODO implement
55
+ sr, // boolean shortRecord
56
+ il; // boolean idLengthFieldIsPresent
57
+ for (i = 0; i < ndefRecords.length; i++) {
58
+ mb = i === 0;
59
+ me = i === ndefRecords.length - 1;
60
+ sr = ndefRecords[i].payload.length < 0xff;
61
+ il = ndefRecords[i].id.length > 0;
62
+ tnf_byte = encodeTnf({ mb, me, cf, sr, il, tnf: ndefRecords[i].tnf });
63
+ encoded.push(tnf_byte);
64
+ // type is stored as String, converting to bytes for storage
65
+ record_type = util.stringToBytes(ndefRecords[i].type);
66
+ encoded.push(record_type.length);
67
+ if (sr) {
68
+ payload_length = ndefRecords[i].payload.length;
69
+ encoded.push(payload_length);
70
+ }
71
+ else {
72
+ payload_length = ndefRecords[i].payload.length;
73
+ // 4 bytes
74
+ encoded.push(payload_length >> 24);
75
+ encoded.push(payload_length >> 16);
76
+ encoded.push(payload_length >> 8);
77
+ encoded.push(payload_length & 0xff);
78
+ }
79
+ if (il) {
80
+ id_length = ndefRecords[i].id.length;
81
+ encoded.push(id_length);
82
+ }
83
+ encoded = encoded.concat(record_type);
84
+ if (il) {
85
+ encoded = encoded.concat(ndefRecords[i].id);
86
+ }
87
+ encoded = encoded.concat(ndefRecords[i].payload);
88
+ }
89
+ return encoded;
90
+ }
91
+ function decodeNdefMessage(ndefBytes) {
92
+ const decodeTnf = (tnf_byte) => ({
93
+ mb: (tnf_byte & 0x80) !== 0,
94
+ me: (tnf_byte & 0x40) !== 0,
95
+ cf: (tnf_byte & 0x20) !== 0,
96
+ sr: (tnf_byte & 0x10) !== 0,
97
+ il: (tnf_byte & 0x8) !== 0,
98
+ tnf: tnf_byte & 0x7,
99
+ });
100
+ // Buffer extends Uint8Array; copy only the supplied view before parsing.
101
+ let bytes;
102
+ if (Array.isArray(ndefBytes) || ndefBytes instanceof Uint8Array) {
103
+ bytes = Array.from(ndefBytes);
104
+ }
105
+ else {
106
+ throw new Error('ndef.decodeMessage requires a Buffer, Uint8Array, or an Array of bytes');
107
+ }
108
+ let ndef_message = [], tnf_byte, header, type_length = 0, payload_length = 0, id_length = 0, record_type = [], id = [], payload = [];
109
+ while (bytes.length) {
110
+ tnf_byte = bytes.shift();
111
+ header = decodeTnf(tnf_byte);
112
+ type_length = bytes.shift();
113
+ if (header.sr) {
114
+ payload_length = bytes.shift();
115
+ }
116
+ else {
117
+ // next 4 bytes are length
118
+ payload_length =
119
+ ((0xff & bytes.shift()) << 24) |
120
+ ((0xff & bytes.shift()) << 16) |
121
+ ((0xff & bytes.shift()) << 8) |
122
+ (0xff & bytes.shift());
123
+ }
124
+ id_length = header.il ? bytes.shift() : 0;
125
+ record_type = bytes.splice(0, type_length);
126
+ id = bytes.splice(0, id_length);
127
+ payload = bytes.splice(0, payload_length);
128
+ ndef_message.push(createNdefRecord(header.tnf, record_type, id, payload));
129
+ if (header.me) {
130
+ break;
131
+ } // last message
132
+ }
133
+ return ndef_message;
134
+ }
135
+ function equalToRecordType(record, tnf, type) {
136
+ if (record.tnf === tnf) {
137
+ if (Array.isArray(record.type)) {
138
+ return util.bytesToString(record.type) === type;
139
+ }
140
+ else {
141
+ return record.type === type;
142
+ }
143
+ }
144
+ return record.tnf === tnf && record.type === type;
145
+ }
146
+ module.exports = {
147
+ createNdefRecord,
148
+ encodeNdefMessage,
149
+ decodeNdefMessage,
150
+ equalToRecordType,
151
+ };
152
+ //# sourceMappingURL=ndef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ndef.js","sourceRoot":"","sources":["../../ndef-lib/ndef.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ndef = require('./ndef');
4
+ const constants = require('./constants');
5
+ // Convert NDEF records and messages to strings
6
+ // This works OK for demos, but real code proably needs
7
+ // a custom implementation. It would be nice to make
8
+ // smarter record objects that can print themselves
9
+ let stringifier = {
10
+ stringify: function (data, separator) {
11
+ if (Array.isArray(data)) {
12
+ const records = typeof data[0] === 'number'
13
+ ? ndef.decodeMessage(data)
14
+ : data;
15
+ if (typeof data[0] === 'number') {
16
+ // guessing this message bytes
17
+ data = records;
18
+ }
19
+ return stringifier.printRecords(records, separator);
20
+ }
21
+ else {
22
+ return stringifier.printRecord(data, separator);
23
+ }
24
+ },
25
+ // @message - NDEF Message (array of NDEF Records)
26
+ // @separator - line separator, optional, defaults to \n
27
+ // @returns string with NDEF Message
28
+ printRecords: function (message, separator) {
29
+ if (!separator) {
30
+ separator = '\n';
31
+ }
32
+ let result = '';
33
+ // Print out the payload for each record
34
+ message.forEach(function (record) {
35
+ result += stringifier.printRecord(record, separator);
36
+ result += separator;
37
+ });
38
+ return result.slice(0, -1 * separator.length);
39
+ },
40
+ // @record - NDEF Record
41
+ // @separator - line separator, optional, defaults to \n
42
+ // @returns string with NDEF Record
43
+ printRecord: function (record, separator) {
44
+ let result = '';
45
+ if (!separator) {
46
+ separator = '\n';
47
+ }
48
+ switch (record.tnf) {
49
+ case constants.TNF_EMPTY:
50
+ result += 'Empty Record';
51
+ result += separator;
52
+ break;
53
+ case constants.TNF_WELL_KNOWN:
54
+ result += stringifier.printWellKnown(record, separator);
55
+ break;
56
+ case constants.TNF_MIME_MEDIA:
57
+ result += 'MIME Media';
58
+ result += separator;
59
+ result += s(record.type);
60
+ result += separator;
61
+ result += s(record.payload); // might be binary
62
+ break;
63
+ case constants.TNF_ABSOLUTE_URI:
64
+ result += 'Absolute URI';
65
+ result += separator;
66
+ result += s(record.type);
67
+ result += separator;
68
+ result += s(record.payload); // might be binary
69
+ break;
70
+ case constants.TNF_EXTERNAL_TYPE:
71
+ // AAR contains strings, other types could
72
+ // contain binary data
73
+ result += 'External';
74
+ result += separator;
75
+ result += s(record.type);
76
+ result += separator;
77
+ result += s(record.payload);
78
+ break;
79
+ default:
80
+ result += s("Can't process TNF " + record.tnf);
81
+ }
82
+ result += separator;
83
+ return result;
84
+ },
85
+ printWellKnown: function (record, separator) {
86
+ let result = '';
87
+ if (record.tnf !== constants.TNF_WELL_KNOWN) {
88
+ return 'ERROR expecting TNF Well Known';
89
+ }
90
+ switch (record.type) {
91
+ case constants.RTD_TEXT:
92
+ result += 'Text Record';
93
+ result += separator;
94
+ result += ndef.text.decodePayload(record.payload);
95
+ break;
96
+ case constants.RTD_URI:
97
+ result += 'URI Record';
98
+ result += separator;
99
+ result += ndef.uri.decodePayload(record.payload);
100
+ break;
101
+ case constants.RTD_SMART_POSTER:
102
+ result += 'Smart Poster';
103
+ result += separator;
104
+ // the payload of a smartposter is a NDEF message
105
+ result += stringifier.printRecords(ndef.decodeMessage(record.payload));
106
+ break;
107
+ default:
108
+ // attempt to display other types
109
+ result += record.type + ' Record';
110
+ result += separator;
111
+ result += s(record.payload);
112
+ }
113
+ return result;
114
+ },
115
+ tnfToString: function (tnf) {
116
+ let value = tnf;
117
+ switch (tnf) {
118
+ case constants.TNF_EMPTY:
119
+ value = 'Empty';
120
+ break;
121
+ case constants.TNF_WELL_KNOWN:
122
+ value = 'Well Known';
123
+ break;
124
+ case constants.TNF_MIME_MEDIA:
125
+ value = 'Mime Media';
126
+ break;
127
+ case constants.TNF_ABSOLUTE_URI:
128
+ value = 'Absolute URI';
129
+ break;
130
+ case constants.TNF_EXTERNAL_TYPE:
131
+ value = 'External';
132
+ break;
133
+ case constants.TNF_UNKNOWN:
134
+ value = 'Unknown';
135
+ break;
136
+ case constants.TNF_UNCHANGED:
137
+ value = 'Unchanged';
138
+ break;
139
+ case constants.TNF_RESERVED:
140
+ value = 'Reserved';
141
+ break;
142
+ }
143
+ return value;
144
+ },
145
+ };
146
+ function s(bytes) {
147
+ if (typeof bytes === 'string') {
148
+ return bytes;
149
+ }
150
+ return bytes.reduce(function (acc, byte) {
151
+ return acc + String.fromCharCode(byte);
152
+ }, '');
153
+ }
154
+ module.exports = stringifier;
155
+ //# sourceMappingURL=stringifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringifier.js","sourceRoot":"","sources":["../../ndef-lib/stringifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ // ndef-util.js
3
+ // Copyright 2013 Don Coleman
4
+ //
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ // https://weblog.rogueamoeba.com/2017/02/27/javascript-correctly-converting-a-byte-array-to-a-utf-8-string/
7
+ function _utf8ArrayToStr(data) {
8
+ const extraByteMap = [1, 1, 1, 1, 2, 2, 3, 0];
9
+ var count = data.length;
10
+ var str = '';
11
+ for (var index = 0; index < count;) {
12
+ var ch = data[index++];
13
+ if (ch & 0x80) {
14
+ var extra = extraByteMap[(ch >> 3) & 0x07];
15
+ if (!(ch & 0x40) || !extra || index + extra > count) {
16
+ return null;
17
+ }
18
+ ch = ch & (0x3f >> extra);
19
+ for (; extra > 0; extra -= 1) {
20
+ var chx = data[index++];
21
+ if ((chx & 0xc0) !== 0x80) {
22
+ return null;
23
+ }
24
+ ch = (ch << 6) | (chx & 0x3f);
25
+ }
26
+ // A four-byte sequence can decode above the Unicode maximum, which is
27
+ // not a valid code point. Reject it like the other malformed cases
28
+ // rather than letting String.fromCodePoint throw a RangeError.
29
+ if (ch > 0x10ffff) {
30
+ return null;
31
+ }
32
+ }
33
+ // fromCharCode truncates to 16 bits, which silently corrupts anything
34
+ // outside the BMP: U+1F4A9 would come back as U+F4A9.
35
+ str += String.fromCodePoint(ch);
36
+ }
37
+ return str;
38
+ }
39
+ // https://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array
40
+ function _toUTF8Array(str) {
41
+ var out = [], p = 0;
42
+ for (var i = 0; i < str.length; i++) {
43
+ var c = str.charCodeAt(i);
44
+ if (c < 128) {
45
+ out[p++] = c;
46
+ }
47
+ else if (c < 2048) {
48
+ out[p++] = (c >> 6) | 192;
49
+ out[p++] = (c & 63) | 128;
50
+ }
51
+ else if ((c & 0xfc00) === 0xd800 &&
52
+ i + 1 < str.length &&
53
+ (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {
54
+ // Surrogate Pair
55
+ c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);
56
+ out[p++] = (c >> 18) | 240;
57
+ out[p++] = ((c >> 12) & 63) | 128;
58
+ out[p++] = ((c >> 6) & 63) | 128;
59
+ out[p++] = (c & 63) | 128;
60
+ }
61
+ else {
62
+ out[p++] = (c >> 12) | 224;
63
+ out[p++] = ((c >> 6) & 63) | 128;
64
+ out[p++] = (c & 63) | 128;
65
+ }
66
+ }
67
+ return out;
68
+ }
69
+ function stringToBytes(string) {
70
+ return _toUTF8Array(string);
71
+ // var bytes = Buffer(string).toJSON();
72
+ // if (bytes.hasOwnProperty('data')) {
73
+ // // Node 0.12.x
74
+ // return bytes.data;
75
+ // } else {
76
+ // // Node 0.10.x
77
+ // return bytes;
78
+ // }
79
+ }
80
+ function bytesToString(bytes) {
81
+ if (typeof bytes === 'string') {
82
+ return bytes;
83
+ }
84
+ return _utf8ArrayToStr(bytes);
85
+ // return Buffer(bytes).toString();
86
+ }
87
+ // useful for readable version of Tag UID
88
+ function bytesToHexString(bytes) {
89
+ var dec, hexstring, bytesAsHexString = '';
90
+ for (var i = 0; i < bytes.length; i++) {
91
+ if (bytes[i] >= 0) {
92
+ dec = bytes[i];
93
+ }
94
+ else {
95
+ dec = 256 + bytes[i];
96
+ }
97
+ hexstring = dec.toString(16);
98
+ // zero padding
99
+ if (hexstring.length === 1) {
100
+ hexstring = '0' + hexstring;
101
+ }
102
+ bytesAsHexString += hexstring;
103
+ }
104
+ return bytesAsHexString;
105
+ }
106
+ // i must be <= 256
107
+ function toHex(i) {
108
+ var hex;
109
+ if (i < 0) {
110
+ i += 256;
111
+ }
112
+ hex = i.toString(16);
113
+ // zero padding
114
+ if (hex.length === 1) {
115
+ hex = '0' + hex;
116
+ }
117
+ return hex;
118
+ }
119
+ function toPrintable(i) {
120
+ if (i >= 0x20 && i <= 0x7f) {
121
+ return String.fromCharCode(i);
122
+ }
123
+ else {
124
+ return '.';
125
+ }
126
+ }
127
+ module.exports = {
128
+ stringToBytes: stringToBytes,
129
+ bytesToString: bytesToString,
130
+ bytesToHexString: bytesToHexString,
131
+ toHex: toHex,
132
+ toPrintable: toPrintable,
133
+ };
134
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../ndef-lib/util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const react_native_1 = require("react-native");
4
+ exports.default = react_native_1.TurboModuleRegistry.getEnforcing('NfcManager');
5
+ //# sourceMappingURL=NativeNfcManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeNfcManager.js","sourceRoot":"","sources":["../../specs/NativeNfcManager.ts"],"names":[],"mappings":";;AAEA,+CAAiD;AA4FjD,kBAAe,kCAAmB,CAAC,YAAY,CAAO,YAAY,CAAC,CAAC"}
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.callNative = exports.NfcManagerEmitter = exports.NativeNfcManager = void 0;
4
+ const react_native_1 = require("react-native");
5
+ const reactNativeGlobal = global;
6
+ const isTurboModuleEnabled = reactNativeGlobal['RN$Bridgeless'] === true ||
7
+ reactNativeGlobal.__turboModuleProxy != null;
8
+ const nativeModules = react_native_1.NativeModules || {};
9
+ const NativeNfcManager = (isTurboModuleEnabled
10
+ ? require('../specs/NativeNfcManager').default
11
+ : nativeModules.NfcManager);
12
+ exports.NativeNfcManager = NativeNfcManager;
13
+ const legacyNfcManagerEmitter = typeof react_native_1.NativeEventEmitter === 'function'
14
+ ? new react_native_1.NativeEventEmitter(NativeNfcManager)
15
+ : { addListener: () => ({ remove: () => { } }) };
16
+ const codegenEventEmitters = {
17
+ NfcManagerDiscoverTag: NativeNfcManager.onDiscoverTag,
18
+ NfcManagerDiscoverBackgroundTag: NativeNfcManager.onDiscoverBackgroundTag,
19
+ NfcManagerSessionClosed: NativeNfcManager.onSessionClosed,
20
+ NfcManagerStateChanged: NativeNfcManager.onStateChanged,
21
+ };
22
+ const NfcManagerEmitter = {
23
+ addListener: (eventName, listener) => {
24
+ const codegenEmitter = codegenEventEmitters[eventName];
25
+ if (isTurboModuleEnabled && codegenEmitter) {
26
+ return codegenEmitter(listener);
27
+ }
28
+ return legacyNfcManagerEmitter.addListener(eventName, listener);
29
+ },
30
+ };
31
+ exports.NfcManagerEmitter = NfcManagerEmitter;
32
+ function callNative(name, params = []) {
33
+ const nativeMethod = NativeNfcManager[name];
34
+ if (!nativeMethod) {
35
+ throw new Error(`no such native method: "${name}"`);
36
+ }
37
+ if (!Array.isArray(params)) {
38
+ throw new Error('params must be an array');
39
+ }
40
+ const createCallback = (resolve, reject) => (err, result) => {
41
+ if (err) {
42
+ reject(err);
43
+ }
44
+ else {
45
+ resolve(result);
46
+ }
47
+ };
48
+ return new Promise((resolve, reject) => {
49
+ const callback = createCallback(resolve, reject);
50
+ const inputParams = [...params, callback];
51
+ nativeMethod(...inputParams);
52
+ });
53
+ }
54
+ exports.callNative = callNative;
55
+ //# sourceMappingURL=NativeNfcManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeNfcManager.js","sourceRoot":"","sources":["../../src/NativeNfcManager.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AACb,+CAA+D;AAmB/D,MAAM,iBAAiB,GAAG,MAGzB,CAAC;AACF,MAAM,oBAAoB,GACxB,iBAAiB,CAAC,eAAe,CAAC,KAAK,IAAI;IAC3C,iBAAiB,CAAC,kBAAkB,IAAI,IAAI,CAAC;AAC/C,MAAM,aAAa,GAAG,4BAAa,IAAI,EAAE,CAAC;AAC1C,MAAM,gBAAgB,GAAG,CAAC,oBAAoB;IAC5C,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,OAAO;IAC9C,CAAC,CAAC,aAAa,CAAC,UAAU,CAAiB,CAAC;AAqDtC,4CAAgB;AAnDxB,MAAM,uBAAuB,GAC3B,OAAO,iCAAkB,KAAK,UAAU;IACtC,CAAC,CAAC,IAAI,iCAAkB,CAAC,gBAAgB,CAAC;IAC1C,CAAC,CAAC,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAC,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAC,CAAC,EAAC,CAAC;AAEhD,MAAM,oBAAoB,GAAoD;IAC5E,qBAAqB,EAAE,gBAAgB,CAAC,aAAa;IACrD,+BAA+B,EAAE,gBAAgB,CAAC,uBAAuB;IACzE,uBAAuB,EAAE,gBAAgB,CAAC,eAAe;IACzD,sBAAsB,EAAE,gBAAgB,CAAC,cAAc;CACxD,CAAC;AAEF,MAAM,iBAAiB,GAAsB;IAC3C,WAAW,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;QACnC,MAAM,cAAc,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,oBAAoB,IAAI,cAAc,EAAE;YAC1C,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;SACjC;QACD,OAAO,uBAAuB,CAAC,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;CACF,CAAC;AA+BwB,8CAAiB;AA7B3C,SAAS,UAAU,CAAc,IAAY,EAAE,SAAoB,EAAE;IACnE,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAA6B,CAAC;IAExE,IAAI,CAAC,YAAY,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,GAAG,CAAC,CAAC;KACrD;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC1B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC5C;IAED,MAAM,cAAc,GAAG,CACrB,OAA4C,EAC5C,MAAkC,EAClC,EAAE,CAAC,CAAC,GAAY,EAAE,MAAS,EAAE,EAAE;QAC/B,IAAI,GAAG,EAAE;YACP,MAAM,CAAC,GAAG,CAAC,CAAC;SACb;aAAM;YACL,OAAO,CAAC,MAAM,CAAC,CAAC;SACjB;IACH,CAAC,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1C,YAAY,CAAC,GAAG,WAAW,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAE4C,gCAAU"}