@bitblit/ratchet-warden-common 4.0.226-alpha → 4.0.232-alpha
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.
- package/lib/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/package.json +3 -3
package/lib/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{RequireRatchet as e,ErrorRatchet as t,StringRatchet as n,Logger as r,JwtRatchet as o}from"@bitblit/ratchet-common";import{BehaviorSubject as s,timer as i}from"rxjs";import{startRegistration as a,startAuthentication as c}from"@simplewebauthn/browser";class g{constructor(){}static buildInformation(){return{version:"226",hash:"3756dbef763df895de882697478a5d8237fb4544",branch:"alpha-2023-09-22-1",tag:"alpha-2023-09-22-1",timeBuiltISO:"2023-09-22T17:32:41-0700",notes:"No notes"}}}class l{commandSender;jwtProvider;constructor(t,n){this.commandSender=t,this.jwtProvider=n,e.notNullOrUndefined(t,"commandSender"),e.notNullOrUndefined(n,"jwtProvider")}async exchangeCommand(e,n){const r=JSON.stringify(e),o=await this.commandSender.sendCommand(r,this.jwtProvider.fetchCurrentLoggedInJwtToken()),s=JSON.parse(o);return s?.error&&!n&&t.throwFormattedErr("%s",s.error),s}async createAccount(e,t,n,r){const o={createAccount:{contact:e,sendCode:t,label:n,tags:r}};return(await this.exchangeCommand(o)).createAccount}async sendMagicLinkByUserId(e,t,n,r){const o={sendMagicLink:{userId:e,contactType:n,landingUrl:t,meta:r}};return(await this.exchangeCommand(o)).sendMagicLink}async sendMagicLink(e,t,n){const r={sendMagicLink:{contact:e,landingUrl:t,meta:n}};return(await this.exchangeCommand(r)).sendMagicLink}async generateWebAuthnAuthenticationChallengeForUserId(e){const t={generateWebAuthnAuthenticationChallengeForUserId:e},n=await this.exchangeCommand(t);return JSON.parse(n.generateWebAuthnAuthenticationChallengeForUserId.dataAsJson)}async generateWebAuthnRegistrationChallengeForLoggedInUser(){const e=await this.exchangeCommand({generateWebAuthnRegistrationChallengeForLoggedInUser:!0});return JSON.parse(e.generateWebAuthnRegistrationChallengeForLoggedInUser.dataAsJson)}async removeWebAuthnRegistration(e,t){const n={removeWebAuthnRegistration:{userId:e,credentialId:t}};return(await this.exchangeCommand(n)).removeWebAuthnRegistration}async removeWebAuthnRegistrationFromLoggedInUser(e){const t={removeWebAuthnRegistrationFromLoggedInUser:e};return(await this.exchangeCommand(t)).removeWebAuthnRegistrationFromLoggedInUser}async removeContactFromLoggedInUser(e){const t={removeContactFromLoggedInUser:e};return(await this.exchangeCommand(t)).removeContactFromLoggedInUser}async sendExpiringValidationToken(e){const t={sendExpiringValidationToken:e};return(await this.exchangeCommand(t)).sendExpiringValidationToken}async addContactToLoggedInUser(e){const t={addContactToLoggedInUser:e};return(await this.exchangeCommand(t)).addContactToLoggedInUser}async addWebAuthnRegistrationToLoggedInUser(e){const t={addWebAuthnRegistrationToLoggedInUser:{dataAsJson:JSON.stringify(e)}};return(await this.exchangeCommand(t)).addWebAuthnRegistrationToLoggedInUser}async performLoginCmd(e){const t={performLogin:e};return(await this.exchangeCommand(t)).performLogin}async refreshJwtToken(e){let t=null;if(n.trimToNull(e))try{t=(await this.exchangeCommand({refreshJwtToken:e})).refreshJwtToken}catch(e){r.error("JwtRefresh Failed : %s",e)}return t}async executeExpiringTokenBasedLogin(e,t){let n=null;try{const r={contact:e,expiringToken:t};n=await this.performLoginCmd(r)}catch(e){r.error("ExpiringToken login Failed : %s",e)}return n}}class d{wrapped;_currentUserSubject=new s(null);constructor(e){this.wrapped=e}fetchCurrentLoggedInJwtToken(){return this?._currentUserSubject?.getValue()?.jwtToken}get currentUserSubject(){return this._currentUserSubject}onAutomaticLogout(){this.wrapped&&this.wrapped.onAutomaticLogout()}onAutomaticTokenRefresh(e){this.wrapped&&this.wrapped.onAutomaticTokenRefresh(e)}onLoginFailure(e){this.wrapped&&this.wrapped.onLoginFailure(e)}onLogout(){this.wrapped&&this.wrapped.onLogout(),this.currentUserSubject.next(null)}onSuccessfulLogin(e){this.wrapped&&this.wrapped.onSuccessfulLogin(e),this.currentUserSubject.next(e)}}class u{options;loggedInTimerSubscription;_autoRefreshEnabled=!1;constructor(e){this.options=e,r.info("Initializing user service");const t=this.options.loggedInUserProvider.fetchLoggedInUserWrapper();u.wrapperIsExpired(t)?(r.info("Stored token is expired, removing it"),this.options.loggedInUserProvider.logOutUser()):this.options.eventProcessor.onSuccessfulLogin(t);const n=this.options.loginCheckTimerPingSeconds||2.5;this.loggedInTimerSubscription=i(0,1e3*n).subscribe((e=>this.checkForAutoLogoutOrRefresh(e)))}cleanShutDown(){this.loggedInTimerSubscription&&this.loggedInTimerSubscription.unsubscribe()}get serviceOptions(){return this.options}async createAccount(e,t,r,o){const s=await this.options.wardenClient.createAccount(e,t,r,o);return this.options.recentLoginProvider&&n.trimToNull(s)&&this.options.recentLoginProvider.saveNewUser(s,r,e),s}async addContactToLoggedInUser(e){return this.options.wardenClient.addContactToLoggedInUser(e)}get autoRefreshEnabled(){return this._autoRefreshEnabled}set autoRefreshEnabled(e){if(e){if(!this.options.allowAutoRefresh)throw new Error("Cannot enable auto-refresh - this is disabled in the user service options");this._autoRefreshEnabled=!0}else this._autoRefreshEnabled=!1}async checkForAutoLogoutOrRefresh(e){r.debug("Checking for auto-logout or refresh : %s",e);const t=this.fetchLoggedInUserWrapper();if(t){const e=this.options.autoLoginHandlingThresholdSeconds||10;if(t.expirationEpochSeconds-Math.floor(Date.now()/1e3)<e)if(this.autoRefreshEnabled){r.info("Under threshold, initiating auto-refresh");const e=await this.refreshToken();this.options.eventProcessor.onAutomaticTokenRefresh(e)}else r.info("Under threshold, initiating auto-logout"),this.logout()}}logout(){this.options.loggedInUserProvider.logOutUser(),this.options.eventProcessor.onLogout()}static wrapperIsExpired(e){return e?.userObject?.exp&&e.expirationEpochSeconds<Date.now()/1e3}fetchLoggedInUserWrapper(){let e=this.options.loggedInUserProvider.fetchLoggedInUserWrapper();return e&&u.wrapperIsExpired(e)&&(r.info("Token is expired - auto logout triggered"),this.logout(),e=null),e}loggedInUserHasRole(e){let t=!1;if(n.trimToNull(e)){const n=this.fetchLoggedInUserWrapper(),r=e.toLowerCase();t=n?.userObject?.roles&&!!n.userObject.roles.find((e=>e.toLowerCase()===r))}return t}isLoggedIn(){return!!this.fetchLoggedInUserWrapper()}fetchLoggedInUserJwtObject(){const e=this.fetchLoggedInUserWrapper();return e?e.userObject:null}fetchLoggedInUserJwtToken(){const e=this.fetchLoggedInUserWrapper();return e?e.jwtToken:null}fetchLoggedInUserObject(){const e=this.fetchLoggedInUserJwtObject();return e?e.user:null}fetchLoggedInUserExpirationEpochSeconds(){const e=this.fetchLoggedInUserJwtObject();return e?e.exp:null}fetchLoggedInUserRemainingSeconds(){const e=this.fetchLoggedInUserJwtObject();return e?e.exp-Math.floor(Date.now()/1e3):null}updateLoggedInUserFromTokenString(e){let t=null;if(n.trimToNull(e)){r.info("updateLoggedInUserFromTokenString : %s",e);const n=o.decodeTokenNoVerify(e);n?(t={userObject:n,jwtToken:e,expirationEpochSeconds:n.exp},this.options.loggedInUserProvider.setLoggedInUserWrapper(t),this.updateRecentLoginsFromWardenEntrySummary(n.loginData),this.options.eventProcessor.onSuccessfulLogin(t)):(r.warn("Failed to parse token %s - ignoring login and triggering failure"),this.options.eventProcessor.onLoginFailure("Could not parse token string"))}else r.info("Called updateLoggedInUserFromTokenString with empty string - logging out"),this.logout();return t}async refreshToken(){let e=null;const t=this.fetchLoggedInUserWrapper();if(t){const n=await this.options.wardenClient.refreshJwtToken(t.jwtToken);e=await this.updateLoggedInUserFromTokenString(n)}else r.info("Could not refresh - no token available");return e}async sendExpiringCode(e){return this.options.wardenClient.sendExpiringValidationToken(e)}async processWardenLoginResults(e){let t=null;return e?(r.info("Warden: response : %j ",e),e.jwtToken?(r.info("Applying login"),t=await this.updateLoggedInUserFromTokenString(e.jwtToken)):e.error?this.options.eventProcessor.onLoginFailure(e.error):(r.error("Response contained neither token nor error"),this.options.eventProcessor.onLoginFailure("Response contained neither token nor error"))):(r.error("Login call failed"),this.options.eventProcessor.onLoginFailure("Login call returned null")),t}updateRecentLoginsFromWardenEntrySummary(e){this.options.recentLoginProvider&&e?(r.info("UserService : Saving recent login %j",e),this.options.recentLoginProvider.saveRecentLogin(e)):r.info("Not saving recent login - no storage configured or no data passed")}updateRecentLoginsFromLoggedInUserWrapper(e){this.updateRecentLoginsFromWardenEntrySummary(e?.userObject?.loginData)}async executeWebAuthnBasedLogin(e){const t=await this.executeWebAuthnLoginToWardenLoginResults(e),n=await this.processWardenLoginResults(t);return this.updateRecentLoginsFromLoggedInUserWrapper(n),n}async removeWebAuthnRegistrationFromLoggedInUser(e){return await this.options.wardenClient.removeWebAuthnRegistrationFromLoggedInUser(e)}async removeContactFromLoggedInUser(e){return await this.options.wardenClient.removeContactFromLoggedInUser(e)}async executeValidationTokenBasedLogin(e,t){r.info("Warden: executeValidationTokenBasedLogin : %j : %s ",e,t);const n=await this.options.wardenClient.performLoginCmd({contact:e,expiringToken:t}),o=await this.processWardenLoginResults(n);return this.updateRecentLoginsFromLoggedInUserWrapper(o),o}async saveCurrentDeviceAsWebAuthnForCurrentUser(){const e=await this.options.wardenClient.generateWebAuthnRegistrationChallengeForLoggedInUser(),t=await a(e),n=await this.options.wardenClient.addWebAuthnRegistrationToLoggedInUser(t);return this.updateRecentLoginsFromWardenEntrySummary(n),n}async executeWebAuthnLoginToWardenLoginResults(e){let t=null;try{const n=await this.options.wardenClient.generateWebAuthnAuthenticationChallengeForUserId(e);r.info("Got login challenge : %s",n);const o=await c(n);r.info("Got creds: %j",o);const s={userId:e,webAuthn:o};t=await this.options.wardenClient.performLoginCmd(s)}catch(e){r.error("WebauthN Failed : %s",e)}return t}}var h,p,m,L;!function(e){e.TextCapablePhoneNumber="TextCapablePhoneNumber",e.EmailAddress="EmailAddress"}(h||(h={}));class f{constructor(){}static extractContactsOfType(e,t){let n=null;return e?.contactMethods&&(n=e.contactMethods.filter((e=>e.type===t)).map((e=>e.value))),n}static validLoginRequest(e){let t=!1;return e&&(n.trimToNull(e.userId)||f.validContact(e.contact))&&(n.trimToNull(e.expiringToken)||n.trimToNull(e.jwtTokenToRefresh)||e.webAuthn)&&(t=!0),t}static stringToWardenContact(e){let t=null;const n=f.stringToContactType(e);return n?t={type:n,value:e}:r.error("Failed to convert a string to a contact type",e),t}static teamRolesToRoles(e){return e?.length?e.map((e=>f.teamRoleToRoleString(e))):[]}static roleStringsToTeamRoles(e){return e?.length?e.map((e=>f.roleStringToTeamRole(e))):[]}static roleStringToTeamRole(e){let t=null;if(e&&e.indexOf("_/_")>=0){const n=e.split("_/_");t={team:n[0],role:n[1]}}return t}static teamRoleToRoleString(e){let t=null;return e?.role&&e?.team&&(t=e.team+"_/_"+e.role),t}static stringToContactType(e){let t=null;return n.trimToNull(e)&&(t=f.stringIsEmailAddress(e)?h.EmailAddress:null,t=!t&&f.stringIsPhoneNumber(e)?h.TextCapablePhoneNumber:t),t}static validContact(e){let t=!1;if(e?.type&&n.trimToNull(e?.value))switch(e.type){case h.EmailAddress:t=f.stringIsEmailAddress(e.value);break;case h.TextCapablePhoneNumber:t=f.stringIsPhoneNumber(e.value);break;default:t=!1}return t}static stringIsEmailAddress(e){return!!e.match(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)}static stringIsPhoneNumber(e){return!!e.match(/^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/im)}static stripWardenEntryToSummary(e){return e?{userId:e.userId,userLabel:e.userLabel,contactMethods:e.contactMethods,webAuthnAuthenticatorIds:(e.webAuthnAuthenticators||[]).map((e=>e.credentialIdBase64))}:null}}class w{saveRecentLogin(e){if(e?.userId){r.info("Saving recent login : %j",e);let t=this.fetchCache();t=t.filter((t=>t.user.userId!==e.userId)),t.push({user:e,lastLoginEpochMS:Date.now()}),this.updateCache(t)}else r.warn("Cannot save recent login - no login provided : %s",e)}saveNewUser(e,t,o){n.trimToNull(e)&&f.validContact(o)?this.saveRecentLogin({userId:e,contactMethods:[o],webAuthnAuthenticatorIds:[],userLabel:t}):r.warn("Cannot save new user - invalid data : %s : %j",e,o)}removeUser(e){let t=this.fetchCache();t=t.filter((t=>t.user.userId!==e)),this.updateCache(t)}fetchAllLogins(){return Object.assign([],this.fetchCache())}clearAllLogins(){this.updateCache([])}}class I{localStorageKey;constructor(n){this.localStorageKey=n,e.notNullUndefinedOrOnlyWhitespaceString(this.localStorageKey,"localStorageKey"),localStorage||t.throwFormattedErr("Local storage not available on this platform")}fetchLoggedInUserWrapper(){const e=localStorage.getItem(this.localStorageKey);return n.trimToNull(e)?JSON.parse(e):null}logOutUser(){this.setLoggedInUserWrapper(null)}setLoggedInUserWrapper(e){e?localStorage.setItem(this.localStorageKey,JSON.stringify(e)):localStorage.removeItem(this.localStorageKey)}}class b extends w{localStorageKey;constructor(n){super(),this.localStorageKey=n,e.notNullUndefinedOrOnlyWhitespaceString(this.localStorageKey,"localStorageKey"),localStorage||t.throwFormattedErr("Local storage not available on this platform")}fetchCache(){const e=n.trimToNull(localStorage.getItem(n.trimToNull(this.localStorageKey)));return e?JSON.parse(e):[]}updateCache(e){const t=e?JSON.stringify(e):"[]";localStorage.setItem(n.trimToNull(this.localStorageKey),t)}}class C{wrapper;fetchLoggedInUserWrapper(){return this.wrapper}logOutUser(){this.wrapper=null}setLoggedInUserWrapper(e){this.wrapper=e}}class T extends w{_cache=[];fetchCache(){return this._cache}updateCache(e){this._cache=e}}!function(e){e.ExpiringCode="ExpiringCode",e.MagicLink="MagicLink"}(p||(p={})),function(e){e.Verified="Verified",e.Failed="Failed",e.Error="Error"}(m||(m={})),function(e){e.ble="ble",e.internal="internal",e.nfc="nfc",e.usb="usb",e.cable="cable",e.hybrid="hybrid"}(L||(L={}));export{g as RatchetWardenCommonInfo,l as WardenClient,w as WardenClientAbstractRecentLoginProvider,I as WardenClientLocalStorageLoggedInUserProvider,b as WardenClientLocalStorageRecentLoginProvider,C as WardenClientTransientMemoryLoggedInUserProvider,T as WardenClientTransientMemoryRecentLoginProvider,h as WardenContactType,p as WardenCustomerMessageType,d as WardenDelegatingCurrentUserProvidingUserServiceEventProcessingProvider,m as WardenStoreRegistrationResponseType,u as WardenUserService,f as WardenUtils,L as WardenWebAuthnTransportFutureType};
|
|
1
|
+
import{RequireRatchet as e,ErrorRatchet as t,StringRatchet as n,Logger as r,JwtRatchet as o}from"@bitblit/ratchet-common";import{BehaviorSubject as s,timer as i}from"rxjs";import{startRegistration as a,startAuthentication as c}from"@simplewebauthn/browser";class g{constructor(){}static buildInformation(){return{version:"232",hash:"bcce209de9712e649cb0c1ea207f3297337b39e3",branch:"alpha-2023-09-25-6",tag:"alpha-2023-09-25-6",timeBuiltISO:"2023-09-25T20:00:31-0700",notes:"No notes"}}}class l{commandSender;jwtProvider;constructor(t,n){this.commandSender=t,this.jwtProvider=n,e.notNullOrUndefined(t,"commandSender"),e.notNullOrUndefined(n,"jwtProvider")}async exchangeCommand(e,n){const r=JSON.stringify(e),o=await this.commandSender.sendCommand(r,this.jwtProvider.fetchCurrentLoggedInJwtToken()),s=JSON.parse(o);return s?.error&&!n&&t.throwFormattedErr("%s",s.error),s}async createAccount(e,t,n,r){const o={createAccount:{contact:e,sendCode:t,label:n,tags:r}};return(await this.exchangeCommand(o)).createAccount}async sendMagicLinkByUserId(e,t,n,r){const o={sendMagicLink:{userId:e,contactType:n,landingUrl:t,meta:r}};return(await this.exchangeCommand(o)).sendMagicLink}async sendMagicLink(e,t,n){const r={sendMagicLink:{contact:e,landingUrl:t,meta:n}};return(await this.exchangeCommand(r)).sendMagicLink}async generateWebAuthnAuthenticationChallengeForUserId(e){const t={generateWebAuthnAuthenticationChallengeForUserId:e},n=await this.exchangeCommand(t);return JSON.parse(n.generateWebAuthnAuthenticationChallengeForUserId.dataAsJson)}async generateWebAuthnRegistrationChallengeForLoggedInUser(){const e=await this.exchangeCommand({generateWebAuthnRegistrationChallengeForLoggedInUser:!0});return JSON.parse(e.generateWebAuthnRegistrationChallengeForLoggedInUser.dataAsJson)}async removeWebAuthnRegistration(e,t){const n={removeWebAuthnRegistration:{userId:e,credentialId:t}};return(await this.exchangeCommand(n)).removeWebAuthnRegistration}async removeWebAuthnRegistrationFromLoggedInUser(e){const t={removeWebAuthnRegistrationFromLoggedInUser:e};return(await this.exchangeCommand(t)).removeWebAuthnRegistrationFromLoggedInUser}async removeContactFromLoggedInUser(e){const t={removeContactFromLoggedInUser:e};return(await this.exchangeCommand(t)).removeContactFromLoggedInUser}async sendExpiringValidationToken(e){const t={sendExpiringValidationToken:e};return(await this.exchangeCommand(t)).sendExpiringValidationToken}async addContactToLoggedInUser(e){const t={addContactToLoggedInUser:e};return(await this.exchangeCommand(t)).addContactToLoggedInUser}async addWebAuthnRegistrationToLoggedInUser(e){const t={addWebAuthnRegistrationToLoggedInUser:{dataAsJson:JSON.stringify(e)}};return(await this.exchangeCommand(t)).addWebAuthnRegistrationToLoggedInUser}async performLoginCmd(e){const t={performLogin:e};return(await this.exchangeCommand(t)).performLogin}async refreshJwtToken(e){let t=null;if(n.trimToNull(e))try{t=(await this.exchangeCommand({refreshJwtToken:e})).refreshJwtToken}catch(e){r.error("JwtRefresh Failed : %s",e)}return t}async executeExpiringTokenBasedLogin(e,t){let n=null;try{const r={contact:e,expiringToken:t};n=await this.performLoginCmd(r)}catch(e){r.error("ExpiringToken login Failed : %s",e)}return n}}class d{wrapped;_currentUserSubject=new s(null);constructor(e){this.wrapped=e}fetchCurrentLoggedInJwtToken(){return this?._currentUserSubject?.getValue()?.jwtToken}get currentUserSubject(){return this._currentUserSubject}onAutomaticLogout(){this.wrapped&&this.wrapped.onAutomaticLogout()}onAutomaticTokenRefresh(e){this.wrapped&&this.wrapped.onAutomaticTokenRefresh(e)}onLoginFailure(e){this.wrapped&&this.wrapped.onLoginFailure(e)}onLogout(){this.wrapped&&this.wrapped.onLogout(),this.currentUserSubject.next(null)}onSuccessfulLogin(e){this.wrapped&&this.wrapped.onSuccessfulLogin(e),this.currentUserSubject.next(e)}}class u{options;loggedInTimerSubscription;_autoRefreshEnabled=!1;constructor(e){this.options=e,r.info("Initializing user service");const t=this.options.loggedInUserProvider.fetchLoggedInUserWrapper();u.wrapperIsExpired(t)?(r.info("Stored token is expired, removing it"),this.options.loggedInUserProvider.logOutUser()):this.options.eventProcessor.onSuccessfulLogin(t);const n=this.options.loginCheckTimerPingSeconds||2.5;this.loggedInTimerSubscription=i(0,1e3*n).subscribe((e=>this.checkForAutoLogoutOrRefresh(e)))}cleanShutDown(){this.loggedInTimerSubscription&&this.loggedInTimerSubscription.unsubscribe()}get serviceOptions(){return this.options}async createAccount(e,t,r,o){const s=await this.options.wardenClient.createAccount(e,t,r,o);return this.options.recentLoginProvider&&n.trimToNull(s)&&this.options.recentLoginProvider.saveNewUser(s,r,e),s}async addContactToLoggedInUser(e){return this.options.wardenClient.addContactToLoggedInUser(e)}get autoRefreshEnabled(){return this._autoRefreshEnabled}set autoRefreshEnabled(e){if(e){if(!this.options.allowAutoRefresh)throw new Error("Cannot enable auto-refresh - this is disabled in the user service options");this._autoRefreshEnabled=!0}else this._autoRefreshEnabled=!1}async checkForAutoLogoutOrRefresh(e){r.debug("Checking for auto-logout or refresh : %s",e);const t=this.fetchLoggedInUserWrapper();if(t){const e=this.options.autoLoginHandlingThresholdSeconds||10;if(t.expirationEpochSeconds-Math.floor(Date.now()/1e3)<e)if(this.autoRefreshEnabled){r.info("Under threshold, initiating auto-refresh");const e=await this.refreshToken();this.options.eventProcessor.onAutomaticTokenRefresh(e)}else r.info("Under threshold, initiating auto-logout"),this.logout()}}logout(){this.options.loggedInUserProvider.logOutUser(),this.options.eventProcessor.onLogout()}static wrapperIsExpired(e){return e?.userObject?.exp&&e.expirationEpochSeconds<Date.now()/1e3}fetchLoggedInUserWrapper(){let e=this.options.loggedInUserProvider.fetchLoggedInUserWrapper();return e&&u.wrapperIsExpired(e)&&(r.info("Token is expired - auto logout triggered"),this.logout(),e=null),e}loggedInUserHasRole(e){let t=!1;if(n.trimToNull(e)){const n=this.fetchLoggedInUserWrapper(),r=e.toLowerCase();t=n?.userObject?.roles&&!!n.userObject.roles.find((e=>e.toLowerCase()===r))}return t}isLoggedIn(){return!!this.fetchLoggedInUserWrapper()}fetchLoggedInUserJwtObject(){const e=this.fetchLoggedInUserWrapper();return e?e.userObject:null}fetchLoggedInUserJwtToken(){const e=this.fetchLoggedInUserWrapper();return e?e.jwtToken:null}fetchLoggedInUserObject(){const e=this.fetchLoggedInUserJwtObject();return e?e.user:null}fetchLoggedInUserExpirationEpochSeconds(){const e=this.fetchLoggedInUserJwtObject();return e?e.exp:null}fetchLoggedInUserRemainingSeconds(){const e=this.fetchLoggedInUserJwtObject();return e?e.exp-Math.floor(Date.now()/1e3):null}updateLoggedInUserFromTokenString(e){let t=null;if(n.trimToNull(e)){r.info("updateLoggedInUserFromTokenString : %s",e);const n=o.decodeTokenNoVerify(e);n?(t={userObject:n,jwtToken:e,expirationEpochSeconds:n.exp},this.options.loggedInUserProvider.setLoggedInUserWrapper(t),this.updateRecentLoginsFromWardenEntrySummary(n.loginData),this.options.eventProcessor.onSuccessfulLogin(t)):(r.warn("Failed to parse token %s - ignoring login and triggering failure"),this.options.eventProcessor.onLoginFailure("Could not parse token string"))}else r.info("Called updateLoggedInUserFromTokenString with empty string - logging out"),this.logout();return t}async refreshToken(){let e=null;const t=this.fetchLoggedInUserWrapper();if(t){const n=await this.options.wardenClient.refreshJwtToken(t.jwtToken);e=await this.updateLoggedInUserFromTokenString(n)}else r.info("Could not refresh - no token available");return e}async sendExpiringCode(e){return this.options.wardenClient.sendExpiringValidationToken(e)}async processWardenLoginResults(e){let t=null;return e?(r.info("Warden: response : %j ",e),e.jwtToken?(r.info("Applying login"),t=await this.updateLoggedInUserFromTokenString(e.jwtToken)):e.error?this.options.eventProcessor.onLoginFailure(e.error):(r.error("Response contained neither token nor error"),this.options.eventProcessor.onLoginFailure("Response contained neither token nor error"))):(r.error("Login call failed"),this.options.eventProcessor.onLoginFailure("Login call returned null")),t}updateRecentLoginsFromWardenEntrySummary(e){this.options.recentLoginProvider&&e?(r.info("UserService : Saving recent login %j",e),this.options.recentLoginProvider.saveRecentLogin(e)):r.info("Not saving recent login - no storage configured or no data passed")}updateRecentLoginsFromLoggedInUserWrapper(e){this.updateRecentLoginsFromWardenEntrySummary(e?.userObject?.loginData)}async executeWebAuthnBasedLogin(e){const t=await this.executeWebAuthnLoginToWardenLoginResults(e),n=await this.processWardenLoginResults(t);return this.updateRecentLoginsFromLoggedInUserWrapper(n),n}async removeWebAuthnRegistrationFromLoggedInUser(e){return await this.options.wardenClient.removeWebAuthnRegistrationFromLoggedInUser(e)}async removeContactFromLoggedInUser(e){return await this.options.wardenClient.removeContactFromLoggedInUser(e)}async executeValidationTokenBasedLogin(e,t){r.info("Warden: executeValidationTokenBasedLogin : %j : %s ",e,t);const n=await this.options.wardenClient.performLoginCmd({contact:e,expiringToken:t}),o=await this.processWardenLoginResults(n);return this.updateRecentLoginsFromLoggedInUserWrapper(o),o}async saveCurrentDeviceAsWebAuthnForCurrentUser(){const e=await this.options.wardenClient.generateWebAuthnRegistrationChallengeForLoggedInUser(),t=await a(e),n=await this.options.wardenClient.addWebAuthnRegistrationToLoggedInUser(t);return this.updateRecentLoginsFromWardenEntrySummary(n),n}async executeWebAuthnLoginToWardenLoginResults(e){let t=null;try{const n=await this.options.wardenClient.generateWebAuthnAuthenticationChallengeForUserId(e);r.info("Got login challenge : %s",n);const o=await c(n);r.info("Got creds: %j",o);const s={userId:e,webAuthn:o};t=await this.options.wardenClient.performLoginCmd(s)}catch(e){r.error("WebauthN Failed : %s",e)}return t}}var h,p,m,L;!function(e){e.TextCapablePhoneNumber="TextCapablePhoneNumber",e.EmailAddress="EmailAddress"}(h||(h={}));class f{constructor(){}static extractContactsOfType(e,t){let n=null;return e?.contactMethods&&(n=e.contactMethods.filter((e=>e.type===t)).map((e=>e.value))),n}static validLoginRequest(e){let t=!1;return e&&(n.trimToNull(e.userId)||f.validContact(e.contact))&&(n.trimToNull(e.expiringToken)||n.trimToNull(e.jwtTokenToRefresh)||e.webAuthn)&&(t=!0),t}static stringToWardenContact(e){let t=null;const n=f.stringToContactType(e);return n?t={type:n,value:e}:r.error("Failed to convert a string to a contact type",e),t}static teamRolesToRoles(e){return e?.length?e.map((e=>f.teamRoleToRoleString(e))):[]}static roleStringsToTeamRoles(e){return e?.length?e.map((e=>f.roleStringToTeamRole(e))):[]}static roleStringToTeamRole(e){let t=null;if(e&&e.indexOf("_/_")>=0){const n=e.split("_/_");t={team:n[0],role:n[1]}}return t}static teamRoleToRoleString(e){let t=null;return e?.role&&e?.team&&(t=e.team+"_/_"+e.role),t}static stringToContactType(e){let t=null;return n.trimToNull(e)&&(t=f.stringIsEmailAddress(e)?h.EmailAddress:null,t=!t&&f.stringIsPhoneNumber(e)?h.TextCapablePhoneNumber:t),t}static validContact(e){let t=!1;if(e?.type&&n.trimToNull(e?.value))switch(e.type){case h.EmailAddress:t=f.stringIsEmailAddress(e.value);break;case h.TextCapablePhoneNumber:t=f.stringIsPhoneNumber(e.value);break;default:t=!1}return t}static stringIsEmailAddress(e){return!!e.match(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/)}static stringIsPhoneNumber(e){return!!e.match(/^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/im)}static stripWardenEntryToSummary(e){return e?{userId:e.userId,userLabel:e.userLabel,contactMethods:e.contactMethods,webAuthnAuthenticatorIds:(e.webAuthnAuthenticators||[]).map((e=>e.credentialIdBase64))}:null}}class w{saveRecentLogin(e){if(e?.userId){r.info("Saving recent login : %j",e);let t=this.fetchCache();t=t.filter((t=>t.user.userId!==e.userId)),t.push({user:e,lastLoginEpochMS:Date.now()}),this.updateCache(t)}else r.warn("Cannot save recent login - no login provided : %s",e)}saveNewUser(e,t,o){n.trimToNull(e)&&f.validContact(o)?this.saveRecentLogin({userId:e,contactMethods:[o],webAuthnAuthenticatorIds:[],userLabel:t}):r.warn("Cannot save new user - invalid data : %s : %j",e,o)}removeUser(e){let t=this.fetchCache();t=t.filter((t=>t.user.userId!==e)),this.updateCache(t)}fetchAllLogins(){return Object.assign([],this.fetchCache())}clearAllLogins(){this.updateCache([])}}class I{localStorageKey;constructor(n){this.localStorageKey=n,e.notNullUndefinedOrOnlyWhitespaceString(this.localStorageKey,"localStorageKey"),localStorage||t.throwFormattedErr("Local storage not available on this platform")}fetchLoggedInUserWrapper(){const e=localStorage.getItem(this.localStorageKey);return n.trimToNull(e)?JSON.parse(e):null}logOutUser(){this.setLoggedInUserWrapper(null)}setLoggedInUserWrapper(e){e?localStorage.setItem(this.localStorageKey,JSON.stringify(e)):localStorage.removeItem(this.localStorageKey)}}class b extends w{localStorageKey;constructor(n){super(),this.localStorageKey=n,e.notNullUndefinedOrOnlyWhitespaceString(this.localStorageKey,"localStorageKey"),localStorage||t.throwFormattedErr("Local storage not available on this platform")}fetchCache(){const e=n.trimToNull(localStorage.getItem(n.trimToNull(this.localStorageKey)));return e?JSON.parse(e):[]}updateCache(e){const t=e?JSON.stringify(e):"[]";localStorage.setItem(n.trimToNull(this.localStorageKey),t)}}class C{wrapper;fetchLoggedInUserWrapper(){return this.wrapper}logOutUser(){this.wrapper=null}setLoggedInUserWrapper(e){this.wrapper=e}}class T extends w{_cache=[];fetchCache(){return this._cache}updateCache(e){this._cache=e}}!function(e){e.ExpiringCode="ExpiringCode",e.MagicLink="MagicLink"}(p||(p={})),function(e){e.Verified="Verified",e.Failed="Failed",e.Error="Error"}(m||(m={})),function(e){e.ble="ble",e.internal="internal",e.nfc="nfc",e.usb="usb",e.cable="cable",e.hybrid="hybrid"}(L||(L={}));export{g as RatchetWardenCommonInfo,l as WardenClient,w as WardenClientAbstractRecentLoginProvider,I as WardenClientLocalStorageLoggedInUserProvider,b as WardenClientLocalStorageRecentLoginProvider,C as WardenClientTransientMemoryLoggedInUserProvider,T as WardenClientTransientMemoryRecentLoginProvider,h as WardenContactType,p as WardenCustomerMessageType,d as WardenDelegatingCurrentUserProvidingUserServiceEventProcessingProvider,m as WardenStoreRegistrationResponseType,u as WardenUserService,f as WardenUtils,L as WardenWebAuthnTransportFutureType};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/build/ratchet-warden-common-info.ts","../src/client/warden-client.ts","../src/client/warden-delegating-current-user-providing-user-service-event-processing-provider.ts","../src/client/warden-user-service.ts","../src/common/model/warden-contact-type.ts","../src/common/model/warden-customer-message-type.ts","../src/common/model/warden-store-registration-response-type.ts","../src/common/model/warden-web-authn-transport-future-type.ts","../src/common/util/warden-utils.ts","../src/client/provider/warden-client-abstract-recent-login-provider.ts","../src/client/provider/warden-client-local-storage-logged-in-user-provider.ts","../src/client/provider/warden-client-local-storage-recent-login-provider.ts","../src/client/provider/warden-client-transient-memory-logged-in-user-provider.ts","../src/client/provider/warden-client-transient-memory-recent-login-provider.ts"],"sourcesContent":["export class RatchetWardenCommonInfo {\n constructor() { }\n static buildInformation() {\n const val = {\n version: 'LOCAL-SNAPSHOT',\n hash: 'LOCAL-HASH',\n branch: 'LOCAL-BRANCH',\n tag: 'LOCAL-TAG',\n timeBuiltISO: 'LOCAL-TIME-ISO',\n notes: 'LOCAL-NOTES',\n };\n return val;\n }\n}\n//# sourceMappingURL=ratchet-warden-common-info.js.map","import { Logger } from '@bitblit/ratchet-common';\nimport { StringRatchet } from '@bitblit/ratchet-common';\nimport { ErrorRatchet } from '@bitblit/ratchet-common';\nimport { RequireRatchet } from '@bitblit/ratchet-common';\nexport class WardenClient {\n commandSender;\n jwtProvider;\n constructor(commandSender, jwtProvider) {\n this.commandSender = commandSender;\n this.jwtProvider = jwtProvider;\n RequireRatchet.notNullOrUndefined(commandSender, 'commandSender');\n RequireRatchet.notNullOrUndefined(jwtProvider, 'jwtProvider');\n }\n async exchangeCommand(cmd, returnErrors) {\n const asString = JSON.stringify(cmd);\n const resp = await this.commandSender.sendCommand(asString, this.jwtProvider.fetchCurrentLoggedInJwtToken());\n const parsed = JSON.parse(resp);\n if (parsed?.error && !returnErrors) {\n ErrorRatchet.throwFormattedErr('%s', parsed.error);\n }\n return parsed;\n }\n async createAccount(contact, sendCode, label, tags) {\n const cmd = {\n createAccount: {\n contact: contact,\n sendCode: sendCode,\n label: label,\n tags: tags,\n },\n };\n const rval = await this.exchangeCommand(cmd);\n return rval.createAccount;\n }\n async sendMagicLinkByUserId(userId, landingUrl, contactType, meta) {\n const cmd = {\n sendMagicLink: {\n userId: userId,\n contactType: contactType,\n landingUrl: landingUrl,\n meta: meta,\n },\n };\n const rval = await this.exchangeCommand(cmd);\n return rval.sendMagicLink;\n }\n async sendMagicLink(contact, landingUrl, meta) {\n const cmd = {\n sendMagicLink: {\n contact: contact,\n landingUrl: landingUrl,\n meta: meta,\n },\n };\n const rval = await this.exchangeCommand(cmd);\n return rval.sendMagicLink;\n }\n async generateWebAuthnAuthenticationChallengeForUserId(userId) {\n const cmd = {\n generateWebAuthnAuthenticationChallengeForUserId: userId,\n };\n const rval = await this.exchangeCommand(cmd);\n const parsed = JSON.parse(rval.generateWebAuthnAuthenticationChallengeForUserId.dataAsJson);\n return parsed;\n }\n async generateWebAuthnRegistrationChallengeForLoggedInUser() {\n const cmd = {\n generateWebAuthnRegistrationChallengeForLoggedInUser: true,\n };\n const rval = await this.exchangeCommand(cmd);\n const parsed = JSON.parse(rval.generateWebAuthnRegistrationChallengeForLoggedInUser.dataAsJson);\n return parsed;\n }\n async removeWebAuthnRegistration(userId, credId) {\n const cmd = {\n removeWebAuthnRegistration: {\n userId: userId,\n credentialId: credId,\n },\n };\n const rval = await this.exchangeCommand(cmd);\n return rval.removeWebAuthnRegistration;\n }\n async removeWebAuthnRegistrationFromLoggedInUser(input) {\n const cmd = {\n removeWebAuthnRegistrationFromLoggedInUser: input,\n };\n const rval = await this.exchangeCommand(cmd);\n return rval.removeWebAuthnRegistrationFromLoggedInUser;\n }\n async removeContactFromLoggedInUser(input) {\n const cmd = {\n removeContactFromLoggedInUser: input,\n };\n const rval = await this.exchangeCommand(cmd);\n return rval.removeContactFromLoggedInUser;\n }\n async sendExpiringValidationToken(contact) {\n const cmd = {\n sendExpiringValidationToken: contact,\n };\n const rval = await this.exchangeCommand(cmd);\n return rval.sendExpiringValidationToken;\n }\n async addContactToLoggedInUser(contact) {\n const cmd = {\n addContactToLoggedInUser: contact,\n };\n const rval = await this.exchangeCommand(cmd);\n return rval.addContactToLoggedInUser;\n }\n async addWebAuthnRegistrationToLoggedInUser(data) {\n const cmd = {\n addWebAuthnRegistrationToLoggedInUser: {\n dataAsJson: JSON.stringify(data),\n },\n };\n const rval = await this.exchangeCommand(cmd);\n return rval.addWebAuthnRegistrationToLoggedInUser;\n }\n async performLoginCmd(login) {\n const loginCmd = {\n performLogin: login,\n };\n const cmdResponse = await this.exchangeCommand(loginCmd);\n return cmdResponse.performLogin;\n }\n async refreshJwtToken(oldJwtToken) {\n let rval = null;\n if (StringRatchet.trimToNull(oldJwtToken)) {\n try {\n const resp = await this.exchangeCommand({ refreshJwtToken: oldJwtToken });\n rval = resp.refreshJwtToken;\n }\n catch (err) {\n Logger.error('JwtRefresh Failed : %s', err);\n }\n }\n return rval;\n }\n async executeExpiringTokenBasedLogin(contact, expiringToken) {\n let rval = null;\n try {\n const loginCmd = {\n contact: contact,\n expiringToken: expiringToken,\n };\n rval = await this.performLoginCmd(loginCmd);\n if (rval?.jwtToken) {\n }\n }\n catch (err) {\n Logger.error('ExpiringToken login Failed : %s', err);\n }\n return rval;\n }\n}\n//# sourceMappingURL=warden-client.js.map","import { BehaviorSubject } from 'rxjs';\nexport class WardenDelegatingCurrentUserProvidingUserServiceEventProcessingProvider {\n wrapped;\n _currentUserSubject = new BehaviorSubject(null);\n constructor(wrapped) {\n this.wrapped = wrapped;\n }\n fetchCurrentLoggedInJwtToken() {\n return this?._currentUserSubject?.getValue()?.jwtToken;\n }\n get currentUserSubject() {\n return this._currentUserSubject;\n }\n onAutomaticLogout() {\n if (this.wrapped) {\n this.wrapped.onAutomaticLogout();\n }\n }\n onAutomaticTokenRefresh(refreshUser) {\n if (this.wrapped) {\n this.wrapped.onAutomaticTokenRefresh(refreshUser);\n }\n }\n onLoginFailure(reason) {\n if (this.wrapped) {\n this.wrapped.onLoginFailure(reason);\n }\n }\n onLogout() {\n if (this.wrapped) {\n this.wrapped.onLogout();\n }\n this.currentUserSubject.next(null);\n }\n onSuccessfulLogin(newUser) {\n if (this.wrapped) {\n this.wrapped.onSuccessfulLogin(newUser);\n }\n this.currentUserSubject.next(newUser);\n }\n}\n//# sourceMappingURL=warden-delegating-current-user-providing-user-service-event-processing-provider.js.map","import { Logger } from '@bitblit/ratchet-common';\nimport { StringRatchet } from '@bitblit/ratchet-common';\nimport { JwtRatchet } from '@bitblit/ratchet-common';\nimport { timer } from 'rxjs';\nimport { startRegistration, startAuthentication } from '@simplewebauthn/browser';\nexport class WardenUserService {\n options;\n loggedInTimerSubscription;\n _autoRefreshEnabled = false;\n constructor(options) {\n this.options = options;\n Logger.info('Initializing user service');\n const stored = this.options.loggedInUserProvider.fetchLoggedInUserWrapper();\n if (WardenUserService.wrapperIsExpired(stored)) {\n Logger.info('Stored token is expired, removing it');\n this.options.loggedInUserProvider.logOutUser();\n }\n else {\n this.options.eventProcessor.onSuccessfulLogin(stored);\n }\n const timerSeconds = this.options.loginCheckTimerPingSeconds || 2.5;\n this.loggedInTimerSubscription = timer(0, timerSeconds * 1000).subscribe((t) => this.checkForAutoLogoutOrRefresh(t));\n }\n cleanShutDown() {\n if (this.loggedInTimerSubscription) {\n this.loggedInTimerSubscription.unsubscribe();\n }\n }\n get serviceOptions() {\n return this.options;\n }\n async createAccount(contact, sendCode, label, tags) {\n const rval = await this.options.wardenClient.createAccount(contact, sendCode, label, tags);\n if (this.options.recentLoginProvider && StringRatchet.trimToNull(rval)) {\n this.options.recentLoginProvider.saveNewUser(rval, label, contact);\n }\n return rval;\n }\n async addContactToLoggedInUser(contact) {\n return this.options.wardenClient.addContactToLoggedInUser(contact);\n }\n get autoRefreshEnabled() {\n return this._autoRefreshEnabled;\n }\n set autoRefreshEnabled(newValue) {\n if (newValue) {\n if (this.options.allowAutoRefresh) {\n this._autoRefreshEnabled = true;\n }\n else {\n throw new Error('Cannot enable auto-refresh - this is disabled in the user service options');\n }\n }\n else {\n this._autoRefreshEnabled = false;\n }\n }\n async checkForAutoLogoutOrRefresh(t) {\n Logger.debug('Checking for auto-logout or refresh : %s', t);\n const current = this.fetchLoggedInUserWrapper();\n if (current) {\n const thresholdSeconds = this.options.autoLoginHandlingThresholdSeconds || 10;\n const secondsLeft = current.expirationEpochSeconds - Math.floor(Date.now() / 1000);\n if (secondsLeft < thresholdSeconds) {\n if (this.autoRefreshEnabled) {\n Logger.info('Under threshold, initiating auto-refresh');\n const result = await this.refreshToken();\n this.options.eventProcessor.onAutomaticTokenRefresh(result);\n }\n else {\n Logger.info('Under threshold, initiating auto-logout');\n this.logout();\n }\n }\n }\n }\n logout() {\n this.options.loggedInUserProvider.logOutUser();\n this.options.eventProcessor.onLogout();\n }\n static wrapperIsExpired(value) {\n const rval = value?.userObject?.exp && value.expirationEpochSeconds < Date.now() / 1000;\n return rval;\n }\n fetchLoggedInUserWrapper() {\n let tmp = this.options.loggedInUserProvider.fetchLoggedInUserWrapper();\n if (tmp) {\n if (WardenUserService.wrapperIsExpired(tmp)) {\n Logger.info('Token is expired - auto logout triggered');\n this.logout();\n tmp = null;\n }\n }\n return tmp;\n }\n loggedInUserHasRole(role) {\n let rval = false;\n if (StringRatchet.trimToNull(role)) {\n const t = this.fetchLoggedInUserWrapper();\n const testRole = role.toLowerCase();\n rval = t?.userObject?.roles && !!t.userObject.roles.find((r) => r.toLowerCase() === testRole);\n }\n return rval;\n }\n isLoggedIn() {\n const t = this.fetchLoggedInUserWrapper();\n return !!t;\n }\n fetchLoggedInUserJwtObject() {\n const t = this.fetchLoggedInUserWrapper();\n return t ? t.userObject : null;\n }\n fetchLoggedInUserJwtToken() {\n const t = this.fetchLoggedInUserWrapper();\n return t ? t.jwtToken : null;\n }\n fetchLoggedInUserObject() {\n const t = this.fetchLoggedInUserJwtObject();\n return t ? t.user : null;\n }\n fetchLoggedInUserExpirationEpochSeconds() {\n const t = this.fetchLoggedInUserJwtObject();\n return t ? t.exp : null;\n }\n fetchLoggedInUserRemainingSeconds() {\n const t = this.fetchLoggedInUserJwtObject();\n return t ? t.exp - Math.floor(Date.now() / 1000) : null;\n }\n updateLoggedInUserFromTokenString(token) {\n let rval = null;\n if (!StringRatchet.trimToNull(token)) {\n Logger.info('Called updateLoggedInUserFromTokenString with empty string - logging out');\n this.logout();\n }\n else {\n Logger.info('updateLoggedInUserFromTokenString : %s', token);\n const parsed = JwtRatchet.decodeTokenNoVerify(token);\n if (parsed) {\n rval = {\n userObject: parsed,\n jwtToken: token,\n expirationEpochSeconds: parsed.exp,\n };\n this.options.loggedInUserProvider.setLoggedInUserWrapper(rval);\n this.updateRecentLoginsFromWardenEntrySummary(parsed.loginData);\n this.options.eventProcessor.onSuccessfulLogin(rval);\n }\n else {\n Logger.warn('Failed to parse token %s - ignoring login and triggering failure');\n this.options.eventProcessor.onLoginFailure('Could not parse token string');\n }\n }\n return rval;\n }\n async refreshToken() {\n let rval = null;\n const currentWrapper = this.fetchLoggedInUserWrapper();\n if (!currentWrapper) {\n Logger.info('Could not refresh - no token available');\n }\n else {\n const newToken = await this.options.wardenClient.refreshJwtToken(currentWrapper.jwtToken);\n rval = await this.updateLoggedInUserFromTokenString(newToken);\n }\n return rval;\n }\n async sendExpiringCode(contact) {\n return this.options.wardenClient.sendExpiringValidationToken(contact);\n }\n async processWardenLoginResults(resp) {\n let rval = null;\n if (resp) {\n Logger.info('Warden: response : %j ', resp);\n if (resp.jwtToken) {\n Logger.info('Applying login');\n rval = await this.updateLoggedInUserFromTokenString(resp.jwtToken);\n }\n else if (resp.error) {\n this.options.eventProcessor.onLoginFailure(resp.error);\n }\n else {\n Logger.error('Response contained neither token nor error');\n this.options.eventProcessor.onLoginFailure('Response contained neither token nor error');\n }\n }\n else {\n Logger.error('Login call failed');\n this.options.eventProcessor.onLoginFailure('Login call returned null');\n }\n return rval;\n }\n updateRecentLoginsFromWardenEntrySummary(res) {\n if (this.options.recentLoginProvider && res) {\n Logger.info('UserService : Saving recent login %j', res);\n this.options.recentLoginProvider.saveRecentLogin(res);\n }\n else {\n Logger.info('Not saving recent login - no storage configured or no data passed');\n }\n }\n updateRecentLoginsFromLoggedInUserWrapper(res) {\n this.updateRecentLoginsFromWardenEntrySummary(res?.userObject?.loginData);\n }\n async executeWebAuthnBasedLogin(userId) {\n const resp = await this.executeWebAuthnLoginToWardenLoginResults(userId);\n const rval = await this.processWardenLoginResults(resp);\n this.updateRecentLoginsFromLoggedInUserWrapper(rval);\n return rval;\n }\n async removeWebAuthnRegistrationFromLoggedInUser(input) {\n const rval = await this.options.wardenClient.removeWebAuthnRegistrationFromLoggedInUser(input);\n return rval;\n }\n async removeContactFromLoggedInUser(input) {\n const rval = await this.options.wardenClient.removeContactFromLoggedInUser(input);\n return rval;\n }\n async executeValidationTokenBasedLogin(contact, token) {\n Logger.info('Warden: executeValidationTokenBasedLogin : %j : %s ', contact, token);\n const resp = await this.options.wardenClient.performLoginCmd({ contact: contact, expiringToken: token });\n const rval = await this.processWardenLoginResults(resp);\n this.updateRecentLoginsFromLoggedInUserWrapper(rval);\n return rval;\n }\n async saveCurrentDeviceAsWebAuthnForCurrentUser() {\n const input = await this.options.wardenClient.generateWebAuthnRegistrationChallengeForLoggedInUser();\n const creds = await startRegistration(input);\n const output = await this.options.wardenClient.addWebAuthnRegistrationToLoggedInUser(creds);\n this.updateRecentLoginsFromWardenEntrySummary(output);\n return output;\n }\n async executeWebAuthnLoginToWardenLoginResults(userId) {\n let rval = null;\n try {\n const input = await this.options.wardenClient.generateWebAuthnAuthenticationChallengeForUserId(userId);\n Logger.info('Got login challenge : %s', input);\n const creds = await startAuthentication(input);\n Logger.info('Got creds: %j', creds);\n const loginCmd = {\n userId: userId,\n webAuthn: creds,\n };\n rval = await this.options.wardenClient.performLoginCmd(loginCmd);\n if (rval?.jwtToken) {\n }\n }\n catch (err) {\n Logger.error('WebauthN Failed : %s', err);\n }\n return rval;\n }\n}\n//# sourceMappingURL=warden-user-service.js.map","export var WardenContactType;\n(function (WardenContactType) {\n WardenContactType[\"TextCapablePhoneNumber\"] = \"TextCapablePhoneNumber\";\n WardenContactType[\"EmailAddress\"] = \"EmailAddress\";\n})(WardenContactType || (WardenContactType = {}));\n//# sourceMappingURL=warden-contact-type.js.map","export var WardenCustomerMessageType;\n(function (WardenCustomerMessageType) {\n WardenCustomerMessageType[\"ExpiringCode\"] = \"ExpiringCode\";\n WardenCustomerMessageType[\"MagicLink\"] = \"MagicLink\";\n})(WardenCustomerMessageType || (WardenCustomerMessageType = {}));\n//# sourceMappingURL=warden-customer-message-type.js.map","export var WardenStoreRegistrationResponseType;\n(function (WardenStoreRegistrationResponseType) {\n WardenStoreRegistrationResponseType[\"Verified\"] = \"Verified\";\n WardenStoreRegistrationResponseType[\"Failed\"] = \"Failed\";\n WardenStoreRegistrationResponseType[\"Error\"] = \"Error\";\n})(WardenStoreRegistrationResponseType || (WardenStoreRegistrationResponseType = {}));\n//# sourceMappingURL=warden-store-registration-response-type.js.map","export var WardenWebAuthnTransportFutureType;\n(function (WardenWebAuthnTransportFutureType) {\n WardenWebAuthnTransportFutureType[\"ble\"] = \"ble\";\n WardenWebAuthnTransportFutureType[\"internal\"] = \"internal\";\n WardenWebAuthnTransportFutureType[\"nfc\"] = \"nfc\";\n WardenWebAuthnTransportFutureType[\"usb\"] = \"usb\";\n WardenWebAuthnTransportFutureType[\"cable\"] = \"cable\";\n WardenWebAuthnTransportFutureType[\"hybrid\"] = \"hybrid\";\n})(WardenWebAuthnTransportFutureType || (WardenWebAuthnTransportFutureType = {}));\n//# sourceMappingURL=warden-web-authn-transport-future-type.js.map","import { WardenContactType } from '../model/warden-contact-type.js';\nimport { Logger } from '@bitblit/ratchet-common';\nimport { StringRatchet } from '@bitblit/ratchet-common';\nexport class WardenUtils {\n constructor() { }\n static extractContactsOfType(req, type) {\n let rval = null;\n if (req?.contactMethods) {\n rval = req.contactMethods.filter((s) => s.type === type).map((s) => s.value);\n }\n return rval;\n }\n static validLoginRequest(req) {\n let rval = false;\n if (req) {\n if (StringRatchet.trimToNull(req.userId) || WardenUtils.validContact(req.contact)) {\n if (StringRatchet.trimToNull(req.expiringToken) || StringRatchet.trimToNull(req.jwtTokenToRefresh) || req.webAuthn) {\n rval = true;\n }\n }\n }\n return rval;\n }\n static stringToWardenContact(input) {\n let rval = null;\n const type = WardenUtils.stringToContactType(input);\n if (type) {\n rval = {\n type: type,\n value: input,\n };\n }\n else {\n Logger.error('Failed to convert a string to a contact type', input);\n }\n return rval;\n }\n static teamRolesToRoles(teamRoles) {\n const rval = teamRoles?.length ? teamRoles.map((t) => WardenUtils.teamRoleToRoleString(t)) : [];\n return rval;\n }\n static roleStringsToTeamRoles(roles) {\n const rval = roles?.length ? roles.map((t) => WardenUtils.roleStringToTeamRole(t)) : [];\n return rval;\n }\n static roleStringToTeamRole(role) {\n let rval = null;\n if (role && role.indexOf('_/_') >= 0) {\n const sp = role.split('_/_');\n rval = {\n team: sp[0],\n role: sp[1],\n };\n }\n return rval;\n }\n static teamRoleToRoleString(tr) {\n let rval = null;\n if (tr?.role && tr?.team) {\n rval = tr.team + '_/_' + tr.role;\n }\n return rval;\n }\n static stringToContactType(input) {\n let rval = null;\n if (!!StringRatchet.trimToNull(input)) {\n rval = WardenUtils.stringIsEmailAddress(input) ? WardenContactType.EmailAddress : null;\n rval = !rval && WardenUtils.stringIsPhoneNumber(input) ? WardenContactType.TextCapablePhoneNumber : rval;\n }\n return rval;\n }\n static validContact(contact) {\n let rval = false;\n if (contact?.type && StringRatchet.trimToNull(contact?.value)) {\n switch (contact.type) {\n case WardenContactType.EmailAddress:\n rval = WardenUtils.stringIsEmailAddress(contact.value);\n break;\n case WardenContactType.TextCapablePhoneNumber:\n rval = WardenUtils.stringIsPhoneNumber(contact.value);\n break;\n default:\n rval = false;\n }\n }\n return rval;\n }\n static stringIsEmailAddress(value) {\n return !!value.match(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/);\n }\n static stringIsPhoneNumber(value) {\n return !!value.match(/^[\\\\+]?[(]?[0-9]{3}[)]?[-\\\\s\\\\.]?[0-9]{3}[-\\\\s\\\\.]?[0-9]{4,6}$/im);\n }\n static stripWardenEntryToSummary(we) {\n const rval = we\n ? {\n userId: we.userId,\n userLabel: we.userLabel,\n contactMethods: we.contactMethods,\n webAuthnAuthenticatorIds: (we.webAuthnAuthenticators || []).map((s) => s.credentialIdBase64),\n }\n : null;\n return rval;\n }\n}\n//# sourceMappingURL=warden-utils.js.map","import { Logger } from '@bitblit/ratchet-common';\nimport { StringRatchet } from '@bitblit/ratchet-common';\nimport { WardenUtils } from '../../common/util/warden-utils.js';\nexport class WardenClientAbstractRecentLoginProvider {\n saveRecentLogin(entry) {\n if (entry?.userId) {\n Logger.info('Saving recent login : %j', entry);\n let list = this.fetchCache();\n list = list.filter((s) => s.user.userId !== entry.userId);\n list.push({\n user: entry,\n lastLoginEpochMS: Date.now(),\n });\n this.updateCache(list);\n }\n else {\n Logger.warn('Cannot save recent login - no login provided : %s', entry);\n }\n }\n saveNewUser(userId, label, contact) {\n if (StringRatchet.trimToNull(userId) && WardenUtils.validContact(contact)) {\n this.saveRecentLogin({\n userId: userId,\n contactMethods: [contact],\n webAuthnAuthenticatorIds: [],\n userLabel: label,\n });\n }\n else {\n Logger.warn('Cannot save new user - invalid data : %s : %j', userId, contact);\n }\n }\n removeUser(userId) {\n let list = this.fetchCache();\n list = list.filter((c) => c.user.userId !== userId);\n this.updateCache(list);\n }\n fetchAllLogins() {\n return Object.assign([], this.fetchCache());\n }\n clearAllLogins() {\n this.updateCache([]);\n }\n}\n//# sourceMappingURL=warden-client-abstract-recent-login-provider.js.map","import { StringRatchet } from '@bitblit/ratchet-common';\nimport { ErrorRatchet } from '@bitblit/ratchet-common';\nimport { RequireRatchet } from '@bitblit/ratchet-common';\nexport class WardenClientLocalStorageLoggedInUserProvider {\n localStorageKey;\n constructor(localStorageKey) {\n this.localStorageKey = localStorageKey;\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(this.localStorageKey, 'localStorageKey');\n if (!localStorage) {\n ErrorRatchet.throwFormattedErr('Local storage not available on this platform');\n }\n }\n fetchLoggedInUserWrapper() {\n const asString = localStorage.getItem(this.localStorageKey);\n const rval = StringRatchet.trimToNull(asString) ? JSON.parse(asString) : null;\n return rval;\n }\n logOutUser() {\n this.setLoggedInUserWrapper(null);\n }\n setLoggedInUserWrapper(wrapper) {\n if (wrapper) {\n localStorage.setItem(this.localStorageKey, JSON.stringify(wrapper));\n }\n else {\n localStorage.removeItem(this.localStorageKey);\n }\n }\n}\n//# sourceMappingURL=warden-client-local-storage-logged-in-user-provider.js.map","import { StringRatchet } from '@bitblit/ratchet-common';\nimport { ErrorRatchet } from '@bitblit/ratchet-common';\nimport { RequireRatchet } from '@bitblit/ratchet-common';\nimport { WardenClientAbstractRecentLoginProvider } from './warden-client-abstract-recent-login-provider.js';\nexport class WardenClientLocalStorageRecentLoginProvider extends WardenClientAbstractRecentLoginProvider {\n localStorageKey;\n constructor(localStorageKey) {\n super();\n this.localStorageKey = localStorageKey;\n RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(this.localStorageKey, 'localStorageKey');\n if (!localStorage) {\n ErrorRatchet.throwFormattedErr('Local storage not available on this platform');\n }\n }\n fetchCache() {\n const asString = StringRatchet.trimToNull(localStorage.getItem(StringRatchet.trimToNull(this.localStorageKey)));\n return asString ? JSON.parse(asString) : [];\n }\n updateCache(newValue) {\n const asString = newValue ? JSON.stringify(newValue) : '[]';\n localStorage.setItem(StringRatchet.trimToNull(this.localStorageKey), asString);\n }\n}\n//# sourceMappingURL=warden-client-local-storage-recent-login-provider.js.map","export class WardenClientTransientMemoryLoggedInUserProvider {\n wrapper;\n fetchLoggedInUserWrapper() {\n return this.wrapper;\n }\n logOutUser() {\n this.wrapper = null;\n }\n setLoggedInUserWrapper(wrapper) {\n this.wrapper = wrapper;\n }\n}\n//# sourceMappingURL=warden-client-transient-memory-logged-in-user-provider.js.map","import { WardenClientAbstractRecentLoginProvider } from './warden-client-abstract-recent-login-provider.js';\nexport class WardenClientTransientMemoryRecentLoginProvider extends WardenClientAbstractRecentLoginProvider {\n _cache = [];\n fetchCache() {\n return this._cache;\n }\n updateCache(newValue) {\n this._cache = newValue;\n }\n}\n//# sourceMappingURL=warden-client-transient-memory-recent-login-provider.js.map"],"names":["RatchetWardenCommonInfo","constructor","buildInformation","version","hash","branch","tag","timeBuiltISO","notes","WardenClient","commandSender","jwtProvider","this","RequireRatchet","notNullOrUndefined","exchangeCommand","cmd","returnErrors","asString","JSON","stringify","resp","sendCommand","fetchCurrentLoggedInJwtToken","parsed","parse","error","ErrorRatchet","throwFormattedErr","createAccount","contact","sendCode","label","tags","sendMagicLinkByUserId","userId","landingUrl","contactType","meta","sendMagicLink","generateWebAuthnAuthenticationChallengeForUserId","rval","dataAsJson","generateWebAuthnRegistrationChallengeForLoggedInUser","removeWebAuthnRegistration","credId","credentialId","removeWebAuthnRegistrationFromLoggedInUser","input","removeContactFromLoggedInUser","sendExpiringValidationToken","addContactToLoggedInUser","addWebAuthnRegistrationToLoggedInUser","data","performLoginCmd","login","loginCmd","performLogin","refreshJwtToken","oldJwtToken","StringRatchet","trimToNull","err","Logger","executeExpiringTokenBasedLogin","expiringToken","WardenDelegatingCurrentUserProvidingUserServiceEventProcessingProvider","wrapped","_currentUserSubject","BehaviorSubject","getValue","jwtToken","currentUserSubject","onAutomaticLogout","onAutomaticTokenRefresh","refreshUser","onLoginFailure","reason","onLogout","next","onSuccessfulLogin","newUser","WardenUserService","options","loggedInTimerSubscription","_autoRefreshEnabled","info","stored","loggedInUserProvider","fetchLoggedInUserWrapper","wrapperIsExpired","logOutUser","eventProcessor","timerSeconds","loginCheckTimerPingSeconds","timer","subscribe","t","checkForAutoLogoutOrRefresh","cleanShutDown","unsubscribe","serviceOptions","wardenClient","recentLoginProvider","saveNewUser","autoRefreshEnabled","newValue","allowAutoRefresh","Error","debug","current","thresholdSeconds","autoLoginHandlingThresholdSeconds","expirationEpochSeconds","Math","floor","Date","now","result","refreshToken","logout","value","userObject","exp","tmp","loggedInUserHasRole","role","testRole","toLowerCase","roles","find","r","isLoggedIn","fetchLoggedInUserJwtObject","fetchLoggedInUserJwtToken","fetchLoggedInUserObject","user","fetchLoggedInUserExpirationEpochSeconds","fetchLoggedInUserRemainingSeconds","updateLoggedInUserFromTokenString","token","JwtRatchet","decodeTokenNoVerify","setLoggedInUserWrapper","updateRecentLoginsFromWardenEntrySummary","loginData","warn","currentWrapper","newToken","sendExpiringCode","processWardenLoginResults","res","saveRecentLogin","updateRecentLoginsFromLoggedInUserWrapper","executeWebAuthnBasedLogin","executeWebAuthnLoginToWardenLoginResults","executeValidationTokenBasedLogin","saveCurrentDeviceAsWebAuthnForCurrentUser","creds","startRegistration","output","startAuthentication","webAuthn","WardenContactType","WardenCustomerMessageType","WardenStoreRegistrationResponseType","WardenWebAuthnTransportFutureType","WardenUtils","extractContactsOfType","req","type","contactMethods","filter","s","map","validLoginRequest","validContact","jwtTokenToRefresh","stringToWardenContact","stringToContactType","teamRolesToRoles","teamRoles","length","teamRoleToRoleString","roleStringsToTeamRoles","roleStringToTeamRole","indexOf","sp","split","team","tr","stringIsEmailAddress","EmailAddress","stringIsPhoneNumber","TextCapablePhoneNumber","match","stripWardenEntryToSummary","we","userLabel","webAuthnAuthenticatorIds","webAuthnAuthenticators","credentialIdBase64","WardenClientAbstractRecentLoginProvider","entry","list","fetchCache","push","lastLoginEpochMS","updateCache","removeUser","c","fetchAllLogins","Object","assign","clearAllLogins","WardenClientLocalStorageLoggedInUserProvider","localStorageKey","notNullUndefinedOrOnlyWhitespaceString","localStorage","getItem","wrapper","setItem","removeItem","WardenClientLocalStorageRecentLoginProvider","super","WardenClientTransientMemoryLoggedInUserProvider","WardenClientTransientMemoryRecentLoginProvider","_cache"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/build/ratchet-warden-common-info.ts","../src/client/warden-client.ts","../src/client/warden-delegating-current-user-providing-user-service-event-processing-provider.ts","../src/client/warden-user-service.ts","../src/common/model/warden-contact-type.ts","../src/common/model/warden-customer-message-type.ts","../src/common/model/warden-store-registration-response-type.ts","../src/common/model/warden-web-authn-transport-future-type.ts","../src/common/util/warden-utils.ts","../src/client/provider/warden-client-abstract-recent-login-provider.ts","../src/client/provider/warden-client-local-storage-logged-in-user-provider.ts","../src/client/provider/warden-client-local-storage-recent-login-provider.ts","../src/client/provider/warden-client-transient-memory-logged-in-user-provider.ts","../src/client/provider/warden-client-transient-memory-recent-login-provider.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["RatchetWardenCommonInfo","constructor","buildInformation","version","hash","branch","tag","timeBuiltISO","notes","WardenClient","commandSender","jwtProvider","this","RequireRatchet","notNullOrUndefined","exchangeCommand","cmd","returnErrors","asString","JSON","stringify","resp","sendCommand","fetchCurrentLoggedInJwtToken","parsed","parse","error","ErrorRatchet","throwFormattedErr","createAccount","contact","sendCode","label","tags","sendMagicLinkByUserId","userId","landingUrl","contactType","meta","sendMagicLink","generateWebAuthnAuthenticationChallengeForUserId","rval","dataAsJson","generateWebAuthnRegistrationChallengeForLoggedInUser","removeWebAuthnRegistration","credId","credentialId","removeWebAuthnRegistrationFromLoggedInUser","input","removeContactFromLoggedInUser","sendExpiringValidationToken","addContactToLoggedInUser","addWebAuthnRegistrationToLoggedInUser","data","performLoginCmd","login","loginCmd","performLogin","refreshJwtToken","oldJwtToken","StringRatchet","trimToNull","err","Logger","executeExpiringTokenBasedLogin","expiringToken","WardenDelegatingCurrentUserProvidingUserServiceEventProcessingProvider","wrapped","_currentUserSubject","BehaviorSubject","getValue","jwtToken","currentUserSubject","onAutomaticLogout","onAutomaticTokenRefresh","refreshUser","onLoginFailure","reason","onLogout","next","onSuccessfulLogin","newUser","WardenUserService","options","loggedInTimerSubscription","_autoRefreshEnabled","info","stored","loggedInUserProvider","fetchLoggedInUserWrapper","wrapperIsExpired","logOutUser","eventProcessor","timerSeconds","loginCheckTimerPingSeconds","timer","subscribe","t","checkForAutoLogoutOrRefresh","cleanShutDown","unsubscribe","serviceOptions","wardenClient","recentLoginProvider","saveNewUser","autoRefreshEnabled","newValue","allowAutoRefresh","Error","debug","current","thresholdSeconds","autoLoginHandlingThresholdSeconds","expirationEpochSeconds","Math","floor","Date","now","result","refreshToken","logout","value","userObject","exp","tmp","loggedInUserHasRole","role","testRole","toLowerCase","roles","find","r","isLoggedIn","fetchLoggedInUserJwtObject","fetchLoggedInUserJwtToken","fetchLoggedInUserObject","user","fetchLoggedInUserExpirationEpochSeconds","fetchLoggedInUserRemainingSeconds","updateLoggedInUserFromTokenString","token","JwtRatchet","decodeTokenNoVerify","setLoggedInUserWrapper","updateRecentLoginsFromWardenEntrySummary","loginData","warn","currentWrapper","newToken","sendExpiringCode","processWardenLoginResults","res","saveRecentLogin","updateRecentLoginsFromLoggedInUserWrapper","executeWebAuthnBasedLogin","executeWebAuthnLoginToWardenLoginResults","executeValidationTokenBasedLogin","saveCurrentDeviceAsWebAuthnForCurrentUser","creds","startRegistration","output","startAuthentication","webAuthn","WardenContactType","WardenCustomerMessageType","WardenStoreRegistrationResponseType","WardenWebAuthnTransportFutureType","WardenUtils","extractContactsOfType","req","type","contactMethods","filter","s","map","validLoginRequest","validContact","jwtTokenToRefresh","stringToWardenContact","stringToContactType","teamRolesToRoles","teamRoles","length","teamRoleToRoleString","roleStringsToTeamRoles","roleStringToTeamRole","indexOf","sp","split","team","tr","stringIsEmailAddress","EmailAddress","stringIsPhoneNumber","TextCapablePhoneNumber","match","stripWardenEntryToSummary","we","userLabel","webAuthnAuthenticatorIds","webAuthnAuthenticators","credentialIdBase64","WardenClientAbstractRecentLoginProvider","entry","list","fetchCache","push","lastLoginEpochMS","updateCache","removeUser","c","fetchAllLogins","Object","assign","clearAllLogins","WardenClientLocalStorageLoggedInUserProvider","localStorageKey","notNullUndefinedOrOnlyWhitespaceString","localStorage","getItem","wrapper","setItem","removeItem","WardenClientLocalStorageRecentLoginProvider","super","WardenClientTransientMemoryLoggedInUserProvider","WardenClientTransientMemoryRecentLoginProvider","_cache"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitblit/ratchet-warden-common",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.232-alpha",
|
|
4
4
|
"description": "Typescript library to simplify using simplewebauthn and secondary auth methods over GraphQL",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -47,13 +47,13 @@
|
|
|
47
47
|
},
|
|
48
48
|
"license": "Apache-2.0",
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@bitblit/ratchet-common": "4.0.
|
|
50
|
+
"@bitblit/ratchet-common": "4.0.232-alpha",
|
|
51
51
|
"@simplewebauthn/browser": "8.0.2",
|
|
52
52
|
"@simplewebauthn/typescript-types": "8.0.0",
|
|
53
53
|
"jwt-decode": "3.1.2"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
|
-
"@bitblit/ratchet-common": "^4.0.
|
|
56
|
+
"@bitblit/ratchet-common": "^4.0.232-alpha",
|
|
57
57
|
"@simplewebauthn/browser": "^8.0.2",
|
|
58
58
|
"@simplewebauthn/typescript-types": "^8.0.0"
|
|
59
59
|
}
|