@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
93 lines • 10.9 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZy1jYWxsLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvc3JjL2xpYi9wZW5kaW5nLWNhbGwtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxNQUFNLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQztBQUVqQyxNQUFNLE9BQU8sa0JBQWtCO0lBZ0JWO0lBZlgsWUFBWSxDQUFzQjtJQUNsQyx3QkFBd0IsQ0FBZ0I7SUFDeEMsa0JBQWtCLENBQWU7SUFDbEMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUV2QixpQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztJQUU5QyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQWdDO1FBQ25ELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxZQUFtQixVQUFnQztRQUFoQyxlQUFVLEdBQVYsVUFBVSxDQUFzQjtRQUNqRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUNw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Q2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0NvZGVFcnJvciB9IGZyb20gJ0Bpb3RpemUvY29tbW9uL2Vycm9yJztcbmltcG9ydCB7IFRhcENsaWVudEVycm9yIH0gZnJvbSAnQGlvdGl6ZS90YXAvY2xpZW50L2ltcGwnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblN0YXRlIH0gZnJvbSAnQGlvdGl6ZS90YXAvcHJvdG9jb2wvYXBpJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ3VycmVudERldmljZVNlcnZpY2UgfSBmcm9tICcuL2N1cnJlbnQtZGV2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNUYXBVc2VyTm90QXV0aG9yaXplZEVycm9yIH0gZnJvbSAnLi9lcnJvci11dGlsaXR5JztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgaXNOZmNUYXBSZXF1aXJlZEVycm9yIH0gZnJvbSAnLi9uZmMvdXRpbGl0eSc7XG5cbmNvbnN0IFRBRyA9ICdQZW5kaW5nQ2FsbE1hbmFnZXInO1xuXG5leHBvcnQgY2xhc3MgUGVuZGluZ0NhbGxNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBfcGVuZGluZ0NhbGw/OiAoKSA9PiBQcm9taXNlPGFueT47XG4gIHByaXZhdGUgc2Vzc2lvblN0YXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGNvbm5lY3Rpb25TdGF0ZVN1YjogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gIHBlbmRpbmdDYWxsUmVzdWx0ID0gbmV3IFN1YmplY3Q8RXJyb3IgfCB1bmRlZmluZWQ+KCk7XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUodGFwU2VydmljZTogQ3VycmVudERldmljZVNlcnZpY2UpIHtcbiAgICByZXR1cm4gbmV3IFBlbmRpbmdDYWxsTWFuYWdlcih0YXBTZXJ2aWNlKTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nQ2FsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0NhbGw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFwU2VydmljZTogQ3VycmVudERldmljZVNlcnZpY2UpIHtcbiAgICB0aGlzLnNlc3Npb25TdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMudGFwU2VydmljZS5zZXNzaW9uU3RhdGUuc3Vic2NyaWJlKFxuICAgICAgKG5ld1N0YXRlKSA9PiB7XG4gICAgICAgIGlmIChuZXdTdGF0ZS5uYW1lICE9PSAnYW5vbnltb3VzJykge1xuICAgICAgICAgIHRoaXMuX3J1blBlbmRpbmdDYWxscygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuY29ubmVjdGlvblN0YXRlU3ViID0gdGhpcy50YXBTZXJ2aWNlLmNvbm5lY3Rpb25TdGF0ZS5zdWJzY3JpYmUoXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50Lm5ld1N0YXRlID09IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHtcbiAgICAgICAgICB0aGlzLl9ydW5QZW5kaW5nQ2FsbHMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBoYXNQZW5kaW5nQ2FsbCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9wZW5kaW5nQ2FsbCk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnNlc3Npb25TdGF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZXNzaW9uU3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlU3ViKSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdDYWxsUmVzdWx0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZXhlYyhjYWxsOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgaWYgKCF0aGlzLnRhcFNlcnZpY2UudGFwLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdDYWxsID0gY2FsbDtcbiAgICAgIGNvbnN0IGVycm9yID0gVGFwQ2xpZW50RXJyb3Iubm90Q29ubmVjdGVkRXJyb3IoKTtcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSAnUmVjb25uZWN0IFRhcCB0byBhcHBseSBjaGFuZ2VzJztcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhbGwoKTtcbiAgICAgIHRoaXMuX3BlbmRpbmdDYWxsID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgY29uc3QgaXNVbmF1dGhvcml6ZWRFcnJvciA9IGlzVGFwVXNlck5vdEF1dGhvcml6ZWRFcnJvcihlcnIpO1xuICAgICAgaWYgKFxuICAgICAgICBpc1VuYXV0aG9yaXplZEVycm9yIHx8XG4gICAgICAgIGlzQ29kZUVycm9yKFRhcENsaWVudEVycm9yLkNvZGUuTm90Q29ubmVjdGVkRXJyb3IsIGVycikgfHxcbiAgICAgICAgaXNOZmNUYXBSZXF1aXJlZEVycm9yKGVycilcbiAgICAgICkge1xuICAgICAgICAvLyBkZWJ1ZyhUQUcsIHRoaXMuY29uZmlnLmtleSwgYFJlcXVlc3QgZmFpbGVkOiAke2Vyci5tZXNzYWdlfS4gV2lsbCByZXRyeSBhZnRlciBsb2dpbmApO1xuICAgICAgICB0aGlzLl9wZW5kaW5nQ2FsbCA9IGNhbGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9wZW5kaW5nQ2FsbCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9wZW5kaW5nQ2FsbCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3J1blBlbmRpbmdDYWxscygpIHtcbiAgICBpZiAodGhpcy5fcGVuZGluZ0NhbGwpIHtcbiAgICAgIGRlYnVnKFRBRywgJ1J1bm5pbmcgcGVuZGluZyBjYWxsJyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmV4ZWModGhpcy5fcGVuZGluZ0NhbGwpO1xuICAgICAgICB0aGlzLnBlbmRpbmdDYWxsUmVzdWx0Lm5leHQodW5kZWZpbmVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhbGxSZXN1bHQubmV4dChlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19