@kolektor/nucleus-identity 0.1.254 → 0.1.515

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.
@@ -84,7 +84,7 @@ export class NucleusIdentityService {
84
84
  this._initialized = true;
85
85
  }
86
86
  async loginWithSecret(provider, secret) {
87
- this._store.removeToken();
87
+ this._store.removeToken().catch(() => console.log('No token to remove.'));
88
88
  const assertionToken = await this.getServicePrincipalAccessToken();
89
89
  const scope = this.prepareScope(true, this.config?.requestedScopes);
90
90
  const res = await this.tokenClient.getBySecret(provider, secret, assertionToken, scope);
@@ -349,4 +349,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
349
349
  providedIn: 'root',
350
350
  }]
351
351
  }], ctorParameters: function () { return [{ type: i1.NucleusAppService }, { type: i2.LocationService }, { type: i3.HttpClient }, { type: i4.OidcConfigurationService }, { type: i5.TokenClient }]; } });
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVjbGV1cy1pZGVudGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy9udWNsZXVzL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi9udWNsZXVzLWlkZW50aXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFFcEIscUJBQXFCLEVBRXJCLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsc0JBQXNCLEdBR3ZCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUlyQyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7OztBQUtuRCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1Us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T0FBTyxDQUFDLEdBQUcsQ0FDVCxrRkFBa0YsQ0FDbkYsQ0FBQztnQkFDRixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO2FBQ25DO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLGFBQXNCLEVBQUUsY0FBdUI7UUFDbEUsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ3JCLElBQUksYUFBYSxFQUFFO1lBQ2pCLEtBQUssSUFBSSxpQkFBaUIsQ0FBQztTQUM1QjtRQUNELElBQUksY0FBYyxFQUFFO1lBQ2xCLEtBQUssSUFBSSxHQUFHLEdBQUcsY0FBYyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQW1CO1FBQy9CLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNuQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FwWlUsc0JBQXNCO21IQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7NEZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcEF1dGhFcnJvcixcbiAgQXV0aG9yaXphdGlvblJlcXVlc3QsXG4gIEF1dGhvcml6YXRpb25SZXF1ZXN0SGFuZGxlcixcbiAgQmFzaWNRdWVyeVN0cmluZ1V0aWxzLFxuICBDcnlwdG8sXG4gIERlZmF1bHRDcnlwdG8sXG4gIExvY2FsU3RvcmFnZUJhY2tlbmQsXG4gIFJlZGlyZWN0UmVxdWVzdEhhbmRsZXIsXG4gIFN0cmluZ01hcCxcbiAgVG9rZW5SZXNwb25zZSxcbn0gZnJvbSAnQG9wZW5pZC9hcHBhdXRoJztcblxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQXBwIH0gZnJvbSAnQGNhcGFjaXRvci9hcHAnO1xuaW1wb3J0IHsgQnJvd3NlciB9IGZyb20gJ0BjYXBhY2l0b3IvYnJvd3Nlcic7XG5pbXBvcnQgeyBEZXZpY2UgfSBmcm9tICdAY2FwYWNpdG9yL2RldmljZSc7XG5cbmltcG9ydCB7IE51Y2xldXNBcHBTZXJ2aWNlIH0gZnJvbSAnQGtvbGVrdG9yL251Y2xldXMtY29tbW9uJztcblxuaW1wb3J0IHsgbGFzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBEZXZpY2VDb2RlIH0gZnJvbSAnLi9tb2RlbHMvZGV2aWNlLWNvZGUnO1xuaW1wb3J0IHsgT3RwUmVzcG9uc2UsIE90cFN0YXR1cywgT3RwVHlwZSB9IGZyb20gJy4vbW9kZWxzL290cCc7XG5pbXBvcnQgeyBTZXJ2aWNlUHJpbmNpcGFsUmVnaXN0cmF0aW9uU3RhdHVzIH0gZnJvbSAnLi9tb2RlbHMvc2VydmljZS1wcmluY2lwYWwnO1xuXG5pbXBvcnQgeyBMb2NhdGlvblNlcnZpY2UgfSBmcm9tICcuL3V0aWxzL2xvY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTnVjbGV1c0F1dGhvcml6YXRpb25Ob3RpZmllciB9IGZyb20gJy4vdXRpbHMvbnVjbGV1cy1hdXRob3JpemF0aW9uLW5vdGlmaWVyJztcbmltcG9ydCB7IE9pZGNDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vdXRpbHMvb2lkYy1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VjcmV0c1N0b3JlIH0gZnJvbSAnLi91dGlscy9zZWNyZXRzLXN0b3JlJztcbmltcG9ydCB7IFRva2VuQ2xpZW50IH0gZnJvbSAnLi91dGlscy90b2tlbi1jbGllbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTnVjbGV1c0lkZW50aXR5U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwU2VydmljZTogTnVjbGV1c0FwcFNlcnZpY2UsXG4gICAgbG9jYXRpb246IExvY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBjb25maWc6IE9pZGNDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHRva2VuQ2xpZW50OiBUb2tlbkNsaWVudFxuICApIHtcbiAgICBjb25zdCBzdG9yYWdlID0gbmV3IExvY2FsU3RvcmFnZUJhY2tlbmQoKTtcbiAgICB0aGlzLl9jcnlwdG8gPSBuZXcgRGVmYXVsdENyeXB0bygpO1xuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyID0gbmV3IFJlZGlyZWN0UmVxdWVzdEhhbmRsZXIoXG4gICAgICBzdG9yYWdlLFxuICAgICAgbmV3IEJhc2ljUXVlcnlTdHJpbmdVdGlscygpLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0aGlzLl9jcnlwdG9cbiAgICApO1xuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLnNldEF1dGhvcml6YXRpb25Ob3RpZmllcihcbiAgICAgIHRoaXMuX2F1dGhvcml6YXRpb25Ob3RpZmllclxuICAgICk7XG4gICAgdGhpcy5fc3RvcmUgPSBuZXcgU2VjcmV0c1N0b3JlKGNvbmZpZy5jbGllbnRJZCk7XG4gIH1cblxuICBwcml2YXRlIF9hdXRob3JpemF0aW9uSGFuZGxlcjogQXV0aG9yaXphdGlvblJlcXVlc3RIYW5kbGVyO1xuICBwcml2YXRlIF9hdXRob3JpemF0aW9uTm90aWZpZXIgPSBuZXcgTnVjbGV1c0F1dGhvcml6YXRpb25Ob3RpZmllcigpO1xuICBwcml2YXRlIF9jcnlwdG86IENyeXB0bztcbiAgcHJpdmF0ZSBfaW5pdFN0YXJ0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcmVmcmVzaFRva2VuUHJvbWlzZTogUHJvbWlzZTxUb2tlblJlc3BvbnNlIHwgbnVsbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZ2V0VG9rZW5Qcm9taXNlOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2dldFNlcnZpY2VQcmluY2lwYWxUb2tlblByb21pc2U6IFByb21pc2U8c3RyaW5nPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZCA9ICdfc3ZjcCc7XG4gIHByaXZhdGUgX3N0b3JlOiBTZWNyZXRzU3RvcmU7XG5cbiAgcHVibGljIGdldCBpZGVudGl0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmUuZ2V0SWRlbnRpdHkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNBdXRoZW50aWNhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5ICE9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlcnZpY2VQcmluY2lwYWxJZGVudGl0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmUuZ2V0SWRlbnRpdHkodGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1NlcnZpY2VQcmluY2lwYWxBdXRoZW50aWNhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnNlcnZpY2VQcmluY2lwYWxJZGVudGl0eSAhPSBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0lkZW50aXR5U2VydmljZVByaW5jaXBhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmUuZGVmYXVsdElkZW50aXR5SWQgPT09IHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXQoc3RhcnRMb2dpbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2luaXRTdGFydGVkIHx8IHRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiTnVjbGV1cy5JZGVudGl0eTogQXV0aCBpbml0aWFsaXphdGlvbiB3YXMgYWxyZWFkeSBzdGFydGVkLiBEb24ndCBjYWxsIGluaXQoKSBtdWx0aXBsZSB0aW1lcyFcIlxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faW5pdFN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgdGhpcy5oYW5kbGVMYXVuY2hDb2RlSGFzaCgpO1xuICAgIGF3YWl0IHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLmNvbXBsZXRlQXV0aG9yaXphdGlvblJlcXVlc3RJZlBvc3NpYmxlKCk7XG5cbiAgICBjb25zdCBhdXRoRXJyID0gdGhpcy5fYXV0aG9yaXphdGlvbk5vdGlmaWVyLmVycm9yO1xuICAgIGlmIChhdXRoRXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdBdXRob3JpemF0aW9uIGVycjogJyArIGF1dGhFcnIuZXJyb3IgKyAnOiAnICsgYXV0aEVyci5lcnJvckRlc2NyaXB0aW9uXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fYXV0aG9yaXphdGlvbk5vdGlmaWVyLnJlc3BvbnNlKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICcnO1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuX2F1dGhvcml6YXRpb25Ob3RpZmllci5yZXF1ZXN0O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIucmVzcG9uc2U7XG5cbiAgICAgIGNvbnN0IGNvZGVWZXJpZmllciA9IHJlcXVlc3QuaW50ZXJuYWxcbiAgICAgICAgPyByZXF1ZXN0LmludGVybmFsWydjb2RlX3ZlcmlmaWVyJ11cbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5QXV0aG9yaXphdGlvbkNvZGUoXG4gICAgICAgIHJlcXVlc3QucmVkaXJlY3RVcmksXG4gICAgICAgIHJlc3BvbnNlLmNvZGUsXG4gICAgICAgIGNvZGVWZXJpZmllclxuICAgICAgKTtcbiAgICAgIHRoaXMuX3N0b3JlLnNldERlZmF1bHRJZGVudGl0eUlkKG51bGwpO1xuICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4oKTtcbiAgICAgIGlmICghcmVzICYmIHN0YXJ0TG9naW4pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5XaXRoU2VjcmV0KFxuICAgIHByb3ZpZGVyOiBzdHJpbmcsXG4gICAgc2VjcmV0OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fc3RvcmUucmVtb3ZlVG9rZW4oKTtcbiAgICBjb25zdCBhc3NlcnRpb25Ub2tlbiA9IGF3YWl0IHRoaXMuZ2V0U2VydmljZVByaW5jaXBhbEFjY2Vzc1Rva2VuKCk7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnByZXBhcmVTY29wZSh0cnVlLCB0aGlzLmNvbmZpZz8ucmVxdWVzdGVkU2NvcGVzKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5U2VjcmV0KFxuICAgICAgcHJvdmlkZXIsXG4gICAgICBzZWNyZXQsXG4gICAgICBhc3NlcnRpb25Ub2tlbixcbiAgICAgIHNjb3BlXG4gICAgKTtcbiAgICB0aGlzLl9zdG9yZS5zZXREZWZhdWx0SWRlbnRpdHlJZChudWxsKTtcbiAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX3N0b3JlLnJlbW92ZVRva2VuKCk7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWcuZ2V0Q29uZmlndXJhdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnByZXBhcmVBdXRob3JpemF0aW9uUmVxdWVzdCgpO1xuICAgIGlmICh0aGlzLmFwcFNlcnZpY2UuaXNOYXRpdmUpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVyID0gQXBwLmFkZExpc3RlbmVyKCdhcHBVcmxPcGVuJywgKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYXBwU2VydmljZS5wbGF0Zm9ybSA9PT0gJ2lvcycpIHtcbiAgICAgICAgICBCcm93c2VyLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGlzdGVuZXIucmVtb3ZlKCk7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmdldENvZGVIYXNoKGRhdGEudXJsKTtcbiAgICAgICAgaWYgKGhhc2gpIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRVcmwgPVxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArICcjJyArIGhhc2g7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih0YXJnZXRVcmwpO1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnTnVjbGV1cy5JZGVudGl0eTogUmVkaXJlY3QgdXJsIGRpZCBub3QgY29udGFpbiBhdXRob3JpemF0aW9uIGNvZGUhJyxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fYXV0aG9yaXphdGlvbkhhbmRsZXIucGVyZm9ybUF1dGhvcml6YXRpb25SZXF1ZXN0KGNvbmZpZywgcmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9nb3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX3N0b3JlLnJlbW92ZVRva2VuKCk7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5jb25maWcuZ2V0Q29uZmlndXJhdGlvbigpO1xuICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gdGhpcy5jb25maWcucmVkaXJlY3RVcmw7XG4gICAgY29uc3QgbG9nb3V0VXJsID1cbiAgICAgIGNvbmZpZy5lbmRTZXNzaW9uRW5kcG9pbnQgK1xuICAgICAgJz9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk9JyArXG4gICAgICBlbmNvZGVVUkkocmVkaXJlY3RVcmwpO1xuICAgIGlmICh0aGlzLmFwcFNlcnZpY2UuaXNOYXRpdmUpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVyID0gQXBwLmFkZExpc3RlbmVyKCdhcHBVcmxPcGVuJywgKCkgPT4ge1xuICAgICAgICBEZXZpY2UuZ2V0SW5mbygpLnRoZW4oKGluZm8pID0+IHtcbiAgICAgICAgICBpZiAoaW5mby5wbGF0Zm9ybSA9PT0gJ2lvcycpIHtcbiAgICAgICAgICAgIEJyb3dzZXIuY2xvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsaXN0ZW5lci5yZW1vdmUoKTtcbiAgICAgIH0pO1xuICAgICAgQnJvd3Nlci5vcGVuKHsgdXJsOiBsb2dvdXRVcmwgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24obG9nb3V0VXJsKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKSB7XG4gICAgaWYgKCF0aGlzLl9nZXRUb2tlblByb21pc2UpIHtcbiAgICAgIHRoaXMuX2dldFRva2VuUHJvbWlzZSA9IHRoaXMuZ2V0QWNjZXNzVG9rZW5JbnRlcm5hbCgpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2dldFRva2VuUHJvbWlzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fZ2V0VG9rZW5Qcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2VydmljZVByaW5jaXBhbEFjY2Vzc1Rva2VuKCkge1xuICAgIGlmICghdGhpcy5fZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZSkge1xuICAgICAgdGhpcy5fZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZSA9XG4gICAgICAgIHRoaXMuZ2V0U2VydmljZVByaW5jaXBhbEFjY2Vzc1Rva2VuSW50ZXJuYWwoKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5TZXJ2aWNlUHJpbmNpcGFsKCkge1xuICAgIGNvbnN0IHNwID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0U2VydmljZVByaW5jaXBhbCgpO1xuICAgIGlmIChzcCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLnByZXBhcmVTY29wZShcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHRoaXMuY29uZmlnLnNlcnZpY2VQcmluY2lwYWxSZXF1ZXN0ZWRTY29wZXNcbiAgICAgICk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5Q2xpZW50Q3JlZGVudGlhbHMoXG4gICAgICAgIHNwLmlkLFxuICAgICAgICBzcC5zZWNyZXQsXG4gICAgICAgIHNjb3BlXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzLCB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcignU2VydmljZSBwcmluY2lwYWwgaXMgbm90IHJlZ2lzdGVyZWQhJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luQXNTZXJ2aWNlUHJpbmNpcGFsKCkge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4odGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIGF3YWl0IHRoaXMubG9naW5TZXJ2aWNlUHJpbmNpcGFsKCk7XG4gICAgfVxuICAgIHRoaXMuX3N0b3JlLnNldERlZmF1bHRJZGVudGl0eUlkKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRPdHAodHlwZTogT3RwVHlwZSwgZXhwaXJlc0luID0gLTEpIHtcbiAgICBsZXQgdXJsID0gdGhpcy5jb25maWcuZ2V0U2VydmVyVXJsKGAvb3RwL2NyZWF0ZT90eXBlPSR7dHlwZX1gKTtcbiAgICBpZiAoZXhwaXJlc0luID4gMCkge1xuICAgICAgdXJsICs9IGAmZXhwaXJlc0luPSR7ZXhwaXJlc0lufWA7XG4gICAgfVxuICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8T3RwUmVzcG9uc2U+KHVybCkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE90cFN0YXR1cyhpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5jb25maWcuZ2V0U2VydmVyVXJsKGAvb3RwL3N0YXR1cy8ke2lkfWApO1xuICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuaHR0cC5nZXQ8T3RwU3RhdHVzPih1cmwpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPdHBVcmwocmVkaXJlY3RVcmw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZykge1xuICAgIGNvbnN0IGVuY29kZWQgPSBlbmNvZGVVUklDb21wb25lbnQocmVkaXJlY3RVcmwpO1xuICAgIGNvbnN0IHVybCA9IGAvb3RwL2F1dGg/b3RwVmFsdWU9JHtwYXNzd29yZH0mcmV0dXJuVXJsPSR7ZW5jb2RlZH1gO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRTZXJ2ZXJVcmwodXJsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdGFydFNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oKSB7XG4gICAgY29uc3Qgc3AgPSBhd2FpdCB0aGlzLl9zdG9yZS5nZXRTZXJ2aWNlUHJpbmNpcGFsKCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0UmVnaXN0cmF0aW9uQ29kZShzcD8uaWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlU2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvbihkZXZpY2VDb2RlOiBEZXZpY2VDb2RlKSB7XG4gICAgY29uc3QgdG9rZW5SZXMgPSBhd2FpdCB0aGlzLndhaXRGb3JEZXZpY2VUb2tlbihkZXZpY2VDb2RlKTtcbiAgICBjb25zdCByZWdSZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LnJlZ2lzdGVyU2VydmljZVByaW5jaXBhbChcbiAgICAgIHRva2VuUmVzLmFjY2Vzc1Rva2VuXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFNlcnZpY2VQcmluY2lwYWwoe1xuICAgICAgaWQ6IHJlZ1Jlcy5jbGllbnRJZCxcbiAgICAgIHNlY3JldDogcmVnUmVzLmNsaWVudFNlY3JldCxcbiAgICAgIGV4cGlyZXNBdDogcmVnUmVzLnNlY3JldEV4cGlyYXRpb25EYXRlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLnJlbW92ZVNlcnZpY2VQcmluY2lwYWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTZXJ2aWNlUHJpbmNpcGFsUmVnaXN0cmF0aW9uU3RhdHVzKCkge1xuICAgIGNvbnN0IHNwID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0U2VydmljZVByaW5jaXBhbCgpO1xuICAgIHJldHVybiBuZXcgU2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvblN0YXR1cyhzcCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RhcnREZXZpY2VDb2RlTG9naW4oKSB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnByZXBhcmVTY29wZSh0cnVlLCB0aGlzLmNvbmZpZy5yZXF1ZXN0ZWRTY29wZXMpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldERldmljZUNvZGUoc2NvcGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlRGV2aWNlQ29kZUxvZ2luKGRldmljZUNvZGU6IERldmljZUNvZGUpIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLndhaXRGb3JEZXZpY2VUb2tlbihkZXZpY2VDb2RlKTtcbiAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yRGV2aWNlVG9rZW4oZGV2aWNlQ29kZTogRGV2aWNlQ29kZSkge1xuICAgIGxldCByZXM6IFRva2VuUmVzcG9uc2UgfCBudWxsID0gbnVsbDtcbiAgICBkbyB7XG4gICAgICBpZiAoZGV2aWNlQ29kZS5pc0V4cGlyZWQoKSkge1xuICAgICAgICB0aHJvdyBFcnJvcignRGV2aWNlIGNvZGUgaXMgZXhwaXJlZCEnKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRCeURldmljZUNvZGUoZGV2aWNlQ29kZS5kZXZpY2VDb2RlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEFwcEF1dGhFcnJvciAmJlxuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPT09ICdhdXRob3JpemF0aW9uX3BlbmRpbmcnXG4gICAgICAgICkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZGVsYXkoMjAwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlICghcmVzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlQXV0aG9yaXphdGlvblJlcXVlc3QoKTogQXV0aG9yaXphdGlvblJlcXVlc3Qge1xuICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gdGhpcy5jb25maWcucmVkaXJlY3RVcmw7XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICByZXNwb25zZV9tb2RlOiAnZnJhZ21lbnQnLFxuICAgICAgcHJvbXB0OiAnY29uc2VudCcsXG4gICAgICBhY2Nlc3NfdHlwZTogJ29mZmxpbmUnLFxuICAgICAgYXV0aF9wcm92aWRlcl9oaW50OiB0aGlzLmNvbmZpZy5hdXRoUHJvdmlkZXJIaW50LFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IEF1dGhvcml6YXRpb25SZXF1ZXN0KFxuICAgICAge1xuICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY29uZmlnLmNsaWVudElkLFxuICAgICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpLFxuICAgICAgICByZXNwb25zZV90eXBlOiBBdXRob3JpemF0aW9uUmVxdWVzdC5SRVNQT05TRV9UWVBFX0NPREUsXG4gICAgICAgIHNjb3BlOiB0aGlzLnByZXBhcmVTY29wZSh0cnVlLCB0aGlzLmNvbmZpZy5yZXF1ZXN0ZWRTY29wZXMpLFxuICAgICAgICBleHRyYXM6IHBhcmFtcyBhcyBTdHJpbmdNYXAsXG4gICAgICB9LFxuICAgICAgdGhpcy5fY3J5cHRvLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWxBY2Nlc3NUb2tlbkludGVybmFsKCkge1xuICAgIGxldCB0b2tlbiA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcbiAgICBpZiAoIXRva2VuPy5pc1ZhbGlkKCkpIHtcbiAgICAgIHRva2VuID0gYXdhaXQgdGhpcy5sb2dpblNlcnZpY2VQcmluY2lwYWwoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuPy5hY2Nlc3NUb2tlbjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWNjZXNzVG9rZW5JbnRlcm5hbCgpIHtcbiAgICBsZXQgdG9rZW4gPSBhd2FpdCB0aGlzLl9zdG9yZS5nZXRUb2tlbigpO1xuICAgIGlmICh0b2tlbiAmJiAhdG9rZW4uaXNWYWxpZCgpKSB7XG4gICAgICB0b2tlbiA9IGF3YWl0IHRoaXMubG9naW5XaXRoUmVmcmVzaFRva2VuKHRva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuPy5hY2Nlc3NUb2tlbiA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2dpbldpdGhSZWZyZXNoVG9rZW4odG9rZW46IFRva2VuUmVzcG9uc2UpIHtcbiAgICBpZiAoIXRoaXMuX3JlZnJlc2hUb2tlblByb21pc2UpIHtcbiAgICAgIHRoaXMuX3JlZnJlc2hUb2tlblByb21pc2UgPSB0aGlzLmxvZ2luV2l0aFJlZnJlc2hUb2tlbkludGVybmFsKHRva2VuKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZWZyZXNoVG9rZW5Qcm9taXNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9yZWZyZXNoVG9rZW5Qcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvZ2luV2l0aFJlZnJlc2hUb2tlbkludGVybmFsKHRva2VuOiBUb2tlblJlc3BvbnNlKSB7XG4gICAgaWYgKHRva2VuPy5yZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0QnlSZWZyZXNoVG9rZW4oXG4gICAgICAgICAgdG9rZW4ucmVmcmVzaFRva2VuXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdOdWNsZXVzLklkZW50aXR5OiBGYWlsZWQgdG8gbG9naW4gd2l0aCByZWZyZXNoIHRva2VuLicsXG4gICAgICAgICAgZXJyXG4gICAgICAgICk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGlmICgoZXJyIGFzIGFueSkubWVzc2FnZSA9PT0gJ2ludmFsaWRfZ3JhbnQnKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ051Y2xldXMuSWRlbnRpdHk6IFRoZXJlIGlzIG5vIHJlZnJlc2ggdG9rZW4gYXZhaWxhYmxlLicpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZUhhc2godXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcnIgPSB1cmwuc3BsaXQoJyMnKTtcbiAgICBpZiAoYXJyLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IGhhc2ggPSBhcnJbMV07XG4gICAgICBpZiAoaGFzaC5zdGFydHNXaXRoKCdjb2RlPScpKSB7XG4gICAgICAgIHJldHVybiBoYXNoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTGF1bmNoQ29kZUhhc2goKSB7XG4gICAgaWYgKHRoaXMuYXBwU2VydmljZS5pc05hdGl2ZSAmJiB0aGlzLmFwcFNlcnZpY2UubGF1bmNoVXJsKSB7XG4gICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRDb2RlSGFzaCh0aGlzLmFwcFNlcnZpY2UubGF1bmNoVXJsKTtcbiAgICAgIGlmIChoYXNoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICdOdWNsZXVzLklkZW50aXR5OiBHb3QgYXV0aG9yaXphdGlvbiBjb2RlIGZyb20gbGF1bmNoVXJsLCB3aWxsIGFzc2lnbiBpdCB0byBoYXNoLidcbiAgICAgICAgKTtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAnIycgKyBoYXNoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVNjb3BlKG9mZmxpbmVBY2Nlc3M6IGJvb2xlYW4sIGFkaXRpb25hbFNjb3BlPzogc3RyaW5nKSB7XG4gICAgbGV0IHNjb3BlID0gJ29wZW5pZCc7XG4gICAgaWYgKG9mZmxpbmVBY2Nlc3MpIHtcbiAgICAgIHNjb3BlICs9ICcgb2ZmbGluZV9hY2Nlc3MnO1xuICAgIH1cbiAgICBpZiAoYWRpdGlvbmFsU2NvcGUpIHtcbiAgICAgIHNjb3BlICs9ICcgJyArIGFkaXRpb25hbFNjb3BlO1xuICAgIH1cbiAgICByZXR1cm4gc2NvcGU7XG4gIH1cblxuICBwcml2YXRlIGRlbGF5KG1pbGlzZWNvbmRzOiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LCBtaWxpc2Vjb25kcyk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVjbGV1cy1pZGVudGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy9udWNsZXVzL251Y2xldXMtaWRlbnRpdHkvc3JjL2xpYi9udWNsZXVzLWlkZW50aXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFFcEIscUJBQXFCLEVBRXJCLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsc0JBQXNCLEdBR3ZCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUlyQyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7OztBQUtuRCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1Us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Q0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pELElBQUksSUFBSSxFQUFFO2dCQUNSLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsa0ZBQWtGLENBQ25GLENBQUM7Z0JBQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQzthQUNuQztTQUNGO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxhQUFzQixFQUFFLGNBQXVCO1FBQ2xFLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUNyQixJQUFJLGFBQWEsRUFBRTtZQUNqQixLQUFLLElBQUksaUJBQWlCLENBQUM7U0FDNUI7UUFDRCxJQUFJLGNBQWMsRUFBRTtZQUNsQixLQUFLLElBQUksR0FBRyxHQUFHLGNBQWMsQ0FBQztTQUMvQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFtQjtRQUMvQixPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBcFpVLHNCQUFzQjttSEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07OzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBBdXRoRXJyb3IsXG4gIEF1dGhvcml6YXRpb25SZXF1ZXN0LFxuICBBdXRob3JpemF0aW9uUmVxdWVzdEhhbmRsZXIsXG4gIEJhc2ljUXVlcnlTdHJpbmdVdGlscyxcbiAgQ3J5cHRvLFxuICBEZWZhdWx0Q3J5cHRvLFxuICBMb2NhbFN0b3JhZ2VCYWNrZW5kLFxuICBSZWRpcmVjdFJlcXVlc3RIYW5kbGVyLFxuICBTdHJpbmdNYXAsXG4gIFRva2VuUmVzcG9uc2UsXG59IGZyb20gJ0BvcGVuaWQvYXBwYXV0aCc7XG5cbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFwcCB9IGZyb20gJ0BjYXBhY2l0b3IvYXBwJztcbmltcG9ydCB7IEJyb3dzZXIgfSBmcm9tICdAY2FwYWNpdG9yL2Jyb3dzZXInO1xuaW1wb3J0IHsgRGV2aWNlIH0gZnJvbSAnQGNhcGFjaXRvci9kZXZpY2UnO1xuXG5pbXBvcnQgeyBOdWNsZXVzQXBwU2VydmljZSB9IGZyb20gJ0Brb2xla3Rvci9udWNsZXVzLWNvbW1vbic7XG5cbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRGV2aWNlQ29kZSB9IGZyb20gJy4vbW9kZWxzL2RldmljZS1jb2RlJztcbmltcG9ydCB7IE90cFJlc3BvbnNlLCBPdHBTdGF0dXMsIE90cFR5cGUgfSBmcm9tICcuL21vZGVscy9vdHAnO1xuaW1wb3J0IHsgU2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvblN0YXR1cyB9IGZyb20gJy4vbW9kZWxzL3NlcnZpY2UtcHJpbmNpcGFsJztcblxuaW1wb3J0IHsgTG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi91dGlscy9sb2NhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE51Y2xldXNBdXRob3JpemF0aW9uTm90aWZpZXIgfSBmcm9tICcuL3V0aWxzL251Y2xldXMtYXV0aG9yaXphdGlvbi1ub3RpZmllcic7XG5pbXBvcnQgeyBPaWRjQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL3V0aWxzL29pZGMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNlY3JldHNTdG9yZSB9IGZyb20gJy4vdXRpbHMvc2VjcmV0cy1zdG9yZSc7XG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vdXRpbHMvdG9rZW4tY2xpZW50JztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE51Y2xldXNJZGVudGl0eVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcFNlcnZpY2U6IE51Y2xldXNBcHBTZXJ2aWNlLFxuICAgIGxvY2F0aW9uOiBMb2NhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgY29uZmlnOiBPaWRjQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2tlbkNsaWVudDogVG9rZW5DbGllbnRcbiAgKSB7XG4gICAgY29uc3Qgc3RvcmFnZSA9IG5ldyBMb2NhbFN0b3JhZ2VCYWNrZW5kKCk7XG4gICAgdGhpcy5fY3J5cHRvID0gbmV3IERlZmF1bHRDcnlwdG8oKTtcbiAgICB0aGlzLl9hdXRob3JpemF0aW9uSGFuZGxlciA9IG5ldyBSZWRpcmVjdFJlcXVlc3RIYW5kbGVyKFxuICAgICAgc3RvcmFnZSxcbiAgICAgIG5ldyBCYXNpY1F1ZXJ5U3RyaW5nVXRpbHMoKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgdGhpcy5fY3J5cHRvXG4gICAgKTtcbiAgICB0aGlzLl9hdXRob3JpemF0aW9uSGFuZGxlci5zZXRBdXRob3JpemF0aW9uTm90aWZpZXIoXG4gICAgICB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXJcbiAgICApO1xuICAgIHRoaXMuX3N0b3JlID0gbmV3IFNlY3JldHNTdG9yZShjb25maWcuY2xpZW50SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXV0aG9yaXphdGlvbkhhbmRsZXI6IEF1dGhvcml6YXRpb25SZXF1ZXN0SGFuZGxlcjtcbiAgcHJpdmF0ZSBfYXV0aG9yaXphdGlvbk5vdGlmaWVyID0gbmV3IE51Y2xldXNBdXRob3JpemF0aW9uTm90aWZpZXIoKTtcbiAgcHJpdmF0ZSBfY3J5cHRvOiBDcnlwdG87XG4gIHByaXZhdGUgX2luaXRTdGFydGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3JlZnJlc2hUb2tlblByb21pc2U6IFByb21pc2U8VG9rZW5SZXNwb25zZSB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2dldFRva2VuUHJvbWlzZTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9nZXRTZXJ2aWNlUHJpbmNpcGFsVG9rZW5Qcm9taXNlOiBQcm9taXNlPHN0cmluZz4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfc2VydmljZVByaW5jaXBhbFRva2VuSWQgPSAnX3N2Y3AnO1xuICBwcml2YXRlIF9zdG9yZTogU2VjcmV0c1N0b3JlO1xuXG4gIHB1YmxpYyBnZXQgaWRlbnRpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmdldElkZW50aXR5KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQXV0aGVudGljYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pZGVudGl0eSAhPSBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldCBzZXJ2aWNlUHJpbmNpcGFsSWRlbnRpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmdldElkZW50aXR5KHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNTZXJ2aWNlUHJpbmNpcGFsQXV0aGVudGljYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUHJpbmNpcGFsSWRlbnRpdHkgIT0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNJZGVudGl0eVNlcnZpY2VQcmluY2lwYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmRlZmF1bHRJZGVudGl0eUlkID09PSB0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0KHN0YXJ0TG9naW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9pbml0U3RhcnRlZCB8fCB0aGlzLl9pbml0aWFsaXplZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIk51Y2xldXMuSWRlbnRpdHk6IEF1dGggaW5pdGlhbGl6YXRpb24gd2FzIGFscmVhZHkgc3RhcnRlZC4gRG9uJ3QgY2FsbCBpbml0KCkgbXVsdGlwbGUgdGltZXMhXCJcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2luaXRTdGFydGVkID0gdHJ1ZTtcblxuICAgIHRoaXMuaGFuZGxlTGF1bmNoQ29kZUhhc2goKTtcbiAgICBhd2FpdCB0aGlzLl9hdXRob3JpemF0aW9uSGFuZGxlci5jb21wbGV0ZUF1dGhvcml6YXRpb25SZXF1ZXN0SWZQb3NzaWJsZSgpO1xuXG4gICAgY29uc3QgYXV0aEVyciA9IHRoaXMuX2F1dGhvcml6YXRpb25Ob3RpZmllci5lcnJvcjtcbiAgICBpZiAoYXV0aEVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQXV0aG9yaXphdGlvbiBlcnI6ICcgKyBhdXRoRXJyLmVycm9yICsgJzogJyArIGF1dGhFcnIuZXJyb3JEZXNjcmlwdGlvblxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2F1dGhvcml6YXRpb25Ob3RpZmllci5yZXNwb25zZSkge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAnJztcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9hdXRob3JpemF0aW9uTm90aWZpZXIucmVxdWVzdDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5fYXV0aG9yaXphdGlvbk5vdGlmaWVyLnJlc3BvbnNlO1xuXG4gICAgICBjb25zdCBjb2RlVmVyaWZpZXIgPSByZXF1ZXN0LmludGVybmFsXG4gICAgICAgID8gcmVxdWVzdC5pbnRlcm5hbFsnY29kZV92ZXJpZmllciddXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRCeUF1dGhvcml6YXRpb25Db2RlKFxuICAgICAgICByZXF1ZXN0LnJlZGlyZWN0VXJpLFxuICAgICAgICByZXNwb25zZS5jb2RlLFxuICAgICAgICBjb2RlVmVyaWZpZXJcbiAgICAgICk7XG4gICAgICB0aGlzLl9zdG9yZS5zZXREZWZhdWx0SWRlbnRpdHlJZChudWxsKTtcbiAgICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHJlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKCk7XG4gICAgICBpZiAoIXJlcyAmJiBzdGFydExvZ2luKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luV2l0aFNlY3JldChcbiAgICBwcm92aWRlcjogc3RyaW5nLFxuICAgIHNlY3JldDogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX3N0b3JlLnJlbW92ZVRva2VuKCkuY2F0Y2goKCkgPT4gY29uc29sZS5sb2coJ05vIHRva2VuIHRvIHJlbW92ZS4nKSk7XG4gICAgY29uc3QgYXNzZXJ0aW9uVG9rZW4gPSBhd2FpdCB0aGlzLmdldFNlcnZpY2VQcmluY2lwYWxBY2Nlc3NUb2tlbigpO1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWc/LnJlcXVlc3RlZFNjb3Blcyk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRCeVNlY3JldChcbiAgICAgIHByb3ZpZGVyLFxuICAgICAgc2VjcmV0LFxuICAgICAgYXNzZXJ0aW9uVG9rZW4sXG4gICAgICBzY29wZVxuICAgICk7XG4gICAgdGhpcy5fc3RvcmUuc2V0RGVmYXVsdElkZW50aXR5SWQobnVsbCk7XG4gICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2dpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9zdG9yZS5yZW1vdmVUb2tlbigpO1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5wcmVwYXJlQXV0aG9yaXphdGlvblJlcXVlc3QoKTtcbiAgICBpZiAodGhpcy5hcHBTZXJ2aWNlLmlzTmF0aXZlKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lciA9IEFwcC5hZGRMaXN0ZW5lcignYXBwVXJsT3BlbicsIChkYXRhKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFwcFNlcnZpY2UucGxhdGZvcm0gPT09ICdpb3MnKSB7XG4gICAgICAgICAgQnJvd3Nlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRDb2RlSGFzaChkYXRhLnVybCk7XG4gICAgICAgIGlmIChoYXNoKSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0VXJsID1cbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyAnIycgKyBoYXNoO1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odGFyZ2V0VXJsKTtcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgJ051Y2xldXMuSWRlbnRpdHk6IFJlZGlyZWN0IHVybCBkaWQgbm90IGNvbnRhaW4gYXV0aG9yaXphdGlvbiBjb2RlIScsXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX2F1dGhvcml6YXRpb25IYW5kbGVyLnBlcmZvcm1BdXRob3JpemF0aW9uUmVxdWVzdChjb25maWcsIHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9zdG9yZS5yZW1vdmVUb2tlbigpO1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuY29uZmlnLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IHRoaXMuY29uZmlnLnJlZGlyZWN0VXJsO1xuICAgIGNvbnN0IGxvZ291dFVybCA9XG4gICAgICBjb25maWcuZW5kU2Vzc2lvbkVuZHBvaW50ICtcbiAgICAgICc/cG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpPScgK1xuICAgICAgZW5jb2RlVVJJKHJlZGlyZWN0VXJsKTtcbiAgICBpZiAodGhpcy5hcHBTZXJ2aWNlLmlzTmF0aXZlKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lciA9IEFwcC5hZGRMaXN0ZW5lcignYXBwVXJsT3BlbicsICgpID0+IHtcbiAgICAgICAgRGV2aWNlLmdldEluZm8oKS50aGVuKChpbmZvKSA9PiB7XG4gICAgICAgICAgaWYgKGluZm8ucGxhdGZvcm0gPT09ICdpb3MnKSB7XG4gICAgICAgICAgICBCcm93c2VyLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGlzdGVuZXIucmVtb3ZlKCk7XG4gICAgICB9KTtcbiAgICAgIEJyb3dzZXIub3Blbih7IHVybDogbG9nb3V0VXJsIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGxvZ291dFVybCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCkge1xuICAgIGlmICghdGhpcy5fZ2V0VG9rZW5Qcm9taXNlKSB7XG4gICAgICB0aGlzLl9nZXRUb2tlblByb21pc2UgPSB0aGlzLmdldEFjY2Vzc1Rva2VuSW50ZXJuYWwoKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9nZXRUb2tlblByb21pc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2dldFRva2VuUHJvbWlzZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNlcnZpY2VQcmluY2lwYWxBY2Nlc3NUb2tlbigpIHtcbiAgICBpZiAoIXRoaXMuX2dldFNlcnZpY2VQcmluY2lwYWxUb2tlblByb21pc2UpIHtcbiAgICAgIHRoaXMuX2dldFNlcnZpY2VQcmluY2lwYWxUb2tlblByb21pc2UgPVxuICAgICAgICB0aGlzLmdldFNlcnZpY2VQcmluY2lwYWxBY2Nlc3NUb2tlbkludGVybmFsKCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fZ2V0U2VydmljZVByaW5jaXBhbFRva2VuUHJvbWlzZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luU2VydmljZVByaW5jaXBhbCgpIHtcbiAgICBjb25zdCBzcCA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFNlcnZpY2VQcmluY2lwYWwoKTtcbiAgICBpZiAoc3ApIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUoXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB0aGlzLmNvbmZpZy5zZXJ2aWNlUHJpbmNpcGFsUmVxdWVzdGVkU2NvcGVzXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXRCeUNsaWVudENyZWRlbnRpYWxzKFxuICAgICAgICBzcC5pZCxcbiAgICAgICAgc3Auc2VjcmV0LFxuICAgICAgICBzY29wZVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuX3N0b3JlLnNldFRva2VuKHJlcywgdGhpcy5fc2VydmljZVByaW5jaXBhbFRva2VuSWQpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoJ1NlcnZpY2UgcHJpbmNpcGFsIGlzIG5vdCByZWdpc3RlcmVkIScpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2dpbkFzU2VydmljZVByaW5jaXBhbCgpIHtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFRva2VuKHRoaXMuX3NlcnZpY2VQcmluY2lwYWxUb2tlbklkKTtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvZ2luU2VydmljZVByaW5jaXBhbCgpO1xuICAgIH1cbiAgICB0aGlzLl9zdG9yZS5zZXREZWZhdWx0SWRlbnRpdHlJZCh0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0T3RwKHR5cGU6IE90cFR5cGUsIGV4cGlyZXNJbiA9IC0xKSB7XG4gICAgbGV0IHVybCA9IHRoaXMuY29uZmlnLmdldFNlcnZlclVybChgL290cC9jcmVhdGU/dHlwZT0ke3R5cGV9YCk7XG4gICAgaWYgKGV4cGlyZXNJbiA+IDApIHtcbiAgICAgIHVybCArPSBgJmV4cGlyZXNJbj0ke2V4cGlyZXNJbn1gO1xuICAgIH1cbiAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PE90cFJlc3BvbnNlPih1cmwpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRPdHBTdGF0dXMoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmdldFNlcnZlclVybChgL290cC9zdGF0dXMvJHtpZH1gKTtcbiAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLmh0dHAuZ2V0PE90cFN0YXR1cz4odXJsKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0T3RwVXJsKHJlZGlyZWN0VXJsOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbmNvZGVkID0gZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJsKTtcbiAgICBjb25zdCB1cmwgPSBgL290cC9hdXRoP290cFZhbHVlPSR7cGFzc3dvcmR9JnJldHVyblVybD0ke2VuY29kZWR9YDtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0U2VydmVyVXJsKHVybCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RhcnRTZXJ2aWNlUHJpbmNpcGFsUmVnaXN0cmF0aW9uKCkge1xuICAgIGNvbnN0IHNwID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0U2VydmljZVByaW5jaXBhbCgpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldFJlZ2lzdHJhdGlvbkNvZGUoc3A/LmlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZVNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb24oZGV2aWNlQ29kZTogRGV2aWNlQ29kZSkge1xuICAgIGNvbnN0IHRva2VuUmVzID0gYXdhaXQgdGhpcy53YWl0Rm9yRGV2aWNlVG9rZW4oZGV2aWNlQ29kZSk7XG4gICAgY29uc3QgcmVnUmVzID0gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5yZWdpc3RlclNlcnZpY2VQcmluY2lwYWwoXG4gICAgICB0b2tlblJlcy5hY2Nlc3NUb2tlblxuICAgICk7XG5cbiAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRTZXJ2aWNlUHJpbmNpcGFsKHtcbiAgICAgIGlkOiByZWdSZXMuY2xpZW50SWQsXG4gICAgICBzZWNyZXQ6IHJlZ1Jlcy5jbGllbnRTZWNyZXQsXG4gICAgICBleHBpcmVzQXQ6IHJlZ1Jlcy5zZWNyZXRFeHBpcmF0aW9uRGF0ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVTZXJ2aWNlUHJpbmNpcGFsUmVnaXN0cmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9zdG9yZS5yZW1vdmVTZXJ2aWNlUHJpbmNpcGFsKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2VydmljZVByaW5jaXBhbFJlZ2lzdHJhdGlvblN0YXR1cygpIHtcbiAgICBjb25zdCBzcCA9IGF3YWl0IHRoaXMuX3N0b3JlLmdldFNlcnZpY2VQcmluY2lwYWwoKTtcbiAgICByZXR1cm4gbmV3IFNlcnZpY2VQcmluY2lwYWxSZWdpc3RyYXRpb25TdGF0dXMoc3ApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0YXJ0RGV2aWNlQ29kZUxvZ2luKCkge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWcucmVxdWVzdGVkU2NvcGVzKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy50b2tlbkNsaWVudC5nZXREZXZpY2VDb2RlKHNjb3BlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZURldmljZUNvZGVMb2dpbihkZXZpY2VDb2RlOiBEZXZpY2VDb2RlKSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy53YWl0Rm9yRGV2aWNlVG9rZW4oZGV2aWNlQ29kZSk7XG4gICAgYXdhaXQgdGhpcy5fc3RvcmUuc2V0VG9rZW4ocmVzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckRldmljZVRva2VuKGRldmljZUNvZGU6IERldmljZUNvZGUpIHtcbiAgICBsZXQgcmVzOiBUb2tlblJlc3BvbnNlIHwgbnVsbCA9IG51bGw7XG4gICAgZG8ge1xuICAgICAgaWYgKGRldmljZUNvZGUuaXNFeHBpcmVkKCkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0RldmljZSBjb2RlIGlzIGV4cGlyZWQhJyk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMudG9rZW5DbGllbnQuZ2V0QnlEZXZpY2VDb2RlKGRldmljZUNvZGUuZGV2aWNlQ29kZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBBcHBBdXRoRXJyb3IgJiZcbiAgICAgICAgICBlcnJvci5tZXNzYWdlID09PSAnYXV0aG9yaXphdGlvbl9wZW5kaW5nJ1xuICAgICAgICApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmRlbGF5KDIwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoIXJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUF1dGhvcml6YXRpb25SZXF1ZXN0KCk6IEF1dGhvcml6YXRpb25SZXF1ZXN0IHtcbiAgICBjb25zdCByZWRpcmVjdFVyaSA9IHRoaXMuY29uZmlnLnJlZGlyZWN0VXJsO1xuXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgcmVzcG9uc2VfbW9kZTogJ2ZyYWdtZW50JyxcbiAgICAgIHByb21wdDogJ2NvbnNlbnQnLFxuICAgICAgYWNjZXNzX3R5cGU6ICdvZmZsaW5lJyxcbiAgICAgIGF1dGhfcHJvdmlkZXJfaGludDogdGhpcy5jb25maWcuYXV0aFByb3ZpZGVySGludCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBBdXRob3JpemF0aW9uUmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNvbmZpZy5jbGllbnRJZCxcbiAgICAgICAgcmVkaXJlY3RfdXJpOiByZWRpcmVjdFVyaSxcbiAgICAgICAgcmVzcG9uc2VfdHlwZTogQXV0aG9yaXphdGlvblJlcXVlc3QuUkVTUE9OU0VfVFlQRV9DT0RFLFxuICAgICAgICBzY29wZTogdGhpcy5wcmVwYXJlU2NvcGUodHJ1ZSwgdGhpcy5jb25maWcucmVxdWVzdGVkU2NvcGVzKSxcbiAgICAgICAgZXh0cmFzOiBwYXJhbXMgYXMgU3RyaW5nTWFwLFxuICAgICAgfSxcbiAgICAgIHRoaXMuX2NyeXB0byxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRTZXJ2aWNlUHJpbmNpcGFsQWNjZXNzVG9rZW5JbnRlcm5hbCgpIHtcbiAgICBsZXQgdG9rZW4gPSBhd2FpdCB0aGlzLl9zdG9yZS5nZXRUb2tlbih0aGlzLl9zZXJ2aWNlUHJpbmNpcGFsVG9rZW5JZCk7XG4gICAgaWYgKCF0b2tlbj8uaXNWYWxpZCgpKSB7XG4gICAgICB0b2tlbiA9IGF3YWl0IHRoaXMubG9naW5TZXJ2aWNlUHJpbmNpcGFsKCk7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbj8uYWNjZXNzVG9rZW47XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFjY2Vzc1Rva2VuSW50ZXJuYWwoKSB7XG4gICAgbGV0IHRva2VuID0gYXdhaXQgdGhpcy5fc3RvcmUuZ2V0VG9rZW4oKTtcbiAgICBpZiAodG9rZW4gJiYgIXRva2VuLmlzVmFsaWQoKSkge1xuICAgICAgdG9rZW4gPSBhd2FpdCB0aGlzLmxvZ2luV2l0aFJlZnJlc2hUb2tlbih0b2tlbik7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbj8uYWNjZXNzVG9rZW4gPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9naW5XaXRoUmVmcmVzaFRva2VuKHRva2VuOiBUb2tlblJlc3BvbnNlKSB7XG4gICAgaWYgKCF0aGlzLl9yZWZyZXNoVG9rZW5Qcm9taXNlKSB7XG4gICAgICB0aGlzLl9yZWZyZXNoVG9rZW5Qcm9taXNlID0gdGhpcy5sb2dpbldpdGhSZWZyZXNoVG9rZW5JbnRlcm5hbCh0b2tlbik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVmcmVzaFRva2VuUHJvbWlzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fcmVmcmVzaFRva2VuUHJvbWlzZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2dpbldpdGhSZWZyZXNoVG9rZW5JbnRlcm5hbCh0b2tlbjogVG9rZW5SZXNwb25zZSkge1xuICAgIGlmICh0b2tlbj8ucmVmcmVzaFRva2VuKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRva2VuQ2xpZW50LmdldEJ5UmVmcmVzaFRva2VuKFxuICAgICAgICAgIHRva2VuLnJlZnJlc2hUb2tlblxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLl9zdG9yZS5zZXRUb2tlbihyZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnTnVjbGV1cy5JZGVudGl0eTogRmFpbGVkIHRvIGxvZ2luIHdpdGggcmVmcmVzaCB0b2tlbi4nLFxuICAgICAgICAgIGVyclxuICAgICAgICApO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBpZiAoKGVyciBhcyBhbnkpLm1lc3NhZ2UgPT09ICdpbnZhbGlkX2dyYW50Jykge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9nb3V0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdOdWNsZXVzLklkZW50aXR5OiBUaGVyZSBpcyBubyByZWZyZXNoIHRva2VuIGF2YWlsYWJsZS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVIYXNoKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgYXJyID0gdXJsLnNwbGl0KCcjJyk7XG4gICAgaWYgKGFyci5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBoYXNoID0gYXJyWzFdO1xuICAgICAgaWYgKGhhc2guc3RhcnRzV2l0aCgnY29kZT0nKSkge1xuICAgICAgICByZXR1cm4gaGFzaDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUxhdW5jaENvZGVIYXNoKCkge1xuICAgIGlmICh0aGlzLmFwcFNlcnZpY2UuaXNOYXRpdmUgJiYgdGhpcy5hcHBTZXJ2aWNlLmxhdW5jaFVybCkge1xuICAgICAgY29uc3QgaGFzaCA9IHRoaXMuZ2V0Q29kZUhhc2godGhpcy5hcHBTZXJ2aWNlLmxhdW5jaFVybCk7XG4gICAgICBpZiAoaGFzaCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAnTnVjbGV1cy5JZGVudGl0eTogR290IGF1dGhvcml6YXRpb24gY29kZSBmcm9tIGxhdW5jaFVybCwgd2lsbCBhc3NpZ24gaXQgdG8gaGFzaC4nXG4gICAgICAgICk7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJyMnICsgaGFzaDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVTY29wZShvZmZsaW5lQWNjZXNzOiBib29sZWFuLCBhZGl0aW9uYWxTY29wZT86IHN0cmluZykge1xuICAgIGxldCBzY29wZSA9ICdvcGVuaWQnO1xuICAgIGlmIChvZmZsaW5lQWNjZXNzKSB7XG4gICAgICBzY29wZSArPSAnIG9mZmxpbmVfYWNjZXNzJztcbiAgICB9XG4gICAgaWYgKGFkaXRpb25hbFNjb3BlKSB7XG4gICAgICBzY29wZSArPSAnICcgKyBhZGl0aW9uYWxTY29wZTtcbiAgICB9XG4gICAgcmV0dXJuIHNjb3BlO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxheShtaWxpc2Vjb25kczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSwgbWlsaXNlY29uZHMpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -657,7 +657,7 @@ class NucleusIdentityService {
657
657
  this._initialized = true;
658
658
  }
