@exxili/capacitor-nfc 0.0.2 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,122 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var core = require('@capacitor/core');
6
6
 
7
- const NFC = core.registerPlugin('NFC');
7
+ const NFCPlug = core.registerPlugin('NFC', {
8
+ web: () => Promise.resolve().then(function () { return web; }).then(m => new m.NFCWeb()),
9
+ });
10
+ const NFC = {
11
+ isSupported: NFCPlug.isSupported.bind(NFCPlug),
12
+ startScan: NFCPlug.startScan.bind(NFCPlug),
13
+ cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),
14
+ onRead: (func) => NFC.wrapperListeners.push(func),
15
+ onWrite: (func) => NFCPlug.addListener(`nfcWriteSuccess`, func),
16
+ onError: (errorFn) => {
17
+ NFCPlug.addListener(`nfcError`, errorFn);
18
+ },
19
+ removeAllListeners: (eventName) => {
20
+ NFC.wrapperListeners = [];
21
+ return NFCPlug.removeAllListeners(eventName);
22
+ },
23
+ wrapperListeners: [],
24
+ async writeNDEF(options) {
25
+ var _a;
26
+ const ndefMessage = {
27
+ records: (_a = options === null || options === void 0 ? void 0 : options.records.map((record) => {
28
+ const payload = typeof record.payload === 'string'
29
+ ? Array.from(new TextEncoder().encode(record.payload))
30
+ : Array.isArray(record.payload)
31
+ ? record.payload
32
+ : record.payload instanceof Uint8Array
33
+ ? Array.from(record.payload)
34
+ : null;
35
+ if (!payload)
36
+ throw 'Unsupported payload type';
37
+ return {
38
+ type: record.type,
39
+ payload,
40
+ };
41
+ })) !== null && _a !== void 0 ? _a : [],
42
+ };
43
+ await NFCPlug.writeNDEF(ndefMessage);
44
+ },
45
+ };
46
+ const decodeBase64 = (base64Payload) => {
47
+ return atob(base64Payload)
48
+ .split('')
49
+ .map((char) => char.charCodeAt(0));
50
+ };
51
+ const mapPayloadTo = (type, data) => {
52
+ return {
53
+ messages: data.messages.map(message => ({
54
+ records: message.records.map(record => ({
55
+ type: record.type,
56
+ payload: type === "b64"
57
+ ? record.payload
58
+ : type === "string"
59
+ ? decodeBase64(record.payload)
60
+ : type === "uint8Array"
61
+ ? new Uint8Array(decodeBase64(record.payload))
62
+ : type === "numberArray"
63
+ ? Array.from(decodeBase64(record.payload))
64
+ : record.payload
65
+ }))
66
+ }))
67
+ };
68
+ };
69
+ NFCPlug.addListener(`nfcTag`, data => {
70
+ const wrappedData = {
71
+ base64() {
72
+ return mapPayloadTo("b64", data);
73
+ },
74
+ string() {
75
+ return mapPayloadTo("string", data);
76
+ },
77
+ uint8Array() {
78
+ return mapPayloadTo("uint8Array", data);
79
+ },
80
+ numberArray() {
81
+ return mapPayloadTo("numberArray", data);
82
+ }
83
+ };
84
+ for (const listener of NFC.wrapperListeners) {
85
+ listener(wrappedData);
86
+ }
87
+ });
88
+
89
+ class NFCWeb extends core.WebPlugin {
90
+ constructor() {
91
+ super(...arguments);
92
+ this.wrapperListeners = [];
93
+ }
94
+ isSupported() {
95
+ return Promise.resolve({ supported: false });
96
+ }
97
+ startScan() {
98
+ return Promise.reject(new Error('NFC is not supported on web'));
99
+ }
100
+ cancelWriteAndroid() {
101
+ return Promise.reject(new Error('NFC is not supported on web'));
102
+ }
103
+ writeNDEF() {
104
+ return Promise.reject(new Error('NFC is not supported on web'));
105
+ }
106
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
107
+ onRead(_func) {
108
+ return Promise.reject(new Error('NFC is not supported on web'));
109
+ }
110
+ onWrite() {
111
+ return Promise.reject(new Error('NFC is not supported on web'));
112
+ }
113
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
114
+ onError(_errorFn) {
115
+ return Promise.reject(new Error('NFC is not supported on web'));
116
+ }
117
+ }
118
+
119
+ var web = /*#__PURE__*/Object.freeze({
120
+ __proto__: null,
121
+ NFCWeb: NFCWeb
122
+ });
8
123
 
