99 */ 
1010
1111import  {  HeaderType  }  from  './common' ; 
12- import  {  NativeBridgeDefinition  }  from  './websocket.definition' ; 
12+ import  {  NativeBridgeDefinition ,   WebSocketBridgeConnectOptions  }  from  './websocket.definition' ; 
1313
1414@NativeClass 
1515class  RCTSRWebSocketDelegateImpl  extends  NSObject  implements  RCTSRWebSocketDelegate  { 
@@ -41,7 +41,7 @@ export class NativeBridge extends NativeBridgeDefinition {
4141  // store the delegate so it isn't garbage collected 
4242  // TODO: fix the iOS runtime so we don't need this 
4343  delegate ! : RCTSRWebSocketDelegateImpl ; 
44-   connect ( url :  string ,  protocols :  string [ ] ,  headers :  HeaderType )  { 
44+   connect ( {  url ,  protocols,  headers,  pinnedCertificates  } :  WebSocketBridgeConnectOptions ) :  void { 
4545    const  nativeUrl  =  NSURL . URLWithString ( url ) ; 
4646    const  request  =  NSMutableURLRequest . requestWithURL ( nativeUrl ) ; 
4747    // NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; 
@@ -63,6 +63,24 @@ export class NativeBridge extends NativeBridgeDefinition {
6363    for  ( const  k  of  Object . keys ( headers . headers ) )  { 
6464      request . addValueForHTTPHeaderField ( `${ headers . headers [ k ] }  ,  k ) ; 
6565    } 
66+     if  ( pinnedCertificates )  { 
67+       const  sslArray  =  NSMutableArray . new ( ) ; 
68+ 
69+       for  ( const  c  of  pinnedCertificates )  { 
70+         // convert from pem to der (base64) 
71+         const  der  =  c 
72+           . replace ( / - - - - - B E G I N   C E R T I F I C A T E - - - - - / g,  '' ) 
73+           . replace ( / - - - - - E N D   C E R T I F I C A T E - - - - - / g,  '' ) 
74+           . replace ( / \r ? \n / g,  '' ) ; 
75+         const  cert  =  SecCertificateCreateWithData ( null ,  NSData . alloc ( ) . initWithBase64EncodedStringOptions ( der ,  NSDataBase64DecodingOptions . IgnoreUnknownCharacters ) ) ; 
76+         if  ( cert )  { 
77+           sslArray . addObject ( cert ) ; 
78+         }  else  { 
79+           console . warn ( 'Unable to create certificate from pem' ) ; 
80+         } 
81+       } 
82+       request . RCTSR_SSLPinnedCertificates  =  sslArray ; 
83+     } 
6684
6785    const  webSocket  =  RCTSRWebSocket . alloc ( ) . initWithURLRequestProtocols ( request ,  protocols ) ; 
6886    this . nativeSocket  =  webSocket ; 
0 commit comments