UNPKG

@iotize/ionic

Version:

Iotize specific building blocks on top of @ionic/angular.

78 lines 11 kB
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