@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
78 lines • 11 kB
JavaScript
import { Injectable } from '@angular/core';
import { Platform } from '@ionic/angular';
import { merge, Subject } from 'rxjs';
import { filter, map, share } from 'rxjs/operators';
import { NfcService } from './nfc-service.service';
import * as i0 from "@angular/core";
import * as i1 from "./nfc-service.service";
import * as i2 from "@ionic/angular";
export class TapScannerNfcService {
constructor(nfcService, platform) {
this.nfcService = nfcService;
this.platform = platform;
this._iosMockTapEvent = new Subject();
/**
* TODO refractor
*/
this.tapEvent = merge(this._iosMockTapEvent,
// TODO fix: tagDiscoveredEvents not listened
this.nfcService.tagDiscoveredEvents.pipe(filter((event) => isIoTizeTapTag(event.tag)), map((event) => {
return {
tag: event.tag,
tap: undefined,
};
}), share()),
// NFC tap devices already initialized
this.nfcService.tapDeviceDiscoveredEvent.pipe(filter((event) => {
if (!event.tag || !event.tap) {
return false;
}
return true;
}), share()));
this.isStartScanAvailable = this.platform.is('ios');
}
async listenToNfcTaps() {
await this.nfcService.setupTapDeviceDiscoveredListener();
await this.nfcService.setupNdefListener();
}
async init() {
if (this.platform.is('android')) {
await this.nfcService.setupTapDeviceDiscoveredListener();
}
}
start() {
if (this.isStartScanAvailable) {
this.nfcService.beginSessionFromTech('NfcV', 'Bring your phone close to the Tap');
}
}
}
/** @nocollapse */ TapScannerNfcService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapScannerNfcService, deps: [{ token: i1.NfcService }, { token: i2.Platform }], target: i0.ɵɵFactoryTarget.Injectable });
/** @nocollapse */ TapScannerNfcService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapScannerNfcService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TapScannerNfcService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i1.NfcService }, { type: i2.Platform }]; } });
/**
* Try to guess if it's an IoTize Tap NFC tag
* Examples:
* Not IoTize Tag: {"isTrusted":false,"tag":{"id":[-77,-84,-7,-55,2,36,2,-32],"techTypes":["android.nfc.tech.NfcV","android.nfc.tech.NdefFormatable"]}}
* IoTize Tag: {"id":[60,-91,-67,-79,0,36,2,-32],"techTypes":["android.nfc.tech.NfcV","android.nfc.tech.Ndef"],"type":"android.ndef.unknown","maxSize":102,"isWritable":false,"ndefMessage":[{"tnf":1,"type":[85],"id":[],"payload":[0,104,116,116,112,115,58,47,47,119,119,119,46,105,111,116,105,122,101,46,99,111,109]},{"tnf":4,"type":[97,110,100,114,111,105,100,46,99,111,109,58,112,107,103],"id":[],"payload":[99,111,109,46,105,111,116,105,122,101,46,97,112,112,46,115,101,110,115,111,114,100,101,109,111]},{"tnf":5,"type":[],"id":[],"payload":[64,32,-16,-100,-43,-77,112]},{"tnf":1,"type":[84],"id":[],"payload":[0,83,101,110,115,111,114,32,100,101,109,111,95,48,49,48,49,70]}],"canMakeReadOnly":false}
* @param tag
* @returns
*/
function isIoTizeTapTag(tag) {
if (!tag) {
return false;
}
const hasNfc5 = !!tag.techTypes?.find((tech) => tech.endsWith('NfcV'));
if (!hasNfc5) {
return false;
}
if (!tag.ndefMessage?.length) {
return false;
}
return true;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXNjYW5uZXItbmZjLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvc3JjL2xpYi90YXAtc2Nhbm5lci90YXAtc2Nhbm5lci1uZmMvdGFwLXNjYW5uZXItbmZjLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQVV4RSxNQUFNLE9BQU8sb0JBQW9CO0lBbUMvQixZQUFvQixVQUFzQixFQUFVLFFBQWtCO1FBQWxELGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBbEM5RCxxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFFbEMsQ0FBQztRQUVMOztXQUVHO1FBQ0gsYUFBUSxHQUE0QixLQUFLLENBQ3ZDLElBQUksQ0FBQyxnQkFBZ0I7UUFDckIsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUN0QyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDNUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixPQUFPO2dCQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztnQkFDZCxHQUFHLEVBQUUsU0FBUzthQUNmLENBQUM7UUFDSixDQUFDLENBQUMsRUFDRixLQUFLLEVBQUUsQ0FDUjtRQUNELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FDM0MsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQzVCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxFQUNGLEtBQUssRUFBRSxDQUNSLENBQ0YsQ0FBQztRQUVGLHlCQUFvQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTBCLENBQUM7SUFFMUUsS0FBSyxDQUFDLGVBQWU7UUFDbkIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDekQsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMvQixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztTQUNuRjtJQUNILENBQUM7O3FJQXBEVSxvQkFBb0I7eUlBQXBCLG9CQUFvQixjQUZuQixNQUFNOzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBd0REOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxHQUF1QjtJQUM3QyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDWixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFO1FBQzVCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZmNUYWcgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvbmZjL25neCc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IE5kZWZUYWcgfSBmcm9tICdAaW90aXplL2RldmljZS1jb20tbmZjLmNvcmRvdmEnO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzaGFyZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5mY1NlcnZpY2UsIFJlY292ZXJhYmxlVGFwU3RhdGUgfSBmcm9tICcuL25mYy1zZXJ2aWNlLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhcE5mY0V2ZW50IHtcbiAgdGFnOiBOZmNUYWc7XG4gIHRhcD86IFJlY292ZXJhYmxlVGFwU3RhdGUgfCB1bmRlZmluZWQ7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUYXBTY2FubmVyTmZjU2VydmljZSB7XG4gIHByaXZhdGUgX2lvc01vY2tUYXBFdmVudCA9IG5ldyBTdWJqZWN0PHtcbiAgICB0YWc6IE5kZWZUYWc7XG4gIH0+KCk7XG5cbiAgLyoqXG4gICAqIFRPRE8gcmVmcmFjdG9yXG4gICAqL1xuICB0YXBFdmVudDogT2JzZXJ2YWJsZTxUYXBOZmNFdmVudD4gPSBtZXJnZShcbiAgICB0aGlzLl9pb3NNb2NrVGFwRXZlbnQsXG4gICAgLy8gVE9ETyBmaXg6IHRhZ0Rpc2NvdmVyZWRFdmVudHMgbm90IGxpc3RlbmVkXG4gICAgdGhpcy5uZmNTZXJ2aWNlLnRhZ0Rpc2NvdmVyZWRFdmVudHMucGlwZShcbiAgICAgIGZpbHRlcigoZXZlbnQpID0+IGlzSW9UaXplVGFwVGFnKGV2ZW50LnRhZykpLFxuICAgICAgbWFwKChldmVudCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRhZzogZXZlbnQudGFnLFxuICAgICAgICAgIHRhcDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBzaGFyZSgpXG4gICAgKSxcbiAgICAvLyBORkMgdGFwIGRldmljZXMgYWxyZWFkeSBpbml0aWFsaXplZFxuICAgIHRoaXMubmZjU2VydmljZS50YXBEZXZpY2VEaXNjb3ZlcmVkRXZlbnQucGlwZShcbiAgICAgIGZpbHRlcigoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YWcgfHwgIWV2ZW50LnRhcCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pLFxuICAgICAgc2hhcmUoKVxuICAgIClcbiAgKTtcblxuICBpc1N0YXJ0U2NhbkF2YWlsYWJsZSA9IHRoaXMucGxhdGZvcm0uaXMoJ2lvcycpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmZjU2VydmljZTogTmZjU2VydmljZSwgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm0pIHt9XG5cbiAgYXN5bmMgbGlzdGVuVG9OZmNUYXBzKCkge1xuICAgIGF3YWl0IHRoaXMubmZjU2VydmljZS5zZXR1cFRhcERldmljZURpc2NvdmVyZWRMaXN0ZW5lcigpO1xuICAgIGF3YWl0IHRoaXMubmZjU2VydmljZS5zZXR1cE5kZWZMaXN0ZW5lcigpO1xuICB9XG5cbiAgYXN5bmMgaW5pdCgpIHtcbiAgICBpZiAodGhpcy5wbGF0Zm9ybS5pcygnYW5kcm9pZCcpKSB7XG4gICAgICBhd2FpdCB0aGlzLm5mY1NlcnZpY2Uuc2V0dXBUYXBEZXZpY2VEaXNjb3ZlcmVkTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICBzdGFydCgpIHtcbiAgICBpZiAodGhpcy5pc1N0YXJ0U2NhbkF2YWlsYWJsZSkge1xuICAgICAgdGhpcy5uZmNTZXJ2aWNlLmJlZ2luU2Vzc2lvbkZyb21UZWNoKCdOZmNWJywgJ0JyaW5nIHlvdXIgcGhvbmUgY2xvc2UgdG8gdGhlIFRhcCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRyeSB0byBndWVzcyBpZiBpdCdzIGFuIElvVGl6ZSBUYXAgTkZDIHRhZ1xuICogRXhhbXBsZXM6XG4gKiBOb3QgSW9UaXplIFRhZzoge1wiaXNUcnVzdGVkXCI6ZmFsc2UsXCJ0YWdcIjp7XCJpZFwiOlstNzcsLTg0LC03LC01NSwyLDM2LDIsLTMyXSxcInRlY2hUeXBlc1wiOltcImFuZHJvaWQubmZjLnRlY2guTmZjVlwiLFwiYW5kcm9pZC5uZmMudGVjaC5OZGVmRm9ybWF0YWJsZVwiXX19XG4gKiBJb1RpemUgVGFnOiB7XCJpZFwiOls2MCwtOTEsLTY3LC03OSwwLDM2LDIsLTMyXSxcInRlY2hUeXBlc1wiOltcImFuZHJvaWQubmZjLnRlY2guTmZjVlwiLFwiYW5kcm9pZC5uZmMudGVjaC5OZGVmXCJdLFwidHlwZVwiOlwiYW5kcm9pZC5uZGVmLnVua25vd25cIixcIm1heFNpemVcIjoxMDIsXCJpc1dyaXRhYmxlXCI6ZmFsc2UsXCJuZGVmTWVzc2FnZVwiOlt7XCJ0bmZcIjoxLFwidHlwZVwiOls4NV0sXCJpZFwiOltdLFwicGF5bG9hZFwiOlswLDEwNCwxMTYsMTE2LDExMiwxMTUsNTgsNDcsNDcsMTE5LDExOSwxMTksNDYsMTA1LDExMSwxMTYsMTA1LDEyMiwxMDEsNDYsOTksMTExLDEwOV19LHtcInRuZlwiOjQsXCJ0eXBlXCI6Wzk3LDExMCwxMDAsMTE0LDExMSwxMDUsMTAwLDQ2LDk5LDExMSwxMDksNTgsMTEyLDEwNywxMDNdLFwiaWRcIjpbXSxcInBheWxvYWRcIjpbOTksMTExLDEwOSw0NiwxMDUsMTExLDExNiwxMDUsMTIyLDEwMSw0Niw5NywxMTIsMTEyLDQ2LDExNSwxMDEsMTEwLDExNSwxMTEsMTE0LDEwMCwxMDEsMTA5LDExMV19LHtcInRuZlwiOjUsXCJ0eXBlXCI6W10sXCJpZFwiOltdLFwicGF5bG9hZFwiOls2NCwzMiwtMTYsLTEwMCwtNDMsLTc3LDExMl19LHtcInRuZlwiOjEsXCJ0eXBlXCI6Wzg0XSxcImlkXCI6W10sXCJwYXlsb2FkXCI6WzAsODMsMTAxLDExMCwxMTUsMTExLDExNCwzMiwxMDAsMTAxLDEwOSwxMTEsOTUsNDgsNDksNDgsNDksNzBdfV0sXCJjYW5NYWtlUmVhZE9ubHlcIjpmYWxzZX1cbiAqIEBwYXJhbSB0YWdcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGlzSW9UaXplVGFwVGFnKHRhZzogTmZjVGFnIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIGlmICghdGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGhhc05mYzUgPSAhIXRhZy50ZWNoVHlwZXM/LmZpbmQoKHRlY2gpID0+IHRlY2guZW5kc1dpdGgoJ05mY1YnKSk7XG4gIGlmICghaGFzTmZjNSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoIXRhZy5uZGVmTWVzc2FnZT8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIl19