@kolektor/nucleus-identity 0.0.9-pre.5874 → 0.0.9-pre.5894

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -47,6 +47,9 @@ export class NucleusIdentityService {
47
47
  get isServicePrincipalAuthenticated() {
48
48
  return this.servicePrincipalIdentity != null;
49
49
  }
50
+ get isIdentityServicePrincipal() {
51
+ return this._store.defaultIdentityId === this._servicePrincipalTokenId;
52
+ }
50
53
  async init(startLogin = false) {
51
54
  if (this._initStarted || this._initialized) {
52
55
  console.warn('Nucleus.Identity: Auth initialization was already started. Don\'t call init() multiple times!');
@@ -335,4 +338,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
335
338
  providedIn: 'root'
336
339
  }]
337
340
  }], ctorParameters: function () { return [{ type: i1.NucleusAppService }, { type: i2.LocationService }, { type: i3.HttpClient }, { type: i4.OidcConfigurationService }, { type: i5.TokenClient }]; } });
338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVjbGV1cy1pZGVudGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbnVjbGV1cy1pZGVudGl0eS9zcmMvbGliL251Y2xldXMtaWRlbnRpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLFlBQVksRUFDYixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBS3JDLE1BQU0sT0FBTyxz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QUVPLEtBQUssQ0FBQyxXQUFtQjtRQUMvQixPQUFPLElBQUksT0FBTyxDQUFPLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzttSEFwVlUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBdXRob3JpemF0aW9uUmVxdWVzdCxcclxuICBUb2tlblJlc3BvbnNlLFxyXG4gIENyeXB0byxcclxuICBSZWRpcmVjdFJlcXVlc3RIYW5kbGVyLFxyXG4gIEJhc2ljUXVlcnlTdHJpbmdVdGlscyxcclxuICBMb2NhbFN0b3JhZ2VCYWNrZW5kLFxyXG4gIEFwcEF1dGhFcnJvclxyXG59IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XHJcblxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFwcCB9IGZyb20gJ0BjYXBhY2l0b3IvYXBwJztcclxuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJ0BjYXBhY2l0b3IvYnJvd3Nlcic7XHJcbmltcG9ydCB7IERldmljZSB9IGZyb20gJ0BjYXBhY2l0b3IvZGV2aWNlJztcclxuaW1wb3J0IHsgTnVjbGV1c0NyeXB0byB9IGZyb20gJy4vdXRpbHMvbnVjbGV1cy1jcnlwdG8nO1xyXG5pbXBvcnQgeyBOdWNsZXVzQXBwU2VydmljZSB9IGZyb20gJ0Brb2xla3Rvci9udWNsZXVzLWNvbW1vbic7XHJcbmltcG9ydCB7IExvY2F0aW9uU2VydmljZSB9IGZyb20gJy4vdXRpbHMvbG9jYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25SZXF1ZXN0SGFuZGxlciB9IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XHJcbmltcG9ydCB7IE51Y2xldXNBdXRob3JpemF0aW9uTm90aWZpZXIgfSBmcm9tICcuL3V0aWxzL251Y2xldXMtYXV0aG9yaXphdGlvbi1ub3RpZmllcic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE90cFJlc3BvbnNlLCBPdHBTdGF0dXMsIE90cFR5cGUgfSBmcm9tICcuL21vZGVscy9vdHAnO1xyXG5pbXBvcnQgeyBTZWNyZXRzU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NlY3JldHMtc3RvcmUnO1xyXG5pbXBvcnQgeyBPaWRjQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL3V0aWxzL29pZGMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9rZW5DbGllbnQgfSBmcm9tICcuL3V0aWxzL3Rva2VuLWNsaWVudCc7XHJcbmltcG9ydCB7IERldmljZUNvZGUgfSBmcm9tICcuL21vZGVscy9kZXZpY2UtY29kZSc7XHJcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb25TdGF0dXMgfSBmcm9tICcuL21vZGVscy9zZXJ2aWNlLXByaW5jaXBhbCc7XHJcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE51Y2xldXNJZGVudGl0eVNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBOdWNsZXVzQXBwU2VydmljZSxcclxuICAgIGxvY2F0aW9uOiBMb2NhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogT2lkY0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2tlbkNsaWVudDogVG9rZW5DbGllbnRcclxuICApIHtcclxuICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgTG9jYWxTdG9yYWdlQmFja2VuZCgpO1xyXG4gICAgdGhpcy5fY3J5cHRvID0gbmV3IE51Y2xldXNDcnlwdG8oKTtcclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyID0gbmV3IFJlZGlyZWN0UmVxdWVzdEhhbmRsZXIoc3RvcmFnZSwgbmV3IEJhc2ljUXVlcnlTdHJpbmdVdGlscygpLCBsb2NhdGlvbiwgdGhpcy5fY3J5cHRvKTtcclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLnNldEF1dGhvcml6YXRpb25Ob3RpZmllcih0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIpO1xyXG4gICAgdGhpcy5fc3RvcmUgPSBuZXcgU2VjcmV0c1N0b3JlKGNvbmZpZy5jbGllbnRJZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hdXRob3JpemF0aW9uSGFuZGxlcjogQXV0aG9yaXphdGlvblJlcXVlc3RIYW5kbGVyO1xyXG4gIHByaXZhdGUgX2F1dGhvcml6YXRpb25Ob3RpZmllciA9IG5ldyBOdWNsZXVzQXV0aG9yaXphdGlvbk5vdGlmaWVyKCk7XHJcbiAgcHJpdmF0ZSBfY3J5cHRvOiBDcnlwdG87XHJcbiAgcHJpdmF0ZSBfaW5pdFN0YXJ0ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3JlZnJlc2hUb2tlblByb21pc2U6IFByb21pc2U8VG9rZW5SZXNwb25zZT47XHJcbiAgcHJpdmF0ZSBfZ2V0VG9rZW5Qcm9taXNlOiBQcm9taXNlPHN0cmluZz47XHJcbiAgcHJpdmF0ZSBfZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZTogUHJvbWlzZTxzdHJpbmc+O1xyXG4gIHByaXZhdGUgX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkID0gJ19zdmNwJztcclxuICBwcml2YXRlIF9zdG9yZTogU2VjcmV0c1N0b3JlO1xyXG5cclxuICBwdWJsaWMgZ2V0IGlkZW50aXR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmdldElkZW50aXR5KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzQXV0aGVudGljYXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmlkZW50aXR5ICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlcnZpY2VQcmluY2lwYWxJZGVudGl0eSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdG9yZS5nZXRJZGVudGl0eSh0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzU2VydmljZVByaW5jaXBhbEF1dGhlbnRpY2F0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUHJpbmNpcGFsSWRlbnRpdHkgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0KHN0YXJ0TG9naW46IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX2luaXRTdGFydGVkIHx8IHRoaXMuX2luaXRpYWxpemVkKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogQXV0aCBpbml0aWFsaXphdGlvbiB3YXMgYWxyZWFkeSBzdGFydGVkLiBEb25cXCd0IGNhbGwgaW5pdCgpIG11bHRpcGxlIHRpbWVzIScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbml0U3RhcnRlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5oYW5kbGVMYXVuY2hDb2RlSGFzaCgpO1xyXG4gICAgYXdhaXQgdGhpcy5fYXV0aG9yaXphdGlvbkhhbmRsZXIuY29tcGxldGVBdXRob3JpemF0aW9uUmVxdWVzdElmUG9zc2libGUoKTtcclxuXHJcbiAgICBjb25zdCBhdXRoRXJyID0gdGhpcy5fYXV0aG9yaXphdGlvbk5vdGlmaWVyLmVycm9yO1xyXG4gICAgaWYgKGF1dGhFcnIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRob3JpemF0aW9uIGVycjogJyArIGF1dGhFcnIuZXJyb3IgKyAnOiAnICsgYXV0aEVyci5lcnJvckRlc2NyaXB0aW9uKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5fYXV0aG9yaXphdGlvbk5vdGlmaWVyLnJlc3BvbnNlKSB7XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJyc7XHJcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIucmVxdWVzdDtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIucmVzcG9uc2U7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0QnlBdXRob3JpemF0aW9uQ29kZShyZXF1ZXN0LnJlZGlyZWN0VXJpLCByZXNwb25zZS5jb2RlLCByZXF1ZXN0LmludGVybmFsWydjb2RlX3ZlcmlmaWVyJ10pO1xyXG4gICAgICB0aGlzLl9zdG9yZS5zZXREZWZhdWx0SWRlbnRpdHlJZChudWxsKTtcclxuICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKCk7XHJcbiAgICAgIGlmICghcmVzICYmIHN0YXJ0TG9naW4pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2dpbldpdGhTZWNyZXQocHJvdmlkZXI6IHN0cmluZywgc2VjcmV0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3N0b3JlLnJlbW92ZVRva2VuKCk7XHJcbiAgICBjb25zdCBhc3NlcnRpb25Ub2tlbiA9IGF3YWl0IHRoaXMuZ2V0U2VydmljZVByaW5jaXBhbEFjY2Vzc1Rva2VuKCk7XHJcbiAgICBjb25zdCBzY29wZSA9IHRoaXMucHJlcGFyZVNjb3BlKHRydWUsIHRoaXMuY29uZmlnPy5yZXF1ZXN0ZWRTY29wZXMpO1xyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRCeVNlY3JldChwcm92aWRlciwgc2VjcmV0LCBhc3NlcnRpb25Ub2tlbiwgc2NvcGUpO1xyXG4gICAgdGhpcy5fc3RvcmUuc2V0RGVmYXVsdElkZW50aXR5SWQobnVsbCk7XHJcbiAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ2luKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc3RvcmUucmVtb3ZlVG9rZW4oKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnByZXBhcmVBdXRob3JpemF0aW9uUmVxdWVzdCgpO1xyXG4gICAgaWYgKHRoaXMuYXBwU2VydmljZS5pc05hdGl2ZSkge1xyXG4gICAgICBjb25zdCBsaXN0ZW5lciA9IEFwcC5hZGRMaXN0ZW5lcignYXBwVXJsT3BlbicsIGRhdGEgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmFwcFNlcnZpY2UucGxhdGZvcm0gPT09ICdpb3MnKSB7XHJcbiAgICAgICAgICBCcm93c2VyLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xyXG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmdldENvZGVIYXNoKGRhdGEudXJsKTtcclxuICAgICAgICBpZiAoaGFzaCkge1xyXG4gICAgICAgICAgY29uc3QgdGFyZ2V0VXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArICcjJyArIGhhc2g7XHJcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHRhcmdldFVybCk7XHJcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogUmVkaXJlY3QgdXJsIGRpZCBub3QgY29udGFpbiBhdXRob3JpemF0aW9uIGNvZGUhJywgZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLnBlcmZvcm1BdXRob3JpemF0aW9uUmVxdWVzdChjb25maWcsIHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX3N0b3JlLnJlbW92ZVRva2VuKCk7XHJcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXRDb25maWd1cmF0aW9uKCk7XHJcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IHRoaXMuY29uZmlnLnJlZGlyZWN0VXJsO1xyXG4gICAgY29uc3QgbG9nb3V0VXJsID0gY29uZmlnLmVuZFNlc3Npb25FbmRwb2ludCArICc/cG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPScgKyBlbmNvZGVVUkkocmVkaXJlY3RVcmwpO1xyXG4gICAgaWYgKHRoaXMuYXBwU2VydmljZS5pc05hdGl2ZSkge1xyXG4gICAgICBjb25zdCBsaXN0ZW5lciA9IEFwcC5hZGRMaXN0ZW5lcignYXBwVXJsT3BlbicsICgpID0+IHtcclxuICAgICAgICBEZXZpY2UuZ2V0SW5mbygpLnRoZW4oaW5mbyA9PiB7XHJcbiAgICAgICAgICBpZiAoaW5mby5wbGF0Zm9ybSA9PT0gJ2lvcycpIHtcclxuICAgICAgICAgICAgQnJvd3Nlci5jbG9zZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xyXG4gICAgICB9KTtcclxuICAgICAgQnJvd3Nlci5vcGVuKHsgdXJsOiBsb2dvdXRVcmwgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGxvZ291dFVybCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuX2dldFRva2VuUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9nZXRUb2tlblByb21pc2UgPSB0aGlzLmdldEFjY2Vzc1Rva2VuSW50ZXJuYWwoKTtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9nZXRUb2tlblByb21pc2U7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLl9nZXRUb2tlblByb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWxBY2Nlc3NUb2tlbigpIHtcclxuICAgIGlmICghdGhpcy5fZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlID0gdGhpcy5nZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW5JbnRlcm5hbCgpO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2dldFNlcnZpY2VQcmluY2lwYWxUb2tlblByb21pc2U7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLl9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2dpblNlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICBjb25zdCBzcCA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIGlmIChzcCkge1xyXG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMucHJlcGFyZVNjb3BlKGZhbHNlLCB0aGlzLmNvbmZpZy5zZXJ2aWNlUHJpbmNpcGFsUmVxdWVzdGVkU2NvcGVzKTtcclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRCeUNsaWVudENyZWRlbnRpYWxzKHNwLmlkLCBzcC5zZWNyZXQsIHNjb3BlKTtcclxuICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzLCB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZCk7XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcignU2VydmljZSBwcmluY2lwYWwgaXMgbm90IHJlZ2lzdGVyZWQhJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9naW5Bc1NlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcclxuICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgYXdhaXQgdGhpcy5sb2dpblNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3N0b3JlLnNldERlZmF1bHRJZGVudGl0eUlkKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRPdHAodHlwZTogT3RwVHlwZSwgZXhwaXJlc0luOiBudW1iZXIgPSAtMSkge1xyXG4gICAgbGV0IHVybCA9IHRoaXMuY29uZmlnLmdldFNlcnZlclVybChgL290cC9jcmVhdGU/dHlwZT0ke3R5cGV9YCk7XHJcbiAgICBpZiAoZXhwaXJlc0luID4gMCkge1xyXG4gICAgICB1cmwgKz0gYCZleHBpcmVzSW49JHtleHBpcmVzSW59YDtcclxuICAgIH1cclxuICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8T3RwUmVzcG9uc2U+KHVybCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldE90cFN0YXR1cyhpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy5nZXRTZXJ2ZXJVcmwoYC9vdHAvc3RhdHVzLyR7aWR9YCk7XHJcbiAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PE90cFN0YXR1cz4odXJsKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T3RwVXJsKHJlZGlyZWN0VXJsOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVuY29kZWQgPSBlbmNvZGVVUklDb21wb25lbnQocmVkaXJlY3RVcmwpO1xyXG4gICAgY29uc3QgdXJsID0gYC9vdHAvYXV0aD9vdHBWYWx1ZT0ke3Bhc3N3b3JkfSZyZXR1cm5Vcmw9JHtlbmNvZGVkfWA7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0U2VydmVyVXJsKHVybCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc3RhcnRTZXJ2aWNlUHJpbmNpcGFsUmVnaXN0cmF0aW9uKCkge1xyXG4gICAgY29uc3Qgc3AgPSBhd2FpdCB0aGlzLl9zdG9yZS5nZXRTZXJ2aWNlUHJpbmNpcGFsKCk7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRSZWdpc3RyYXRpb25Db2RlKHNwPy5pZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY29tcGxldGVTZXJ2aWNlUHJpbmNpcGFsUmVnaXN0cmF0aW9uKGRldmljZUNvZGU6IERldmljZUNvZGUpIHtcclxuICAgIGNvbnN0IHRva2VuUmVzID0gYXdhaXQgdGhpcy53YWl0Rm9yRGV2aWNlVG9rZW4oZGV2aWNlQ29kZSk7XHJcbiAgICBjb25zdCByZWdSZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LnJlZ2lzdGVyU2VydmljZVByaW5jaXBhbCh0b2tlblJlcy5hY2Nlc3NUb2tlbik7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0U2VydmljZVByaW5jaXBhbCh7XHJcbiAgICAgIGlkOiByZWdSZXMuY2xpZW50SWQsXHJcbiAgICAgIHNlY3JldDogcmVnUmVzLmNsaWVudFNlY3JldCxcclxuICAgICAgZXhwaXJlc0F0OiByZWdSZXMuc2VjcmV0RXhwaXJhdGlvbkRhdGVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZVNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RvcmUucmVtb3ZlU2VydmljZVByaW5jaXBhbCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb25TdGF0dXMoKSB7XHJcbiAgICBjb25zdCBzcCA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIHJldHVybiBuZXcgU2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvblN0YXR1cyhzcCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc3RhcnREZXZpY2VDb2RlTG9naW4oKSB7XHJcbiAgICBjb25zdCBzY29wZSA9IHRoaXMucHJlcGFyZVNjb3BlKHRydWUsIHRoaXMuY29uZmlnLnJlcXVlc3RlZFNjb3Blcyk7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXREZXZpY2VDb2RlKHNjb3BlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZURldmljZUNvZGVMb2dpbihkZXZpY2VDb2RlOiBEZXZpY2VDb2RlKSB7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLndhaXRGb3JEZXZpY2VUb2tlbihkZXZpY2VDb2RlKTtcclxuICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHJlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JEZXZpY2VUb2tlbihkZXZpY2VDb2RlOiBEZXZpY2VDb2RlKSB7XHJcbiAgICBsZXQgcmVzOiBUb2tlblJlc3BvbnNlID0gbnVsbDtcclxuICAgIGRvIHtcclxuICAgICAgaWYgKGRldmljZUNvZGUuaXNFeHBpcmVkKCkpIHtcclxuICAgICAgICB0aHJvdyBFcnJvcignRGV2aWNlIGNvZGUgaXMgZXhwaXJlZCEnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5RGV2aWNlQ29kZShkZXZpY2VDb2RlLmRldmljZUNvZGUpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFwcEF1dGhFcnJvciAmJiBlcnJvci5tZXNzYWdlID09PSAnYXV0aG9yaXphdGlvbl9wZW5kaW5nJykge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5kZWxheSgyMDAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IHdoaWxlICghcmVzKTtcclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVBdXRob3JpemF0aW9uUmVxdWVzdCgpOiBBdXRob3JpemF0aW9uUmVxdWVzdCB7XHJcbiAgICBjb25zdCByZWRpcmVjdFVyaSA9IHRoaXMuY29uZmlnLnJlZGlyZWN0VXJsO1xyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgcmVzcG9uc2VfbW9kZTogJ2ZyYWdtZW50JyxcclxuICAgICAgcHJvbXB0OiAnY29uc2VudCcsXHJcbiAgICAgIGFjY2Vzc190eXBlOiAnb2ZmbGluZScsXHJcbiAgICAgIGF1dGhfcHJvdmlkZXJfaGludDogdGhpcy5jb25maWcuYXV0aFByb3ZpZGVySGludFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3IEF1dGhvcml6YXRpb25SZXF1ZXN0KHtcclxuICAgICAgY2xpZW50X2lkOiB0aGlzLmNvbmZpZy5jbGllbnRJZCxcclxuICAgICAgcmVkaXJlY3RfdXJpOiByZWRpcmVjdFVyaSxcclxuICAgICAgcmVzcG9uc2VfdHlwZTogQXV0aG9yaXphdGlvblJlcXVlc3QuUkVTUE9OU0VfVFlQRV9DT0RFLFxyXG4gICAgICBzY29wZTogdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWcucmVxdWVzdGVkU2NvcGVzKSxcclxuICAgICAgZXh0cmFzOiBwYXJhbXMsXHJcbiAgICB9LCB0aGlzLl9jcnlwdG8sIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW5JbnRlcm5hbCgpIHtcclxuICAgIGxldCB0b2tlbiA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcclxuICAgIGlmICghdG9rZW4/LmlzVmFsaWQoKSkge1xyXG4gICAgICB0b2tlbiA9IGF3YWl0IHRoaXMubG9naW5TZXJ2aWNlUHJpbmNpcGFsKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9rZW4/LmFjY2Vzc1Rva2VuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRBY2Nlc3NUb2tlbkludGVybmFsKCkge1xyXG4gICAgbGV0IHRva2VuID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4oKTtcclxuICAgIGlmICh0b2tlbiAmJiAhdG9rZW4uaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRva2VuID0gYXdhaXQgdGhpcy5sb2dpbldpdGhSZWZyZXNoVG9rZW4odG9rZW4pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRva2VuPy5hY2Nlc3NUb2tlbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9naW5XaXRoUmVmcmVzaFRva2VuKHRva2VuOiBUb2tlblJlc3BvbnNlKSB7XHJcbiAgICBpZiAoIXRoaXMuX3JlZnJlc2hUb2tlblByb21pc2UpIHtcclxuICAgICAgdGhpcy5fcmVmcmVzaFRva2VuUHJvbWlzZSA9IHRoaXMubG9naW5XaXRoUmVmcmVzaFRva2VuSW50ZXJuYWwodG9rZW4pO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlZnJlc2hUb2tlblByb21pc2U7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLl9yZWZyZXNoVG9rZW5Qcm9taXNlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9naW5XaXRoUmVmcmVzaFRva2VuSW50ZXJuYWwodG9rZW46IFRva2VuUmVzcG9uc2UpIHtcclxuICAgIGlmICh0b2tlbj8ucmVmcmVzaFRva2VuKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRCeVJlZnJlc2hUb2tlbih0b2tlbi5yZWZyZXNoVG9rZW4pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHJlcyk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdOdWNsZXVzLklkZW50aXR5OiBGYWlsZWQgdG8gbG9naW4gd2l0aCByZWZyZXNoIHRva2VuLicsIGVycik7XHJcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlID09PSAnaW52YWxpZF9ncmFudCcpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMubG9nb3V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ051Y2xldXMuSWRlbnRpdHk6IFRoZXJlIGlzIG5vIHJlZnJlc2ggdG9rZW4gYXZhaWxhYmxlLicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb2RlSGFzaCh1cmw6IHN0cmluZykge1xyXG4gICAgY29uc3QgYXJyID0gdXJsLnNwbGl0KCcjJyk7XHJcbiAgICBpZiAoYXJyLmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgaGFzaCA9IGFyclsxXTtcclxuICAgICAgaWYgKGhhc2guc3RhcnRzV2l0aCgnY29kZT0nKSkge1xyXG4gICAgICAgIHJldHVybiBoYXNoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTGF1bmNoQ29kZUhhc2goKSB7XHJcbiAgICBpZiAodGhpcy5hcHBTZXJ2aWNlLmlzTmF0aXZlICYmIHRoaXMuYXBwU2VydmljZS5sYXVuY2hVcmwpIHtcclxuICAgICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0Q29kZUhhc2godGhpcy5hcHBTZXJ2aWNlLmxhdW5jaFVybCk7XHJcbiAgICAgIGlmIChoYXNoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ051Y2xldXMuSWRlbnRpdHk6IEdvdCBhdXRob3JpemF0aW9uIGNvZGUgZnJvbSBsYXVuY2hVcmwsIHdpbGwgYXNzaWduIGl0IHRvIGhhc2guJyk7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAnIycgKyBoYXNoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVTY29wZShvZmZsaW5lQWNjZXNzOiBib29sZWFuLCBhZGl0aW9uYWxTY29wZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgc2NvcGUgPSAnb3BlbmlkJztcclxuICAgIGlmIChvZmZsaW5lQWNjZXNzKSB7XHJcbiAgICAgIHNjb3BlICs9ICcgb2ZmbGluZV9hY2Nlc3MnO1xyXG4gICAgfVxyXG4gICAgaWYgKHNjb3BlKSB7XHJcbiAgICAgIHNjb3BlICs9ICcgJyArIGFkaXRpb25hbFNjb3BlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNjb3BlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZWxheShtaWxpc2Vjb25kczogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSwgbWlsaXNlY29uZHMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
341
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVjbGV1cy1pZGVudGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbnVjbGV1cy1pZGVudGl0eS9zcmMvbGliL251Y2xldXMtaWRlbnRpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLFlBQVksRUFDYixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBS3JDLE1BQU0sT0FBTyxz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O1FBQ0QsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFLLElBQUksR0FBRyxHQUFHLGNBQWMsQ0FBQztTQUMvQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFtQjtRQUMvQixPQUFPLElBQUksT0FBTyxDQUFPLE9BQU8sQ0FBQyxFQUFFO1lBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzttSEF4VlUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBdXRob3JpemF0aW9uUmVxdWVzdCxcclxuICBUb2tlblJlc3BvbnNlLFxyXG4gIENyeXB0byxcclxuICBSZWRpcmVjdFJlcXVlc3RIYW5kbGVyLFxyXG4gIEJhc2ljUXVlcnlTdHJpbmdVdGlscyxcclxuICBMb2NhbFN0b3JhZ2VCYWNrZW5kLFxyXG4gIEFwcEF1dGhFcnJvclxyXG59IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XHJcblxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFwcCB9IGZyb20gJ0BjYXBhY2l0b3IvYXBwJztcclxuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJ0BjYXBhY2l0b3IvYnJvd3Nlcic7XHJcbmltcG9ydCB7IERldmljZSB9IGZyb20gJ0BjYXBhY2l0b3IvZGV2aWNlJztcclxuaW1wb3J0IHsgTnVjbGV1c0NyeXB0byB9IGZyb20gJy4vdXRpbHMvbnVjbGV1cy1jcnlwdG8nO1xyXG5pbXBvcnQgeyBOdWNsZXVzQXBwU2VydmljZSB9IGZyb20gJ0Brb2xla3Rvci9udWNsZXVzLWNvbW1vbic7XHJcbmltcG9ydCB7IExvY2F0aW9uU2VydmljZSB9IGZyb20gJy4vdXRpbHMvbG9jYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhvcml6YXRpb25SZXF1ZXN0SGFuZGxlciB9IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XHJcbmltcG9ydCB7IE51Y2xldXNBdXRob3JpemF0aW9uTm90aWZpZXIgfSBmcm9tICcuL3V0aWxzL251Y2xldXMtYXV0aG9yaXphdGlvbi1ub3RpZmllcic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE90cFJlc3BvbnNlLCBPdHBTdGF0dXMsIE90cFR5cGUgfSBmcm9tICcuL21vZGVscy9vdHAnO1xyXG5pbXBvcnQgeyBTZWNyZXRzU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NlY3JldHMtc3RvcmUnO1xyXG5pbXBvcnQgeyBPaWRjQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL3V0aWxzL29pZGMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9rZW5DbGllbnQgfSBmcm9tICcuL3V0aWxzL3Rva2VuLWNsaWVudCc7XHJcbmltcG9ydCB7IERldmljZUNvZGUgfSBmcm9tICcuL21vZGVscy9kZXZpY2UtY29kZSc7XHJcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb25TdGF0dXMgfSBmcm9tICcuL21vZGVscy9zZXJ2aWNlLXByaW5jaXBhbCc7XHJcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE51Y2xldXNJZGVudGl0eVNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBOdWNsZXVzQXBwU2VydmljZSxcclxuICAgIGxvY2F0aW9uOiBMb2NhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogT2lkY0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2tlbkNsaWVudDogVG9rZW5DbGllbnRcclxuICApIHtcclxuICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgTG9jYWxTdG9yYWdlQmFja2VuZCgpO1xyXG4gICAgdGhpcy5fY3J5cHRvID0gbmV3IE51Y2xldXNDcnlwdG8oKTtcclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyID0gbmV3IFJlZGlyZWN0UmVxdWVzdEhhbmRsZXIoc3RvcmFnZSwgbmV3IEJhc2ljUXVlcnlTdHJpbmdVdGlscygpLCBsb2NhdGlvbiwgdGhpcy5fY3J5cHRvKTtcclxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLnNldEF1dGhvcml6YXRpb25Ob3RpZmllcih0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIpO1xyXG4gICAgdGhpcy5fc3RvcmUgPSBuZXcgU2VjcmV0c1N0b3JlKGNvbmZpZy5jbGllbnRJZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hdXRob3JpemF0aW9uSGFuZGxlcjogQXV0aG9yaXphdGlvblJlcXVlc3RIYW5kbGVyO1xyXG4gIHByaXZhdGUgX2F1dGhvcml6YXRpb25Ob3RpZmllciA9IG5ldyBOdWNsZXVzQXV0aG9yaXphdGlvbk5vdGlmaWVyKCk7XHJcbiAgcHJpdmF0ZSBfY3J5cHRvOiBDcnlwdG87XHJcbiAgcHJpdmF0ZSBfaW5pdFN0YXJ0ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3JlZnJlc2hUb2tlblByb21pc2U6IFByb21pc2U8VG9rZW5SZXNwb25zZT47XHJcbiAgcHJpdmF0ZSBfZ2V0VG9rZW5Qcm9taXNlOiBQcm9taXNlPHN0cmluZz47XHJcbiAgcHJpdmF0ZSBfZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZTogUHJvbWlzZTxzdHJpbmc+O1xyXG4gIHByaXZhdGUgX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkID0gJ19zdmNwJztcclxuICBwcml2YXRlIF9zdG9yZTogU2VjcmV0c1N0b3JlO1xyXG5cclxuICBwdWJsaWMgZ2V0IGlkZW50aXR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmdldElkZW50aXR5KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzQXV0aGVudGljYXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmlkZW50aXR5ICE9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlcnZpY2VQcmluY2lwYWxJZGVudGl0eSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdG9yZS5nZXRJZGVudGl0eSh0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzU2VydmljZVByaW5jaXBhbEF1dGhlbnRpY2F0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUHJpbmNpcGFsSWRlbnRpdHkgIT0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNJZGVudGl0eVNlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RvcmUuZGVmYXVsdElkZW50aXR5SWQgPT09IHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXQoc3RhcnRMb2dpbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5faW5pdFN0YXJ0ZWQgfHwgdGhpcy5faW5pdGlhbGl6ZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdOdWNsZXVzLklkZW50aXR5OiBBdXRoIGluaXRpYWxpemF0aW9uIHdhcyBhbHJlYWR5IHN0YXJ0ZWQuIERvblxcJ3QgY2FsbCBpbml0KCkgbXVsdGlwbGUgdGltZXMhJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2luaXRTdGFydGVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmhhbmRsZUxhdW5jaENvZGVIYXNoKCk7XHJcbiAgICBhd2FpdCB0aGlzLl9hdXRob3JpemF0aW9uSGFuZGxlci5jb21wbGV0ZUF1dGhvcml6YXRpb25SZXF1ZXN0SWZQb3NzaWJsZSgpO1xyXG5cclxuICAgIGNvbnN0IGF1dGhFcnIgPSB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIuZXJyb3I7XHJcbiAgICBpZiAoYXV0aEVycikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhvcml6YXRpb24gZXJyOiAnICsgYXV0aEVyci5lcnJvciArICc6ICcgKyBhdXRoRXJyLmVycm9yRGVzY3JpcHRpb24pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIucmVzcG9uc2UpIHtcclxuICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAnJztcclxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuX2F1dGhvcml6YXRpb25Ob3RpZmllci5yZXF1ZXN0O1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuX2F1dGhvcml6YXRpb25Ob3RpZmllci5yZXNwb25zZTtcclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRCeUF1dGhvcml6YXRpb25Db2RlKHJlcXVlc3QucmVkaXJlY3RVcmksIHJlc3BvbnNlLmNvZGUsIHJlcXVlc3QuaW50ZXJuYWxbJ2NvZGVfdmVyaWZpZXInXSk7XHJcbiAgICAgIHRoaXMuX3N0b3JlLnNldERlZmF1bHRJZGVudGl0eUlkKG51bGwpO1xyXG4gICAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4oKTtcclxuICAgICAgaWYgKCFyZXMgJiYgc3RhcnRMb2dpbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ2luV2l0aFNlY3JldChwcm92aWRlcjogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc3RvcmUucmVtb3ZlVG9rZW4oKTtcclxuICAgIGNvbnN0IGFzc2VydGlvblRva2VuID0gYXdhaXQgdGhpcy5nZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW4oKTtcclxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWc/LnJlcXVlc3RlZFNjb3Blcyk7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5U2VjcmV0KHByb3ZpZGVyLCBzZWNyZXQsIGFzc2VydGlvblRva2VuLCBzY29wZSk7XHJcbiAgICB0aGlzLl9zdG9yZS5zZXREZWZhdWx0SWRlbnRpdHlJZChudWxsKTtcclxuICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHJlcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9naW4oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9zdG9yZS5yZW1vdmVUb2tlbigpO1xyXG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWcuZ2V0Q29uZmlndXJhdGlvbigpO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucHJlcGFyZUF1dGhvcml6YXRpb25SZXF1ZXN0KCk7XHJcbiAgICBpZiAodGhpcy5hcHBTZXJ2aWNlLmlzTmF0aXZlKSB7XHJcbiAgICAgIGNvbnN0IGxpc3RlbmVyID0gQXBwLmFkZExpc3RlbmVyKCdhcHBVcmxPcGVuJywgZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXBwU2VydmljZS5wbGF0Zm9ybSA9PT0gJ2lvcycpIHtcclxuICAgICAgICAgIEJyb3dzZXIuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlzdGVuZXIucmVtb3ZlKCk7XHJcbiAgICAgICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0Q29kZUhhc2goZGF0YS51cmwpO1xyXG4gICAgICAgIGlmIChoYXNoKSB7XHJcbiAgICAgICAgICBjb25zdCB0YXJnZXRVcmwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgJyMnICsgaGFzaDtcclxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odGFyZ2V0VXJsKTtcclxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCdOdWNsZXVzLklkZW50aXR5OiBSZWRpcmVjdCB1cmwgZGlkIG5vdCBjb250YWluIGF1dGhvcml6YXRpb24gY29kZSEnLCBkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fYXV0aG9yaXphdGlvbkhhbmRsZXIucGVyZm9ybUF1dGhvcml6YXRpb25SZXF1ZXN0KGNvbmZpZywgcmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9nb3V0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc3RvcmUucmVtb3ZlVG9rZW4oKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcclxuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gdGhpcy5jb25maWcucmVkaXJlY3RVcmw7XHJcbiAgICBjb25zdCBsb2dvdXRVcmwgPSBjb25maWcuZW5kU2Vzc2lvbkVuZHBvaW50ICsgJz9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk9JyArIGVuY29kZVVSSShyZWRpcmVjdFVybCk7XHJcbiAgICBpZiAodGhpcy5hcHBTZXJ2aWNlLmlzTmF0aXZlKSB7XHJcbiAgICAgIGNvbnN0IGxpc3RlbmVyID0gQXBwLmFkZExpc3RlbmVyKCdhcHBVcmxPcGVuJywgKCkgPT4ge1xyXG4gICAgICAgIERldmljZS5nZXRJbmZvKCkudGhlbihpbmZvID0+IHtcclxuICAgICAgICAgIGlmIChpbmZvLnBsYXRmb3JtID09PSAnaW9zJykge1xyXG4gICAgICAgICAgICBCcm93c2VyLmNsb3NlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGlzdGVuZXIucmVtb3ZlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBCcm93c2VyLm9wZW4oeyB1cmw6IGxvZ291dFVybCB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24obG9nb3V0VXJsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBY2Nlc3NUb2tlbigpIHtcclxuICAgIGlmICghdGhpcy5fZ2V0VG9rZW5Qcm9taXNlKSB7XHJcbiAgICAgIHRoaXMuX2dldFRva2VuUHJvbWlzZSA9IHRoaXMuZ2V0QWNjZXNzVG9rZW5JbnRlcm5hbCgpO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2dldFRva2VuUHJvbWlzZTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX2dldFRva2VuUHJvbWlzZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VydmljZVByaW5jaXBhbEFjY2Vzc1Rva2VuKCkge1xyXG4gICAgaWYgKCF0aGlzLl9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlKSB7XHJcbiAgICAgIHRoaXMuX2dldFNlcnZpY2VQcmluY2lwYWxUb2tlblByb21pc2UgPSB0aGlzLmdldFNlcnZpY2VQcmluY2lwYWxBY2Nlc3NUb2tlbkludGVybmFsKCk7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX2dldFNlcnZpY2VQcmluY2lwYWxUb2tlblByb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvZ2luU2VydmljZVByaW5jaXBhbCgpIHtcclxuICAgIGNvbnN0IHNwID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0U2VydmljZVByaW5jaXBhbCgpO1xyXG4gICAgaWYgKHNwKSB7XHJcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUoZmFsc2UsIHRoaXMuY29uZmlnLnNlcnZpY2VQcmluY2lwYWxSZXF1ZXN0ZWRTY29wZXMpO1xyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5Q2xpZW50Q3JlZGVudGlhbHMoc3AuaWQsIHNwLnNlY3JldCwgc2NvcGUpO1xyXG4gICAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMsIHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdTZXJ2aWNlIHByaW5jaXBhbCBpcyBub3QgcmVnaXN0ZXJlZCEnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2dpbkFzU2VydmljZVByaW5jaXBhbCgpIHtcclxuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4odGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xyXG4gICAgaWYgKCF0b2tlbikge1xyXG4gICAgICBhd2FpdCB0aGlzLmxvZ2luU2VydmljZVByaW5jaXBhbCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc3RvcmUuc2V0RGVmYXVsdElkZW50aXR5SWQodGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldE90cCh0eXBlOiBPdHBUeXBlLCBleHBpcmVzSW46IG51bWJlciA9IC0xKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5jb25maWcuZ2V0U2VydmVyVXJsKGAvb3RwL2NyZWF0ZT90eXBlPSR7dHlwZX1gKTtcclxuICAgIGlmIChleHBpcmVzSW4gPiAwKSB7XHJcbiAgICAgIHVybCArPSBgJmV4cGlyZXNJbj0ke2V4cGlyZXNJbn1gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5odHRwLmdldDxPdHBSZXNwb25zZT4odXJsKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0T3RwU3RhdHVzKGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmdldFNlcnZlclVybChgL290cC9zdGF0dXMvJHtpZH1gKTtcclxuICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8T3RwU3RhdHVzPih1cmwpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPdHBVcmwocmVkaXJlY3RVcmw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZW5jb2RlZCA9IGVuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFVybCk7XHJcbiAgICBjb25zdCB1cmwgPSBgL290cC9hdXRoP290cFZhbHVlPSR7cGFzc3dvcmR9JnJldHVyblVybD0ke2VuY29kZWR9YDtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRTZXJ2ZXJVcmwodXJsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdGFydFNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oKSB7XHJcbiAgICBjb25zdCBzcCA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldFJlZ2lzdHJhdGlvbkNvZGUoc3A/LmlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZVNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oZGV2aWNlQ29kZTogRGV2aWNlQ29kZSkge1xyXG4gICAgY29uc3QgdG9rZW5SZXMgPSBhd2FpdCB0aGlzLndhaXRGb3JEZXZpY2VUb2tlbihkZXZpY2VDb2RlKTtcclxuICAgIGNvbnN0IHJlZ1JlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQucmVnaXN0ZXJTZXJ2aWNlUHJpbmNpcGFsKHRva2VuUmVzLmFjY2Vzc1Rva2VuKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRTZXJ2aWNlUHJpbmNpcGFsKHtcclxuICAgICAgaWQ6IHJlZ1Jlcy5jbGllbnRJZCxcclxuICAgICAgc2VjcmV0OiByZWdSZXMuY2xpZW50U2VjcmV0LFxyXG4gICAgICBleHBpcmVzQXQ6IHJlZ1Jlcy5zZWNyZXRFeHBpcmF0aW9uRGF0ZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlU2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdG9yZS5yZW1vdmVTZXJ2aWNlUHJpbmNpcGFsKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvblN0YXR1cygpIHtcclxuICAgIGNvbnN0IHNwID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0U2VydmljZVByaW5jaXBhbCgpO1xyXG4gICAgcmV0dXJuIG5ldyBTZXJ2aWNlUHJpbmNpcGFsUmVnaXN0cmF0aW9uU3RhdHVzKHNwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdGFydERldmljZUNvZGVMb2dpbigpIHtcclxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWcucmVxdWVzdGVkU2NvcGVzKTtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldERldmljZUNvZGUoc2NvcGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlRGV2aWNlQ29kZUxvZ2luKGRldmljZUNvZGU6IERldmljZUNvZGUpIHtcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMud2FpdEZvckRldmljZVRva2VuKGRldmljZUNvZGUpO1xyXG4gICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckRldmljZVRva2VuKGRldmljZUNvZGU6IERldmljZUNvZGUpIHtcclxuICAgIGxldCByZXM6IFRva2VuUmVzcG9uc2UgPSBudWxsO1xyXG4gICAgZG8ge1xyXG4gICAgICBpZiAoZGV2aWNlQ29kZS5pc0V4cGlyZWQoKSkge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdEZXZpY2UgY29kZSBpcyBleHBpcmVkIScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0QnlEZXZpY2VDb2RlKGRldmljZUNvZGUuZGV2aWNlQ29kZSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXBwQXV0aEVycm9yICYmIGVycm9yLm1lc3NhZ2UgPT09ICdhdXRob3JpemF0aW9uX3BlbmRpbmcnKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmRlbGF5KDIwMDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gd2hpbGUgKCFyZXMpO1xyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUF1dGhvcml6YXRpb25SZXF1ZXN0KCk6IEF1dGhvcml6YXRpb25SZXF1ZXN0IHtcclxuICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gdGhpcy5jb25maWcucmVkaXJlY3RVcmw7XHJcblxyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICByZXNwb25zZV9tb2RlOiAnZnJhZ21lbnQnLFxyXG4gICAgICBwcm9tcHQ6ICdjb25zZW50JyxcclxuICAgICAgYWNjZXNzX3R5cGU6ICdvZmZsaW5lJyxcclxuICAgICAgYXV0aF9wcm92aWRlcl9oaW50OiB0aGlzLmNvbmZpZy5hdXRoUHJvdmlkZXJIaW50XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBuZXcgQXV0aG9yaXphdGlvblJlcXVlc3Qoe1xyXG4gICAgICBjbGllbnRfaWQ6IHRoaXMuY29uZmlnLmNsaWVudElkLFxyXG4gICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxyXG4gICAgICByZXNwb25zZV90eXBlOiBBdXRob3JpemF0aW9uUmVxdWVzdC5SRVNQT05TRV9UWVBFX0NPREUsXHJcbiAgICAgIHNjb3BlOiB0aGlzLnByZXBhcmVTY29wZSh0cnVlLCB0aGlzLmNvbmZpZy5yZXF1ZXN0ZWRTY29wZXMpLFxyXG4gICAgICBleHRyYXM6IHBhcmFtcyxcclxuICAgIH0sIHRoaXMuX2NyeXB0bywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWxBY2Nlc3NUb2tlbkludGVybmFsKCkge1xyXG4gICAgbGV0IHRva2VuID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4odGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xyXG4gICAgaWYgKCF0b2tlbj8uaXNWYWxpZCgpKSB7XHJcbiAgICAgIHRva2VuID0gYXdhaXQgdGhpcy5sb2dpblNlcnZpY2VQcmluY2lwYWwoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b2tlbj8uYWNjZXNzVG9rZW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldEFjY2Vzc1Rva2VuSW50ZXJuYWwoKSB7XHJcbiAgICBsZXQgdG9rZW4gPSBhd2FpdCB0aGlzLl9zdG9yZS5nZXRUb2tlbigpO1xyXG4gICAgaWYgKHRva2VuICYmICF0b2tlbi5pc1ZhbGlkKCkpIHtcclxuICAgICAgdG9rZW4gPSBhd2FpdCB0aGlzLmxvZ2luV2l0aFJlZnJlc2hUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9rZW4/LmFjY2Vzc1Rva2VuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2dpbldpdGhSZWZyZXNoVG9rZW4odG9rZW46IFRva2VuUmVzcG9uc2UpIHtcclxuICAgIGlmICghdGhpcy5fcmVmcmVzaFRva2VuUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl9yZWZyZXNoVG9rZW5Qcm9taXNlID0gdGhpcy5sb2dpbldpdGhSZWZyZXNoVG9rZW5JbnRlcm5hbCh0b2tlbik7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVmcmVzaFRva2VuUHJvbWlzZTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX3JlZnJlc2hUb2tlblByb21pc2UgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2dpbldpdGhSZWZyZXNoVG9rZW5JbnRlcm5hbCh0b2tlbjogVG9rZW5SZXNwb25zZSkge1xyXG4gICAgaWYgKHRva2VuPy5yZWZyZXNoVG9rZW4pIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5UmVmcmVzaFRva2VuKHRva2VuLnJlZnJlc2hUb2tlbik7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ051Y2xldXMuSWRlbnRpdHk6IEZhaWxlZCB0byBsb2dpbiB3aXRoIHJlZnJlc2ggdG9rZW4uJywgZXJyKTtcclxuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdpbnZhbGlkX2dyYW50Jykge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2dvdXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignTnVjbGV1cy5JZGVudGl0eTogVGhlcmUgaXMgbm8gcmVmcmVzaCB0b2tlbiBhdmFpbGFibGUuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvZGVIYXNoKHVybDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBhcnIgPSB1cmwuc3BsaXQoJyMnKTtcclxuICAgIGlmIChhcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICBjb25zdCBoYXNoID0gYXJyWzFdO1xyXG4gICAgICBpZiAoaGFzaC5zdGFydHNXaXRoKCdjb2RlPScpKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhc2g7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVMYXVuY2hDb2RlSGFzaCgpIHtcclxuICAgIGlmICh0aGlzLmFwcFNlcnZpY2UuaXNOYXRpdmUgJiYgdGhpcy5hcHBTZXJ2aWNlLmxhdW5jaFVybCkge1xyXG4gICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRDb2RlSGFzaCh0aGlzLmFwcFNlcnZpY2UubGF1bmNoVXJsKTtcclxuICAgICAgaWYgKGhhc2gpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnTnVjbGV1cy5JZGVudGl0eTogR290IGF1dGhvcml6YXRpb24gY29kZSBmcm9tIGxhdW5jaFVybCwgd2lsbCBhc3NpZ24gaXQgdG8gaGFzaC4nKTtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICcjJyArIGhhc2g7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZVNjb3BlKG9mZmxpbmVBY2Nlc3M6IGJvb2xlYW4sIGFkaXRpb25hbFNjb3BlOiBzdHJpbmcpIHtcclxuICAgIGxldCBzY29wZSA9ICdvcGVuaWQnO1xyXG4gICAgaWYgKG9mZmxpbmVBY2Nlc3MpIHtcclxuICAgICAgc2NvcGUgKz0gJyBvZmZsaW5lX2FjY2Vzcyc7XHJcbiAgICB9XHJcbiAgICBpZiAoc2NvcGUpIHtcclxuICAgICAgc2NvcGUgKz0gJyAnICsgYWRpdGlvbmFsU2NvcGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2NvcGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlbGF5KG1pbGlzZWNvbmRzOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9LCBtaWxpc2Vjb25kcyk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
@@ -14,6 +14,9 @@ export class SecretsStore {
14
14
  this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;
15
15
  this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);
