|  |  | @ -194,6 +194,24 @@ class LokiAppDotNetServerAPI { | 
			
		
	
		
		
			
				
					
					|  |  |  |         this.setProfileName(profileName); |  |  |  |         this.setProfileName(profileName); | 
			
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (tokenRes.err) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       log.error(`token err`, tokenRes); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       // didn't already try && this specific error
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       if ( | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         !forceRefresh && | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         tokenRes.response && | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         tokenRes.response.meta && | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         tokenRes.response.meta.code === 401 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       ) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // this token is not good
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         this.token = ''; // remove from object
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         await Signal.Data.savePublicServerToken({ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           serverUrl: this.baseServerUrl, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           token: '', | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         }); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         token = this.getOrRefreshServerToken(true); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     return token; |  |  |  |     return token; | 
			
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
	
		
		
			
				
					|  |  | @ -287,18 +305,15 @@ class LokiAppDotNetServerAPI { | 
			
		
	
		
		
			
				
					
					|  |  |  |       url.search = new URLSearchParams(params); |  |  |  |       url.search = new URLSearchParams(params); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     let result; |  |  |  |     let result; | 
			
		
	
		
		
			
				
					
					|  |  |  |     const token = await this.getOrRefreshServerToken(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (!token) { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       log.error('NO TOKEN'); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       return { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         err: 'noToken', |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       }; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     try { |  |  |  |     try { | 
			
		
	
		
		
			
				
					
					|  |  |  |       const fetchOptions = {}; |  |  |  |       const fetchOptions = {}; | 
			
		
	
		
		
			
				
					
					|  |  |  |       const headers = { |  |  |  |       const headers = {}; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         Authorization: `Bearer ${this.token}`, |  |  |  |       if (forceFreshToken) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       }; |  |  |  |         await this.getOrRefreshServerToken(true); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       if (this.token) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         headers.Authorization = `Bearer ${this.token}`; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |       if (method) { |  |  |  |       if (method) { | 
			
		
	
		
		
			
				
					
					|  |  |  |         fetchOptions.method = method; |  |  |  |         fetchOptions.method = method; | 
			
		
	
		
		
			
				
					
					|  |  |  |       } |  |  |  |       } | 
			
		
	
	
		
		
			
				
					|  |  | @ -1538,6 +1553,16 @@ class LokiPublicChannelAPI { | 
			
		
	
		
		
			
				
					
					|  |  |  |       window.mixpanel.track('Public Message Sent'); |  |  |  |       window.mixpanel.track('Public Message Sent'); | 
			
		
	
		
		
			
				
					
					|  |  |  |       return res.response.data.id; |  |  |  |       return res.response.data.id; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (res.err) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       log.error(`POST ${this.baseChannelUrl}/messages failed`); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       if (res.response && res.response.meta && res.response.meta.code === 401) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         log.error(`Got invalid token for ${this.serverAPI.token}`); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       log.error(res.err); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       log.error(res.response); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } else { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       log.warn(res.response); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |     // there's no retry on desktop
 |  |  |  |     // there's no retry on desktop
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     // this is supposed to be after retries
 |  |  |  |     // this is supposed to be after retries
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     window.mixpanel.track('Failed to Send Public Message'); |  |  |  |     window.mixpanel.track('Failed to Send Public Message'); | 
			
		
	
	
		
		
			
				
					|  |  | 
 |