@iotize/device-com-nfc.cordova 3.8.1 → 3.9.0
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/LICENSE +30 -30
- package/README.md +673 -673
- package/bundles/iotize-device-com-nfc.cordova.umd.js +1108 -967
- package/bundles/iotize-device-com-nfc.cordova.umd.js.map +1 -1
- package/bundles/iotize-device-com-nfc.cordova.umd.min.js +1 -1
- package/bundles/iotize-device-com-nfc.cordova.umd.min.js.map +1 -1
- package/esm2015/iotize-device-com-nfc.cordova.js +4 -4
- package/esm2015/iotize-device-com-nfc.cordova.ngsummary.json +1 -1
- package/esm2015/public_api.js +1 -1
- package/esm2015/public_api.ngsummary.json +1 -1
- package/esm2015/www/cordova-interface.js +1 -1
- package/esm2015/www/cordova-interface.js.map +1 -1
- package/esm2015/www/errors.js +30 -30
- package/esm2015/www/errors.js.map +1 -1
- package/esm2015/www/index.js +6 -6
- package/esm2015/www/index.js.map +1 -1
- package/esm2015/www/index.metadata.json +1 -1
- package/esm2015/www/index.ngsummary.json +1 -1
- package/esm2015/www/logger.js +2 -2
- package/esm2015/www/logger.js.map +1 -1
- package/esm2015/www/ndef/definitions.js +16 -16
- package/esm2015/www/ndef/definitions.js.map +1 -1
- package/esm2015/www/ndef/parse-ndef-message.js +293 -164
- package/esm2015/www/ndef/parse-ndef-message.js.map +1 -1
- package/esm2015/www/ndef/parse-ndef-message.metadata.json +1 -1
- package/esm2015/www/ndef/parse-ndef-message.ngsummary.json +1 -1
- package/esm2015/www/nfc-com-protocol.js +169 -169
- package/esm2015/www/nfc-com-protocol.js.map +1 -1
- package/esm2015/www/tap-ndef/definitions.js +1 -1
- package/esm2015/www/tap-ndef/definitions.js.map +1 -1
- package/esm2015/www/tap-ndef/index.js +2 -2
- package/esm2015/www/tap-ndef/index.js.map +1 -1
- package/esm2015/www/tap-ndef/parse-ndef-message.js +51 -51
- package/esm2015/www/tap-ndef/parse-ndef-message.js.map +1 -1
- package/esm2015/www/utility.js +10 -10
- package/esm2015/www/utility.js.map +1 -1
- package/esm2015/www/utility.ngsummary.json +1 -1
- package/fesm2015/iotize-device-com-nfc.cordova.js +555 -427
- package/fesm2015/iotize-device-com-nfc.cordova.js.map +1 -1
- package/iotize-device-com-nfc.cordova.d.ts +4 -4
- package/iotize-device-com-nfc.cordova.metadata.json +1 -1
- package/package.json +2 -2
- package/plugin.xml +98 -98
- package/public_api.d.ts +1 -1
- package/src/android/.gradle/4.10.1/fileChanges/last-build.bin +0 -0
- package/src/android/.gradle/4.10.1/fileHashes/fileHashes.bin +0 -0
- package/src/android/.gradle/4.10.1/fileHashes/fileHashes.lock +0 -0
- package/src/android/.gradle/4.10.1/gc.properties +0 -0
- package/src/android/build.gradle +38 -38
- package/src/android/gradle/wrapper/gradle-wrapper.properties +6 -6
- package/src/android/gradlew +172 -172
- package/src/android/gradlew.bat +84 -84
- package/src/android/local.properties +8 -8
- package/src/android/src/com/chariotsolutions/nfc/plugin/JSONBuilder.java +60 -60
- package/src/android/src/com/chariotsolutions/nfc/plugin/NfcPlugin.java +1151 -1151
- package/src/android/src/com/chariotsolutions/nfc/plugin/NfcPluginError.java +15 -15
- package/src/android/src/com/chariotsolutions/nfc/plugin/PluginResponse.java +85 -85
- package/src/android/src/com/chariotsolutions/nfc/plugin/Util.java +140 -140
- package/src/ios/AppDelegate+NFC.swift +51 -51
- package/src/ios/NFCHelpers.swift +144 -144
- package/src/ios/NFCNDEFDelegate.swift +78 -78
- package/src/ios/NFCTagReader.swift +506 -506
- package/www/cordova-interface.d.ts +34 -34
- package/www/errors.d.ts +17 -17
- package/www/index.d.ts +6 -6
- package/www/logger.d.ts +2 -2
- package/www/ndef/definitions.d.ts +15 -15
- package/www/ndef/parse-ndef-message.d.ts +12 -69
- package/www/nfc-com-protocol.d.ts +36 -36
- package/www/phonegap-nfc.js +911 -911
- package/www/tap-ndef/definitions.d.ts +25 -25
- package/www/tap-ndef/index.d.ts +2 -2
- package/www/tap-ndef/parse-ndef-message.d.ts +6 -6
- package/www/utility.d.ts +2 -2
|
@@ -1,165 +1,294 @@
|
|
|
1
|
-
import { Buffer } from 'buffer';
|
|
2
|
-
import { arrayEquals, toAsciiString } from '../utility';
|
|
3
|
-
import { TNF, WellKnownType } from './definitions';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
tnf: '
|
|
22
|
-
value:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
import { arrayEquals, toAsciiString } from '../utility';
|
|
3
|
+
import { TNF, WellKnownType } from './definitions';
|
|
4
|
+
import { asciiStringToByteBuffer } from '@iotize/common/byte-converter';
|
|
5
|
+
export function parseNdefMessages(messages) {
|
|
6
|
+
return (messages || []).map(parseNdefMessage);
|
|
7
|
+
}
|
|
8
|
+
export function parseNdefMessage(message) {
|
|
9
|
+
switch (message.tnf) {
|
|
10
|
+
case TNF.ABSOLUTE_URI:
|
|
11
|
+
return {
|
|
12
|
+
id: message.id,
|
|
13
|
+
type: message.type,
|
|
14
|
+
tnf: 'uri',
|
|
15
|
+
value: toAsciiString(message.payload),
|
|
16
|
+
};
|
|
17
|
+
case TNF.WELL_KNOWN_TYPE:
|
|
18
|
+
return {
|
|
19
|
+
id: message.id,
|
|
20
|
+
type: message.type,
|
|
21
|
+
tnf: 'wkt',
|
|
22
|
+
value: parseWellKnownType(message),
|
|
23
|
+
};
|
|
24
|
+
case TNF.EMPTY:
|
|
25
|
+
return {
|
|
26
|
+
id: message.id,
|
|
27
|
+
type: message.type,
|
|
28
|
+
tnf: 'empty',
|
|
29
|
+
value: {
|
|
30
|
+
type: message.type,
|
|
31
|
+
payload: message.payload,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
case TNF.EXTERNAL:
|
|
35
|
+
return {
|
|
36
|
+
id: message.id,
|
|
37
|
+
type: message.type,
|
|
38
|
+
tnf: 'external',
|
|
39
|
+
value: paseExternalType(message),
|
|
40
|
+
};
|
|
41
|
+
case TNF.MIME_TYPE:
|
|
42
|
+
return {
|
|
43
|
+
id: message.id,
|
|
44
|
+
type: message.type,
|
|
45
|
+
tnf: 'mimetype',
|
|
46
|
+
value: parseMimeType(message),
|
|
47
|
+
};
|
|
48
|
+
case TNF.RFU:
|
|
49
|
+
return {
|
|
50
|
+
id: message.id,
|
|
51
|
+
type: message.type,
|
|
52
|
+
tnf: 'rfu',
|
|
53
|
+
value: {
|
|
54
|
+
type: message.type,
|
|
55
|
+
payload: message.payload,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
case TNF.UNCHANGED:
|
|
59
|
+
return {
|
|
60
|
+
id: message.id,
|
|
61
|
+
type: message.type,
|
|
62
|
+
tnf: 'unchanged',
|
|
63
|
+
value: {
|
|
64
|
+
type: message.type,
|
|
65
|
+
payload: message.payload,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
case TNF.UNKNOWN:
|
|
69
|
+
return {
|
|
70
|
+
id: message.id,
|
|
71
|
+
type: message.type,
|
|
72
|
+
tnf: 'unknown',
|
|
73
|
+
value: {
|
|
74
|
+
type: message.type,
|
|
75
|
+
payload: message.payload,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
default:
|
|
79
|
+
return {
|
|
80
|
+
id: message.id,
|
|
81
|
+
type: message.type,
|
|
82
|
+
tnf: message.tnf,
|
|
83
|
+
value: {
|
|
84
|
+
type: message.type,
|
|
85
|
+
payload: message.payload,
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function parseWellKnownType(message) {
|
|
91
|
+
if (arrayEquals(message.type.slice(), WellKnownType.URI)) {
|
|
92
|
+
const prefixCode = message.payload[0];
|
|
93
|
+
let prefix = WELL_KNOWN_TYPE_URI_PREFIX[prefixCode] || '';
|
|
94
|
+
return {
|
|
95
|
+
type: 'uri',
|
|
96
|
+
value: prefix + toAsciiString(message.payload.slice(1)),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
else if (arrayEquals(message.type.slice(), WellKnownType.TEXT)) {
|
|
100
|
+
const encodingNumber = message.payload[0];
|
|
101
|
+
let encoding = 'utf8';
|
|
102
|
+
let languageSizeInBytes = 0;
|
|
103
|
+
if (typeof encodingNumber === 'number') {
|
|
104
|
+
// b0: encodage utf8 s’il vaut 0 et utf16 s’il vaut 1.
|
|
105
|
+
// b1: RFU (set to 0)
|
|
106
|
+
// b2-b7: la taille en octets de la langue (n)
|
|
107
|
+
// B8-B8+n-1: language
|
|
108
|
+
// Bn: message
|
|
109
|
+
const b0 = encodingNumber & 0b10000000;
|
|
110
|
+
encoding = b0 ? 'utf16le' : 'utf8';
|
|
111
|
+
languageSizeInBytes = encodingNumber & 0b00111111;
|
|
112
|
+
}
|
|
113
|
+
const text = message.payload.slice(languageSizeInBytes + 1);
|
|
114
|
+
const language = message.payload.slice(8, languageSizeInBytes + 1);
|
|
115
|
+
return {
|
|
116
|
+
type: 'text',
|
|
117
|
+
value: Buffer.from(text).toString(encoding),
|
|
118
|
+
encoding,
|
|
119
|
+
language: Buffer.from(language).toString(encoding)
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// else if (arrayEquals(message.type.slice(), WellKnownType.SMPART_POSTER)) {
|
|
123
|
+
// return {
|
|
124
|
+
// type: 'sp',
|
|
125
|
+
// // TODO implement
|
|
126
|
+
// payload: message.payload,
|
|
127
|
+
// };
|
|
128
|
+
// }
|
|
129
|
+
else {
|
|
130
|
+
return {
|
|
131
|
+
type: 'unknown',
|
|
132
|
+
value: {
|
|
133
|
+
type: message.type.slice(),
|
|
134
|
+
payload: message.payload,
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function paseExternalType(message) {
|
|
140
|
+
const value = Buffer.from(message.payload).toString('utf8');
|
|
141
|
+
const domain = Buffer.from(message.type).toString('utf8');
|
|
142
|
+
return {
|
|
143
|
+
domain,
|
|
144
|
+
value,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
const WELL_KNOWN_TYPE_URI_PREFIX = {
|
|
148
|
+
0x0: '',
|
|
149
|
+
0x1: 'http://www.',
|
|
150
|
+
0x2: 'http://www.',
|
|
151
|
+
0x3: 'http://',
|
|
152
|
+
0x4: 'https://',
|
|
153
|
+
0x5: 'tel:',
|
|
154
|
+
0x6: 'mailto:',
|
|
155
|
+
0x07: 'ftp://anonymous:anonymous@',
|
|
156
|
+
0x1d: 'file://',
|
|
157
|
+
0x08: 'ftp://ftp.',
|
|
158
|
+
0x09: 'ftps://',
|
|
159
|
+
0x0a: 'sftp://',
|
|
160
|
+
0x0b: 'smb://',
|
|
161
|
+
0x0c: 'nfs://',
|
|
162
|
+
0x0d: 'ftp://',
|
|
163
|
+
0x0e: 'dav://',
|
|
164
|
+
0x0f: 'news:',
|
|
165
|
+
0x10: 'telnet://',
|
|
166
|
+
0x11: 'imap:',
|
|
167
|
+
0x12: 'rtsp://',
|
|
168
|
+
0x13: 'urn:',
|
|
169
|
+
0x14: 'pop:',
|
|
170
|
+
0x15: 'sip:',
|
|
171
|
+
0x16: 'sips:',
|
|
172
|
+
0x17: 'tftp:',
|
|
173
|
+
0x18: 'btspp://',
|
|
174
|
+
0x19: 'btl2cap://',
|
|
175
|
+
0x1a: 'btgoep://',
|
|
176
|
+
0x1b: 'tcpobex://',
|
|
177
|
+
0x1c: 'irdaobex://',
|
|
178
|
+
0x1e: 'urn:epc:id:',
|
|
179
|
+
0x1f: 'urn:epc:tag:',
|
|
180
|
+
0x20: 'urn:epc:pat:',
|
|
181
|
+
0x21: 'urn:epc:raw:',
|
|
182
|
+
0x22: 'urn:epc:',
|
|
183
|
+
};
|
|
184
|
+
function parseMimeType(message) {
|
|
185
|
+
return Buffer.from(message.payload).toString('utf8');
|
|
186
|
+
}
|
|
187
|
+
function encodeWellKnownType(message) {
|
|
188
|
+
if (message.value.type == 'uri') {
|
|
189
|
+
//identify the prefix
|
|
190
|
+
const prefixesEntries = Object.entries(WELL_KNOWN_TYPE_URI_PREFIX);
|
|
191
|
+
let prefixByte = 0;
|
|
192
|
+
for (const [id, prefix] of prefixesEntries) {
|
|
193
|
+
if (id == '0x0') // Skip first as it is always recognized. (what about 0x1 vs 0x2?)
|
|
194
|
+
continue;
|
|
195
|
+
if (message.value.value.startsWith(prefix)) {
|
|
196
|
+
prefixByte = parseInt(id, 16);
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const lengthToSlice = WELL_KNOWN_TYPE_URI_PREFIX[prefixByte].length;
|
|
201
|
+
const slicedString = message.value.value.slice(lengthToSlice);
|
|
202
|
+
return [prefixByte, ...(asciiStringToByteBuffer(slicedString))];
|
|
203
|
+
}
|
|
204
|
+
else if (message.value.type === 'text') {
|
|
205
|
+
// b1: RFU (set to 0)
|
|
206
|
+
// b2-b7: la taille en octets de la langue (n)
|
|
207
|
+
// B8-B8+n-1: language
|
|
208
|
+
// Bn: message
|
|
209
|
+
let firstByte = message.value.encoding == 'utf16le' ? 0b10000000 : 0;
|
|
210
|
+
firstByte &= (message.value.language & 0b00111111);
|
|
211
|
+
const languageBytes = Buffer.from(message.value.language, message.value.encoding);
|
|
212
|
+
const textBytes = Buffer.from(message.value.value, message.value.encoding);
|
|
213
|
+
return [firstByte, ...languageBytes, ...textBytes];
|
|
214
|
+
}
|
|
215
|
+
else
|
|
216
|
+
return [...message.value.type, ...message.value.payload];
|
|
217
|
+
}
|
|
218
|
+
function encodeExternalType(message) {
|
|
219
|
+
return Array.from(Buffer.from(message.value.value, 'utf8'));
|
|
220
|
+
}
|
|
221
|
+
function encodeMimeType(message) {
|
|
222
|
+
return Array.from(Buffer.from(message.value, 'utf8'));
|
|
223
|
+
}
|
|
224
|
+
export function encodeNDEFMessages(ndefRecords) {
|
|
225
|
+
return (ndefRecords || []).map(encodeNDEFMessage);
|
|
226
|
+
}
|
|
227
|
+
export function encodeNDEFMessage(ndefRecord) {
|
|
228
|
+
switch (ndefRecord.tnf) {
|
|
229
|
+
case 'uri':
|
|
230
|
+
return {
|
|
231
|
+
id: ndefRecord.id,
|
|
232
|
+
type: ndefRecord.type,
|
|
233
|
+
tnf: TNF.ABSOLUTE_URI,
|
|
234
|
+
payload: Array.from(asciiStringToByteBuffer(ndefRecord.value))
|
|
235
|
+
};
|
|
236
|
+
case 'wkt':
|
|
237
|
+
return {
|
|
238
|
+
id: ndefRecord.id,
|
|
239
|
+
type: ndefRecord.type,
|
|
240
|
+
tnf: TNF.WELL_KNOWN_TYPE,
|
|
241
|
+
payload: encodeWellKnownType(ndefRecord),
|
|
242
|
+
};
|
|
243
|
+
case 'empty':
|
|
244
|
+
return {
|
|
245
|
+
id: ndefRecord.id,
|
|
246
|
+
type: ndefRecord.type,
|
|
247
|
+
tnf: TNF.EMPTY,
|
|
248
|
+
payload: ndefRecord.payload,
|
|
249
|
+
};
|
|
250
|
+
case 'external':
|
|
251
|
+
return {
|
|
252
|
+
id: ndefRecord.id,
|
|
253
|
+
type: ndefRecord.type,
|
|
254
|
+
tnf: TNF.EXTERNAL,
|
|
255
|
+
payload: encodeExternalType(ndefRecord),
|
|
256
|
+
};
|
|
257
|
+
case 'mimetype':
|
|
258
|
+
return {
|
|
259
|
+
id: ndefRecord.id,
|
|
260
|
+
type: ndefRecord.type,
|
|
261
|
+
tnf: TNF.MIME_TYPE,
|
|
262
|
+
payload: encodeMimeType(ndefRecord),
|
|
263
|
+
};
|
|
264
|
+
case 'rfu':
|
|
265
|
+
return {
|
|
266
|
+
id: ndefRecord.id,
|
|
267
|
+
type: ndefRecord.type,
|
|
268
|
+
tnf: TNF.RFU,
|
|
269
|
+
payload: ndefRecord.payload
|
|
270
|
+
};
|
|
271
|
+
case 'unchanged':
|
|
272
|
+
return {
|
|
273
|
+
id: ndefRecord.id,
|
|
274
|
+
type: ndefRecord.type,
|
|
275
|
+
tnf: TNF.UNCHANGED,
|
|
276
|
+
payload: ndefRecord.payload,
|
|
277
|
+
};
|
|
278
|
+
case 'unknown':
|
|
279
|
+
return {
|
|
280
|
+
id: ndefRecord.id,
|
|
281
|
+
type: ndefRecord.type,
|
|
282
|
+
tnf: TNF.UNKNOWN,
|
|
283
|
+
payload: ndefRecord.payload,
|
|
284
|
+
};
|
|
285
|
+
default:
|
|
286
|
+
return {
|
|
287
|
+
id: ndefRecord.id,
|
|
288
|
+
type: ndefRecord.type,
|
|
289
|
+
tnf: Number(ndefRecord.tnf),
|
|
290
|
+
payload: ndefRecord.payload,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
}
|
|
165
294
|
//# sourceMappingURL=parse-ndef-message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-ndef-message.js","sourceRoot":"","sources":["../../../../../../src/www/ndef/parse-ndef-message.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from 'buffer';\nimport { NdefRecord } from '../tap-ndef/definitions';\nimport { arrayEquals, toAsciiString } from '../utility';\nimport { TNF, WellKnownType } from './definitions';\n\nexport function parseNdefMessages(messages: NdefRecord[] | undefined | null) {\n return (messages || []).map(parseNdefMessage);\n}\n\nexport function parseNdefMessage(message: NdefRecord) {\n switch (message.tnf) {\n case TNF.ABSOLUTE_URI:\n return {\n tnf: 'uri',\n value: toAsciiString(message.payload),\n };\n case TNF.WELL_KNOWN_TYPE:\n return {\n tnf: 'wkt',\n value: parseWellKnownType(message),\n };\n case TNF.EMPTY:\n return {\n tnf: 'empty',\n value: {\n type: message.type,\n payload: message.payload,\n },\n };\n case TNF.EXTERNAL:\n return {\n tnf: 'external',\n value: paseExternalType(message),\n };\n case TNF.MIME_TYPE:\n return {\n tnf: 'mimetype',\n value: parseMimeType(message),\n };\n case TNF.RFU:\n return {\n tnf: 'rfu',\n value: {\n type: message.type,\n payload: message.payload,\n },\n };\n case TNF.UNCHANGED:\n return {\n tnf: 'unchanged',\n value: {\n type: message.type,\n payload: message.payload,\n },\n };\n case TNF.UNKNOWN:\n return {\n tnf: 'unknown',\n value: {\n type: message.type,\n payload: message.payload,\n },\n };\n default:\n return {\n tnf: message.tnf,\n value: {\n type: message.type,\n payload: message.payload,\n },\n };\n }\n}\n\nfunction parseWellKnownType(message: Pick<NdefRecord, 'payload' | 'type'>) {\n if (arrayEquals(message.type, WellKnownType.URI)) {\n const prefixCode = message.payload[0];\n let prefix: string =\n WELL_KNOWN_TYPE_URI_PREFIX[\n prefixCode as keyof typeof WELL_KNOWN_TYPE_URI_PREFIX\n ] || '';\n return {\n type: 'uri',\n value: prefix + toAsciiString(message.payload.slice(1)),\n };\n } else if (arrayEquals(message.type, WellKnownType.TEXT)) {\n const encodingNumber = message.payload[0];\n let encoding: 'utf16le' | 'utf8' = 'utf8';\n let languageSizeInBytes = 0;\n if (typeof encodingNumber === 'number') {\n // b0: encodage utf8 s’il vaut 0 et utf16 s’il vaut 1.\n // b1: RFU (set to 0)\n // b2-b7: la taille en octets de la langue (n)\n // B8-B8+n-1: language\n // Bn: message\n const b0 = encodingNumber & 0b10000000;\n encoding = b0 ? 'utf16le' : 'utf8';\n languageSizeInBytes = encodingNumber & 0b00111111;\n }\n const text = message.payload.slice(languageSizeInBytes + 1);\n return {\n type: 'text',\n value: Buffer.from(text).toString(encoding),\n };\n }\n // else if (arrayEquals(message.type, WellKnownType.SMPART_POSTER)) {\n // return {\n // type: 'sp',\n // // TODO implement\n // payload: message.payload,\n // };\n // }\n else {\n return {\n type: 'unknown',\n value: {\n type: message.type,\n payload: message.payload,\n },\n };\n }\n}\n\nfunction paseExternalType(message: Pick<NdefRecord, 'payload' | 'type'>) {\n const value = Buffer.from(message.payload).toString('utf8');\n const domain = Buffer.from(message.type).toString('utf8');\n return {\n domain,\n value,\n };\n}\n\nconst WELL_KNOWN_TYPE_URI_PREFIX = {\n 0x0: '',\n 0x1: 'http://www.',\n 0x2: 'http://www.',\n 0x3: 'http://',\n 0x4: 'https://',\n 0x5: 'tel:',\n 0x6: 'mailto:',\n 0x07: 'ftp://anonymous:anonymous@',\n 0x1d: 'file://',\n 0x08: 'ftp://ftp.',\n 0x09: 'ftps://',\n 0x0a: 'sftp://',\n 0x0b: 'smb://',\n 0x0c: 'nfs://',\n 0x0d: 'ftp://',\n 0x0e: 'dav://',\n 0x0f: 'news:',\n 0x10: 'telnet://',\n 0x11: 'imap:',\n 0x12: 'rtsp://',\n 0x13: 'urn:',\n 0x14: 'pop:',\n 0x15: 'sip:',\n 0x16: 'sips:',\n 0x17: 'tftp:',\n 0x18: 'btspp://',\n 0x19: 'btl2cap://',\n 0x1a: 'btgoep://',\n 0x1b: 'tcpobex://',\n 0x1c: 'irdaobex://',\n 0x1e: 'urn:epc:id:',\n 0x1f: 'urn:epc:tag:',\n 0x20: 'urn:epc:pat:',\n 0x21: 'urn:epc:raw:',\n 0x22: 'urn:epc:',\n};\n\nfunction parseMimeType(message: Pick<NdefRecord, 'payload'>) {\n return Buffer.from(message.payload).toString('utf8');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"parse-ndef-message.js","sourceRoot":"","sources":["../../../../../../src/www/ndef/parse-ndef-message.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from 'buffer';\r\nimport { NdefRecord } from '../tap-ndef/definitions';\r\nimport { arrayEquals, toAsciiString } from '../utility';\r\nimport { TNF, WellKnownType } from './definitions';\r\nimport { asciiStringToByteBuffer } from '@iotize/common/byte-converter';\r\n\r\nexport type NdefParsedRecord = {\r\n tnf: string | number,\r\n value?: any,\r\n payload?: any\r\n id: any[],\r\n type: number[]\r\n};\r\n\r\nexport function parseNdefMessages(messages: NdefRecord[] | undefined | null) {\r\n return (messages || []).map(parseNdefMessage);\r\n}\r\n\r\nexport function parseNdefMessage(message: NdefRecord): NdefParsedRecord {\r\n switch (message.tnf) {\r\n case TNF.ABSOLUTE_URI:\r\n return {\r\n id: message.id,\r\n type: message.type,\r\n tnf: 'uri',\r\n value: toAsciiString(message.payload),\r\n };\r\n case TNF.WELL_KNOWN_TYPE:\r\n return {\r\n id: message.id,\r\n type: message.type,\r\n tnf: 'wkt',\r\n value: parseWellKnownType(message),\r\n };\r\n case TNF.EMPTY:\r\n return {\r\n id: message.id,\r\n type: message.type,\r\n tnf: 'empty',\r\n value: {\r\n type: message.type,\r\n payload: message.payload,\r\n },\r\n };\r\n case TNF.EXTERNAL:\r\n return {\r\n id: message.id,\r\n type: message.type,\r\n tnf: 'external',\r\n value: paseExternalType(message),\r\n };\r\n case TNF.MIME_TYPE:\r\n return {\r\n id: message.id,\r\n type: message.type,\r\n tnf: 'mimetype',\r\n value: parseMimeType(message),\r\n };\r\n case TNF.RFU:\r\n return {\r\n id: message.id,\r\n type: message.type,\r\n tnf: 'rfu',\r\n value: {\r\n type: message.type,\r\n payload: message.payload,\r\n },\r\n };\r\n case TNF.UNCHANGED:\r\n return {\r\n id: message.id,\r\n type: message.type,\r\n tnf: 'unchanged',\r\n value: {\r\n type: message.type,\r\n payload: message.payload,\r\n },\r\n };\r\n case TNF.UNKNOWN:\r\n return {\r\n id: message.id,\r\n type: message.type,\r\n tnf: 'unknown',\r\n value: {\r\n type: message.type,\r\n payload: message.payload,\r\n },\r\n };\r\n default:\r\n return {\r\n id: message.id,\r\n type: message.type,\r\n tnf: message.tnf,\r\n value: {\r\n type: message.type,\r\n payload: message.payload,\r\n },\r\n };\r\n }\r\n}\r\n\r\nfunction parseWellKnownType(message: Pick<NdefRecord, 'payload' | 'type'>) {\r\n if (arrayEquals(message.type.slice(), WellKnownType.URI)) {\r\n const prefixCode = message.payload[0];\r\n let prefix: string =\r\n WELL_KNOWN_TYPE_URI_PREFIX[\r\n prefixCode as keyof typeof WELL_KNOWN_TYPE_URI_PREFIX\r\n ] || '';\r\n return {\r\n type: 'uri',\r\n value: prefix + toAsciiString(message.payload.slice(1)),\r\n };\r\n } else if (arrayEquals(message.type.slice(), WellKnownType.TEXT)) {\r\n const encodingNumber = message.payload[0];\r\n let encoding: 'utf16le' | 'utf8' = 'utf8';\r\n let languageSizeInBytes = 0;\r\n if (typeof encodingNumber === 'number') {\r\n // b0: encodage utf8 s’il vaut 0 et utf16 s’il vaut 1.\r\n // b1: RFU (set to 0)\r\n // b2-b7: la taille en octets de la langue (n)\r\n // B8-B8+n-1: language\r\n // Bn: message\r\n const b0 = encodingNumber & 0b10000000;\r\n encoding = b0 ? 'utf16le' : 'utf8';\r\n languageSizeInBytes = encodingNumber & 0b00111111;\r\n }\r\n const text = message.payload.slice(languageSizeInBytes + 1);\r\n const language = message.payload.slice(8, languageSizeInBytes + 1);\r\n return {\r\n type: 'text',\r\n value: Buffer.from(text).toString(encoding),\r\n encoding,\r\n language: Buffer.from(language).toString(encoding)\r\n };\r\n }\r\n // else if (arrayEquals(message.type.slice(), WellKnownType.SMPART_POSTER)) {\r\n // return {\r\n // type: 'sp',\r\n // // TODO implement\r\n // payload: message.payload,\r\n // };\r\n // }\r\n else {\r\n return {\r\n type: 'unknown',\r\n value: {\r\n type: message.type.slice(),\r\n payload: message.payload,\r\n },\r\n };\r\n }\r\n}\r\n\r\nfunction paseExternalType(message: Pick<NdefRecord, 'payload' | 'type'>) {\r\n const value = Buffer.from(message.payload).toString('utf8');\r\n const domain = Buffer.from(message.type).toString('utf8');\r\n return {\r\n domain,\r\n value,\r\n };\r\n}\r\n\r\nconst WELL_KNOWN_TYPE_URI_PREFIX = {\r\n 0x0: '',\r\n 0x1: 'http://www.',\r\n 0x2: 'http://www.',\r\n 0x3: 'http://',\r\n 0x4: 'https://',\r\n 0x5: 'tel:',\r\n 0x6: 'mailto:',\r\n 0x07: 'ftp://anonymous:anonymous@',\r\n 0x1d: 'file://',\r\n 0x08: 'ftp://ftp.',\r\n 0x09: 'ftps://',\r\n 0x0a: 'sftp://',\r\n 0x0b: 'smb://',\r\n 0x0c: 'nfs://',\r\n 0x0d: 'ftp://',\r\n 0x0e: 'dav://',\r\n 0x0f: 'news:',\r\n 0x10: 'telnet://',\r\n 0x11: 'imap:',\r\n 0x12: 'rtsp://',\r\n 0x13: 'urn:',\r\n 0x14: 'pop:',\r\n 0x15: 'sip:',\r\n 0x16: 'sips:',\r\n 0x17: 'tftp:',\r\n 0x18: 'btspp://',\r\n 0x19: 'btl2cap://',\r\n 0x1a: 'btgoep://',\r\n 0x1b: 'tcpobex://',\r\n 0x1c: 'irdaobex://',\r\n 0x1e: 'urn:epc:id:',\r\n 0x1f: 'urn:epc:tag:',\r\n 0x20: 'urn:epc:pat:',\r\n 0x21: 'urn:epc:raw:',\r\n 0x22: 'urn:epc:',\r\n};\r\n\r\nfunction parseMimeType(message: Pick<NdefRecord, 'payload'>) {\r\n return Buffer.from(message.payload).toString('utf8');\r\n}\r\n\r\nfunction encodeWellKnownType(message: NdefParsedRecord) {\r\n\r\n if (message.value.type == 'uri') {\r\n //identify the prefix\r\n const prefixesEntries = Object.entries(WELL_KNOWN_TYPE_URI_PREFIX);\r\n let prefixByte = 0;\r\n for (const [id, prefix] of prefixesEntries) {\r\n if (id == '0x0') // Skip first as it is always recognized. (what about 0x1 vs 0x2?)\r\n continue;\r\n if (message.value.value.startsWith(prefix)) {\r\n prefixByte = parseInt(id, 16);\r\n break;\r\n }\r\n }\r\n const lengthToSlice = WELL_KNOWN_TYPE_URI_PREFIX[prefixByte as keyof typeof WELL_KNOWN_TYPE_URI_PREFIX].length;\r\n const slicedString = message.value.value.slice(lengthToSlice);\r\n return [prefixByte, ...(asciiStringToByteBuffer(slicedString))];\r\n\r\n } else if (message.value.type === 'text') {\r\n // b1: RFU (set to 0)\r\n // b2-b7: la taille en octets de la langue (n)\r\n // B8-B8+n-1: language\r\n // Bn: message\r\n let firstByte = message.value.encoding == 'utf16le' ? 0b10000000 : 0;\r\n firstByte &= (message.value.language & 0b00111111);\r\n const languageBytes = Buffer.from(message.value.language, message.value.encoding);\r\n const textBytes = Buffer.from(message.value.value, message.value.encoding);\r\n return [firstByte, ...languageBytes, ...textBytes];\r\n }\r\n else return [...message.value.type, ...message.value.payload];\r\n}\r\n\r\nfunction encodeExternalType(message: NdefParsedRecord) {\r\n return Array.from(Buffer.from(message.value.value, 'utf8'));\r\n}\r\n\r\nfunction encodeMimeType(message: NdefParsedRecord) {\r\n return Array.from(Buffer.from(message.value, 'utf8'));\r\n}\r\n\r\nexport function encodeNDEFMessages(ndefRecords: NdefParsedRecord[]) {\r\n return (ndefRecords || []).map(encodeNDEFMessage)\r\n}\r\n\r\nexport function encodeNDEFMessage(ndefRecord: NdefParsedRecord): NdefRecord {\r\n switch (ndefRecord.tnf) {\r\n case 'uri':\r\n return {\r\n id: ndefRecord.id,\r\n type: ndefRecord.type,\r\n tnf: TNF.ABSOLUTE_URI,\r\n payload: Array.from(asciiStringToByteBuffer(ndefRecord.value))\r\n };\r\n case 'wkt':\r\n return {\r\n id: ndefRecord.id,\r\n type: ndefRecord.type,\r\n tnf: TNF.WELL_KNOWN_TYPE,\r\n payload: encodeWellKnownType(ndefRecord),\r\n };\r\n case 'empty':\r\n return {\r\n id: ndefRecord.id,\r\n type: ndefRecord.type,\r\n tnf: TNF.EMPTY,\r\n payload: ndefRecord.payload,\r\n };\r\n case 'external':\r\n return {\r\n id: ndefRecord.id,\r\n type: ndefRecord.type,\r\n tnf: TNF.EXTERNAL,\r\n payload: encodeExternalType(ndefRecord),\r\n };\r\n case 'mimetype':\r\n return {\r\n id: ndefRecord.id,\r\n type: ndefRecord.type,\r\n tnf: TNF.MIME_TYPE,\r\n payload: encodeMimeType(ndefRecord),\r\n };\r\n case 'rfu':\r\n return {\r\n id: ndefRecord.id,\r\n type: ndefRecord.type,\r\n tnf: TNF.RFU,\r\n payload: ndefRecord.payload\r\n };\r\n case 'unchanged':\r\n return {\r\n id: ndefRecord.id,\r\n type: ndefRecord.type,\r\n tnf: TNF.UNCHANGED,\r\n payload: ndefRecord.payload,\r\n };\r\n case 'unknown':\r\n return {\r\n id: ndefRecord.id,\r\n type: ndefRecord.type,\r\n tnf: TNF.UNKNOWN,\r\n payload: ndefRecord.payload,\r\n };\r\n default:\r\n return {\r\n id: ndefRecord.id,\r\n type: ndefRecord.type,\r\n tnf: Number(ndefRecord.tnf),\r\n payload: ndefRecord.payload,\r\n };\r\n }\r\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"parseNdefMessages":{"__symbolic":"function","parameters":["messages"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"reference","name":"messages"},"right":[]},"member":"map"},"arguments":[{"__symbolic":"reference","name":"parseNdefMessage"}]}},"parseNdefMessage":{"__symbolic":"function"}}}]
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"NdefParsedRecord":{"__symbolic":"interface"},"parseNdefMessages":{"__symbolic":"function","parameters":["messages"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"reference","name":"messages"},"right":[]},"member":"map"},"arguments":[{"__symbolic":"reference","name":"parseNdefMessage"}]}},"parseNdefMessage":{"__symbolic":"function"},"encodeNDEFMessages":{"__symbolic":"function","parameters":["ndefRecords"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"reference","name":"ndefRecords"},"right":[]},"member":"map"},"arguments":[{"__symbolic":"reference","name":"encodeNDEFMessage"}]}},"encodeNDEFMessage":{"__symbolic":"function"}}}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"moduleName":null,"summaries":[{"symbol":{"__symbol":0,"members":[]},"metadata":{"__symbolic":"function","parameters":["messages"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"reference","name":"messages"},"right":[]},"member":"map"},"arguments":[{"__symbol":
|
|
1
|
+
{"moduleName":null,"summaries":[{"symbol":{"__symbol":0,"members":[]},"metadata":{"__symbolic":"interface"}},{"symbol":{"__symbol":1,"members":[]},"metadata":{"__symbolic":"function","parameters":["messages"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"reference","name":"messages"},"right":[]},"member":"map"},"arguments":[{"__symbol":2,"members":[]}]}}},{"symbol":{"__symbol":2,"members":[]},"metadata":{"__symbolic":"function"}},{"symbol":{"__symbol":3,"members":[]},"metadata":{"__symbolic":"function","parameters":["ndefRecords"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"reference","name":"ndefRecords"},"right":[]},"member":"map"},"arguments":[{"__symbol":4,"members":[]}]}}},{"symbol":{"__symbol":4,"members":[]},"metadata":{"__symbolic":"function"}}],"symbols":[{"__symbol":0,"name":"NdefParsedRecord","filePath":"./parse-ndef-message"},{"__symbol":1,"name":"parseNdefMessages","filePath":"./parse-ndef-message"},{"__symbol":2,"name":"parseNdefMessage","filePath":"./parse-ndef-message"},{"__symbol":3,"name":"encodeNDEFMessages","filePath":"./parse-ndef-message"},{"__symbol":4,"name":"encodeNDEFMessage","filePath":"./parse-ndef-message"}]}
|