16
16
  }
17
+ get defaultIdentityId() {
18
+ return this._defaultIdentityId;
19
+ }
17
20
  removeServicePrincipal() {
18
21
  this._servicePrincipal = null;
19
22
  return this.clear(this._servicePrincipalKey);
@@ -114,4 +117,4 @@ export class SecretsStore {
114
117
  }
115
118
  }
116
119
  }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi91dGlscy9zZWNyZXRzLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBWSxRQUFnQjtRQU9wQixZQUFPLEdBQW9DLEVBQUUsQ0FBQztRQUM5QyxnQkFBVyxHQUErQixFQUFFLENBQUM7UUFHckQsNEdBQTRHO1FBQ3BHLHVCQUFrQixHQUFXLElBQUksQ0FBQztRQUNsQyxpQ0FBNEIsR0FBVyxJQUFJLENBQUM7UUFabEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLG9CQUFvQixRQUFRLEVBQUUsQ0FBQyxDQUFDLDZEQUE2RDtRQUMzSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLE9BQU8sQ0FBQztRQUNsRSxJQUFJLENBQUMsNEJBQTRCLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLE9BQU8sQ0FBQztRQUMxRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBVU0sc0JBQXNCO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxLQUFLLENBQUMsbUJBQW1CLENBQUMsZ0JBQWtDO1FBQ2pFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUMxQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUI7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFtQixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN2RjtRQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBb0IsRUFBRSxLQUFhLElBQUk7UUFDckQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQWEsSUFBSTtRQUNsQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sb0JBQW9CLENBQUMsRUFBVTtRQUNwQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzNCLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ2xGO2FBQU07WUFDTCxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1NBQzVEO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBYSxJQUFJO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFakMsaUZBQWlGO1FBQ2pGLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN0RCxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2QztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQWEsSUFBSTtRQUNsQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxLQUFLLENBQUMsc0JBQXNCLENBQUMsRUFBVTtRQUM3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBb0IsR0FBRyxDQUFDLENBQUM7UUFDNUQsSUFBSSxXQUFXLEVBQUU7WUFDZixNQUFNLEdBQUcsR0FBRyxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzQyxJQUFJLEdBQUcsRUFBRSxXQUFXLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRTtnQkFDcEMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzthQUM3QztTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQW9CLEVBQUUsSUFBYSxFQUFFLEtBQWEsSUFBSTtRQUNuRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNqQixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUI7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUk7b0JBQ0YsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztpQkFDdEM7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO2lCQUNwRTthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQWEsSUFBSTtRQUNuQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1AsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUM5QjtRQUNELE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ25GLENBQUM7SUFFTyxLQUFLLENBQUMsR0FBVztRQUN2QixPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLElBQUksQ0FBSSxHQUFXLEVBQUUsS0FBUTtRQUNuQyxPQUFPLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLEtBQUssQ0FBQyxJQUFJLENBQUksR0FBVztRQUMvQixJQUFJO1lBQ0YsTUFBTSxDQUFDLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRTtnQkFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBTSxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUFDLE1BQU07WUFDTixPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdjYXBhY2l0b3Itc2VjdXJlLXN0b3JhZ2UtcGx1Z2luJztcclxuaW1wb3J0IHsgVG9rZW5SZXNwb25zZSwgVG9rZW5SZXNwb25zZUpzb24gfSBmcm9tICdAb3BlbmlkL2FwcGF1dGgnO1xyXG5pbXBvcnQgeyBJZGVudGl0eSB9IGZyb20gJy4uL21vZGVscy9pZGVudGl0eSc7XHJcbmltcG9ydCB7IFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tICcuLi9tb2RlbHMvc2VydmljZS1wcmluY2lwYWwnO1xyXG5pbXBvcnQgeyBTZWN1cmVTdG9yYWdlUGx1Z2luIH0gZnJvbSAnY2FwYWNpdG9yLXNlY3VyZS1zdG9yYWdlLXBsdWdpbic7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VjcmV0c1N0b3JlIHtcclxuICBjb25zdHJ1Y3RvcihjbGllbnRJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90b2tlblN0b3JhZ2VLZXlQcmVmaXggPSBgTnVjbGV1cy5JZGVudGl0eS4ke2NsaWVudElkfWA7IC8vIGRvIG5vdCBjaGFuZ2UgdGhpcyBvciBsb2dpbiB3aXRoIGV4aXN0aW5nIHRva2VucyB3aWxsIGZhaWxcclxuICAgIHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXkgPSBgJHt0aGlzLl90b2tlblN0b3JhZ2VLZXlQcmVmaXh9LlN2Y1BgO1xyXG4gICAgdGhpcy5fZGVmYXVsdElkZW50aXR5SWRTdG9yYWdlS2V5ID0gYCR7dGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4fS5JZElkYDtcclxuICAgIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fZGVmYXVsdElkZW50aXR5SWRTdG9yYWdlS2V5KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdG9rZW5TdG9yYWdlS2V5UHJlZml4OiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfdG9rZW5zOiB7IFtpZDogc3RyaW5nXTogVG9rZW5SZXNwb25zZSB9ID0ge307XHJcbiAgcHJpdmF0ZSBfaWRlbnRpdGllczogeyBbaWQ6IHN0cmluZ106IElkZW50aXR5IH0gPSB7fTtcclxuICBwcml2YXRlIF9zZXJ2aWNlUHJpbmNpcGFsS2V5O1xyXG4gIHByaXZhdGUgX3NlcnZpY2VQcmluY2lwYWw6IFNlcnZpY2VQcmluY2lwYWw7XHJcbiAgLy8gdGhpcyBzcGVjaWZ5IHdoaWNoIGlkZW50aXR5IGlkIGlzIHVzZWQgYnkgZGVmYXVsdCwgd2hlbiBJZiBpZCBpcyBub3Qgc3BlY2lmaWVkIGluIGdldFRva2VuIG9yIGdldElkZW50aXR5XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdElkZW50aXR5SWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdElkZW50aXR5SWRTdG9yYWdlS2V5OiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBwdWJsaWMgcmVtb3ZlU2VydmljZVByaW5jaXBhbCgpIHtcclxuICAgIHRoaXMuX3NlcnZpY2VQcmluY2lwYWwgPSBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuY2xlYXIodGhpcy5fc2VydmljZVByaW5jaXBhbEtleSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0U2VydmljZVByaW5jaXBhbChzZXJ2aWNlUHJpbmNpcGFsOiBTZXJ2aWNlUHJpbmNpcGFsKSB7XHJcbiAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsID0gc2VydmljZVByaW5jaXBhbDtcclxuICAgIGF3YWl0IHRoaXMuc2F2ZSh0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5LCBzZXJ2aWNlUHJpbmNpcGFsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTZXJ2aWNlUHJpbmNpcGFsKCkge1xyXG4gICAgaWYgKCF0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsKSB7XHJcbiAgICAgIHRoaXMuX3NlcnZpY2VQcmluY2lwYWwgPSBhd2FpdCB0aGlzLmxvYWQ8U2VydmljZVByaW5jaXBhbD4odGhpcy5fc2VydmljZVByaW5jaXBhbEtleSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZVByaW5jaXBhbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRUb2tlbih0b2tlbjogVG9rZW5SZXNwb25zZSwgaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIHJldHVybiB0aGlzLnNldFRva2VuSW50ZXJuYWwodG9rZW4sIHRydWUsIGlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJZGVudGl0eShpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcbiAgICByZXR1cm4gdGhpcy5faWRlbnRpdGllc1trZXldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERlZmF1bHRJZGVudGl0eUlkKGlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkID0gaWQ7XHJcbiAgICBpZiAodGhpcy5fZGVmYXVsdElkZW50aXR5SWQpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5fZGVmYXVsdElkZW50aXR5SWRTdG9yYWdlS2V5LCB0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZFN0b3JhZ2VLZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRva2VuKGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuXHJcbiAgICAvLyBpZiB0b2tlbiBpcyBub3QgdGhlcmUgb3IgaXQgaXMgaW52YWxpZCB3ZSBjaGVjayBzdG9yYWdlIGFnYWluIGJlZm9yZSByZXR1cm5pbmdcclxuICAgIGlmICghdGhpcy5fdG9rZW5zW2tleV0gfHwgIXRoaXMuX3Rva2Vuc1trZXldLmlzVmFsaWQoKSkge1xyXG4gICAgICBhd2FpdCB0aGlzLnJlbG9hZFRva2VuRnJvbVN0b3JhZ2UoaWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3Rva2Vuc1trZXldO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZVRva2VuKGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuICAgIGRlbGV0ZSB0aGlzLl90b2tlbnNba2V5XTtcclxuICAgIGRlbGV0ZSB0aGlzLl9pZGVudGl0aWVzW2tleV07XHJcbiAgICByZXR1cm4gdGhpcy5jbGVhcihrZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyByZWxvYWRUb2tlbkZyb21TdG9yYWdlKGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG4gICAgY29uc3Qgc3RvcmVkVG9rZW4gPSBhd2FpdCB0aGlzLmxvYWQ8VG9rZW5SZXNwb25zZUpzb24+KGtleSk7XHJcbiAgICBpZiAoc3RvcmVkVG9rZW4pIHtcclxuICAgICAgY29uc3QgcmVzID0gbmV3IFRva2VuUmVzcG9uc2Uoc3RvcmVkVG9rZW4pO1xyXG4gICAgICBpZiAocmVzPy5hY2Nlc3NUb2tlbiB8fCByZXM/LmlkVG9rZW4pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNldFRva2VuSW50ZXJuYWwocmVzLCBmYWxzZSwgaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0VG9rZW5JbnRlcm5hbCh0b2tlbjogVG9rZW5SZXNwb25zZSwgc2F2ZTogYm9vbGVhbiwgaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG4gICAgaWYgKHRva2VuID09IG51bGwpIHtcclxuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVUb2tlbihpZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl90b2tlbnNba2V5XSA9IHRva2VuO1xyXG4gICAgICB0aGlzLl9pZGVudGl0aWVzW2tleV0gPSBJZGVudGl0eS5jcmVhdGVGcm9tUmVzcG9uc2UodG9rZW4pO1xyXG4gICAgICBpZiAoc2F2ZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNhdmUoa2V5LCB0b2tlbi50b0pzb24oKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCdOdWNsZXVzLklkZW50aXR5OiBDb3VsZCBub3Qgc2F2ZSB0byBTZWN1cmVTdG9yYWdlLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUb2tlbktleShpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgaWYgKCFpZCkge1xyXG4gICAgICBpZCA9IHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkID8gYCR7dGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4fS4ke2lkfWAgOiB0aGlzLl90b2tlblN0b3JhZ2VLZXlQcmVmaXg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyKGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gU2VjdXJlU3RvcmFnZVBsdWdpbi5yZW1vdmUoeyBrZXkgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmU8VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogUHJvbWlzZTx7IHZhbHVlOiBib29sZWFuIH0+IHtcclxuICAgIHJldHVybiBTZWN1cmVTdG9yYWdlUGx1Z2luLnNldCh7IGtleSwgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9hZDxUPihrZXk6IHN0cmluZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgeCA9IGF3YWl0IFNlY3VyZVN0b3JhZ2VQbHVnaW4uZ2V0KHsga2V5IH0pO1xyXG4gICAgICBpZiAoeD8udmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh4LnZhbHVlKSBhcyBUO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi91dGlscy9zZWNyZXRzLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBcUIsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBWSxRQUFnQjtRQU9wQixZQUFPLEdBQW9DLEVBQUUsQ0FBQztRQUM5QyxnQkFBVyxHQUErQixFQUFFLENBQUM7UUFHckQsNEdBQTRHO1FBQ3BHLHVCQUFrQixHQUFXLElBQUksQ0FBQztRQUNsQyxpQ0FBNEIsR0FBVyxJQUFJLENBQUM7UUFabEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLG9CQUFvQixRQUFRLEVBQUUsQ0FBQyxDQUFDLDZEQUE2RDtRQUMzSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLE9BQU8sQ0FBQztRQUNsRSxJQUFJLENBQUMsNEJBQTRCLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLE9BQU8sQ0FBQztRQUMxRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBVUQsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMs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RSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxLQUFLLENBQUMsSUFBSSxDQUFJLEdBQVc7UUFDL0IsSUFBSTtZQUNGLE1BQU0sQ0FBQyxHQUFHLE1BQU0sbUJBQW1CLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUU7Z0JBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQU0sQ0FBQzthQUNqQztpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFBQyxNQUFNO1lBQ04sT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnY2FwYWNpdG9yLXNlY3VyZS1zdG9yYWdlLXBsdWdpbic7XHJcbmltcG9ydCB7IFRva2VuUmVzcG9uc2UsIFRva2VuUmVzcG9uc2VKc29uIH0gZnJvbSAnQG9wZW5pZC9hcHBhdXRoJztcclxuaW1wb3J0IHsgSWRlbnRpdHkgfSBmcm9tICcuLi9tb2RlbHMvaWRlbnRpdHknO1xyXG5pbXBvcnQgeyBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSAnLi4vbW9kZWxzL3NlcnZpY2UtcHJpbmNpcGFsJztcclxuaW1wb3J0IHsgU2VjdXJlU3RvcmFnZVBsdWdpbiB9IGZyb20gJ2NhcGFjaXRvci1zZWN1cmUtc3RvcmFnZS1wbHVnaW4nO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlY3JldHNTdG9yZSB7XHJcbiAgY29uc3RydWN0b3IoY2xpZW50SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4ID0gYE51Y2xldXMuSWRlbnRpdHkuJHtjbGllbnRJZH1gOyAvLyBkbyBub3QgY2hhbmdlIHRoaXMgb3IgbG9naW4gd2l0aCBleGlzdGluZyB0b2tlbnMgd2lsbCBmYWlsXHJcbiAgICB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5ID0gYCR7dGhpcy5fdG9rZW5TdG9yYWdlS2V5UHJlZml4fS5TdmNQYDtcclxuICAgIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleSA9IGAke3RoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeH0uSWRJZGA7XHJcbiAgICB0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Rva2VuU3RvcmFnZUtleVByZWZpeDogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3Rva2VuczogeyBbaWQ6IHN0cmluZ106IFRva2VuUmVzcG9uc2UgfSA9IHt9O1xyXG4gIHByaXZhdGUgX2lkZW50aXRpZXM6IHsgW2lkOiBzdHJpbmddOiBJZGVudGl0eSB9ID0ge307XHJcbiAgcHJpdmF0ZSBfc2VydmljZVByaW5jaXBhbEtleTtcclxuICBwcml2YXRlIF9zZXJ2aWNlUHJpbmNpcGFsOiBTZXJ2aWNlUHJpbmNpcGFsO1xyXG4gIC8vIHRoaXMgc3BlY2lmeSB3aGljaCBpZGVudGl0eSBpZCBpcyB1c2VkIGJ5IGRlZmF1bHQsIHdoZW4gSWYgaWQgaXMgbm90IHNwZWNpZmllZCBpbiBnZXRUb2tlbiBvciBnZXRJZGVudGl0eVxyXG4gIHByaXZhdGUgX2RlZmF1bHRJZGVudGl0eUlkOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleTogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgcHVibGljIGdldCBkZWZhdWx0SWRlbnRpdHlJZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVTZXJ2aWNlUHJpbmNpcGFsKCkge1xyXG4gICAgdGhpcy5fc2VydmljZVByaW5jaXBhbCA9IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5jbGVhcih0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRTZXJ2aWNlUHJpbmNpcGFsKHNlcnZpY2VQcmluY2lwYWw6IFNlcnZpY2VQcmluY2lwYWwpIHtcclxuICAgIHRoaXMuX3NlcnZpY2VQcmluY2lwYWwgPSBzZXJ2aWNlUHJpbmNpcGFsO1xyXG4gICAgYXdhaXQgdGhpcy5zYXZlKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxLZXksIHNlcnZpY2VQcmluY2lwYWwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWwoKSB7XHJcbiAgICBpZiAoIXRoaXMuX3NlcnZpY2VQcmluY2lwYWwpIHtcclxuICAgICAgdGhpcy5fc2VydmljZVByaW5jaXBhbCA9IGF3YWl0IHRoaXMubG9hZDxTZXJ2aWNlUHJpbmNpcGFsPih0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsS2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFRva2VuKHRva2VuOiBUb2tlblJlc3BvbnNlLCBpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0VG9rZW5JbnRlcm5hbCh0b2tlbiwgdHJ1ZSwgaWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElkZW50aXR5KGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldFRva2VuS2V5KGlkKTtcclxuICAgIHJldHVybiB0aGlzLl9pZGVudGl0aWVzW2tleV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVmYXVsdElkZW50aXR5SWQoaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZGVmYXVsdElkZW50aXR5SWQgPSBpZDtcclxuICAgIGlmICh0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZCkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLl9kZWZhdWx0SWRlbnRpdHlJZFN0b3JhZ2VLZXksIHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuX2RlZmF1bHRJZGVudGl0eUlkU3RvcmFnZUtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VG9rZW4oaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG5cclxuICAgIC8vIGlmIHRva2VuIGlzIG5vdCB0aGVyZSBvciBpdCBpcyBpbnZhbGlkIHdlIGNoZWNrIHN0b3JhZ2UgYWdhaW4gYmVmb3JlIHJldHVybmluZ1xyXG4gICAgaWYgKCF0aGlzLl90b2tlbnNba2V5XSB8fCAhdGhpcy5fdG9rZW5zW2tleV0uaXNWYWxpZCgpKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVsb2FkVG9rZW5Gcm9tU3RvcmFnZShpZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5zW2tleV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlVG9rZW4oaWQ6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VG9rZW5LZXkoaWQpO1xyXG4gICAgZGVsZXRlIHRoaXMuX3Rva2Vuc1trZXldO1xyXG4gICAgZGVsZXRlIHRoaXMuX2lkZW50aXRpZXNba2V5XTtcclxuICAgIHJldHVybiB0aGlzLmNsZWFyKGtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJlbG9hZFRva2VuRnJvbVN0b3JhZ2UoaWQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcbiAgICBjb25zdCBzdG9yZWRUb2tlbiA9IGF3YWl0IHRoaXMubG9hZDxUb2tlblJlc3BvbnNlSnNvbj4oa2V5KTtcclxuICAgIGlmIChzdG9yZWRUb2tlbikge1xyXG4gICAgICBjb25zdCByZXMgPSBuZXcgVG9rZW5SZXNwb25zZShzdG9yZWRUb2tlbik7XHJcbiAgICAgIGlmIChyZXM/LmFjY2Vzc1Rva2VuIHx8IHJlcz8uaWRUb2tlbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2V0VG9rZW5JbnRlcm5hbChyZXMsIGZhbHNlLCBpZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRUb2tlbkludGVybmFsKHRva2VuOiBUb2tlblJlc3BvbnNlLCBzYXZlOiBib29sZWFuLCBpZDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUb2tlbktleShpZCk7XHJcbiAgICBpZiAodG9rZW4gPT0gbnVsbCkge1xyXG4gICAgICBhd2FpdCB0aGlzLnJlbW92ZVRva2VuKGlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3Rva2Vuc1trZXldID0gdG9rZW47XHJcbiAgICAgIHRoaXMuX2lkZW50aXRpZXNba2V5XSA9IElkZW50aXR5LmNyZWF0ZUZyb21SZXNwb25zZSh0b2tlbik7XHJcbiAgICAgIGlmIChzYXZlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuc2F2ZShrZXksIHRva2VuLnRvSnNvbigpKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ051Y2xldXMuSWRlbnRpdHk6IENvdWxkIG5vdCBzYXZlIHRvIFNlY3VyZVN0b3JhZ2UuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRva2VuS2V5KGlkOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICBpZiAoIWlkKSB7XHJcbiAgICAgIGlkID0gdGhpcy5fZGVmYXVsdElkZW50aXR5SWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWQgPyBgJHt0aGlzLl90b2tlblN0b3JhZ2VLZXlQcmVmaXh9LiR7aWR9YCA6IHRoaXMuX3Rva2VuU3RvcmFnZUtleVByZWZpeDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXIoa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBTZWN1cmVTdG9yYWdlUGx1Z2luLnJlbW92ZSh7IGtleSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2F2ZTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBQcm9taXNlPHsgdmFsdWU6IGJvb2xlYW4gfT4ge1xyXG4gICAgcmV0dXJuIFNlY3VyZVN0b3JhZ2VQbHVnaW4uc2V0KHsga2V5LCB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkPFQ+KGtleTogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB4ID0gYXdhaXQgU2VjdXJlU3RvcmFnZVBsdWdpbi5nZXQoeyBrZXkgfSk7XHJcbiAgICAgIGlmICh4Py52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHgudmFsdWUpIGFzIFQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -152,6 +152,9 @@ class SecretsStore {
152
152
  this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;
153
153
  this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);