9
124
  exports.NFC = NFC;
10
125
  //# sourceMappingURL=plugin.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst NFC = registerPlugin('NFC');\nexport * from './definitions';\nexport { NFC };\n//# sourceMappingURL=index.js.map"],"names":["registerPlugin"],"mappings":";;;;;;AACK,MAAC,GAAG,GAAGA,mBAAc,CAAC,KAAK;;;;"}
1
+ {"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { 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 cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),\n onRead: (func) => NFC.wrapperListeners.push(func),\n onWrite: (func) => NFCPlug.addListener(`nfcWriteSuccess`, func),\n onError: (errorFn) => {\n NFCPlug.addListener(`nfcError`, errorFn);\n },\n removeAllListeners: (eventName) => {\n NFC.wrapperListeners = [];\n return NFCPlug.removeAllListeners(eventName);\n },\n wrapperListeners: [],\n async writeNDEF(options) {\n var _a;\n const ndefMessage = {\n records: (_a = options === null || options === void 0 ? void 0 : options.records.map((record) => {\n const payload = typeof record.payload === 'string'\n ? Array.from(new TextEncoder().encode(record.payload))\n : Array.isArray(record.payload)\n ? record.payload\n : record.payload instanceof Uint8Array\n ? Array.from(record.payload)\n : null;\n if (!payload)\n throw 'Unsupported payload type';\n return {\n type: record.type,\n payload,\n };\n })) !== null && _a !== void 0 ? _a : [],\n };\n await NFCPlug.writeNDEF(ndefMessage);\n },\n};\nconst decodeBase64 = (base64Payload) => {\n return atob(base64Payload)\n .split('')\n .map((char) => char.charCodeAt(0));\n};\nconst mapPayloadTo = (type, data) => {\n return {\n messages: data.messages.map(message => ({\n records: message.records.map(record => ({\n type: record.type,\n payload: type === \"b64\"\n ? record.payload\n : type === \"string\"\n ? decodeBase64(record.payload)\n : type === \"uint8Array\"\n ? new Uint8Array(decodeBase64(record.payload))\n : type === \"numberArray\"\n ? Array.from(decodeBase64(record.payload))\n : record.payload\n }))\n }))\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 constructor() {\n super(...arguments);\n this.wrapperListeners = [];\n }\n isSupported() {\n return Promise.resolve({ supported: false });\n }\n startScan() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n cancelWriteAndroid() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n writeNDEF() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onRead(_func) {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n onWrite() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onError(_errorFn) {\n return Promise.reject(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
@@ -1,13 +1,128 @@
1
1
  var capacitorNFC = (function (exports, core) {
2
- 'use strict';
2
+ 'use strict';
3
3
 
4
- const NFC = core.registerPlugin('NFC');
4
+ const NFCPlug = core.registerPlugin('NFC', {
5
+ web: () => Promise.resolve().then(function () { return web; }).then(m => new m.NFCWeb()),
6
+ });
7
+ const NFC = {
8
+ isSupported: NFCPlug.isSupported.bind(NFCPlug),
9
+ startScan: NFCPlug.startScan.bind(NFCPlug),
10
+ cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),
11
+ onRead: (func) => NFC.wrapperListeners.push(func),
12
+ onWrite: (func) => NFCPlug.addListener(`nfcWriteSuccess`, func),
13
+ onError: (errorFn) => {
14
+ NFCPlug.addListener(`nfcError`, errorFn);
15
+ },
16
+ removeAllListeners: (eventName) => {
17
+ NFC.wrapperListeners = [];
18
+ return NFCPlug.removeAllListeners(eventName);
19
+ },
20
+ wrapperListeners: [],
21
+ async writeNDEF(options) {
22
+ var _a;
23
+ const ndefMessage = {
24
+ records: (_a = options === null || options === void 0 ? void 0 : options.records.map((record) => {
25
+ const payload = typeof record.payload === 'string'
26
+ ? Array.from(new TextEncoder().encode(record.payload))
27
+ : Array.isArray(record.payload)
28
+ ? record.payload
29
+ : record.payload instanceof Uint8Array
30
+ ? Array.from(record.payload)
31
+ : null;
32
+ if (!payload)
33
+ throw 'Unsupported payload type';
34
+ return {
35
+ type: record.type,
36
+ payload,
37
+ };
38
+ })) !== null && _a !== void 0 ? _a : [],
39
+ };
40
+ await NFCPlug.writeNDEF(ndefMessage);
41
+ },
42
+ };
43
+ const decodeBase64 = (base64Payload) => {
44
+ return atob(base64Payload)
45
+ .split('')
46
+ .map((char) => char.charCodeAt(0));
47
+ };
48
+ const mapPayloadTo = (type, data) => {
49
+ return {
50
+ messages: data.messages.map(message => ({
51
+ records: message.records.map(record => ({
52
+ type: record.type,
53
+ payload: type === "b64"
54
+ ? record.payload
55
+ : type === "string"
56
+ ? decodeBase64(record.payload)
57
+ : type === "uint8Array"
58
+ ? new Uint8Array(decodeBase64(record.payload))
59
+ : type === "numberArray"
60
+ ? Array.from(decodeBase64(record.payload))
61
+ : record.payload
62
+ }))
63
+ }))
64
+ };
65
+ };
66
+ NFCPlug.addListener(`nfcTag`, data => {
67
+ const wrappedData = {
68
+ base64() {
69
+ return mapPayloadTo("b64", data);
70
+ },
71
+ string() {
72
+ return mapPayloadTo("string", data);
73
+ },
74
+ uint8Array() {
75
+ return mapPayloadTo("uint8Array", data);
76
+ },
77
+ numberArray() {
78
+ return mapPayloadTo("numberArray", data);
79
+ }
80
+ };
81
+ for (const listener of NFC.wrapperListeners) {
82
+ listener(wrappedData);
83
+ }
84
+ });
5
85
 
6
- exports.NFC = NFC;
86
+ class NFCWeb extends core.WebPlugin {
87
+ constructor() {
88
+ super(...arguments);
89
+ this.wrapperListeners = [];
90
+ }
91
+ isSupported() {
92
+ return Promise.resolve({ supported: false });
93
+ }
94
+ startScan() {
95
+ return Promise.reject(new Error('NFC is not supported on web'));
96
+ }
97
+ cancelWriteAndroid() {
98
+ return Promise.reject(new Error('NFC is not supported on web'));
99
+ }
100
+ writeNDEF() {
101
+ return Promise.reject(new Error('NFC is not supported on web'));
102
+ }
103
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
104
+ onRead(_func) {
105
+ return Promise.reject(new Error('NFC is not supported on web'));
106
+ }
107
+ onWrite() {
108
+ return Promise.reject(new Error('NFC is not supported on web'));
109
+ }
110
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
111
+ onError(_errorFn) {
112
+ return Promise.reject(new Error('NFC is not supported on web'));
113
+ }
114
+ }
7
115
 
8
- Object.defineProperty(exports, '__esModule', { value: true });
116
+ var web = /*#__PURE__*/Object.freeze({
117
+ __proto__: null,
118
+ NFCWeb: NFCWeb
119
+ });
9
120
 
10
- return exports;
121
+ exports.NFC = NFC;
122
+
123
+ Object.defineProperty(exports, '__esModule', { value: true });
124
+
125
+ return exports;
11
126
 
12
127
  })({}, capacitorExports);
