You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
import { sendViaOnionToNonSnode } from '../session/onions/onionSend';
 | 
						|
 | 
						|
const pnServerPubkeyHex = '642a6585919742e5a2d4dc51244964fbcd8bcab2b75612407de58b810740d049';
 | 
						|
 | 
						|
export const hrefPnServerProd = 'live.apns.getsession.org';
 | 
						|
export const hrefPnServerDev = 'dev.apns.getsession.org';
 | 
						|
 | 
						|
const pnServerUrl = `https://${hrefPnServerProd}`;
 | 
						|
 | 
						|
export async function notifyPnServer(wrappedEnvelope: ArrayBuffer, sentTo: string) {
 | 
						|
  const options: ServerRequestOptionsType = {
 | 
						|
    method: 'post',
 | 
						|
    objBody: {
 | 
						|
      data: await window.callWorker('arrayBufferToStringBase64', wrappedEnvelope),
 | 
						|
      send_to: sentTo,
 | 
						|
    },
 | 
						|
  };
 | 
						|
  const endpoint = 'notify';
 | 
						|
  return serverRequest(`${pnServerUrl}/${endpoint}`, options);
 | 
						|
}
 | 
						|
 | 
						|
type ServerRequestOptionsType = {
 | 
						|
  method: string;
 | 
						|
  objBody: any;
 | 
						|
};
 | 
						|
 | 
						|
/** The PN server only speaks onion request language */
 | 
						|
// tslint:disable-next-line: max-func-body-length
 | 
						|
// tslint:disable-next-line: cyclomatic-complexity
 | 
						|
const serverRequest = async (
 | 
						|
  endpoint: string,
 | 
						|
  options: ServerRequestOptionsType
 | 
						|
): Promise<boolean> => {
 | 
						|
  const { method, objBody } = options;
 | 
						|
 | 
						|
  const url = new URL(endpoint);
 | 
						|
  const fetchOptions: any = {};
 | 
						|
  const headers: any = {};
 | 
						|
  try {
 | 
						|
    headers['Content-Type'] = 'application/json';
 | 
						|
    fetchOptions.body = JSON.stringify(objBody);
 | 
						|
    fetchOptions.headers = headers;
 | 
						|
    fetchOptions.method = method;
 | 
						|
  } catch (e) {
 | 
						|
    window?.log?.error('onionSend:::notifyPnServer - set up error:', e.code, e.message);
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
 | 
						|
  try {
 | 
						|
    const onionResponse = await sendViaOnionToNonSnode(pnServerPubkeyHex, url, fetchOptions);
 | 
						|
    if (
 | 
						|
      !onionResponse ||
 | 
						|
      !onionResponse.result ||
 | 
						|
      (onionResponse.result.status as number) !== 200
 | 
						|
    ) {
 | 
						|
      throw new Error(`Failed to do PN notify call, no response, ${onionResponse}`);
 | 
						|
    }
 | 
						|
  } catch (e) {
 | 
						|
    window?.log?.error(
 | 
						|
      'onionSend:::serverRequest error',
 | 
						|
      e.code,
 | 
						|
      e.message,
 | 
						|
      'attempting connection to',
 | 
						|
      url.toString()
 | 
						|
    );
 | 
						|
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
 | 
						|
  return true;
 | 
						|
};
 |