dictionary NFCMessage { sequence records; USVString url; }; typedef (DOMString or unrestricted double or ArrayBuffer or Dictionary) NFCRecordData; dictionary NFCRecord { NFCRecordType recordType; USVString mediaType; NFCRecordData data; }; enum NFCRecordType { "empty", "text", "url", "json", "opaque" }; partial interface Navigator { [SecureContext, SameObject] readonly attribute NFC nfc; }; typedef (DOMString or ArrayBuffer or NFCMessage) NFCPushMessage; [SecureContext] interface NFC { Promise push(NFCPushMessage message, optional NFCPushOptions options); Promise cancelPush(optional NFCPushTarget target = "any"); Promise watch(MessageCallback callback, optional NFCWatchOptions options); Promise cancelWatch(optional long id); }; callback MessageCallback = void (NFCMessage message); dictionary NFCPushOptions { NFCPushTarget target = "any"; unrestricted double timeout = Infinity; boolean ignoreRead = true; }; enum NFCPushTarget { "tag", "peer", "any" }; dictionary NFCWatchOptions { USVString url = ""; NFCRecordType? recordType; USVString mediaType = ""; NFCWatchMode mode = "web-nfc-only"; }; enum NFCWatchMode { "web-nfc-only", "any" };