@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
89 lines • 10.7 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 {
static create(tapService) {
return new PendingCallManager(tapService);
}
get pendingCall() {
return this._pendingCall;
}
constructor(tapService) {
this.tapService = tapService;
this.loading = false;
this.pendingCallResult = new Subject();
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZy1jYWxsLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvc3JjL2xpYi9wZW5kaW5nLWNhbGwtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxNQUFNLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQztBQUVqQyxNQUFNLE9BQU8sa0JBQWtCO0lBUXRCLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBZ0M7UUFDbkQsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQW1CLFVBQWdDO1FBQWhDLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBWjVDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFdkIsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQXFCLENBQUM7UUFXbkQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FDcEUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNYLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUNqRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLGVBQWUsQ0FBQyxTQUFTLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQ2pDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM3QztRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN2QztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUF5QjtRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDakQsS0FBSyxDQUFDLE9BQU8sR0FBRyxnQ0FBZ0MsQ0FBQztZQUNqRCxNQUFNLEtBQUssQ0FBQztTQUNiO1FBQ0QsSUFBSTtZQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7WUFDOUIsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUFDLE9BQU8sR0FBUSxFQUFFO1lBQ2pCLE1BQU0sbUJBQW1CLEdBQUcsMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0QsSUFDRSxtQkFBbUI7Z0JBQ25CLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQztnQkFDdkQscUJBQXFCLENBQUMsR0FBRyxDQUFDLEVBQzFCO2dCQUNBLHlGQUF5RjtnQkFDekYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7YUFDMUI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7YUFDL0I7WUFDRCxNQUFNLEdBQUcsQ0FBQztTQUNYO2dCQUFTO1lBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCO1FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixLQUFLLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDLENBQUM7WUFDbkMsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3hDO1lBQUMsT0FBTyxHQUFRLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbEM7U0FDRjtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQ29kZUVycm9yIH0gZnJvbSAnQGlvdGl6ZS9jb21tb24vZXJyb3InO1xuaW1wb3J0IHsgVGFwQ2xpZW50RXJyb3IgfSBmcm9tICdAaW90aXplL3RhcC9jbGllbnQvaW1wbCc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU3RhdGUgfSBmcm9tICdAaW90aXplL3RhcC9wcm90b2NvbC9hcGknO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDdXJyZW50RGV2aWNlU2VydmljZSB9IGZyb20gJy4vY3VycmVudC1kZXZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBpc1RhcFVzZXJOb3RBdXRob3JpemVkRXJyb3IgfSBmcm9tICcuL2Vycm9yLXV0aWxpdHknO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBpc05mY1RhcFJlcXVpcmVkRXJyb3IgfSBmcm9tICcuL25mYy91dGlsaXR5JztcblxuY29uc3QgVEFHID0gJ1BlbmRpbmdDYWxsTWFuYWdlcic7XG5cbmV4cG9ydCBjbGFzcyBQZW5kaW5nQ2FsbE1hbmFnZXIge1xuICBwcml2YXRlIF9wZW5kaW5nQ2FsbD86ICgpID0+IFByb21pc2U8YW55PjtcbiAgcHJpdmF0ZSBzZXNzaW9uU3RhdGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY29ubmVjdGlvblN0YXRlU3ViOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG5cbiAgcGVuZGluZ0NhbGxSZXN1bHQgPSBuZXcgU3ViamVjdDxFcnJvciB8IHVuZGVmaW5lZD4oKTtcblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZSh0YXBTZXJ2aWNlOiBDdXJyZW50RGV2aWNlU2VydmljZSkge1xuICAgIHJldHVybiBuZXcgUGVuZGluZ0NhbGxNYW5hZ2VyKHRhcFNlcnZpY2UpO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmdDYWxsKCkge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nQ2FsbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0YXBTZXJ2aWNlOiBDdXJyZW50RGV2aWNlU2VydmljZSkge1xuICAgIHRoaXMuc2Vzc2lvblN0YXRlU3Vic2NyaXB0aW9uID0gdGhpcy50YXBTZXJ2aWNlLnNlc3Npb25TdGF0ZS5zdWJzY3JpYmUoXG4gICAgICAobmV3U3RhdGUpID0+IHtcbiAgICAgICAgaWYgKG5ld1N0YXRlLm5hbWUgIT09ICdhbm9ueW1vdXMnKSB7XG4gICAgICAgICAgdGhpcy5fcnVuUGVuZGluZ0NhbGxzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uU3RhdGVTdWIgPSB0aGlzLnRhcFNlcnZpY2UuY29ubmVjdGlvblN0YXRlLnN1YnNjcmliZShcbiAgICAgIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQubmV3U3RhdGUgPT0gQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCkge1xuICAgICAgICAgIHRoaXMuX3J1blBlbmRpbmdDYWxscygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGhhc1BlbmRpbmdDYWxsKCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX3BlbmRpbmdDYWxsKTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc2Vzc2lvblN0YXRlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlc3Npb25TdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGVTdWIpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvblN0YXRlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0NhbGxSZXN1bHQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBleGVjKGNhbGw6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICBpZiAoIXRoaXMudGFwU2VydmljZS50YXAuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgdGhpcy5fcGVuZGluZ0NhbGwgPSBjYWxsO1xuICAgICAgY29uc3QgZXJyb3IgPSBUYXBDbGllbnRFcnJvci5ub3RDb25uZWN0ZWRFcnJvcigpO1xuICAgICAgZXJyb3IubWVzc2FnZSA9ICdSZWNvbm5lY3QgVGFwIHRvIGFwcGx5IGNoYW5nZXMnO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FsbCgpO1xuICAgICAgdGhpcy5fcGVuZGluZ0NhbGwgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBjb25zdCBpc1VuYXV0aG9yaXplZEVycm9yID0gaXNUYXBVc2VyTm90QXV0aG9yaXplZEVycm9yKGVycik7XG4gICAgICBpZiAoXG4gICAgICAgIGlzVW5hdXRob3JpemVkRXJyb3IgfHxcbiAgICAgICAgaXNDb2RlRXJyb3IoVGFwQ2xpZW50RXJyb3IuQ29kZS5Ob3RDb25uZWN0ZWRFcnJvciwgZXJyKSB8fFxuICAgICAgICBpc05mY1RhcFJlcXVpcmVkRXJyb3IoZXJyKVxuICAgICAgKSB7XG4gICAgICAgIC8vIGRlYnVnKFRBRywgdGhpcy5jb25maWcua2V5LCBgUmVxdWVzdCBmYWlsZWQ6ICR7ZXJyLm1lc3NhZ2V9LiBXaWxsIHJldHJ5IGFmdGVyIGxvZ2luYCk7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdDYWxsID0gY2FsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdDYWxsID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCkge1xuICAgIHRoaXMuX3BlbmRpbmdDYWxsID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfcnVuUGVuZGluZ0NhbGxzKCkge1xuICAgIGlmICh0aGlzLl9wZW5kaW5nQ2FsbCkge1xuICAgICAgZGVidWcoVEFHLCAnUnVubmluZyBwZW5kaW5nIGNhbGwnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXhlYyh0aGlzLl9wZW5kaW5nQ2FsbCk7XG4gICAgICAgIHRoaXMucGVuZGluZ0NhbGxSZXN1bHQubmV4dCh1bmRlZmluZWQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nQ2FsbFJlc3VsdC5uZXh0KGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=