UNPKG

@iotize/ionic

Version:

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

93 lines 10.9 kB
import { isCodeError } from '@iotize/common/error'; import { TapClientError } from '@iotize/tap/client/impl'; import { ConnectionState } from '@iotize/tap/protocol/api'; import { Subject } from 'rxjs'; import { isTapUserNotAuthorizedError } from './error-utility'; import { debug } from './logger'; import { isNfcTapRequiredError } from './nfc/utility'; const TAG = 'PendingCallManager'; export class PendingCallManager { tapService; _pendingCall; sessionStateSubscription; connectionStateSub; loading = false; pendingCallResult = new Subject(); static create(tapService) { return new PendingCallManager(tapService); } get pendingCall() { return this._pendingCall; } constructor(tapService) { this.tapService = tapService; this.sessionStateSubscription = this.tapService.sessionState.subscribe((newState) => { if (newState.name !== 'anonymous') { this._runPendingCalls(); } }); this.connectionStateSub = this.tapService.connectionState.subscribe((event) => { if (event.newState == ConnectionState.CONNECTED) { this._runPendingCalls(); } }); } hasPendingCall() { return Boolean(this._pendingCall); } destroy() { if (this.sessionStateSubscription) { this.sessionStateSubscription.unsubscribe(); } if (this.connectionStateSub) { this.connectionStateSub.unsubscribe(); } this.pendingCallResult.complete(); } async exec(call) { if (!this.tapService.tap.isConnected()) { this._pendingCall = call; const error = TapClientError.notConnectedError(); error.message = 'Reconnect Tap to apply changes'; throw error; } try { this.loading = true; const result = await call(); this._pendingCall = undefined; return result; } catch (err) { const isUnauthorizedError = isTapUserNotAuthorizedError(err); if (isUnauthorizedError || isCodeError(TapClientError.Code.NotConnectedError, err) || isNfcTapRequiredError(err)) { // debug(TAG, this.config.key, `Request failed: ${err.message}. Will retry after login`); this._pendingCall = call; } else { this._pendingCall = undefined; } throw err; } finally { this.loading = false; } } cancel() { this._pendingCall = undefined; } async _runPendingCalls() { if (this._pendingCall) { debug(TAG, 'Running pending call'); try { await this.exec(this._pendingCall); this.pendingCallResult.next(undefined); } catch (err) { this.pendingCallResult.next(err); } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZy1jYWxsLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvc3JjL2xpYi9wZW5kaW5nLWNhbGwtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxNQUFNLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQztBQUVqQyxNQUFNLE9BQU8sa0JBQWtCO0lBZ0JWO0lBZlgsWUFBWSxDQUFzQjtJQUNsQyx3QkFBd0IsQ0FBZ0I7SUFDeEMsa0JBQWtCLENBQWU7SUFDbEMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUV2QixpQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztJQUU5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQWdDO1FBQ25ELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFtQixVQUFnQztRQUFoQyxlQUFVLEdBQVYsVUFBVSxDQUFzQjtRQUNqRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUNwRSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUNqRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUF5QjtRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNqRCxLQUFLLENBQUMsT0FBTyxHQUFHLGdDQUFnQyxDQUFDO1lBQ2pELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7WUFDOUIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7WUFDbEIsTUFBTSxtQkFBbUIsR0FBRywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3RCxJQUNFLG1CQUFtQjtnQkFDbkIsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDO2dCQUN2RCxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsRUFDMUIsQ0FBQztnQkFDRCx5RkFBeUY7Z0JBQ3pGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztZQUNoQyxDQUFDO1lBQ0QsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQjtRQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixLQUFLLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0NvZGVFcnJvciB9IGZyb20gJ0Bpb3RpemUvY29tbW9uL2Vycm9yJztcbmltcG9ydCB7IFRhcENsaWVudEVycm9yIH0gZnJvbSAnQGlvdGl6ZS90YXAvY2xpZW50L2ltcGwnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblN0YXRlIH0gZnJvbSAnQGlvdGl6ZS90YXAvcHJvdG9jb2wvYXBpJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ3VycmVudERldmljZVNlcnZpY2UgfSBmcm9tICcuL2N1cnJlbnQtZGV2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNUYXBVc2VyTm90QXV0aG9yaXplZEVycm9yIH0gZnJvbSAnLi9lcnJvci11dGlsaXR5JztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgaXNOZmNUYXBSZXF1aXJlZEVycm9yIH0gZnJvbSAnLi9uZmMvdXRpbGl0eSc7XG5cbmNvbnN0IFRBRyA9ICdQZW5kaW5nQ2FsbE1hbmFnZXInO1xuXG5leHBvcnQgY2xhc3MgUGVuZGluZ0NhbGxNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBfcGVuZGluZ0NhbGw/OiAoKSA9PiBQcm9taXNlPGFueT47XG4gIHByaXZhdGUgc2Vzc2lvblN0YXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGNvbm5lY3Rpb25TdGF0ZVN1YjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gIHBlbmRpbmdDYWxsUmVzdWx0ID0gbmV3IFN1YmplY3Q8RXJyb3IgfCB1bmRlZmluZWQ+KCk7XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUodGFwU2VydmljZTogQ3VycmVudERldmljZVNlcnZpY2UpIHtcbiAgICByZXR1cm4gbmV3IFBlbmRpbmdDYWxsTWFuYWdlcih0YXBTZXJ2aWNlKTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nQ2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0NhbGw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFwU2VydmljZTogQ3VycmVudERldmljZVNlcnZpY2UpIHtcbiAgICB0aGlzLnNlc3Npb25TdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMudGFwU2VydmljZS5zZXNzaW9uU3RhdGUuc3Vic2NyaWJlKFxuICAgICAgKG5ld1N0YXRlKSA9PiB7XG4gICAgICAgIGlmIChuZXdTdGF0ZS5uYW1lICE9PSAnYW5vbnltb3VzJykge1xuICAgICAgICAgIHRoaXMuX3J1blBlbmRpbmdDYWxscygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuY29ubmVjdGlvblN0YXRlU3ViID0gdGhpcy50YXBTZXJ2aWNlLmNvbm5lY3Rpb25TdGF0ZS5zdWJzY3JpYmUoXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50Lm5ld1N0YXRlID09IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHtcbiAgICAgICAgICB0aGlzLl9ydW5QZW5kaW5nQ2FsbHMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBoYXNQZW5kaW5nQ2FsbCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9wZW5kaW5nQ2FsbCk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnNlc3Npb25TdGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZXNzaW9uU3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlU3ViKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdDYWxsUmVzdWx0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZXhlYyhjYWxsOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgaWYgKCF0aGlzLnRhcFNlcnZpY2UudGFwLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdDYWxsID0gY2FsbDtcbiAgICAgIGNvbnN0IGVycm9yID0gVGFwQ2xpZW50RXJyb3Iubm90Q29ubmVjdGVkRXJyb3IoKTtcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSAnUmVjb25uZWN0IFRhcCB0byBhcHBseSBjaGFuZ2VzJztcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhbGwoKTtcbiAgICAgIHRoaXMuX3BlbmRpbmdDYWxsID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgY29uc3QgaXNVbmF1dGhvcml6ZWRFcnJvciA9IGlzVGFwVXNlck5vdEF1dGhvcml6ZWRFcnJvcihlcnIpO1xuICAgICAgaWYgKFxuICAgICAgICBpc1VuYXV0aG9yaXplZEVycm9yIHx8XG4gICAgICAgIGlzQ29kZUVycm9yKFRhcENsaWVudEVycm9yLkNvZGUuTm90Q29ubmVjdGVkRXJyb3IsIGVycikgfHxcbiAgICAgICAgaXNOZmNUYXBSZXF1aXJlZEVycm9yKGVycilcbiAgICAgICkge1xuICAgICAgICAvLyBkZWJ1ZyhUQUcsIHRoaXMuY29uZmlnLmtleSwgYFJlcXVlc3QgZmFpbGVkOiAke2Vyci5tZXNzYWdlfS4gV2lsbCByZXRyeSBhZnRlciBsb2dpbmApO1xuICAgICAgICB0aGlzLl9wZW5kaW5nQ2FsbCA9IGNhbGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9wZW5kaW5nQ2FsbCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9wZW5kaW5nQ2FsbCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3J1blBlbmRpbmdDYWxscygpIHtcbiAgICBpZiAodGhpcy5fcGVuZGluZ0NhbGwpIHtcbiAgICAgIGRlYnVnKFRBRywgJ1J1bm5pbmcgcGVuZGluZyBjYWxsJyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmV4ZWModGhpcy5fcGVuZGluZ0NhbGwpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYWxsUmVzdWx0Lm5leHQodW5kZWZpbmVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhbGxSZXN1bHQubmV4dChlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19