154
154
  }
155
+ get defaultIdentityId() {
156
+ return this._defaultIdentityId;
157
+ }
155
158
  removeServicePrincipal() {
156
159
  this._servicePrincipal = null;
157
160
  return this.clear(this._servicePrincipalKey);
@@ -700,6 +703,9 @@ class NucleusIdentityService {
700
703
  get isServicePrincipalAuthenticated() {
701
704
  return this.servicePrincipalIdentity != null;
702
705
  }
706
+ get isIdentityServicePrincipal() {
707
+ return this._store.defaultIdentityId === this._servicePrincipalTokenId;
708
+ }
703
709
  init(startLogin = false) {
704
710
  return __awaiter(this, void 0, void 0, function* () {
705
711
  if (this._initStarted || this._initialized) {
@@ -1130,4 +1136,3 @@ var OtpType;
1130
1136
  */
1131
1137
 
1132
1138
  export { DeviceCode, Identity, NucleusIdentityConfig, NucleusIdentityModule, NucleusIdentityService, OtpResponse, OtpStatus, OtpType, ServicePrincipalRegistrationStatus };
1133
- //# sourceMappingURL=kolektor-nucleus-identity.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"kolektor-nucleus-identity.mjs","sources":["../../../projects/nucleus-identity/src/lib/utils/nucleus-crypto.ts","../../../projects/nucleus-identity/src/lib/utils/nucleus-authorization-notifier.ts","../../../projects/nucleus-identity/src/lib/models/identity.ts","../../../projects/nucleus-identity/src/lib/utils/secrets-store.ts","../../../projects/nucleus-identity/src/lib/models/service-principal.ts","../../../projects/nucleus-identity/src/lib/utils/location.service.ts","../../../projects/nucleus-identity/src/lib/utils/authorization-service-configuration.ts","../../../projects/nucleus-identity/src/lib/utils/angular-requestor.ts","../../../projects/nucleus-identity/src/lib/nucleus-identity-config.ts","../../../projects/nucleus-identity/src/lib/utils/oidc-configuration.service.ts","../../../projects/nucleus-identity/src/lib/models/device-code.ts","../../../projects/nucleus-identity/src/lib/models/client-registration.ts","../../../projects/nucleus-identity/src/lib/utils/token-client.ts","../../../projects/nucleus-identity/src/lib/nucleus-identity.service.ts","../../../projects/nucleus-identity/src/lib/nucleus-token-interceptor.service.ts","../../../projects/nucleus-identity/src/lib/nucleus-identity.module.ts","../../../projects/nucleus-identity/src/lib/models/otp.ts","../../../projects/nucleus-identity/src/public-api.ts","../../../projects/nucleus-identity/src/kolektor-nucleus-identity.ts"],"sourcesContent":["// It also supports IE with window.msCrypto !!!!!!\r\nimport { Crypto } from '@openid/appauth';\r\nimport { AppAuthError } from '@openid/appauth';\r\nimport * as base64 from 'base64-js';\r\n\r\nconst CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n\r\nexport class NucleusCrypto implements Crypto {\r\n private browserCrypto = window.crypto || (window as any).msCrypto;\r\n\r\n generateRandom(size: number) {\r\n const buffer = new Uint8Array(size);\r\n if (this.browserCrypto) {\r\n this.browserCrypto.getRandomValues(buffer);\r\n } else {\r\n // fall back to Math.random() if nothing else is available\r\n for (let i = 0; i < size; i += 1) {\r\n buffer[i] = Math.random();\r\n }\r\n }\r\n return this.bufferToString(buffer);\r\n }\r\n\r\n deriveChallenge(code: string): Promise<string> {\r\n if (code.length < 43 || code.length > 128) {\r\n return Promise.reject(new AppAuthError('Invalid code length.'));\r\n }\r\n if (!this.browserCrypto.subtle) {\r\n return Promise.reject(new AppAuthError('window.crypto.subtle is unavailable.'));\r\n }\r\n\r\n const ecode = this.textEncodeLite(code);\r\n const op = this.browserCrypto.subtle.digest('SHA-256', ecode);\r\n return new Promise((resolve, reject) => {\r\n // if operation contains algorithm it means it is not a promise which means it is CryptoOperation from IE.\r\n // We just return result as promise\r\n if (op.algorithm) {\r\n console.log('we have a CryptoOperation');\r\n op.addEventListener('complete', () => {\r\n resolve(this.urlSafe(op.result));\r\n });\r\n\r\n op.addEventListener('error', () => {\r\n reject(op.result);\r\n });\r\n } else { // the result is promise\r\n op.then(buffer => resolve(this.urlSafe(buffer)), error => reject(error));\r\n }\r\n });\r\n }\r\n\r\n\r\n private urlSafe(buffer: Uint8Array): string {\r\n const encoded = base64.fromByteArray(new Uint8Array(buffer));\r\n return encoded.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\r\n }\r\n\r\n private textEncodeLite(str: string) {\r\n const buf = new ArrayBuffer(str.length);\r\n const bufView = new Uint8Array(buf);\r\n\r\n for (let i = 0; i < str.length; i++) {\r\n bufView[i] = str.charCodeAt(i);\r\n }\r\n return bufView;\r\n }\r\n\r\n private bufferToString(buffer: Uint8Array) {\r\n const state = [];\r\n for (let i = 0; i < buffer.byteLength; i += 1) {\r\n const index = buffer[i] % CHARSET.length;\r\n state.push(CHARSET[index]);\r\n }\r\n return state.join('');\r\n }\r\n}\r\n","import { AuthorizationNotifier } from '@openid/appauth';\r\nimport { AuthorizationResponse, AuthorizationError } from '@openid/appauth';\r\nimport { AuthorizationRequest } from '@openid/appauth';\r\n\r\nexport class NucleusAuthorizationNotifier extends AuthorizationNotifier {\r\n response: AuthorizationResponse;\r\n request: AuthorizationRequest;\r\n error: AuthorizationError;\r\n\r\n constructor() {\r\n super();\r\n this.setAuthorizationListener((request, response, error) => {\r\n console.log('Authorization request complete ', request, response, error);\r\n this.response = response;\r\n this.request = request;\r\n this.error = error;\r\n });\r\n }\r\n}\r\n","import { TokenResponse } from '@openid/appauth';\r\n\r\nexport class Claim {\r\n public name: string;\r\n public values: string[];\r\n\r\n constructor(name: string, values: string[]) {\r\n this.name = name;\r\n this.values = values;\r\n }\r\n}\r\n\r\nexport class Identity {\r\n public name: string;\r\n public subject: string;\r\n\r\n public claims: Claim[] = [];\r\n\r\n public static createFromResponse(res: TokenResponse): Identity {\r\n const token = this.decodeToken(res.idToken);\r\n const id = new Identity();\r\n id.name = token.name;\r\n id.subject = token.sub;\r\n for (const key in token) {\r\n if ({}.hasOwnProperty.call(token, key)) {\r\n let vals = token[key];\r\n\r\n if (!Array.isArray(vals)) {\r\n vals = [vals];\r\n }\r\n\r\n const claim = new Claim(key, vals);\r\n id.claims.push(claim);\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n private static decodeToken(jwt: string): any {\r\n if (!jwt) {\r\n throw new Error('NucleusIdentity: There was no identity token in the response!');\r\n }\r\n\r\n try {\r\n const arr = jwt.split('.');\r\n // var header = arr[0];\r\n const payload = this.b64DecodeUnicode(arr[1]);\r\n // var signature = arr[2];\r\n return JSON.parse(payload);\r\n } catch (error) {\r\n console.error('Error while decoding identity token', error);\r\n console.error('Error while decoding identity token JWT', jwt);\r\n }\r\n }\r\n\r\n private static b64DecodeUnicode(str: string) {\r\n str = str.replace(/-/g, '+').replace(/_/g, '/'); // Qlector fix :)\r\n return decodeURIComponent(atob(str).split('').map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)).join(''));\r\n }\r\n}\r\n","import 'capacitor-secure-storage-plugin';\r\nimport { TokenResponse, TokenResponseJson } from '@openid/appauth';\r\nimport { Identity } from '../models/identity';\r\nimport { ServicePrincipal } from '../models/service-principal';\r\nimport { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';\r\n\r\nexport class SecretsStore {\r\n constructor(clientId: string) {\r\n this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login with existing tokens will fail\r\n this._servicePrincipalKey = `${this._tokenStorageKeyPrefix}.SvcP`;\r\n this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;\r\n this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);\r\n }\r\n private _tokenStorageKeyPrefix: string;\r\n private _tokens: { [id: string]: TokenResponse } = {};\r\n private _identities: { [id: string]: Identity } = {};\r\n private _servicePrincipalKey;\r\n private _servicePrincipal: ServicePrincipal;\r\n // this specify which identity id is used by default, when If id is not specified in getToken or getIdentity\r\n private _defaultIdentityId: string = null;\r\n private _defaultIdentityIdStorageKey: string = null;\r\n\r\n public removeServicePrincipal() {\r\n this._servicePrincipal = null;\r\n return this.clear(this._servicePrincipalKey);\r\n }\r\n\r\n public async setServicePrincipal(servicePrincipal: ServicePrincipal) {\r\n this._servicePrincipal = servicePrincipal;\r\n await this.save(this._servicePrincipalKey, servicePrincipal);\r\n }\r\n\r\n public async getServicePrincipal() {\r\n if (!this._servicePrincipal) {\r\n this._servicePrincipal = await this.load<ServicePrincipal>(this._servicePrincipalKey);\r\n }\r\n return this._servicePrincipal;\r\n }\r\n\r\n public setToken(token: TokenResponse, id: string = null) {\r\n return this.setTokenInternal(token, true, id);\r\n }\r\n\r\n public getIdentity(id: string = null) {\r\n const key = this.getTokenKey(id);\r\n return this._identities[key];\r\n }\r\n\r\n public setDefaultIdentityId(id: string) {\r\n this._defaultIdentityId = id;\r\n if (this._defaultIdentityId) {\r\n localStorage.setItem(this._defaultIdentityIdStorageKey, this._defaultIdentityId);\r\n } else {\r\n localStorage.removeItem(this._defaultIdentityIdStorageKey);\r\n }\r\n }\r\n\r\n public async getToken(id: string = null) {\r\n const key = this.getTokenKey(id);\r\n\r\n // if token is not there or it is invalid we check storage again before returning\r\n if (!this._tokens[key] || !this._tokens[key].isValid()) {\r\n await this.reloadTokenFromStorage(id);\r\n }\r\n return this._tokens[key];\r\n }\r\n\r\n public removeToken(id: string = null) {\r\n const key = this.getTokenKey(id);\r\n delete this._tokens[key];\r\n delete this._identities[key];\r\n return this.clear(key);\r\n }\r\n\r\n private async reloadTokenFromStorage(id: string) {\r\n const key = this.getTokenKey(id);\r\n const storedToken = await this.load<TokenResponseJson>(key);\r\n if (storedToken) {\r\n const res = new TokenResponse(storedToken);\r\n if (res?.accessToken || res?.idToken) {\r\n await this.setTokenInternal(res, false, id);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private async setTokenInternal(token: TokenResponse, save: boolean, id: string = null) {\r\n const key = this.getTokenKey(id);\r\n if (token == null) {\r\n await this.removeToken(id);\r\n } else {\r\n this._tokens[key] = token;\r\n this._identities[key] = Identity.createFromResponse(token);\r\n if (save) {\r\n try {\r\n await this.save(key, token.toJson());\r\n } catch (e) {\r\n console.warn('Nucleus.Identity: Could not save to SecureStorage.');\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getTokenKey(id: string = null) {\r\n if (!id) {\r\n id = this._defaultIdentityId;\r\n }\r\n return id ? `${this._tokenStorageKeyPrefix}.${id}` : this._tokenStorageKeyPrefix;\r\n }\r\n\r\n private clear(key: string) {\r\n return SecureStoragePlugin.remove({ key });\r\n }\r\n\r\n private save<T>(key: string, value: T): Promise<{ value: boolean }> {\r\n return SecureStoragePlugin.set({ key, value: JSON.stringify(value) });\r\n }\r\n\r\n private async load<T>(key: string) {\r\n try {\r\n const x = await SecureStoragePlugin.get({ key });\r\n if (x?.value) {\r\n return JSON.parse(x.value) as T;\r\n } else {\r\n return null;\r\n }\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n}\r\n","export class ServicePrincipal {\r\n public id: string;\r\n public secret: string;\r\n public expiresAt: Date;\r\n}\r\n\r\nexport class ServicePrincipalRegistrationStatus {\r\n public id: string;\r\n public isRegistered = false;\r\n public expiresAt: Date;\r\n\r\n constructor(servicePrincipal: ServicePrincipal) {\r\n if (servicePrincipal) {\r\n this.isRegistered = true;\r\n this.id = servicePrincipal.id;\r\n this.expiresAt = servicePrincipal.expiresAt;\r\n }\r\n }\r\n\r\n public get isExpired() {\r\n return false;\r\n }\r\n}\r\n","import { LocationLike } from '@openid/appauth';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { Browser } from '@capacitor/browser';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocationService implements LocationLike {\r\n constructor(private appService: NucleusAppService) {\r\n }\r\n\r\n get hash() {\r\n return window.location.hash;\r\n }\r\n set hash(v) {\r\n window.location.hash = v;\r\n }\r\n\r\n get host() {\r\n return window.location.host;\r\n }\r\n set host(v) {\r\n window.location.host = v;\r\n }\r\n\r\n get origin() {\r\n return window.location.origin;\r\n }\r\n\r\n get hostname() {\r\n return window.location.hostname;\r\n }\r\n set hostname(v) {\r\n window.location.hostname = v;\r\n }\r\n\r\n get pathname() {\r\n return window.location.pathname;\r\n }\r\n set pathname(v) {\r\n window.location.pathname = v;\r\n }\r\n\r\n get port() {\r\n return window.location.port;\r\n }\r\n set port(v) {\r\n window.location.port = v;\r\n }\r\n\r\n get protocol() {\r\n return window.location.protocol;\r\n }\r\n set protocol(v) {\r\n window.location.protocol = v;\r\n }\r\n\r\n get search() {\r\n return window.location.search;\r\n }\r\n set search(v) {\r\n window.location.search = v;\r\n }\r\n\r\n assign(url: string): void {\r\n if (this.appService.isNative) {\r\n Browser.open({ url });\r\n } else {\r\n window.location.assign(url);\r\n }\r\n }\r\n}\r\n","import { AuthorizationServiceConfiguration, AuthorizationServiceConfigurationJson, JQueryRequestor, Requestor } from '@openid/appauth';\r\n\r\nconst WELL_KNOWN_PATH = '.well-known';\r\nconst OPENID_CONFIGURATION = 'openid-configuration';\r\n\r\nexport interface NucleusAuthorizationServiceConfigurationJson extends AuthorizationServiceConfigurationJson {\r\n device_authorization_endpoint?: string;\r\n registration_endpoint?: string;\r\n}\r\n\r\nexport class NucleusAuthorizationServiceConfiguration extends AuthorizationServiceConfiguration {\r\n\r\n constructor(request: NucleusAuthorizationServiceConfigurationJson) {\r\n super(request);\r\n this.deviceAuthorizationEndpoint = request.device_authorization_endpoint;\r\n this.registrationEndpoint = request.registration_endpoint;\r\n }\r\n\r\n deviceAuthorizationEndpoint: string;\r\n registrationEndpoint: string;\r\n\r\n static fetchFromIssuer(openIdIssuerUrl: string, requestor?: Requestor) {\r\n const fullUrl = `${openIdIssuerUrl}/${WELL_KNOWN_PATH}/${OPENID_CONFIGURATION}`;\r\n const requestorToUse = requestor || new JQueryRequestor();\r\n return requestorToUse\r\n .xhr<NucleusAuthorizationServiceConfigurationJson>({url: fullUrl, dataType: 'json', method: 'GET'})\r\n .then(json => new NucleusAuthorizationServiceConfiguration(json));\r\n }\r\n\r\n toJson() {\r\n const res = super.toJson() as NucleusAuthorizationServiceConfigurationJson;\r\n res.device_authorization_endpoint = this.deviceAuthorizationEndpoint;\r\n return res as any;\r\n }\r\n}\r\n","import { AppAuthError, Requestor } from '@openid/appauth';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AngularRequestor extends Requestor {\r\n\r\n constructor(private http: HttpClient) {\r\n super();\r\n }\r\n\r\n // eslint-disable-next-line no-undef\r\n xhr<T>(settings: JQueryAjaxSettings): Promise<T> {\r\n if (settings.method === undefined) {\r\n settings.method = 'GET';\r\n }\r\n return new Promise<T>((resolve, reject) => {\r\n this.http.request<T>(settings.method, settings.url, {\r\n body: settings.data,\r\n headers: settings.headers,\r\n }).subscribe(res => resolve(res), err => {\r\n let e = new AppAuthError(err);\r\n if (err instanceof HttpErrorResponse) {\r\n e = new AppAuthError(err.error?.error || err.statusText);\r\n }\r\n reject(e);\r\n });\r\n });\r\n }\r\n}\r\n","export class NucleusIdentityConfig {\r\n public authority: string = null;\r\n\r\n public clientId: string;\r\n\r\n public redirectUri?: string;\r\n\r\n public androidRedirectUri?: string;\r\n\r\n public iOSRedirectUri?: string;\r\n\r\n public httpInterceptorUrls?: string[] = [];\r\n\r\n public automaticLoginOnHttp401 = false;\r\n\r\n public requestedScopes?: string;\r\n\r\n public servicePrincipalRequestedScopes?: string;\r\n\r\n public authProviderHint?: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { NucleusIdentityConfig } from '../nucleus-identity-config';\r\nimport { AngularRequestor } from './angular-requestor';\r\nimport { NucleusAuthorizationServiceConfiguration } from './authorization-service-configuration';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OidcConfigurationService {\r\n constructor(\r\n private requestor: AngularRequestor,\r\n private config: NucleusIdentityConfig,\r\n private appService: NucleusAppService,\r\n ) {\r\n }\r\n\r\n private _configuration: NucleusAuthorizationServiceConfiguration = null;\r\n\r\n public async getConfiguration() {\r\n await this.assureConfiguration();\r\n return this._configuration;\r\n }\r\n\r\n public get clientId() {\r\n return this.config.clientId;\r\n }\r\n\r\n public get requestedScopes() {\r\n return this.config.requestedScopes;\r\n }\r\n\r\n public get servicePrincipalRequestedScopes() {\r\n return this.config.servicePrincipalRequestedScopes;\r\n }\r\n\r\n public get authProviderHint() {\r\n return this.config.authProviderHint;\r\n }\r\n\r\n public get redirectUrl() {\r\n let uri = window.location.href;\r\n const platform = this.appService.platform;\r\n if (platform === 'android' && this.config.androidRedirectUri) {\r\n uri = this.config.androidRedirectUri;\r\n } else if (platform === 'ios' && this.config.iOSRedirectUri) {\r\n uri = this.config.iOSRedirectUri;\r\n } else if (this.config.redirectUri) {\r\n uri = this.config.redirectUri;\r\n }\r\n return this.NormalizeRedirectUri(uri);\r\n }\r\n\r\n public getServerUrl(relativeUri: string = null) {\r\n let authority = this.config.authority;\r\n if (!authority || authority === 'origin') {\r\n authority = window.origin;\r\n }\r\n\r\n let url = new URL(authority);\r\n\r\n if (relativeUri) {\r\n url = new URL(relativeUri, url);\r\n }\r\n\r\n return url.href;\r\n }\r\n\r\n private NormalizeRedirectUri(uri: string) {\r\n const i = uri.indexOf('#');\r\n if (i > 0) {\r\n uri = uri.substring(0, i);\r\n }\r\n return uri;\r\n }\r\n\r\n private async assureConfiguration() {\r\n if (this._configuration != null) {\r\n return;\r\n }\r\n let authority = this.getServerUrl();\r\n if (authority[authority.length - 1] === '/') {\r\n authority = authority.slice(0, -1);\r\n }\r\n try {\r\n this._configuration = await NucleusAuthorizationServiceConfiguration.fetchFromIssuer(authority, this.requestor);\r\n } catch (e) {\r\n console.error('Nucleus.Identity: Cannot load OIDC configuration: ' + (e as Error).message);\r\n throw e;\r\n }\r\n }\r\n}\r\n","import { nowInSeconds } from '@openid/appauth';\r\n\r\nexport interface DeviceCodeJson {\r\n device_code: string;\r\n user_code: string;\r\n verification_uri: string;\r\n verification_uri_complete: string;\r\n expires_in: string;\r\n message: string;\r\n}\r\n\r\nexport class DeviceCode {\r\n constructor(response: DeviceCodeJson) {\r\n this.deviceCode = response.device_code;\r\n this.userCode = response.user_code;\r\n this.verificationUrl = response.verification_uri;\r\n this.verificationUrlComplete = response.verification_uri_complete;\r\n this.expiresIn = parseInt(response.expires_in, 10);\r\n this.issuedAt = nowInSeconds();\r\n }\r\n\r\n private expiresIn: number;\r\n private issuedAt: number;\r\n\r\n public deviceCode: string;\r\n public userCode: string;\r\n public verificationUrl: string;\r\n public verificationUrlComplete: string;\r\n\r\n isExpired(buffer: number = 60) {\r\n\r\n return this.secondsLeft(buffer) <= 0;\r\n }\r\n\r\n secondsLeft(buffer: number = 60) {\r\n const now = nowInSeconds();\r\n return (this.issuedAt + this.expiresIn - buffer) - now;\r\n }\r\n}\r\n","export interface ClientRegistrationResponseJson {\r\n client_id: string;\r\n client_secret: string;\r\n client_secret_expires_at: number;\r\n}\r\n\r\nexport class ClientRegistrationResponse {\r\n constructor(response: ClientRegistrationResponseJson) {\r\n this.clientId = response.client_id;\r\n this.clientSecret = response.client_secret;\r\n this.secretExpirationDate = new Date(response.client_secret_expires_at * 1000);\r\n }\r\n\r\n clientId: string;\r\n clientSecret: string;\r\n secretExpirationDate: Date;\r\n}\r\n","import {\r\n AppAuthError,\r\n BaseTokenRequestHandler,\r\n BasicQueryStringUtils,\r\n GRANT_TYPE_AUTHORIZATION_CODE,\r\n GRANT_TYPE_REFRESH_TOKEN,\r\n QueryStringUtils,\r\n StringMap,\r\n TokenErrorJson,\r\n TokenRequest,\r\n TokenRequestHandler} from '@openid/appauth';\r\nimport { OidcConfigurationService } from './oidc-configuration.service';\r\nimport { AngularRequestor } from './angular-requestor';\r\nimport { Injectable } from '@angular/core';\r\nimport { DeviceCode, DeviceCodeJson } from '../models/device-code';\r\nimport { ClientRegistrationResponse, ClientRegistrationResponseJson } from '../models/client-registration';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TokenClient {\r\n constructor(\r\n private requestor: AngularRequestor,\r\n private config: OidcConfigurationService\r\n ) {\r\n this._tokenHandler = new BaseTokenRequestHandler(requestor);\r\n this._utils = new BasicQueryStringUtils();\r\n }\r\n\r\n private _tokenHandler: TokenRequestHandler;\r\n private _utils: QueryStringUtils;\r\n\r\n public async getByAuthorizationCode(redirectUrl: string, code: string, codeVerifier: string) {\r\n const config = await this.config.getConfiguration();\r\n const redirectUri = redirectUrl;\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: redirectUri,\r\n grant_type: GRANT_TYPE_AUTHORIZATION_CODE,\r\n code,\r\n extras: { code_verifier: codeVerifier }\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getByRefreshToken(refreshToken: string) {\r\n const config = await this.config.getConfiguration();\r\n const redirectUri = this.config.redirectUrl;\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: redirectUri,\r\n grant_type: GRANT_TYPE_REFRESH_TOKEN,\r\n refresh_token: refreshToken\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getByClientCredentials(clientId: string, clientSecret: string, scope: string) {\r\n const config = await this.config.getConfiguration();\r\n const req = new TokenRequest({\r\n client_id: clientId,\r\n redirect_uri: null,\r\n grant_type: 'client_credentials',\r\n extras: {\r\n client_secret: clientSecret,\r\n scope,\r\n }\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getBySecret(provider: string, secret: string, assertionToken: string, scope: string) {\r\n const config = await this.config.getConfiguration();\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: null,\r\n grant_type: 'urn:kolektor:nucleus:secret',\r\n extras: {\r\n secret_provider: provider,\r\n secret_value: secret,\r\n client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',\r\n client_assertion: assertionToken,\r\n scope,\r\n }\r\n });\r\n\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getByDeviceCode(deviceCode: string) {\r\n const config = await this.config.getConfiguration();\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: null,\r\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\r\n extras: {\r\n device_code: deviceCode\r\n }\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async registerServicePrincipal(token: string) {\r\n const config = await this.config.getConfiguration();\r\n\r\n const response = await this.requestor.xhr<ClientRegistrationResponseJson | TokenErrorJson>({\r\n url: config.registrationEndpoint,\r\n method: 'POST',\r\n dataType: 'json',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${token}`\r\n }\r\n // data: this._utils.stringify(map)\r\n });\r\n\r\n if ((response as TokenErrorJson).error === undefined) {\r\n return new ClientRegistrationResponse(response as ClientRegistrationResponseJson);\r\n } else {\r\n throw new AppAuthError((response as TokenErrorJson).error);\r\n }\r\n }\r\n\r\n public async getRegistrationCode(existingServicePrincipalId: string = null) {\r\n const params = {\r\n custom_action: 'sp_register',\r\n service_principal_id: existingServicePrincipalId\r\n };\r\n return this.getDeviceCodeInternal(params);\r\n }\r\n\r\n public async getDeviceCode(scope: string) {\r\n const params = {\r\n scope,\r\n };\r\n return this.getDeviceCodeInternal(params);\r\n }\r\n\r\n private async getDeviceCodeInternal(params: StringMap) {\r\n const config = await this.config.getConfiguration();\r\n\r\n params['client_id'] = this.config.clientId;\r\n const map: StringMap = params;\r\n\r\n const response = await this.requestor.xhr<DeviceCodeJson | TokenErrorJson>({\r\n url: config.deviceAuthorizationEndpoint,\r\n method: 'POST',\r\n dataType: 'json',\r\n headers: {'Content-Type': 'application/x-www-form-urlencoded'},\r\n data: this._utils.stringify(map)\r\n });\r\n\r\n if ((response as TokenErrorJson).error === undefined) {\r\n return new DeviceCode(response as DeviceCodeJson);\r\n } else {\r\n throw new AppAuthError((response as TokenErrorJson).error);\r\n }\r\n }\r\n\r\n\r\n}\r\n","import {\r\n AuthorizationRequest,\r\n TokenResponse,\r\n Crypto,\r\n RedirectRequestHandler,\r\n BasicQueryStringUtils,\r\n LocalStorageBackend,\r\n AppAuthError\r\n} from '@openid/appauth';\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { App } from '@capacitor/app';\r\nimport { Browser } from '@capacitor/browser';\r\nimport { Device } from '@capacitor/device';\r\nimport { NucleusCrypto } from './utils/nucleus-crypto';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { LocationService } from './utils/location.service';\r\nimport { AuthorizationRequestHandler } from '@openid/appauth';\r\nimport { NucleusAuthorizationNotifier } from './utils/nucleus-authorization-notifier';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { OtpResponse, OtpStatus, OtpType } from './models/otp';\r\nimport { SecretsStore } from './utils/secrets-store';\r\nimport { OidcConfigurationService } from './utils/oidc-configuration.service';\r\nimport { TokenClient } from './utils/token-client';\r\nimport { DeviceCode } from './models/device-code';\r\nimport { ServicePrincipalRegistrationStatus } from './models/service-principal';\r\nimport { lastValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NucleusIdentityService {\r\n constructor(\r\n private appService: NucleusAppService,\r\n location: LocationService,\r\n private http: HttpClient,\r\n private config: OidcConfigurationService,\r\n private tokenClient: TokenClient\r\n ) {\r\n const storage = new LocalStorageBackend();\r\n this._crypto = new NucleusCrypto();\r\n this._authorizationHandler = new RedirectRequestHandler(storage, new BasicQueryStringUtils(), location, this._crypto);\r\n this._authorizationHandler.setAuthorizationNotifier(this._authorizationNotifier);\r\n this._store = new SecretsStore(config.clientId);\r\n }\r\n\r\n private _authorizationHandler: AuthorizationRequestHandler;\r\n private _authorizationNotifier = new NucleusAuthorizationNotifier();\r\n private _crypto: Crypto;\r\n private _initStarted = false;\r\n private _initialized = false;\r\n private _refreshTokenPromise: Promise<TokenResponse>;\r\n private _getTokenPromise: Promise<string>;\r\n private _getServicePrincipalTokenPromise: Promise<string>;\r\n private _servicePrincipalTokenId = '_svcp';\r\n private _store: SecretsStore;\r\n\r\n public get identity() {\r\n return this._store.getIdentity();\r\n }\r\n\r\n public get isAuthenticated() {\r\n return this.identity != null;\r\n }\r\n\r\n public get servicePrincipalIdentity() {\r\n return this._store.getIdentity(this._servicePrincipalTokenId);\r\n }\r\n\r\n public get isServicePrincipalAuthenticated() {\r\n return this.servicePrincipalIdentity != null;\r\n }\r\n\r\n public async init(startLogin: boolean = false): Promise<void> {\r\n if (this._initStarted || this._initialized) {\r\n console.warn('Nucleus.Identity: Auth initialization was already started. Don\\'t call init() multiple times!');\r\n return;\r\n }\r\n this._initStarted = true;\r\n\r\n this.handleLaunchCodeHash();\r\n await this._authorizationHandler.completeAuthorizationRequestIfPossible();\r\n\r\n const authErr = this._authorizationNotifier.error;\r\n if (authErr) {\r\n throw new Error('Authorization err: ' + authErr.error + ': ' + authErr.errorDescription);\r\n } else if (this._authorizationNotifier.response) {\r\n window.location.hash = '';\r\n const request = this._authorizationNotifier.request;\r\n const response = this._authorizationNotifier.response;\r\n const res = await this.tokenClient.getByAuthorizationCode(request.redirectUri, response.code, request.internal['code_verifier']);\r\n this._store.setDefaultIdentityId(null);\r\n await this._store.setToken(res);\r\n } else {\r\n const res = await this._store.getToken();\r\n if (!res && startLogin) {\r\n await this.login();\r\n }\r\n }\r\n this._initialized = true;\r\n }\r\n\r\n public async loginWithSecret(provider: string, secret: string): Promise<void> {\r\n this._store.removeToken();\r\n const assertionToken = await this.getServicePrincipalAccessToken();\r\n const scope = this.prepareScope(true, this.config?.requestedScopes);\r\n const res = await this.tokenClient.getBySecret(provider, secret, assertionToken, scope);\r\n this._store.setDefaultIdentityId(null);\r\n await this._store.setToken(res);\r\n }\r\n\r\n public async login(): Promise<void> {\r\n this._store.removeToken();\r\n const config = await this.config.getConfiguration();\r\n const request = this.prepareAuthorizationRequest();\r\n if (this.appService.isNative) {\r\n const listener = App.addListener('appUrlOpen', data => {\r\n if (this.appService.platform === 'ios') {\r\n Browser.close();\r\n }\r\n listener.remove();\r\n const hash = this.getCodeHash(data.url);\r\n if (hash) {\r\n const targetUrl = window.location.origin + window.location.pathname + '#' + hash;\r\n window.location.assign(targetUrl);\r\n window.location.reload();\r\n } else {\r\n console.warn('Nucleus.Identity: Redirect url did not contain authorization code!', data);\r\n }\r\n });\r\n }\r\n this._authorizationHandler.performAuthorizationRequest(config, request);\r\n }\r\n\r\n public async logout(): Promise<void> {\r\n this._store.removeToken();\r\n const config = await this.config.getConfiguration();\r\n const redirectUrl = this.config.redirectUrl;\r\n const logoutUrl = config.endSessionEndpoint + '?post_logout_redirect_uri=' + encodeURI(redirectUrl);\r\n if (this.appService.isNative) {\r\n const listener = App.addListener('appUrlOpen', () => {\r\n Device.getInfo().then(info => {\r\n if (info.platform === 'ios') {\r\n Browser.close();\r\n }\r\n });\r\n listener.remove();\r\n });\r\n Browser.open({ url: logoutUrl });\r\n } else {\r\n window.location.assign(logoutUrl);\r\n }\r\n }\r\n\r\n public async getAccessToken() {\r\n if (!this._getTokenPromise) {\r\n this._getTokenPromise = this.getAccessTokenInternal();\r\n }\r\n try {\r\n return await this._getTokenPromise;\r\n } finally {\r\n this._getTokenPromise = null;\r\n }\r\n }\r\n\r\n public async getServicePrincipalAccessToken() {\r\n if (!this._getServicePrincipalTokenPromise) {\r\n this._getServicePrincipalTokenPromise = this.getServicePrincipalAccessTokenInternal();\r\n }\r\n try {\r\n return await this._getServicePrincipalTokenPromise;\r\n } finally {\r\n this._getServicePrincipalTokenPromise = null;\r\n }\r\n }\r\n\r\n public async loginServicePrincipal() {\r\n const sp = await this._store.getServicePrincipal();\r\n if (sp) {\r\n const scope = this.prepareScope(false, this.config.servicePrincipalRequestedScopes);\r\n const res = await this.tokenClient.getByClientCredentials(sp.id, sp.secret, scope);\r\n await this._store.setToken(res, this._servicePrincipalTokenId);\r\n return res;\r\n } else {\r\n throw Error('Service principal is not registered!');\r\n }\r\n }\r\n\r\n public async loginAsServicePrincipal() {\r\n const token = await this._store.getToken(this._servicePrincipalTokenId);\r\n if (!token) {\r\n await this.loginServicePrincipal();\r\n }\r\n this._store.setDefaultIdentityId(this._servicePrincipalTokenId);\r\n }\r\n\r\n public async getOtp(type: OtpType, expiresIn: number = -1) {\r\n let url = this.config.getServerUrl(`/otp/create?type=${type}`);\r\n if (expiresIn > 0) {\r\n url += `&expiresIn=${expiresIn}`;\r\n }\r\n return lastValueFrom(this.http.get<OtpResponse>(url));\r\n }\r\n\r\n public async getOtpStatus(id: string) {\r\n const url = this.config.getServerUrl(`/otp/status/${id}`);\r\n return lastValueFrom(this.http.get<OtpStatus>(url));\r\n }\r\n\r\n public getOtpUrl(redirectUrl: string, password: string) {\r\n const encoded = encodeURIComponent(redirectUrl);\r\n const url = `/otp/auth?otpValue=${password}&returnUrl=${encoded}`;\r\n return this.config.getServerUrl(url);\r\n }\r\n\r\n public async startServicePrincipalRegistration() {\r\n const sp = await this._store.getServicePrincipal();\r\n return await this.tokenClient.getRegistrationCode(sp?.id);\r\n }\r\n\r\n public async completeServicePrincipalRegistration(deviceCode: DeviceCode) {\r\n const tokenRes = await this.waitForDeviceToken(deviceCode);\r\n const regRes = await this.tokenClient.registerServicePrincipal(tokenRes.accessToken);\r\n\r\n await this._store.setServicePrincipal({\r\n id: regRes.clientId,\r\n secret: regRes.clientSecret,\r\n expiresAt: regRes.secretExpirationDate\r\n });\r\n }\r\n\r\n public removeServicePrincipalRegistration() {\r\n return this._store.removeServicePrincipal();\r\n }\r\n\r\n public async getServicePrincipalRegistrationStatus() {\r\n const sp = await this._store.getServicePrincipal();\r\n return new ServicePrincipalRegistrationStatus(sp);\r\n }\r\n\r\n public async startDeviceCodeLogin() {\r\n const scope = this.prepareScope(true, this.config.requestedScopes);\r\n return await this.tokenClient.getDeviceCode(scope);\r\n }\r\n\r\n public async completeDeviceCodeLogin(deviceCode: DeviceCode) {\r\n const res = await this.waitForDeviceToken(deviceCode);\r\n await this._store.setToken(res);\r\n }\r\n\r\n private async waitForDeviceToken(deviceCode: DeviceCode) {\r\n let res: TokenResponse = null;\r\n do {\r\n if (deviceCode.isExpired()) {\r\n throw Error('Device code is expired!');\r\n }\r\n\r\n try {\r\n res = await this.tokenClient.getByDeviceCode(deviceCode.deviceCode);\r\n } catch (error) {\r\n if (error instanceof AppAuthError && error.message === 'authorization_pending') {\r\n await this.delay(2000);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n } while (!res);\r\n return res;\r\n }\r\n\r\n private prepareAuthorizationRequest(): AuthorizationRequest {\r\n const redirectUri = this.config.redirectUrl;\r\n\r\n const params = {\r\n response_mode: 'fragment',\r\n prompt: 'consent',\r\n access_type: 'offline',\r\n auth_provider_hint: this.config.authProviderHint\r\n };\r\n\r\n return new AuthorizationRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: redirectUri,\r\n response_type: AuthorizationRequest.RESPONSE_TYPE_CODE,\r\n scope: this.prepareScope(true, this.config.requestedScopes),\r\n extras: params,\r\n }, this._crypto, true);\r\n }\r\n\r\n private async getServicePrincipalAccessTokenInternal() {\r\n let token = await this._store.getToken(this._servicePrincipalTokenId);\r\n if (!token?.isValid()) {\r\n token = await this.loginServicePrincipal();\r\n }\r\n return token?.accessToken;\r\n }\r\n\r\n private async getAccessTokenInternal() {\r\n let token = await this._store.getToken();\r\n if (token && !token.isValid()) {\r\n token = await this.loginWithRefreshToken(token);\r\n }\r\n return token?.accessToken;\r\n }\r\n\r\n private async loginWithRefreshToken(token: TokenResponse) {\r\n if (!this._refreshTokenPromise) {\r\n this._refreshTokenPromise = this.loginWithRefreshTokenInternal(token);\r\n }\r\n try {\r\n return await this._refreshTokenPromise;\r\n } finally {\r\n this._refreshTokenPromise = null;\r\n }\r\n }\r\n\r\n private async loginWithRefreshTokenInternal(token: TokenResponse) {\r\n if (token?.refreshToken) {\r\n try {\r\n const res = await this.tokenClient.getByRefreshToken(token.refreshToken);\r\n await this._store.setToken(res);\r\n return res;\r\n } catch (err) {\r\n console.warn('Nucleus.Identity: Failed to login with refresh token.', err);\r\n if (err.message === 'invalid_grant') {\r\n await this.logout();\r\n }\r\n }\r\n } else {\r\n console.warn('Nucleus.Identity: There is no refresh token available.');\r\n }\r\n }\r\n\r\n private getCodeHash(url: string) {\r\n const arr = url.split('#');\r\n if (arr.length > 1) {\r\n const hash = arr[1];\r\n if (hash.startsWith('code=')) {\r\n return hash;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private handleLaunchCodeHash() {\r\n if (this.appService.isNative && this.appService.launchUrl) {\r\n const hash = this.getCodeHash(this.appService.launchUrl);\r\n if (hash) {\r\n console.log('Nucleus.Identity: Got authorization code from launchUrl, will assign it to hash.');\r\n window.location.hash = '#' + hash;\r\n }\r\n }\r\n }\r\n\r\n private prepareScope(offlineAccess: boolean, aditionalScope: string) {\r\n let scope = 'openid';\r\n if (offlineAccess) {\r\n scope += ' offline_access';\r\n }\r\n if (scope) {\r\n scope += ' ' + aditionalScope;\r\n }\r\n return scope;\r\n }\r\n\r\n private delay(miliseconds: number) {\r\n return new Promise<void>(resolve => {\r\n setTimeout(() => {\r\n resolve();\r\n }, miliseconds);\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, from, throwError } from 'rxjs';\r\nimport { NucleusIdentityConfig } from './nucleus-identity-config';\r\nimport { NucleusIdentityService } from './nucleus-identity.service';\r\nimport { mergeMap, catchError } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NucleusTokenInterceptor implements HttpInterceptor {\r\n constructor(private auth: NucleusIdentityService, private config: NucleusIdentityConfig\r\n ) {\r\n this._authority = config.authority.toLowerCase();\r\n this._interceptUrls = config.httpInterceptorUrls?.map(x => x.toLowerCase());\r\n }\r\n\r\n private _authority: string;\r\n private _authorityInterceptPaths = ['/api', '/manage', '/otp/create', '/otp/status'];\r\n private _interceptUrls: string[];\r\n\r\n public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (this.shouldIntercept(req.url)) {\r\n const res = this.authorizeRequest(this.auth.getAccessToken(), req, next);\r\n return this.checkUnauthorized(res);\r\n }\r\n return next.handle(req);\r\n }\r\n\r\n private shouldIntercept(url: string): boolean {\r\n url = url.toLowerCase();\r\n\r\n if (url.startsWith(this._authority)) {\r\n const pathname = new URL(url).pathname;\r\n return (this._authorityInterceptPaths.some(x => pathname.startsWith(x)));\r\n }\r\n\r\n if (this._interceptUrls?.length > 0) {\r\n return this.config.httpInterceptorUrls.some(x => url.startsWith(x));\r\n }\r\n return false;\r\n }\r\n\r\n private authorizeRequest(getToken: Promise<string>, req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return from(getToken).pipe(\r\n mergeMap(token => {\r\n if (token) {\r\n const headers = req.headers.set('Authorization', `Bearer ${token}`);\r\n req = req.clone({ headers });\r\n }\r\n return next.handle(req);\r\n })\r\n );\r\n }\r\n\r\n private checkUnauthorized(response: Observable<HttpEvent<any>>): Observable<HttpEvent<any>> {\r\n return response.pipe(\r\n catchError((err) => {\r\n if (err instanceof HttpErrorResponse && err.status === 401) {\r\n if (this.config.automaticLoginOnHttp401) {\r\n this.auth.login();\r\n }\r\n }\r\n return throwError(err);\r\n })\r\n );\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { NucleusTokenInterceptor } from './nucleus-token-interceptor.service';\r\nimport { NucleusIdentityConfig } from './nucleus-identity-config';\r\n\r\n@NgModule({\r\n imports: [\r\n ],\r\n declarations: [\r\n ],\r\n exports: [\r\n ]\r\n})\r\n\r\nexport class NucleusIdentityModule {\r\n\r\n static forRoot(config: NucleusIdentityConfig): ModuleWithProviders<NucleusIdentityModule> {\r\n return {\r\n ngModule: NucleusIdentityModule,\r\n providers: [\r\n { provide: NucleusIdentityConfig, useValue: config },\r\n { provide: HTTP_INTERCEPTORS, useClass: NucleusTokenInterceptor, multi: true },\r\n ]\r\n };\r\n }\r\n}\r\n","export class OtpResponse {\r\n public password: string;\r\n public passwordId: string;\r\n}\r\n\r\nexport class OtpStatus {\r\n public isExpired: boolean;\r\n public isUsed: boolean;\r\n public secondsToExpiration: number;\r\n}\r\n\r\nexport enum OtpType {\r\n SimpleNumbers = 0,\r\n SimpleAlfanumeric = 1,\r\n Complex = 2\r\n}\r\n","/*\r\n * Public API Surface of nucleus-identity\r\n */\r\n\r\nexport * from './lib/nucleus-identity.module';\r\nexport * from './lib/nucleus-identity.service';\r\nexport * from './lib/nucleus-identity-config';\r\nexport { OtpResponse, OtpStatus, OtpType } from './lib/models/otp';\r\nexport { DeviceCode } from './lib/models/device-code';\r\nexport { Identity } from './lib/models/identity';\r\nexport { ServicePrincipalRegistrationStatus } from './lib/models/service-principal';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kolektor-nucleus-identity.mjs","sources":["../../../projects/nucleus-identity/src/lib/utils/nucleus-crypto.ts","../../../projects/nucleus-identity/src/lib/utils/nucleus-authorization-notifier.ts","../../../projects/nucleus-identity/src/lib/models/identity.ts","../../../projects/nucleus-identity/src/lib/utils/secrets-store.ts","../../../projects/nucleus-identity/src/lib/models/service-principal.ts","../../../projects/nucleus-identity/src/lib/utils/location.service.ts","../../../projects/nucleus-identity/src/lib/utils/authorization-service-configuration.ts","../../../projects/nucleus-identity/src/lib/utils/angular-requestor.ts","../../../projects/nucleus-identity/src/lib/nucleus-identity-config.ts","../../../projects/nucleus-identity/src/lib/utils/oidc-configuration.service.ts","../../../projects/nucleus-identity/src/lib/models/device-code.ts","../../../projects/nucleus-identity/src/lib/models/client-registration.ts","../../../projects/nucleus-identity/src/lib/utils/token-client.ts","../../../projects/nucleus-identity/src/lib/nucleus-identity.service.ts","../../../projects/nucleus-identity/src/lib/nucleus-token-interceptor.service.ts","../../../projects/nucleus-identity/src/lib/nucleus-identity.module.ts","../../../projects/nucleus-identity/src/lib/models/otp.ts","../../../projects/nucleus-identity/src/public-api.ts","../../../projects/nucleus-identity/src/kolektor-nucleus-identity.ts"],"sourcesContent":["// It also supports IE with window.msCrypto !!!!!!\r\nimport { Crypto } from '@openid/appauth';\r\nimport { AppAuthError } from '@openid/appauth';\r\nimport * as base64 from 'base64-js';\r\n\r\nconst CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n\r\nexport class NucleusCrypto implements Crypto {\r\n private browserCrypto = window.crypto || (window as any).msCrypto;\r\n\r\n generateRandom(size: number) {\r\n const buffer = new Uint8Array(size);\r\n if (this.browserCrypto) {\r\n this.browserCrypto.getRandomValues(buffer);\r\n } else {\r\n // fall back to Math.random() if nothing else is available\r\n for (let i = 0; i < size; i += 1) {\r\n buffer[i] = Math.random();\r\n }\r\n }\r\n return this.bufferToString(buffer);\r\n }\r\n\r\n deriveChallenge(code: string): Promise<string> {\r\n if (code.length < 43 || code.length > 128) {\r\n return Promise.reject(new AppAuthError('Invalid code length.'));\r\n }\r\n if (!this.browserCrypto.subtle) {\r\n return Promise.reject(new AppAuthError('window.crypto.subtle is unavailable.'));\r\n }\r\n\r\n const ecode = this.textEncodeLite(code);\r\n const op = this.browserCrypto.subtle.digest('SHA-256', ecode);\r\n return new Promise((resolve, reject) => {\r\n // if operation contains algorithm it means it is not a promise which means it is CryptoOperation from IE.\r\n // We just return result as promise\r\n if (op.algorithm) {\r\n console.log('we have a CryptoOperation');\r\n op.addEventListener('complete', () => {\r\n resolve(this.urlSafe(op.result));\r\n });\r\n\r\n op.addEventListener('error', () => {\r\n reject(op.result);\r\n });\r\n } else { // the result is promise\r\n op.then(buffer => resolve(this.urlSafe(buffer)), error => reject(error));\r\n }\r\n });\r\n }\r\n\r\n\r\n private urlSafe(buffer: Uint8Array): string {\r\n const encoded = base64.fromByteArray(new Uint8Array(buffer));\r\n return encoded.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\r\n }\r\n\r\n private textEncodeLite(str: string) {\r\n const buf = new ArrayBuffer(str.length);\r\n const bufView = new Uint8Array(buf);\r\n\r\n for (let i = 0; i < str.length; i++) {\r\n bufView[i] = str.charCodeAt(i);\r\n }\r\n return bufView;\r\n }\r\n\r\n private bufferToString(buffer: Uint8Array) {\r\n const state = [];\r\n for (let i = 0; i < buffer.byteLength; i += 1) {\r\n const index = buffer[i] % CHARSET.length;\r\n state.push(CHARSET[index]);\r\n }\r\n return state.join('');\r\n }\r\n}\r\n","import { AuthorizationNotifier } from '@openid/appauth';\r\nimport { AuthorizationResponse, AuthorizationError } from '@openid/appauth';\r\nimport { AuthorizationRequest } from '@openid/appauth';\r\n\r\nexport class NucleusAuthorizationNotifier extends AuthorizationNotifier {\r\n response: AuthorizationResponse;\r\n request: AuthorizationRequest;\r\n error: AuthorizationError;\r\n\r\n constructor() {\r\n super();\r\n this.setAuthorizationListener((request, response, error) => {\r\n console.log('Authorization request complete ', request, response, error);\r\n this.response = response;\r\n this.request = request;\r\n this.error = error;\r\n });\r\n }\r\n}\r\n","import { TokenResponse } from '@openid/appauth';\r\n\r\nexport class Claim {\r\n public name: string;\r\n public values: string[];\r\n\r\n constructor(name: string, values: string[]) {\r\n this.name = name;\r\n this.values = values;\r\n }\r\n}\r\n\r\nexport class Identity {\r\n public name: string;\r\n public subject: string;\r\n\r\n public claims: Claim[] = [];\r\n\r\n public static createFromResponse(res: TokenResponse): Identity {\r\n const token = this.decodeToken(res.idToken);\r\n const id = new Identity();\r\n id.name = token.name;\r\n id.subject = token.sub;\r\n for (const key in token) {\r\n if ({}.hasOwnProperty.call(token, key)) {\r\n let vals = token[key];\r\n\r\n if (!Array.isArray(vals)) {\r\n vals = [vals];\r\n }\r\n\r\n const claim = new Claim(key, vals);\r\n id.claims.push(claim);\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n private static decodeToken(jwt: string): any {\r\n if (!jwt) {\r\n throw new Error('NucleusIdentity: There was no identity token in the response!');\r\n }\r\n\r\n try {\r\n const arr = jwt.split('.');\r\n // var header = arr[0];\r\n const payload = this.b64DecodeUnicode(arr[1]);\r\n // var signature = arr[2];\r\n return JSON.parse(payload);\r\n } catch (error) {\r\n console.error('Error while decoding identity token', error);\r\n console.error('Error while decoding identity token JWT', jwt);\r\n }\r\n }\r\n\r\n private static b64DecodeUnicode(str: string) {\r\n str = str.replace(/-/g, '+').replace(/_/g, '/'); // Qlector fix :)\r\n return decodeURIComponent(atob(str).split('').map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)).join(''));\r\n }\r\n}\r\n","import 'capacitor-secure-storage-plugin';\r\nimport { TokenResponse, TokenResponseJson } from '@openid/appauth';\r\nimport { Identity } from '../models/identity';\r\nimport { ServicePrincipal } from '../models/service-principal';\r\nimport { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';\r\n\r\nexport class SecretsStore {\r\n constructor(clientId: string) {\r\n this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login with existing tokens will fail\r\n this._servicePrincipalKey = `${this._tokenStorageKeyPrefix}.SvcP`;\r\n this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;\r\n this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);\r\n }\r\n private _tokenStorageKeyPrefix: string;\r\n private _tokens: { [id: string]: TokenResponse } = {};\r\n private _identities: { [id: string]: Identity } = {};\r\n private _servicePrincipalKey;\r\n private _servicePrincipal: ServicePrincipal;\r\n // this specify which identity id is used by default, when If id is not specified in getToken or getIdentity\r\n private _defaultIdentityId: string = null;\r\n private _defaultIdentityIdStorageKey: string = null;\r\n\r\n public get defaultIdentityId() {\r\n return this._defaultIdentityId;\r\n }\r\n\r\n public removeServicePrincipal() {\r\n this._servicePrincipal = null;\r\n return this.clear(this._servicePrincipalKey);\r\n }\r\n\r\n public async setServicePrincipal(servicePrincipal: ServicePrincipal) {\r\n this._servicePrincipal = servicePrincipal;\r\n await this.save(this._servicePrincipalKey, servicePrincipal);\r\n }\r\n\r\n public async getServicePrincipal() {\r\n if (!this._servicePrincipal) {\r\n this._servicePrincipal = await this.load<ServicePrincipal>(this._servicePrincipalKey);\r\n }\r\n return this._servicePrincipal;\r\n }\r\n\r\n public setToken(token: TokenResponse, id: string = null) {\r\n return this.setTokenInternal(token, true, id);\r\n }\r\n\r\n public getIdentity(id: string = null) {\r\n const key = this.getTokenKey(id);\r\n return this._identities[key];\r\n }\r\n\r\n public setDefaultIdentityId(id: string) {\r\n this._defaultIdentityId = id;\r\n if (this._defaultIdentityId) {\r\n localStorage.setItem(this._defaultIdentityIdStorageKey, this._defaultIdentityId);\r\n } else {\r\n localStorage.removeItem(this._defaultIdentityIdStorageKey);\r\n }\r\n }\r\n\r\n public async getToken(id: string = null) {\r\n const key = this.getTokenKey(id);\r\n\r\n // if token is not there or it is invalid we check storage again before returning\r\n if (!this._tokens[key] || !this._tokens[key].isValid()) {\r\n await this.reloadTokenFromStorage(id);\r\n }\r\n return this._tokens[key];\r\n }\r\n\r\n public removeToken(id: string = null) {\r\n const key = this.getTokenKey(id);\r\n delete this._tokens[key];\r\n delete this._identities[key];\r\n return this.clear(key);\r\n }\r\n\r\n private async reloadTokenFromStorage(id: string) {\r\n const key = this.getTokenKey(id);\r\n const storedToken = await this.load<TokenResponseJson>(key);\r\n if (storedToken) {\r\n const res = new TokenResponse(storedToken);\r\n if (res?.accessToken || res?.idToken) {\r\n await this.setTokenInternal(res, false, id);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private async setTokenInternal(token: TokenResponse, save: boolean, id: string = null) {\r\n const key = this.getTokenKey(id);\r\n if (token == null) {\r\n await this.removeToken(id);\r\n } else {\r\n this._tokens[key] = token;\r\n this._identities[key] = Identity.createFromResponse(token);\r\n if (save) {\r\n try {\r\n await this.save(key, token.toJson());\r\n } catch (e) {\r\n console.warn('Nucleus.Identity: Could not save to SecureStorage.');\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getTokenKey(id: string = null) {\r\n if (!id) {\r\n id = this._defaultIdentityId;\r\n }\r\n return id ? `${this._tokenStorageKeyPrefix}.${id}` : this._tokenStorageKeyPrefix;\r\n }\r\n\r\n private clear(key: string) {\r\n return SecureStoragePlugin.remove({ key });\r\n }\r\n\r\n private save<T>(key: string, value: T): Promise<{ value: boolean }> {\r\n return SecureStoragePlugin.set({ key, value: JSON.stringify(value) });\r\n }\r\n\r\n private async load<T>(key: string) {\r\n try {\r\n const x = await SecureStoragePlugin.get({ key });\r\n if (x?.value) {\r\n return JSON.parse(x.value) as T;\r\n } else {\r\n return null;\r\n }\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n}\r\n","export class ServicePrincipal {\r\n public id: string;\r\n public secret: string;\r\n public expiresAt: Date;\r\n}\r\n\r\nexport class ServicePrincipalRegistrationStatus {\r\n public id: string;\r\n public isRegistered = false;\r\n public expiresAt: Date;\r\n\r\n constructor(servicePrincipal: ServicePrincipal) {\r\n if (servicePrincipal) {\r\n this.isRegistered = true;\r\n this.id = servicePrincipal.id;\r\n this.expiresAt = servicePrincipal.expiresAt;\r\n }\r\n }\r\n\r\n public get isExpired() {\r\n return false;\r\n }\r\n}\r\n","import { LocationLike } from '@openid/appauth';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { Browser } from '@capacitor/browser';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocationService implements LocationLike {\r\n constructor(private appService: NucleusAppService) {\r\n }\r\n\r\n get hash() {\r\n return window.location.hash;\r\n }\r\n set hash(v) {\r\n window.location.hash = v;\r\n }\r\n\r\n get host() {\r\n return window.location.host;\r\n }\r\n set host(v) {\r\n window.location.host = v;\r\n }\r\n\r\n get origin() {\r\n return window.location.origin;\r\n }\r\n\r\n get hostname() {\r\n return window.location.hostname;\r\n }\r\n set hostname(v) {\r\n window.location.hostname = v;\r\n }\r\n\r\n get pathname() {\r\n return window.location.pathname;\r\n }\r\n set pathname(v) {\r\n window.location.pathname = v;\r\n }\r\n\r\n get port() {\r\n return window.location.port;\r\n }\r\n set port(v) {\r\n window.location.port = v;\r\n }\r\n\r\n get protocol() {\r\n return window.location.protocol;\r\n }\r\n set protocol(v) {\r\n window.location.protocol = v;\r\n }\r\n\r\n get search() {\r\n return window.location.search;\r\n }\r\n set search(v) {\r\n window.location.search = v;\r\n }\r\n\r\n assign(url: string): void {\r\n if (this.appService.isNative) {\r\n Browser.open({ url });\r\n } else {\r\n window.location.assign(url);\r\n }\r\n }\r\n}\r\n","import { AuthorizationServiceConfiguration, AuthorizationServiceConfigurationJson, JQueryRequestor, Requestor } from '@openid/appauth';\r\n\r\nconst WELL_KNOWN_PATH = '.well-known';\r\nconst OPENID_CONFIGURATION = 'openid-configuration';\r\n\r\nexport interface NucleusAuthorizationServiceConfigurationJson extends AuthorizationServiceConfigurationJson {\r\n device_authorization_endpoint?: string;\r\n registration_endpoint?: string;\r\n}\r\n\r\nexport class NucleusAuthorizationServiceConfiguration extends AuthorizationServiceConfiguration {\r\n\r\n constructor(request: NucleusAuthorizationServiceConfigurationJson) {\r\n super(request);\r\n this.deviceAuthorizationEndpoint = request.device_authorization_endpoint;\r\n this.registrationEndpoint = request.registration_endpoint;\r\n }\r\n\r\n deviceAuthorizationEndpoint: string;\r\n registrationEndpoint: string;\r\n\r\n static fetchFromIssuer(openIdIssuerUrl: string, requestor?: Requestor) {\r\n const fullUrl = `${openIdIssuerUrl}/${WELL_KNOWN_PATH}/${OPENID_CONFIGURATION}`;\r\n const requestorToUse = requestor || new JQueryRequestor();\r\n return requestorToUse\r\n .xhr<NucleusAuthorizationServiceConfigurationJson>({url: fullUrl, dataType: 'json', method: 'GET'})\r\n .then(json => new NucleusAuthorizationServiceConfiguration(json));\r\n }\r\n\r\n toJson() {\r\n const res = super.toJson() as NucleusAuthorizationServiceConfigurationJson;\r\n res.device_authorization_endpoint = this.deviceAuthorizationEndpoint;\r\n return res as any;\r\n }\r\n}\r\n","import { AppAuthError, Requestor } from '@openid/appauth';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AngularRequestor extends Requestor {\r\n\r\n constructor(private http: HttpClient) {\r\n super();\r\n }\r\n\r\n // eslint-disable-next-line no-undef\r\n xhr<T>(settings: JQueryAjaxSettings): Promise<T> {\r\n if (settings.method === undefined) {\r\n settings.method = 'GET';\r\n }\r\n return new Promise<T>((resolve, reject) => {\r\n this.http.request<T>(settings.method, settings.url, {\r\n body: settings.data,\r\n headers: settings.headers,\r\n }).subscribe(res => resolve(res), err => {\r\n let e = new AppAuthError(err);\r\n if (err instanceof HttpErrorResponse) {\r\n e = new AppAuthError(err.error?.error || err.statusText);\r\n }\r\n reject(e);\r\n });\r\n });\r\n }\r\n}\r\n","export class NucleusIdentityConfig {\r\n public authority: string = null;\r\n\r\n public clientId: string;\r\n\r\n public redirectUri?: string;\r\n\r\n public androidRedirectUri?: string;\r\n\r\n public iOSRedirectUri?: string;\r\n\r\n public httpInterceptorUrls?: string[] = [];\r\n\r\n public automaticLoginOnHttp401 = false;\r\n\r\n public requestedScopes?: string;\r\n\r\n public servicePrincipalRequestedScopes?: string;\r\n\r\n public authProviderHint?: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { NucleusIdentityConfig } from '../nucleus-identity-config';\r\nimport { AngularRequestor } from './angular-requestor';\r\nimport { NucleusAuthorizationServiceConfiguration } from './authorization-service-configuration';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OidcConfigurationService {\r\n constructor(\r\n private requestor: AngularRequestor,\r\n private config: NucleusIdentityConfig,\r\n private appService: NucleusAppService,\r\n ) {\r\n }\r\n\r\n private _configuration: NucleusAuthorizationServiceConfiguration = null;\r\n\r\n public async getConfiguration() {\r\n await this.assureConfiguration();\r\n return this._configuration;\r\n }\r\n\r\n public get clientId() {\r\n return this.config.clientId;\r\n }\r\n\r\n public get requestedScopes() {\r\n return this.config.requestedScopes;\r\n }\r\n\r\n public get servicePrincipalRequestedScopes() {\r\n return this.config.servicePrincipalRequestedScopes;\r\n }\r\n\r\n public get authProviderHint() {\r\n return this.config.authProviderHint;\r\n }\r\n\r\n public get redirectUrl() {\r\n let uri = window.location.href;\r\n const platform = this.appService.platform;\r\n if (platform === 'android' && this.config.androidRedirectUri) {\r\n uri = this.config.androidRedirectUri;\r\n } else if (platform === 'ios' && this.config.iOSRedirectUri) {\r\n uri = this.config.iOSRedirectUri;\r\n } else if (this.config.redirectUri) {\r\n uri = this.config.redirectUri;\r\n }\r\n return this.NormalizeRedirectUri(uri);\r\n }\r\n\r\n public getServerUrl(relativeUri: string = null) {\r\n let authority = this.config.authority;\r\n if (!authority || authority === 'origin') {\r\n authority = window.origin;\r\n }\r\n\r\n let url = new URL(authority);\r\n\r\n if (relativeUri) {\r\n url = new URL(relativeUri, url);\r\n }\r\n\r\n return url.href;\r\n }\r\n\r\n private NormalizeRedirectUri(uri: string) {\r\n const i = uri.indexOf('#');\r\n if (i > 0) {\r\n uri = uri.substring(0, i);\r\n }\r\n return uri;\r\n }\r\n\r\n private async assureConfiguration() {\r\n if (this._configuration != null) {\r\n return;\r\n }\r\n let authority = this.getServerUrl();\r\n if (authority[authority.length - 1] === '/') {\r\n authority = authority.slice(0, -1);\r\n }\r\n try {\r\n this._configuration = await NucleusAuthorizationServiceConfiguration.fetchFromIssuer(authority, this.requestor);\r\n } catch (e) {\r\n console.error('Nucleus.Identity: Cannot load OIDC configuration: ' + (e as Error).message);\r\n throw e;\r\n }\r\n }\r\n}\r\n","import { nowInSeconds } from '@openid/appauth';\r\n\r\nexport interface DeviceCodeJson {\r\n device_code: string;\r\n user_code: string;\r\n verification_uri: string;\r\n verification_uri_complete: string;\r\n expires_in: string;\r\n message: string;\r\n}\r\n\r\nexport class DeviceCode {\r\n constructor(response: DeviceCodeJson) {\r\n this.deviceCode = response.device_code;\r\n this.userCode = response.user_code;\r\n this.verificationUrl = response.verification_uri;\r\n this.verificationUrlComplete = response.verification_uri_complete;\r\n this.expiresIn = parseInt(response.expires_in, 10);\r\n this.issuedAt = nowInSeconds();\r\n }\r\n\r\n private expiresIn: number;\r\n private issuedAt: number;\r\n\r\n public deviceCode: string;\r\n public userCode: string;\r\n public verificationUrl: string;\r\n public verificationUrlComplete: string;\r\n\r\n isExpired(buffer: number = 60) {\r\n\r\n return this.secondsLeft(buffer) <= 0;\r\n }\r\n\r\n secondsLeft(buffer: number = 60) {\r\n const now = nowInSeconds();\r\n return (this.issuedAt + this.expiresIn - buffer) - now;\r\n }\r\n}\r\n","export interface ClientRegistrationResponseJson {\r\n client_id: string;\r\n client_secret: string;\r\n client_secret_expires_at: number;\r\n}\r\n\r\nexport class ClientRegistrationResponse {\r\n constructor(response: ClientRegistrationResponseJson) {\r\n this.clientId = response.client_id;\r\n this.clientSecret = response.client_secret;\r\n this.secretExpirationDate = new Date(response.client_secret_expires_at * 1000);\r\n }\r\n\r\n clientId: string;\r\n clientSecret: string;\r\n secretExpirationDate: Date;\r\n}\r\n","import {\r\n AppAuthError,\r\n BaseTokenRequestHandler,\r\n BasicQueryStringUtils,\r\n GRANT_TYPE_AUTHORIZATION_CODE,\r\n GRANT_TYPE_REFRESH_TOKEN,\r\n QueryStringUtils,\r\n StringMap,\r\n TokenErrorJson,\r\n TokenRequest,\r\n TokenRequestHandler} from '@openid/appauth';\r\nimport { OidcConfigurationService } from './oidc-configuration.service';\r\nimport { AngularRequestor } from './angular-requestor';\r\nimport { Injectable } from '@angular/core';\r\nimport { DeviceCode, DeviceCodeJson } from '../models/device-code';\r\nimport { ClientRegistrationResponse, ClientRegistrationResponseJson } from '../models/client-registration';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TokenClient {\r\n constructor(\r\n private requestor: AngularRequestor,\r\n private config: OidcConfigurationService\r\n ) {\r\n this._tokenHandler = new BaseTokenRequestHandler(requestor);\r\n this._utils = new BasicQueryStringUtils();\r\n }\r\n\r\n private _tokenHandler: TokenRequestHandler;\r\n private _utils: QueryStringUtils;\r\n\r\n public async getByAuthorizationCode(redirectUrl: string, code: string, codeVerifier: string) {\r\n const config = await this.config.getConfiguration();\r\n const redirectUri = redirectUrl;\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: redirectUri,\r\n grant_type: GRANT_TYPE_AUTHORIZATION_CODE,\r\n code,\r\n extras: { code_verifier: codeVerifier }\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getByRefreshToken(refreshToken: string) {\r\n const config = await this.config.getConfiguration();\r\n const redirectUri = this.config.redirectUrl;\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: redirectUri,\r\n grant_type: GRANT_TYPE_REFRESH_TOKEN,\r\n refresh_token: refreshToken\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getByClientCredentials(clientId: string, clientSecret: string, scope: string) {\r\n const config = await this.config.getConfiguration();\r\n const req = new TokenRequest({\r\n client_id: clientId,\r\n redirect_uri: null,\r\n grant_type: 'client_credentials',\r\n extras: {\r\n client_secret: clientSecret,\r\n scope,\r\n }\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getBySecret(provider: string, secret: string, assertionToken: string, scope: string) {\r\n const config = await this.config.getConfiguration();\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: null,\r\n grant_type: 'urn:kolektor:nucleus:secret',\r\n extras: {\r\n secret_provider: provider,\r\n secret_value: secret,\r\n client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',\r\n client_assertion: assertionToken,\r\n scope,\r\n }\r\n });\r\n\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getByDeviceCode(deviceCode: string) {\r\n const config = await this.config.getConfiguration();\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: null,\r\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\r\n extras: {\r\n device_code: deviceCode\r\n }\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async registerServicePrincipal(token: string) {\r\n const config = await this.config.getConfiguration();\r\n\r\n const response = await this.requestor.xhr<ClientRegistrationResponseJson | TokenErrorJson>({\r\n url: config.registrationEndpoint,\r\n method: 'POST',\r\n dataType: 'json',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${token}`\r\n }\r\n // data: this._utils.stringify(map)\r\n });\r\n\r\n if ((response as TokenErrorJson).error === undefined) {\r\n return new ClientRegistrationResponse(response as ClientRegistrationResponseJson);\r\n } else {\r\n throw new AppAuthError((response as TokenErrorJson).error);\r\n }\r\n }\r\n\r\n public async getRegistrationCode(existingServicePrincipalId: string = null) {\r\n const params = {\r\n custom_action: 'sp_register',\r\n service_principal_id: existingServicePrincipalId\r\n };\r\n return this.getDeviceCodeInternal(params);\r\n }\r\n\r\n public async getDeviceCode(scope: string) {\r\n const params = {\r\n scope,\r\n };\r\n return this.getDeviceCodeInternal(params);\r\n }\r\n\r\n private async getDeviceCodeInternal(params: StringMap) {\r\n const config = await this.config.getConfiguration();\r\n\r\n params['client_id'] = this.config.clientId;\r\n const map: StringMap = params;\r\n\r\n const response = await this.requestor.xhr<DeviceCodeJson | TokenErrorJson>({\r\n url: config.deviceAuthorizationEndpoint,\r\n method: 'POST',\r\n dataType: 'json',\r\n headers: {'Content-Type': 'application/x-www-form-urlencoded'},\r\n data: this._utils.stringify(map)\r\n });\r\n\r\n if ((response as TokenErrorJson).error === undefined) {\r\n return new DeviceCode(response as DeviceCodeJson);\r\n } else {\r\n throw new AppAuthError((response as TokenErrorJson).error);\r\n }\r\n }\r\n\r\n\r\n}\r\n","import {\r\n AuthorizationRequest,\r\n TokenResponse,\r\n Crypto,\r\n RedirectRequestHandler,\r\n BasicQueryStringUtils,\r\n LocalStorageBackend,\r\n AppAuthError\r\n} from '@openid/appauth';\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { App } from '@capacitor/app';\r\nimport { Browser } from '@capacitor/browser';\r\nimport { Device } from '@capacitor/device';\r\nimport { NucleusCrypto } from './utils/nucleus-crypto';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { LocationService } from './utils/location.service';\r\nimport { AuthorizationRequestHandler } from '@openid/appauth';\r\nimport { NucleusAuthorizationNotifier } from './utils/nucleus-authorization-notifier';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { OtpResponse, OtpStatus, OtpType } from './models/otp';\r\nimport { SecretsStore } from './utils/secrets-store';\r\nimport { OidcConfigurationService } from './utils/oidc-configuration.service';\r\nimport { TokenClient } from './utils/token-client';\r\nimport { DeviceCode } from './models/device-code';\r\nimport { ServicePrincipalRegistrationStatus } from './models/service-principal';\r\nimport { lastValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NucleusIdentityService {\r\n constructor(\r\n private appService: NucleusAppService,\r\n location: LocationService,\r\n private http: HttpClient,\r\n private config: OidcConfigurationService,\r\n private tokenClient: TokenClient\r\n ) {\r\n const storage = new LocalStorageBackend();\r\n this._crypto = new NucleusCrypto();\r\n this._authorizationHandler = new RedirectRequestHandler(storage, new BasicQueryStringUtils(), location, this._crypto);\r\n this._authorizationHandler.setAuthorizationNotifier(this._authorizationNotifier);\r\n this._store = new SecretsStore(config.clientId);\r\n }\r\n\r\n private _authorizationHandler: AuthorizationRequestHandler;\r\n private _authorizationNotifier = new NucleusAuthorizationNotifier();\r\n private _crypto: Crypto;\r\n private _initStarted = false;\r\n private _initialized = false;\r\n private _refreshTokenPromise: Promise<TokenResponse>;\r\n private _getTokenPromise: Promise<string>;\r\n private _getServicePrincipalTokenPromise: Promise<string>;\r\n private _servicePrincipalTokenId = '_svcp';\r\n private _store: SecretsStore;\r\n\r\n public get identity() {\r\n return this._store.getIdentity();\r\n }\r\n\r\n public get isAuthenticated() {\r\n return this.identity != null;\r\n }\r\n\r\n public get servicePrincipalIdentity() {\r\n return this._store.getIdentity(this._servicePrincipalTokenId);\r\n }\r\n\r\n public get isServicePrincipalAuthenticated() {\r\n return this.servicePrincipalIdentity != null;\r\n }\r\n\r\n public get isIdentityServicePrincipal() {\r\n return this._store.defaultIdentityId === this._servicePrincipalTokenId;\r\n }\r\n\r\n public async init(startLogin: boolean = false): Promise<void> {\r\n if (this._initStarted || this._initialized) {\r\n console.warn('Nucleus.Identity: Auth initialization was already started. Don\\'t call init() multiple times!');\r\n return;\r\n }\r\n this._initStarted = true;\r\n\r\n this.handleLaunchCodeHash();\r\n await this._authorizationHandler.completeAuthorizationRequestIfPossible();\r\n\r\n const authErr = this._authorizationNotifier.error;\r\n if (authErr) {\r\n throw new Error('Authorization err: ' + authErr.error + ': ' + authErr.errorDescription);\r\n } else if (this._authorizationNotifier.response) {\r\n window.location.hash = '';\r\n const request = this._authorizationNotifier.request;\r\n const response = this._authorizationNotifier.response;\r\n const res = await this.tokenClient.getByAuthorizationCode(request.redirectUri, response.code, request.internal['code_verifier']);\r\n this._store.setDefaultIdentityId(null);\r\n await this._store.setToken(res);\r\n } else {\r\n const res = await this._store.getToken();\r\n if (!res && startLogin) {\r\n await this.login();\r\n }\r\n }\r\n this._initialized = true;\r\n }\r\n\r\n public async loginWithSecret(provider: string, secret: string): Promise<void> {\r\n this._store.removeToken();\r\n const assertionToken = await this.getServicePrincipalAccessToken();\r\n const scope = this.prepareScope(true, this.config?.requestedScopes);\r\n const res = await this.tokenClient.getBySecret(provider, secret, assertionToken, scope);\r\n this._store.setDefaultIdentityId(null);\r\n await this._store.setToken(res);\r\n }\r\n\r\n public async login(): Promise<void> {\r\n this._store.removeToken();\r\n const config = await this.config.getConfiguration();\r\n const request = this.prepareAuthorizationRequest();\r\n if (this.appService.isNative) {\r\n const listener = App.addListener('appUrlOpen', data => {\r\n if (this.appService.platform === 'ios') {\r\n Browser.close();\r\n }\r\n listener.remove();\r\n const hash = this.getCodeHash(data.url);\r\n if (hash) {\r\n const targetUrl = window.location.origin + window.location.pathname + '#' + hash;\r\n window.location.assign(targetUrl);\r\n window.location.reload();\r\n } else {\r\n console.warn('Nucleus.Identity: Redirect url did not contain authorization code!', data);\r\n }\r\n });\r\n }\r\n this._authorizationHandler.performAuthorizationRequest(config, request);\r\n }\r\n\r\n public async logout(): Promise<void> {\r\n this._store.removeToken();\r\n const config = await this.config.getConfiguration();\r\n const redirectUrl = this.config.redirectUrl;\r\n const logoutUrl = config.endSessionEndpoint + '?post_logout_redirect_uri=' + encodeURI(redirectUrl);\r\n if (this.appService.isNative) {\r\n const listener = App.addListener('appUrlOpen', () => {\r\n Device.getInfo().then(info => {\r\n if (info.platform === 'ios') {\r\n Browser.close();\r\n }\r\n });\r\n listener.remove();\r\n });\r\n Browser.open({ url: logoutUrl });\r\n } else {\r\n window.location.assign(logoutUrl);\r\n }\r\n }\r\n\r\n public async getAccessToken() {\r\n if (!this._getTokenPromise) {\r\n this._getTokenPromise = this.getAccessTokenInternal();\r\n }\r\n try {\r\n return await this._getTokenPromise;\r\n } finally {\r\n this._getTokenPromise = null;\r\n }\r\n }\r\n\r\n public async getServicePrincipalAccessToken() {\r\n if (!this._getServicePrincipalTokenPromise) {\r\n this._getServicePrincipalTokenPromise = this.getServicePrincipalAccessTokenInternal();\r\n }\r\n try {\r\n return await this._getServicePrincipalTokenPromise;\r\n } finally {\r\n this._getServicePrincipalTokenPromise = null;\r\n }\r\n }\r\n\r\n public async loginServicePrincipal() {\r\n const sp = await this._store.getServicePrincipal();\r\n if (sp) {\r\n const scope = this.prepareScope(false, this.config.servicePrincipalRequestedScopes);\r\n const res = await this.tokenClient.getByClientCredentials(sp.id, sp.secret, scope);\r\n await this._store.setToken(res, this._servicePrincipalTokenId);\r\n return res;\r\n } else {\r\n throw Error('Service principal is not registered!');\r\n }\r\n }\r\n\r\n public async loginAsServicePrincipal() {\r\n const token = await this._store.getToken(this._servicePrincipalTokenId);\r\n if (!token) {\r\n await this.loginServicePrincipal();\r\n }\r\n this._store.setDefaultIdentityId(this._servicePrincipalTokenId);\r\n }\r\n\r\n public async getOtp(type: OtpType, expiresIn: number = -1) {\r\n let url = this.config.getServerUrl(`/otp/create?type=${type}`);\r\n if (expiresIn > 0) {\r\n url += `&expiresIn=${expiresIn}`;\r\n }\r\n return lastValueFrom(this.http.get<OtpResponse>(url));\r\n }\r\n\r\n public async getOtpStatus(id: string) {\r\n const url = this.config.getServerUrl(`/otp/status/${id}`);\r\n return lastValueFrom(this.http.get<OtpStatus>(url));\r\n }\r\n\r\n public getOtpUrl(redirectUrl: string, password: string) {\r\n const encoded = encodeURIComponent(redirectUrl);\r\n const url = `/otp/auth?otpValue=${password}&returnUrl=${encoded}`;\r\n return this.config.getServerUrl(url);\r\n }\r\n\r\n public async startServicePrincipalRegistration() {\r\n const sp = await this._store.getServicePrincipal();\r\n return await this.tokenClient.getRegistrationCode(sp?.id);\r\n }\r\n\r\n public async completeServicePrincipalRegistration(deviceCode: DeviceCode) {\r\n const tokenRes = await this.waitForDeviceToken(deviceCode);\r\n const regRes = await this.tokenClient.registerServicePrincipal(tokenRes.accessToken);\r\n\r\n await this._store.setServicePrincipal({\r\n id: regRes.clientId,\r\n secret: regRes.clientSecret,\r\n expiresAt: regRes.secretExpirationDate\r\n });\r\n }\r\n\r\n public removeServicePrincipalRegistration() {\r\n return this._store.removeServicePrincipal();\r\n }\r\n\r\n public async getServicePrincipalRegistrationStatus() {\r\n const sp = await this._store.getServicePrincipal();\r\n return new ServicePrincipalRegistrationStatus(sp);\r\n }\r\n\r\n public async startDeviceCodeLogin() {\r\n const scope = this.prepareScope(true, this.config.requestedScopes);\r\n return await this.tokenClient.getDeviceCode(scope);\r\n }\r\n\r\n public async completeDeviceCodeLogin(deviceCode: DeviceCode) {\r\n const res = await this.waitForDeviceToken(deviceCode);\r\n await this._store.setToken(res);\r\n }\r\n\r\n private async waitForDeviceToken(deviceCode: DeviceCode) {\r\n let res: TokenResponse = null;\r\n do {\r\n if (deviceCode.isExpired()) {\r\n throw Error('Device code is expired!');\r\n }\r\n\r\n try {\r\n res = await this.tokenClient.getByDeviceCode(deviceCode.deviceCode);\r\n } catch (error) {\r\n if (error instanceof AppAuthError && error.message === 'authorization_pending') {\r\n await this.delay(2000);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n } while (!res);\r\n return res;\r\n }\r\n\r\n private prepareAuthorizationRequest(): AuthorizationRequest {\r\n const redirectUri = this.config.redirectUrl;\r\n\r\n const params = {\r\n response_mode: 'fragment',\r\n prompt: 'consent',\r\n access_type: 'offline',\r\n auth_provider_hint: this.config.authProviderHint\r\n };\r\n\r\n return new AuthorizationRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: redirectUri,\r\n response_type: AuthorizationRequest.RESPONSE_TYPE_CODE,\r\n scope: this.prepareScope(true, this.config.requestedScopes),\r\n extras: params,\r\n }, this._crypto, true);\r\n }\r\n\r\n private async getServicePrincipalAccessTokenInternal() {\r\n let token = await this._store.getToken(this._servicePrincipalTokenId);\r\n if (!token?.isValid()) {\r\n token = await this.loginServicePrincipal();\r\n }\r\n return token?.accessToken;\r\n }\r\n\r\n private async getAccessTokenInternal() {\r\n let token = await this._store.getToken();\r\n if (token && !token.isValid()) {\r\n token = await this.loginWithRefreshToken(token);\r\n }\r\n return token?.accessToken;\r\n }\r\n\r\n private async loginWithRefreshToken(token: TokenResponse) {\r\n if (!this._refreshTokenPromise) {\r\n this._refreshTokenPromise = this.loginWithRefreshTokenInternal(token);\r\n }\r\n try {\r\n return await this._refreshTokenPromise;\r\n } finally {\r\n this._refreshTokenPromise = null;\r\n }\r\n }\r\n\r\n private async loginWithRefreshTokenInternal(token: TokenResponse) {\r\n if (token?.refreshToken) {\r\n try {\r\n const res = await this.tokenClient.getByRefreshToken(token.refreshToken);\r\n await this._store.setToken(res);\r\n return res;\r\n } catch (err) {\r\n console.warn('Nucleus.Identity: Failed to login with refresh token.', err);\r\n if (err.message === 'invalid_grant') {\r\n await this.logout();\r\n }\r\n }\r\n } else {\r\n console.warn('Nucleus.Identity: There is no refresh token available.');\r\n }\r\n }\r\n\r\n private getCodeHash(url: string) {\r\n const arr = url.split('#');\r\n if (arr.length > 1) {\r\n const hash = arr[1];\r\n if (hash.startsWith('code=')) {\r\n return hash;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private handleLaunchCodeHash() {\r\n if (this.appService.isNative && this.appService.launchUrl) {\r\n const hash = this.getCodeHash(this.appService.launchUrl);\r\n if (hash) {\r\n console.log('Nucleus.Identity: Got authorization code from launchUrl, will assign it to hash.');\r\n window.location.hash = '#' + hash;\r\n }\r\n }\r\n }\r\n\r\n private prepareScope(offlineAccess: boolean, aditionalScope: string) {\r\n let scope = 'openid';\r\n if (offlineAccess) {\r\n scope += ' offline_access';\r\n }\r\n if (scope) {\r\n scope += ' ' + aditionalScope;\r\n }\r\n return scope;\r\n }\r\n\r\n private delay(miliseconds: number) {\r\n return new Promise<void>(resolve => {\r\n setTimeout(() => {\r\n resolve();\r\n }, miliseconds);\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, from, throwError } from 'rxjs';\r\nimport { NucleusIdentityConfig } from './nucleus-identity-config';\r\nimport { NucleusIdentityService } from './nucleus-identity.service';\r\nimport { mergeMap, catchError } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NucleusTokenInterceptor implements HttpInterceptor {\r\n constructor(private auth: NucleusIdentityService, private config: NucleusIdentityConfig\r\n ) {\r\n this._authority = config.authority.toLowerCase();\r\n this._interceptUrls = config.httpInterceptorUrls?.map(x => x.toLowerCase());\r\n }\r\n\r\n private _authority: string;\r\n private _authorityInterceptPaths = ['/api', '/manage', '/otp/create', '/otp/status'];\r\n private _interceptUrls: string[];\r\n\r\n public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (this.shouldIntercept(req.url)) {\r\n const res = this.authorizeRequest(this.auth.getAccessToken(), req, next);\r\n return this.checkUnauthorized(res);\r\n }\r\n return next.handle(req);\r\n }\r\n\r\n private shouldIntercept(url: string): boolean {\r\n url = url.toLowerCase();\r\n\r\n if (url.startsWith(this._authority)) {\r\n const pathname = new URL(url).pathname;\r\n return (this._authorityInterceptPaths.some(x => pathname.startsWith(x)));\r\n }\r\n\r\n if (this._interceptUrls?.length > 0) {\r\n return this.config.httpInterceptorUrls.some(x => url.startsWith(x));\r\n }\r\n return false;\r\n }\r\n\r\n private authorizeRequest(getToken: Promise<string>, req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return from(getToken).pipe(\r\n mergeMap(token => {\r\n if (token) {\r\n const headers = req.headers.set('Authorization', `Bearer ${token}`);\r\n req = req.clone({ headers });\r\n }\r\n return next.handle(req);\r\n })\r\n );\r\n }\r\n\r\n private checkUnauthorized(response: Observable<HttpEvent<any>>): Observable<HttpEvent<any>> {\r\n return response.pipe(\r\n catchError((err) => {\r\n if (err instanceof HttpErrorResponse && err.status === 401) {\r\n if (this.config.automaticLoginOnHttp401) {\r\n this.auth.login();\r\n }\r\n }\r\n return throwError(err);\r\n })\r\n );\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { NucleusTokenInterceptor } from './nucleus-token-interceptor.service';\r\nimport { NucleusIdentityConfig } from './nucleus-identity-config';\r\n\r\n@NgModule({\r\n imports: [\r\n ],\r\n declarations: [\r\n ],\r\n exports: [\r\n ]\r\n})\r\n\r\nexport class NucleusIdentityModule {\r\n\r\n static forRoot(config: NucleusIdentityConfig): ModuleWithProviders<NucleusIdentityModule> {\r\n return {\r\n ngModule: NucleusIdentityModule,\r\n providers: [\r\n { provide: NucleusIdentityConfig, useValue: config },\r\n { provide: HTTP_INTERCEPTORS, useClass: NucleusTokenInterceptor, multi: true },\r\n ]\r\n };\r\n }\r\n}\r\n","export class OtpResponse {\r\n public password: string;\r\n public passwordId: string;\r\n}\r\n\r\nexport class OtpStatus {\r\n public isExpired: boolean;\r\n public isUsed: boolean;\r\n public secondsToExpiration: number;\r\n}\r\n\r\nexport enum OtpType {\r\n SimpleNumbers = 0,\r\n SimpleAlfanumeric = 1,\r\n Complex = 2\r\n}\r\n","/*\r\n * Public API Surface of nucleus-identity\r\n */\r\n\r\nexport * from './lib/nucleus-identity.module';\r\nexport * from './lib/nucleus-identity.service';\r\nexport * from './lib/nucleus-identity-config';\r\nexport { OtpResponse, OtpStatus, OtpType } from './lib/models/otp';\r\nexport { DeviceCode } from './lib/models/device-code';\r\nexport { Identity } from './lib/models/identity';\r\nexport { ServicePrincipalRegistrationStatus } from './lib/models/service-principal';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -226,6 +226,9 @@ class SecretsStore {
226
226
  this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;
227
227
  this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);
228
228
  }
229
+ get defaultIdentityId() {
230
+ return this._defaultIdentityId;
231
+ }
229
232
  removeServicePrincipal() {
230
233
  this._servicePrincipal = null;
231
234
  return this.clear(this._servicePrincipalKey);
@@ -664,6 +667,9 @@ class NucleusIdentityService {
664
667
  get isServicePrincipalAuthenticated() {
665
668
  return this.servicePrincipalIdentity != null;
666
669
  }
670
+ get isIdentityServicePrincipal() {
671
+ return this._store.defaultIdentityId === this._servicePrincipalTokenId;
672
+ }
667
673
  async init(startLogin = false) {
668
674
  if (this._initStarted || this._initialized) {
669
675
  console.warn('Nucleus.Identity: Auth initialization was already started. Don\'t call init() multiple times!');
@@ -1051,4 +1057,3 @@ var OtpType;
1051
1057
  */
1052
1058
 
1053
1059
  export { DeviceCode, Identity, NucleusIdentityConfig, NucleusIdentityModule, NucleusIdentityService, OtpResponse, OtpStatus, OtpType, ServicePrincipalRegistrationStatus };
1054
- //# sourceMappingURL=kolektor-nucleus-identity.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"kolektor-nucleus-identity.mjs","sources":["../../../projects/nucleus-identity/src/lib/nucleus-identity-config.ts","../../../projects/nucleus-identity/src/lib/utils/nucleus-crypto.ts","../../../projects/nucleus-identity/src/lib/utils/location.service.ts","../../../projects/nucleus-identity/src/lib/utils/nucleus-authorization-notifier.ts","../../../projects/nucleus-identity/src/lib/models/identity.ts","../../../projects/nucleus-identity/src/lib/utils/secrets-store.ts","../../../projects/nucleus-identity/src/lib/utils/angular-requestor.ts","../../../projects/nucleus-identity/src/lib/utils/authorization-service-configuration.ts","../../../projects/nucleus-identity/src/lib/utils/oidc-configuration.service.ts","../../../projects/nucleus-identity/src/lib/models/device-code.ts","../../../projects/nucleus-identity/src/lib/models/client-registration.ts","../../../projects/nucleus-identity/src/lib/utils/token-client.ts","../../../projects/nucleus-identity/src/lib/models/service-principal.ts","../../../projects/nucleus-identity/src/lib/nucleus-identity.service.ts","../../../projects/nucleus-identity/src/lib/nucleus-token-interceptor.service.ts","../../../projects/nucleus-identity/src/lib/nucleus-identity.module.ts","../../../projects/nucleus-identity/src/lib/models/otp.ts","../../../projects/nucleus-identity/src/public-api.ts","../../../projects/nucleus-identity/src/kolektor-nucleus-identity.ts"],"sourcesContent":["export class NucleusIdentityConfig {\r\n public authority: string = null;\r\n\r\n public clientId: string;\r\n\r\n public redirectUri?: string;\r\n\r\n public androidRedirectUri?: string;\r\n\r\n public iOSRedirectUri?: string;\r\n\r\n public httpInterceptorUrls?: string[] = [];\r\n\r\n public automaticLoginOnHttp401 = false;\r\n\r\n public requestedScopes?: string;\r\n\r\n public servicePrincipalRequestedScopes?: string;\r\n\r\n public authProviderHint?: string;\r\n}\r\n","// It also supports IE with window.msCrypto !!!!!!\r\nimport { Crypto } from '@openid/appauth';\r\nimport { AppAuthError } from '@openid/appauth';\r\nimport * as base64 from 'base64-js';\r\n\r\nconst CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n\r\nexport class NucleusCrypto implements Crypto {\r\n private browserCrypto = window.crypto || (window as any).msCrypto;\r\n\r\n generateRandom(size: number) {\r\n const buffer = new Uint8Array(size);\r\n if (this.browserCrypto) {\r\n this.browserCrypto.getRandomValues(buffer);\r\n } else {\r\n // fall back to Math.random() if nothing else is available\r\n for (let i = 0; i < size; i += 1) {\r\n buffer[i] = Math.random();\r\n }\r\n }\r\n return this.bufferToString(buffer);\r\n }\r\n\r\n deriveChallenge(code: string): Promise<string> {\r\n if (code.length < 43 || code.length > 128) {\r\n return Promise.reject(new AppAuthError('Invalid code length.'));\r\n }\r\n if (!this.browserCrypto.subtle) {\r\n return Promise.reject(new AppAuthError('window.crypto.subtle is unavailable.'));\r\n }\r\n\r\n const ecode = this.textEncodeLite(code);\r\n const op = this.browserCrypto.subtle.digest('SHA-256', ecode);\r\n return new Promise((resolve, reject) => {\r\n // if operation contains algorithm it means it is not a promise which means it is CryptoOperation from IE.\r\n // We just return result as promise\r\n if (op.algorithm) {\r\n console.log('we have a CryptoOperation');\r\n op.addEventListener('complete', () => {\r\n resolve(this.urlSafe(op.result));\r\n });\r\n\r\n op.addEventListener('error', () => {\r\n reject(op.result);\r\n });\r\n } else { // the result is promise\r\n op.then(buffer => resolve(this.urlSafe(buffer)), error => reject(error));\r\n }\r\n });\r\n }\r\n\r\n\r\n private urlSafe(buffer: Uint8Array): string {\r\n const encoded = base64.fromByteArray(new Uint8Array(buffer));\r\n return encoded.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\r\n }\r\n\r\n private textEncodeLite(str: string) {\r\n const buf = new ArrayBuffer(str.length);\r\n const bufView = new Uint8Array(buf);\r\n\r\n for (let i = 0; i < str.length; i++) {\r\n bufView[i] = str.charCodeAt(i);\r\n }\r\n return bufView;\r\n }\r\n\r\n private bufferToString(buffer: Uint8Array) {\r\n const state = [];\r\n for (let i = 0; i < buffer.byteLength; i += 1) {\r\n const index = buffer[i] % CHARSET.length;\r\n state.push(CHARSET[index]);\r\n }\r\n return state.join('');\r\n }\r\n}\r\n","import { LocationLike } from '@openid/appauth';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { Browser } from '@capacitor/browser';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocationService implements LocationLike {\r\n constructor(private appService: NucleusAppService) {\r\n }\r\n\r\n get hash() {\r\n return window.location.hash;\r\n }\r\n set hash(v) {\r\n window.location.hash = v;\r\n }\r\n\r\n get host() {\r\n return window.location.host;\r\n }\r\n set host(v) {\r\n window.location.host = v;\r\n }\r\n\r\n get origin() {\r\n return window.location.origin;\r\n }\r\n\r\n get hostname() {\r\n return window.location.hostname;\r\n }\r\n set hostname(v) {\r\n window.location.hostname = v;\r\n }\r\n\r\n get pathname() {\r\n return window.location.pathname;\r\n }\r\n set pathname(v) {\r\n window.location.pathname = v;\r\n }\r\n\r\n get port() {\r\n return window.location.port;\r\n }\r\n set port(v) {\r\n window.location.port = v;\r\n }\r\n\r\n get protocol() {\r\n return window.location.protocol;\r\n }\r\n set protocol(v) {\r\n window.location.protocol = v;\r\n }\r\n\r\n get search() {\r\n return window.location.search;\r\n }\r\n set search(v) {\r\n window.location.search = v;\r\n }\r\n\r\n assign(url: string): void {\r\n if (this.appService.isNative) {\r\n Browser.open({ url });\r\n } else {\r\n window.location.assign(url);\r\n }\r\n }\r\n}\r\n","import { AuthorizationNotifier } from '@openid/appauth';\r\nimport { AuthorizationResponse, AuthorizationError } from '@openid/appauth';\r\nimport { AuthorizationRequest } from '@openid/appauth';\r\n\r\nexport class NucleusAuthorizationNotifier extends AuthorizationNotifier {\r\n response: AuthorizationResponse;\r\n request: AuthorizationRequest;\r\n error: AuthorizationError;\r\n\r\n constructor() {\r\n super();\r\n this.setAuthorizationListener((request, response, error) => {\r\n console.log('Authorization request complete ', request, response, error);\r\n this.response = response;\r\n this.request = request;\r\n this.error = error;\r\n });\r\n }\r\n}\r\n","import { TokenResponse } from '@openid/appauth';\r\n\r\nexport class Claim {\r\n public name: string;\r\n public values: string[];\r\n\r\n constructor(name: string, values: string[]) {\r\n this.name = name;\r\n this.values = values;\r\n }\r\n}\r\n\r\nexport class Identity {\r\n public name: string;\r\n public subject: string;\r\n\r\n public claims: Claim[] = [];\r\n\r\n public static createFromResponse(res: TokenResponse): Identity {\r\n const token = this.decodeToken(res.idToken);\r\n const id = new Identity();\r\n id.name = token.name;\r\n id.subject = token.sub;\r\n for (const key in token) {\r\n if ({}.hasOwnProperty.call(token, key)) {\r\n let vals = token[key];\r\n\r\n if (!Array.isArray(vals)) {\r\n vals = [vals];\r\n }\r\n\r\n const claim = new Claim(key, vals);\r\n id.claims.push(claim);\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n private static decodeToken(jwt: string): any {\r\n if (!jwt) {\r\n throw new Error('NucleusIdentity: There was no identity token in the response!');\r\n }\r\n\r\n try {\r\n const arr = jwt.split('.');\r\n // var header = arr[0];\r\n const payload = this.b64DecodeUnicode(arr[1]);\r\n // var signature = arr[2];\r\n return JSON.parse(payload);\r\n } catch (error) {\r\n console.error('Error while decoding identity token', error);\r\n console.error('Error while decoding identity token JWT', jwt);\r\n }\r\n }\r\n\r\n private static b64DecodeUnicode(str: string) {\r\n str = str.replace(/-/g, '+').replace(/_/g, '/'); // Qlector fix :)\r\n return decodeURIComponent(atob(str).split('').map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)).join(''));\r\n }\r\n}\r\n","import 'capacitor-secure-storage-plugin';\r\nimport { TokenResponse, TokenResponseJson } from '@openid/appauth';\r\nimport { Identity } from '../models/identity';\r\nimport { ServicePrincipal } from '../models/service-principal';\r\nimport { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';\r\n\r\nexport class SecretsStore {\r\n constructor(clientId: string) {\r\n this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login with existing tokens will fail\r\n this._servicePrincipalKey = `${this._tokenStorageKeyPrefix}.SvcP`;\r\n this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;\r\n this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);\r\n }\r\n private _tokenStorageKeyPrefix: string;\r\n private _tokens: { [id: string]: TokenResponse } = {};\r\n private _identities: { [id: string]: Identity } = {};\r\n private _servicePrincipalKey;\r\n private _servicePrincipal: ServicePrincipal;\r\n // this specify which identity id is used by default, when If id is not specified in getToken or getIdentity\r\n private _defaultIdentityId: string = null;\r\n private _defaultIdentityIdStorageKey: string = null;\r\n\r\n public removeServicePrincipal() {\r\n this._servicePrincipal = null;\r\n return this.clear(this._servicePrincipalKey);\r\n }\r\n\r\n public async setServicePrincipal(servicePrincipal: ServicePrincipal) {\r\n this._servicePrincipal = servicePrincipal;\r\n await this.save(this._servicePrincipalKey, servicePrincipal);\r\n }\r\n\r\n public async getServicePrincipal() {\r\n if (!this._servicePrincipal) {\r\n this._servicePrincipal = await this.load<ServicePrincipal>(this._servicePrincipalKey);\r\n }\r\n return this._servicePrincipal;\r\n }\r\n\r\n public setToken(token: TokenResponse, id: string = null) {\r\n return this.setTokenInternal(token, true, id);\r\n }\r\n\r\n public getIdentity(id: string = null) {\r\n const key = this.getTokenKey(id);\r\n return this._identities[key];\r\n }\r\n\r\n public setDefaultIdentityId(id: string) {\r\n this._defaultIdentityId = id;\r\n if (this._defaultIdentityId) {\r\n localStorage.setItem(this._defaultIdentityIdStorageKey, this._defaultIdentityId);\r\n } else {\r\n localStorage.removeItem(this._defaultIdentityIdStorageKey);\r\n }\r\n }\r\n\r\n public async getToken(id: string = null) {\r\n const key = this.getTokenKey(id);\r\n\r\n // if token is not there or it is invalid we check storage again before returning\r\n if (!this._tokens[key] || !this._tokens[key].isValid()) {\r\n await this.reloadTokenFromStorage(id);\r\n }\r\n return this._tokens[key];\r\n }\r\n\r\n public removeToken(id: string = null) {\r\n const key = this.getTokenKey(id);\r\n delete this._tokens[key];\r\n delete this._identities[key];\r\n return this.clear(key);\r\n }\r\n\r\n private async reloadTokenFromStorage(id: string) {\r\n const key = this.getTokenKey(id);\r\n const storedToken = await this.load<TokenResponseJson>(key);\r\n if (storedToken) {\r\n const res = new TokenResponse(storedToken);\r\n if (res?.accessToken || res?.idToken) {\r\n await this.setTokenInternal(res, false, id);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private async setTokenInternal(token: TokenResponse, save: boolean, id: string = null) {\r\n const key = this.getTokenKey(id);\r\n if (token == null) {\r\n await this.removeToken(id);\r\n } else {\r\n this._tokens[key] = token;\r\n this._identities[key] = Identity.createFromResponse(token);\r\n if (save) {\r\n try {\r\n await this.save(key, token.toJson());\r\n } catch (e) {\r\n console.warn('Nucleus.Identity: Could not save to SecureStorage.');\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getTokenKey(id: string = null) {\r\n if (!id) {\r\n id = this._defaultIdentityId;\r\n }\r\n return id ? `${this._tokenStorageKeyPrefix}.${id}` : this._tokenStorageKeyPrefix;\r\n }\r\n\r\n private clear(key: string) {\r\n return SecureStoragePlugin.remove({ key });\r\n }\r\n\r\n private save<T>(key: string, value: T): Promise<{ value: boolean }> {\r\n return SecureStoragePlugin.set({ key, value: JSON.stringify(value) });\r\n }\r\n\r\n private async load<T>(key: string) {\r\n try {\r\n const x = await SecureStoragePlugin.get({ key });\r\n if (x?.value) {\r\n return JSON.parse(x.value) as T;\r\n } else {\r\n return null;\r\n }\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n}\r\n","import { AppAuthError, Requestor } from '@openid/appauth';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AngularRequestor extends Requestor {\r\n\r\n constructor(private http: HttpClient) {\r\n super();\r\n }\r\n\r\n // eslint-disable-next-line no-undef\r\n xhr<T>(settings: JQueryAjaxSettings): Promise<T> {\r\n if (settings.method === undefined) {\r\n settings.method = 'GET';\r\n }\r\n return new Promise<T>((resolve, reject) => {\r\n this.http.request<T>(settings.method, settings.url, {\r\n body: settings.data,\r\n headers: settings.headers,\r\n }).subscribe(res => resolve(res), err => {\r\n let e = new AppAuthError(err);\r\n if (err instanceof HttpErrorResponse) {\r\n e = new AppAuthError(err.error?.error || err.statusText);\r\n }\r\n reject(e);\r\n });\r\n });\r\n }\r\n}\r\n","import { AuthorizationServiceConfiguration, AuthorizationServiceConfigurationJson, JQueryRequestor, Requestor } from '@openid/appauth';\r\n\r\nconst WELL_KNOWN_PATH = '.well-known';\r\nconst OPENID_CONFIGURATION = 'openid-configuration';\r\n\r\nexport interface NucleusAuthorizationServiceConfigurationJson extends AuthorizationServiceConfigurationJson {\r\n device_authorization_endpoint?: string;\r\n registration_endpoint?: string;\r\n}\r\n\r\nexport class NucleusAuthorizationServiceConfiguration extends AuthorizationServiceConfiguration {\r\n\r\n constructor(request: NucleusAuthorizationServiceConfigurationJson) {\r\n super(request);\r\n this.deviceAuthorizationEndpoint = request.device_authorization_endpoint;\r\n this.registrationEndpoint = request.registration_endpoint;\r\n }\r\n\r\n deviceAuthorizationEndpoint: string;\r\n registrationEndpoint: string;\r\n\r\n static fetchFromIssuer(openIdIssuerUrl: string, requestor?: Requestor) {\r\n const fullUrl = `${openIdIssuerUrl}/${WELL_KNOWN_PATH}/${OPENID_CONFIGURATION}`;\r\n const requestorToUse = requestor || new JQueryRequestor();\r\n return requestorToUse\r\n .xhr<NucleusAuthorizationServiceConfigurationJson>({url: fullUrl, dataType: 'json', method: 'GET'})\r\n .then(json => new NucleusAuthorizationServiceConfiguration(json));\r\n }\r\n\r\n toJson() {\r\n const res = super.toJson() as NucleusAuthorizationServiceConfigurationJson;\r\n res.device_authorization_endpoint = this.deviceAuthorizationEndpoint;\r\n return res as any;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { NucleusIdentityConfig } from '../nucleus-identity-config';\r\nimport { AngularRequestor } from './angular-requestor';\r\nimport { NucleusAuthorizationServiceConfiguration } from './authorization-service-configuration';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OidcConfigurationService {\r\n constructor(\r\n private requestor: AngularRequestor,\r\n private config: NucleusIdentityConfig,\r\n private appService: NucleusAppService,\r\n ) {\r\n }\r\n\r\n private _configuration: NucleusAuthorizationServiceConfiguration = null;\r\n\r\n public async getConfiguration() {\r\n await this.assureConfiguration();\r\n return this._configuration;\r\n }\r\n\r\n public get clientId() {\r\n return this.config.clientId;\r\n }\r\n\r\n public get requestedScopes() {\r\n return this.config.requestedScopes;\r\n }\r\n\r\n public get servicePrincipalRequestedScopes() {\r\n return this.config.servicePrincipalRequestedScopes;\r\n }\r\n\r\n public get authProviderHint() {\r\n return this.config.authProviderHint;\r\n }\r\n\r\n public get redirectUrl() {\r\n let uri = window.location.href;\r\n const platform = this.appService.platform;\r\n if (platform === 'android' && this.config.androidRedirectUri) {\r\n uri = this.config.androidRedirectUri;\r\n } else if (platform === 'ios' && this.config.iOSRedirectUri) {\r\n uri = this.config.iOSRedirectUri;\r\n } else if (this.config.redirectUri) {\r\n uri = this.config.redirectUri;\r\n }\r\n return this.NormalizeRedirectUri(uri);\r\n }\r\n\r\n public getServerUrl(relativeUri: string = null) {\r\n let authority = this.config.authority;\r\n if (!authority || authority === 'origin') {\r\n authority = window.origin;\r\n }\r\n\r\n let url = new URL(authority);\r\n\r\n if (relativeUri) {\r\n url = new URL(relativeUri, url);\r\n }\r\n\r\n return url.href;\r\n }\r\n\r\n private NormalizeRedirectUri(uri: string) {\r\n const i = uri.indexOf('#');\r\n if (i > 0) {\r\n uri = uri.substring(0, i);\r\n }\r\n return uri;\r\n }\r\n\r\n private async assureConfiguration() {\r\n if (this._configuration != null) {\r\n return;\r\n }\r\n let authority = this.getServerUrl();\r\n if (authority[authority.length - 1] === '/') {\r\n authority = authority.slice(0, -1);\r\n }\r\n try {\r\n this._configuration = await NucleusAuthorizationServiceConfiguration.fetchFromIssuer(authority, this.requestor);\r\n } catch (e) {\r\n console.error('Nucleus.Identity: Cannot load OIDC configuration: ' + (e as Error).message);\r\n throw e;\r\n }\r\n }\r\n}\r\n","import { nowInSeconds } from '@openid/appauth';\r\n\r\nexport interface DeviceCodeJson {\r\n device_code: string;\r\n user_code: string;\r\n verification_uri: string;\r\n verification_uri_complete: string;\r\n expires_in: string;\r\n message: string;\r\n}\r\n\r\nexport class DeviceCode {\r\n constructor(response: DeviceCodeJson) {\r\n this.deviceCode = response.device_code;\r\n this.userCode = response.user_code;\r\n this.verificationUrl = response.verification_uri;\r\n this.verificationUrlComplete = response.verification_uri_complete;\r\n this.expiresIn = parseInt(response.expires_in, 10);\r\n this.issuedAt = nowInSeconds();\r\n }\r\n\r\n private expiresIn: number;\r\n private issuedAt: number;\r\n\r\n public deviceCode: string;\r\n public userCode: string;\r\n public verificationUrl: string;\r\n public verificationUrlComplete: string;\r\n\r\n isExpired(buffer: number = 60) {\r\n\r\n return this.secondsLeft(buffer) <= 0;\r\n }\r\n\r\n secondsLeft(buffer: number = 60) {\r\n const now = nowInSeconds();\r\n return (this.issuedAt + this.expiresIn - buffer) - now;\r\n }\r\n}\r\n","export interface ClientRegistrationResponseJson {\r\n client_id: string;\r\n client_secret: string;\r\n client_secret_expires_at: number;\r\n}\r\n\r\nexport class ClientRegistrationResponse {\r\n constructor(response: ClientRegistrationResponseJson) {\r\n this.clientId = response.client_id;\r\n this.clientSecret = response.client_secret;\r\n this.secretExpirationDate = new Date(response.client_secret_expires_at * 1000);\r\n }\r\n\r\n clientId: string;\r\n clientSecret: string;\r\n secretExpirationDate: Date;\r\n}\r\n","import {\r\n AppAuthError,\r\n BaseTokenRequestHandler,\r\n BasicQueryStringUtils,\r\n GRANT_TYPE_AUTHORIZATION_CODE,\r\n GRANT_TYPE_REFRESH_TOKEN,\r\n QueryStringUtils,\r\n StringMap,\r\n TokenErrorJson,\r\n TokenRequest,\r\n TokenRequestHandler} from '@openid/appauth';\r\nimport { OidcConfigurationService } from './oidc-configuration.service';\r\nimport { AngularRequestor } from './angular-requestor';\r\nimport { Injectable } from '@angular/core';\r\nimport { DeviceCode, DeviceCodeJson } from '../models/device-code';\r\nimport { ClientRegistrationResponse, ClientRegistrationResponseJson } from '../models/client-registration';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TokenClient {\r\n constructor(\r\n private requestor: AngularRequestor,\r\n private config: OidcConfigurationService\r\n ) {\r\n this._tokenHandler = new BaseTokenRequestHandler(requestor);\r\n this._utils = new BasicQueryStringUtils();\r\n }\r\n\r\n private _tokenHandler: TokenRequestHandler;\r\n private _utils: QueryStringUtils;\r\n\r\n public async getByAuthorizationCode(redirectUrl: string, code: string, codeVerifier: string) {\r\n const config = await this.config.getConfiguration();\r\n const redirectUri = redirectUrl;\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: redirectUri,\r\n grant_type: GRANT_TYPE_AUTHORIZATION_CODE,\r\n code,\r\n extras: { code_verifier: codeVerifier }\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getByRefreshToken(refreshToken: string) {\r\n const config = await this.config.getConfiguration();\r\n const redirectUri = this.config.redirectUrl;\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: redirectUri,\r\n grant_type: GRANT_TYPE_REFRESH_TOKEN,\r\n refresh_token: refreshToken\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getByClientCredentials(clientId: string, clientSecret: string, scope: string) {\r\n const config = await this.config.getConfiguration();\r\n const req = new TokenRequest({\r\n client_id: clientId,\r\n redirect_uri: null,\r\n grant_type: 'client_credentials',\r\n extras: {\r\n client_secret: clientSecret,\r\n scope,\r\n }\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getBySecret(provider: string, secret: string, assertionToken: string, scope: string) {\r\n const config = await this.config.getConfiguration();\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: null,\r\n grant_type: 'urn:kolektor:nucleus:secret',\r\n extras: {\r\n secret_provider: provider,\r\n secret_value: secret,\r\n client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',\r\n client_assertion: assertionToken,\r\n scope,\r\n }\r\n });\r\n\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getByDeviceCode(deviceCode: string) {\r\n const config = await this.config.getConfiguration();\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: null,\r\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\r\n extras: {\r\n device_code: deviceCode\r\n }\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async registerServicePrincipal(token: string) {\r\n const config = await this.config.getConfiguration();\r\n\r\n const response = await this.requestor.xhr<ClientRegistrationResponseJson | TokenErrorJson>({\r\n url: config.registrationEndpoint,\r\n method: 'POST',\r\n dataType: 'json',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${token}`\r\n }\r\n // data: this._utils.stringify(map)\r\n });\r\n\r\n if ((response as TokenErrorJson).error === undefined) {\r\n return new ClientRegistrationResponse(response as ClientRegistrationResponseJson);\r\n } else {\r\n throw new AppAuthError((response as TokenErrorJson).error);\r\n }\r\n }\r\n\r\n public async getRegistrationCode(existingServicePrincipalId: string = null) {\r\n const params = {\r\n custom_action: 'sp_register',\r\n service_principal_id: existingServicePrincipalId\r\n };\r\n return this.getDeviceCodeInternal(params);\r\n }\r\n\r\n public async getDeviceCode(scope: string) {\r\n const params = {\r\n scope,\r\n };\r\n return this.getDeviceCodeInternal(params);\r\n }\r\n\r\n private async getDeviceCodeInternal(params: StringMap) {\r\n const config = await this.config.getConfiguration();\r\n\r\n params['client_id'] = this.config.clientId;\r\n const map: StringMap = params;\r\n\r\n const response = await this.requestor.xhr<DeviceCodeJson | TokenErrorJson>({\r\n url: config.deviceAuthorizationEndpoint,\r\n method: 'POST',\r\n dataType: 'json',\r\n headers: {'Content-Type': 'application/x-www-form-urlencoded'},\r\n data: this._utils.stringify(map)\r\n });\r\n\r\n if ((response as TokenErrorJson).error === undefined) {\r\n return new DeviceCode(response as DeviceCodeJson);\r\n } else {\r\n throw new AppAuthError((response as TokenErrorJson).error);\r\n }\r\n }\r\n\r\n\r\n}\r\n","export class ServicePrincipal {\r\n public id: string;\r\n public secret: string;\r\n public expiresAt: Date;\r\n}\r\n\r\nexport class ServicePrincipalRegistrationStatus {\r\n public id: string;\r\n public isRegistered = false;\r\n public expiresAt: Date;\r\n\r\n constructor(servicePrincipal: ServicePrincipal) {\r\n if (servicePrincipal) {\r\n this.isRegistered = true;\r\n this.id = servicePrincipal.id;\r\n this.expiresAt = servicePrincipal.expiresAt;\r\n }\r\n }\r\n\r\n public get isExpired() {\r\n return false;\r\n }\r\n}\r\n","import {\r\n AuthorizationRequest,\r\n TokenResponse,\r\n Crypto,\r\n RedirectRequestHandler,\r\n BasicQueryStringUtils,\r\n LocalStorageBackend,\r\n AppAuthError\r\n} from '@openid/appauth';\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { App } from '@capacitor/app';\r\nimport { Browser } from '@capacitor/browser';\r\nimport { Device } from '@capacitor/device';\r\nimport { NucleusCrypto } from './utils/nucleus-crypto';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { LocationService } from './utils/location.service';\r\nimport { AuthorizationRequestHandler } from '@openid/appauth';\r\nimport { NucleusAuthorizationNotifier } from './utils/nucleus-authorization-notifier';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { OtpResponse, OtpStatus, OtpType } from './models/otp';\r\nimport { SecretsStore } from './utils/secrets-store';\r\nimport { OidcConfigurationService } from './utils/oidc-configuration.service';\r\nimport { TokenClient } from './utils/token-client';\r\nimport { DeviceCode } from './models/device-code';\r\nimport { ServicePrincipalRegistrationStatus } from './models/service-principal';\r\nimport { lastValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NucleusIdentityService {\r\n constructor(\r\n private appService: NucleusAppService,\r\n location: LocationService,\r\n private http: HttpClient,\r\n private config: OidcConfigurationService,\r\n private tokenClient: TokenClient\r\n ) {\r\n const storage = new LocalStorageBackend();\r\n this._crypto = new NucleusCrypto();\r\n this._authorizationHandler = new RedirectRequestHandler(storage, new BasicQueryStringUtils(), location, this._crypto);\r\n this._authorizationHandler.setAuthorizationNotifier(this._authorizationNotifier);\r\n this._store = new SecretsStore(config.clientId);\r\n }\r\n\r\n private _authorizationHandler: AuthorizationRequestHandler;\r\n private _authorizationNotifier = new NucleusAuthorizationNotifier();\r\n private _crypto: Crypto;\r\n private _initStarted = false;\r\n private _initialized = false;\r\n private _refreshTokenPromise: Promise<TokenResponse>;\r\n private _getTokenPromise: Promise<string>;\r\n private _getServicePrincipalTokenPromise: Promise<string>;\r\n private _servicePrincipalTokenId = '_svcp';\r\n private _store: SecretsStore;\r\n\r\n public get identity() {\r\n return this._store.getIdentity();\r\n }\r\n\r\n public get isAuthenticated() {\r\n return this.identity != null;\r\n }\r\n\r\n public get servicePrincipalIdentity() {\r\n return this._store.getIdentity(this._servicePrincipalTokenId);\r\n }\r\n\r\n public get isServicePrincipalAuthenticated() {\r\n return this.servicePrincipalIdentity != null;\r\n }\r\n\r\n public async init(startLogin: boolean = false): Promise<void> {\r\n if (this._initStarted || this._initialized) {\r\n console.warn('Nucleus.Identity: Auth initialization was already started. Don\\'t call init() multiple times!');\r\n return;\r\n }\r\n this._initStarted = true;\r\n\r\n this.handleLaunchCodeHash();\r\n await this._authorizationHandler.completeAuthorizationRequestIfPossible();\r\n\r\n const authErr = this._authorizationNotifier.error;\r\n if (authErr) {\r\n throw new Error('Authorization err: ' + authErr.error + ': ' + authErr.errorDescription);\r\n } else if (this._authorizationNotifier.response) {\r\n window.location.hash = '';\r\n const request = this._authorizationNotifier.request;\r\n const response = this._authorizationNotifier.response;\r\n const res = await this.tokenClient.getByAuthorizationCode(request.redirectUri, response.code, request.internal['code_verifier']);\r\n this._store.setDefaultIdentityId(null);\r\n await this._store.setToken(res);\r\n } else {\r\n const res = await this._store.getToken();\r\n if (!res && startLogin) {\r\n await this.login();\r\n }\r\n }\r\n this._initialized = true;\r\n }\r\n\r\n public async loginWithSecret(provider: string, secret: string): Promise<void> {\r\n this._store.removeToken();\r\n const assertionToken = await this.getServicePrincipalAccessToken();\r\n const scope = this.prepareScope(true, this.config?.requestedScopes);\r\n const res = await this.tokenClient.getBySecret(provider, secret, assertionToken, scope);\r\n this._store.setDefaultIdentityId(null);\r\n await this._store.setToken(res);\r\n }\r\n\r\n public async login(): Promise<void> {\r\n this._store.removeToken();\r\n const config = await this.config.getConfiguration();\r\n const request = this.prepareAuthorizationRequest();\r\n if (this.appService.isNative) {\r\n const listener = App.addListener('appUrlOpen', data => {\r\n if (this.appService.platform === 'ios') {\r\n Browser.close();\r\n }\r\n listener.remove();\r\n const hash = this.getCodeHash(data.url);\r\n if (hash) {\r\n const targetUrl = window.location.origin + window.location.pathname + '#' + hash;\r\n window.location.assign(targetUrl);\r\n window.location.reload();\r\n } else {\r\n console.warn('Nucleus.Identity: Redirect url did not contain authorization code!', data);\r\n }\r\n });\r\n }\r\n this._authorizationHandler.performAuthorizationRequest(config, request);\r\n }\r\n\r\n public async logout(): Promise<void> {\r\n this._store.removeToken();\r\n const config = await this.config.getConfiguration();\r\n const redirectUrl = this.config.redirectUrl;\r\n const logoutUrl = config.endSessionEndpoint + '?post_logout_redirect_uri=' + encodeURI(redirectUrl);\r\n if (this.appService.isNative) {\r\n const listener = App.addListener('appUrlOpen', () => {\r\n Device.getInfo().then(info => {\r\n if (info.platform === 'ios') {\r\n Browser.close();\r\n }\r\n });\r\n listener.remove();\r\n });\r\n Browser.open({ url: logoutUrl });\r\n } else {\r\n window.location.assign(logoutUrl);\r\n }\r\n }\r\n\r\n public async getAccessToken() {\r\n if (!this._getTokenPromise) {\r\n this._getTokenPromise = this.getAccessTokenInternal();\r\n }\r\n try {\r\n return await this._getTokenPromise;\r\n } finally {\r\n this._getTokenPromise = null;\r\n }\r\n }\r\n\r\n public async getServicePrincipalAccessToken() {\r\n if (!this._getServicePrincipalTokenPromise) {\r\n this._getServicePrincipalTokenPromise = this.getServicePrincipalAccessTokenInternal();\r\n }\r\n try {\r\n return await this._getServicePrincipalTokenPromise;\r\n } finally {\r\n this._getServicePrincipalTokenPromise = null;\r\n }\r\n }\r\n\r\n public async loginServicePrincipal() {\r\n const sp = await this._store.getServicePrincipal();\r\n if (sp) {\r\n const scope = this.prepareScope(false, this.config.servicePrincipalRequestedScopes);\r\n const res = await this.tokenClient.getByClientCredentials(sp.id, sp.secret, scope);\r\n await this._store.setToken(res, this._servicePrincipalTokenId);\r\n return res;\r\n } else {\r\n throw Error('Service principal is not registered!');\r\n }\r\n }\r\n\r\n public async loginAsServicePrincipal() {\r\n const token = await this._store.getToken(this._servicePrincipalTokenId);\r\n if (!token) {\r\n await this.loginServicePrincipal();\r\n }\r\n this._store.setDefaultIdentityId(this._servicePrincipalTokenId);\r\n }\r\n\r\n public async getOtp(type: OtpType, expiresIn: number = -1) {\r\n let url = this.config.getServerUrl(`/otp/create?type=${type}`);\r\n if (expiresIn > 0) {\r\n url += `&expiresIn=${expiresIn}`;\r\n }\r\n return lastValueFrom(this.http.get<OtpResponse>(url));\r\n }\r\n\r\n public async getOtpStatus(id: string) {\r\n const url = this.config.getServerUrl(`/otp/status/${id}`);\r\n return lastValueFrom(this.http.get<OtpStatus>(url));\r\n }\r\n\r\n public getOtpUrl(redirectUrl: string, password: string) {\r\n const encoded = encodeURIComponent(redirectUrl);\r\n const url = `/otp/auth?otpValue=${password}&returnUrl=${encoded}`;\r\n return this.config.getServerUrl(url);\r\n }\r\n\r\n public async startServicePrincipalRegistration() {\r\n const sp = await this._store.getServicePrincipal();\r\n return await this.tokenClient.getRegistrationCode(sp?.id);\r\n }\r\n\r\n public async completeServicePrincipalRegistration(deviceCode: DeviceCode) {\r\n const tokenRes = await this.waitForDeviceToken(deviceCode);\r\n const regRes = await this.tokenClient.registerServicePrincipal(tokenRes.accessToken);\r\n\r\n await this._store.setServicePrincipal({\r\n id: regRes.clientId,\r\n secret: regRes.clientSecret,\r\n expiresAt: regRes.secretExpirationDate\r\n });\r\n }\r\n\r\n public removeServicePrincipalRegistration() {\r\n return this._store.removeServicePrincipal();\r\n }\r\n\r\n public async getServicePrincipalRegistrationStatus() {\r\n const sp = await this._store.getServicePrincipal();\r\n return new ServicePrincipalRegistrationStatus(sp);\r\n }\r\n\r\n public async startDeviceCodeLogin() {\r\n const scope = this.prepareScope(true, this.config.requestedScopes);\r\n return await this.tokenClient.getDeviceCode(scope);\r\n }\r\n\r\n public async completeDeviceCodeLogin(deviceCode: DeviceCode) {\r\n const res = await this.waitForDeviceToken(deviceCode);\r\n await this._store.setToken(res);\r\n }\r\n\r\n private async waitForDeviceToken(deviceCode: DeviceCode) {\r\n let res: TokenResponse = null;\r\n do {\r\n if (deviceCode.isExpired()) {\r\n throw Error('Device code is expired!');\r\n }\r\n\r\n try {\r\n res = await this.tokenClient.getByDeviceCode(deviceCode.deviceCode);\r\n } catch (error) {\r\n if (error instanceof AppAuthError && error.message === 'authorization_pending') {\r\n await this.delay(2000);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n } while (!res);\r\n return res;\r\n }\r\n\r\n private prepareAuthorizationRequest(): AuthorizationRequest {\r\n const redirectUri = this.config.redirectUrl;\r\n\r\n const params = {\r\n response_mode: 'fragment',\r\n prompt: 'consent',\r\n access_type: 'offline',\r\n auth_provider_hint: this.config.authProviderHint\r\n };\r\n\r\n return new AuthorizationRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: redirectUri,\r\n response_type: AuthorizationRequest.RESPONSE_TYPE_CODE,\r\n scope: this.prepareScope(true, this.config.requestedScopes),\r\n extras: params,\r\n }, this._crypto, true);\r\n }\r\n\r\n private async getServicePrincipalAccessTokenInternal() {\r\n let token = await this._store.getToken(this._servicePrincipalTokenId);\r\n if (!token?.isValid()) {\r\n token = await this.loginServicePrincipal();\r\n }\r\n return token?.accessToken;\r\n }\r\n\r\n private async getAccessTokenInternal() {\r\n let token = await this._store.getToken();\r\n if (token && !token.isValid()) {\r\n token = await this.loginWithRefreshToken(token);\r\n }\r\n return token?.accessToken;\r\n }\r\n\r\n private async loginWithRefreshToken(token: TokenResponse) {\r\n if (!this._refreshTokenPromise) {\r\n this._refreshTokenPromise = this.loginWithRefreshTokenInternal(token);\r\n }\r\n try {\r\n return await this._refreshTokenPromise;\r\n } finally {\r\n this._refreshTokenPromise = null;\r\n }\r\n }\r\n\r\n private async loginWithRefreshTokenInternal(token: TokenResponse) {\r\n if (token?.refreshToken) {\r\n try {\r\n const res = await this.tokenClient.getByRefreshToken(token.refreshToken);\r\n await this._store.setToken(res);\r\n return res;\r\n } catch (err) {\r\n console.warn('Nucleus.Identity: Failed to login with refresh token.', err);\r\n if (err.message === 'invalid_grant') {\r\n await this.logout();\r\n }\r\n }\r\n } else {\r\n console.warn('Nucleus.Identity: There is no refresh token available.');\r\n }\r\n }\r\n\r\n private getCodeHash(url: string) {\r\n const arr = url.split('#');\r\n if (arr.length > 1) {\r\n const hash = arr[1];\r\n if (hash.startsWith('code=')) {\r\n return hash;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private handleLaunchCodeHash() {\r\n if (this.appService.isNative && this.appService.launchUrl) {\r\n const hash = this.getCodeHash(this.appService.launchUrl);\r\n if (hash) {\r\n console.log('Nucleus.Identity: Got authorization code from launchUrl, will assign it to hash.');\r\n window.location.hash = '#' + hash;\r\n }\r\n }\r\n }\r\n\r\n private prepareScope(offlineAccess: boolean, aditionalScope: string) {\r\n let scope = 'openid';\r\n if (offlineAccess) {\r\n scope += ' offline_access';\r\n }\r\n if (scope) {\r\n scope += ' ' + aditionalScope;\r\n }\r\n return scope;\r\n }\r\n\r\n private delay(miliseconds: number) {\r\n return new Promise<void>(resolve => {\r\n setTimeout(() => {\r\n resolve();\r\n }, miliseconds);\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, from, throwError } from 'rxjs';\r\nimport { NucleusIdentityConfig } from './nucleus-identity-config';\r\nimport { NucleusIdentityService } from './nucleus-identity.service';\r\nimport { mergeMap, catchError } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NucleusTokenInterceptor implements HttpInterceptor {\r\n constructor(private auth: NucleusIdentityService, private config: NucleusIdentityConfig\r\n ) {\r\n this._authority = config.authority.toLowerCase();\r\n this._interceptUrls = config.httpInterceptorUrls?.map(x => x.toLowerCase());\r\n }\r\n\r\n private _authority: string;\r\n private _authorityInterceptPaths = ['/api', '/manage', '/otp/create', '/otp/status'];\r\n private _interceptUrls: string[];\r\n\r\n public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (this.shouldIntercept(req.url)) {\r\n const res = this.authorizeRequest(this.auth.getAccessToken(), req, next);\r\n return this.checkUnauthorized(res);\r\n }\r\n return next.handle(req);\r\n }\r\n\r\n private shouldIntercept(url: string): boolean {\r\n url = url.toLowerCase();\r\n\r\n if (url.startsWith(this._authority)) {\r\n const pathname = new URL(url).pathname;\r\n return (this._authorityInterceptPaths.some(x => pathname.startsWith(x)));\r\n }\r\n\r\n if (this._interceptUrls?.length > 0) {\r\n return this.config.httpInterceptorUrls.some(x => url.startsWith(x));\r\n }\r\n return false;\r\n }\r\n\r\n private authorizeRequest(getToken: Promise<string>, req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return from(getToken).pipe(\r\n mergeMap(token => {\r\n if (token) {\r\n const headers = req.headers.set('Authorization', `Bearer ${token}`);\r\n req = req.clone({ headers });\r\n }\r\n return next.handle(req);\r\n })\r\n );\r\n }\r\n\r\n private checkUnauthorized(response: Observable<HttpEvent<any>>): Observable<HttpEvent<any>> {\r\n return response.pipe(\r\n catchError((err) => {\r\n if (err instanceof HttpErrorResponse && err.status === 401) {\r\n if (this.config.automaticLoginOnHttp401) {\r\n this.auth.login();\r\n }\r\n }\r\n return throwError(err);\r\n })\r\n );\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { NucleusTokenInterceptor } from './nucleus-token-interceptor.service';\r\nimport { NucleusIdentityConfig } from './nucleus-identity-config';\r\n\r\n@NgModule({\r\n imports: [\r\n ],\r\n declarations: [\r\n ],\r\n exports: [\r\n ]\r\n})\r\n\r\nexport class NucleusIdentityModule {\r\n\r\n static forRoot(config: NucleusIdentityConfig): ModuleWithProviders<NucleusIdentityModule> {\r\n return {\r\n ngModule: NucleusIdentityModule,\r\n providers: [\r\n { provide: NucleusIdentityConfig, useValue: config },\r\n { provide: HTTP_INTERCEPTORS, useClass: NucleusTokenInterceptor, multi: true },\r\n ]\r\n };\r\n }\r\n}\r\n","export class OtpResponse {\r\n public password: string;\r\n public passwordId: string;\r\n}\r\n\r\nexport class OtpStatus {\r\n public isExpired: boolean;\r\n public isUsed: boolean;\r\n public secondsToExpiration: number;\r\n}\r\n\r\nexport enum OtpType {\r\n SimpleNumbers = 0,\r\n SimpleAlfanumeric = 1,\r\n Complex = 2\r\n}\r\n","/*\r\n * Public API Surface of nucleus-identity\r\n */\r\n\r\nexport * from './lib/nucleus-identity.module';\r\nexport * from './lib/nucleus-identity.service';\r\nexport * from './lib/nucleus-identity-config';\r\nexport { OtpResponse, OtpStatus, OtpType } from './lib/models/otp';\r\nexport { DeviceCode } from './lib/models/device-code';\r\nexport { Identity } from './lib/models/identity';\r\nexport { ServicePrincipalRegistrationStatus } from './lib/models/service-principal';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kolektor-nucleus-identity.mjs","sources":["../../../projects/nucleus-identity/src/lib/nucleus-identity-config.ts","../../../projects/nucleus-identity/src/lib/utils/nucleus-crypto.ts","../../../projects/nucleus-identity/src/lib/utils/location.service.ts","../../../projects/nucleus-identity/src/lib/utils/nucleus-authorization-notifier.ts","../../../projects/nucleus-identity/src/lib/models/identity.ts","../../../projects/nucleus-identity/src/lib/utils/secrets-store.ts","../../../projects/nucleus-identity/src/lib/utils/angular-requestor.ts","../../../projects/nucleus-identity/src/lib/utils/authorization-service-configuration.ts","../../../projects/nucleus-identity/src/lib/utils/oidc-configuration.service.ts","../../../projects/nucleus-identity/src/lib/models/device-code.ts","../../../projects/nucleus-identity/src/lib/models/client-registration.ts","../../../projects/nucleus-identity/src/lib/utils/token-client.ts","../../../projects/nucleus-identity/src/lib/models/service-principal.ts","../../../projects/nucleus-identity/src/lib/nucleus-identity.service.ts","../../../projects/nucleus-identity/src/lib/nucleus-token-interceptor.service.ts","../../../projects/nucleus-identity/src/lib/nucleus-identity.module.ts","../../../projects/nucleus-identity/src/lib/models/otp.ts","../../../projects/nucleus-identity/src/public-api.ts","../../../projects/nucleus-identity/src/kolektor-nucleus-identity.ts"],"sourcesContent":["export class NucleusIdentityConfig {\r\n public authority: string = null;\r\n\r\n public clientId: string;\r\n\r\n public redirectUri?: string;\r\n\r\n public androidRedirectUri?: string;\r\n\r\n public iOSRedirectUri?: string;\r\n\r\n public httpInterceptorUrls?: string[] = [];\r\n\r\n public automaticLoginOnHttp401 = false;\r\n\r\n public requestedScopes?: string;\r\n\r\n public servicePrincipalRequestedScopes?: string;\r\n\r\n public authProviderHint?: string;\r\n}\r\n","// It also supports IE with window.msCrypto !!!!!!\r\nimport { Crypto } from '@openid/appauth';\r\nimport { AppAuthError } from '@openid/appauth';\r\nimport * as base64 from 'base64-js';\r\n\r\nconst CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n\r\nexport class NucleusCrypto implements Crypto {\r\n private browserCrypto = window.crypto || (window as any).msCrypto;\r\n\r\n generateRandom(size: number) {\r\n const buffer = new Uint8Array(size);\r\n if (this.browserCrypto) {\r\n this.browserCrypto.getRandomValues(buffer);\r\n } else {\r\n // fall back to Math.random() if nothing else is available\r\n for (let i = 0; i < size; i += 1) {\r\n buffer[i] = Math.random();\r\n }\r\n }\r\n return this.bufferToString(buffer);\r\n }\r\n\r\n deriveChallenge(code: string): Promise<string> {\r\n if (code.length < 43 || code.length > 128) {\r\n return Promise.reject(new AppAuthError('Invalid code length.'));\r\n }\r\n if (!this.browserCrypto.subtle) {\r\n return Promise.reject(new AppAuthError('window.crypto.subtle is unavailable.'));\r\n }\r\n\r\n const ecode = this.textEncodeLite(code);\r\n const op = this.browserCrypto.subtle.digest('SHA-256', ecode);\r\n return new Promise((resolve, reject) => {\r\n // if operation contains algorithm it means it is not a promise which means it is CryptoOperation from IE.\r\n // We just return result as promise\r\n if (op.algorithm) {\r\n console.log('we have a CryptoOperation');\r\n op.addEventListener('complete', () => {\r\n resolve(this.urlSafe(op.result));\r\n });\r\n\r\n op.addEventListener('error', () => {\r\n reject(op.result);\r\n });\r\n } else { // the result is promise\r\n op.then(buffer => resolve(this.urlSafe(buffer)), error => reject(error));\r\n }\r\n });\r\n }\r\n\r\n\r\n private urlSafe(buffer: Uint8Array): string {\r\n const encoded = base64.fromByteArray(new Uint8Array(buffer));\r\n return encoded.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\r\n }\r\n\r\n private textEncodeLite(str: string) {\r\n const buf = new ArrayBuffer(str.length);\r\n const bufView = new Uint8Array(buf);\r\n\r\n for (let i = 0; i < str.length; i++) {\r\n bufView[i] = str.charCodeAt(i);\r\n }\r\n return bufView;\r\n }\r\n\r\n private bufferToString(buffer: Uint8Array) {\r\n const state = [];\r\n for (let i = 0; i < buffer.byteLength; i += 1) {\r\n const index = buffer[i] % CHARSET.length;\r\n state.push(CHARSET[index]);\r\n }\r\n return state.join('');\r\n }\r\n}\r\n","import { LocationLike } from '@openid/appauth';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { Browser } from '@capacitor/browser';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocationService implements LocationLike {\r\n constructor(private appService: NucleusAppService) {\r\n }\r\n\r\n get hash() {\r\n return window.location.hash;\r\n }\r\n set hash(v) {\r\n window.location.hash = v;\r\n }\r\n\r\n get host() {\r\n return window.location.host;\r\n }\r\n set host(v) {\r\n window.location.host = v;\r\n }\r\n\r\n get origin() {\r\n return window.location.origin;\r\n }\r\n\r\n get hostname() {\r\n return window.location.hostname;\r\n }\r\n set hostname(v) {\r\n window.location.hostname = v;\r\n }\r\n\r\n get pathname() {\r\n return window.location.pathname;\r\n }\r\n set pathname(v) {\r\n window.location.pathname = v;\r\n }\r\n\r\n get port() {\r\n return window.location.port;\r\n }\r\n set port(v) {\r\n window.location.port = v;\r\n }\r\n\r\n get protocol() {\r\n return window.location.protocol;\r\n }\r\n set protocol(v) {\r\n window.location.protocol = v;\r\n }\r\n\r\n get search() {\r\n return window.location.search;\r\n }\r\n set search(v) {\r\n window.location.search = v;\r\n }\r\n\r\n assign(url: string): void {\r\n if (this.appService.isNative) {\r\n Browser.open({ url });\r\n } else {\r\n window.location.assign(url);\r\n }\r\n }\r\n}\r\n","import { AuthorizationNotifier } from '@openid/appauth';\r\nimport { AuthorizationResponse, AuthorizationError } from '@openid/appauth';\r\nimport { AuthorizationRequest } from '@openid/appauth';\r\n\r\nexport class NucleusAuthorizationNotifier extends AuthorizationNotifier {\r\n response: AuthorizationResponse;\r\n request: AuthorizationRequest;\r\n error: AuthorizationError;\r\n\r\n constructor() {\r\n super();\r\n this.setAuthorizationListener((request, response, error) => {\r\n console.log('Authorization request complete ', request, response, error);\r\n this.response = response;\r\n this.request = request;\r\n this.error = error;\r\n });\r\n }\r\n}\r\n","import { TokenResponse } from '@openid/appauth';\r\n\r\nexport class Claim {\r\n public name: string;\r\n public values: string[];\r\n\r\n constructor(name: string, values: string[]) {\r\n this.name = name;\r\n this.values = values;\r\n }\r\n}\r\n\r\nexport class Identity {\r\n public name: string;\r\n public subject: string;\r\n\r\n public claims: Claim[] = [];\r\n\r\n public static createFromResponse(res: TokenResponse): Identity {\r\n const token = this.decodeToken(res.idToken);\r\n const id = new Identity();\r\n id.name = token.name;\r\n id.subject = token.sub;\r\n for (const key in token) {\r\n if ({}.hasOwnProperty.call(token, key)) {\r\n let vals = token[key];\r\n\r\n if (!Array.isArray(vals)) {\r\n vals = [vals];\r\n }\r\n\r\n const claim = new Claim(key, vals);\r\n id.claims.push(claim);\r\n }\r\n }\r\n return id;\r\n }\r\n\r\n private static decodeToken(jwt: string): any {\r\n if (!jwt) {\r\n throw new Error('NucleusIdentity: There was no identity token in the response!');\r\n }\r\n\r\n try {\r\n const arr = jwt.split('.');\r\n // var header = arr[0];\r\n const payload = this.b64DecodeUnicode(arr[1]);\r\n // var signature = arr[2];\r\n return JSON.parse(payload);\r\n } catch (error) {\r\n console.error('Error while decoding identity token', error);\r\n console.error('Error while decoding identity token JWT', jwt);\r\n }\r\n }\r\n\r\n private static b64DecodeUnicode(str: string) {\r\n str = str.replace(/-/g, '+').replace(/_/g, '/'); // Qlector fix :)\r\n return decodeURIComponent(atob(str).split('').map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)).join(''));\r\n }\r\n}\r\n","import 'capacitor-secure-storage-plugin';\r\nimport { TokenResponse, TokenResponseJson } from '@openid/appauth';\r\nimport { Identity } from '../models/identity';\r\nimport { ServicePrincipal } from '../models/service-principal';\r\nimport { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';\r\n\r\nexport class SecretsStore {\r\n constructor(clientId: string) {\r\n this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login with existing tokens will fail\r\n this._servicePrincipalKey = `${this._tokenStorageKeyPrefix}.SvcP`;\r\n this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;\r\n this._defaultIdentityId = localStorage.getItem(this._defaultIdentityIdStorageKey);\r\n }\r\n private _tokenStorageKeyPrefix: string;\r\n private _tokens: { [id: string]: TokenResponse } = {};\r\n private _identities: { [id: string]: Identity } = {};\r\n private _servicePrincipalKey;\r\n private _servicePrincipal: ServicePrincipal;\r\n // this specify which identity id is used by default, when If id is not specified in getToken or getIdentity\r\n private _defaultIdentityId: string = null;\r\n private _defaultIdentityIdStorageKey: string = null;\r\n\r\n public get defaultIdentityId() {\r\n return this._defaultIdentityId;\r\n }\r\n\r\n public removeServicePrincipal() {\r\n this._servicePrincipal = null;\r\n return this.clear(this._servicePrincipalKey);\r\n }\r\n\r\n public async setServicePrincipal(servicePrincipal: ServicePrincipal) {\r\n this._servicePrincipal = servicePrincipal;\r\n await this.save(this._servicePrincipalKey, servicePrincipal);\r\n }\r\n\r\n public async getServicePrincipal() {\r\n if (!this._servicePrincipal) {\r\n this._servicePrincipal = await this.load<ServicePrincipal>(this._servicePrincipalKey);\r\n }\r\n return this._servicePrincipal;\r\n }\r\n\r\n public setToken(token: TokenResponse, id: string = null) {\r\n return this.setTokenInternal(token, true, id);\r\n }\r\n\r\n public getIdentity(id: string = null) {\r\n const key = this.getTokenKey(id);\r\n return this._identities[key];\r\n }\r\n\r\n public setDefaultIdentityId(id: string) {\r\n this._defaultIdentityId = id;\r\n if (this._defaultIdentityId) {\r\n localStorage.setItem(this._defaultIdentityIdStorageKey, this._defaultIdentityId);\r\n } else {\r\n localStorage.removeItem(this._defaultIdentityIdStorageKey);\r\n }\r\n }\r\n\r\n public async getToken(id: string = null) {\r\n const key = this.getTokenKey(id);\r\n\r\n // if token is not there or it is invalid we check storage again before returning\r\n if (!this._tokens[key] || !this._tokens[key].isValid()) {\r\n await this.reloadTokenFromStorage(id);\r\n }\r\n return this._tokens[key];\r\n }\r\n\r\n public removeToken(id: string = null) {\r\n const key = this.getTokenKey(id);\r\n delete this._tokens[key];\r\n delete this._identities[key];\r\n return this.clear(key);\r\n }\r\n\r\n private async reloadTokenFromStorage(id: string) {\r\n const key = this.getTokenKey(id);\r\n const storedToken = await this.load<TokenResponseJson>(key);\r\n if (storedToken) {\r\n const res = new TokenResponse(storedToken);\r\n if (res?.accessToken || res?.idToken) {\r\n await this.setTokenInternal(res, false, id);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private async setTokenInternal(token: TokenResponse, save: boolean, id: string = null) {\r\n const key = this.getTokenKey(id);\r\n if (token == null) {\r\n await this.removeToken(id);\r\n } else {\r\n this._tokens[key] = token;\r\n this._identities[key] = Identity.createFromResponse(token);\r\n if (save) {\r\n try {\r\n await this.save(key, token.toJson());\r\n } catch (e) {\r\n console.warn('Nucleus.Identity: Could not save to SecureStorage.');\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getTokenKey(id: string = null) {\r\n if (!id) {\r\n id = this._defaultIdentityId;\r\n }\r\n return id ? `${this._tokenStorageKeyPrefix}.${id}` : this._tokenStorageKeyPrefix;\r\n }\r\n\r\n private clear(key: string) {\r\n return SecureStoragePlugin.remove({ key });\r\n }\r\n\r\n private save<T>(key: string, value: T): Promise<{ value: boolean }> {\r\n return SecureStoragePlugin.set({ key, value: JSON.stringify(value) });\r\n }\r\n\r\n private async load<T>(key: string) {\r\n try {\r\n const x = await SecureStoragePlugin.get({ key });\r\n if (x?.value) {\r\n return JSON.parse(x.value) as T;\r\n } else {\r\n return null;\r\n }\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n}\r\n","import { AppAuthError, Requestor } from '@openid/appauth';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AngularRequestor extends Requestor {\r\n\r\n constructor(private http: HttpClient) {\r\n super();\r\n }\r\n\r\n // eslint-disable-next-line no-undef\r\n xhr<T>(settings: JQueryAjaxSettings): Promise<T> {\r\n if (settings.method === undefined) {\r\n settings.method = 'GET';\r\n }\r\n return new Promise<T>((resolve, reject) => {\r\n this.http.request<T>(settings.method, settings.url, {\r\n body: settings.data,\r\n headers: settings.headers,\r\n }).subscribe(res => resolve(res), err => {\r\n let e = new AppAuthError(err);\r\n if (err instanceof HttpErrorResponse) {\r\n e = new AppAuthError(err.error?.error || err.statusText);\r\n }\r\n reject(e);\r\n });\r\n });\r\n }\r\n}\r\n","import { AuthorizationServiceConfiguration, AuthorizationServiceConfigurationJson, JQueryRequestor, Requestor } from '@openid/appauth';\r\n\r\nconst WELL_KNOWN_PATH = '.well-known';\r\nconst OPENID_CONFIGURATION = 'openid-configuration';\r\n\r\nexport interface NucleusAuthorizationServiceConfigurationJson extends AuthorizationServiceConfigurationJson {\r\n device_authorization_endpoint?: string;\r\n registration_endpoint?: string;\r\n}\r\n\r\nexport class NucleusAuthorizationServiceConfiguration extends AuthorizationServiceConfiguration {\r\n\r\n constructor(request: NucleusAuthorizationServiceConfigurationJson) {\r\n super(request);\r\n this.deviceAuthorizationEndpoint = request.device_authorization_endpoint;\r\n this.registrationEndpoint = request.registration_endpoint;\r\n }\r\n\r\n deviceAuthorizationEndpoint: string;\r\n registrationEndpoint: string;\r\n\r\n static fetchFromIssuer(openIdIssuerUrl: string, requestor?: Requestor) {\r\n const fullUrl = `${openIdIssuerUrl}/${WELL_KNOWN_PATH}/${OPENID_CONFIGURATION}`;\r\n const requestorToUse = requestor || new JQueryRequestor();\r\n return requestorToUse\r\n .xhr<NucleusAuthorizationServiceConfigurationJson>({url: fullUrl, dataType: 'json', method: 'GET'})\r\n .then(json => new NucleusAuthorizationServiceConfiguration(json));\r\n }\r\n\r\n toJson() {\r\n const res = super.toJson() as NucleusAuthorizationServiceConfigurationJson;\r\n res.device_authorization_endpoint = this.deviceAuthorizationEndpoint;\r\n return res as any;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { NucleusIdentityConfig } from '../nucleus-identity-config';\r\nimport { AngularRequestor } from './angular-requestor';\r\nimport { NucleusAuthorizationServiceConfiguration } from './authorization-service-configuration';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OidcConfigurationService {\r\n constructor(\r\n private requestor: AngularRequestor,\r\n private config: NucleusIdentityConfig,\r\n private appService: NucleusAppService,\r\n ) {\r\n }\r\n\r\n private _configuration: NucleusAuthorizationServiceConfiguration = null;\r\n\r\n public async getConfiguration() {\r\n await this.assureConfiguration();\r\n return this._configuration;\r\n }\r\n\r\n public get clientId() {\r\n return this.config.clientId;\r\n }\r\n\r\n public get requestedScopes() {\r\n return this.config.requestedScopes;\r\n }\r\n\r\n public get servicePrincipalRequestedScopes() {\r\n return this.config.servicePrincipalRequestedScopes;\r\n }\r\n\r\n public get authProviderHint() {\r\n return this.config.authProviderHint;\r\n }\r\n\r\n public get redirectUrl() {\r\n let uri = window.location.href;\r\n const platform = this.appService.platform;\r\n if (platform === 'android' && this.config.androidRedirectUri) {\r\n uri = this.config.androidRedirectUri;\r\n } else if (platform === 'ios' && this.config.iOSRedirectUri) {\r\n uri = this.config.iOSRedirectUri;\r\n } else if (this.config.redirectUri) {\r\n uri = this.config.redirectUri;\r\n }\r\n return this.NormalizeRedirectUri(uri);\r\n }\r\n\r\n public getServerUrl(relativeUri: string = null) {\r\n let authority = this.config.authority;\r\n if (!authority || authority === 'origin') {\r\n authority = window.origin;\r\n }\r\n\r\n let url = new URL(authority);\r\n\r\n if (relativeUri) {\r\n url = new URL(relativeUri, url);\r\n }\r\n\r\n return url.href;\r\n }\r\n\r\n private NormalizeRedirectUri(uri: string) {\r\n const i = uri.indexOf('#');\r\n if (i > 0) {\r\n uri = uri.substring(0, i);\r\n }\r\n return uri;\r\n }\r\n\r\n private async assureConfiguration() {\r\n if (this._configuration != null) {\r\n return;\r\n }\r\n let authority = this.getServerUrl();\r\n if (authority[authority.length - 1] === '/') {\r\n authority = authority.slice(0, -1);\r\n }\r\n try {\r\n this._configuration = await NucleusAuthorizationServiceConfiguration.fetchFromIssuer(authority, this.requestor);\r\n } catch (e) {\r\n console.error('Nucleus.Identity: Cannot load OIDC configuration: ' + (e as Error).message);\r\n throw e;\r\n }\r\n }\r\n}\r\n","import { nowInSeconds } from '@openid/appauth';\r\n\r\nexport interface DeviceCodeJson {\r\n device_code: string;\r\n user_code: string;\r\n verification_uri: string;\r\n verification_uri_complete: string;\r\n expires_in: string;\r\n message: string;\r\n}\r\n\r\nexport class DeviceCode {\r\n constructor(response: DeviceCodeJson) {\r\n this.deviceCode = response.device_code;\r\n this.userCode = response.user_code;\r\n this.verificationUrl = response.verification_uri;\r\n this.verificationUrlComplete = response.verification_uri_complete;\r\n this.expiresIn = parseInt(response.expires_in, 10);\r\n this.issuedAt = nowInSeconds();\r\n }\r\n\r\n private expiresIn: number;\r\n private issuedAt: number;\r\n\r\n public deviceCode: string;\r\n public userCode: string;\r\n public verificationUrl: string;\r\n public verificationUrlComplete: string;\r\n\r\n isExpired(buffer: number = 60) {\r\n\r\n return this.secondsLeft(buffer) <= 0;\r\n }\r\n\r\n secondsLeft(buffer: number = 60) {\r\n const now = nowInSeconds();\r\n return (this.issuedAt + this.expiresIn - buffer) - now;\r\n }\r\n}\r\n","export interface ClientRegistrationResponseJson {\r\n client_id: string;\r\n client_secret: string;\r\n client_secret_expires_at: number;\r\n}\r\n\r\nexport class ClientRegistrationResponse {\r\n constructor(response: ClientRegistrationResponseJson) {\r\n this.clientId = response.client_id;\r\n this.clientSecret = response.client_secret;\r\n this.secretExpirationDate = new Date(response.client_secret_expires_at * 1000);\r\n }\r\n\r\n clientId: string;\r\n clientSecret: string;\r\n secretExpirationDate: Date;\r\n}\r\n","import {\r\n AppAuthError,\r\n BaseTokenRequestHandler,\r\n BasicQueryStringUtils,\r\n GRANT_TYPE_AUTHORIZATION_CODE,\r\n GRANT_TYPE_REFRESH_TOKEN,\r\n QueryStringUtils,\r\n StringMap,\r\n TokenErrorJson,\r\n TokenRequest,\r\n TokenRequestHandler} from '@openid/appauth';\r\nimport { OidcConfigurationService } from './oidc-configuration.service';\r\nimport { AngularRequestor } from './angular-requestor';\r\nimport { Injectable } from '@angular/core';\r\nimport { DeviceCode, DeviceCodeJson } from '../models/device-code';\r\nimport { ClientRegistrationResponse, ClientRegistrationResponseJson } from '../models/client-registration';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TokenClient {\r\n constructor(\r\n private requestor: AngularRequestor,\r\n private config: OidcConfigurationService\r\n ) {\r\n this._tokenHandler = new BaseTokenRequestHandler(requestor);\r\n this._utils = new BasicQueryStringUtils();\r\n }\r\n\r\n private _tokenHandler: TokenRequestHandler;\r\n private _utils: QueryStringUtils;\r\n\r\n public async getByAuthorizationCode(redirectUrl: string, code: string, codeVerifier: string) {\r\n const config = await this.config.getConfiguration();\r\n const redirectUri = redirectUrl;\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: redirectUri,\r\n grant_type: GRANT_TYPE_AUTHORIZATION_CODE,\r\n code,\r\n extras: { code_verifier: codeVerifier }\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getByRefreshToken(refreshToken: string) {\r\n const config = await this.config.getConfiguration();\r\n const redirectUri = this.config.redirectUrl;\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: redirectUri,\r\n grant_type: GRANT_TYPE_REFRESH_TOKEN,\r\n refresh_token: refreshToken\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getByClientCredentials(clientId: string, clientSecret: string, scope: string) {\r\n const config = await this.config.getConfiguration();\r\n const req = new TokenRequest({\r\n client_id: clientId,\r\n redirect_uri: null,\r\n grant_type: 'client_credentials',\r\n extras: {\r\n client_secret: clientSecret,\r\n scope,\r\n }\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getBySecret(provider: string, secret: string, assertionToken: string, scope: string) {\r\n const config = await this.config.getConfiguration();\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: null,\r\n grant_type: 'urn:kolektor:nucleus:secret',\r\n extras: {\r\n secret_provider: provider,\r\n secret_value: secret,\r\n client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',\r\n client_assertion: assertionToken,\r\n scope,\r\n }\r\n });\r\n\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async getByDeviceCode(deviceCode: string) {\r\n const config = await this.config.getConfiguration();\r\n const req = new TokenRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: null,\r\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\r\n extras: {\r\n device_code: deviceCode\r\n }\r\n });\r\n return await this._tokenHandler.performTokenRequest(config, req);\r\n }\r\n\r\n public async registerServicePrincipal(token: string) {\r\n const config = await this.config.getConfiguration();\r\n\r\n const response = await this.requestor.xhr<ClientRegistrationResponseJson | TokenErrorJson>({\r\n url: config.registrationEndpoint,\r\n method: 'POST',\r\n dataType: 'json',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${token}`\r\n }\r\n // data: this._utils.stringify(map)\r\n });\r\n\r\n if ((response as TokenErrorJson).error === undefined) {\r\n return new ClientRegistrationResponse(response as ClientRegistrationResponseJson);\r\n } else {\r\n throw new AppAuthError((response as TokenErrorJson).error);\r\n }\r\n }\r\n\r\n public async getRegistrationCode(existingServicePrincipalId: string = null) {\r\n const params = {\r\n custom_action: 'sp_register',\r\n service_principal_id: existingServicePrincipalId\r\n };\r\n return this.getDeviceCodeInternal(params);\r\n }\r\n\r\n public async getDeviceCode(scope: string) {\r\n const params = {\r\n scope,\r\n };\r\n return this.getDeviceCodeInternal(params);\r\n }\r\n\r\n private async getDeviceCodeInternal(params: StringMap) {\r\n const config = await this.config.getConfiguration();\r\n\r\n params['client_id'] = this.config.clientId;\r\n const map: StringMap = params;\r\n\r\n const response = await this.requestor.xhr<DeviceCodeJson | TokenErrorJson>({\r\n url: config.deviceAuthorizationEndpoint,\r\n method: 'POST',\r\n dataType: 'json',\r\n headers: {'Content-Type': 'application/x-www-form-urlencoded'},\r\n data: this._utils.stringify(map)\r\n });\r\n\r\n if ((response as TokenErrorJson).error === undefined) {\r\n return new DeviceCode(response as DeviceCodeJson);\r\n } else {\r\n throw new AppAuthError((response as TokenErrorJson).error);\r\n }\r\n }\r\n\r\n\r\n}\r\n","export class ServicePrincipal {\r\n public id: string;\r\n public secret: string;\r\n public expiresAt: Date;\r\n}\r\n\r\nexport class ServicePrincipalRegistrationStatus {\r\n public id: string;\r\n public isRegistered = false;\r\n public expiresAt: Date;\r\n\r\n constructor(servicePrincipal: ServicePrincipal) {\r\n if (servicePrincipal) {\r\n this.isRegistered = true;\r\n this.id = servicePrincipal.id;\r\n this.expiresAt = servicePrincipal.expiresAt;\r\n }\r\n }\r\n\r\n public get isExpired() {\r\n return false;\r\n }\r\n}\r\n","import {\r\n AuthorizationRequest,\r\n TokenResponse,\r\n Crypto,\r\n RedirectRequestHandler,\r\n BasicQueryStringUtils,\r\n LocalStorageBackend,\r\n AppAuthError\r\n} from '@openid/appauth';\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { App } from '@capacitor/app';\r\nimport { Browser } from '@capacitor/browser';\r\nimport { Device } from '@capacitor/device';\r\nimport { NucleusCrypto } from './utils/nucleus-crypto';\r\nimport { NucleusAppService } from '@kolektor/nucleus-common';\r\nimport { LocationService } from './utils/location.service';\r\nimport { AuthorizationRequestHandler } from '@openid/appauth';\r\nimport { NucleusAuthorizationNotifier } from './utils/nucleus-authorization-notifier';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { OtpResponse, OtpStatus, OtpType } from './models/otp';\r\nimport { SecretsStore } from './utils/secrets-store';\r\nimport { OidcConfigurationService } from './utils/oidc-configuration.service';\r\nimport { TokenClient } from './utils/token-client';\r\nimport { DeviceCode } from './models/device-code';\r\nimport { ServicePrincipalRegistrationStatus } from './models/service-principal';\r\nimport { lastValueFrom } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NucleusIdentityService {\r\n constructor(\r\n private appService: NucleusAppService,\r\n location: LocationService,\r\n private http: HttpClient,\r\n private config: OidcConfigurationService,\r\n private tokenClient: TokenClient\r\n ) {\r\n const storage = new LocalStorageBackend();\r\n this._crypto = new NucleusCrypto();\r\n this._authorizationHandler = new RedirectRequestHandler(storage, new BasicQueryStringUtils(), location, this._crypto);\r\n this._authorizationHandler.setAuthorizationNotifier(this._authorizationNotifier);\r\n this._store = new SecretsStore(config.clientId);\r\n }\r\n\r\n private _authorizationHandler: AuthorizationRequestHandler;\r\n private _authorizationNotifier = new NucleusAuthorizationNotifier();\r\n private _crypto: Crypto;\r\n private _initStarted = false;\r\n private _initialized = false;\r\n private _refreshTokenPromise: Promise<TokenResponse>;\r\n private _getTokenPromise: Promise<string>;\r\n private _getServicePrincipalTokenPromise: Promise<string>;\r\n private _servicePrincipalTokenId = '_svcp';\r\n private _store: SecretsStore;\r\n\r\n public get identity() {\r\n return this._store.getIdentity();\r\n }\r\n\r\n public get isAuthenticated() {\r\n return this.identity != null;\r\n }\r\n\r\n public get servicePrincipalIdentity() {\r\n return this._store.getIdentity(this._servicePrincipalTokenId);\r\n }\r\n\r\n public get isServicePrincipalAuthenticated() {\r\n return this.servicePrincipalIdentity != null;\r\n }\r\n\r\n public get isIdentityServicePrincipal() {\r\n return this._store.defaultIdentityId === this._servicePrincipalTokenId;\r\n }\r\n\r\n public async init(startLogin: boolean = false): Promise<void> {\r\n if (this._initStarted || this._initialized) {\r\n console.warn('Nucleus.Identity: Auth initialization was already started. Don\\'t call init() multiple times!');\r\n return;\r\n }\r\n this._initStarted = true;\r\n\r\n this.handleLaunchCodeHash();\r\n await this._authorizationHandler.completeAuthorizationRequestIfPossible();\r\n\r\n const authErr = this._authorizationNotifier.error;\r\n if (authErr) {\r\n throw new Error('Authorization err: ' + authErr.error + ': ' + authErr.errorDescription);\r\n } else if (this._authorizationNotifier.response) {\r\n window.location.hash = '';\r\n const request = this._authorizationNotifier.request;\r\n const response = this._authorizationNotifier.response;\r\n const res = await this.tokenClient.getByAuthorizationCode(request.redirectUri, response.code, request.internal['code_verifier']);\r\n this._store.setDefaultIdentityId(null);\r\n await this._store.setToken(res);\r\n } else {\r\n const res = await this._store.getToken();\r\n if (!res && startLogin) {\r\n await this.login();\r\n }\r\n }\r\n this._initialized = true;\r\n }\r\n\r\n public async loginWithSecret(provider: string, secret: string): Promise<void> {\r\n this._store.removeToken();\r\n const assertionToken = await this.getServicePrincipalAccessToken();\r\n const scope = this.prepareScope(true, this.config?.requestedScopes);\r\n const res = await this.tokenClient.getBySecret(provider, secret, assertionToken, scope);\r\n this._store.setDefaultIdentityId(null);\r\n await this._store.setToken(res);\r\n }\r\n\r\n public async login(): Promise<void> {\r\n this._store.removeToken();\r\n const config = await this.config.getConfiguration();\r\n const request = this.prepareAuthorizationRequest();\r\n if (this.appService.isNative) {\r\n const listener = App.addListener('appUrlOpen', data => {\r\n if (this.appService.platform === 'ios') {\r\n Browser.close();\r\n }\r\n listener.remove();\r\n const hash = this.getCodeHash(data.url);\r\n if (hash) {\r\n const targetUrl = window.location.origin + window.location.pathname + '#' + hash;\r\n window.location.assign(targetUrl);\r\n window.location.reload();\r\n } else {\r\n console.warn('Nucleus.Identity: Redirect url did not contain authorization code!', data);\r\n }\r\n });\r\n }\r\n this._authorizationHandler.performAuthorizationRequest(config, request);\r\n }\r\n\r\n public async logout(): Promise<void> {\r\n this._store.removeToken();\r\n const config = await this.config.getConfiguration();\r\n const redirectUrl = this.config.redirectUrl;\r\n const logoutUrl = config.endSessionEndpoint + '?post_logout_redirect_uri=' + encodeURI(redirectUrl);\r\n if (this.appService.isNative) {\r\n const listener = App.addListener('appUrlOpen', () => {\r\n Device.getInfo().then(info => {\r\n if (info.platform === 'ios') {\r\n Browser.close();\r\n }\r\n });\r\n listener.remove();\r\n });\r\n Browser.open({ url: logoutUrl });\r\n } else {\r\n window.location.assign(logoutUrl);\r\n }\r\n }\r\n\r\n public async getAccessToken() {\r\n if (!this._getTokenPromise) {\r\n this._getTokenPromise = this.getAccessTokenInternal();\r\n }\r\n try {\r\n return await this._getTokenPromise;\r\n } finally {\r\n this._getTokenPromise = null;\r\n }\r\n }\r\n\r\n public async getServicePrincipalAccessToken() {\r\n if (!this._getServicePrincipalTokenPromise) {\r\n this._getServicePrincipalTokenPromise = this.getServicePrincipalAccessTokenInternal();\r\n }\r\n try {\r\n return await this._getServicePrincipalTokenPromise;\r\n } finally {\r\n this._getServicePrincipalTokenPromise = null;\r\n }\r\n }\r\n\r\n public async loginServicePrincipal() {\r\n const sp = await this._store.getServicePrincipal();\r\n if (sp) {\r\n const scope = this.prepareScope(false, this.config.servicePrincipalRequestedScopes);\r\n const res = await this.tokenClient.getByClientCredentials(sp.id, sp.secret, scope);\r\n await this._store.setToken(res, this._servicePrincipalTokenId);\r\n return res;\r\n } else {\r\n throw Error('Service principal is not registered!');\r\n }\r\n }\r\n\r\n public async loginAsServicePrincipal() {\r\n const token = await this._store.getToken(this._servicePrincipalTokenId);\r\n if (!token) {\r\n await this.loginServicePrincipal();\r\n }\r\n this._store.setDefaultIdentityId(this._servicePrincipalTokenId);\r\n }\r\n\r\n public async getOtp(type: OtpType, expiresIn: number = -1) {\r\n let url = this.config.getServerUrl(`/otp/create?type=${type}`);\r\n if (expiresIn > 0) {\r\n url += `&expiresIn=${expiresIn}`;\r\n }\r\n return lastValueFrom(this.http.get<OtpResponse>(url));\r\n }\r\n\r\n public async getOtpStatus(id: string) {\r\n const url = this.config.getServerUrl(`/otp/status/${id}`);\r\n return lastValueFrom(this.http.get<OtpStatus>(url));\r\n }\r\n\r\n public getOtpUrl(redirectUrl: string, password: string) {\r\n const encoded = encodeURIComponent(redirectUrl);\r\n const url = `/otp/auth?otpValue=${password}&returnUrl=${encoded}`;\r\n return this.config.getServerUrl(url);\r\n }\r\n\r\n public async startServicePrincipalRegistration() {\r\n const sp = await this._store.getServicePrincipal();\r\n return await this.tokenClient.getRegistrationCode(sp?.id);\r\n }\r\n\r\n public async completeServicePrincipalRegistration(deviceCode: DeviceCode) {\r\n const tokenRes = await this.waitForDeviceToken(deviceCode);\r\n const regRes = await this.tokenClient.registerServicePrincipal(tokenRes.accessToken);\r\n\r\n await this._store.setServicePrincipal({\r\n id: regRes.clientId,\r\n secret: regRes.clientSecret,\r\n expiresAt: regRes.secretExpirationDate\r\n });\r\n }\r\n\r\n public removeServicePrincipalRegistration() {\r\n return this._store.removeServicePrincipal();\r\n }\r\n\r\n public async getServicePrincipalRegistrationStatus() {\r\n const sp = await this._store.getServicePrincipal();\r\n return new ServicePrincipalRegistrationStatus(sp);\r\n }\r\n\r\n public async startDeviceCodeLogin() {\r\n const scope = this.prepareScope(true, this.config.requestedScopes);\r\n return await this.tokenClient.getDeviceCode(scope);\r\n }\r\n\r\n public async completeDeviceCodeLogin(deviceCode: DeviceCode) {\r\n const res = await this.waitForDeviceToken(deviceCode);\r\n await this._store.setToken(res);\r\n }\r\n\r\n private async waitForDeviceToken(deviceCode: DeviceCode) {\r\n let res: TokenResponse = null;\r\n do {\r\n if (deviceCode.isExpired()) {\r\n throw Error('Device code is expired!');\r\n }\r\n\r\n try {\r\n res = await this.tokenClient.getByDeviceCode(deviceCode.deviceCode);\r\n } catch (error) {\r\n if (error instanceof AppAuthError && error.message === 'authorization_pending') {\r\n await this.delay(2000);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n } while (!res);\r\n return res;\r\n }\r\n\r\n private prepareAuthorizationRequest(): AuthorizationRequest {\r\n const redirectUri = this.config.redirectUrl;\r\n\r\n const params = {\r\n response_mode: 'fragment',\r\n prompt: 'consent',\r\n access_type: 'offline',\r\n auth_provider_hint: this.config.authProviderHint\r\n };\r\n\r\n return new AuthorizationRequest({\r\n client_id: this.config.clientId,\r\n redirect_uri: redirectUri,\r\n response_type: AuthorizationRequest.RESPONSE_TYPE_CODE,\r\n scope: this.prepareScope(true, this.config.requestedScopes),\r\n extras: params,\r\n }, this._crypto, true);\r\n }\r\n\r\n private async getServicePrincipalAccessTokenInternal() {\r\n let token = await this._store.getToken(this._servicePrincipalTokenId);\r\n if (!token?.isValid()) {\r\n token = await this.loginServicePrincipal();\r\n }\r\n return token?.accessToken;\r\n }\r\n\r\n private async getAccessTokenInternal() {\r\n let token = await this._store.getToken();\r\n if (token && !token.isValid()) {\r\n token = await this.loginWithRefreshToken(token);\r\n }\r\n return token?.accessToken;\r\n }\r\n\r\n private async loginWithRefreshToken(token: TokenResponse) {\r\n if (!this._refreshTokenPromise) {\r\n this._refreshTokenPromise = this.loginWithRefreshTokenInternal(token);\r\n }\r\n try {\r\n return await this._refreshTokenPromise;\r\n } finally {\r\n this._refreshTokenPromise = null;\r\n }\r\n }\r\n\r\n private async loginWithRefreshTokenInternal(token: TokenResponse) {\r\n if (token?.refreshToken) {\r\n try {\r\n const res = await this.tokenClient.getByRefreshToken(token.refreshToken);\r\n await this._store.setToken(res);\r\n return res;\r\n } catch (err) {\r\n console.warn('Nucleus.Identity: Failed to login with refresh token.', err);\r\n if (err.message === 'invalid_grant') {\r\n await this.logout();\r\n }\r\n }\r\n } else {\r\n console.warn('Nucleus.Identity: There is no refresh token available.');\r\n }\r\n }\r\n\r\n private getCodeHash(url: string) {\r\n const arr = url.split('#');\r\n if (arr.length > 1) {\r\n const hash = arr[1];\r\n if (hash.startsWith('code=')) {\r\n return hash;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private handleLaunchCodeHash() {\r\n if (this.appService.isNative && this.appService.launchUrl) {\r\n const hash = this.getCodeHash(this.appService.launchUrl);\r\n if (hash) {\r\n console.log('Nucleus.Identity: Got authorization code from launchUrl, will assign it to hash.');\r\n window.location.hash = '#' + hash;\r\n }\r\n }\r\n }\r\n\r\n private prepareScope(offlineAccess: boolean, aditionalScope: string) {\r\n let scope = 'openid';\r\n if (offlineAccess) {\r\n scope += ' offline_access';\r\n }\r\n if (scope) {\r\n scope += ' ' + aditionalScope;\r\n }\r\n return scope;\r\n }\r\n\r\n private delay(miliseconds: number) {\r\n return new Promise<void>(resolve => {\r\n setTimeout(() => {\r\n resolve();\r\n }, miliseconds);\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, from, throwError } from 'rxjs';\r\nimport { NucleusIdentityConfig } from './nucleus-identity-config';\r\nimport { NucleusIdentityService } from './nucleus-identity.service';\r\nimport { mergeMap, catchError } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NucleusTokenInterceptor implements HttpInterceptor {\r\n constructor(private auth: NucleusIdentityService, private config: NucleusIdentityConfig\r\n ) {\r\n this._authority = config.authority.toLowerCase();\r\n this._interceptUrls = config.httpInterceptorUrls?.map(x => x.toLowerCase());\r\n }\r\n\r\n private _authority: string;\r\n private _authorityInterceptPaths = ['/api', '/manage', '/otp/create', '/otp/status'];\r\n private _interceptUrls: string[];\r\n\r\n public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (this.shouldIntercept(req.url)) {\r\n const res = this.authorizeRequest(this.auth.getAccessToken(), req, next);\r\n return this.checkUnauthorized(res);\r\n }\r\n return next.handle(req);\r\n }\r\n\r\n private shouldIntercept(url: string): boolean {\r\n url = url.toLowerCase();\r\n\r\n if (url.startsWith(this._authority)) {\r\n const pathname = new URL(url).pathname;\r\n return (this._authorityInterceptPaths.some(x => pathname.startsWith(x)));\r\n }\r\n\r\n if (this._interceptUrls?.length > 0) {\r\n return this.config.httpInterceptorUrls.some(x => url.startsWith(x));\r\n }\r\n return false;\r\n }\r\n\r\n private authorizeRequest(getToken: Promise<string>, req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return from(getToken).pipe(\r\n mergeMap(token => {\r\n if (token) {\r\n const headers = req.headers.set('Authorization', `Bearer ${token}`);\r\n req = req.clone({ headers });\r\n }\r\n return next.handle(req);\r\n })\r\n );\r\n }\r\n\r\n private checkUnauthorized(response: Observable<HttpEvent<any>>): Observable<HttpEvent<any>> {\r\n return response.pipe(\r\n catchError((err) => {\r\n if (err instanceof HttpErrorResponse && err.status === 401) {\r\n if (this.config.automaticLoginOnHttp401) {\r\n this.auth.login();\r\n }\r\n }\r\n return throwError(err);\r\n })\r\n );\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { NucleusTokenInterceptor } from './nucleus-token-interceptor.service';\r\nimport { NucleusIdentityConfig } from './nucleus-identity-config';\r\n\r\n@NgModule({\r\n imports: [\r\n ],\r\n declarations: [\r\n ],\r\n exports: [\r\n ]\r\n})\r\n\r\nexport class NucleusIdentityModule {\r\n\r\n static forRoot(config: NucleusIdentityConfig): ModuleWithProviders<NucleusIdentityModule> {\r\n return {\r\n ngModule: NucleusIdentityModule,\r\n providers: [\r\n { provide: NucleusIdentityConfig, useValue: config },\r\n { provide: HTTP_INTERCEPTORS, useClass: NucleusTokenInterceptor, multi: true },\r\n ]\r\n };\r\n }\r\n}\r\n","export class OtpResponse {\r\n public password: string;\r\n public passwordId: string;\r\n}\r\n\r\nexport class OtpStatus {\r\n public isExpired: boolean;\r\n public isUsed: boolean;\r\n public secondsToExpiration: number;\r\n}\r\n\r\nexport enum OtpType {\r\n SimpleNumbers = 0,\r\n SimpleAlfanumeric = 1,\r\n Complex = 2\r\n}\r\n","/*\r\n * Public API Surface of nucleus-identity\r\n */\r\n\r\nexport * from './lib/nucleus-identity.module';\r\nexport * from './lib/nucleus-identity.service';\r\nexport * from './lib/nucleus-identity-config';\r\nexport { OtpResponse, OtpStatus, OtpType } from './lib/models/otp';\r\nexport { DeviceCode } from './lib/models/device-code';\r\nexport { Identity } from './lib/models/identity';\r\nexport { ServicePrincipalRegistrationStatus } from './lib/models/service-principal';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -28,6 +28,7 @@ export declare class NucleusIdentityService {
28
28
  get isAuthenticated(): boolean;
29
29
  get servicePrincipalIdentity(): import("@kolektor/nucleus-identity").Identity;
30
30
  get isServicePrincipalAuthenticated(): boolean;
31
+ get isIdentityServicePrincipal(): boolean;
31
32
  init(startLogin?: boolean): Promise<void>;
32
33
  loginWithSecret(provider: string, secret: string): Promise<void>;
33
34
  login(): Promise<void>;
@@ -11,6 +11,7 @@ export declare class SecretsStore {
11
11
  private _servicePrincipal;
12
12
  private _defaultIdentityId;
13
13
  private _defaultIdentityIdStorageKey;
14
+ get defaultIdentityId(): string;
14
15
  removeServicePrincipal(): Promise<{
15
16
  value: boolean;
16
17
  }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolektor/nucleus-identity",
3
- "version": "0.0.9-pre.5874",
3
+ "version": "0.0.9-pre.5894",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0",