react-native-nfc-manager 4.0.0-beta.7 → 4.0.0-beta.9
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 +37 -3
- 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 +333 -1119
- 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 +201 -0
- 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 +153 -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 +76 -43
- package/ios/NfcManager.h +2 -10
- package/ios/NfcManager.mm +176 -434
- 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} +49 -20
- package/ndef-lib/{stringifier.js → stringifier.ts} +27 -10
- package/ndef-lib/{util.js → util.ts} +13 -8
- package/package.json +21 -7
- package/react-native-nfc-manager.podspec +3 -2
- package/specs/NativeNfcManager.ts +17 -3
- package/src/NativeNfcManager.ts +84 -0
- package/src/{NfcError.js → NfcError.ts} +6 -17
- package/src/{NfcManager.js → NfcManager.ts} +49 -34
- package/src/{NfcManagerAndroid.js → NfcManagerAndroid.ts} +25 -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.js +0 -3
- package/specs/NativeNfcManager.js.map +0 -1
- package/src/NativeNfcManager.js +0 -37
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const constants = {
|
|
4
|
+
TNF_EMPTY: 0x0,
|
|
5
|
+
TNF_WELL_KNOWN: 0x01,
|
|
6
|
+
TNF_MIME_MEDIA: 0x02,
|
|
7
|
+
TNF_ABSOLUTE_URI: 0x03,
|
|
8
|
+
TNF_EXTERNAL_TYPE: 0x04,
|
|
9
|
+
TNF_UNKNOWN: 0x05,
|
|
10
|
+
TNF_UNCHANGED: 0x06,
|
|
11
|
+
TNF_RESERVED: 0x07,
|
|
12
|
+
RTD_TEXT: 'T',
|
|
13
|
+
RTD_URI: 'U',
|
|
14
|
+
RTD_SMART_POSTER: 'Sp',
|
|
15
|
+
RTD_ALTERNATIVE_CARRIER: 'ac',
|
|
16
|
+
RTD_HANDOVER_CARRIER: 'Hc',
|
|
17
|
+
RTD_HANDOVER_REQUEST: 'Hr',
|
|
18
|
+
RTD_HANDOVER_SELECT: 'Hs',
|
|
19
|
+
RTD_BYTES_TEXT: [0x54],
|
|
20
|
+
RTD_BYTES_URI: [0x55],
|
|
21
|
+
RTD_BYTES_SMART_POSTER: [0x53, 0x70],
|
|
22
|
+
RTD_BYTES_ALTERNATIVE_CARRIER: [0x61, 0x63],
|
|
23
|
+
RTD_BYTES_HANDOVER_CARRIER: [0x48, 0x63],
|
|
24
|
+
RTD_BYTES_HANDOVER_REQUEST: [0x48, 0x72],
|
|
25
|
+
RTD_BYTES_HANDOVER_SELECT: [0x48, 0x73],
|
|
26
|
+
MIME_WFA_WSC: 'application/vnd.wfa.wsc',
|
|
27
|
+
RTD_URI_PROTOCOLS: [
|
|
28
|
+
'',
|
|
29
|
+
'http://www.',
|
|
30
|
+
'https://www.',
|
|
31
|
+
'http://',
|
|
32
|
+
'https://',
|
|
33
|
+
'tel:',
|
|
34
|
+
'mailto:',
|
|
35
|
+
'ftp://anonymous:anonymous@',
|
|
36
|
+
'ftp://ftp.',
|
|
37
|
+
'ftps://',
|
|
38
|
+
'sftp://',
|
|
39
|
+
'smb://',
|
|
40
|
+
'nfs://',
|
|
41
|
+
'ftp://',
|
|
42
|
+
'dav://',
|
|
43
|
+
'news:',
|
|
44
|
+
'telnet://',
|
|
45
|
+
'imap:',
|
|
46
|
+
'rtsp://',
|
|
47
|
+
'urn:',
|
|
48
|
+
'pop:',
|
|
49
|
+
'sip:',
|
|
50
|
+
'sips:',
|
|
51
|
+
'tftp:',
|
|
52
|
+
'btspp://',
|
|
53
|
+
'btl2cap://',
|
|
54
|
+
'btgoep://',
|
|
55
|
+
'tcpobex://',
|
|
56
|
+
'irdaobex://',
|
|
57
|
+
'file://',
|
|
58
|
+
'urn:epc:id:',
|
|
59
|
+
'urn:epc:tag:',
|
|
60
|
+
'urn:epc:pat:',
|
|
61
|
+
'urn:epc:raw:',
|
|
62
|
+
'urn:epc:',
|
|
63
|
+
'urn:nfc:',
|
|
64
|
+
],
|
|
65
|
+
};
|
|
66
|
+
module.exports = constants;
|
|
67
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../ndef-lib/constants.ts"],"names":[],"mappings":";;AAAA,MAAM,SAAS,GAAG;IAChB,SAAS,EAAE,GAAG;IACd,cAAc,EAAE,IAAI;IACpB,cAAc,EAAE,IAAI;IACpB,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,IAAI;IACvB,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,IAAI;IACnB,YAAY,EAAE,IAAI;IAElB,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,gBAAgB,EAAE,IAAI;IACtB,uBAAuB,EAAE,IAAI;IAC7B,oBAAoB,EAAE,IAAI;IAC1B,oBAAoB,EAAE,IAAI;IAC1B,mBAAmB,EAAE,IAAI;IAEzB,cAAc,EAAE,CAAC,IAAI,CAAC;IACtB,aAAa,EAAE,CAAC,IAAI,CAAC;IACrB,sBAAsB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACpC,6BAA6B,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAC3C,0BAA0B,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACxC,0BAA0B,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACxC,yBAAyB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IAEvC,YAAY,EAAE,yBAAyB;IAEvC,iBAAiB,EAAE;QACjB,EAAE;QACF,aAAa;QACb,cAAc;QACd,SAAS;QACT,UAAU;QACV,MAAM;QACN,SAAS;QACT,4BAA4B;QAC5B,YAAY;QACZ,SAAS;QACT,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,WAAW;QACX,OAAO;QACP,SAAS;QACT,MAAM;QACN,MAAM;QACN,MAAM;QACN,OAAO;QACP,OAAO;QACP,UAAU;QACV,YAAY;QACZ,WAAW;QACX,YAAY;QACZ,aAAa;QACb,SAAS;QACT,aAAa;QACb,cAAc;QACd,cAAc;QACd,cAAc;QACd,UAAU;QACV,UAAU;KACX;CACF,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// originally from phonegap-nfc.js by Don Coleman
|
|
3
|
+
// adapted for react-native-nfc-manager by Richie Hsieh
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
const { createNdefRecord, encodeNdefMessage, decodeNdefMessage, equalToRecordType, } = require('./ndef');
|
|
6
|
+
const constants = require('./constants');
|
|
7
|
+
const util = require('./util');
|
|
8
|
+
const textHelper = require('./ndef-text');
|
|
9
|
+
const uriHelper = require('./ndef-uri');
|
|
10
|
+
const wifiSimpleHelper = require('./ndef-wifi-simple');
|
|
11
|
+
const stringifier = require('./stringifier');
|
|
12
|
+
const PrimitiveRecord = {
|
|
13
|
+
emptyRecord() {
|
|
14
|
+
return createNdefRecord(constants.TNF_EMPTY, [], [], []);
|
|
15
|
+
},
|
|
16
|
+
absoluteUriRecord(uri, payload = [], id = []) {
|
|
17
|
+
return createNdefRecord(constants.TNF_ABSOLUTE_URI, uri, id, payload);
|
|
18
|
+
},
|
|
19
|
+
mimeMediaRecord(mimeType, payload, id = []) {
|
|
20
|
+
return createNdefRecord(constants.TNF_MIME_MEDIA, mimeType, id, payload);
|
|
21
|
+
},
|
|
22
|
+
externalTypeRecord(externalType, payload, id = []) {
|
|
23
|
+
return createNdefRecord(constants.TNF_EXTERNAL_TYPE, externalType, id, payload);
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
const WellKnownRecord = {
|
|
27
|
+
textRecord(text, languageCode, id = []) {
|
|
28
|
+
return createNdefRecord(constants.TNF_WELL_KNOWN, constants.RTD_TEXT, id, textHelper.encodePayload(text, languageCode));
|
|
29
|
+
},
|
|
30
|
+
uriRecord(uri, id = []) {
|
|
31
|
+
return createNdefRecord(constants.TNF_WELL_KNOWN, constants.RTD_URI, id, uriHelper.encodePayload(uri));
|
|
32
|
+
},
|
|
33
|
+
smartPoster(ndefRecords, id = []) {
|
|
34
|
+
let payload = [];
|
|
35
|
+
if (ndefRecords) {
|
|
36
|
+
// make sure we have an array of something like NDEF records before encoding
|
|
37
|
+
if (ndefRecords[0] instanceof Object &&
|
|
38
|
+
ndefRecords[0].hasOwnProperty('tnf')) {
|
|
39
|
+
payload = encodeNdefMessage(ndefRecords);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// assume the caller has already encoded the NDEF records into a byte array
|
|
43
|
+
payload = ndefRecords;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
console.log('WARNING: Expecting an array of NDEF records');
|
|
48
|
+
}
|
|
49
|
+
return createNdefRecord(constants.TNF_WELL_KNOWN, constants.RTD_SMART_POSTER, id, payload);
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
const ExtraTypeRecord = {
|
|
53
|
+
androidApplicationRecord(packageName, id = []) {
|
|
54
|
+
return PrimitiveRecord.externalTypeRecord('android.com:pkg', packageName, id);
|
|
55
|
+
},
|
|
56
|
+
wifiSimpleRecord: function (credentials, id = []) {
|
|
57
|
+
let payload = wifiSimpleHelper.encodePayload(credentials);
|
|
58
|
+
return PrimitiveRecord.mimeMediaRecord(constants.MIME_WFA_WSC, payload, id);
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
const NDEF = {
|
|
62
|
+
...constants,
|
|
63
|
+
...PrimitiveRecord,
|
|
64
|
+
...WellKnownRecord,
|
|
65
|
+
...ExtraTypeRecord,
|
|
66
|
+
record: createNdefRecord,
|
|
67
|
+
encodeMessage: encodeNdefMessage,
|
|
68
|
+
decodeMessage: decodeNdefMessage,
|
|
69
|
+
isType: equalToRecordType,
|
|
70
|
+
// individual record type helpers
|
|
71
|
+
text: textHelper,
|
|
72
|
+
uri: uriHelper,
|
|
73
|
+
wifiSimple: wifiSimpleHelper,
|
|
74
|
+
// other helpers
|
|
75
|
+
util,
|
|
76
|
+
stringify: stringifier.stringify,
|
|
77
|
+
};
|
|
78
|
+
module.exports = NDEF;
|
|
79
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ndef-lib/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var util = require('./util');
|
|
4
|
+
// decode text bytes from ndef record payload
|
|
5
|
+
// @returns a string
|
|
6
|
+
function decode(data) {
|
|
7
|
+
var languageCodeLength = data[0] & 0x3f; // 6 LSBs
|
|
8
|
+
// languageCode = data.slice(1, 1 + languageCodeLength),
|
|
9
|
+
// utf16 = (data[0] & 0x80) !== 0; // assuming UTF-16BE
|
|
10
|
+
// TODO need to deal with UTF in the future
|
|
11
|
+
// console.log("lang " + languageCode + (utf16 ? " utf16" : " utf8"));
|
|
12
|
+
return util.bytesToString(data.slice(languageCodeLength + 1));
|
|
13
|
+
}
|
|
14
|
+
// encode text payload
|
|
15
|
+
// @returns an array of bytes
|
|
16
|
+
function encode(text, lang, encoding) {
|
|
17
|
+
// ISO/IANA language code, but we're not enforcing
|
|
18
|
+
if (!lang) {
|
|
19
|
+
lang = 'en';
|
|
20
|
+
}
|
|
21
|
+
var encoded = util.stringToBytes(lang + text);
|
|
22
|
+
encoded.unshift(lang.length);
|
|
23
|
+
return encoded;
|
|
24
|
+
}
|
|
25
|
+
module.exports = {
|
|
26
|
+
encodePayload: encode,
|
|
27
|
+
decodePayload: decode,
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=ndef-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ndef-text.js","sourceRoot":"","sources":["../../ndef-lib/ndef-text.ts"],"names":[],"mappings":";;AAAA,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAK7B,6CAA6C;AAC7C,oBAAoB;AACpB,SAAS,MAAM,CAAC,IAAe;IAC7B,IAAI,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS;IAClD,wDAAwD;IACxD,uDAAuD;IAEvD,2CAA2C;IAC3C,sEAAsE;IAEtE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,sBAAsB;AACtB,6BAA6B;AAC7B,SAAS,MAAM,CAAC,IAAY,EAAE,IAAa,EAAE,QAAkB;IAC7D,kDAAkD;IAClD,IAAI,CAAC,IAAI,EAAE;QACT,IAAI,GAAG,IAAI,CAAC;KACb;IAED,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE7B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG;IACf,aAAa,EAAE,MAAM;IACrB,aAAa,EAAE,MAAM;CACtB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const util = require('./util');
|
|
4
|
+
const protocols = require('./constants').RTD_URI_PROTOCOLS;
|
|
5
|
+
// decode a URI payload bytes
|
|
6
|
+
// @returns a string
|
|
7
|
+
function decode(data) {
|
|
8
|
+
var prefix = protocols[data[0]];
|
|
9
|
+
if (!prefix) {
|
|
10
|
+
// 36 to 255 should be ""
|
|
11
|
+
prefix = '';
|
|
12
|
+
}
|
|
13
|
+
return prefix + util.bytesToString(data.slice(1));
|
|
14
|
+
}
|
|
15
|
+
// shorten a URI with standard prefix
|
|
16
|
+
// @returns an array of bytes
|
|
17
|
+
function encode(uri) {
|
|
18
|
+
var prefix, protocolCode, encoded;
|
|
19
|
+
// check each protocol, unless we've found a match
|
|
20
|
+
// "urn:" is the one exception where we need to keep checking
|
|
21
|
+
// slice so we don't check ""
|
|
22
|
+
protocols.slice(1).forEach(function (protocol) {
|
|
23
|
+
if ((!prefix || prefix === 'urn:') && uri.indexOf(protocol) === 0) {
|
|
24
|
+
prefix = protocol;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
if (!prefix) {
|
|
28
|
+
prefix = '';
|
|
29
|
+
}
|
|
30
|
+
encoded = util.stringToBytes(uri.slice(prefix.length));
|
|
31
|
+
protocolCode = protocols.indexOf(prefix);
|
|
32
|
+
// prepend protocol code
|
|
33
|
+
encoded.unshift(protocolCode);
|
|
34
|
+
return encoded;
|
|
35
|
+
}
|
|
36
|
+
module.exports = {
|
|
37
|
+
encodePayload: encode,
|
|
38
|
+
decodePayload: decode,
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=ndef-uri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ndef-uri.js","sourceRoot":"","sources":["../../ndef-lib/ndef-uri.ts"],"names":[],"mappings":";;AAAA,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,iBAAiB,CAAC;AAK3D,6BAA6B;AAC7B,oBAAoB;AACpB,SAAS,MAAM,CAAC,IAAe;IAC7B,IAAI,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,EAAE;QACX,yBAAyB;QACzB,MAAM,GAAG,EAAE,CAAC;KACb;IACD,OAAO,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,qCAAqC;AACrC,6BAA6B;AAC7B,SAAS,MAAM,CAAC,GAAW;IACzB,IAAI,MAA0B,EAAE,YAAY,EAAE,OAAO,CAAC;IAEtD,kDAAkD;IAClD,6DAA6D;IAC7D,6BAA6B;IAC7B,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,QAAQ;QAC3C,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACjE,MAAM,GAAG,QAAQ,CAAC;SACnB;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,GAAG,EAAE,CAAC;KACb;IAED,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,wBAAwB;IACxB,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAE9B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG;IACf,aAAa,EAAE,MAAM;IACrB,aAAa,EAAE,MAAM;CACtB,CAAC"}
|
|
@@ -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,153 @@
|
|
|
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
|
+
// ndefBytes can be an array of bytes e.g. [0x03, 0x31, 0xd1] or a Buffer
|
|
101
|
+
let bytes;
|
|
102
|
+
if (ndefBytes instanceof Array) {
|
|
103
|
+
bytes = ndefBytes.slice(0);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
throw new Error('ndef.decodeMessage requires a Buffer or an Array of bytes');
|
|
107
|
+
}
|
|
108
|
+
bytes = bytes.slice(0); // clone since parsing is destructive
|
|
109
|
+
let ndef_message = [], tnf_byte, header, type_length = 0, payload_length = 0, id_length = 0, record_type = [], id = [], payload = [];
|
|
110
|
+
while (bytes.length) {
|
|
111
|
+
tnf_byte = bytes.shift();
|
|
112
|
+
header = decodeTnf(tnf_byte);
|
|
113
|
+
type_length = bytes.shift();
|
|
114
|
+
if (header.sr) {
|
|
115
|
+
payload_length = bytes.shift();
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// next 4 bytes are length
|
|
119
|
+
payload_length =
|
|
120
|
+
((0xff & bytes.shift()) << 24) |
|
|
121
|
+
((0xff & bytes.shift()) << 16) |
|
|
122
|
+
((0xff & bytes.shift()) << 8) |
|
|
123
|
+
(0xff & bytes.shift());
|
|
124
|
+
}
|
|
125
|
+
id_length = header.il ? bytes.shift() : 0;
|
|
126
|
+
record_type = bytes.splice(0, type_length);
|
|
127
|
+
id = bytes.splice(0, id_length);
|
|
128
|
+
payload = bytes.splice(0, payload_length);
|
|
129
|
+
ndef_message.push(createNdefRecord(header.tnf, record_type, id, payload));
|
|
130
|
+
if (header.me) {
|
|
131
|
+
break;
|
|
132
|
+
} // last message
|
|
133
|
+
}
|
|
134
|
+
return ndef_message;
|
|
135
|
+
}
|
|
136
|
+
function equalToRecordType(record, tnf, type) {
|
|
137
|
+
if (record.tnf === tnf) {
|
|
138
|
+
if (Array.isArray(record.type)) {
|
|
139
|
+
return util.bytesToString(record.type) === type;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
return record.type === type;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return record.tnf === tnf && record.type === type;
|
|
146
|
+
}
|
|
147
|
+
module.exports = {
|
|
148
|
+
createNdefRecord,
|
|
149
|
+
encodeNdefMessage,
|
|
150
|
+
decodeNdefMessage,
|
|
151
|
+
equalToRecordType,
|
|
152
|
+
};
|
|
153
|
+
//# 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
|