659
659
  async loginWithSecret(provider, secret) {
660
- this._store.removeToken();
660
+ this._store.removeToken().catch(() => console.log('No token to remove.'));
661
661
  const assertionToken = await this.getServicePrincipalAccessToken();
662
662
  const scope = this.prepareScope(true, this.config?.requestedScopes);
663
663
  const res = await this.tokenClient.getBySecret(provider, secret, assertionToken, scope);
@@ -1 +1 @@
1
- {"version":3,"file":"kolektor-nucleus-identity.mjs","sources":["../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/nucleus-identity-config.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/models/service-principal.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/location.service.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/nucleus-authorization-notifier.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/angular-requestor.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/authorization-service-configuration.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/oidc-configuration.service.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/models/identity.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/secrets-store.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/models/device-code.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/models/client-registration.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/token-client.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/nucleus-identity.service.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/nucleus-token-interceptor.service.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/nucleus-identity.module.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/models/otp.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/kolektor-nucleus-identity.ts"],"sourcesContent":["export class NucleusIdentityConfig {\n public authority!: string;\n\n public clientId!: string;\n\n public redirectUri?: string;\n\n public androidRedirectUri?: string;\n\n public iOSRedirectUri?: string;\n\n public httpInterceptorUrls?: string[] = [];\n\n public automaticLoginOnHttp401 = false;\n\n public requestedScopes?: string;\n\n public servicePrincipalRequestedScopes?: string;\n\n public authProviderHint?: string;\n}\n","export class ServicePrincipal {\n public id!: string;\n public secret!: string;\n public expiresAt!: Date;\n}\n\nexport class ServicePrincipalRegistrationStatus {\n public id!: string;\n public isRegistered = false;\n public expiresAt!: Date;\n\n constructor(servicePrincipal: ServicePrincipal | null) {\n if (servicePrincipal) {\n this.isRegistered = true;\n this.id = servicePrincipal.id;\n this.expiresAt = servicePrincipal.expiresAt;\n }\n }\n\n public get isExpired() {\n return false;\n }\n}\n","import { LocationLike } from '@openid/appauth';\nimport { NucleusAppService } from '@kolektor/nucleus-common';\nimport { Browser } from '@capacitor/browser';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LocationService implements LocationLike {\n constructor(private appService: NucleusAppService) {}\n\n get hash() {\n return window.location.hash;\n }\n set hash(v) {\n window.location.hash = v;\n }\n\n get host() {\n return window.location.host;\n }\n set host(v) {\n window.location.host = v;\n }\n\n get origin() {\n return window.location.origin;\n }\n\n get hostname() {\n return window.location.hostname;\n }\n set hostname(v) {\n window.location.hostname = v;\n }\n\n get pathname() {\n return window.location.pathname;\n }\n set pathname(v) {\n window.location.pathname = v;\n }\n\n get port() {\n return window.location.port;\n }\n set port(v) {\n window.location.port = v;\n }\n\n get protocol() {\n return window.location.protocol;\n }\n set protocol(v) {\n window.location.protocol = v;\n }\n\n get search() {\n return window.location.search;\n }\n set search(v) {\n window.location.search = v;\n }\n\n assign(url: string): void {\n if (this.appService.isNative) {\n Browser.open({ url });\n } else {\n window.location.assign(url);\n }\n }\n}\n","import { AuthorizationNotifier } from '@openid/appauth';\nimport { AuthorizationResponse, AuthorizationError } from '@openid/appauth';\nimport { AuthorizationRequest } from '@openid/appauth';\n\nexport class NucleusAuthorizationNotifier extends AuthorizationNotifier {\n response: AuthorizationResponse | null = null;\n request!: AuthorizationRequest;\n error: AuthorizationError | null = null;\n\n constructor() {\n super();\n this.setAuthorizationListener((request, response, error) => {\n console.log('Authorization request complete ', request, response, error);\n this.response = response;\n this.request = request;\n this.error = error;\n });\n }\n}\n","import { AppAuthError, Requestor } from '@openid/appauth';\nimport { Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { HttpHeaders } from '@capacitor/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AngularRequestor extends Requestor {\n constructor(private http: HttpClient) {\n super();\n }\n\n // eslint-disable-next-line no-undef\n xhr<T>(settings: JQueryAjaxSettings): Promise<T> {\n let method = 'GET';\n if (settings.method) {\n method = settings.method;\n }\n\n return new Promise<T>((resolve, reject) => {\n this.http\n .request<T>(method, settings.url as string, {\n body: settings.data,\n headers: settings.headers as HttpHeaders,\n })\n .subscribe({\n next: (res) => resolve(res),\n error: (err) => {\n let e = new AppAuthError(err);\n if (err instanceof HttpErrorResponse) {\n e = new AppAuthError(err.error?.error || err.statusText);\n }\n reject(e);\n },\n });\n });\n }\n}\n","import {\n AuthorizationServiceConfiguration,\n AuthorizationServiceConfigurationJson,\n JQueryRequestor,\n Requestor,\n} from '@openid/appauth';\n\nconst WELL_KNOWN_PATH = '.well-known';\nconst OPENID_CONFIGURATION = 'openid-configuration';\n\nexport interface NucleusAuthorizationServiceConfigurationJson\n extends AuthorizationServiceConfigurationJson {\n device_authorization_endpoint?: string;\n registration_endpoint?: string;\n}\n\nexport class NucleusAuthorizationServiceConfiguration extends AuthorizationServiceConfiguration {\n constructor(request: NucleusAuthorizationServiceConfigurationJson) {\n super(request);\n this.deviceAuthorizationEndpoint = request.device_authorization_endpoint;\n this.registrationEndpoint = request.registration_endpoint;\n }\n\n public deviceAuthorizationEndpoint?: string;\n public registrationEndpoint?: string;\n\n static override async fetchFromIssuer(\n openIdIssuerUrl: string,\n requestor?: Requestor\n ) {\n const fullUrl = `${openIdIssuerUrl}/${WELL_KNOWN_PATH}/${OPENID_CONFIGURATION}`;\n const requestorToUse = requestor || new JQueryRequestor();\n const json =\n await requestorToUse.xhr<NucleusAuthorizationServiceConfigurationJson>({\n url: fullUrl,\n dataType: 'json',\n method: 'GET',\n });\n return new NucleusAuthorizationServiceConfiguration(json);\n }\n\n override toJson() {\n const res = super.toJson() as NucleusAuthorizationServiceConfigurationJson;\n res.device_authorization_endpoint = this.deviceAuthorizationEndpoint;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return res as any;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NucleusAppService } from '@kolektor/nucleus-common';\nimport { NucleusIdentityConfig } from '../nucleus-identity-config';\nimport { AngularRequestor } from './angular-requestor';\nimport { NucleusAuthorizationServiceConfiguration } from './authorization-service-configuration';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class OidcConfigurationService {\n constructor(\n private requestor: AngularRequestor,\n private config: NucleusIdentityConfig,\n private appService: NucleusAppService\n ) {}\n\n private _configuration: NucleusAuthorizationServiceConfiguration | null =\n null;\n\n public async getConfiguration() {\n await this.assureConfiguration();\n if (!this._configuration) {\n throw Error('Failed to get OIDC configuration!');\n }\n\n return this._configuration;\n }\n\n public get clientId() {\n return this.config.clientId;\n }\n\n public get requestedScopes() {\n return this.config.requestedScopes;\n }\n\n public get servicePrincipalRequestedScopes() {\n return this.config.servicePrincipalRequestedScopes;\n }\n\n public get authProviderHint() {\n return this.config.authProviderHint;\n }\n\n public get redirectUrl() {\n let uri = window.location.href;\n const platform = this.appService.platform;\n if (platform === 'android' && this.config.androidRedirectUri) {\n uri = this.config.androidRedirectUri;\n } else if (platform === 'ios' && this.config.iOSRedirectUri) {\n uri = this.config.iOSRedirectUri;\n } else if (this.config.redirectUri) {\n uri = this.config.redirectUri;\n }\n return this.NormalizeRedirectUri(uri);\n }\n\n public getServerUrl(relativeUri: string | null = null) {\n let authority = this.config.authority;\n if (!authority || authority === 'origin') {\n authority = window.origin;\n }\n\n let url = new URL(authority);\n\n if (relativeUri) {\n url = new URL(relativeUri, url);\n }\n\n return url.href;\n }\n\n private NormalizeRedirectUri(uri: string) {\n const i = uri.indexOf('#');\n if (i > 0) {\n uri = uri.substring(0, i);\n }\n return uri;\n }\n\n private async assureConfiguration() {\n if (this._configuration != null) {\n return;\n }\n let authority = this.getServerUrl();\n if (authority[authority.length - 1] === '/') {\n authority = authority.slice(0, -1);\n }\n try {\n this._configuration =\n await NucleusAuthorizationServiceConfiguration.fetchFromIssuer(\n authority,\n this.requestor\n );\n } catch (e) {\n console.error(\n 'Nucleus.Identity: Cannot load OIDC configuration: ' +\n (e as Error).message\n );\n throw e;\n }\n }\n}\n","import { TokenResponse } from '@openid/appauth';\n\nexport class Claim {\n public name: string;\n public values: string[];\n\n constructor(name: string, values: string[]) {\n this.name = name;\n this.values = values;\n }\n}\n\nexport class Identity {\n public name: string;\n public subject: string;\n\n public claims: Claim[] = [];\n\n constructor(res: TokenResponse) {\n if (!res.idToken) {\n throw Error('There is no id token in the token response!');\n }\n\n const token = this.decodeToken(res.idToken);\n\n this.name = token.name;\n this.subject = token.sub;\n for (const key in token) {\n if ({}.hasOwnProperty.call(token, key)) {\n let vals = token[key];\n\n if (!Array.isArray(vals)) {\n vals = [vals];\n }\n\n const claim = new Claim(key, vals);\n this.claims.push(claim);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private decodeToken(jwt: string): any {\n if (!jwt) {\n throw new Error(\n 'NucleusIdentity: There was no identity token in the response!'\n );\n }\n\n try {\n const arr = jwt.split('.');\n // var header = arr[0];\n const payload = this.b64DecodeUnicode(arr[1]);\n // var signature = arr[2];\n return JSON.parse(payload);\n } catch (error) {\n console.error('Error while decoding identity token', error);\n console.error('Error while decoding identity token JWT', jwt);\n }\n }\n\n private b64DecodeUnicode(str: string) {\n str = str.replace(/-/g, '+').replace(/_/g, '/'); // Qlector fix :)\n return decodeURIComponent(\n atob(str)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join('')\n );\n }\n}\n","import 'capacitor-secure-storage-plugin';\nimport { TokenResponse, TokenResponseJson } from '@openid/appauth';\nimport { ServicePrincipal } from '../models/service-principal';\nimport { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';\nimport { Identity } from '../models/identity';\n\nexport class SecretsStore {\n constructor(clientId: string) {\n this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login with existing tokens will fail\n this._servicePrincipalKey = `${this._tokenStorageKeyPrefix}.SvcP`;\n this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;\n this._defaultIdentityId = localStorage.getItem(\n this._defaultIdentityIdStorageKey\n );\n }\n private _tokenStorageKeyPrefix: string;\n private _tokens: { [id: string]: TokenResponse | null } = {};\n private _identities: { [id: string]: Identity } = {};\n private _servicePrincipalKey;\n private _servicePrincipal: ServicePrincipal | null = null;\n // this specify which identity id is used by default, when If id is not specified in getToken or getIdentity\n private _defaultIdentityId: string | null;\n private _defaultIdentityIdStorageKey: string;\n\n public get defaultIdentityId() {\n return this._defaultIdentityId;\n }\n\n public removeServicePrincipal() {\n this._servicePrincipal = null;\n return this.clear(this._servicePrincipalKey);\n }\n\n public async setServicePrincipal(servicePrincipal: ServicePrincipal) {\n this._servicePrincipal = servicePrincipal;\n await this.save(this._servicePrincipalKey, servicePrincipal);\n }\n\n public async getServicePrincipal() {\n if (!this._servicePrincipal) {\n this._servicePrincipal = await this.load<ServicePrincipal>(\n this._servicePrincipalKey\n );\n }\n return this._servicePrincipal;\n }\n\n public setToken(token: TokenResponse, id: string | null = null) {\n return this.setTokenInternal(token, true, id);\n }\n\n public getIdentity(id: string | null = null): Identity | null {\n const key = this.getTokenKey(id);\n return this._identities[key];\n }\n\n public setDefaultIdentityId(id: string | null) {\n this._defaultIdentityId = id;\n if (this._defaultIdentityId) {\n localStorage.setItem(\n this._defaultIdentityIdStorageKey,\n this._defaultIdentityId\n );\n } else {\n localStorage.removeItem(this._defaultIdentityIdStorageKey);\n }\n }\n\n public async getToken(id: string | null = null) {\n const key = this.getTokenKey(id);\n\n // if token is not there or it is invalid we check storage again before returning\n if (!this._tokens[key] || !this._tokens[key]?.isValid()) {\n await this.reloadTokenFromStorage(id);\n }\n return this._tokens[key];\n }\n\n public removeToken(id: string | null = null) {\n const key = this.getTokenKey(id);\n delete this._tokens[key];\n delete this._identities[key];\n return this.clear(key);\n }\n\n private async reloadTokenFromStorage(id: string | null) {\n const key = this.getTokenKey(id);\n const storedToken = await this.load<TokenResponseJson>(key);\n if (storedToken) {\n const res = new TokenResponse(storedToken);\n if (res?.accessToken || res?.idToken) {\n await this.setTokenInternal(res, false, id);\n }\n }\n return null;\n }\n\n private async setTokenInternal(\n token: TokenResponse,\n save: boolean,\n id: string | null\n ) {\n const key = this.getTokenKey(id);\n if (token == null) {\n await this.removeToken(id);\n } else {\n this._tokens[key] = token;\n this._identities[key] = new Identity(token);\n if (save) {\n try {\n await this.save(key, token.toJson());\n } catch (e) {\n console.warn('Nucleus.Identity: Could not save to SecureStorage.');\n }\n }\n }\n }\n\n private getTokenKey(id: string | null) {\n if (!id) {\n id = this._defaultIdentityId;\n }\n return id\n ? `${this._tokenStorageKeyPrefix}.${id}`\n : this._tokenStorageKeyPrefix;\n }\n\n private clear(key: string) {\n return SecureStoragePlugin.remove({ key });\n }\n\n private save<T>(key: string, value: T): Promise<{ value: boolean }> {\n return SecureStoragePlugin.set({ key, value: JSON.stringify(value) });\n }\n\n private async load<T>(key: string) {\n try {\n const x = await SecureStoragePlugin.get({ key });\n if (x?.value) {\n return JSON.parse(x.value) as T;\n } else {\n return null;\n }\n } catch {\n return null;\n }\n }\n}\n","import { nowInSeconds } from '@openid/appauth';\n\nexport interface DeviceCodeJson {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete: string;\n expires_in: string;\n message: string;\n}\n\nexport class DeviceCode {\n constructor(response: DeviceCodeJson) {\n this.deviceCode = response.device_code;\n this.userCode = response.user_code;\n this.verificationUrl = response.verification_uri;\n this.verificationUrlComplete = response.verification_uri_complete;\n this.expiresIn = parseInt(response.expires_in, 10);\n this.issuedAt = nowInSeconds();\n }\n\n private expiresIn: number;\n private issuedAt: number;\n\n public deviceCode: string;\n public userCode: string;\n public verificationUrl: string;\n public verificationUrlComplete: string;\n\n isExpired(buffer = 60) {\n return this.secondsLeft(buffer) <= 0;\n }\n\n secondsLeft(buffer = 60) {\n const now = nowInSeconds();\n return this.issuedAt + this.expiresIn - buffer - now;\n }\n}\n","export interface ClientRegistrationResponseJson {\n client_id: string;\n client_secret: string;\n client_secret_expires_at: number;\n}\n\nexport class ClientRegistrationResponse {\n constructor(response: ClientRegistrationResponseJson) {\n this.clientId = response.client_id;\n this.clientSecret = response.client_secret;\n this.secretExpirationDate = new Date(\n response.client_secret_expires_at * 1000\n );\n }\n\n clientId: string;\n clientSecret: string;\n secretExpirationDate: Date;\n}\n","import {\n AppAuthError,\n BaseTokenRequestHandler,\n BasicQueryStringUtils,\n GRANT_TYPE_AUTHORIZATION_CODE,\n GRANT_TYPE_REFRESH_TOKEN,\n QueryStringUtils,\n StringMap,\n TokenErrorJson,\n TokenRequest,\n TokenRequestHandler,\n} from '@openid/appauth';\nimport { OidcConfigurationService } from './oidc-configuration.service';\nimport { AngularRequestor } from './angular-requestor';\nimport { Injectable } from '@angular/core';\nimport { DeviceCode, DeviceCodeJson } from '../models/device-code';\nimport {\n ClientRegistrationResponse,\n ClientRegistrationResponseJson,\n} from '../models/client-registration';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TokenClient {\n constructor(\n private requestor: AngularRequestor,\n private config: OidcConfigurationService\n ) {\n this._tokenHandler = new BaseTokenRequestHandler(requestor);\n this._utils = new BasicQueryStringUtils();\n }\n\n private _tokenHandler: TokenRequestHandler;\n private _utils: QueryStringUtils;\n\n public async getByAuthorizationCode(\n redirectUrl: string,\n code: string,\n codeVerifier?: string\n ) {\n const config = await this.config.getConfiguration();\n const redirectUri = redirectUrl;\n const req = new TokenRequest({\n client_id: this.config.clientId,\n redirect_uri: redirectUri,\n grant_type: GRANT_TYPE_AUTHORIZATION_CODE,\n code,\n extras: codeVerifier ? { code_verifier: codeVerifier } : undefined,\n });\n return await this._tokenHandler.performTokenRequest(config, req);\n }\n\n public async getByRefreshToken(refreshToken: string) {\n const config = await this.config.getConfiguration();\n const redirectUri = this.config.redirectUrl;\n const req = new TokenRequest({\n client_id: this.config.clientId,\n redirect_uri: redirectUri,\n grant_type: GRANT_TYPE_REFRESH_TOKEN,\n refresh_token: refreshToken,\n });\n return await this._tokenHandler.performTokenRequest(config, req);\n }\n\n public async getByClientCredentials(\n clientId: string,\n clientSecret: string,\n scope: string\n ) {\n const config = await this.config.getConfiguration();\n const req = new TokenRequest({\n client_id: clientId,\n redirect_uri: '',\n grant_type: 'client_credentials',\n extras: {\n client_secret: clientSecret,\n scope,\n },\n });\n return await this._tokenHandler.performTokenRequest(config, req);\n }\n\n public async getBySecret(\n provider: string,\n secret: string,\n assertionToken: string,\n scope: string\n ) {\n const config = await this.config.getConfiguration();\n const req = new TokenRequest({\n client_id: this.config.clientId,\n redirect_uri: '',\n grant_type: 'urn:kolektor:nucleus:secret',\n extras: {\n secret_provider: provider,\n secret_value: secret,\n client_assertion_type:\n 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',\n client_assertion: assertionToken,\n scope,\n },\n });\n\n return await this._tokenHandler.performTokenRequest(config, req);\n }\n\n public async getByDeviceCode(deviceCode: string) {\n const config = await this.config.getConfiguration();\n const req = new TokenRequest({\n client_id: this.config.clientId,\n redirect_uri: '',\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n extras: {\n device_code: deviceCode,\n },\n });\n return await this._tokenHandler.performTokenRequest(config, req);\n }\n\n public async registerServicePrincipal(token: string) {\n const config = await this.config.getConfiguration();\n\n const response = await this.requestor.xhr<\n ClientRegistrationResponseJson | TokenErrorJson\n >({\n url: config.registrationEndpoint,\n method: 'POST',\n dataType: 'json',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n // data: this._utils.stringify(map)\n });\n\n if ((response as TokenErrorJson).error === undefined) {\n return new ClientRegistrationResponse(\n response as ClientRegistrationResponseJson\n );\n } else {\n throw new AppAuthError((response as TokenErrorJson).error);\n }\n }\n\n public async getRegistrationCode(\n existingServicePrincipalId: string | null = null\n ) {\n const params = {\n custom_action: 'sp_register',\n service_principal_id: existingServicePrincipalId,\n };\n\n return this.getDeviceCodeInternal(params as StringMap);\n }\n\n public async getDeviceCode(scope: string) {\n const params = {\n scope,\n };\n return this.getDeviceCodeInternal(params);\n }\n\n private async getDeviceCodeInternal(params: StringMap) {\n const config = await this.config.getConfiguration();\n\n params['client_id'] = this.config.clientId;\n const map: StringMap = params;\n\n const response = await this.requestor.xhr<DeviceCodeJson | TokenErrorJson>({\n url: config.deviceAuthorizationEndpoint,\n method: 'POST',\n dataType: 'json',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n data: this._utils.stringify(map),\n });\n\n if ((response as TokenErrorJson).error === undefined) {\n return new DeviceCode(response as DeviceCodeJson);\n } else {\n throw new AppAuthError((response as TokenErrorJson).error);\n }\n }\n}\n","import {\n AppAuthError,\n AuthorizationRequest,\n AuthorizationRequestHandler,\n BasicQueryStringUtils,\n Crypto,\n DefaultCrypto,\n LocalStorageBackend,\n RedirectRequestHandler,\n StringMap,\n TokenResponse,\n} from '@openid/appauth';\n\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { App } from '@capacitor/app';\nimport { Browser } from '@capacitor/browser';\nimport { Device } from '@capacitor/device';\n\nimport { NucleusAppService } from '@kolektor/nucleus-common';\n\nimport { lastValueFrom } from 'rxjs';\n\nimport { DeviceCode } from './models/device-code';\nimport { OtpResponse, OtpStatus, OtpType } from './models/otp';\nimport { ServicePrincipalRegistrationStatus } from './models/service-principal';\n\nimport { LocationService } from './utils/location.service';\nimport { NucleusAuthorizationNotifier } from './utils/nucleus-authorization-notifier';\nimport { OidcConfigurationService } from './utils/oidc-configuration.service';\nimport { SecretsStore } from './utils/secrets-store';\nimport { TokenClient } from './utils/token-client';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NucleusIdentityService {\n constructor(\n private appService: NucleusAppService,\n location: LocationService,\n private http: HttpClient,\n private config: OidcConfigurationService,\n private tokenClient: TokenClient\n ) {\n const storage = new LocalStorageBackend();\n this._crypto = new DefaultCrypto();\n this._authorizationHandler = new RedirectRequestHandler(\n storage,\n new BasicQueryStringUtils(),\n location,\n this._crypto\n );\n this._authorizationHandler.setAuthorizationNotifier(\n this._authorizationNotifier\n );\n this._store = new SecretsStore(config.clientId);\n }\n\n private _authorizationHandler: AuthorizationRequestHandler;\n private _authorizationNotifier = new NucleusAuthorizationNotifier();\n private _crypto: Crypto;\n private _initStarted = false;\n private _initialized = false;\n private _refreshTokenPromise: Promise<TokenResponse | null> | null = null;\n private _getTokenPromise: Promise<string | null> | null = null;\n private _getServicePrincipalTokenPromise: Promise<string> | null = null;\n private _servicePrincipalTokenId = '_svcp';\n private _store: SecretsStore;\n\n public get identity() {\n return this._store.getIdentity();\n }\n\n public get isAuthenticated() {\n return this.identity != null;\n }\n\n public get servicePrincipalIdentity() {\n return this._store.getIdentity(this._servicePrincipalTokenId);\n }\n\n public get isServicePrincipalAuthenticated() {\n return this.servicePrincipalIdentity != null;\n }\n\n public get isIdentityServicePrincipal() {\n return this._store.defaultIdentityId === this._servicePrincipalTokenId;\n }\n\n public async init(startLogin = false): Promise<void> {\n if (this._initStarted || this._initialized) {\n console.warn(\n \"Nucleus.Identity: Auth initialization was already started. Don't call init() multiple times!\"\n );\n return;\n }\n this._initStarted = true;\n\n this.handleLaunchCodeHash();\n await this._authorizationHandler.completeAuthorizationRequestIfPossible();\n\n const authErr = this._authorizationNotifier.error;\n if (authErr) {\n throw new Error(\n 'Authorization err: ' + authErr.error + ': ' + authErr.errorDescription\n );\n } else if (this._authorizationNotifier.response) {\n window.location.hash = '';\n const request = this._authorizationNotifier.request;\n const response = this._authorizationNotifier.response;\n\n const codeVerifier = request.internal\n ? request.internal['code_verifier']\n : undefined;\n const res = await this.tokenClient.getByAuthorizationCode(\n request.redirectUri,\n response.code,\n codeVerifier\n );\n this._store.setDefaultIdentityId(null);\n await this._store.setToken(res);\n } else {\n const res = await this._store.getToken();\n if (!res && startLogin) {\n await this.login();\n }\n }\n this._initialized = true;\n }\n\n public async loginWithSecret(\n provider: string,\n secret: string\n ): Promise<void> {\n this._store.removeToken();\n const assertionToken = await this.getServicePrincipalAccessToken();\n const scope = this.prepareScope(true, this.config?.requestedScopes);\n const res = await this.tokenClient.getBySecret(\n provider,\n secret,\n assertionToken,\n scope\n );\n this._store.setDefaultIdentityId(null);\n await this._store.setToken(res);\n }\n\n public async login(): Promise<void> {\n this._store.removeToken();\n const config = await this.config.getConfiguration();\n const request = this.prepareAuthorizationRequest();\n if (this.appService.isNative) {\n const listener = App.addListener('appUrlOpen', (data) => {\n if (this.appService.platform === 'ios') {\n Browser.close();\n }\n listener.remove();\n const hash = this.getCodeHash(data.url);\n if (hash) {\n const targetUrl =\n window.location.origin + window.location.pathname + '#' + hash;\n window.location.assign(targetUrl);\n window.location.reload();\n } else {\n console.warn(\n 'Nucleus.Identity: Redirect url did not contain authorization code!',\n data\n );\n }\n });\n }\n this._authorizationHandler.performAuthorizationRequest(config, request);\n }\n\n public async logout(): Promise<void> {\n this._store.removeToken();\n const config = await this.config.getConfiguration();\n const redirectUrl = this.config.redirectUrl;\n const logoutUrl =\n config.endSessionEndpoint +\n '?post_logout_redirect_uri=' +\n encodeURI(redirectUrl);\n if (this.appService.isNative) {\n const listener = App.addListener('appUrlOpen', () => {\n Device.getInfo().then((info) => {\n if (info.platform === 'ios') {\n Browser.close();\n }\n });\n listener.remove();\n });\n Browser.open({ url: logoutUrl });\n } else {\n window.location.assign(logoutUrl);\n }\n }\n\n public async getAccessToken() {\n if (!this._getTokenPromise) {\n this._getTokenPromise = this.getAccessTokenInternal();\n }\n try {\n return await this._getTokenPromise;\n } finally {\n this._getTokenPromise = null;\n }\n }\n\n public async getServicePrincipalAccessToken() {\n if (!this._getServicePrincipalTokenPromise) {\n this._getServicePrincipalTokenPromise =\n this.getServicePrincipalAccessTokenInternal();\n }\n try {\n return await this._getServicePrincipalTokenPromise;\n } finally {\n this._getServicePrincipalTokenPromise = null;\n }\n }\n\n public async loginServicePrincipal() {\n const sp = await this._store.getServicePrincipal();\n if (sp) {\n const scope = this.prepareScope(\n false,\n this.config.servicePrincipalRequestedScopes\n );\n const res = await this.tokenClient.getByClientCredentials(\n sp.id,\n sp.secret,\n scope\n );\n await this._store.setToken(res, this._servicePrincipalTokenId);\n return res;\n } else {\n throw Error('Service principal is not registered!');\n }\n }\n\n public async loginAsServicePrincipal() {\n const token = await this._store.getToken(this._servicePrincipalTokenId);\n if (!token) {\n await this.loginServicePrincipal();\n }\n this._store.setDefaultIdentityId(this._servicePrincipalTokenId);\n }\n\n public async getOtp(type: OtpType, expiresIn = -1) {\n let url = this.config.getServerUrl(`/otp/create?type=${type}`);\n if (expiresIn > 0) {\n url += `&expiresIn=${expiresIn}`;\n }\n return lastValueFrom(this.http.get<OtpResponse>(url));\n }\n\n public async getOtpStatus(id: string) {\n const url = this.config.getServerUrl(`/otp/status/${id}`);\n return lastValueFrom(this.http.get<OtpStatus>(url));\n }\n\n public getOtpUrl(redirectUrl: string, password: string) {\n const encoded = encodeURIComponent(redirectUrl);\n const url = `/otp/auth?otpValue=${password}&returnUrl=${encoded}`;\n return this.config.getServerUrl(url);\n }\n\n public async startServicePrincipalRegistration() {\n const sp = await this._store.getServicePrincipal();\n return await this.tokenClient.getRegistrationCode(sp?.id);\n }\n\n public async completeServicePrincipalRegistration(deviceCode: DeviceCode) {\n const tokenRes = await this.waitForDeviceToken(deviceCode);\n const regRes = await this.tokenClient.registerServicePrincipal(\n tokenRes.accessToken\n );\n\n await this._store.setServicePrincipal({\n id: regRes.clientId,\n secret: regRes.clientSecret,\n expiresAt: regRes.secretExpirationDate,\n });\n }\n\n public removeServicePrincipalRegistration() {\n return this._store.removeServicePrincipal();\n }\n\n public async getServicePrincipalRegistrationStatus() {\n const sp = await this._store.getServicePrincipal();\n return new ServicePrincipalRegistrationStatus(sp);\n }\n\n public async startDeviceCodeLogin() {\n const scope = this.prepareScope(true, this.config.requestedScopes);\n return await this.tokenClient.getDeviceCode(scope);\n }\n\n public async completeDeviceCodeLogin(deviceCode: DeviceCode) {\n const res = await this.waitForDeviceToken(deviceCode);\n await this._store.setToken(res);\n }\n\n private async waitForDeviceToken(deviceCode: DeviceCode) {\n let res: TokenResponse | null = null;\n do {\n if (deviceCode.isExpired()) {\n throw Error('Device code is expired!');\n }\n\n try {\n res = await this.tokenClient.getByDeviceCode(deviceCode.deviceCode);\n } catch (error) {\n if (\n error instanceof AppAuthError &&\n error.message === 'authorization_pending'\n ) {\n await this.delay(2000);\n } else {\n throw error;\n }\n }\n } while (!res);\n return res;\n }\n\n private prepareAuthorizationRequest(): AuthorizationRequest {\n const redirectUri = this.config.redirectUrl;\n\n const params = {\n response_mode: 'fragment',\n prompt: 'consent',\n access_type: 'offline',\n auth_provider_hint: this.config.authProviderHint,\n };\n\n return new AuthorizationRequest(\n {\n client_id: this.config.clientId,\n redirect_uri: redirectUri,\n response_type: AuthorizationRequest.RESPONSE_TYPE_CODE,\n scope: this.prepareScope(true, this.config.requestedScopes),\n extras: params as StringMap,\n },\n this._crypto,\n true\n );\n }\n\n private async getServicePrincipalAccessTokenInternal() {\n let token = await this._store.getToken(this._servicePrincipalTokenId);\n if (!token?.isValid()) {\n token = await this.loginServicePrincipal();\n }\n return token?.accessToken;\n }\n\n private async getAccessTokenInternal() {\n let token = await this._store.getToken();\n if (token && !token.isValid()) {\n token = await this.loginWithRefreshToken(token);\n }\n return token?.accessToken ?? null;\n }\n\n private async loginWithRefreshToken(token: TokenResponse) {\n if (!this._refreshTokenPromise) {\n this._refreshTokenPromise = this.loginWithRefreshTokenInternal(token);\n }\n try {\n return await this._refreshTokenPromise;\n } finally {\n this._refreshTokenPromise = null;\n }\n }\n\n private async loginWithRefreshTokenInternal(token: TokenResponse) {\n if (token?.refreshToken) {\n try {\n const res = await this.tokenClient.getByRefreshToken(\n token.refreshToken\n );\n await this._store.setToken(res);\n return res;\n } catch (err) {\n console.warn(\n 'Nucleus.Identity: Failed to login with refresh token.',\n err\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((err as any).message === 'invalid_grant') {\n await this.logout();\n }\n }\n } else {\n console.warn('Nucleus.Identity: There is no refresh token available.');\n }\n return null;\n }\n\n private getCodeHash(url: string) {\n const arr = url.split('#');\n if (arr.length > 1) {\n const hash = arr[1];\n if (hash.startsWith('code=')) {\n return hash;\n }\n }\n return null;\n }\n\n private handleLaunchCodeHash() {\n if (this.appService.isNative && this.appService.launchUrl) {\n const hash = this.getCodeHash(this.appService.launchUrl);\n if (hash) {\n console.log(\n 'Nucleus.Identity: Got authorization code from launchUrl, will assign it to hash.'\n );\n window.location.hash = '#' + hash;\n }\n }\n }\n\n private prepareScope(offlineAccess: boolean, aditionalScope?: string) {\n let scope = 'openid';\n if (offlineAccess) {\n scope += ' offline_access';\n }\n if (aditionalScope) {\n scope += ' ' + aditionalScope;\n }\n return scope;\n }\n\n private delay(miliseconds: number) {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n resolve();\n }, miliseconds);\n });\n }\n}\n","import {\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, from, throwError } from 'rxjs';\nimport { catchError, mergeMap } from 'rxjs/operators';\nimport { NucleusIdentityConfig } from './nucleus-identity-config';\nimport { NucleusIdentityService } from './nucleus-identity.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NucleusTokenInterceptor implements HttpInterceptor {\n constructor(\n private auth: NucleusIdentityService,\n private config: NucleusIdentityConfig\n ) {\n this._authority = config.authority.toLowerCase();\n this._interceptUrls = config.httpInterceptorUrls?.map((x) =>\n x.toLowerCase()\n );\n }\n\n private _authority: string;\n private _authorityInterceptPaths = [\n '/api',\n '/manage',\n '/otp/create',\n '/otp/status',\n ];\n private _interceptUrls?: string[];\n\n public intercept(\n req: HttpRequest<unknown>,\n next: HttpHandler\n ): Observable<HttpEvent<unknown>> {\n if (this.shouldIntercept(req.url)) {\n const res = this.authorizeRequest(this.auth.getAccessToken(), req, next);\n return this.checkUnauthorized(res);\n }\n return next.handle(req);\n }\n\n private shouldIntercept(url: string): boolean {\n url = url.toLowerCase();\n\n if (url.startsWith(this._authority)) {\n const pathname = new URL(url).pathname;\n return this._authorityInterceptPaths.some((x) => pathname.startsWith(x));\n }\n\n if (this._interceptUrls && this._interceptUrls.length > 0) {\n return (\n this.config.httpInterceptorUrls?.some((x) => url.startsWith(x)) ?? false\n );\n }\n return false;\n }\n\n private authorizeRequest(\n getToken: Promise<string | null>,\n req: HttpRequest<unknown>,\n next: HttpHandler\n ): Observable<HttpEvent<unknown>> {\n return from(getToken).pipe(\n mergeMap((token) => {\n if (token) {\n const headers = req.headers.set('Authorization', `Bearer ${token}`);\n req = req.clone({ headers });\n }\n return next.handle(req);\n })\n );\n }\n\n private checkUnauthorized(\n response: Observable<HttpEvent<unknown>>\n ): Observable<HttpEvent<unknown>> {\n return response.pipe(\n catchError((err) => {\n if (err instanceof HttpErrorResponse && err.status === 401) {\n if (this.config.automaticLoginOnHttp401) {\n this.auth.login();\n }\n }\n return throwError(() => err);\n })\n );\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { NucleusTokenInterceptor } from './nucleus-token-interceptor.service';\nimport { NucleusIdentityConfig } from './nucleus-identity-config';\n\n@NgModule({\n imports: [],\n declarations: [],\n exports: [],\n})\nexport class NucleusIdentityModule {\n static forRoot(\n config: NucleusIdentityConfig\n ): ModuleWithProviders<NucleusIdentityModule> {\n return {\n ngModule: NucleusIdentityModule,\n providers: [\n { provide: NucleusIdentityConfig, useValue: config },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: NucleusTokenInterceptor,\n multi: true,\n },\n ],\n };\n }\n}\n","export class OtpResponse {\n public password!: string;\n public passwordId!: string;\n}\n\nexport class OtpStatus {\n public isExpired!: boolean;\n public isUsed!: boolean;\n public secondsToExpiration!: number;\n}\n\nexport enum OtpType {\n SimpleNumbers = 0,\n SimpleAlfanumeric = 1,\n Complex = 2,\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.AngularRequestor","i2.NucleusIdentityConfig","i3","i2.OidcConfigurationService","i2.LocationService","i4.OidcConfigurationService","i5.TokenClient","i1.NucleusIdentityService"],"mappings":";;;;;;;;;;;;;MAAa,qBAAqB,CAAA;AAAlC,IAAA,WAAA,GAAA;QAWS,IAAmB,CAAA,mBAAA,GAAc,EAAE,CAAC;QAEpC,IAAuB,CAAA,uBAAA,GAAG,KAAK,CAAC;KAOxC;AAAA;;MCpBY,gBAAgB,CAAA;AAI5B,CAAA;MAEY,kCAAkC,CAAA;AAK7C,IAAA,WAAA,CAAY,gBAAyC,EAAA;QAH9C,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;AAI1B,QAAA,IAAI,gBAAgB,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC;AAC7C,SAAA;KACF;AAED,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;MCdY,eAAe,CAAA;AAC1B,IAAA,WAAA,CAAoB,UAA6B,EAAA;QAA7B,IAAU,CAAA,UAAA,GAAV,UAAU,CAAmB;KAAI;AAErD,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC7B;IACD,IAAI,IAAI,CAAC,CAAC,EAAA;AACR,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;KAC1B;AAED,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC7B;IACD,IAAI,IAAI,CAAC,CAAC,EAAA;AACR,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;KAC1B;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;KAC/B;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;KACjC;IACD,IAAI,QAAQ,CAAC,CAAC,EAAA;AACZ,QAAA,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;KAC9B;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;KACjC;IACD,IAAI,QAAQ,CAAC,CAAC,EAAA;AACZ,QAAA,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;KAC9B;AAED,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC7B;IACD,IAAI,IAAI,CAAC,CAAC,EAAA;AACR,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;KAC1B;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;KACjC;IACD,IAAI,QAAQ,CAAC,CAAC,EAAA;AACZ,QAAA,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;KAC9B;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;KAC/B;IACD,IAAI,MAAM,CAAC,CAAC,EAAA;AACV,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;KAC5B;AAED,IAAA,MAAM,CAAC,GAAW,EAAA;AAChB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC5B,YAAA,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AACvB,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7B,SAAA;KACF;+GA9DU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACHK,MAAO,4BAA6B,SAAQ,qBAAqB,CAAA;AAKrE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;QALV,IAAQ,CAAA,QAAA,GAAiC,IAAI,CAAC;QAE9C,IAAK,CAAA,KAAA,GAA8B,IAAI,CAAC;QAItC,IAAI,CAAC,wBAAwB,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,KAAI;YACzD,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACzE,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,SAAC,CAAC,CAAC;KACJ;AACF;;ACVK,MAAO,gBAAiB,SAAQ,SAAS,CAAA;AAC7C,IAAA,WAAA,CAAoB,IAAgB,EAAA;AAClC,QAAA,KAAK,EAAE,CAAC;QADU,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;KAEnC;;AAGD,IAAA,GAAG,CAAI,QAA4B,EAAA;QACjC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,YAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC1B,SAAA;QAED,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,KAAI;AACxC,YAAA,IAAI,CAAC,IAAI;AACN,iBAAA,OAAO,CAAI,MAAM,EAAE,QAAQ,CAAC,GAAa,EAAE;gBAC1C,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,QAAQ,CAAC,OAAsB;aACzC,CAAC;AACD,iBAAA,SAAS,CAAC;gBACT,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC;AAC3B,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,IAAI,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;oBAC9B,IAAI,GAAG,YAAY,iBAAiB,EAAE;AACpC,wBAAA,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;AAC1D,qBAAA;oBACD,MAAM,CAAC,CAAC,CAAC,CAAC;iBACX;AACF,aAAA,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACJ;+GA7BU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACAD,MAAM,eAAe,GAAG,aAAa,CAAC;AACtC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAQ9C,MAAO,wCAAyC,SAAQ,iCAAiC,CAAA;AAC7F,IAAA,WAAA,CAAY,OAAqD,EAAA;QAC/D,KAAK,CAAC,OAAO,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,2BAA2B,GAAG,OAAO,CAAC,6BAA6B,CAAC;AACzE,QAAA,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;KAC3D;AAKD,IAAA,aAAsB,eAAe,CACnC,eAAuB,EACvB,SAAqB,EAAA;QAErB,MAAM,OAAO,GAAG,CAAG,EAAA,eAAe,IAAI,eAAe,CAAA,CAAA,EAAI,oBAAoB,CAAA,CAAE,CAAC;AAChF,QAAA,MAAM,cAAc,GAAG,SAAS,IAAI,IAAI,eAAe,EAAE,CAAC;AAC1D,QAAA,MAAM,IAAI,GACR,MAAM,cAAc,CAAC,GAAG,CAA+C;AACrE,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,MAAM,EAAE,KAAK;AACd,SAAA,CAAC,CAAC;AACL,QAAA,OAAO,IAAI,wCAAwC,CAAC,IAAI,CAAC,CAAC;KAC3D;IAEQ,MAAM,GAAA;AACb,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAkD,CAAC;AAC3E,QAAA,GAAG,CAAC,6BAA6B,GAAG,IAAI,CAAC,2BAA2B,CAAC;;AAErE,QAAA,OAAO,GAAU,CAAC;KACnB;AACF;;MCtCY,wBAAwB,CAAA;AACnC,IAAA,WAAA,CACU,SAA2B,EAC3B,MAA6B,EAC7B,UAA6B,EAAA;QAF7B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAC3B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAuB;QAC7B,IAAU,CAAA,UAAA,GAAV,UAAU,CAAmB;QAG/B,IAAc,CAAA,cAAA,GACpB,IAAI,CAAC;KAHH;AAKG,IAAA,MAAM,gBAAgB,GAAA;AAC3B,QAAA,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,MAAM,KAAK,CAAC,mCAAmC,CAAC,CAAC;AAClD,SAAA;QAED,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;AAED,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC7B;AAED,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;KACpC;AAED,IAAA,IAAW,+BAA+B,GAAA;AACxC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,+BAA+B,CAAC;KACpD;AAED,IAAA,IAAW,gBAAgB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;KACrC;AAED,IAAA,IAAW,WAAW,GAAA;AACpB,QAAA,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC1C,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AAC5D,YAAA,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;AACtC,SAAA;aAAM,IAAI,QAAQ,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;AAC3D,YAAA,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;AAClC,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAClC,YAAA,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC/B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;KACvC;IAEM,YAAY,CAAC,cAA6B,IAAI,EAAA;AACnD,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AACtC,QAAA,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,QAAQ,EAAE;AACxC,YAAA,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,SAAA;AAED,QAAA,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;AAE7B,QAAA,IAAI,WAAW,EAAE;YACf,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACjC,SAAA;QAED,OAAO,GAAG,CAAC,IAAI,CAAC;KACjB;AAEO,IAAA,oBAAoB,CAAC,GAAW,EAAA;QACtC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,EAAE;YACT,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3B,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AAEO,IAAA,MAAM,mBAAmB,GAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;YAC/B,OAAO;AACR,SAAA;AACD,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACpC,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;YAC3C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpC,SAAA;QACD,IAAI;AACF,YAAA,IAAI,CAAC,cAAc;gBACjB,MAAM,wCAAwC,CAAC,eAAe,CAC5D,SAAS,EACT,IAAI,CAAC,SAAS,CACf,CAAC;AACL,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,KAAK,CACX,oDAAoD;gBACjD,CAAW,CAAC,OAAO,CACvB,CAAC;AACF,YAAA,MAAM,CAAC,CAAC;AACT,SAAA;KACF;+GA5FU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCNY,KAAK,CAAA;IAIhB,WAAY,CAAA,IAAY,EAAE,MAAgB,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;AACF,CAAA;MAEY,QAAQ,CAAA;AAMnB,IAAA,WAAA,CAAY,GAAkB,EAAA;QAFvB,IAAM,CAAA,MAAA,GAAY,EAAE,CAAC;AAG1B,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;AAChB,YAAA,MAAM,KAAK,CAAC,6CAA6C,CAAC,CAAC;AAC5D,SAAA;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAE5C,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;AACzB,QAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;YACvB,IAAI,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;AACtC,gBAAA,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AAEtB,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACxB,oBAAA,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;AACf,iBAAA;gBAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,aAAA;AACF,SAAA;KACF;;AAGO,IAAA,WAAW,CAAC,GAAW,EAAA;QAC7B,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;AACH,SAAA;QAED,IAAI;YACF,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;YAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE9C,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC5B,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;AAC5D,YAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;AAC/D,SAAA;KACF;AAEO,IAAA,gBAAgB,CAAC,GAAW,EAAA;AAClC,QAAA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAChD,QAAA,OAAO,kBAAkB,CACvB,IAAI,CAAC,GAAG,CAAC;aACN,KAAK,CAAC,EAAE,CAAC;AACT,aAAA,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,aAAA,IAAI,CAAC,EAAE,CAAC,CACZ,CAAC;KACH;AACF;;MChEY,YAAY,CAAA;AACvB,IAAA,WAAA,CAAY,QAAgB,EAAA;QASpB,IAAO,CAAA,OAAA,GAA2C,EAAE,CAAC;QACrD,IAAW,CAAA,WAAA,GAA+B,EAAE,CAAC;QAE7C,IAAiB,CAAA,iBAAA,GAA4B,IAAI,CAAC;QAXxD,IAAI,CAAC,sBAAsB,GAAG,CAAA,iBAAA,EAAoB,QAAQ,CAAE,CAAA,CAAC;QAC7D,IAAI,CAAC,oBAAoB,GAAG,CAAA,EAAG,IAAI,CAAC,sBAAsB,OAAO,CAAC;QAClE,IAAI,CAAC,4BAA4B,GAAG,CAAA,EAAG,IAAI,CAAC,sBAAsB,OAAO,CAAC;QAC1E,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAC5C,IAAI,CAAC,4BAA4B,CAClC,CAAC;KACH;AAUD,IAAA,IAAW,iBAAiB,GAAA;QAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAChC;IAEM,sBAAsB,GAAA;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;KAC9C;IAEM,MAAM,mBAAmB,CAAC,gBAAkC,EAAA;AACjE,QAAA,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAC1C,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;KAC9D;AAEM,IAAA,MAAM,mBAAmB,GAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,IAAI,CAAC,IAAI,CACtC,IAAI,CAAC,oBAAoB,CAC1B,CAAC;AACH,SAAA;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC;KAC/B;AAEM,IAAA,QAAQ,CAAC,KAAoB,EAAE,EAAA,GAAoB,IAAI,EAAA;QAC5D,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;KAC/C;IAEM,WAAW,CAAC,KAAoB,IAAI,EAAA;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;KAC9B;AAEM,IAAA,oBAAoB,CAAC,EAAiB,EAAA;AAC3C,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,YAAY,CAAC,OAAO,CAClB,IAAI,CAAC,4BAA4B,EACjC,IAAI,CAAC,kBAAkB,CACxB,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;AAC5D,SAAA;KACF;AAEM,IAAA,MAAM,QAAQ,CAAC,EAAA,GAAoB,IAAI,EAAA;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;;AAGjC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE;AACvD,YAAA,MAAM,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;AACvC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KAC1B;IAEM,WAAW,CAAC,KAAoB,IAAI,EAAA;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACxB;IAEO,MAAM,sBAAsB,CAAC,EAAiB,EAAA;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAoB,GAAG,CAAC,CAAC;AAC5D,QAAA,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;AAC3C,YAAA,IAAI,GAAG,EAAE,WAAW,IAAI,GAAG,EAAE,OAAO,EAAE;gBACpC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AAC7C,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAEO,IAAA,MAAM,gBAAgB,CAC5B,KAAoB,EACpB,IAAa,EACb,EAAiB,EAAA;QAEjB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC5B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAA,IAAI,IAAI,EAAE;gBACR,IAAI;oBACF,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AACtC,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;AACV,oBAAA,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;AACpE,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAEO,IAAA,WAAW,CAAC,EAAiB,EAAA;QACnC,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAC9B,SAAA;AACD,QAAA,OAAO,EAAE;AACP,cAAE,CAAG,EAAA,IAAI,CAAC,sBAAsB,CAAA,CAAA,EAAI,EAAE,CAAE,CAAA;AACxC,cAAE,IAAI,CAAC,sBAAsB,CAAC;KACjC;AAEO,IAAA,KAAK,CAAC,GAAW,EAAA;QACvB,OAAO,mBAAmB,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;KAC5C;IAEO,IAAI,CAAI,GAAW,EAAE,KAAQ,EAAA;AACnC,QAAA,OAAO,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;KACvE;IAEO,MAAM,IAAI,CAAI,GAAW,EAAA;QAC/B,IAAI;YACF,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,EAAE,KAAK,EAAE;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAM,CAAC;AACjC,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;QAAC,MAAM;AACN,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;KACF;AACF;;MCxIY,UAAU,CAAA;AACrB,IAAA,WAAA,CAAY,QAAwB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,gBAAgB,CAAC;AACjD,QAAA,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,yBAAyB,CAAC;QAClE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,EAAE,CAAC;KAChC;IAUD,SAAS,CAAC,MAAM,GAAG,EAAE,EAAA;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACtC;IAED,WAAW,CAAC,MAAM,GAAG,EAAE,EAAA;AACrB,QAAA,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,GAAG,CAAC;KACtD;AACF;;MC/BY,0BAA0B,CAAA;AACrC,IAAA,WAAA,CAAY,QAAwC,EAAA;AAClD,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC;AACnC,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,IAAI,CAClC,QAAQ,CAAC,wBAAwB,GAAG,IAAI,CACzC,CAAC;KACH;AAKF;;MCMY,WAAW,CAAA;IACtB,WACU,CAAA,SAA2B,EAC3B,MAAgC,EAAA;QADhC,IAAS,CAAA,SAAA,GAAT,SAAS,CAAkB;QAC3B,IAAM,CAAA,MAAA,GAAN,MAAM,CAA0B;QAExC,IAAI,CAAC,aAAa,GAAG,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;KAC3C;AAKM,IAAA,MAAM,sBAAsB,CACjC,WAAmB,EACnB,IAAY,EACZ,YAAqB,EAAA;QAErB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACpD,MAAM,WAAW,GAAG,WAAW,CAAC;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC;AAC3B,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,YAAA,YAAY,EAAE,WAAW;AACzB,YAAA,UAAU,EAAE,6BAA6B;YACzC,IAAI;AACJ,YAAA,MAAM,EAAE,YAAY,GAAG,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,SAAS;AACnE,SAAA,CAAC,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClE;IAEM,MAAM,iBAAiB,CAAC,YAAoB,EAAA;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;AACpD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC5C,QAAA,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC;AAC3B,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,YAAA,YAAY,EAAE,WAAW;AACzB,YAAA,UAAU,EAAE,wBAAwB;AACpC,YAAA,aAAa,EAAE,YAAY;AAC5B,SAAA,CAAC,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClE;AAEM,IAAA,MAAM,sBAAsB,CACjC,QAAgB,EAChB,YAAoB,EACpB,KAAa,EAAA;QAEb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;AACpD,QAAA,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC;AAC3B,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,UAAU,EAAE,oBAAoB;AAChC,YAAA,MAAM,EAAE;AACN,gBAAA,aAAa,EAAE,YAAY;gBAC3B,KAAK;AACN,aAAA;AACF,SAAA,CAAC,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClE;IAEM,MAAM,WAAW,CACtB,QAAgB,EAChB,MAAc,EACd,cAAsB,EACtB,KAAa,EAAA;QAEb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;AACpD,QAAA,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC;AAC3B,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,UAAU,EAAE,6BAA6B;AACzC,YAAA,MAAM,EAAE;AACN,gBAAA,eAAe,EAAE,QAAQ;AACzB,gBAAA,YAAY,EAAE,MAAM;AACpB,gBAAA,qBAAqB,EACnB,wDAAwD;AAC1D,gBAAA,gBAAgB,EAAE,cAAc;gBAChC,KAAK;AACN,aAAA;AACF,SAAA,CAAC,CAAC;QAEH,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClE;IAEM,MAAM,eAAe,CAAC,UAAkB,EAAA;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;AACpD,QAAA,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC;AAC3B,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,UAAU,EAAE,8CAA8C;AAC1D,YAAA,MAAM,EAAE;AACN,gBAAA,WAAW,EAAE,UAAU;AACxB,aAAA;AACF,SAAA,CAAC,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClE;IAEM,MAAM,wBAAwB,CAAC,KAAa,EAAA;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAEpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAEvC;YACA,GAAG,EAAE,MAAM,CAAC,oBAAoB;AAChC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,OAAO,EAAE;AACP,gBAAA,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA;AACjC,aAAA;;AAEF,SAAA,CAAC,CAAC;AAEH,QAAA,IAAK,QAA2B,CAAC,KAAK,KAAK,SAAS,EAAE;AACpD,YAAA,OAAO,IAAI,0BAA0B,CACnC,QAA0C,CAC3C,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,IAAI,YAAY,CAAE,QAA2B,CAAC,KAAK,CAAC,CAAC;AAC5D,SAAA;KACF;AAEM,IAAA,MAAM,mBAAmB,CAC9B,0BAAA,GAA4C,IAAI,EAAA;AAEhD,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,aAAa,EAAE,aAAa;AAC5B,YAAA,oBAAoB,EAAE,0BAA0B;SACjD,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAmB,CAAC,CAAC;KACxD;IAEM,MAAM,aAAa,CAAC,KAAa,EAAA;AACtC,QAAA,MAAM,MAAM,GAAG;YACb,KAAK;SACN,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;KAC3C;IAEO,MAAM,qBAAqB,CAAC,MAAiB,EAAA;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAEpD,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC3C,MAAM,GAAG,GAAc,MAAM,CAAC;QAE9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAkC;YACzE,GAAG,EAAE,MAAM,CAAC,2BAA2B;AACvC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;AACjC,SAAA,CAAC,CAAC;AAEH,QAAA,IAAK,QAA2B,CAAC,KAAK,KAAK,SAAS,EAAE;AACpD,YAAA,OAAO,IAAI,UAAU,CAAC,QAA0B,CAAC,CAAC;AACnD,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,IAAI,YAAY,CAAE,QAA2B,CAAC,KAAK,CAAC,CAAC;AAC5D,SAAA;KACF;+GA9JU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCcY,sBAAsB,CAAA;IACjC,WACU,CAAA,UAA6B,EACrC,QAAyB,EACjB,IAAgB,EAChB,MAAgC,EAChC,WAAwB,EAAA;QAJxB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAmB;QAE7B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;QAChB,IAAM,CAAA,MAAA,GAAN,MAAM,CAA0B;QAChC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AAiB1B,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,4BAA4B,EAAE,CAAC;QAE5D,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QACrB,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QACrB,IAAoB,CAAA,oBAAA,GAAyC,IAAI,CAAC;QAClE,IAAgB,CAAA,gBAAA,GAAkC,IAAI,CAAC;QACvD,IAAgC,CAAA,gCAAA,GAA2B,IAAI,CAAC;QAChE,IAAwB,CAAA,wBAAA,GAAG,OAAO,CAAC;AAtBzC,QAAA,MAAM,OAAO,GAAG,IAAI,mBAAmB,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,sBAAsB,CACrD,OAAO,EACP,IAAI,qBAAqB,EAAE,EAC3B,QAAQ,EACR,IAAI,CAAC,OAAO,CACb,CAAC;QACF,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,CACjD,IAAI,CAAC,sBAAsB,CAC5B,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KACjD;AAaD,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;KAClC;AAED,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;KAC9B;AAED,IAAA,IAAW,wBAAwB,GAAA;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;KAC/D;AAED,IAAA,IAAW,+BAA+B,GAAA;AACxC,QAAA,OAAO,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC;KAC9C;AAED,IAAA,IAAW,0BAA0B,GAAA;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,KAAK,IAAI,CAAC,wBAAwB,CAAC;KACxE;AAEM,IAAA,MAAM,IAAI,CAAC,UAAU,GAAG,KAAK,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;AAC1C,YAAA,OAAO,CAAC,IAAI,CACV,8FAA8F,CAC/F,CAAC;YACF,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,MAAM,IAAI,CAAC,qBAAqB,CAAC,sCAAsC,EAAE,CAAC;AAE1E,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAClD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CACb,qBAAqB,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,gBAAgB,CACxE,CAAC;AACH,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE;AAC/C,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACpD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;AAEtD,YAAA,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ;AACnC,kBAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;kBACjC,SAAS,CAAC;AACd,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CACvD,OAAO,CAAC,WAAW,EACnB,QAAQ,CAAC,IAAI,EACb,YAAY,CACb,CAAC;AACF,YAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACjC,SAAA;AAAM,aAAA;YACL,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,GAAG,IAAI,UAAU,EAAE;AACtB,gBAAA,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AACpB,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B;AAEM,IAAA,MAAM,eAAe,CAC1B,QAAgB,EAChB,MAAc,EAAA;AAEd,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;AAC1B,QAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,8BAA8B,EAAE,CAAC;AACnE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AACpE,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAC5C,QAAQ,EACR,MAAM,EACN,cAAc,EACd,KAAK,CACN,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KACjC;AAEM,IAAA,MAAM,KAAK,GAAA;AAChB,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;AACpD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;AACnD,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,IAAI,KAAI;AACtD,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,KAAK,EAAE;oBACtC,OAAO,CAAC,KAAK,EAAE,CAAC;AACjB,iBAAA;gBACD,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,gBAAA,IAAI,IAAI,EAAE;AACR,oBAAA,MAAM,SAAS,GACb,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC;AACjE,oBAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAClC,oBAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC1B,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,CAAC,IAAI,CACV,oEAAoE,EACpE,IAAI,CACL,CAAC;AACH,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;QACD,IAAI,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACzE;AAEM,IAAA,MAAM,MAAM,GAAA;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;AACpD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC5C,QAAA,MAAM,SAAS,GACb,MAAM,CAAC,kBAAkB;YACzB,4BAA4B;YAC5B,SAAS,CAAC,WAAW,CAAC,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,MAAK;gBAClD,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AAC7B,oBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;wBAC3B,OAAO,CAAC,KAAK,EAAE,CAAC;AACjB,qBAAA;AACH,iBAAC,CAAC,CAAC;gBACH,QAAQ,CAAC,MAAM,EAAE,CAAC;AACpB,aAAC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;AAClC,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnC,SAAA;KACF;AAEM,IAAA,MAAM,cAAc,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACvD,SAAA;QACD,IAAI;AACF,YAAA,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC;AACpC,SAAA;AAAS,gBAAA;AACR,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9B,SAAA;KACF;AAEM,IAAA,MAAM,8BAA8B,GAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,gCAAgC,EAAE;AAC1C,YAAA,IAAI,CAAC,gCAAgC;gBACnC,IAAI,CAAC,sCAAsC,EAAE,CAAC;AACjD,SAAA;QACD,IAAI;AACF,YAAA,OAAO,MAAM,IAAI,CAAC,gCAAgC,CAAC;AACpD,SAAA;AAAS,gBAAA;AACR,YAAA,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC;AAC9C,SAAA;KACF;AAEM,IAAA,MAAM,qBAAqB,GAAA;QAChC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;AACnD,QAAA,IAAI,EAAE,EAAE;AACN,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAC7B,KAAK,EACL,IAAI,CAAC,MAAM,CAAC,+BAA+B,CAC5C,CAAC;AACF,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CACvD,EAAE,CAAC,EAAE,EACL,EAAE,CAAC,MAAM,EACT,KAAK,CACN,CAAC;AACF,YAAA,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAC/D,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACrD,SAAA;KACF;AAEM,IAAA,MAAM,uBAAuB,GAAA;AAClC,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACxE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACpC,SAAA;QACD,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;KACjE;IAEM,MAAM,MAAM,CAAC,IAAa,EAAE,SAAS,GAAG,CAAC,CAAC,EAAA;AAC/C,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAoB,iBAAA,EAAA,IAAI,CAAE,CAAA,CAAC,CAAC;QAC/D,IAAI,SAAS,GAAG,CAAC,EAAE;AACjB,YAAA,GAAG,IAAI,CAAA,WAAA,EAAc,SAAS,CAAA,CAAE,CAAC;AAClC,SAAA;QACD,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAc,GAAG,CAAC,CAAC,CAAC;KACvD;IAEM,MAAM,YAAY,CAAC,EAAU,EAAA;AAClC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAe,YAAA,EAAA,EAAE,CAAE,CAAA,CAAC,CAAC;QAC1D,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAY,GAAG,CAAC,CAAC,CAAC;KACrD;IAEM,SAAS,CAAC,WAAmB,EAAE,QAAgB,EAAA;AACpD,QAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;AAChD,QAAA,MAAM,GAAG,GAAG,CAAA,mBAAA,EAAsB,QAAQ,CAAc,WAAA,EAAA,OAAO,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;KACtC;AAEM,IAAA,MAAM,iCAAiC,GAAA;QAC5C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACnD,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KAC3D;IAEM,MAAM,oCAAoC,CAAC,UAAsB,EAAA;QACtE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;AAC3D,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAC5D,QAAQ,CAAC,WAAW,CACrB,CAAC;AAEF,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC;YACpC,EAAE,EAAE,MAAM,CAAC,QAAQ;YACnB,MAAM,EAAE,MAAM,CAAC,YAAY;YAC3B,SAAS,EAAE,MAAM,CAAC,oBAAoB;AACvC,SAAA,CAAC,CAAC;KACJ;IAEM,kCAAkC,GAAA;AACvC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;KAC7C;AAEM,IAAA,MAAM,qCAAqC,GAAA;QAChD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;AACnD,QAAA,OAAO,IAAI,kCAAkC,CAAC,EAAE,CAAC,CAAC;KACnD;AAEM,IAAA,MAAM,oBAAoB,GAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACnE,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KACpD;IAEM,MAAM,uBAAuB,CAAC,UAAsB,EAAA;QACzD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KACjC;IAEO,MAAM,kBAAkB,CAAC,UAAsB,EAAA;QACrD,IAAI,GAAG,GAAyB,IAAI,CAAC;QACrC,GAAG;AACD,YAAA,IAAI,UAAU,CAAC,SAAS,EAAE,EAAE;AAC1B,gBAAA,MAAM,KAAK,CAAC,yBAAyB,CAAC,CAAC;AACxC,aAAA;YAED,IAAI;AACF,gBAAA,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACrE,aAAA;AAAC,YAAA,OAAO,KAAK,EAAE;gBACd,IACE,KAAK,YAAY,YAAY;AAC7B,oBAAA,KAAK,CAAC,OAAO,KAAK,uBAAuB,EACzC;AACA,oBAAA,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACxB,iBAAA;AAAM,qBAAA;AACL,oBAAA,MAAM,KAAK,CAAC;AACb,iBAAA;AACF,aAAA;SACF,QAAQ,CAAC,GAAG,EAAE;AACf,QAAA,OAAO,GAAG,CAAC;KACZ;IAEO,2BAA2B,GAAA;AACjC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAE5C,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,aAAa,EAAE,UAAU;AACzB,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;SACjD,CAAC;QAEF,OAAO,IAAI,oBAAoB,CAC7B;AACE,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,YAAA,YAAY,EAAE,WAAW;YACzB,aAAa,EAAE,oBAAoB,CAAC,kBAAkB;AACtD,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;AAC3D,YAAA,MAAM,EAAE,MAAmB;AAC5B,SAAA,EACD,IAAI,CAAC,OAAO,EACZ,IAAI,CACL,CAAC;KACH;AAEO,IAAA,MAAM,sCAAsC,GAAA;AAClD,QAAA,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;AACrB,YAAA,KAAK,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC5C,SAAA;QACD,OAAO,KAAK,EAAE,WAAW,CAAC;KAC3B;AAEO,IAAA,MAAM,sBAAsB,GAAA;QAClC,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACzC,QAAA,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;YAC7B,KAAK,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACjD,SAAA;AACD,QAAA,OAAO,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC;KACnC;IAEO,MAAM,qBAAqB,CAAC,KAAoB,EAAA;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC9B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;AACvE,SAAA;QACD,IAAI;AACF,YAAA,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC;AACxC,SAAA;AAAS,gBAAA;AACR,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AAClC,SAAA;KACF;IAEO,MAAM,6BAA6B,CAAC,KAAoB,EAAA;QAC9D,IAAI,KAAK,EAAE,YAAY,EAAE;YACvB,IAAI;AACF,gBAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAClD,KAAK,CAAC,YAAY,CACnB,CAAC;gBACF,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAChC,gBAAA,OAAO,GAAG,CAAC;AACZ,aAAA;AAAC,YAAA,OAAO,GAAG,EAAE;AACZ,gBAAA,OAAO,CAAC,IAAI,CACV,uDAAuD,EACvD,GAAG,CACJ,CAAC;;AAEF,gBAAA,IAAK,GAAW,CAAC,OAAO,KAAK,eAAe,EAAE;AAC5C,oBAAA,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AACrB,iBAAA;AACF,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;AACxE,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAEO,IAAA,WAAW,CAAC,GAAW,EAAA;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3B,QAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AAC5B,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAEO,oBAAoB,GAAA;QAC1B,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;AACzD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACzD,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,OAAO,CAAC,GAAG,CACT,kFAAkF,CACnF,CAAC;gBACF,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;AACnC,aAAA;AACF,SAAA;KACF;IAEO,YAAY,CAAC,aAAsB,EAAE,cAAuB,EAAA;QAClE,IAAI,KAAK,GAAG,QAAQ,CAAC;AACrB,QAAA,IAAI,aAAa,EAAE;YACjB,KAAK,IAAI,iBAAiB,CAAC;AAC5B,SAAA;AACD,QAAA,IAAI,cAAc,EAAE;AAClB,YAAA,KAAK,IAAI,GAAG,GAAG,cAAc,CAAC;AAC/B,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,KAAK,CAAC,WAAmB,EAAA;AAC/B,QAAA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;YACnC,UAAU,CAAC,MAAK;AACd,gBAAA,OAAO,EAAE,CAAC;aACX,EAAE,WAAW,CAAC,CAAC;AAClB,SAAC,CAAC,CAAC;KACJ;+GApZU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCpBY,uBAAuB,CAAA;IAClC,WACU,CAAA,IAA4B,EAC5B,MAA6B,EAAA;QAD7B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAwB;QAC5B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAuB;AAS/B,QAAA,IAAA,CAAA,wBAAwB,GAAG;YACjC,MAAM;YACN,SAAS;YACT,aAAa;YACb,aAAa;SACd,CAAC;QAZA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AACjD,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC,KACtD,CAAC,CAAC,WAAW,EAAE,CAChB,CAAC;KACH;IAWM,SAAS,CACd,GAAyB,EACzB,IAAiB,EAAA;QAEjB,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACzE,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACpC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KACzB;AAEO,IAAA,eAAe,CAAC,GAAW,EAAA;AACjC,QAAA,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAExB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AACvC,YAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,SAAA;QAED,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YACzD,QACE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EACxE;AACH,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,gBAAgB,CACtB,QAAgC,EAChC,GAAyB,EACzB,IAAiB,EAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACxB,QAAQ,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAC,CAAC;gBACpE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9B,aAAA;AACD,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SACzB,CAAC,CACH,CAAC;KACH;AAEO,IAAA,iBAAiB,CACvB,QAAwC,EAAA;QAExC,OAAO,QAAQ,CAAC,IAAI,CAClB,UAAU,CAAC,CAAC,GAAG,KAAI;YACjB,IAAI,GAAG,YAAY,iBAAiB,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;AAC1D,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE;AACvC,oBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACnB,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;SAC9B,CAAC,CACH,CAAC;KACH;+GA5EU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCLY,qBAAqB,CAAA;IAChC,OAAO,OAAO,CACZ,MAA6B,EAAA;QAE7B,OAAO;AACL,YAAA,QAAQ,EAAE,qBAAqB;AAC/B,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE;AACpD,gBAAA;AACE,oBAAA,OAAO,EAAE,iBAAiB;AAC1B,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,KAAK,EAAE,IAAI;AACZ,iBAAA;AACF,aAAA;SACF,CAAC;KACH;+GAfU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;gHAArB,qBAAqB,EAAA,CAAA,CAAA,EAAA;gHAArB,qBAAqB,EAAA,CAAA,CAAA,EAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA,CAAA;;;MCTY,WAAW,CAAA;AAGvB,CAAA;MAEY,SAAS,CAAA;AAIrB,CAAA;IAEW,QAIX;AAJD,CAAA,UAAY,OAAO,EAAA;AACjB,IAAA,OAAA,CAAA,OAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB,CAAA;AACjB,IAAA,OAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAqB,CAAA;AACrB,IAAA,OAAA,CAAA,OAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACb,CAAC,EAJW,OAAO,KAAP,OAAO,GAIlB,EAAA,CAAA,CAAA;;ACfD;;AAEG;;;;"}
1
+ {"version":3,"file":"kolektor-nucleus-identity.mjs","sources":["../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/nucleus-identity-config.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/models/service-principal.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/location.service.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/nucleus-authorization-notifier.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/angular-requestor.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/authorization-service-configuration.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/oidc-configuration.service.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/models/identity.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/secrets-store.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/models/device-code.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/models/client-registration.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/utils/token-client.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/nucleus-identity.service.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/nucleus-token-interceptor.service.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/nucleus-identity.module.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/lib/models/otp.ts","../../../../../../libs/ng/nucleus/nucleus-identity/src/kolektor-nucleus-identity.ts"],"sourcesContent":["export class NucleusIdentityConfig {\n public authority!: string;\n\n public clientId!: string;\n\n public redirectUri?: string;\n\n public androidRedirectUri?: string;\n\n public iOSRedirectUri?: string;\n\n public httpInterceptorUrls?: string[] = [];\n\n public automaticLoginOnHttp401 = false;\n\n public requestedScopes?: string;\n\n public servicePrincipalRequestedScopes?: string;\n\n public authProviderHint?: string;\n}\n","export class ServicePrincipal {\n public id!: string;\n public secret!: string;\n public expiresAt!: Date;\n}\n\nexport class ServicePrincipalRegistrationStatus {\n public id!: string;\n public isRegistered = false;\n public expiresAt!: Date;\n\n constructor(servicePrincipal: ServicePrincipal | null) {\n if (servicePrincipal) {\n this.isRegistered = true;\n this.id = servicePrincipal.id;\n this.expiresAt = servicePrincipal.expiresAt;\n }\n }\n\n public get isExpired() {\n return false;\n }\n}\n","import { LocationLike } from '@openid/appauth';\nimport { NucleusAppService } from '@kolektor/nucleus-common';\nimport { Browser } from '@capacitor/browser';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LocationService implements LocationLike {\n constructor(private appService: NucleusAppService) {}\n\n get hash() {\n return window.location.hash;\n }\n set hash(v) {\n window.location.hash = v;\n }\n\n get host() {\n return window.location.host;\n }\n set host(v) {\n window.location.host = v;\n }\n\n get origin() {\n return window.location.origin;\n }\n\n get hostname() {\n return window.location.hostname;\n }\n set hostname(v) {\n window.location.hostname = v;\n }\n\n get pathname() {\n return window.location.pathname;\n }\n set pathname(v) {\n window.location.pathname = v;\n }\n\n get port() {\n return window.location.port;\n }\n set port(v) {\n window.location.port = v;\n }\n\n get protocol() {\n return window.location.protocol;\n }\n set protocol(v) {\n window.location.protocol = v;\n }\n\n get search() {\n return window.location.search;\n }\n set search(v) {\n window.location.search = v;\n }\n\n assign(url: string): void {\n if (this.appService.isNative) {\n Browser.open({ url });\n } else {\n window.location.assign(url);\n }\n }\n}\n","import { AuthorizationNotifier } from '@openid/appauth';\nimport { AuthorizationResponse, AuthorizationError } from '@openid/appauth';\nimport { AuthorizationRequest } from '@openid/appauth';\n\nexport class NucleusAuthorizationNotifier extends AuthorizationNotifier {\n response: AuthorizationResponse | null = null;\n request!: AuthorizationRequest;\n error: AuthorizationError | null = null;\n\n constructor() {\n super();\n this.setAuthorizationListener((request, response, error) => {\n console.log('Authorization request complete ', request, response, error);\n this.response = response;\n this.request = request;\n this.error = error;\n });\n }\n}\n","import { AppAuthError, Requestor } from '@openid/appauth';\nimport { Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { HttpHeaders } from '@capacitor/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AngularRequestor extends Requestor {\n constructor(private http: HttpClient) {\n super();\n }\n\n // eslint-disable-next-line no-undef\n xhr<T>(settings: JQueryAjaxSettings): Promise<T> {\n let method = 'GET';\n if (settings.method) {\n method = settings.method;\n }\n\n return new Promise<T>((resolve, reject) => {\n this.http\n .request<T>(method, settings.url as string, {\n body: settings.data,\n headers: settings.headers as HttpHeaders,\n })\n .subscribe({\n next: (res) => resolve(res),\n error: (err) => {\n let e = new AppAuthError(err);\n if (err instanceof HttpErrorResponse) {\n e = new AppAuthError(err.error?.error || err.statusText);\n }\n reject(e);\n },\n });\n });\n }\n}\n","import {\n AuthorizationServiceConfiguration,\n AuthorizationServiceConfigurationJson,\n JQueryRequestor,\n Requestor,\n} from '@openid/appauth';\n\nconst WELL_KNOWN_PATH = '.well-known';\nconst OPENID_CONFIGURATION = 'openid-configuration';\n\nexport interface NucleusAuthorizationServiceConfigurationJson\n extends AuthorizationServiceConfigurationJson {\n device_authorization_endpoint?: string;\n registration_endpoint?: string;\n}\n\nexport class NucleusAuthorizationServiceConfiguration extends AuthorizationServiceConfiguration {\n constructor(request: NucleusAuthorizationServiceConfigurationJson) {\n super(request);\n this.deviceAuthorizationEndpoint = request.device_authorization_endpoint;\n this.registrationEndpoint = request.registration_endpoint;\n }\n\n public deviceAuthorizationEndpoint?: string;\n public registrationEndpoint?: string;\n\n static override async fetchFromIssuer(\n openIdIssuerUrl: string,\n requestor?: Requestor\n ) {\n const fullUrl = `${openIdIssuerUrl}/${WELL_KNOWN_PATH}/${OPENID_CONFIGURATION}`;\n const requestorToUse = requestor || new JQueryRequestor();\n const json =\n await requestorToUse.xhr<NucleusAuthorizationServiceConfigurationJson>({\n url: fullUrl,\n dataType: 'json',\n method: 'GET',\n });\n return new NucleusAuthorizationServiceConfiguration(json);\n }\n\n override toJson() {\n const res = super.toJson() as NucleusAuthorizationServiceConfigurationJson;\n res.device_authorization_endpoint = this.deviceAuthorizationEndpoint;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return res as any;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NucleusAppService } from '@kolektor/nucleus-common';\nimport { NucleusIdentityConfig } from '../nucleus-identity-config';\nimport { AngularRequestor } from './angular-requestor';\nimport { NucleusAuthorizationServiceConfiguration } from './authorization-service-configuration';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class OidcConfigurationService {\n constructor(\n private requestor: AngularRequestor,\n private config: NucleusIdentityConfig,\n private appService: NucleusAppService\n ) {}\n\n private _configuration: NucleusAuthorizationServiceConfiguration | null =\n null;\n\n public async getConfiguration() {\n await this.assureConfiguration();\n if (!this._configuration) {\n throw Error('Failed to get OIDC configuration!');\n }\n\n return this._configuration;\n }\n\n public get clientId() {\n return this.config.clientId;\n }\n\n public get requestedScopes() {\n return this.config.requestedScopes;\n }\n\n public get servicePrincipalRequestedScopes() {\n return this.config.servicePrincipalRequestedScopes;\n }\n\n public get authProviderHint() {\n return this.config.authProviderHint;\n }\n\n public get redirectUrl() {\n let uri = window.location.href;\n const platform = this.appService.platform;\n if (platform === 'android' && this.config.androidRedirectUri) {\n uri = this.config.androidRedirectUri;\n } else if (platform === 'ios' && this.config.iOSRedirectUri) {\n uri = this.config.iOSRedirectUri;\n } else if (this.config.redirectUri) {\n uri = this.config.redirectUri;\n }\n return this.NormalizeRedirectUri(uri);\n }\n\n public getServerUrl(relativeUri: string | null = null) {\n let authority = this.config.authority;\n if (!authority || authority === 'origin') {\n authority = window.origin;\n }\n\n let url = new URL(authority);\n\n if (relativeUri) {\n url = new URL(relativeUri, url);\n }\n\n return url.href;\n }\n\n private NormalizeRedirectUri(uri: string) {\n const i = uri.indexOf('#');\n if (i > 0) {\n uri = uri.substring(0, i);\n }\n return uri;\n }\n\n private async assureConfiguration() {\n if (this._configuration != null) {\n return;\n }\n let authority = this.getServerUrl();\n if (authority[authority.length - 1] === '/') {\n authority = authority.slice(0, -1);\n }\n try {\n this._configuration =\n await NucleusAuthorizationServiceConfiguration.fetchFromIssuer(\n authority,\n this.requestor\n );\n } catch (e) {\n console.error(\n 'Nucleus.Identity: Cannot load OIDC configuration: ' +\n (e as Error).message\n );\n throw e;\n }\n }\n}\n","import { TokenResponse } from '@openid/appauth';\n\nexport class Claim {\n public name: string;\n public values: string[];\n\n constructor(name: string, values: string[]) {\n this.name = name;\n this.values = values;\n }\n}\n\nexport class Identity {\n public name: string;\n public subject: string;\n\n public claims: Claim[] = [];\n\n constructor(res: TokenResponse) {\n if (!res.idToken) {\n throw Error('There is no id token in the token response!');\n }\n\n const token = this.decodeToken(res.idToken);\n\n this.name = token.name;\n this.subject = token.sub;\n for (const key in token) {\n if ({}.hasOwnProperty.call(token, key)) {\n let vals = token[key];\n\n if (!Array.isArray(vals)) {\n vals = [vals];\n }\n\n const claim = new Claim(key, vals);\n this.claims.push(claim);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private decodeToken(jwt: string): any {\n if (!jwt) {\n throw new Error(\n 'NucleusIdentity: There was no identity token in the response!'\n );\n }\n\n try {\n const arr = jwt.split('.');\n // var header = arr[0];\n const payload = this.b64DecodeUnicode(arr[1]);\n // var signature = arr[2];\n return JSON.parse(payload);\n } catch (error) {\n console.error('Error while decoding identity token', error);\n console.error('Error while decoding identity token JWT', jwt);\n }\n }\n\n private b64DecodeUnicode(str: string) {\n str = str.replace(/-/g, '+').replace(/_/g, '/'); // Qlector fix :)\n return decodeURIComponent(\n atob(str)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join('')\n );\n }\n}\n","import 'capacitor-secure-storage-plugin';\nimport { TokenResponse, TokenResponseJson } from '@openid/appauth';\nimport { ServicePrincipal } from '../models/service-principal';\nimport { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';\nimport { Identity } from '../models/identity';\n\nexport class SecretsStore {\n constructor(clientId: string) {\n this._tokenStorageKeyPrefix = `Nucleus.Identity.${clientId}`; // do not change this or login with existing tokens will fail\n this._servicePrincipalKey = `${this._tokenStorageKeyPrefix}.SvcP`;\n this._defaultIdentityIdStorageKey = `${this._tokenStorageKeyPrefix}.IdId`;\n this._defaultIdentityId = localStorage.getItem(\n this._defaultIdentityIdStorageKey\n );\n }\n private _tokenStorageKeyPrefix: string;\n private _tokens: { [id: string]: TokenResponse | null } = {};\n private _identities: { [id: string]: Identity } = {};\n private _servicePrincipalKey;\n private _servicePrincipal: ServicePrincipal | null = null;\n // this specify which identity id is used by default, when If id is not specified in getToken or getIdentity\n private _defaultIdentityId: string | null;\n private _defaultIdentityIdStorageKey: string;\n\n public get defaultIdentityId() {\n return this._defaultIdentityId;\n }\n\n public removeServicePrincipal() {\n this._servicePrincipal = null;\n return this.clear(this._servicePrincipalKey);\n }\n\n public async setServicePrincipal(servicePrincipal: ServicePrincipal) {\n this._servicePrincipal = servicePrincipal;\n await this.save(this._servicePrincipalKey, servicePrincipal);\n }\n\n public async getServicePrincipal() {\n if (!this._servicePrincipal) {\n this._servicePrincipal = await this.load<ServicePrincipal>(\n this._servicePrincipalKey\n );\n }\n return this._servicePrincipal;\n }\n\n public setToken(token: TokenResponse, id: string | null = null) {\n return this.setTokenInternal(token, true, id);\n }\n\n public getIdentity(id: string | null = null): Identity | null {\n const key = this.getTokenKey(id);\n return this._identities[key];\n }\n\n public setDefaultIdentityId(id: string | null) {\n this._defaultIdentityId = id;\n if (this._defaultIdentityId) {\n localStorage.setItem(\n this._defaultIdentityIdStorageKey,\n this._defaultIdentityId\n );\n } else {\n localStorage.removeItem(this._defaultIdentityIdStorageKey);\n }\n }\n\n public async getToken(id: string | null = null) {\n const key = this.getTokenKey(id);\n\n // if token is not there or it is invalid we check storage again before returning\n if (!this._tokens[key] || !this._tokens[key]?.isValid()) {\n await this.reloadTokenFromStorage(id);\n }\n return this._tokens[key];\n }\n\n public removeToken(id: string | null = null) {\n const key = this.getTokenKey(id);\n delete this._tokens[key];\n delete this._identities[key];\n return this.clear(key);\n }\n\n private async reloadTokenFromStorage(id: string | null) {\n const key = this.getTokenKey(id);\n const storedToken = await this.load<TokenResponseJson>(key);\n if (storedToken) {\n const res = new TokenResponse(storedToken);\n if (res?.accessToken || res?.idToken) {\n await this.setTokenInternal(res, false, id);\n }\n }\n return null;\n }\n\n private async setTokenInternal(\n token: TokenResponse,\n save: boolean,\n id: string | null\n ) {\n const key = this.getTokenKey(id);\n if (token == null) {\n await this.removeToken(id);\n } else {\n this._tokens[key] = token;\n this._identities[key] = new Identity(token);\n if (save) {\n try {\n await this.save(key, token.toJson());\n } catch (e) {\n console.warn('Nucleus.Identity: Could not save to SecureStorage.');\n }\n }\n }\n }\n\n private getTokenKey(id: string | null) {\n if (!id) {\n id = this._defaultIdentityId;\n }\n return id\n ? `${this._tokenStorageKeyPrefix}.${id}`\n : this._tokenStorageKeyPrefix;\n }\n\n private clear(key: string) {\n return SecureStoragePlugin.remove({ key });\n }\n\n private save<T>(key: string, value: T): Promise<{ value: boolean }> {\n return SecureStoragePlugin.set({ key, value: JSON.stringify(value) });\n }\n\n private async load<T>(key: string) {\n try {\n const x = await SecureStoragePlugin.get({ key });\n if (x?.value) {\n return JSON.parse(x.value) as T;\n } else {\n return null;\n }\n } catch {\n return null;\n }\n }\n}\n","import { nowInSeconds } from '@openid/appauth';\n\nexport interface DeviceCodeJson {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete: string;\n expires_in: string;\n message: string;\n}\n\nexport class DeviceCode {\n constructor(response: DeviceCodeJson) {\n this.deviceCode = response.device_code;\n this.userCode = response.user_code;\n this.verificationUrl = response.verification_uri;\n this.verificationUrlComplete = response.verification_uri_complete;\n this.expiresIn = parseInt(response.expires_in, 10);\n this.issuedAt = nowInSeconds();\n }\n\n private expiresIn: number;\n private issuedAt: number;\n\n public deviceCode: string;\n public userCode: string;\n public verificationUrl: string;\n public verificationUrlComplete: string;\n\n isExpired(buffer = 60) {\n return this.secondsLeft(buffer) <= 0;\n }\n\n secondsLeft(buffer = 60) {\n const now = nowInSeconds();\n return this.issuedAt + this.expiresIn - buffer - now;\n }\n}\n","export interface ClientRegistrationResponseJson {\n client_id: string;\n client_secret: string;\n client_secret_expires_at: number;\n}\n\nexport class ClientRegistrationResponse {\n constructor(response: ClientRegistrationResponseJson) {\n this.clientId = response.client_id;\n this.clientSecret = response.client_secret;\n this.secretExpirationDate = new Date(\n response.client_secret_expires_at * 1000\n );\n }\n\n clientId: string;\n clientSecret: string;\n secretExpirationDate: Date;\n}\n","import {\n AppAuthError,\n BaseTokenRequestHandler,\n BasicQueryStringUtils,\n GRANT_TYPE_AUTHORIZATION_CODE,\n GRANT_TYPE_REFRESH_TOKEN,\n QueryStringUtils,\n StringMap,\n TokenErrorJson,\n TokenRequest,\n TokenRequestHandler,\n} from '@openid/appauth';\nimport { OidcConfigurationService } from './oidc-configuration.service';\nimport { AngularRequestor } from './angular-requestor';\nimport { Injectable } from '@angular/core';\nimport { DeviceCode, DeviceCodeJson } from '../models/device-code';\nimport {\n ClientRegistrationResponse,\n ClientRegistrationResponseJson,\n} from '../models/client-registration';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TokenClient {\n constructor(\n private requestor: AngularRequestor,\n private config: OidcConfigurationService\n ) {\n this._tokenHandler = new BaseTokenRequestHandler(requestor);\n this._utils = new BasicQueryStringUtils();\n }\n\n private _tokenHandler: TokenRequestHandler;\n private _utils: QueryStringUtils;\n\n public async getByAuthorizationCode(\n redirectUrl: string,\n code: string,\n codeVerifier?: string\n ) {\n const config = await this.config.getConfiguration();\n const redirectUri = redirectUrl;\n const req = new TokenRequest({\n client_id: this.config.clientId,\n redirect_uri: redirectUri,\n grant_type: GRANT_TYPE_AUTHORIZATION_CODE,\n code,\n extras: codeVerifier ? { code_verifier: codeVerifier } : undefined,\n });\n return await this._tokenHandler.performTokenRequest(config, req);\n }\n\n public async getByRefreshToken(refreshToken: string) {\n const config = await this.config.getConfiguration();\n const redirectUri = this.config.redirectUrl;\n const req = new TokenRequest({\n client_id: this.config.clientId,\n redirect_uri: redirectUri,\n grant_type: GRANT_TYPE_REFRESH_TOKEN,\n refresh_token: refreshToken,\n });\n return await this._tokenHandler.performTokenRequest(config, req);\n }\n\n public async getByClientCredentials(\n clientId: string,\n clientSecret: string,\n scope: string\n ) {\n const config = await this.config.getConfiguration();\n const req = new TokenRequest({\n client_id: clientId,\n redirect_uri: '',\n grant_type: 'client_credentials',\n extras: {\n client_secret: clientSecret,\n scope,\n },\n });\n return await this._tokenHandler.performTokenRequest(config, req);\n }\n\n public async getBySecret(\n provider: string,\n secret: string,\n assertionToken: string,\n scope: string\n ) {\n const config = await this.config.getConfiguration();\n const req = new TokenRequest({\n client_id: this.config.clientId,\n redirect_uri: '',\n grant_type: 'urn:kolektor:nucleus:secret',\n extras: {\n secret_provider: provider,\n secret_value: secret,\n client_assertion_type:\n 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',\n client_assertion: assertionToken,\n scope,\n },\n });\n\n return await this._tokenHandler.performTokenRequest(config, req);\n }\n\n public async getByDeviceCode(deviceCode: string) {\n const config = await this.config.getConfiguration();\n const req = new TokenRequest({\n client_id: this.config.clientId,\n redirect_uri: '',\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n extras: {\n device_code: deviceCode,\n },\n });\n return await this._tokenHandler.performTokenRequest(config, req);\n }\n\n public async registerServicePrincipal(token: string) {\n const config = await this.config.getConfiguration();\n\n const response = await this.requestor.xhr<\n ClientRegistrationResponseJson | TokenErrorJson\n >({\n url: config.registrationEndpoint,\n method: 'POST',\n dataType: 'json',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n // data: this._utils.stringify(map)\n });\n\n if ((response as TokenErrorJson).error === undefined) {\n return new ClientRegistrationResponse(\n response as ClientRegistrationResponseJson\n );\n } else {\n throw new AppAuthError((response as TokenErrorJson).error);\n }\n }\n\n public async getRegistrationCode(\n existingServicePrincipalId: string | null = null\n ) {\n const params = {\n custom_action: 'sp_register',\n service_principal_id: existingServicePrincipalId,\n };\n\n return this.getDeviceCodeInternal(params as StringMap);\n }\n\n public async getDeviceCode(scope: string) {\n const params = {\n scope,\n };\n return this.getDeviceCodeInternal(params);\n }\n\n private async getDeviceCodeInternal(params: StringMap) {\n const config = await this.config.getConfiguration();\n\n params['client_id'] = this.config.clientId;\n const map: StringMap = params;\n\n const response = await this.requestor.xhr<DeviceCodeJson | TokenErrorJson>({\n url: config.deviceAuthorizationEndpoint,\n method: 'POST',\n dataType: 'json',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n data: this._utils.stringify(map),\n });\n\n if ((response as TokenErrorJson).error === undefined) {\n return new DeviceCode(response as DeviceCodeJson);\n } else {\n throw new AppAuthError((response as TokenErrorJson).error);\n }\n }\n}\n","import {\n AppAuthError,\n AuthorizationRequest,\n AuthorizationRequestHandler,\n BasicQueryStringUtils,\n Crypto,\n DefaultCrypto,\n LocalStorageBackend,\n RedirectRequestHandler,\n StringMap,\n TokenResponse,\n} from '@openid/appauth';\n\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { App } from '@capacitor/app';\nimport { Browser } from '@capacitor/browser';\nimport { Device } from '@capacitor/device';\n\nimport { NucleusAppService } from '@kolektor/nucleus-common';\n\nimport { lastValueFrom } from 'rxjs';\n\nimport { DeviceCode } from './models/device-code';\nimport { OtpResponse, OtpStatus, OtpType } from './models/otp';\nimport { ServicePrincipalRegistrationStatus } from './models/service-principal';\n\nimport { LocationService } from './utils/location.service';\nimport { NucleusAuthorizationNotifier } from './utils/nucleus-authorization-notifier';\nimport { OidcConfigurationService } from './utils/oidc-configuration.service';\nimport { SecretsStore } from './utils/secrets-store';\nimport { TokenClient } from './utils/token-client';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NucleusIdentityService {\n constructor(\n private appService: NucleusAppService,\n location: LocationService,\n private http: HttpClient,\n private config: OidcConfigurationService,\n private tokenClient: TokenClient\n ) {\n const storage = new LocalStorageBackend();\n this._crypto = new DefaultCrypto();\n this._authorizationHandler = new RedirectRequestHandler(\n storage,\n new BasicQueryStringUtils(),\n location,\n this._crypto\n );\n this._authorizationHandler.setAuthorizationNotifier(\n this._authorizationNotifier\n );\n this._store = new SecretsStore(config.clientId);\n }\n\n private _authorizationHandler: AuthorizationRequestHandler;\n private _authorizationNotifier = new NucleusAuthorizationNotifier();\n private _crypto: Crypto;\n private _initStarted = false;\n private _initialized = false;\n private _refreshTokenPromise: Promise<TokenResponse | null> | null = null;\n private _getTokenPromise: Promise<string | null> | null = null;\n private _getServicePrincipalTokenPromise: Promise<string> | null = null;\n private _servicePrincipalTokenId = '_svcp';\n private _store: SecretsStore;\n\n public get identity() {\n return this._store.getIdentity();\n }\n\n public get isAuthenticated() {\n return this.identity != null;\n }\n\n public get servicePrincipalIdentity() {\n return this._store.getIdentity(this._servicePrincipalTokenId);\n }\n\n public get isServicePrincipalAuthenticated() {\n return this.servicePrincipalIdentity != null;\n }\n\n public get isIdentityServicePrincipal() {\n return this._store.defaultIdentityId === this._servicePrincipalTokenId;\n }\n\n public async init(startLogin = false): Promise<void> {\n if (this._initStarted || this._initialized) {\n console.warn(\n \"Nucleus.Identity: Auth initialization was already started. Don't call init() multiple times!\"\n );\n return;\n }\n this._initStarted = true;\n\n this.handleLaunchCodeHash();\n await this._authorizationHandler.completeAuthorizationRequestIfPossible();\n\n const authErr = this._authorizationNotifier.error;\n if (authErr) {\n throw new Error(\n 'Authorization err: ' + authErr.error + ': ' + authErr.errorDescription\n );\n } else if (this._authorizationNotifier.response) {\n window.location.hash = '';\n const request = this._authorizationNotifier.request;\n const response = this._authorizationNotifier.response;\n\n const codeVerifier = request.internal\n ? request.internal['code_verifier']\n : undefined;\n const res = await this.tokenClient.getByAuthorizationCode(\n request.redirectUri,\n response.code,\n codeVerifier\n );\n this._store.setDefaultIdentityId(null);\n await this._store.setToken(res);\n } else {\n const res = await this._store.getToken();\n if (!res && startLogin) {\n await this.login();\n }\n }\n this._initialized = true;\n }\n\n public async loginWithSecret(\n provider: string,\n secret: string\n ): Promise<void> {\n this._store.removeToken().catch(() => console.log('No token to remove.'));\n const assertionToken = await this.getServicePrincipalAccessToken();\n const scope = this.prepareScope(true, this.config?.requestedScopes);\n const res = await this.tokenClient.getBySecret(\n provider,\n secret,\n assertionToken,\n scope\n );\n this._store.setDefaultIdentityId(null);\n await this._store.setToken(res);\n }\n\n public async login(): Promise<void> {\n this._store.removeToken();\n const config = await this.config.getConfiguration();\n const request = this.prepareAuthorizationRequest();\n if (this.appService.isNative) {\n const listener = App.addListener('appUrlOpen', (data) => {\n if (this.appService.platform === 'ios') {\n Browser.close();\n }\n listener.remove();\n const hash = this.getCodeHash(data.url);\n if (hash) {\n const targetUrl =\n window.location.origin + window.location.pathname + '#' + hash;\n window.location.assign(targetUrl);\n window.location.reload();\n } else {\n console.warn(\n 'Nucleus.Identity: Redirect url did not contain authorization code!',\n data\n );\n }\n });\n }\n this._authorizationHandler.performAuthorizationRequest(config, request);\n }\n\n public async logout(): Promise<void> {\n this._store.removeToken();\n const config = await this.config.getConfiguration();\n const redirectUrl = this.config.redirectUrl;\n const logoutUrl =\n config.endSessionEndpoint +\n '?post_logout_redirect_uri=' +\n encodeURI(redirectUrl);\n if (this.appService.isNative) {\n const listener = App.addListener('appUrlOpen', () => {\n Device.getInfo().then((info) => {\n if (info.platform === 'ios') {\n Browser.close();\n }\n });\n listener.remove();\n });\n Browser.open({ url: logoutUrl });\n } else {\n window.location.assign(logoutUrl);\n }\n }\n\n public async getAccessToken() {\n if (!this._getTokenPromise) {\n this._getTokenPromise = this.getAccessTokenInternal();\n }\n try {\n return await this._getTokenPromise;\n } finally {\n this._getTokenPromise = null;\n }\n }\n\n public async getServicePrincipalAccessToken() {\n if (!this._getServicePrincipalTokenPromise) {\n this._getServicePrincipalTokenPromise =\n this.getServicePrincipalAccessTokenInternal();\n }\n try {\n return await this._getServicePrincipalTokenPromise;\n } finally {\n this._getServicePrincipalTokenPromise = null;\n }\n }\n\n public async loginServicePrincipal() {\n const sp = await this._store.getServicePrincipal();\n if (sp) {\n const scope = this.prepareScope(\n false,\n this.config.servicePrincipalRequestedScopes\n );\n const res = await this.tokenClient.getByClientCredentials(\n sp.id,\n sp.secret,\n scope\n );\n await this._store.setToken(res, this._servicePrincipalTokenId);\n return res;\n } else {\n throw Error('Service principal is not registered!');\n }\n }\n\n public async loginAsServicePrincipal() {\n const token = await this._store.getToken(this._servicePrincipalTokenId);\n if (!token) {\n await this.loginServicePrincipal();\n }\n this._store.setDefaultIdentityId(this._servicePrincipalTokenId);\n }\n\n public async getOtp(type: OtpType, expiresIn = -1) {\n let url = this.config.getServerUrl(`/otp/create?type=${type}`);\n if (expiresIn > 0) {\n url += `&expiresIn=${expiresIn}`;\n }\n return lastValueFrom(this.http.get<OtpResponse>(url));\n }\n\n public async getOtpStatus(id: string) {\n const url = this.config.getServerUrl(`/otp/status/${id}`);\n return lastValueFrom(this.http.get<OtpStatus>(url));\n }\n\n public getOtpUrl(redirectUrl: string, password: string) {\n const encoded = encodeURIComponent(redirectUrl);\n const url = `/otp/auth?otpValue=${password}&returnUrl=${encoded}`;\n return this.config.getServerUrl(url);\n }\n\n public async startServicePrincipalRegistration() {\n const sp = await this._store.getServicePrincipal();\n return await this.tokenClient.getRegistrationCode(sp?.id);\n }\n\n public async completeServicePrincipalRegistration(deviceCode: DeviceCode) {\n const tokenRes = await this.waitForDeviceToken(deviceCode);\n const regRes = await this.tokenClient.registerServicePrincipal(\n tokenRes.accessToken\n );\n\n await this._store.setServicePrincipal({\n id: regRes.clientId,\n secret: regRes.clientSecret,\n expiresAt: regRes.secretExpirationDate,\n });\n }\n\n public removeServicePrincipalRegistration() {\n return this._store.removeServicePrincipal();\n }\n\n public async getServicePrincipalRegistrationStatus() {\n const sp = await this._store.getServicePrincipal();\n return new ServicePrincipalRegistrationStatus(sp);\n }\n\n public async startDeviceCodeLogin() {\n const scope = this.prepareScope(true, this.config.requestedScopes);\n return await this.tokenClient.getDeviceCode(scope);\n }\n\n public async completeDeviceCodeLogin(deviceCode: DeviceCode) {\n const res = await this.waitForDeviceToken(deviceCode);\n await this._store.setToken(res);\n }\n\n private async waitForDeviceToken(deviceCode: DeviceCode) {\n let res: TokenResponse | null = null;\n do {\n if (deviceCode.isExpired()) {\n throw Error('Device code is expired!');\n }\n\n try {\n res = await this.tokenClient.getByDeviceCode(deviceCode.deviceCode);\n } catch (error) {\n if (\n error instanceof AppAuthError &&\n error.message === 'authorization_pending'\n ) {\n await this.delay(2000);\n } else {\n throw error;\n }\n }\n } while (!res);\n return res;\n }\n\n private prepareAuthorizationRequest(): AuthorizationRequest {\n const redirectUri = this.config.redirectUrl;\n\n const params = {\n response_mode: 'fragment',\n prompt: 'consent',\n access_type: 'offline',\n auth_provider_hint: this.config.authProviderHint,\n };\n\n return new AuthorizationRequest(\n {\n client_id: this.config.clientId,\n redirect_uri: redirectUri,\n response_type: AuthorizationRequest.RESPONSE_TYPE_CODE,\n scope: this.prepareScope(true, this.config.requestedScopes),\n extras: params as StringMap,\n },\n this._crypto,\n true\n );\n }\n\n private async getServicePrincipalAccessTokenInternal() {\n let token = await this._store.getToken(this._servicePrincipalTokenId);\n if (!token?.isValid()) {\n token = await this.loginServicePrincipal();\n }\n return token?.accessToken;\n }\n\n private async getAccessTokenInternal() {\n let token = await this._store.getToken();\n if (token && !token.isValid()) {\n token = await this.loginWithRefreshToken(token);\n }\n return token?.accessToken ?? null;\n }\n\n private async loginWithRefreshToken(token: TokenResponse) {\n if (!this._refreshTokenPromise) {\n this._refreshTokenPromise = this.loginWithRefreshTokenInternal(token);\n }\n try {\n return await this._refreshTokenPromise;\n } finally {\n this._refreshTokenPromise = null;\n }\n }\n\n private async loginWithRefreshTokenInternal(token: TokenResponse) {\n if (token?.refreshToken) {\n try {\n const res = await this.tokenClient.getByRefreshToken(\n token.refreshToken\n );\n await this._store.setToken(res);\n return res;\n } catch (err) {\n console.warn(\n 'Nucleus.Identity: Failed to login with refresh token.',\n err\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((err as any).message === 'invalid_grant') {\n await this.logout();\n }\n }\n } else {\n console.warn('Nucleus.Identity: There is no refresh token available.');\n }\n return null;\n }\n\n private getCodeHash(url: string) {\n const arr = url.split('#');\n if (arr.length > 1) {\n const hash = arr[1];\n if (hash.startsWith('code=')) {\n return hash;\n }\n }\n return null;\n }\n\n private handleLaunchCodeHash() {\n if (this.appService.isNative && this.appService.launchUrl) {\n const hash = this.getCodeHash(this.appService.launchUrl);\n if (hash) {\n console.log(\n 'Nucleus.Identity: Got authorization code from launchUrl, will assign it to hash.'\n );\n window.location.hash = '#' + hash;\n }\n }\n }\n\n private prepareScope(offlineAccess: boolean, aditionalScope?: string) {\n let scope = 'openid';\n if (offlineAccess) {\n scope += ' offline_access';\n }\n if (aditionalScope) {\n scope += ' ' + aditionalScope;\n }\n return scope;\n }\n\n private delay(miliseconds: number) {\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n resolve();\n }, miliseconds);\n });\n }\n}\n","import {\n HttpErrorResponse,\n HttpEvent,\n HttpHandler,\n HttpInterceptor,\n HttpRequest,\n} from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, from, throwError } from 'rxjs';\nimport { catchError, mergeMap } from 'rxjs/operators';\nimport { NucleusIdentityConfig } from './nucleus-identity-config';\nimport { NucleusIdentityService } from './nucleus-identity.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NucleusTokenInterceptor implements HttpInterceptor {\n constructor(\n private auth: NucleusIdentityService,\n private config: NucleusIdentityConfig\n ) {\n this._authority = config.authority.toLowerCase();\n this._interceptUrls = config.httpInterceptorUrls?.map((x) =>\n x.toLowerCase()\n );\n }\n\n private _authority: string;\n private _authorityInterceptPaths = [\n '/api',\n '/manage',\n '/otp/create',\n '/otp/status',\n ];\n private _interceptUrls?: string[];\n\n public intercept(\n req: HttpRequest<unknown>,\n next: HttpHandler\n ): Observable<HttpEvent<unknown>> {\n if (this.shouldIntercept(req.url)) {\n const res = this.authorizeRequest(this.auth.getAccessToken(), req, next);\n return this.checkUnauthorized(res);\n }\n return next.handle(req);\n }\n\n private shouldIntercept(url: string): boolean {\n url = url.toLowerCase();\n\n if (url.startsWith(this._authority)) {\n const pathname = new URL(url).pathname;\n return this._authorityInterceptPaths.some((x) => pathname.startsWith(x));\n }\n\n if (this._interceptUrls && this._interceptUrls.length > 0) {\n return (\n this.config.httpInterceptorUrls?.some((x) => url.startsWith(x)) ?? false\n );\n }\n return false;\n }\n\n private authorizeRequest(\n getToken: Promise<string | null>,\n req: HttpRequest<unknown>,\n next: HttpHandler\n ): Observable<HttpEvent<unknown>> {\n return from(getToken).pipe(\n mergeMap((token) => {\n if (token) {\n const headers = req.headers.set('Authorization', `Bearer ${token}`);\n req = req.clone({ headers });\n }\n return next.handle(req);\n })\n );\n }\n\n private checkUnauthorized(\n response: Observable<HttpEvent<unknown>>\n ): Observable<HttpEvent<unknown>> {\n return response.pipe(\n catchError((err) => {\n if (err instanceof HttpErrorResponse && err.status === 401) {\n if (this.config.automaticLoginOnHttp401) {\n this.auth.login();\n }\n }\n return throwError(() => err);\n })\n );\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { NucleusTokenInterceptor } from './nucleus-token-interceptor.service';\nimport { NucleusIdentityConfig } from './nucleus-identity-config';\n\n@NgModule({\n imports: [],\n declarations: [],\n exports: [],\n})\nexport class NucleusIdentityModule {\n static forRoot(\n config: NucleusIdentityConfig\n ): ModuleWithProviders<NucleusIdentityModule> {\n return {\n ngModule: NucleusIdentityModule,\n providers: [\n { provide: NucleusIdentityConfig, useValue: config },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: NucleusTokenInterceptor,\n multi: true,\n },\n ],\n };\n }\n}\n","export class OtpResponse {\n public password!: string;\n public passwordId!: string;\n}\n\nexport class OtpStatus {\n public isExpired!: boolean;\n public isUsed!: boolean;\n public secondsToExpiration!: number;\n}\n\nexport enum OtpType {\n SimpleNumbers = 0,\n SimpleAlfanumeric = 1,\n Complex = 2,\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.AngularRequestor","i2.NucleusIdentityConfig","i3","i2.OidcConfigurationService","i2.LocationService","i4.OidcConfigurationService","i5.TokenClient","i1.NucleusIdentityService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,33 +1,33 @@
1
1
  {
2
- "name": "@kolektor/nucleus-identity",
3
- "version": "0.1.254",
4
- "peerDependencies": {
5
- "@angular/common": "^16.0.0",
6
- "@angular/core": "^16.0.0",
7
- "@capacitor/app": "^5.0.0",
8
- "@capacitor/browser": "^5.0.0",
9
- "@capacitor/device": "^5.0.0",
10
- "@capacitor/core": "^5.5.1",
11
- "@openid/appauth": "^1.0.0",
12
- "@kolektor/nucleus-common": "0.1.x",
13
- "capacitor-secure-storage-plugin": "0.9.0",
14
- "rxjs": "~7.8.0"
2
+ "name": "@kolektor/nucleus-identity",
3
+ "version": "0.1.515",
4
+ "peerDependencies": {
5
+ "@angular/common": "^16.0.0",
6
+ "@angular/core": "^16.0.0",
7
+ "@capacitor/app": "^5.0.0",
8
+ "@capacitor/browser": "^5.0.0",
9
+ "@capacitor/device": "^5.0.0",
10
+ "@capacitor/core": "^5.5.1",
11
+ "@openid/appauth": "^1.0.0",
12
+ "@kolektor/nucleus-common": "0.1.x",
13
+ "capacitor-secure-storage-plugin": "0.9.0",
14
+ "rxjs": "~7.8.0"
15
+ },
16
+ "sideEffects": false,
17
+ "module": "fesm2022/kolektor-nucleus-identity.mjs",
18
+ "typings": "index.d.ts",
19
+ "exports": {
20
+ "./package.json": {
21
+ "default": "./package.json"
15
22
  },
16
- "sideEffects": false,
17
- "module": "fesm2022/kolektor-nucleus-identity.mjs",
18
- "typings": "index.d.ts",
19
- "exports": {
20
- "./package.json": {
21
- "default": "./package.json"
22
- },
23
- ".": {
24
- "types": "./index.d.ts",
25
- "esm2022": "./esm2022/kolektor-nucleus-identity.mjs",
26
- "esm": "./esm2022/kolektor-nucleus-identity.mjs",
27
- "default": "./fesm2022/kolektor-nucleus-identity.mjs"
28
- }
29
- },
30
- "dependencies": {
31
- "tslib": "^2.3.0"
23
+ ".": {
24
+ "types": "./index.d.ts",
25
+ "esm2022": "./esm2022/kolektor-nucleus-identity.mjs",
26
+ "esm": "./esm2022/kolektor-nucleus-identity.mjs",
27
+ "default": "./fesm2022/kolektor-nucleus-identity.mjs"
32
28
  }
33
- }
29
+ },
30
+ "dependencies": {
31
+ "tslib": "^2.3.0"
32
+ }
33
+ }