@exxili/capacitor-nfc 0.0.12 → 0.0.13
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 +93 -10
- package/android/src/main/kotlin/com/exxili/capacitornfc/NFCPlugin.kt +33 -4
- package/dist/esm/definitions.d.ts +40 -3
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +29 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/web.d.ts +3 -2
- package/dist/esm/web.js +2 -2
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +29 -11
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +29 -11
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/NFCPlugin/NFCPlugin.swift +35 -9
- package/ios/Sources/NFCPlugin/NFCReader.swift +310 -41
- package/ios/Sources/NFCPlugin/NFCWriter.swift +2 -2
- package/package.json +10 -2
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["var _a, _b;\nimport { registerPlugin } from '@capacitor/core';\nconst NFCPlug = registerPlugin('NFC', {\n web: () => import('./web').then((m) => new m.NFCWeb()),\n});\nexport * from './definitions';\nexport const NFC = {\n isSupported: NFCPlug.isSupported.bind(NFCPlug),\n startScan: NFCPlug.startScan.bind(NFCPlug),\n cancelScan: (_b = (_a = NFCPlug.cancelScan) === null || _a === void 0 ? void 0 : _a.bind(NFCPlug)) !== null && _b !== void 0 ? _b : (async () => {\n /* Android no-op */\n }),\n cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),\n onRead: (func) => {\n NFC.wrapperListeners.push(func);\n // Return unsubscribe function\n return () => {\n NFC.wrapperListeners = NFC.wrapperListeners.filter((l) => l !== func);\n };\n },\n onWrite: (func) => {\n let handle;\n NFCPlug.addListener(`nfcWriteSuccess`, func).then((h) => (handle = h));\n return () => {\n var _a;\n try {\n (_a = handle === null || handle === void 0 ? void 0 : handle.remove) === null || _a === void 0 ? void 0 : _a.call(handle);\n }\n catch (_b) {\n /* empty */\n }\n };\n },\n onError: (errorFn) => {\n let handle;\n NFCPlug.addListener(`nfcError`, errorFn).then((h) => (handle = h));\n return () => {\n var _a;\n try {\n (_a = handle === null || handle === void 0 ? void 0 : handle.remove) === null || _a === void 0 ? void 0 : _a.call(handle);\n }\n catch (_b) {\n /* empty */\n }\n };\n },\n removeAllListeners: (eventName) => {\n NFC.wrapperListeners = [];\n return NFCPlug.removeAllListeners(eventName);\n },\n wrapperListeners: [],\n async writeNDEF(options) {\n var _a;\n // Helper encoders for well-known record types (only applied to string payloads)\n const buildTextPayload = (text, lang = 'en') => {\n const langBytes = Array.from(new TextEncoder().encode(lang));\n const textBytes = Array.from(new TextEncoder().encode(text));\n const status = langBytes.length & 0x3f; // UTF-8 encoding, language length (<= 63)\n return [status, ...langBytes, ...textBytes];\n };\n const buildUriPayload = (uri, prefixCode = 0x00) => {\n const uriBytes = Array.from(new TextEncoder().encode(uri));\n return [prefixCode, ...uriBytes];\n };\n const recordsArray = (_a = options === null || options === void 0 ? void 0 : options.records) !== null && _a !== void 0 ? _a : [];\n if (recordsArray.length === 0)\n throw new Error('At least one NDEF record is required');\n const ndefMessage = {\n records: recordsArray.map((record) => {\n let payload = null;\n if (typeof record.payload === 'string') {\n // Apply spec-compliant formatting only for Well Known Text (T) & URI (U) types.\n if (record.type === 'T') {\n payload = buildTextPayload(record.payload);\n }\n else if (record.type === 'U') {\n payload = buildUriPayload(record.payload);\n }\n else {\n // Generic string: raw UTF-8 bytes (no extra framing)\n payload = Array.from(new TextEncoder().encode(record.payload));\n }\n }\n else if (Array.isArray(record.payload)) {\n // Assume already raw bytes; do NOT modify\n payload = record.payload;\n }\n else if (record.payload instanceof Uint8Array) {\n payload = Array.from(record.payload);\n }\n if (!payload)\n throw new Error('Unsupported payload type');\n return { type: record.type, payload };\n }),\n };\n await NFCPlug.writeNDEF(ndefMessage);\n },\n};\n// Decode a base64 string into a Uint8Array (browser-safe). Existing code used atob already.\nconst decodeBase64ToBytes = (base64Payload) => {\n const bin = atob(base64Payload);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++)\n out[i] = bin.charCodeAt(i);\n return out;\n};\n// Parse NFC Forum \"Text\" (Well Known 'T') records according to spec.\nconst decodeTextRecord = (bytes) => {\n if (bytes.length === 0)\n return '';\n const status = bytes[0];\n const isUTF16 = (status & 0x80) !== 0; // Bit 7 indicates encoding\n const langLength = status & 0x3f; // Bits 0-5 language code length\n if (1 + langLength > bytes.length)\n return ''; // Corrupt\n const textBytes = bytes.slice(1 + langLength);\n try {\n const decoder = new TextDecoder(isUTF16 ? 'utf-16' : 'utf-8');\n return decoder.decode(textBytes);\n }\n catch (_a) {\n // Fallback: naive ASCII\n return Array.from(textBytes)\n .map((b) => String.fromCharCode(b))\n .join('');\n }\n};\n// Basic URI prefix table for Well Known 'U' records (optional convenience)\nconst URI_PREFIX = [\n '',\n 'http://www.',\n 'https://www.',\n 'http://',\n 'https://',\n 'tel:',\n 'mailto:',\n 'ftp://anonymous:anonymous@',\n 'ftp://ftp.',\n 'ftps://',\n 'sftp://',\n 'smb://',\n 'nfs://',\n 'ftp://',\n 'dav://',\n 'news:',\n 'telnet://',\n 'imap:',\n 'rtsp://',\n 'urn:',\n 'pop:',\n 'sip:',\n 'sips:',\n 'tftp:',\n 'btspp://',\n 'btl2cap://',\n 'btgoep://',\n 'tcpobex://',\n 'irdaobex://',\n 'file://',\n 'urn:epc:id:',\n 'urn:epc:tag:',\n 'urn:epc:pat:',\n 'urn:epc:raw:',\n 'urn:epc:',\n 'urn:nfc:',\n];\nconst decodeUriRecord = (bytes) => {\n if (bytes.length === 0)\n return '';\n const prefixIndex = bytes[0];\n const prefix = URI_PREFIX[prefixIndex] || '';\n const remainder = bytes.slice(1);\n try {\n return prefix + new TextDecoder('utf-8').decode(remainder);\n }\n catch (_a) {\n return (prefix +\n Array.from(remainder)\n .map((b) => String.fromCharCode(b))\n .join(''));\n }\n};\nconst toStringPayload = (recordType, bytes) => {\n // Well Known Text\n if (recordType === 'T')\n return decodeTextRecord(bytes);\n // Well Known URI\n if (recordType === 'U')\n return decodeUriRecord(bytes);\n // Default: attempt UTF-8 decode\n try {\n return new TextDecoder('utf-8').decode(bytes);\n }\n catch (_a) {\n return Array.from(bytes)\n .map((c) => String.fromCharCode(c))\n .join('');\n }\n};\nconst mapPayloadTo = (type, data) => {\n return {\n messages: data.messages.map((message) => ({\n records: message.records.map((record) => {\n const bytes = decodeBase64ToBytes(record.payload);\n let payload;\n switch (type) {\n case 'b64':\n payload = record.payload; // original base64 string\n break;\n case 'uint8Array':\n payload = bytes;\n break;\n case 'numberArray':\n payload = Array.from(bytes);\n break;\n case 'string':\n payload = toStringPayload(record.type, bytes);\n break;\n default:\n payload = record.payload;\n }\n return { type: record.type, payload };\n }),\n })),\n tagInfo: data.tagInfo, // Include tag information\n };\n};\nNFCPlug.addListener(`nfcTag`, (data) => {\n const wrappedData = {\n base64() {\n return mapPayloadTo('b64', data);\n },\n string() {\n return mapPayloadTo('string', data);\n },\n uint8Array() {\n return mapPayloadTo('uint8Array', data);\n },\n numberArray() {\n return mapPayloadTo('numberArray', data);\n },\n };\n for (const listener of NFC.wrapperListeners) {\n listener(wrappedData);\n }\n});\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class NFCWeb extends WebPlugin {\n async isSupported() {\n return { supported: false };\n }\n async startScan() {\n throw new Error('NFC is not supported on web');\n }\n async cancelScan() {\n throw new Error('NFC is not supported on web');\n }\n async cancelWriteAndroid() {\n throw new Error('NFC is not supported on web');\n }\n async writeNDEF() {\n throw new Error('NFC is not supported on web');\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["var _a, _b;\nimport { registerPlugin } from '@capacitor/core';\nconst NFCPlug = registerPlugin('NFC', {\n // Explicit .js extension required under node16/nodenext module resolution for emitted ES modules.\n web: () => import('./web.js').then((m) => new m.NFCWeb()),\n});\nexport * from './definitions.js';\nexport const NFC = {\n isSupported: NFCPlug.isSupported.bind(NFCPlug),\n startScan: (options) => {\n const normalizedOptions = {};\n if (options) {\n for (const [key, value] of Object.entries(options)) {\n if (value !== undefined && value !== null) {\n normalizedOptions[key] = value;\n }\n }\n }\n return NFCPlug.startScan(normalizedOptions);\n },\n cancelScan: (_b = (_a = NFCPlug.cancelScan) === null || _a === void 0 ? void 0 : _a.bind(NFCPlug)) !== null && _b !== void 0 ? _b : (async () => {\n /* Android no-op */\n }),\n cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),\n onRead: (func) => {\n NFC.wrapperListeners.push(func);\n // Return unsubscribe function\n return () => {\n NFC.wrapperListeners = NFC.wrapperListeners.filter((l) => l !== func);\n };\n },\n onWrite: (func) => {\n let handle;\n NFCPlug.addListener(`nfcWriteSuccess`, func).then((h) => (handle = h));\n return () => {\n var _a;\n try {\n (_a = handle === null || handle === void 0 ? void 0 : handle.remove) === null || _a === void 0 ? void 0 : _a.call(handle);\n }\n catch (_b) {\n /* empty */\n }\n };\n },\n onError: (errorFn) => {\n let handle;\n NFCPlug.addListener(`nfcError`, errorFn).then((h) => (handle = h));\n return () => {\n var _a;\n try {\n (_a = handle === null || handle === void 0 ? void 0 : handle.remove) === null || _a === void 0 ? void 0 : _a.call(handle);\n }\n catch (_b) {\n /* empty */\n }\n };\n },\n removeAllListeners: (eventName) => {\n NFC.wrapperListeners = [];\n return NFCPlug.removeAllListeners(eventName);\n },\n wrapperListeners: [],\n async writeNDEF(options) {\n var _a;\n // Helper encoders for well-known record types (only applied to string payloads)\n const buildTextPayload = (text, lang = 'en') => {\n const langBytes = Array.from(new TextEncoder().encode(lang));\n const textBytes = Array.from(new TextEncoder().encode(text));\n const status = langBytes.length & 0x3f; // UTF-8 encoding, language length (<= 63)\n return [status, ...langBytes, ...textBytes];\n };\n const buildUriPayload = (uri, prefixCode = 0x00) => {\n const uriBytes = Array.from(new TextEncoder().encode(uri));\n return [prefixCode, ...uriBytes];\n };\n const recordsArray = (_a = options === null || options === void 0 ? void 0 : options.records) !== null && _a !== void 0 ? _a : [];\n if (recordsArray.length === 0)\n throw new Error('At least one NDEF record is required');\n const isRawMode = (options === null || options === void 0 ? void 0 : options.rawMode) === true;\n const ndefMessage = {\n records: recordsArray.map((record) => {\n let payload = null;\n if (typeof record.payload === 'string') {\n if (isRawMode) {\n // Raw mode: write string payloads as UTF-8 bytes without any framing\n payload = Array.from(new TextEncoder().encode(record.payload));\n }\n else {\n // Apply spec-compliant formatting only for Well Known Text (T) & URI (U) types.\n if (record.type === 'T') {\n payload = buildTextPayload(record.payload);\n }\n else if (record.type === 'U') {\n payload = buildUriPayload(record.payload);\n }\n else {\n // Generic string: raw UTF-8 bytes (no extra framing)\n payload = Array.from(new TextEncoder().encode(record.payload));\n }\n }\n }\n else if (Array.isArray(record.payload)) {\n // Assume already raw bytes; do NOT modify\n payload = record.payload;\n }\n else if (record.payload instanceof Uint8Array) {\n payload = Array.from(record.payload);\n }\n if (!payload)\n throw new Error('Unsupported payload type');\n return { type: record.type, payload };\n }),\n };\n await NFCPlug.writeNDEF(ndefMessage);\n },\n};\n// Decode a base64 string into a Uint8Array (browser-safe). Existing code used atob already.\nconst decodeBase64ToBytes = (base64Payload) => {\n const bin = atob(base64Payload);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++)\n out[i] = bin.charCodeAt(i);\n return out;\n};\n// Parse NFC Forum \"Text\" (Well Known 'T') records according to spec.\nconst decodeTextRecord = (bytes) => {\n if (bytes.length === 0)\n return '';\n const status = bytes[0];\n const isUTF16 = (status & 0x80) !== 0; // Bit 7 indicates encoding\n const langLength = status & 0x3f; // Bits 0-5 language code length\n if (1 + langLength > bytes.length)\n return ''; // Corrupt\n const textBytes = bytes.slice(1 + langLength);\n try {\n const decoder = new TextDecoder(isUTF16 ? 'utf-16' : 'utf-8');\n return decoder.decode(textBytes);\n }\n catch (_a) {\n // Fallback: naive ASCII\n return Array.from(textBytes)\n .map((b) => String.fromCharCode(b))\n .join('');\n }\n};\n// Basic URI prefix table for Well Known 'U' records (optional convenience)\nconst URI_PREFIX = [\n '',\n 'http://www.',\n 'https://www.',\n 'http://',\n 'https://',\n 'tel:',\n 'mailto:',\n 'ftp://anonymous:anonymous@',\n 'ftp://ftp.',\n 'ftps://',\n 'sftp://',\n 'smb://',\n 'nfs://',\n 'ftp://',\n 'dav://',\n 'news:',\n 'telnet://',\n 'imap:',\n 'rtsp://',\n 'urn:',\n 'pop:',\n 'sip:',\n 'sips:',\n 'tftp:',\n 'btspp://',\n 'btl2cap://',\n 'btgoep://',\n 'tcpobex://',\n 'irdaobex://',\n 'file://',\n 'urn:epc:id:',\n 'urn:epc:tag:',\n 'urn:epc:pat:',\n 'urn:epc:raw:',\n 'urn:epc:',\n 'urn:nfc:',\n];\nconst decodeUriRecord = (bytes) => {\n if (bytes.length === 0)\n return '';\n const prefixIndex = bytes[0];\n const prefix = URI_PREFIX[prefixIndex] || '';\n const remainder = bytes.slice(1);\n try {\n return prefix + new TextDecoder('utf-8').decode(remainder);\n }\n catch (_a) {\n return (prefix +\n Array.from(remainder)\n .map((b) => String.fromCharCode(b))\n .join(''));\n }\n};\nconst toStringPayload = (recordType, bytes) => {\n // Well Known Text\n if (recordType === 'T')\n return decodeTextRecord(bytes);\n // Well Known URI\n if (recordType === 'U')\n return decodeUriRecord(bytes);\n // Default: attempt UTF-8 decode\n try {\n return new TextDecoder('utf-8').decode(bytes);\n }\n catch (_a) {\n return Array.from(bytes)\n .map((c) => String.fromCharCode(c))\n .join('');\n }\n};\nconst mapPayloadTo = (type, data) => {\n return {\n messages: data.messages.map((message) => ({\n records: message.records.map((record) => {\n const bytes = decodeBase64ToBytes(record.payload);\n let payload;\n switch (type) {\n case 'b64':\n payload = record.payload; // original base64 string\n break;\n case 'uint8Array':\n payload = bytes;\n break;\n case 'numberArray':\n payload = Array.from(bytes);\n break;\n case 'string':\n payload = toStringPayload(record.type, bytes);\n break;\n default:\n payload = record.payload;\n }\n return { type: record.type, payload };\n }),\n })),\n tagInfo: data.tagInfo, // Include tag information\n };\n};\nNFCPlug.addListener(`nfcTag`, (data) => {\n const wrappedData = {\n base64() {\n return mapPayloadTo('b64', data);\n },\n string() {\n return mapPayloadTo('string', data);\n },\n uint8Array() {\n return mapPayloadTo('uint8Array', data);\n },\n numberArray() {\n return mapPayloadTo('numberArray', data);\n },\n };\n for (const listener of NFC.wrapperListeners) {\n listener(wrappedData);\n }\n});\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class NFCWeb extends WebPlugin {\n async isSupported() {\n return { supported: false };\n }\n async startScan(_options) {\n throw new Error('NFC is not supported on web');\n }\n async cancelScan() {\n throw new Error('NFC is not supported on web');\n }\n async cancelWriteAndroid() {\n throw new Error('NFC is not supported on web');\n }\n async writeNDEF(_options) {\n throw new Error('NFC is not supported on web');\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -3,11 +3,22 @@ var capacitorNFC = (function (exports, core) {
|
|
|
3
3
|
|
|
4
4
|
var _a, _b;
|
|
5
5
|
const NFCPlug = core.registerPlugin('NFC', {
|
|
6
|
+
// Explicit .js extension required under node16/nodenext module resolution for emitted ES modules.
|
|
6
7
|
web: () => Promise.resolve().then(function () { return web; }).then((m) => new m.NFCWeb()),
|
|
7
8
|
});
|
|
8
9
|
const NFC = {
|
|
9
10
|
isSupported: NFCPlug.isSupported.bind(NFCPlug),
|
|
10
|
-
startScan:
|
|
11
|
+
startScan: (options) => {
|
|
12
|
+
const normalizedOptions = {};
|
|
13
|
+
if (options) {
|
|
14
|
+
for (const [key, value] of Object.entries(options)) {
|
|
15
|
+
if (value !== undefined && value !== null) {
|
|
16
|
+
normalizedOptions[key] = value;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return NFCPlug.startScan(normalizedOptions);
|
|
21
|
+
},
|
|
11
22
|
cancelScan: (_b = (_a = NFCPlug.cancelScan) === null || _a === void 0 ? void 0 : _a.bind(NFCPlug)) !== null && _b !== void 0 ? _b : (async () => {
|
|
12
23
|
/* Android no-op */
|
|
13
24
|
}),
|
|
@@ -66,20 +77,27 @@ var capacitorNFC = (function (exports, core) {
|
|
|
66
77
|
const recordsArray = (_a = options === null || options === void 0 ? void 0 : options.records) !== null && _a !== void 0 ? _a : [];
|
|
67
78
|
if (recordsArray.length === 0)
|
|
68
79
|
throw new Error('At least one NDEF record is required');
|
|
80
|
+
const isRawMode = (options === null || options === void 0 ? void 0 : options.rawMode) === true;
|
|
69
81
|
const ndefMessage = {
|
|
70
82
|
records: recordsArray.map((record) => {
|
|
71
83
|
let payload = null;
|
|
72
84
|
if (typeof record.payload === 'string') {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
payload =
|
|
76
|
-
}
|
|
77
|
-
else if (record.type === 'U') {
|
|
78
|
-
payload = buildUriPayload(record.payload);
|
|
85
|
+
if (isRawMode) {
|
|
86
|
+
// Raw mode: write string payloads as UTF-8 bytes without any framing
|
|
87
|
+
payload = Array.from(new TextEncoder().encode(record.payload));
|
|
79
88
|
}
|
|
80
89
|
else {
|
|
81
|
-
//
|
|
82
|
-
|
|
90
|
+
// Apply spec-compliant formatting only for Well Known Text (T) & URI (U) types.
|
|
91
|
+
if (record.type === 'T') {
|
|
92
|
+
payload = buildTextPayload(record.payload);
|
|
93
|
+
}
|
|
94
|
+
else if (record.type === 'U') {
|
|
95
|
+
payload = buildUriPayload(record.payload);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// Generic string: raw UTF-8 bytes (no extra framing)
|
|
99
|
+
payload = Array.from(new TextEncoder().encode(record.payload));
|
|
100
|
+
}
|
|
83
101
|
}
|
|
84
102
|
}
|
|
85
103
|
else if (Array.isArray(record.payload)) {
|
|
@@ -250,7 +268,7 @@ var capacitorNFC = (function (exports, core) {
|
|
|
250
268
|
async isSupported() {
|
|
251
269
|
return { supported: false };
|
|
252
270
|
}
|
|
253
|
-
async startScan() {
|
|
271
|
+
async startScan(_options) {
|
|
254
272
|
throw new Error('NFC is not supported on web');
|
|
255
273
|
}
|
|
256
274
|
async cancelScan() {
|
|
@@ -259,7 +277,7 @@ var capacitorNFC = (function (exports, core) {
|
|
|
259
277
|
async cancelWriteAndroid() {
|
|
260
278
|
throw new Error('NFC is not supported on web');
|
|
261
279
|
}
|
|
262
|
-
async writeNDEF() {
|
|
280
|
+
async writeNDEF(_options) {
|
|
263
281
|
throw new Error('NFC is not supported on web');
|
|
264
282
|
}
|
|
265
283
|
}
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["var _a, _b;\nimport { registerPlugin } from '@capacitor/core';\nconst NFCPlug = registerPlugin('NFC', {\n web: () => import('./web').then((m) => new m.NFCWeb()),\n});\nexport * from './definitions';\nexport const NFC = {\n isSupported: NFCPlug.isSupported.bind(NFCPlug),\n startScan: NFCPlug.startScan.bind(NFCPlug),\n cancelScan: (_b = (_a = NFCPlug.cancelScan) === null || _a === void 0 ? void 0 : _a.bind(NFCPlug)) !== null && _b !== void 0 ? _b : (async () => {\n /* Android no-op */\n }),\n cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),\n onRead: (func) => {\n NFC.wrapperListeners.push(func);\n // Return unsubscribe function\n return () => {\n NFC.wrapperListeners = NFC.wrapperListeners.filter((l) => l !== func);\n };\n },\n onWrite: (func) => {\n let handle;\n NFCPlug.addListener(`nfcWriteSuccess`, func).then((h) => (handle = h));\n return () => {\n var _a;\n try {\n (_a = handle === null || handle === void 0 ? void 0 : handle.remove) === null || _a === void 0 ? void 0 : _a.call(handle);\n }\n catch (_b) {\n /* empty */\n }\n };\n },\n onError: (errorFn) => {\n let handle;\n NFCPlug.addListener(`nfcError`, errorFn).then((h) => (handle = h));\n return () => {\n var _a;\n try {\n (_a = handle === null || handle === void 0 ? void 0 : handle.remove) === null || _a === void 0 ? void 0 : _a.call(handle);\n }\n catch (_b) {\n /* empty */\n }\n };\n },\n removeAllListeners: (eventName) => {\n NFC.wrapperListeners = [];\n return NFCPlug.removeAllListeners(eventName);\n },\n wrapperListeners: [],\n async writeNDEF(options) {\n var _a;\n // Helper encoders for well-known record types (only applied to string payloads)\n const buildTextPayload = (text, lang = 'en') => {\n const langBytes = Array.from(new TextEncoder().encode(lang));\n const textBytes = Array.from(new TextEncoder().encode(text));\n const status = langBytes.length & 0x3f; // UTF-8 encoding, language length (<= 63)\n return [status, ...langBytes, ...textBytes];\n };\n const buildUriPayload = (uri, prefixCode = 0x00) => {\n const uriBytes = Array.from(new TextEncoder().encode(uri));\n return [prefixCode, ...uriBytes];\n };\n const recordsArray = (_a = options === null || options === void 0 ? void 0 : options.records) !== null && _a !== void 0 ? _a : [];\n if (recordsArray.length === 0)\n throw new Error('At least one NDEF record is required');\n const ndefMessage = {\n records: recordsArray.map((record) => {\n let payload = null;\n if (typeof record.payload === 'string') {\n // Apply spec-compliant formatting only for Well Known Text (T) & URI (U) types.\n if (record.type === 'T') {\n payload = buildTextPayload(record.payload);\n }\n else if (record.type === 'U') {\n payload = buildUriPayload(record.payload);\n }\n else {\n // Generic string: raw UTF-8 bytes (no extra framing)\n payload = Array.from(new TextEncoder().encode(record.payload));\n }\n }\n else if (Array.isArray(record.payload)) {\n // Assume already raw bytes; do NOT modify\n payload = record.payload;\n }\n else if (record.payload instanceof Uint8Array) {\n payload = Array.from(record.payload);\n }\n if (!payload)\n throw new Error('Unsupported payload type');\n return { type: record.type, payload };\n }),\n };\n await NFCPlug.writeNDEF(ndefMessage);\n },\n};\n// Decode a base64 string into a Uint8Array (browser-safe). Existing code used atob already.\nconst decodeBase64ToBytes = (base64Payload) => {\n const bin = atob(base64Payload);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++)\n out[i] = bin.charCodeAt(i);\n return out;\n};\n// Parse NFC Forum \"Text\" (Well Known 'T') records according to spec.\nconst decodeTextRecord = (bytes) => {\n if (bytes.length === 0)\n return '';\n const status = bytes[0];\n const isUTF16 = (status & 0x80) !== 0; // Bit 7 indicates encoding\n const langLength = status & 0x3f; // Bits 0-5 language code length\n if (1 + langLength > bytes.length)\n return ''; // Corrupt\n const textBytes = bytes.slice(1 + langLength);\n try {\n const decoder = new TextDecoder(isUTF16 ? 'utf-16' : 'utf-8');\n return decoder.decode(textBytes);\n }\n catch (_a) {\n // Fallback: naive ASCII\n return Array.from(textBytes)\n .map((b) => String.fromCharCode(b))\n .join('');\n }\n};\n// Basic URI prefix table for Well Known 'U' records (optional convenience)\nconst URI_PREFIX = [\n '',\n 'http://www.',\n 'https://www.',\n 'http://',\n 'https://',\n 'tel:',\n 'mailto:',\n 'ftp://anonymous:anonymous@',\n 'ftp://ftp.',\n 'ftps://',\n 'sftp://',\n 'smb://',\n 'nfs://',\n 'ftp://',\n 'dav://',\n 'news:',\n 'telnet://',\n 'imap:',\n 'rtsp://',\n 'urn:',\n 'pop:',\n 'sip:',\n 'sips:',\n 'tftp:',\n 'btspp://',\n 'btl2cap://',\n 'btgoep://',\n 'tcpobex://',\n 'irdaobex://',\n 'file://',\n 'urn:epc:id:',\n 'urn:epc:tag:',\n 'urn:epc:pat:',\n 'urn:epc:raw:',\n 'urn:epc:',\n 'urn:nfc:',\n];\nconst decodeUriRecord = (bytes) => {\n if (bytes.length === 0)\n return '';\n const prefixIndex = bytes[0];\n const prefix = URI_PREFIX[prefixIndex] || '';\n const remainder = bytes.slice(1);\n try {\n return prefix + new TextDecoder('utf-8').decode(remainder);\n }\n catch (_a) {\n return (prefix +\n Array.from(remainder)\n .map((b) => String.fromCharCode(b))\n .join(''));\n }\n};\nconst toStringPayload = (recordType, bytes) => {\n // Well Known Text\n if (recordType === 'T')\n return decodeTextRecord(bytes);\n // Well Known URI\n if (recordType === 'U')\n return decodeUriRecord(bytes);\n // Default: attempt UTF-8 decode\n try {\n return new TextDecoder('utf-8').decode(bytes);\n }\n catch (_a) {\n return Array.from(bytes)\n .map((c) => String.fromCharCode(c))\n .join('');\n }\n};\nconst mapPayloadTo = (type, data) => {\n return {\n messages: data.messages.map((message) => ({\n records: message.records.map((record) => {\n const bytes = decodeBase64ToBytes(record.payload);\n let payload;\n switch (type) {\n case 'b64':\n payload = record.payload; // original base64 string\n break;\n case 'uint8Array':\n payload = bytes;\n break;\n case 'numberArray':\n payload = Array.from(bytes);\n break;\n case 'string':\n payload = toStringPayload(record.type, bytes);\n break;\n default:\n payload = record.payload;\n }\n return { type: record.type, payload };\n }),\n })),\n tagInfo: data.tagInfo, // Include tag information\n };\n};\nNFCPlug.addListener(`nfcTag`, (data) => {\n const wrappedData = {\n base64() {\n return mapPayloadTo('b64', data);\n },\n string() {\n return mapPayloadTo('string', data);\n },\n uint8Array() {\n return mapPayloadTo('uint8Array', data);\n },\n numberArray() {\n return mapPayloadTo('numberArray', data);\n },\n };\n for (const listener of NFC.wrapperListeners) {\n listener(wrappedData);\n }\n});\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class NFCWeb extends WebPlugin {\n async isSupported() {\n return { supported: false };\n }\n async startScan() {\n throw new Error('NFC is not supported on web');\n }\n async cancelScan() {\n throw new Error('NFC is not supported on web');\n }\n async cancelWriteAndroid() {\n throw new Error('NFC is not supported on web');\n }\n async writeNDEF() {\n throw new Error('NFC is not supported on web');\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["var _a, _b;\nimport { registerPlugin } from '@capacitor/core';\nconst NFCPlug = registerPlugin('NFC', {\n // Explicit .js extension required under node16/nodenext module resolution for emitted ES modules.\n web: () => import('./web.js').then((m) => new m.NFCWeb()),\n});\nexport * from './definitions.js';\nexport const NFC = {\n isSupported: NFCPlug.isSupported.bind(NFCPlug),\n startScan: (options) => {\n const normalizedOptions = {};\n if (options) {\n for (const [key, value] of Object.entries(options)) {\n if (value !== undefined && value !== null) {\n normalizedOptions[key] = value;\n }\n }\n }\n return NFCPlug.startScan(normalizedOptions);\n },\n cancelScan: (_b = (_a = NFCPlug.cancelScan) === null || _a === void 0 ? void 0 : _a.bind(NFCPlug)) !== null && _b !== void 0 ? _b : (async () => {\n /* Android no-op */\n }),\n cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),\n onRead: (func) => {\n NFC.wrapperListeners.push(func);\n // Return unsubscribe function\n return () => {\n NFC.wrapperListeners = NFC.wrapperListeners.filter((l) => l !== func);\n };\n },\n onWrite: (func) => {\n let handle;\n NFCPlug.addListener(`nfcWriteSuccess`, func).then((h) => (handle = h));\n return () => {\n var _a;\n try {\n (_a = handle === null || handle === void 0 ? void 0 : handle.remove) === null || _a === void 0 ? void 0 : _a.call(handle);\n }\n catch (_b) {\n /* empty */\n }\n };\n },\n onError: (errorFn) => {\n let handle;\n NFCPlug.addListener(`nfcError`, errorFn).then((h) => (handle = h));\n return () => {\n var _a;\n try {\n (_a = handle === null || handle === void 0 ? void 0 : handle.remove) === null || _a === void 0 ? void 0 : _a.call(handle);\n }\n catch (_b) {\n /* empty */\n }\n };\n },\n removeAllListeners: (eventName) => {\n NFC.wrapperListeners = [];\n return NFCPlug.removeAllListeners(eventName);\n },\n wrapperListeners: [],\n async writeNDEF(options) {\n var _a;\n // Helper encoders for well-known record types (only applied to string payloads)\n const buildTextPayload = (text, lang = 'en') => {\n const langBytes = Array.from(new TextEncoder().encode(lang));\n const textBytes = Array.from(new TextEncoder().encode(text));\n const status = langBytes.length & 0x3f; // UTF-8 encoding, language length (<= 63)\n return [status, ...langBytes, ...textBytes];\n };\n const buildUriPayload = (uri, prefixCode = 0x00) => {\n const uriBytes = Array.from(new TextEncoder().encode(uri));\n return [prefixCode, ...uriBytes];\n };\n const recordsArray = (_a = options === null || options === void 0 ? void 0 : options.records) !== null && _a !== void 0 ? _a : [];\n if (recordsArray.length === 0)\n throw new Error('At least one NDEF record is required');\n const isRawMode = (options === null || options === void 0 ? void 0 : options.rawMode) === true;\n const ndefMessage = {\n records: recordsArray.map((record) => {\n let payload = null;\n if (typeof record.payload === 'string') {\n if (isRawMode) {\n // Raw mode: write string payloads as UTF-8 bytes without any framing\n payload = Array.from(new TextEncoder().encode(record.payload));\n }\n else {\n // Apply spec-compliant formatting only for Well Known Text (T) & URI (U) types.\n if (record.type === 'T') {\n payload = buildTextPayload(record.payload);\n }\n else if (record.type === 'U') {\n payload = buildUriPayload(record.payload);\n }\n else {\n // Generic string: raw UTF-8 bytes (no extra framing)\n payload = Array.from(new TextEncoder().encode(record.payload));\n }\n }\n }\n else if (Array.isArray(record.payload)) {\n // Assume already raw bytes; do NOT modify\n payload = record.payload;\n }\n else if (record.payload instanceof Uint8Array) {\n payload = Array.from(record.payload);\n }\n if (!payload)\n throw new Error('Unsupported payload type');\n return { type: record.type, payload };\n }),\n };\n await NFCPlug.writeNDEF(ndefMessage);\n },\n};\n// Decode a base64 string into a Uint8Array (browser-safe). Existing code used atob already.\nconst decodeBase64ToBytes = (base64Payload) => {\n const bin = atob(base64Payload);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++)\n out[i] = bin.charCodeAt(i);\n return out;\n};\n// Parse NFC Forum \"Text\" (Well Known 'T') records according to spec.\nconst decodeTextRecord = (bytes) => {\n if (bytes.length === 0)\n return '';\n const status = bytes[0];\n const isUTF16 = (status & 0x80) !== 0; // Bit 7 indicates encoding\n const langLength = status & 0x3f; // Bits 0-5 language code length\n if (1 + langLength > bytes.length)\n return ''; // Corrupt\n const textBytes = bytes.slice(1 + langLength);\n try {\n const decoder = new TextDecoder(isUTF16 ? 'utf-16' : 'utf-8');\n return decoder.decode(textBytes);\n }\n catch (_a) {\n // Fallback: naive ASCII\n return Array.from(textBytes)\n .map((b) => String.fromCharCode(b))\n .join('');\n }\n};\n// Basic URI prefix table for Well Known 'U' records (optional convenience)\nconst URI_PREFIX = [\n '',\n 'http://www.',\n 'https://www.',\n 'http://',\n 'https://',\n 'tel:',\n 'mailto:',\n 'ftp://anonymous:anonymous@',\n 'ftp://ftp.',\n 'ftps://',\n 'sftp://',\n 'smb://',\n 'nfs://',\n 'ftp://',\n 'dav://',\n 'news:',\n 'telnet://',\n 'imap:',\n 'rtsp://',\n 'urn:',\n 'pop:',\n 'sip:',\n 'sips:',\n 'tftp:',\n 'btspp://',\n 'btl2cap://',\n 'btgoep://',\n 'tcpobex://',\n 'irdaobex://',\n 'file://',\n 'urn:epc:id:',\n 'urn:epc:tag:',\n 'urn:epc:pat:',\n 'urn:epc:raw:',\n 'urn:epc:',\n 'urn:nfc:',\n];\nconst decodeUriRecord = (bytes) => {\n if (bytes.length === 0)\n return '';\n const prefixIndex = bytes[0];\n const prefix = URI_PREFIX[prefixIndex] || '';\n const remainder = bytes.slice(1);\n try {\n return prefix + new TextDecoder('utf-8').decode(remainder);\n }\n catch (_a) {\n return (prefix +\n Array.from(remainder)\n .map((b) => String.fromCharCode(b))\n .join(''));\n }\n};\nconst toStringPayload = (recordType, bytes) => {\n // Well Known Text\n if (recordType === 'T')\n return decodeTextRecord(bytes);\n // Well Known URI\n if (recordType === 'U')\n return decodeUriRecord(bytes);\n // Default: attempt UTF-8 decode\n try {\n return new TextDecoder('utf-8').decode(bytes);\n }\n catch (_a) {\n return Array.from(bytes)\n .map((c) => String.fromCharCode(c))\n .join('');\n }\n};\nconst mapPayloadTo = (type, data) => {\n return {\n messages: data.messages.map((message) => ({\n records: message.records.map((record) => {\n const bytes = decodeBase64ToBytes(record.payload);\n let payload;\n switch (type) {\n case 'b64':\n payload = record.payload; // original base64 string\n break;\n case 'uint8Array':\n payload = bytes;\n break;\n case 'numberArray':\n payload = Array.from(bytes);\n break;\n case 'string':\n payload = toStringPayload(record.type, bytes);\n break;\n default:\n payload = record.payload;\n }\n return { type: record.type, payload };\n }),\n })),\n tagInfo: data.tagInfo, // Include tag information\n };\n};\nNFCPlug.addListener(`nfcTag`, (data) => {\n const wrappedData = {\n base64() {\n return mapPayloadTo('b64', data);\n },\n string() {\n return mapPayloadTo('string', data);\n },\n uint8Array() {\n return mapPayloadTo('uint8Array', data);\n },\n numberArray() {\n return mapPayloadTo('numberArray', data);\n },\n };\n for (const listener of NFC.wrapperListeners) {\n listener(wrappedData);\n }\n});\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class NFCWeb extends WebPlugin {\n async isSupported() {\n return { supported: false };\n }\n async startScan(_options) {\n throw new Error('NFC is not supported on web');\n }\n async cancelScan() {\n throw new Error('NFC is not supported on web');\n }\n async cancelWriteAndroid() {\n throw new Error('NFC is not supported on web');\n }\n async writeNDEF(_options) {\n throw new Error('NFC is not supported on web');\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
|
@@ -27,9 +27,18 @@ public class NFCPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
27
27
|
|
|
28
28
|
@objc func startScan(_ call: CAPPluginCall) {
|
|
29
29
|
print("startScan called")
|
|
30
|
+
if let preferredMode = call.getString("mode") {
|
|
31
|
+
reader.setPreferredReaderMode(preferredMode)
|
|
32
|
+
} else if call.getBool("forceFull") == true {
|
|
33
|
+
reader.setPreferredReaderMode("full")
|
|
34
|
+
} else if call.getBool("forceCompat") == true {
|
|
35
|
+
reader.setPreferredReaderMode("compat")
|
|
36
|
+
} else if call.getBool("forceNDEF") == true {
|
|
37
|
+
reader.setPreferredReaderMode("ndef")
|
|
38
|
+
}
|
|
30
39
|
reader.onNDEFMessageReceived = { messages, tagInfo in
|
|
31
40
|
var ndefMessages = [[String: Any]]()
|
|
32
|
-
|
|
41
|
+
|
|
33
42
|
if messages.isEmpty {
|
|
34
43
|
// If no NDEF messages but we have tag info, create a fallback record with the UID
|
|
35
44
|
if let tagInfo = tagInfo, let uid = tagInfo["uid"] as? String {
|
|
@@ -48,7 +57,7 @@ public class NFCPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
48
57
|
for record in message.records {
|
|
49
58
|
let recordType = String(data: record.type, encoding: .utf8) ?? ""
|
|
50
59
|
let payloadData = record.payload.base64EncodedString()
|
|
51
|
-
|
|
60
|
+
|
|
52
61
|
records.append([
|
|
53
62
|
"type": recordType,
|
|
54
63
|
"payload": payloadData
|
|
@@ -59,12 +68,12 @@ public class NFCPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
59
68
|
])
|
|
60
69
|
}
|
|
61
70
|
}
|
|
62
|
-
|
|
71
|
+
|
|
63
72
|
var response: [String: Any] = ["messages": ndefMessages]
|
|
64
73
|
if let tagInfo = tagInfo {
|
|
65
74
|
response["tagInfo"] = tagInfo
|
|
66
75
|
}
|
|
67
|
-
|
|
76
|
+
|
|
68
77
|
self.notifyListeners("nfcTag", data: response)
|
|
69
78
|
}
|
|
70
79
|
|
|
@@ -96,26 +105,43 @@ public class NFCPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
96
105
|
var ndefRecords = [NFCNDEFPayload]()
|
|
97
106
|
for recordData in recordsData {
|
|
98
107
|
guard let type = recordData["type"] as? String,
|
|
99
|
-
let payload = recordData["payload"] as? [NSNumber]
|
|
100
|
-
let typeData = type.data(using: .utf8)
|
|
108
|
+
let payload = recordData["payload"] as? [NSNumber]
|
|
101
109
|
else {
|
|
102
110
|
print("Skipping record due to missing or invalid record")
|
|
103
111
|
continue
|
|
104
112
|
}
|
|
105
|
-
|
|
113
|
+
|
|
106
114
|
guard let payloadArray = payload as [NSNumber]? else {
|
|
107
115
|
print("Skipping record due to missing or invalid 'payload' (expected array of numbers)")
|
|
108
116
|
continue
|
|
109
117
|
}
|
|
110
|
-
|
|
118
|
+
|
|
111
119
|
var payloadBytes = [UInt8]()
|
|
112
120
|
for number in payloadArray {
|
|
113
121
|
payloadBytes.append(number.uint8Value)
|
|
114
122
|
}
|
|
115
123
|
let payloadData = Data(payloadBytes)
|
|
116
124
|
|
|
125
|
+
let format: NFCTypeNameFormat
|
|
126
|
+
let typeEncoding: String.Encoding
|
|
127
|
+
if type == "T" || type == "U" {
|
|
128
|
+
format = .nfcWellKnown
|
|
129
|
+
typeEncoding = .utf8
|
|
130
|
+
} else if type.contains("/") {
|
|
131
|
+
format = .media
|
|
132
|
+
typeEncoding = .ascii
|
|
133
|
+
} else {
|
|
134
|
+
format = .nfcExternal
|
|
135
|
+
typeEncoding = .utf8
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
guard let typeData = type.data(using: typeEncoding) else {
|
|
139
|
+
print("Skipping record due to unsupported type encoding")
|
|
140
|
+
continue
|
|
141
|
+
}
|
|
142
|
+
|
|
117
143
|
let ndefRecord = NFCNDEFPayload(
|
|
118
|
-
format:
|
|
144
|
+
format: format,
|
|
119
145
|
type: typeData,
|
|
120
146
|
identifier: Data(),
|
|
121
147
|
payload: payloadData
|