@@ -28,7 +28,8 @@ export class PortForward {
28
28
output : stream . Writable ,
29
29
err : stream . Writable | null ,
30
30
input : stream . Readable ,
31
- ) : Promise < WebSocket > {
31
+ retryCount : number = 0 ,
32
+ ) : Promise < WebSocket | ( ( ) => WebSocket | null ) > {
32
33
if ( targetPorts . length === 0 ) {
33
34
throw new Error ( 'You must provide at least one port to forward to.' ) ;
34
35
}
@@ -45,29 +46,37 @@ export class PortForward {
45
46
needsToReadPortNumber [ index * 2 + 1 ] = true ;
46
47
} ) ;
47
48
const path = `/api/v1/namespaces/${ namespace } /pods/${ podName } /portforward?${ queryStr } ` ;
48
- const conn = await this . handler . connect (
49
- path ,
50
- null ,
51
- ( streamNum : number , buff : Buffer | string ) : boolean => {
52
- if ( streamNum >= targetPorts . length * 2 ) {
53
- return ! this . disconnectOnErr ;
54
- }
55
- // First two bytes of each stream are the port number
56
- if ( needsToReadPortNumber [ streamNum ] ) {
57
- buff = buff . slice ( 2 ) ;
58
- needsToReadPortNumber [ streamNum ] = false ;
59
- }
60
- if ( streamNum % 2 === 1 ) {
61
- if ( err ) {
62
- err . write ( buff ) ;
49
+ const createWebSocket = ( ) : Promise < WebSocket > => {
50
+ return this . handler . connect (
51
+ path ,
52
+ null ,
53
+ ( streamNum : number , buff : Buffer | string ) : boolean => {
54
+ if ( streamNum >= targetPorts . length * 2 ) {
55
+ return ! this . disconnectOnErr ;
63
56
}
64
- } else {
65
- output . write ( buff ) ;
66
- }
67
- return true ;
68
- } ,
69
- ) ;
70
- WebSocketHandler . handleStandardInput ( conn , input , 0 ) ;
71
- return conn ;
57
+ // First two bytes of each stream are the port number
58
+ if ( needsToReadPortNumber [ streamNum ] ) {
59
+ buff = buff . slice ( 2 ) ;
60
+ needsToReadPortNumber [ streamNum ] = false ;
61
+ }
62
+ if ( streamNum % 2 === 1 ) {
63
+ if ( err ) {
64
+ err . write ( buff ) ;
65
+ }
66
+ } else {
67
+ output . write ( buff ) ;
68
+ }
69
+ return true ;
70
+ } ,
71
+ ) ;
72
+ } ;
73
+
74
+ if ( retryCount < 1 ) {
75
+ const ws = await createWebSocket ( ) ;
76
+ WebSocketHandler . handleStandardInput ( ws , input , 0 ) ;
77
+ return ws ;
78
+ }
79
+
80
+ return WebSocketHandler . restartableHandleStandardInput ( createWebSocket , input , 0 , retryCount ) ;
72
81
}
73
82
}
0 commit comments