UNPKG

@iotize/ionic

Version:

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

79 lines 11.1 kB
import { inject, 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"; export class TapScannerNfcService { nfcService; platform = inject(Platform); _iosMockTapEvent = new Subject(); /** * TODO refractor */ tapEvent; isStartScanAvailable = this.platform.is('ios'); constructor(nfcService) { this.nfcService = nfcService; 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())); } 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 */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TapScannerNfcService, deps: [{ token: i1.NfcService }], target: i0.ɵɵFactoryTarget.Injectable }); /** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TapScannerNfcService, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TapScannerNfcService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: () => [{ type: i1.NfcService }] }); /** * 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXNjYW5uZXItbmZjLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvc3JjL2xpYi90YXAtc2Nhbm5lci90YXAtc2Nhbm5lci1uZmMvdGFwLXNjYW5uZXItbmZjLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQXVCLE1BQU0sdUJBQXVCLENBQUM7OztBQVV4RSxNQUFNLE9BQU8sb0JBQW9CO0lBY1g7SUFiWixRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTVCLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUVsQyxDQUFDO0lBRUw7O09BRUc7SUFDSCxRQUFRLENBQTBCO0lBRWxDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRS9DLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQ25CLElBQUksQ0FBQyxnQkFBZ0I7UUFDckIsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUN0QyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDNUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixPQUFPO2dCQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztnQkFDZCxHQUFHLEVBQUUsU0FBUzthQUNmLENBQUM7UUFDSixDQUFDLENBQUMsRUFDRixLQUFLLEVBQUUsQ0FDUjtRQUNELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FDM0MsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsRUFDRixLQUFLLEVBQUUsQ0FDUixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWU7UUFDbkIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDekQsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FDbEMsTUFBTSxFQUNOLG1DQUFtQyxDQUNwQyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7MkhBM0RVLG9CQUFvQjsrSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBK0REOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxHQUF1QjtJQUM3QyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUM3QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5mY1RhZyB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9uZmMvbmd4JztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgTmRlZlRhZyB9IGZyb20gJ0Bpb3RpemUvZGV2aWNlLWNvbS1uZmMuY29yZG92YSc7XG5pbXBvcnQgeyBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHNoYXJlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTmZjU2VydmljZSwgUmVjb3ZlcmFibGVUYXBTdGF0ZSB9IGZyb20gJy4vbmZjLXNlcnZpY2Uuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFwTmZjRXZlbnQge1xuICB0YWc6IE5mY1RhZztcbiAgdGFwPzogUmVjb3ZlcmFibGVUYXBTdGF0ZSB8IHVuZGVmaW5lZDtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRhcFNjYW5uZXJOZmNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwbGF0Zm9ybSA9IGluamVjdChQbGF0Zm9ybSk7XG5cbiAgcHJpdmF0ZSBfaW9zTW9ja1RhcEV2ZW50ID0gbmV3IFN1YmplY3Q8e1xuICAgIHRhZzogTmRlZlRhZztcbiAgfT4oKTtcblxuICAvKipcbiAgICogVE9ETyByZWZyYWN0b3JcbiAgICovXG4gIHRhcEV2ZW50OiBPYnNlcnZhYmxlPFRhcE5mY0V2ZW50PjtcblxuICBpc1N0YXJ0U2NhbkF2YWlsYWJsZSA9IHRoaXMucGxhdGZvcm0uaXMoJ2lvcycpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmZjU2VydmljZTogTmZjU2VydmljZSkge1xuICAgIHRoaXMudGFwRXZlbnQgPSBtZXJnZShcbiAgICAgIHRoaXMuX2lvc01vY2tUYXBFdmVudCxcbiAgICAgIC8vIFRPRE8gZml4OiB0YWdEaXNjb3ZlcmVkRXZlbnRzIG5vdCBsaXN0ZW5lZFxuICAgICAgdGhpcy5uZmNTZXJ2aWNlLnRhZ0Rpc2NvdmVyZWRFdmVudHMucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gaXNJb1RpemVUYXBUYWcoZXZlbnQudGFnKSksXG4gICAgICAgIG1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFnOiBldmVudC50YWcsXG4gICAgICAgICAgICB0YXA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmUoKVxuICAgICAgKSxcbiAgICAgIC8vIE5GQyB0YXAgZGV2aWNlcyBhbHJlYWR5IGluaXRpYWxpemVkXG4gICAgICB0aGlzLm5mY1NlcnZpY2UudGFwRGV2aWNlRGlzY292ZXJlZEV2ZW50LnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoIWV2ZW50LnRhZyB8fCAhZXZlbnQudGFwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmUoKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBsaXN0ZW5Ub05mY1RhcHMoKSB7XG4gICAgYXdhaXQgdGhpcy5uZmNTZXJ2aWNlLnNldHVwVGFwRGV2aWNlRGlzY292ZXJlZExpc3RlbmVyKCk7XG4gICAgYXdhaXQgdGhpcy5uZmNTZXJ2aWNlLnNldHVwTmRlZkxpc3RlbmVyKCk7XG4gIH1cblxuICBhc3luYyBpbml0KCkge1xuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdhbmRyb2lkJykpIHtcbiAgICAgIGF3YWl0IHRoaXMubmZjU2VydmljZS5zZXR1cFRhcERldmljZURpc2NvdmVyZWRMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0KCkge1xuICAgIGlmICh0aGlzLmlzU3RhcnRTY2FuQXZhaWxhYmxlKSB7XG4gICAgICB0aGlzLm5mY1NlcnZpY2UuYmVnaW5TZXNzaW9uRnJvbVRlY2goXG4gICAgICAgICdOZmNWJyxcbiAgICAgICAgJ0JyaW5nIHlvdXIgcGhvbmUgY2xvc2UgdG8gdGhlIFRhcCdcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVHJ5IHRvIGd1ZXNzIGlmIGl0J3MgYW4gSW9UaXplIFRhcCBORkMgdGFnXG4gKiBFeGFtcGxlczpcbiAqIE5vdCBJb1RpemUgVGFnOiB7XCJpc1RydXN0ZWRcIjpmYWxzZSxcInRhZ1wiOntcImlkXCI6Wy03NywtODQsLTcsLTU1LDIsMzYsMiwtMzJdLFwidGVjaFR5cGVzXCI6W1wiYW5kcm9pZC5uZmMudGVjaC5OZmNWXCIsXCJhbmRyb2lkLm5mYy50ZWNoLk5kZWZGb3JtYXRhYmxlXCJdfX1cbiAqIElvVGl6ZSBUYWc6IHtcImlkXCI6WzYwLC05MSwtNjcsLTc5LDAsMzYsMiwtMzJdLFwidGVjaFR5cGVzXCI6W1wiYW5kcm9pZC5uZmMudGVjaC5OZmNWXCIsXCJhbmRyb2lkLm5mYy50ZWNoLk5kZWZcIl0sXCJ0eXBlXCI6XCJhbmRyb2lkLm5kZWYudW5rbm93blwiLFwibWF4U2l6ZVwiOjEwMixcImlzV3JpdGFibGVcIjpmYWxzZSxcIm5kZWZNZXNzYWdlXCI6W3tcInRuZlwiOjEsXCJ0eXBlXCI6Wzg1XSxcImlkXCI6W10sXCJwYXlsb2FkXCI6WzAsMTA0LDExNiwxMTYsMTEyLDExNSw1OCw0Nyw0NywxMTksMTE5LDExOSw0NiwxMDUsMTExLDExNiwxMDUsMTIyLDEwMSw0Niw5OSwxMTEsMTA5XX0se1widG5mXCI6NCxcInR5cGVcIjpbOTcsMTEwLDEwMCwxMTQsMTExLDEwNSwxMDAsNDYsOTksMTExLDEwOSw1OCwxMTIsMTA3LDEwM10sXCJpZFwiOltdLFwicGF5bG9hZFwiOls5OSwxMTEsMTA5LDQ2LDEwNSwxMTEsMTE2LDEwNSwxMjIsMTAxLDQ2LDk3LDExMiwxMTIsNDYsMTE1LDEwMSwxMTAsMTE1LDExMSwxMTQsMTAwLDEwMSwxMDksMTExXX0se1widG5mXCI6NSxcInR5cGVcIjpbXSxcImlkXCI6W10sXCJwYXlsb2FkXCI6WzY0LDMyLC0xNiwtMTAwLC00MywtNzcsMTEyXX0se1widG5mXCI6MSxcInR5cGVcIjpbODRdLFwiaWRcIjpbXSxcInBheWxvYWRcIjpbMCw4MywxMDEsMTEwLDExNSwxMTEsMTE0LDMyLDEwMCwxMDEsMTA5LDExMSw5NSw0OCw0OSw0OCw0OSw3MF19XSxcImNhbk1ha2VSZWFkT25seVwiOmZhbHNlfVxuICogQHBhcmFtIHRhZ1xuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gaXNJb1RpemVUYXBUYWcodGFnOiBOZmNUYWcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKCF0YWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgaGFzTmZjNSA9ICEhdGFnLnRlY2hUeXBlcz8uZmluZCgodGVjaCkgPT4gdGVjaC5lbmRzV2l0aCgnTmZjVicpKTtcbiAgaWYgKCFoYXNOZmM1KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghdGFnLm5kZWZNZXNzYWdlPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=