@northflank/cli
Version:
Provides a command-line interface to the Northflank platform.
1 lines • 10.7 kB
JavaScript
const a15n=a15E;(function(m,E){const b=a15E,h=m();while(!![]){try{const I=parseInt(b(0x218))/0x1+-parseInt(b(0x241))/0x2+parseInt(b(0x25e))/0x3*(parseInt(b(0x266))/0x4)+parseInt(b(0x1f4))/0x5+-parseInt(b(0x238))/0x6+-parseInt(b(0x214))/0x7+parseInt(b(0x246))/0x8*(parseInt(b(0x202))/0x9);if(I===E)break;else h['push'](h['shift']());}catch(T){h['push'](h['shift']());}}}(a15m,0x6a724));import{ApiClient}from'@northflank/js-client';import a15h from'chalk';import{assertContextExisting,customUserAgent,error,getCommand,success,warning}from'../utils.js';function a15E(m,E){const h=a15m();return a15E=function(I,T){I=I-0x1f1;let e=h[I];return e;},a15E(m,E);}import{InquirerHelper}from'../inquirer-helper.js';function a15m(){const y=['apiClient','log','Addons:','\x20is\x20running\x20and\x20reachable\x20and\x20that\x20a\x20port\x20is\x20defined\x20on\x20the\x20networking\x20section.','portFwdCmd','757225GoZdEJ','reset','\x20\x20-\x20port\x20','addon','605003pgycTN','Instance\x20to\x20forward','askForService','skipHostnames','Running\x20in\x20','\x20and\x20','skipHostnamesText','tunnel-close','\x20mode:\x20the\x20locally\x20forwarded\x20port\x20differs\x20from\x20the\x20actual\x20port\x20on\x20the\x20forwarded\x20service/addon.','Forwarding\x20addon\x20','type','portName','flat','hosts','Failed:\x20','option','/etc/hosts','Team\x20for\x20forwarding','getCurrentProjectName','Port-forwarding\x20for\x20the\x20specified\x20addon','\x20-\x20','forwardProject','>\x20Instance\x20\x27','service','green','\x20mode.\x20If\x20hostname\x20forwarding\x20is\x20required,\x20remove\x20','askForAddon','stop','Forwarding\x20service\x20','Running\x20on\x20macOS\x20in\x20','org','--instance\x20--instanceId\x20[NAME]','3982818nudQSD','error','printHostsFileHint','askForProjectContext','forwardAddon','\x20in\x20project\x20','printForwardingInfo','Service\x20to\x20forward','\x20with\x20multiple\x20ports:','825864rlZqqq','\x20\x20-\x20Address:\x20',',\x20hostname:\x20','hostnames','connection-error','288EPeOZc','SIGINT','description','askForTeam','--noDefaults','--addon\x20--addonId\x20[NAME]','getCurrentServiceName','name','alias','Port-forwarding\x20for\x20the\x20specified\x20service','canExecuteWithHostnames','\x27\x20of\x20','filter','all','askForProject','Don\x27t\x20use\x20context\x20default\x20values,\x20explicitly\x20use\x20options\x20or\x20ask.','forwarding','HTTP','data.id','\x20to\x20','darwin','Port-forwarding\x20for\x20all\x20services\x20and\x20addons\x20in\x20the\x20given\x20project','bold','platform','6FGinAm','noDefaultsText','Cleaning\x20up\x20open\x20connections\x20failed:\x20','win32','\x20flag\x20or\x20manually\x20append\x20following\x20entry\x20to\x20your\x20hosts\x20file\x20(','fwd','getTokenScope','contextProvider','1274540Rkwkda','getProxyForwarder','Forwarding\x20','greenBright','Project\x20for\x20forwarding','524665fKqbyH','\x20is\x20exposed\x20on\x20','address','Please\x20ensure\x20the\x20','addCommand','forEach','http://','action','data','message','--skipHostnames','port','exit','protocol','68427LERKvP','Services:','No\x20services\x20and\x20addons\x20to\x20forward\x20found\x20in\x20project\x20','Only\x20expose\x20on\x20IP\x20address,\x20not\x20on\x20hostnames.\x20With\x20this\x20option,\x20no\x20root\x20permissions\x20are\x20required.','Connection\x20error\x20occurred\x20when\x20forwarding\x20\x27','length','Error\x20occured\x20while\x20trying\x20to\x20forward\x20','\x27:\x20\x22','Stop\x20forwarding\x20traffic\x20from\x20','\x20\x20\x20\x20\x20\x20\x20\x20\x20','--project\x20--projectId\x20[NAME]','Addon\x20to\x20forward','getBaseCommand'];a15m=function(){return y;};return a15m();}import*as a15I from'os';import{uniqBy,uniq,repeat,groupBy,capitalize}from'lodash-es';import{EOL}from'os';export class CliPortForward{['portFwdCmd'];[a15n(0x20f)];['noDefaultsText']=a15n(0x255);['skipHostnamesText']=a15n(0x205);constructor(m,E){const Q=a15n;this[Q(0x20f)]=new ApiClient(m,{'throwErrorOnHttpErrorCode':!![],'customUserAgent':customUserAgent,'agent':E});const h=new InquirerHelper(this[Q(0x20f)]);this[Q(0x213)]=getCommand()[Q(0x24d)]('forward')[Q(0x24e)](Q(0x263))[Q(0x248)]('Port-forwarding\x20for\x20Northflank\x20services\x20and\x20addons.');const I=this[Q(0x20e)]()['name'](Q(0x253))[Q(0x248)](Q(0x25b))[Q(0x227)](Q(0x24a),this['noDefaultsText'],![])[Q(0x227)](Q(0x1fe),this[Q(0x21e)],![])[Q(0x1fb)](async({noDefaults:o,teamId:g,projectId:J,skipHostnames:L})=>{const c=Q;assertContextExisting(this[c(0x20f)]);const P=this['getProxyForwarder'](L),X=o?undefined:m[c(0x22a)](),{projectId:W,teamId:K}=await this['askForProjectContext'](m,h,g,J,X);try{const {services:z,addons:S}=await P[c(0x22d)]({'teamId':K,'projectId':W},L);if(z['length']+S[c(0x207)]<=0x0)warning(c(0x204)+a15h[c(0x25c)](W));else{const H=z[c(0x252)](t=>t['length']>0x0)[c(0x207)],r=S[c(0x252)](t=>t['length']>0x0)[c(0x207)],F=c(0x23d)+a15h[c(0x25c)](W);console['log'](c(0x1f1)+a15h[c(0x230)]['bold'](H+'\x20service\x20ports')+c(0x21d)+a15h[c(0x230)]['bold'](r+'\x20addon\x20ports')+F),console[c(0x210)](),console[c(0x210)](a15h[c(0x25c)](c(0x203))),z[c(0x1f9)](t=>{const O=c;if(t['length']>=0x1&&!t[0x0][O(0x239)])this[O(0x23e)](t,{'type':'service','name':t[0x0][O(0x1fc)]['id']},L);}),console['log'](a15h[c(0x25c)](c(0x211))),S[c(0x1f9)](t=>{const B=c;if(t[B(0x207)]>=0x1&&!t[0x0][B(0x239)])this[B(0x23e)](t,{'type':'addon','name':t[0x0][B(0x1fc)]['id']},L);}),this[c(0x23a)]([...z[c(0x224)](),...S[c(0x224)]()],L);}}catch(t){error(c(0x226)+t[c(0x1fd)]);}}),T=this[Q(0x20e)]()[Q(0x24d)](Q(0x22f))[Q(0x248)](Q(0x24f))[Q(0x227)]('--service\x20--serviceId\x20[NAME]',Q(0x23f))[Q(0x227)](Q(0x237),Q(0x219))[Q(0x227)](Q(0x24a),this[Q(0x25f)],![])[Q(0x227)](Q(0x1fe),this['skipHostnamesText'],![])['action'](async({noDefaults:o,teamId:g,projectId:J,serviceId:L,instanceId:P,skipHostnames:X})=>{const q=Q;assertContextExisting(this[q(0x20f)]);const W=this[q(0x267)](X),K=o?undefined:m[q(0x22a)](),{projectId:z,teamId:S}=await this[q(0x23b)](m,h,J,g,K),H=o?undefined:m[q(0x24c)](),r=L||H||await h[q(0x21a)](z,S)();console[q(0x210)](q(0x234)+a15h[q(0x25c)](r)+q(0x23d)+a15h[q(0x25c)](z));try{const F=await W['forwardService']({'teamId':S,'projectId':z,'serviceId':r,'instanceId':P},X);this[q(0x23e)](F,{'name':r,'type':'service','instanceId':P},X),this[q(0x23a)](F,X);}catch(t){error(q(0x226)+t[q(0x1fd)]);}}),e=this[Q(0x20e)]()[Q(0x24d)](Q(0x217))['description'](Q(0x22b))['option'](Q(0x24b),Q(0x20d))[Q(0x227)](Q(0x1fe),this[Q(0x21e)],![])[Q(0x1fb)](async({noDefaults:o,teamId:g,projectId:J,addonId:L,skipHostnames:P})=>{const a=Q;assertContextExisting(this[a(0x20f)]);const X=this[a(0x267)](P),W=o?undefined:m[a(0x22a)](),{projectId:K,teamId:z}=await this[a(0x23b)](m,h,J,g,W),S=L||await h[a(0x232)](K,z)();console['log'](a(0x221)+a15h[a(0x25c)](S)+'\x20in\x20project\x20'+a15h[a(0x25c)](K));try{const H={'teamId':z,'projectId':K,'addonId':S},r=await X[a(0x23c)](H,P);this['printForwardingInfo'](r,{'name':S,'type':a(0x217)},P),this[a(0x23a)](r,P);}catch(F){error(a(0x226)+F['message']);}});this[Q(0x213)][Q(0x1f8)](I),this[Q(0x213)][Q(0x1f8)](T),this[Q(0x213)][Q(0x1f8)](e);}[a15n(0x20e)]=()=>{const R=a15n,m=getCommand(!![])['option'](R(0x20c),R(0x1f3));return this[R(0x20f)][R(0x265)]['getTokenScope']()===R(0x236)&&m[R(0x227)]('--team\x20--teamId\x20[TEAMID]',R(0x229)),m;};[a15n(0x267)](m=![]){const x=a15n,E=this[x(0x20f)][x(0x256)];if(!m){const h=E[x(0x250)]();if(h[x(0x239)])throw new Error(h[x(0x1fd)]);}return E['on'](x(0x21f),(I,T)=>{const D=x,e=a15h['bold'](T[D(0x222)]+'\x20\x27'+T['id']+'\x27'),o=T[D(0x244)]['length']>0x0;warning(D(0x20a)+T[D(0x1f6)]+':'+T['port']+D(0x259)+e),m&&o&&warning('\x20\x20If\x20you\x20have\x20added\x20entries\x20to\x20your\x20hosts\x20file,\x20it\x20is\x20recommended\x20to\x20remove\x20them\x20again\x20now.');}),E['on'](x(0x245),(I,T,e)=>{const f=x;warning(f(0x206)+T[f(0x1f6)]+':'+T[f(0x1ff)]+f(0x209)+e?.[f(0x1fd)]+'\x22');}),process['on'](x(0x247),async()=>{const M=x;try{await E[M(0x233)]();}catch(I){error(M(0x260)+I['message']);}finally{process[M(0x200)]();}}),E;}[a15n(0x23e)](m,E,h=![]){const U=a15n,{type:I,name:T,instanceId:e}=E;if(m['length']<=0x0){const L=U(0x1f7)+E['type']+U(0x212);warning('\x20\x20\x20No\x20running\x20container\x20found\x20for\x20'+I+'\x20'+a15h['bold'](T)+'.\x20'+L);return;}const o=groupBy(m,U(0x258)),g=P=>'\x20('+(P[U(0x223)]?P[U(0x223)]+U(0x22c):'')+P[U(0x201)]+')';function J(P,X=0x2){const C=U;if(!h){const W=P[C(0x201)]===C(0x257)?C(0x1fa):'';P[C(0x244)][C(0x1f9)](K=>{const Z=C;console[Z(0x210)](repeat('\x20',X)+'-\x20'+W+K+':'+P[Z(0x1ff)]);});}}Object['entries'](o)[U(0x1f9)](([P,X])=>{const i=U,W=e?i(0x22e)+a15h[i(0x1f2)][i(0x25c)](e)+i(0x251)+I+'\x20\x27'+a15h[i(0x1f2)][i(0x25c)](P)+'\x27':'>\x20'+capitalize(I)+'\x20\x27'+a15h[i(0x1f2)][i(0x25c)](P)+'\x27';if(I==='addon'){if(X['length']===0x1){const K=X[0x0];if(K['error']){error('Error\x20occured\x20while\x20trying\x20to\x20forward\x20'+P+':\x20'+K['error'][i(0x1fd)]);return;}const z=K[i(0x1fc)],S=!h?'\x20'+a15h[i(0x215)]('with\x20hostname:\x20'+z[i(0x244)]['join'](',')):'';success(W+i(0x1f5)+z['address']+':'+z['port']+g(z)+S);}else{const H=uniqBy(X,r=>r?.[i(0x1fc)]?.[i(0x244)]?.['join'](','))['length']>0x1;success(W+'\x20is\x20exposed\x20with\x20multiple\x20'+(H?i(0x225):'ports')+':'),X['forEach'](r=>{const V=i;if(r['error']){error(V(0x208)+P+':\x20'+r[V(0x239)][V(0x1fd)]);return;}const F=r['data'],t=!h?V(0x243)+F[V(0x244)]['join'](','):'';console[V(0x210)](V(0x242)+F[V(0x1f6)]+':'+F['port']+g(F)+t);});}}if(I===i(0x22f)){if(X['length']===0x1){const r=X[0x0];if(r[i(0x239)]){error(i(0x208)+P+':\x20'+r[i(0x239)][i(0x1fd)]);return;}const F=r['data'],t=!h?'\x20with\x20these\x20hostnames:':':',Y=F['address']+':'+F[i(0x1ff)]+g(F);success(W+i(0x1f5)+Y+t),J(F);}else success(W+i(0x1f5)+X[0x0]?.['data']?.['address']+i(0x240)),X[i(0x1f9)](N=>{const G=i;if(N[G(0x239)]){error('Error\x20occured\x20while\x20trying\x20to\x20forward\x20'+P+':\x20'+N['error'][G(0x1fd)]);return;}const w=N[G(0x1fc)];success(G(0x216)+w[G(0x1ff)]+g(w)),J(w,0x4);});}});}[a15n(0x23a)](m,E=![]){const l=a15n;if(E){const h=m['flatMap'](P=>P['data'])[l(0x252)](P=>P!==undefined),I=process?.[l(0x25d)]===l(0x261),T=a15I[l(0x25d)]()===l(0x25a),e=I?'C:/Windows/System32/drivers/etc/hosts':l(0x228),o=a15h[l(0x25c)](l(0x21b)),g=T?EOL+l(0x235)+o+l(0x220):undefined;let J=l(0x21c)+o+l(0x231)+l(0x1fe)+l(0x262)+e+'):';g!==undefined&&warning(g??'');warning(J);const L=h['map'](P=>P[l(0x1f6)]+l(0x20b)+P[l(0x244)]['join']('\x20'));console['log'](uniq(L)['join'](EOL)),console[l(0x210)]();}}[a15n(0x23b)]=async(m,E,h,I,T)=>{const s=a15n,e=m[s(0x264)]()==='org'?I??await E[s(0x249)]()():undefined,o=h||T||await E[s(0x254)](e)();return{'teamId':e,'projectId':o};};}