13
128
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["esm/index.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst NFC = registerPlugin('NFC');\nexport * from './definitions';\nexport { NFC };\n//# sourceMappingURL=index.js.map"],"names":["registerPlugin"],"mappings":";;;AACK,OAAC,GAAG,GAAGA,mBAAc,CAAC,KAAK;;;;;;;;;;;;"}
1
+ {"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { 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 cancelWriteAndroid: NFCPlug.cancelWriteAndroid.bind(NFCPlug),\n onRead: (func) => NFC.wrapperListeners.push(func),\n onWrite: (func) => NFCPlug.addListener(`nfcWriteSuccess`, func),\n onError: (errorFn) => {\n NFCPlug.addListener(`nfcError`, errorFn);\n },\n removeAllListeners: (eventName) => {\n NFC.wrapperListeners = [];\n return NFCPlug.removeAllListeners(eventName);\n },\n wrapperListeners: [],\n async writeNDEF(options) {\n var _a;\n const ndefMessage = {\n records: (_a = options === null || options === void 0 ? void 0 : options.records.map((record) => {\n const payload = typeof record.payload === 'string'\n ? Array.from(new TextEncoder().encode(record.payload))\n : Array.isArray(record.payload)\n ? record.payload\n : record.payload instanceof Uint8Array\n ? Array.from(record.payload)\n : null;\n if (!payload)\n throw 'Unsupported payload type';\n return {\n type: record.type,\n payload,\n };\n })) !== null && _a !== void 0 ? _a : [],\n };\n await NFCPlug.writeNDEF(ndefMessage);\n },\n};\nconst decodeBase64 = (base64Payload) => {\n return atob(base64Payload)\n .split('')\n .map((char) => char.charCodeAt(0));\n};\nconst mapPayloadTo = (type, data) => {\n return {\n messages: data.messages.map(message => ({\n records: message.records.map(record => ({\n type: record.type,\n payload: type === \"b64\"\n ? record.payload\n : type === \"string\"\n ? decodeBase64(record.payload)\n : type === \"uint8Array\"\n ? new Uint8Array(decodeBase64(record.payload))\n : type === \"numberArray\"\n ? Array.from(decodeBase64(record.payload))\n : record.payload\n }))\n }))\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 constructor() {\n super(...arguments);\n this.wrapperListeners = [];\n }\n isSupported() {\n return Promise.resolve({ supported: false });\n }\n startScan() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n cancelWriteAndroid() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n writeNDEF() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onRead(_func) {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n onWrite() {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onError(_errorFn) {\n return Promise.reject(new Error('NFC is not supported on web'));\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
@@ -7,6 +7,8 @@ public class NFCPlugin: CAPPlugin, CAPBridgedPlugin {
7
7
  public let identifier = "NFCPlugin"
8
8
  public let jsName = "NFC"
9
9
  public let pluginMethods: [CAPPluginMethod] = [
10
+ CAPPluginMethod(name: "isSupported", returnType: CAPPluginReturnPromise),
11
+ CAPPluginMethod(name: "cancelWriteAndroid", returnType: CAPPluginReturnPromise),
10
12
  CAPPluginMethod(name: "startScan", returnType: CAPPluginReturnPromise),
11
13
  CAPPluginMethod(name: "writeNDEF", returnType: CAPPluginReturnPromise)
12
14
  ]
@@ -14,6 +16,14 @@ public class NFCPlugin: CAPPlugin, CAPBridgedPlugin {
14
16
  private let reader = NFCReader()
15
17
  private let writer = NFCWriter()
16
18
 
19
+ @objc func isSupported(_ call: CAPPluginCall) {
20
+ call.resolve(["supported": NFCNDEFReaderSession.readingAvailable])
21
+ }
22
+
23
+ @objc func cancelWriteAndroid(_ call: CAPPluginCall) {
24
+ call.reject("Function not implemented for iOS")
25
+ }
26
+
17
27
  @objc func startScan(_ call: CAPPluginCall) {
18
28
  print("startScan called")
19
29
  reader.onNDEFMessageReceived = { messages in
@@ -22,10 +32,11 @@ public class NFCPlugin: CAPPlugin, CAPBridgedPlugin {
22
32
  var records = [[String: Any]]()
23
33
  for record in message.records {
24
34
  let recordType = String(data: record.type, encoding: .utf8) ?? ""
25
- let payload = String(data: record.payload, encoding: .utf8) ?? ""
35
+ let payloadData = record.payload.base64EncodedString()
36
+
26
37
  records.append([
27
38
  "type": recordType,
28
- "payload": payload
39
+ "payload": payloadData
29
40
  ])
30
41
  }
31
42
  ndefMessages.append([
@@ -58,11 +69,23 @@ public class NFCPlugin: CAPPlugin, CAPBridgedPlugin {
58
69
  var ndefRecords = [NFCNDEFPayload]()
59
70
  for recordData in recordsData {
60
71
  guard let type = recordData["type"] as? String,
61
- let payload = recordData["payload"] as? String,
62
- let typeData = type.data(using: .utf8),
63
- let payloadData = payload.data(using: .utf8) else {
72
+ let payload = recordData["payload"] as? [NSNumber],
73
+ let typeData = type.data(using: .utf8)
74
+ else {
75
+ print("Skipping record due to missing or invalid record")
64
76
  continue
65
77
  }
78
+
79
+ guard let payloadArray = payload as [NSNumber]? else {
80
+ print("Skipping record due to missing or invalid 'payload' (expected array of numbers)")
81
+ continue
82
+ }
83
+
84
+ var payloadBytes = [UInt8]()
85
+ for number in payloadArray {
86
+ payloadBytes.append(number.uint8Value)
87
+ }
88
+ let payloadData = Data(payloadBytes)
66
89
 
67
90
  let ndefRecord = NFCNDEFPayload(
68
91
  format: .nfcWellKnown,
@@ -80,6 +80,7 @@ import CoreNFC
80
80
  }
81
81
 
82
82
  if let message = message {
83
+ print("NDEF message read: \(message)")
83
84
  statusMessage = "Found 1 NDEF message."
84
85
  session.alertMessage = statusMessage
85
86
  session.invalidate()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exxili/capacitor-nfc",
3
- "version": "0.0.2",
3
+ "version": "0.0.9",
4
4
  "description": "A Capacitor plugin for reading and writing NFC NDEFtags.",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",
@@ -13,7 +13,7 @@
13
13
  "ios/Sources",
14
14
  "ios/Tests",
15
15
  "Package.swift",
16
- "CapacitorNfc.podspec"
16
+ "ExxiliCapacitorNfc.podspec"
17
17
  ],
18
18
  "author": "Exxili",
19
19
  "license": "MIT",
@@ -1,11 +0,0 @@
1
- package com.exxili.capacitornfc;
2
-
3
- import android.util.Log;
4
-
5
- public class NFC {
6
-
7
- public String echo(String value) {
8
- Log.i("Echo", value);
9
- return value;
10
- }
11
- }
@@ -1,22 +0,0 @@
1
- package com.exxili.capacitornfc;
2
-
3
- import com.getcapacitor.JSObject;
4
- import com.getcapacitor.Plugin;
5
- import com.getcapacitor.PluginCall;
6
- import com.getcapacitor.PluginMethod;
7
- import com.getcapacitor.annotation.CapacitorPlugin;
8
-
9
- @CapacitorPlugin(name = "NFC")
10
- public class NFCPlugin extends Plugin {
11
-
12
- private NFC implementation = new NFC();
13
-
14
- @PluginMethod
15
- public void echo(PluginCall call) {
16
- String value = call.getString("value");
17
-
18
- JSObject ret = new JSObject();
19
- ret.put("value", implementation.echo(value));
20
- call.resolve(ret);
21
- }
22
- }