UNPKG

@iotize/ionic

Version:

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

89 lines 10.7 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 { 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=