@exxili/capacitor-nfc 0.0.13 → 0.0.14
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/ExxiliCapacitorNfc.podspec +17 -17
- package/Package.swift +28 -28
- package/README.md +597 -595
- package/android/build.gradle +67 -67
- package/android/src/main/AndroidManifest.xml +2 -2
- package/android/src/main/kotlin/com/exxili/capacitornfc/MainActivity.kt +11 -11
- package/android/src/main/kotlin/com/exxili/capacitornfc/NFCPlugin.kt +492 -464
- package/dist/esm/definitions.d.ts +13 -0
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/web.d.ts +4 -1
- package/dist/esm/web.js +3 -0
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +4 -0
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +4 -0
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/NFCPlugin/NFCPlugin.swift +181 -169
- package/ios/Sources/NFCPlugin/NFCReader.swift +507 -507
- package/ios/Sources/NFCPlugin/NFCWriter.swift +89 -89
- package/ios/Tests/NFCPluginTests/NFCPluginTests.swift +15 -15
- package/package.json +90 -90
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import type { PluginListenerHandle } from '@capacitor/core';
|
|
2
2
|
export type PayloadType = string | number[] | Uint8Array;
|
|
3
|
+
/**
|
|
4
|
+
* NFC status values.
|
|
5
|
+
* - "ENABLED" means NFC is available and enabled on the device.
|
|
6
|
+
* - "DISABLED" means NFC is available but currently disabled (android only).
|
|
7
|
+
* - "NOT_SUPPORTED" means NFC is not available on this device.
|
|
8
|
+
*/
|
|
9
|
+
export type NfcStatus = 'ENABLED' | 'DISABLED' | 'NOT_SUPPORTED';
|
|
3
10
|
export interface StartScanOptions {
|
|
4
11
|
/**
|
|
5
12
|
* Select the native reader strategy.
|
|
@@ -64,6 +71,12 @@ export interface NFCPluginBasic {
|
|
|
64
71
|
* @param eventName The name of the event.
|
|
65
72
|
*/
|
|
66
73
|
removeAllListeners(eventName: 'nfcTag' | 'nfcError'): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Gets the current NFC status on the device.
|
|
76
|
+
*/
|
|
77
|
+
getStatus(): Promise<{
|
|
78
|
+
status: NfcStatus;
|
|
79
|
+
}>;
|
|
67
80
|
}
|
|
68
81
|
export interface NDEFMessages<T extends PayloadType = string> {
|
|
69
82
|
messages: NDEFMessage<T>[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PluginListenerHandle } from '@capacitor/core';\n\n// Payload from a new NFC scan is a base64 encoded string\nexport type PayloadType = string | number[] | Uint8Array;\n\nexport interface StartScanOptions {\n /**\n * Select the native reader strategy.\n * - `auto` (default): attempt advanced tag session first, downgrade automatically on entitlement failures.\n * - `full`: force the advanced tag session (resets any cached fallback state).\n * - `compat`: force the compatibility tag session (ISO14443-only, avoids advanced entitlements).\n * - `ndef`: skip tag session entirely and use the legacy NDEF reader.\n */\n mode?: 'auto' | 'full' | 'compat' | 'ndef';\n /**\n * Backwards-compatible hints for older app code. When true, they map to `mode` selections above.\n */\n forceFull?: boolean;\n forceCompat?: boolean;\n forceNDEF?: boolean;\n}\n\nexport interface NFCPluginBasic {\n /**\n * Checks if NFC is supported on the device. Returns true on all iOS devices, and checks for support on Android.\n */\n isSupported(): Promise<{ supported: boolean }>;\n\n /**\n * Begins listening for NFC tags.\n * @param options Optional tuning parameters for native reader behavior.\n */\n startScan(options?: StartScanOptions): Promise<void>;\n\n /**\n * Cancels an ongoing scan session (iOS only currently; no-op / rejection on Android).\n */\n cancelScan(): Promise<void>;\n\n /**\n * Writes an NDEF message to an NFC tag.\n * @param options The NDEF message to write.\n */\n writeNDEF<T extends PayloadType = number[]>(options: NDEFWriteOptions<T>): Promise<void>;\n\n /**\n * Cancels writeNDEF on Android (exits \"write mode\").\n */\n cancelWriteAndroid(): Promise<void>;\n\n /**\n * Adds a listener for NFC tag detection events.\n * @param eventName The name of the event ('nfcTag').\n * @param listenerFunc The function to call when an NFC tag is detected.\n */\n addListener(\n eventName: 'nfcTag',\n listenerFunc: (data: NDEFMessages) => void,\n ): Promise<PluginListenerHandle> & PluginListenerHandle;\n\n /**\n * Adds a listener for NFC tag write events.\n * @param eventName The name of the event ('nfcWriteSuccess').\n * @param listenerFunc The function to call when an NFC tag is written.\n */\n addListener(\n eventName: 'nfcWriteSuccess',\n listenerFunc: () => void,\n ): Promise<PluginListenerHandle> & PluginListenerHandle;\n\n /**\n * Adds a listener for NFC error events.\n * @param eventName The name of the event ('nfcError').\n * @param listenerFunc The function to call when an NFC error occurs.\n */\n addListener(\n eventName: 'nfcError',\n listenerFunc: (error: NFCError) => void,\n ): Promise<PluginListenerHandle> & PluginListenerHandle;\n\n /**\n * Removes all listeners for the specified event.\n * @param eventName The name of the event.\n */\n removeAllListeners(eventName: 'nfcTag' | 'nfcError'): Promise<void>;\n}\n\nexport interface NDEFMessages<T extends PayloadType = string> {\n messages: NDEFMessage<T>[];\n tagInfo?: TagInfo;\n}\n\nexport interface NDEFMessage<T extends PayloadType = string> {\n records: NDEFRecord<T>[];\n}\n\nexport interface TagInfo {\n /**\n * The unique identifier of the tag (UID) as a hex string\n */\n uid?: string;\n\n /**\n * The NFC tag technology types supported\n */\n techTypes?: string[];\n\n /**\n * The maximum size of NDEF message that can be written to this tag (if applicable)\n */\n maxSize?: number;\n\n /**\n * Whether the tag is writable\n */\n isWritable?: boolean;\n\n /**\n * The tag type (e.g., \"ISO14443-4\", \"MifareClassic\", etc.)\n */\n type?: string;\n\n /**\n * Truthy when the plugin downgraded reader capabilities for compatibility.\n */\n fallback?: boolean;\n\n /**\n * Indicates the active fallback mode (`compat` or `ndef`).\n */\n fallbackMode?: 'compat' | 'ndef';\n\n /**\n * Optional reason string when fallback was applied (e.g., `missing-entitlement`).\n */\n reason?: string;\n}\n\nexport interface NDEFRecord<T extends PayloadType = string> {\n /**\n * The type of the record.\n */\n type: string;\n\n /**\n * The payload of the record.\n */\n payload: T;\n}\n\nexport interface NFCError {\n /**\n * The error message.\n */\n error: string;\n}\n\nexport interface NDEFWriteOptions<T extends PayloadType = Uint8Array> {\n records: NDEFRecord<T>[];\n /**\n * When true, bypasses automatic Well Known Type formatting (Text 'T' and URI 'U' prefixes).\n * All payloads are written as raw bytes without additional framing.\n */\n rawMode?: boolean;\n}\n\nexport type NDEFMessagesTransformable = {\n base64: () => NDEFMessages;\n uint8Array: () => NDEFMessages<Uint8Array>;\n string: () => NDEFMessages;\n numberArray: () => NDEFMessages<number[]>;\n};\n\nexport type TagResultListenerFunc = (data: NDEFMessagesTransformable) => void;\n\nexport interface NFCPlugin extends Omit<NFCPluginBasic, 'writeNDEF' | 'addListener'> {\n writeNDEF: <T extends PayloadType = Uint8Array>(record?: NDEFWriteOptions<T>) => Promise<void>;\n wrapperListeners: TagResultListenerFunc[];\n /**\n * Register a read listener. Returns an unsubscribe function to remove just this listener.\n */\n onRead: (listenerFunc: TagResultListenerFunc) => () => void;\n /**\n * Register a write success listener. Returns an unsubscribe function.\n */\n onWrite: (listenerFunc: () => void) => () => void;\n /**\n * Register an error listener. Returns an unsubscribe function.\n */\n onError: (listenerFunc: (error: NFCError) => void) => () => void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PluginListenerHandle } from '@capacitor/core';\r\n\r\n// Payload from a new NFC scan is a base64 encoded string\r\nexport type PayloadType = string | number[] | Uint8Array;\r\n\r\n/**\r\n * NFC status values.\r\n * - \"ENABLED\" means NFC is available and enabled on the device.\r\n * - \"DISABLED\" means NFC is available but currently disabled (android only).\r\n * - \"NOT_SUPPORTED\" means NFC is not available on this device.\r\n */\r\nexport type NfcStatus = 'ENABLED' | 'DISABLED' | 'NOT_SUPPORTED';\r\n\r\nexport interface StartScanOptions {\r\n /**\r\n * Select the native reader strategy.\r\n * - `auto` (default): attempt advanced tag session first, downgrade automatically on entitlement failures.\r\n * - `full`: force the advanced tag session (resets any cached fallback state).\r\n * - `compat`: force the compatibility tag session (ISO14443-only, avoids advanced entitlements).\r\n * - `ndef`: skip tag session entirely and use the legacy NDEF reader.\r\n */\r\n mode?: 'auto' | 'full' | 'compat' | 'ndef';\r\n /**\r\n * Backwards-compatible hints for older app code. When true, they map to `mode` selections above.\r\n */\r\n forceFull?: boolean;\r\n forceCompat?: boolean;\r\n forceNDEF?: boolean;\r\n}\r\n\r\nexport interface NFCPluginBasic {\r\n /**\r\n * Checks if NFC is supported on the device. Returns true on all iOS devices, and checks for support on Android.\r\n */\r\n isSupported(): Promise<{ supported: boolean }>;\r\n\r\n /**\r\n * Begins listening for NFC tags.\r\n * @param options Optional tuning parameters for native reader behavior.\r\n */\r\n startScan(options?: StartScanOptions): Promise<void>;\r\n\r\n /**\r\n * Cancels an ongoing scan session (iOS only currently; no-op / rejection on Android).\r\n */\r\n cancelScan(): Promise<void>;\r\n\r\n /**\r\n * Writes an NDEF message to an NFC tag.\r\n * @param options The NDEF message to write.\r\n */\r\n writeNDEF<T extends PayloadType = number[]>(options: NDEFWriteOptions<T>): Promise<void>;\r\n\r\n /**\r\n * Cancels writeNDEF on Android (exits \"write mode\").\r\n */\r\n cancelWriteAndroid(): Promise<void>;\r\n\r\n /**\r\n * Adds a listener for NFC tag detection events.\r\n * @param eventName The name of the event ('nfcTag').\r\n * @param listenerFunc The function to call when an NFC tag is detected.\r\n */\r\n addListener(\r\n eventName: 'nfcTag',\r\n listenerFunc: (data: NDEFMessages) => void,\r\n ): Promise<PluginListenerHandle> & PluginListenerHandle;\r\n\r\n /**\r\n * Adds a listener for NFC tag write events.\r\n * @param eventName The name of the event ('nfcWriteSuccess').\r\n * @param listenerFunc The function to call when an NFC tag is written.\r\n */\r\n addListener(\r\n eventName: 'nfcWriteSuccess',\r\n listenerFunc: () => void,\r\n ): Promise<PluginListenerHandle> & PluginListenerHandle;\r\n\r\n /**\r\n * Adds a listener for NFC error events.\r\n * @param eventName The name of the event ('nfcError').\r\n * @param listenerFunc The function to call when an NFC error occurs.\r\n */\r\n addListener(\r\n eventName: 'nfcError',\r\n listenerFunc: (error: NFCError) => void,\r\n ): Promise<PluginListenerHandle> & PluginListenerHandle;\r\n\r\n /**\r\n * Removes all listeners for the specified event.\r\n * @param eventName The name of the event.\r\n */\r\n removeAllListeners(eventName: 'nfcTag' | 'nfcError'): Promise<void>;\r\n\r\n /**\r\n * Gets the current NFC status on the device.\r\n */\r\n getStatus(): Promise<{ status: NfcStatus }>;\r\n}\r\n\r\nexport interface NDEFMessages<T extends PayloadType = string> {\r\n messages: NDEFMessage<T>[];\r\n tagInfo?: TagInfo;\r\n}\r\n\r\nexport interface NDEFMessage<T extends PayloadType = string> {\r\n records: NDEFRecord<T>[];\r\n}\r\n\r\nexport interface TagInfo {\r\n /**\r\n * The unique identifier of the tag (UID) as a hex string\r\n */\r\n uid?: string;\r\n\r\n /**\r\n * The NFC tag technology types supported\r\n */\r\n techTypes?: string[];\r\n\r\n /**\r\n * The maximum size of NDEF message that can be written to this tag (if applicable)\r\n */\r\n maxSize?: number;\r\n\r\n /**\r\n * Whether the tag is writable\r\n */\r\n isWritable?: boolean;\r\n\r\n /**\r\n * The tag type (e.g., \"ISO14443-4\", \"MifareClassic\", etc.)\r\n */\r\n type?: string;\r\n\r\n /**\r\n * Truthy when the plugin downgraded reader capabilities for compatibility.\r\n */\r\n fallback?: boolean;\r\n\r\n /**\r\n * Indicates the active fallback mode (`compat` or `ndef`).\r\n */\r\n fallbackMode?: 'compat' | 'ndef';\r\n\r\n /**\r\n * Optional reason string when fallback was applied (e.g., `missing-entitlement`).\r\n */\r\n reason?: string;\r\n}\r\n\r\nexport interface NDEFRecord<T extends PayloadType = string> {\r\n /**\r\n * The type of the record.\r\n */\r\n type: string;\r\n\r\n /**\r\n * The payload of the record.\r\n */\r\n payload: T;\r\n}\r\n\r\nexport interface NFCError {\r\n /**\r\n * The error message.\r\n */\r\n error: string;\r\n}\r\n\r\nexport interface NDEFWriteOptions<T extends PayloadType = Uint8Array> {\r\n records: NDEFRecord<T>[];\r\n /**\r\n * When true, bypasses automatic Well Known Type formatting (Text 'T' and URI 'U' prefixes).\r\n * All payloads are written as raw bytes without additional framing.\r\n */\r\n rawMode?: boolean;\r\n}\r\n\r\nexport type NDEFMessagesTransformable = {\r\n base64: () => NDEFMessages;\r\n uint8Array: () => NDEFMessages<Uint8Array>;\r\n string: () => NDEFMessages;\r\n numberArray: () => NDEFMessages<number[]>;\r\n};\r\n\r\nexport type TagResultListenerFunc = (data: NDEFMessagesTransformable) => void;\r\n\r\nexport interface NFCPlugin extends Omit<NFCPluginBasic, 'writeNDEF' | 'addListener'> {\r\n writeNDEF: <T extends PayloadType = Uint8Array>(record?: NDEFWriteOptions<T>) => Promise<void>;\r\n wrapperListeners: TagResultListenerFunc[];\r\n /**\r\n * Register a read listener. Returns an unsubscribe function to remove just this listener.\r\n */\r\n onRead: (listenerFunc: TagResultListenerFunc) => () => void;\r\n /**\r\n * Register a write success listener. Returns an unsubscribe function.\r\n */\r\n onWrite: (listenerFunc: () => void) => () => void;\r\n /**\r\n * Register an error listener. Returns an unsubscribe function.\r\n */\r\n onError: (listenerFunc: (error: NFCError) => void) => () => void;\r\n}\r\n"]}
|
package/dist/esm/index.js
CHANGED
|
@@ -113,6 +113,7 @@ export const NFC = {
|
|
|
113
113
|
};
|
|
114
114
|
await NFCPlug.writeNDEF(ndefMessage);
|
|
115
115
|
},
|
|
116
|
+
getStatus: NFCPlug.getStatus.bind(NFCPlug),
|
|
116
117
|
};
|
|
117
118
|
// Decode a base64 string into a Uint8Array (browser-safe). Existing code used atob already.
|
|
118
119
|
const decodeBase64ToBytes = (base64Payload) => {
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { registerPlugin } from '@capacitor/core';\n\nimport type {\n NDEFMessagesTransformable,\n NDEFWriteOptions,\n NFCPlugin,\n NFCPluginBasic,\n StartScanOptions,\n PayloadType,\n TagResultListenerFunc,\n NFCError,\n NDEFMessages,\n} from './definitions.js';\n\nconst NFCPlug = registerPlugin<NFCPluginBasic>('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: NFCPlugin = {\n isSupported: NFCPlug.isSupported.bind(NFCPlug),\n startScan: (options?: StartScanOptions) => {\n const normalizedOptions: Record<string, unknown> = {};\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:\n NFCPlug.cancelScan?.bind(NFCPlug) ??\n (async () => {\n /* Android no-op */\n }),\n cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),\n onRead: (func: TagResultListenerFunc) => {\n NFC.wrapperListeners.push(func);\n // Return unsubscribe function\n return () => {\n NFC.wrapperListeners = NFC.wrapperListeners.filter((l: TagResultListenerFunc) => l !== func);\n };\n },\n onWrite: (func: () => void) => {\n let handle: any;\n NFCPlug.addListener(`nfcWriteSuccess`, func).then((h: any) => (handle = h));\n return () => {\n try {\n handle?.remove?.();\n } catch {\n /* empty */\n }\n };\n },\n onError: (errorFn: (error: NFCError) => void) => {\n let handle: any;\n NFCPlug.addListener(`nfcError`, errorFn).then((h: any) => (handle = h));\n return () => {\n try {\n handle?.remove?.();\n } catch {\n /* empty */\n }\n };\n },\n removeAllListeners: (eventName: 'nfcTag' | 'nfcError') => {\n NFC.wrapperListeners = [];\n return NFCPlug.removeAllListeners(eventName);\n },\n wrapperListeners: [],\n\n async writeNDEF<T extends PayloadType = Uint8Array>(options?: NDEFWriteOptions<T>): Promise<void> {\n // Helper encoders for well-known record types (only applied to string payloads)\n const buildTextPayload = (text: string, lang = 'en'): number[] => {\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: string, prefixCode = 0x00): number[] => {\n const uriBytes = Array.from(new TextEncoder().encode(uri));\n return [prefixCode, ...uriBytes];\n };\n\n const recordsArray = options?.records ?? [];\n if (recordsArray.length === 0) throw new Error('At least one NDEF record is required');\n\n const isRawMode = options?.rawMode === true;\n\n const ndefMessage: NDEFWriteOptions<number[]> = {\n records: recordsArray.map((record: any) => {\n let payload: number[] | null = null;\n\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 } 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 } else if (record.type === 'U') {\n payload = buildUriPayload(record.payload);\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 as number[];\n } else if (record.payload instanceof Uint8Array) {\n payload = Array.from(record.payload);\n }\n\n if (!payload) throw new Error('Unsupported payload type');\n\n return { type: record.type, payload };\n }),\n };\n\n await NFCPlug.writeNDEF(ndefMessage);\n },\n};\n\n// ----- Payload transformation helpers -----\ntype DecodeSpecifier = 'b64' | 'string' | 'uint8Array' | 'numberArray';\ntype decodedType<T extends DecodeSpecifier> = NDEFMessages<\n T extends 'b64' ? string : T extends 'string' ? string : T extends 'uint8Array' ? Uint8Array : number[]\n>;\n\n// Decode a base64 string into a Uint8Array (browser-safe). Existing code used atob already.\nconst decodeBase64ToBytes = (base64Payload: string): Uint8Array => {\n const bin = atob(base64Payload);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n};\n\n// Parse NFC Forum \"Text\" (Well Known 'T') records according to spec.\nconst decodeTextRecord = (bytes: Uint8Array): string => {\n if (bytes.length === 0) 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) 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 } catch {\n // Fallback: naive ASCII\n return Array.from(textBytes)\n .map((b) => String.fromCharCode(b))\n .join('');\n }\n};\n\n// Basic URI prefix table for Well Known 'U' records (optional convenience)\nconst URI_PREFIX: string[] = [\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];\n\nconst decodeUriRecord = (bytes: Uint8Array): string => {\n if (bytes.length === 0) 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 } catch {\n return (\n prefix +\n Array.from(remainder)\n .map((b) => String.fromCharCode(b))\n .join('')\n );\n }\n};\n\nconst toStringPayload = (recordType: string, bytes: Uint8Array): string => {\n // Well Known Text\n if (recordType === 'T') return decodeTextRecord(bytes);\n // Well Known URI\n if (recordType === 'U') return decodeUriRecord(bytes);\n // Default: attempt UTF-8 decode\n try {\n return new TextDecoder('utf-8').decode(bytes);\n } catch {\n return Array.from(bytes)\n .map((c) => String.fromCharCode(c))\n .join('');\n }\n};\n\nconst mapPayloadTo = <T extends DecodeSpecifier>(type: T, data: NDEFMessages): decodedType<T> => {\n return {\n messages: data.messages.map((message: any) => ({\n records: message.records.map((record: any) => {\n const bytes = decodeBase64ToBytes(record.payload as unknown as string);\n let payload: any;\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 } as decodedType<T>;\n};\n\nNFCPlug.addListener(`nfcTag`, (data: any) => {\n const wrappedData: NDEFMessagesTransformable = {\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\n for (const listener of NFC.wrapperListeners) {\n listener(wrappedData);\n }\n});\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { registerPlugin } from '@capacitor/core';\r\n\r\nimport type {\r\n NDEFMessagesTransformable,\r\n NDEFWriteOptions,\r\n NFCPlugin,\r\n NFCPluginBasic,\r\n StartScanOptions,\r\n PayloadType,\r\n TagResultListenerFunc,\r\n NFCError,\r\n NDEFMessages,\r\n} from './definitions.js';\r\n\r\nconst NFCPlug = registerPlugin<NFCPluginBasic>('NFC', {\r\n // Explicit .js extension required under node16/nodenext module resolution for emitted ES modules.\r\n web: () => import('./web.js').then((m) => new m.NFCWeb()),\r\n});\r\nexport * from './definitions.js';\r\nexport const NFC: NFCPlugin = {\r\n isSupported: NFCPlug.isSupported.bind(NFCPlug),\r\n startScan: (options?: StartScanOptions) => {\r\n const normalizedOptions: Record<string, unknown> = {};\r\n if (options) {\r\n for (const [key, value] of Object.entries(options)) {\r\n if (value !== undefined && value !== null) {\r\n normalizedOptions[key] = value;\r\n }\r\n }\r\n }\r\n return NFCPlug.startScan(normalizedOptions);\r\n },\r\n cancelScan:\r\n NFCPlug.cancelScan?.bind(NFCPlug) ??\r\n (async () => {\r\n /* Android no-op */\r\n }),\r\n cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),\r\n onRead: (func: TagResultListenerFunc) => {\r\n NFC.wrapperListeners.push(func);\r\n // Return unsubscribe function\r\n return () => {\r\n NFC.wrapperListeners = NFC.wrapperListeners.filter((l: TagResultListenerFunc) => l !== func);\r\n };\r\n },\r\n onWrite: (func: () => void) => {\r\n let handle: any;\r\n NFCPlug.addListener(`nfcWriteSuccess`, func).then((h: any) => (handle = h));\r\n return () => {\r\n try {\r\n handle?.remove?.();\r\n } catch {\r\n /* empty */\r\n }\r\n };\r\n },\r\n onError: (errorFn: (error: NFCError) => void) => {\r\n let handle: any;\r\n NFCPlug.addListener(`nfcError`, errorFn).then((h: any) => (handle = h));\r\n return () => {\r\n try {\r\n handle?.remove?.();\r\n } catch {\r\n /* empty */\r\n }\r\n };\r\n },\r\n removeAllListeners: (eventName: 'nfcTag' | 'nfcError') => {\r\n NFC.wrapperListeners = [];\r\n return NFCPlug.removeAllListeners(eventName);\r\n },\r\n wrapperListeners: [],\r\n\r\n async writeNDEF<T extends PayloadType = Uint8Array>(options?: NDEFWriteOptions<T>): Promise<void> {\r\n // Helper encoders for well-known record types (only applied to string payloads)\r\n const buildTextPayload = (text: string, lang = 'en'): number[] => {\r\n const langBytes = Array.from(new TextEncoder().encode(lang));\r\n const textBytes = Array.from(new TextEncoder().encode(text));\r\n const status = langBytes.length & 0x3f; // UTF-8 encoding, language length (<= 63)\r\n return [status, ...langBytes, ...textBytes];\r\n };\r\n const buildUriPayload = (uri: string, prefixCode = 0x00): number[] => {\r\n const uriBytes = Array.from(new TextEncoder().encode(uri));\r\n return [prefixCode, ...uriBytes];\r\n };\r\n\r\n const recordsArray = options?.records ?? [];\r\n if (recordsArray.length === 0) throw new Error('At least one NDEF record is required');\r\n\r\n const isRawMode = options?.rawMode === true;\r\n\r\n const ndefMessage: NDEFWriteOptions<number[]> = {\r\n records: recordsArray.map((record: any) => {\r\n let payload: number[] | null = null;\r\n\r\n if (typeof record.payload === 'string') {\r\n if (isRawMode) {\r\n // Raw mode: write string payloads as UTF-8 bytes without any framing\r\n payload = Array.from(new TextEncoder().encode(record.payload));\r\n } else {\r\n // Apply spec-compliant formatting only for Well Known Text (T) & URI (U) types.\r\n if (record.type === 'T') {\r\n payload = buildTextPayload(record.payload);\r\n } else if (record.type === 'U') {\r\n payload = buildUriPayload(record.payload);\r\n } else {\r\n // Generic string: raw UTF-8 bytes (no extra framing)\r\n payload = Array.from(new TextEncoder().encode(record.payload));\r\n }\r\n }\r\n } else if (Array.isArray(record.payload)) {\r\n // Assume already raw bytes; do NOT modify\r\n payload = record.payload as number[];\r\n } else if (record.payload instanceof Uint8Array) {\r\n payload = Array.from(record.payload);\r\n }\r\n\r\n if (!payload) throw new Error('Unsupported payload type');\r\n\r\n return { type: record.type, payload };\r\n }),\r\n };\r\n\r\n await NFCPlug.writeNDEF(ndefMessage);\r\n },\r\n getStatus: NFCPlug.getStatus.bind(NFCPlug),\r\n};\r\n\r\n// ----- Payload transformation helpers -----\r\ntype DecodeSpecifier = 'b64' | 'string' | 'uint8Array' | 'numberArray';\r\ntype decodedType<T extends DecodeSpecifier> = NDEFMessages<\r\n T extends 'b64' ? string : T extends 'string' ? string : T extends 'uint8Array' ? Uint8Array : number[]\r\n>;\r\n\r\n// Decode a base64 string into a Uint8Array (browser-safe). Existing code used atob already.\r\nconst decodeBase64ToBytes = (base64Payload: string): Uint8Array => {\r\n const bin = atob(base64Payload);\r\n const out = new Uint8Array(bin.length);\r\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\r\n return out;\r\n};\r\n\r\n// Parse NFC Forum \"Text\" (Well Known 'T') records according to spec.\r\nconst decodeTextRecord = (bytes: Uint8Array): string => {\r\n if (bytes.length === 0) return '';\r\n const status = bytes[0];\r\n const isUTF16 = (status & 0x80) !== 0; // Bit 7 indicates encoding\r\n const langLength = status & 0x3f; // Bits 0-5 language code length\r\n if (1 + langLength > bytes.length) return ''; // Corrupt\r\n const textBytes = bytes.slice(1 + langLength);\r\n try {\r\n const decoder = new TextDecoder(isUTF16 ? 'utf-16' : 'utf-8');\r\n return decoder.decode(textBytes);\r\n } catch {\r\n // Fallback: naive ASCII\r\n return Array.from(textBytes)\r\n .map((b) => String.fromCharCode(b))\r\n .join('');\r\n }\r\n};\r\n\r\n// Basic URI prefix table for Well Known 'U' records (optional convenience)\r\nconst URI_PREFIX: string[] = [\r\n '',\r\n 'http://www.',\r\n 'https://www.',\r\n 'http://',\r\n 'https://',\r\n 'tel:',\r\n 'mailto:',\r\n 'ftp://anonymous:anonymous@',\r\n 'ftp://ftp.',\r\n 'ftps://',\r\n 'sftp://',\r\n 'smb://',\r\n 'nfs://',\r\n 'ftp://',\r\n 'dav://',\r\n 'news:',\r\n 'telnet://',\r\n 'imap:',\r\n 'rtsp://',\r\n 'urn:',\r\n 'pop:',\r\n 'sip:',\r\n 'sips:',\r\n 'tftp:',\r\n 'btspp://',\r\n 'btl2cap://',\r\n 'btgoep://',\r\n 'tcpobex://',\r\n 'irdaobex://',\r\n 'file://',\r\n 'urn:epc:id:',\r\n 'urn:epc:tag:',\r\n 'urn:epc:pat:',\r\n 'urn:epc:raw:',\r\n 'urn:epc:',\r\n 'urn:nfc:',\r\n];\r\n\r\nconst decodeUriRecord = (bytes: Uint8Array): string => {\r\n if (bytes.length === 0) return '';\r\n const prefixIndex = bytes[0];\r\n const prefix = URI_PREFIX[prefixIndex] || '';\r\n const remainder = bytes.slice(1);\r\n try {\r\n return prefix + new TextDecoder('utf-8').decode(remainder);\r\n } catch {\r\n return (\r\n prefix +\r\n Array.from(remainder)\r\n .map((b) => String.fromCharCode(b))\r\n .join('')\r\n );\r\n }\r\n};\r\n\r\nconst toStringPayload = (recordType: string, bytes: Uint8Array): string => {\r\n // Well Known Text\r\n if (recordType === 'T') return decodeTextRecord(bytes);\r\n // Well Known URI\r\n if (recordType === 'U') return decodeUriRecord(bytes);\r\n // Default: attempt UTF-8 decode\r\n try {\r\n return new TextDecoder('utf-8').decode(bytes);\r\n } catch {\r\n return Array.from(bytes)\r\n .map((c) => String.fromCharCode(c))\r\n .join('');\r\n }\r\n};\r\n\r\nconst mapPayloadTo = <T extends DecodeSpecifier>(type: T, data: NDEFMessages): decodedType<T> => {\r\n return {\r\n messages: data.messages.map((message: any) => ({\r\n records: message.records.map((record: any) => {\r\n const bytes = decodeBase64ToBytes(record.payload as unknown as string);\r\n let payload: any;\r\n switch (type) {\r\n case 'b64':\r\n payload = record.payload; // original base64 string\r\n break;\r\n case 'uint8Array':\r\n payload = bytes;\r\n break;\r\n case 'numberArray':\r\n payload = Array.from(bytes);\r\n break;\r\n case 'string':\r\n payload = toStringPayload(record.type, bytes);\r\n break;\r\n default:\r\n payload = record.payload;\r\n }\r\n return { type: record.type, payload };\r\n }),\r\n })),\r\n tagInfo: data.tagInfo, // Include tag information\r\n } as decodedType<T>;\r\n};\r\n\r\nNFCPlug.addListener(`nfcTag`, (data: any) => {\r\n const wrappedData: NDEFMessagesTransformable = {\r\n base64() {\r\n return mapPayloadTo('b64', data);\r\n },\r\n string() {\r\n return mapPayloadTo('string', data);\r\n },\r\n uint8Array() {\r\n return mapPayloadTo('uint8Array', data);\r\n },\r\n numberArray() {\r\n return mapPayloadTo('numberArray', data);\r\n },\r\n };\r\n\r\n for (const listener of NFC.wrapperListeners) {\r\n listener(wrappedData);\r\n }\r\n});\r\n"]}
|
package/dist/esm/web.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { WebPlugin } from '@capacitor/core';
|
|
2
|
-
import type { StartScanOptions } from './definitions.js';
|
|
2
|
+
import type { NfcStatus, StartScanOptions } from './definitions.js';
|
|
3
3
|
export declare class NFCWeb extends WebPlugin {
|
|
4
4
|
isSupported(): Promise<{
|
|
5
5
|
supported: boolean;
|
|
@@ -8,4 +8,7 @@ export declare class NFCWeb extends WebPlugin {
|
|
|
8
8
|
cancelScan(): Promise<void>;
|
|
9
9
|
cancelWriteAndroid(): Promise<void>;
|
|
10
10
|
writeNDEF(_options?: any): Promise<void>;
|
|
11
|
+
getStatus(): Promise<{
|
|
12
|
+
status: NfcStatus;
|
|
13
|
+
}>;
|
|
11
14
|
}
|
package/dist/esm/web.js
CHANGED
package/dist/esm/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,OAAO,MAAO,SAAQ,SAAS;IACnC,KAAK,CAAC,WAAW;QACf,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAA2B;QACzC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAc;QAC5B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;CACF","sourcesContent":["import { WebPlugin } from '@capacitor/core';\n\nimport type { StartScanOptions } from './definitions.js';\n\nexport class NFCWeb extends WebPlugin {\n async isSupported(): Promise<{ supported: boolean }> {\n return { supported: false };\n }\n\n async startScan(_options?: StartScanOptions): Promise<void> {\n throw new Error('NFC is not supported on web');\n }\n\n async cancelScan(): Promise<void> {\n throw new Error('NFC is not supported on web');\n }\n\n async cancelWriteAndroid(): Promise<void> {\n throw new Error('NFC is not supported on web');\n }\n\n async writeNDEF(_options?: any): Promise<void> {\n throw new Error('NFC is not supported on web');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,OAAO,MAAO,SAAQ,SAAS;IACnC,KAAK,CAAC,WAAW;QACf,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAA2B;QACzC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAc;QAC5B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACrC,CAAC;CACF","sourcesContent":["import { WebPlugin } from '@capacitor/core';\r\n\r\nimport type { NfcStatus, StartScanOptions } from './definitions.js';\r\n\r\nexport class NFCWeb extends WebPlugin {\r\n async isSupported(): Promise<{ supported: boolean }> {\r\n return { supported: false };\r\n }\r\n\r\n async startScan(_options?: StartScanOptions): Promise<void> {\r\n throw new Error('NFC is not supported on web');\r\n }\r\n\r\n async cancelScan(): Promise<void> {\r\n throw new Error('NFC is not supported on web');\r\n }\r\n\r\n async cancelWriteAndroid(): Promise<void> {\r\n throw new Error('NFC is not supported on web');\r\n }\r\n\r\n async writeNDEF(_options?: any): Promise<void> {\r\n throw new Error('NFC is not supported on web');\r\n }\r\n\r\n async getStatus(): Promise<{ status: NfcStatus }> {\r\n return { status: 'NOT_SUPPORTED' };\r\n }\r\n}\r\n"]}
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -117,6 +117,7 @@ const NFC = {
|
|
|
117
117
|
};
|
|
118
118
|
await NFCPlug.writeNDEF(ndefMessage);
|
|
119
119
|
},
|
|
120
|
+
getStatus: NFCPlug.getStatus.bind(NFCPlug),
|
|
120
121
|
};
|
|
121
122
|
// Decode a base64 string into a Uint8Array (browser-safe). Existing code used atob already.
|
|
122
123
|
const decodeBase64ToBytes = (base64Payload) => {
|
|
@@ -283,6 +284,9 @@ class NFCWeb extends core.WebPlugin {
|
|
|
283
284
|
async writeNDEF(_options) {
|
|
284
285
|
throw new Error('NFC is not supported on web');
|
|
285
286
|
}
|
|
287
|
+
async getStatus() {
|
|
288
|
+
return { status: 'NOT_SUPPORTED' };
|
|
289
|
+
}
|
|
286
290
|
}
|
|
287
291
|
|
|
288
292
|
var web = /*#__PURE__*/Object.freeze({
|
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 // 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":";;;;;;AAAA,IAAI,EAAE,EAAE,EAAE,CAAC;AAEX,MAAM,OAAO,GAAGA,mBAAc,CAAC,KAAK,EAAE;AACtC;AACA,IAAI,GAAG,EAAE,MAAM,mDAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;AAC7D,CAAC,CAAC,CAAC;AAES,MAAC,GAAG,GAAG;AACnB,IAAI,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;AAClD,IAAI,SAAS,EAAE,CAAC,OAAO,KAAK;AAC5B,QAAQ,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACrC,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAChE,gBAAgB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AAC3D,oBAAoB,iBAAiB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACnD,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;AACpD,KAAK;AACL,IAAI,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,IAAI,YAAY;AACrJ;AACA,KAAK,CAAC;AACN,IAAI,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;AAChE,IAAI,MAAM,EAAE,CAAC,IAAI,KAAK;AACtB,QAAQ,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC;AACA,QAAQ,OAAO,MAAM;AACrB,YAAY,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AAClF,SAAS,CAAC;AACV,KAAK;AACL,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK;AACvB,QAAQ,IAAI,MAAM,CAAC;AACnB,QAAQ,OAAO,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/E,QAAQ,OAAO,MAAM;AACrB,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,IAAI;AAChB,gBAAgB,CAAC,EAAE,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1I,aAAa;AACb,YAAY,OAAO,EAAE,EAAE;AACvB;AACA,aAAa;AACb,SAAS,CAAC;AACV,KAAK;AACL,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK;AAC1B,QAAQ,IAAI,MAAM,CAAC;AACnB,QAAQ,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3E,QAAQ,OAAO,MAAM;AACrB,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,IAAI;AAChB,gBAAgB,CAAC,EAAE,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1I,aAAa;AACb,YAAY,OAAO,EAAE,EAAE;AACvB;AACA,aAAa;AACb,SAAS,CAAC;AACV,KAAK;AACL,IAAI,kBAAkB,EAAE,CAAC,SAAS,KAAK;AACvC,QAAQ,GAAG,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAClC,QAAQ,OAAO,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACrD,KAAK;AACL,IAAI,gBAAgB,EAAE,EAAE;AACxB,IAAI,MAAM,SAAS,CAAC,OAAO,EAAE;AAC7B,QAAQ,IAAI,EAAE,CAAC;AACf;AACA,QAAQ,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK;AACxD,YAAY,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACzE,YAAY,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACzE,YAAY,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;AACnD,YAAY,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC,CAAC;AACxD,SAAS,CAAC;AACV,QAAQ,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,KAAK;AAC5D,YAAY,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACvE,YAAY,OAAO,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,CAAC;AAC7C,SAAS,CAAC;AACV,QAAQ,MAAM,YAAY,GAAG,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC1I,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;AACrC,YAAY,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACpE,QAAQ,MAAM,SAAS,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,MAAM,IAAI,CAAC;AACvG,QAAQ,MAAM,WAAW,GAAG;AAC5B,YAAY,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;AAClD,gBAAgB,IAAI,OAAO,GAAG,IAAI,CAAC;AACnC,gBAAgB,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE;AACxD,oBAAoB,IAAI,SAAS,EAAE;AACnC;AACA,wBAAwB,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACvF,qBAAqB;AACrB,yBAAyB;AACzB;AACA,wBAAwB,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE;AACjD,4BAA4B,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACvE,yBAAyB;AACzB,6BAA6B,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE;AACtD,4BAA4B,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACtE,yBAAyB;AACzB,6BAA6B;AAC7B;AACA,4BAA4B,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3F,yBAAyB;AACzB,qBAAqB;AACrB,iBAAiB;AACjB,qBAAqB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACxD;AACA,oBAAoB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AAC7C,iBAAiB;AACjB,qBAAqB,IAAI,MAAM,CAAC,OAAO,YAAY,UAAU,EAAE;AAC/D,oBAAoB,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzD,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,OAAO;AAC5B,oBAAoB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAChE,gBAAgB,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AACtD,aAAa,CAAC;AACd,SAAS,CAAC;AACV,QAAQ,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC7C,KAAK;AACL,EAAE;AACF;AACA,MAAM,mBAAmB,GAAG,CAAC,aAAa,KAAK;AAC/C,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;AACpC,IAAI,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3C,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;AACvC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AACF;AACA,MAAM,gBAAgB,GAAG,CAAC,KAAK,KAAK;AACpC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAC1B,QAAQ,OAAO,EAAE,CAAC;AAClB,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5B,IAAI,MAAM,OAAO,GAAG,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,CAAC;AAC1C,IAAI,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;AACrC,IAAI,IAAI,CAAC,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM;AACrC,QAAQ,OAAO,EAAE,CAAC;AAClB,IAAI,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AAClD,IAAI,IAAI;AACR,QAAQ,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC;AACtE,QAAQ,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACzC,KAAK;AACL,IAAI,OAAO,EAAE,EAAE;AACf;AACA,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AACpC,aAAa,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC/C,aAAa,IAAI,CAAC,EAAE,CAAC,CAAC;AACtB,KAAK;AACL,CAAC,CAAC;AACF;AACA,MAAM,UAAU,GAAG;AACnB,IAAI,EAAE;AACN,IAAI,aAAa;AACjB,IAAI,cAAc;AAClB,IAAI,SAAS;AACb,IAAI,UAAU;AACd,IAAI,MAAM;AACV,IAAI,SAAS;AACb,IAAI,4BAA4B;AAChC,IAAI,YAAY;AAChB,IAAI,SAAS;AACb,IAAI,SAAS;AACb,IAAI,QAAQ;AACZ,IAAI,QAAQ;AACZ,IAAI,QAAQ;AACZ,IAAI,QAAQ;AACZ,IAAI,OAAO;AACX,IAAI,WAAW;AACf,IAAI,OAAO;AACX,IAAI,SAAS;AACb,IAAI,MAAM;AACV,IAAI,MAAM;AACV,IAAI,MAAM;AACV,IAAI,OAAO;AACX,IAAI,OAAO;AACX,IAAI,UAAU;AACd,IAAI,YAAY;AAChB,IAAI,WAAW;AACf,IAAI,YAAY;AAChB,IAAI,aAAa;AACjB,IAAI,SAAS;AACb,IAAI,aAAa;AACjB,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,UAAU;AACd,IAAI,UAAU;AACd,CAAC,CAAC;AACF,MAAM,eAAe,GAAG,CAAC,KAAK,KAAK;AACnC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAC1B,QAAQ,OAAO,EAAE,CAAC;AAClB,IAAI,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACjC,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACjD,IAAI,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrC,IAAI,IAAI;AACR,QAAQ,OAAO,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnE,KAAK;AACL,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,QAAQ,MAAM;AACtB,YAAY,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,iBAAiB,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACnD,iBAAiB,IAAI,CAAC,EAAE,CAAC,EAAE;AAC3B,KAAK;AACL,CAAC,CAAC;AACF,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,KAAK,KAAK;AAC/C;AACA,IAAI,IAAI,UAAU,KAAK,GAAG;AAC1B,QAAQ,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvC;AACA,IAAI,IAAI,UAAU,KAAK,GAAG;AAC1B,QAAQ,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AACtC;AACA,IAAI,IAAI;AACR,QAAQ,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtD,KAAK;AACL,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,aAAa,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC/C,aAAa,IAAI,CAAC,EAAE,CAAC,CAAC;AACtB,KAAK;AACL,CAAC,CAAC;AACF,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK;AACrC,IAAI,OAAO;AACX,QAAQ,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,MAAM;AAClD,YAAY,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;AACrD,gBAAgB,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAClE,gBAAgB,IAAI,OAAO,CAAC;AAC5B,gBAAgB,QAAQ,IAAI;AAC5B,oBAAoB,KAAK,KAAK;AAC9B,wBAAwB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACjD,wBAAwB,MAAM;AAC9B,oBAAoB,KAAK,YAAY;AACrC,wBAAwB,OAAO,GAAG,KAAK,CAAC;AACxC,wBAAwB,MAAM;AAC9B,oBAAoB,KAAK,aAAa;AACtC,wBAAwB,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpD,wBAAwB,MAAM;AAC9B,oBAAoB,KAAK,QAAQ;AACjC,wBAAwB,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACtE,wBAAwB,MAAM;AAC9B,oBAAoB;AACpB,wBAAwB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACjD,iBAAiB;AACjB,gBAAgB,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AACtD,aAAa,CAAC;AACd,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,EAAE,IAAI,CAAC,OAAO;AAC7B,KAAK,CAAC;AACN,CAAC,CAAC;AACF,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK;AACxC,IAAI,MAAM,WAAW,GAAG;AACxB,QAAQ,MAAM,GAAG;AACjB,YAAY,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7C,SAAS;AACT,QAAQ,MAAM,GAAG;AACjB,YAAY,OAAO,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChD,SAAS;AACT,QAAQ,UAAU,GAAG;AACrB,YAAY,OAAO,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AACpD,SAAS;AACT,QAAQ,WAAW,GAAG;AACtB,YAAY,OAAO,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AACrD,SAAS;AACT,KAAK,CAAC;AACN,IAAI,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,gBAAgB,EAAE;AACjD,QAAQ,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC9B,KAAK;AACL,CAAC,CAAC;;ACtQK,MAAM,MAAM,SAASC,cAAS,CAAC;AACtC,IAAI,MAAM,WAAW,GAAG;AACxB,QAAQ,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACpC,KAAK;AACL,IAAI,MAAM,SAAS,CAAC,QAAQ,EAAE;AAC9B,QAAQ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACvD,KAAK;AACL,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACvD,KAAK;AACL,IAAI,MAAM,kBAAkB,GAAG;AAC/B,QAAQ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACvD,KAAK;AACL,IAAI,MAAM,SAAS,CAAC,QAAQ,EAAE;AAC9B,QAAQ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACvD,KAAK;AACL;;;;;;;;;"}
|
|
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 getStatus: NFCPlug.getStatus.bind(NFCPlug),\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 async getStatus() {\n return { status: 'NOT_SUPPORTED' };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -114,6 +114,7 @@ var capacitorNFC = (function (exports, core) {
|
|
|
114
114
|
};
|
|
115
115
|
await NFCPlug.writeNDEF(ndefMessage);
|
|
116
116
|
},
|
|
117
|
+
getStatus: NFCPlug.getStatus.bind(NFCPlug),
|
|
117
118
|
};
|
|
118
119
|
// Decode a base64 string into a Uint8Array (browser-safe). Existing code used atob already.
|
|
119
120
|
const decodeBase64ToBytes = (base64Payload) => {
|
|
@@ -280,6 +281,9 @@ var capacitorNFC = (function (exports, core) {
|
|
|
280
281
|
async writeNDEF(_options) {
|
|
281
282
|
throw new Error('NFC is not supported on web');
|
|
282
283
|
}
|
|
284
|
+
async getStatus() {
|
|
285
|
+
return { status: 'NOT_SUPPORTED' };
|
|
286
|
+
}
|
|
283
287
|
}
|
|
284
288
|
|
|
285
289
|
var web = /*#__PURE__*/Object.freeze({
|
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 // 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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"}
|
|
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 getStatus: NFCPlug.getStatus.bind(NFCPlug),\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 async getStatus() {\n return { status: 'NOT_SUPPORTED' };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|