@northflank/cli 0.11.3 → 0.11.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- const a14S=a14A;(function(Q,A){const l=a14A,N=Q();while(!![]){try{const t=parseInt(l(0xbb))/0x1+parseInt(l(0xba))/0x2+-parseInt(l(0xb7))/0x3*(-parseInt(l(0xc9))/0x4)+parseInt(l(0xc8))/0x5*(-parseInt(l(0xbe))/0x6)+-parseInt(l(0xc1))/0x7+parseInt(l(0xb1))/0x8*(-parseInt(l(0xc2))/0x9)+parseInt(l(0xc3))/0xa;if(t===A)break;else N['push'](N['shift']());}catch(a){N['push'](N['shift']());}}}(a14Q,0x23a9d));function a14Q(){const B=['loading','1060iTJjiJ','4whpHxx','dir\x20must\x20be\x20up\x20or\x20down','realLength','choices','handleDynamicPageLoad','opt','6896VzFxTp','selected','onUpKey','down','push','render','22824JgsOVi','loop','loadMore','72402yrWLgG','225217iWCsrq','pagOpt','nextPageCursor','7134mBrBNr','italic','\x20Loading\x20more\x20options','1047158IAzSWK','2565IVFlse','5243830XRtZSQ','name','catch','reloadText'];a14Q=function(){return B;};return a14Q();}import a14N from'inquirer/lib/prompts/list.js';function a14A(Q,A){const N=a14Q();return a14A=function(t,a){t=t-0xaf;let p=N[t];return p;},a14A(Q,A);}import a14t from'inquirer/lib/objects/choice.js';import a14a from'chalk';function incrementListIndex(Q,A,N){const X=a14A,t=N['choices'][X(0xcb)],a=X(0xb8)in N?Boolean(N['loop']):!![];if(A==='up'){if(Q>0x0)return Q-0x1;return a?t-0x1:Q;}if(A===X(0xb4)){if(Q<t-0x1)return Q+0x1;return a?0x0:Q;}throw new Error(X(0xca));}export class DynamicReloadPaginationPrompt extends a14N{['reloadText']=a14a[a14S(0xbf)]('..\x20Load\x20more\x20options\x20..');[a14S(0xbc)];['loading']=![];[a14S(0xbd)];constructor(Q,A,N){const g=a14S;super(Q,A,N),this['pagOpt']=this['opt'],this[g(0xbd)]=this[g(0xbc)]['nextPageCursor'],this['nextPageCursor']!==undefined&&this['opt']['choices'][g(0xb5)](new a14t(this[g(0xc6)],this[g(0xc6)]));}[a14S(0xb3)](){const d=a14S;if(this['loading'])return;this[d(0xb2)]=incrementListIndex(this[d(0xb2)],'up',this[d(0xb0)]),this[d(0xb6)]();}async['onDownKey'](){const Z=a14S;if(this[Z(0xc7)])return;this['selected']=incrementListIndex(this['selected'],Z(0xb4),this['opt']),await this[Z(0xaf)](),this[Z(0xb6)]();}async[a14S(0xaf)](){const M=a14S;if(this[M(0xb2)]>=this[M(0xb0)][M(0xcc)]['length']-0x1){if(this[M(0xbd)]===undefined)return;this[M(0xc7)]=!![];let Q=0x0;const A=setInterval(()=>{const k=M,p=['⠋','⠙','⠹','⠸','⠼','⠴','⠦','⠧','⠇','⠏'],P=a14a[k(0xbf)](p[Q%p['length']]+k(0xc0));this[k(0xb0)][k(0xcc)]['choices'][this[k(0xb2)]][k(0xc4)]=''+P,Q+=0x1,this[k(0xb6)]();},0x50),{elements:N,nextPageCursor:t}=await this[M(0xbc)][M(0xb9)]({'nextPageCursor':this[M(0xbd)]})[M(0xc5)](()=>({'elements':[],'nextPageCursor':undefined}));this[M(0xbd)]=t;const a=N['map'](p=>new a14t(p,p));this['opt'][M(0xcc)][M(0xcc)]['splice'](this['selected'],0x1),this[M(0xb0)][M(0xcc)][M(0xb5)](...a),t!==undefined&&this[M(0xb0)][M(0xcc)][M(0xb5)](new a14t(this[M(0xc6)],this[M(0xc6)])),clearInterval(A),this[M(0xc7)]=![];}}}
1
+ function a14l(o,l){const E=a14o();return a14l=function(y,N){y=y-0x12f;let Z=E[y];return Z;},a14l(o,l);}const a14k=a14l;(function(o,l){const X=a14l,E=o();while(!![]){try{const y=-parseInt(X(0x13e))/0x1+-parseInt(X(0x14c))/0x2*(parseInt(X(0x147))/0x3)+-parseInt(X(0x12f))/0x4*(-parseInt(X(0x136))/0x5)+parseInt(X(0x146))/0x6*(parseInt(X(0x13b))/0x7)+-parseInt(X(0x14a))/0x8*(-parseInt(X(0x140))/0x9)+parseInt(X(0x149))/0xa*(-parseInt(X(0x13c))/0xb)+-parseInt(X(0x14b))/0xc;if(y===l)break;else E['push'](E['shift']());}catch(N){E['push'](E['shift']());}}}(a14o,0x477de));import a14E from'inquirer/lib/prompts/list.js';import a14y from'inquirer/lib/objects/choice.js';import a14N from'chalk';function incrementListIndex(o,l,E){const g=a14l,y=E[g(0x139)]['realLength'],N=g(0x142)in E?Boolean(E[g(0x142)]):!![];if(l==='up'){if(o>0x0)return o-0x1;return N?y-0x1:o;}if(l==='down'){if(o<y-0x1)return o+0x1;return N?0x0:o;}throw new Error(g(0x137));}function a14o(){const b=['..\x20Load\x20more\x20options\x20..','1540RLbXgs','1021624fkRasv','2132808OeBWbs','5524mSBTXy','length','44IdbHBh','selected','render','reloadText','nextPageCursor','loading','down','31740QGfMzJ','dir\x20must\x20be\x20up\x20or\x20down','opt','choices','handleDynamicPageLoad','7xVllmX','29150meUSwp','onUpKey','188691czDSaG','pagOpt','36AiYrbi','catch','loop','italic','push','loadMore','3235158yCUSAN','57zAvRSH'];a14o=function(){return b;};return a14o();}export class DynamicReloadPaginationPrompt extends a14E{[a14k(0x132)]=a14N[a14k(0x143)](a14k(0x148));[a14k(0x13f)];['loading']=![];['nextPageCursor'];constructor(o,l,E){const I=a14k;super(o,l,E),this[I(0x13f)]=this[I(0x138)],this['nextPageCursor']=this[I(0x13f)][I(0x133)],this[I(0x133)]!==undefined&&this[I(0x138)]['choices'][I(0x144)](new a14y(this[I(0x132)],this[I(0x132)]));}[a14k(0x13d)](){const J=a14k;if(this[J(0x134)])return;this[J(0x130)]=incrementListIndex(this['selected'],'up',this[J(0x138)]),this['render']();}async['onDownKey'](){const m=a14k;if(this['loading'])return;this['selected']=incrementListIndex(this[m(0x130)],m(0x135),this['opt']),await this[m(0x13a)](),this['render']();}async[a14k(0x13a)](){const L=a14k;if(this[L(0x130)]>=this[L(0x138)][L(0x139)][L(0x14d)]-0x1){if(this[L(0x133)]===undefined)return;this[L(0x134)]=!![];let o=0x0;const l=setInterval(()=>{const F=L,Z=['⠋','⠙','⠹','⠸','⠼','⠴','⠦','⠧','⠇','⠏'],A=a14N[F(0x143)](Z[o%Z[F(0x14d)]]+'\x20Loading\x20more\x20options');this[F(0x138)][F(0x139)]['choices'][this[F(0x130)]]['name']=''+A,o+=0x1,this[F(0x131)]();},0x50),{elements:E,nextPageCursor:y}=await this['pagOpt'][L(0x145)]({'nextPageCursor':this[L(0x133)]})[L(0x141)](()=>({'elements':[],'nextPageCursor':undefined}));this[L(0x133)]=y;const N=E['map'](Z=>new a14y(Z,Z));this[L(0x138)][L(0x139)][L(0x139)]['splice'](this['selected'],0x1),this[L(0x138)]['choices']['push'](...N),y!==undefined&&this['opt'][L(0x139)][L(0x144)](new a14y(this[L(0x132)],this[L(0x132)])),clearInterval(l),this[L(0x134)]=![];}}}
@@ -1 +1 @@
1
- const a15m=a15A;(function(Q,A){const T=a15A,N=Q();while(!![]){try{const t=-parseInt(T(0x158))/0x1+parseInt(T(0x17a))/0x2+-parseInt(T(0x151))/0x3+parseInt(T(0x14d))/0x4*(parseInt(T(0x152))/0x5)+-parseInt(T(0x172))/0x6+parseInt(T(0x16b))/0x7+-parseInt(T(0x187))/0x8*(-parseInt(T(0x15b))/0x9);if(t===A)break;else N['push'](N['shift']());}catch(a){N['push'](N['shift']());}}}(a15Q,0xd6f15));import{ApiClient}from'@northflank/js-client';import a15N from'chalk';import{assertContextExisting,customUserAgent,error,getCommand,success,warning}from'../utils.js';function a15Q(){const q=['portName','message','Port-forwarding\x20for\x20Northflank\x20services\x20and\x20addons.','Forwarding\x20service\x20','\x20-\x20','\x20in\x20project\x20','join','description','askForProjectContext','protocol','101514aCubVu','http://','getProxyForwarder','/etc/hosts','--service\x20--serviceId\x20[NAME]','type','skipHostnamesText','7137120tMPYIi',',\x20hostname:\x20','tunnel-close','--skipHostnames','address','Service\x20to\x20forward','Stop\x20forwarding\x20traffic\x20from\x20','getTokenScope','511404JKVFTV','Project\x20for\x20forwarding','portFwdCmd','hostnames','ports','\x27:\x20\x22','addon','action','bold','forwardProject','addCommand','--noDefaults','flatMap','864iEYcNQ','forwardAddon','Forwarding\x20addon\x20','>\x20Instance\x20\x27','greenBright','getCurrentServiceName','forEach','map','\x20mode.\x20If\x20hostname\x20forwarding\x20is\x20required,\x20remove\x20','log','org','data','HTTP','service','Cleaning\x20up\x20open\x20connections\x20failed:\x20','skipHostnames','\x20flag\x20or\x20manually\x20append\x20following\x20entry\x20to\x20your\x20hosts\x20file\x20(','\x20mode:\x20the\x20locally\x20forwarded\x20port\x20differs\x20from\x20the\x20actual\x20port\x20on\x20the\x20forwarded\x20service/addon.','entries','apiClient','Error\x20occured\x20while\x20trying\x20to\x20forward\x20','green','\x20\x20\x20\x20\x20\x20\x20\x20\x20','length','Instance\x20to\x20forward','getCurrentProjectName','Don\x27t\x20use\x20context\x20default\x20values,\x20explicitly\x20use\x20options\x20or\x20ask.','filter','platform','\x20and\x20','alias','port','error','Port-forwarding\x20for\x20the\x20specified\x20addon','forward','connection-error','\x27\x20of\x20','\x20is\x20exposed\x20on\x20','Please\x20ensure\x20the\x20','forwardService','\x20service\x20ports','contextProvider','canExecuteWithHostnames','name','reset','Only\x20expose\x20on\x20IP\x20address,\x20not\x20on\x20hostnames.\x20With\x20this\x20option,\x20no\x20root\x20permissions\x20are\x20required.','Port-forwarding\x20for\x20all\x20services\x20and\x20addons\x20in\x20the\x20given\x20project','Failed:\x20','exit','SIGINT','forwarding','--addon\x20--addonId\x20[NAME]','getBaseCommand','C:/Windows/System32/drivers/etc/hosts','4404856zuelLW','\x20\x20\x20No\x20running\x20container\x20found\x20for\x20','Running\x20in\x20','printForwardingInfo','2997249SbFASZ','5bceuNb','printHostsFileHint','\x20addon\x20ports','Running\x20on\x20macOS\x20in\x20','--team\x20--teamId\x20[TEAMID]','Port-forwarding\x20for\x20the\x20specified\x20service','394262fdRfhy','option','noDefaultsText','174321gyZLSd','\x20with\x20these\x20hostnames:','all','\x20to\x20','\x20is\x20running\x20and\x20reachable\x20and\x20that\x20a\x20port\x20is\x20defined\x20on\x20the\x20networking\x20section.','hosts'];a15Q=function(){return q;};return a15Q();}import{InquirerHelper}from'../inquirer-helper.js';import*as a15t from'os';function a15A(Q,A){const N=a15Q();return a15A=function(t,a){t=t-0x13b;let p=N[t];return p;},a15A(Q,A);}import{uniqBy,uniq,repeat,groupBy,capitalize}from'lodash-es';import{EOL}from'os';export class CliPortForward{[a15m(0x17c)];[a15m(0x19a)];[a15m(0x15a)]=a15m(0x1a1);[a15m(0x171)]=a15m(0x144);constructor(Q,A){const n=a15m;this[n(0x19a)]=new ApiClient(Q,{'throwErrorOnHttpErrorCode':!![],'customUserAgent':customUserAgent,'agent':A});const N=new InquirerHelper(this[n(0x19a)]);this['portFwdCmd']=getCommand()[n(0x142)](n(0x1a9))[n(0x1a5)]('fwd')[n(0x168)](n(0x163));const t=this['getBaseCommand']()[n(0x142)](n(0x15d))[n(0x168)](n(0x145))[n(0x159)](n(0x185),this['noDefaultsText'],![])[n(0x159)](n(0x175),this[n(0x171)],![])[n(0x181)](async({noDefaults:P,teamId:l,projectId:X,skipHostnames:S})=>{const R=n;assertContextExisting(this[R(0x19a)]);const g=this[R(0x16d)](S),d=P?undefined:Q[R(0x1a0)](),{projectId:Z,teamId:M}=await this[R(0x169)](Q,N,l,X,d);try{const {services:k,addons:B}=await g[R(0x183)]({'teamId':M,'projectId':Z},S);if(k['length']+B[R(0x19e)]<=0x0)warning('No\x20services\x20and\x20addons\x20to\x20forward\x20found\x20in\x20project\x20'+a15N[R(0x182)](Z));else{const w=k[R(0x1a2)](E=>E[R(0x19e)]>0x0)[R(0x19e)],x=B[R(0x1a2)](E=>E[R(0x19e)]>0x0)['length'],Y='\x20in\x20project\x20'+a15N[R(0x182)](Z);console['log']('Forwarding\x20'+a15N[R(0x19c)][R(0x182)](w+R(0x13f))+R(0x1a4)+a15N[R(0x19c)][R(0x182)](x+R(0x154))+Y),console[R(0x190)](),console[R(0x190)](a15N[R(0x182)]('Services:')),k['forEach'](E=>{const u=R;if(E[u(0x19e)]>=0x1&&!E[0x0]['error'])this[u(0x150)](E,{'type':u(0x194),'name':E[0x0]['data']['id']},S);}),console['log'](a15N['bold']('Addons:')),B[R(0x18d)](E=>{const V=R;if(E['length']>=0x1&&!E[0x0][V(0x1a7)])this['printForwardingInfo'](E,{'type':'addon','name':E[0x0][V(0x192)]['id']},S);}),this[R(0x153)]([...k['flat'](),...B['flat']()],S);}}catch(E){error(R(0x146)+E['message']);}}),a=this[n(0x14b)]()[n(0x142)](n(0x194))[n(0x168)](n(0x157))[n(0x159)](n(0x16f),n(0x177))['option']('--instance\x20--instanceId\x20[NAME]',n(0x19f))['option'](n(0x185),this[n(0x15a)],![])['option'](n(0x175),this[n(0x171)],![])['action'](async({noDefaults:P,teamId:l,projectId:X,serviceId:S,instanceId:g,skipHostnames:d})=>{const U=n;assertContextExisting(this[U(0x19a)]);const Z=this[U(0x16d)](d),M=P?undefined:Q[U(0x1a0)](),{projectId:k,teamId:B}=await this[U(0x169)](Q,N,X,l,M),w=P?undefined:Q[U(0x18c)](),x=S||w||await N['askForService'](k,B)();console['log'](U(0x164)+a15N[U(0x182)](x)+U(0x166)+a15N['bold'](k));try{const Y=await Z[U(0x13e)]({'teamId':B,'projectId':k,'serviceId':x,'instanceId':g},d);this[U(0x150)](Y,{'name':x,'type':U(0x194),'instanceId':g},d),this[U(0x153)](Y,d);}catch(E){error(U(0x146)+E[U(0x162)]);}}),p=this[n(0x14b)]()[n(0x142)]('addon')[n(0x168)](n(0x1a8))[n(0x159)](n(0x14a),'Addon\x20to\x20forward')[n(0x159)](n(0x175),this[n(0x171)],![])[n(0x181)](async({noDefaults:P,teamId:l,projectId:X,addonId:S,skipHostnames:g})=>{const L=n;assertContextExisting(this['apiClient']);const d=this[L(0x16d)](g),Z=P?undefined:Q[L(0x1a0)](),{projectId:M,teamId:k}=await this[L(0x169)](Q,N,X,l,Z),B=S||await N['askForAddon'](M,k)();console[L(0x190)](L(0x189)+a15N[L(0x182)](B)+'\x20in\x20project\x20'+a15N[L(0x182)](M));try{const w={'teamId':k,'projectId':M,'addonId':B},x=await d[L(0x188)](w,g);this[L(0x150)](x,{'name':B,'type':L(0x180)},g),this[L(0x153)](x,g);}catch(Y){error('Failed:\x20'+Y[L(0x162)]);}});this['portFwdCmd'][n(0x184)](t),this[n(0x17c)][n(0x184)](a),this['portFwdCmd'][n(0x184)](p);}[a15m(0x14b)]=()=>{const h=a15m,Q=getCommand(!![])[h(0x159)]('--project\x20--projectId\x20[NAME]',h(0x17b));return this[h(0x19a)][h(0x140)]['getTokenScope']()==='org'&&Q[h(0x159)](h(0x156),'Team\x20for\x20forwarding'),Q;};[a15m(0x16d)](Q=![]){const O=a15m,A=this[O(0x19a)][O(0x149)];if(!Q){const N=A[O(0x141)]();if(N[O(0x1a7)])throw new Error(N[O(0x162)]);}return A['on'](O(0x174),(t,a)=>{const I=O,p=a15N[I(0x182)](a[I(0x170)]+'\x20\x27'+a['id']+'\x27'),P=a[I(0x17d)][I(0x19e)]>0x0;warning(I(0x178)+a['address']+':'+a[I(0x1a6)]+I(0x15e)+p),Q&&P&&warning('\x20\x20If\x20you\x20have\x20added\x20entries\x20to\x20your\x20hosts\x20file,\x20it\x20is\x20recommended\x20to\x20remove\x20them\x20again\x20now.');}),A['on'](O(0x1aa),(t,a,p)=>{const z=O;warning('Connection\x20error\x20occurred\x20when\x20forwarding\x20\x27'+a[z(0x176)]+':'+a[z(0x1a6)]+z(0x17f)+p?.[z(0x162)]+'\x22');}),process['on'](O(0x148),async()=>{const F=O;try{await A['stop']();}catch(t){error(F(0x195)+t[F(0x162)]);}finally{process[F(0x147)]();}}),A;}[a15m(0x150)](Q,A,N=![]){const f=a15m,{type:t,name:a,instanceId:p}=A;if(Q[f(0x19e)]<=0x0){const S=f(0x13d)+A['type']+f(0x15f);warning(f(0x14e)+t+'\x20'+a15N[f(0x182)](a)+'.\x20'+S);return;}const P=groupBy(Q,'data.id'),l=g=>'\x20('+(g[f(0x161)]?g['portName']+f(0x165):'')+g[f(0x16a)]+')';function X(g,d=0x2){const y=f;if(!N){const Z=g[y(0x16a)]===y(0x193)?y(0x16c):'';g[y(0x17d)][y(0x18d)](M=>{const G=y;console['log'](repeat('\x20',d)+'-\x20'+Z+M+':'+g[G(0x1a6)]);});}}Object[f(0x199)](P)[f(0x18d)](([g,d])=>{const H=f,Z=p?H(0x18a)+a15N[H(0x18b)][H(0x182)](p)+H(0x13b)+t+'\x20\x27'+a15N[H(0x18b)][H(0x182)](g)+'\x27':'>\x20'+capitalize(t)+'\x20\x27'+a15N[H(0x18b)][H(0x182)](g)+'\x27';if(t===H(0x180)){if(d[H(0x19e)]===0x1){const M=d[0x0];if(M[H(0x1a7)]){error(H(0x19b)+g+':\x20'+M[H(0x1a7)]['message']);return;}const k=M[H(0x192)],B=!N?'\x20'+a15N[H(0x143)]('with\x20hostname:\x20'+k['hostnames'][H(0x167)](',')):'';success(Z+H(0x13c)+k[H(0x176)]+':'+k[H(0x1a6)]+l(k)+B);}else{const w=uniqBy(d,x=>x?.['data']?.[H(0x17d)]?.['join'](','))[H(0x19e)]>0x1;success(Z+'\x20is\x20exposed\x20with\x20multiple\x20'+(w?H(0x160):H(0x17e))+':'),d['forEach'](x=>{const v=H;if(x[v(0x1a7)]){error('Error\x20occured\x20while\x20trying\x20to\x20forward\x20'+g+':\x20'+x[v(0x1a7)][v(0x162)]);return;}const Y=x[v(0x192)],E=!N?v(0x173)+Y['hostnames']['join'](','):'';console['log']('\x20\x20-\x20Address:\x20'+Y[v(0x176)]+':'+Y[v(0x1a6)]+l(Y)+E);});}}if(t==='service'){if(d['length']===0x1){const x=d[0x0];if(x['error']){error(H(0x19b)+g+':\x20'+x[H(0x1a7)]['message']);return;}const Y=x['data'],E=!N?H(0x15c):':',D=Y['address']+':'+Y[H(0x1a6)]+l(Y);success(Z+H(0x13c)+D+E),X(Y);}else success(Z+H(0x13c)+d[0x0]?.['data']?.['address']+'\x20with\x20multiple\x20ports:'),d[H(0x18d)](s=>{const K=H;if(s[K(0x1a7)]){error(K(0x19b)+g+':\x20'+s[K(0x1a7)][K(0x162)]);return;}const i=s['data'];success('\x20\x20-\x20port\x20'+i[K(0x1a6)]+l(i)),X(i,0x4);});}});}[a15m(0x153)](Q,A=![]){const W=a15m;if(A){const N=Q[W(0x186)](g=>g['data'])['filter'](g=>g!==undefined),t=process?.[W(0x1a3)]==='win32',a=a15t['platform']()==='darwin',p=t?W(0x14c):W(0x16e),P=a15N['bold'](W(0x196)),l=a?EOL+W(0x155)+P+W(0x198):undefined;let X=W(0x14f)+P+W(0x18f)+W(0x175)+W(0x197)+p+'):';l!==undefined&&warning(l??'');warning(X);const S=N[W(0x18e)](g=>g[W(0x176)]+W(0x19d)+g[W(0x17d)][W(0x167)]('\x20'));console['log'](uniq(S)[W(0x167)](EOL)),console[W(0x190)]();}}['askForProjectContext']=async(Q,A,N,t,a)=>{const o=a15m,p=Q[o(0x179)]()===o(0x191)?t??await A['askForTeam']()():undefined,P=N||a||await A['askForProject'](p)();return{'teamId':p,'projectId':P};};}
1
+ const a15M=a15l;(function(o,l){const T=a15l,E=o();while(!![]){try{const y=parseInt(T(0xa7))/0x1+-parseInt(T(0xaf))/0x2*(-parseInt(T(0x107))/0x3)+-parseInt(T(0xda))/0x4*(parseInt(T(0xaa))/0x5)+parseInt(T(0xf8))/0x6*(parseInt(T(0xd5))/0x7)+-parseInt(T(0xe2))/0x8+-parseInt(T(0xeb))/0x9+-parseInt(T(0x103))/0xa*(-parseInt(T(0xe4))/0xb);if(y===l)break;else E['push'](E['shift']());}catch(N){E['push'](E['shift']());}}}(a15o,0x89bbe));import{ApiClient}from'@northflank/js-client';function a15l(o,l){const E=a15o();return a15l=function(y,N){y=y-0xa3;let Z=E[y];return Z;},a15l(o,l);}import a15E from'chalk';import{assertContextExisting,customUserAgent,error,getCommand,success,warning}from'../utils.js';import{InquirerHelper}from'../inquirer-helper.js';import*as a15y from'os';import{uniqBy,uniq,repeat,groupBy,capitalize}from'lodash-es';function a15o(){const H=['forwardAddon','forwarding','Project\x20for\x20forwarding','Don\x27t\x20use\x20context\x20default\x20values,\x20explicitly\x20use\x20options\x20or\x20ask.','Port-forwarding\x20for\x20all\x20services\x20and\x20addons\x20in\x20the\x20given\x20project','forwardProject','flat','10MoNrnM','skipHostnames','http://','askForService','186CNQHvg','entries','reset','action','type','stop','Connection\x20error\x20occurred\x20when\x20forwarding\x20\x27','C:/Windows/System32/drivers/etc/hosts','green','--skipHostnames','\x20to\x20','forEach','join','protocol','\x20flag\x20or\x20manually\x20append\x20following\x20entry\x20to\x20your\x20hosts\x20file\x20(','data','filter','\x20service\x20ports','contextProvider','ports','\x27\x20of\x20','485983HvAWAl','message','HTTP','155mZOpsh','Forwarding\x20addon\x20','data.id','Stop\x20forwarding\x20traffic\x20from\x20','portFwdCmd','8444lKJvLs','\x20\x20\x20\x20\x20\x20\x20\x20\x20','printForwardingInfo','hostnames','Team\x20for\x20forwarding','\x20with\x20these\x20hostnames:','addCommand','Running\x20on\x20macOS\x20in\x20','\x20\x20-\x20Address:\x20','platform','getBaseCommand','org','Running\x20in\x20','hosts','Port-forwarding\x20for\x20the\x20specified\x20addon','Service\x20to\x20forward','darwin','log','noDefaultsText','greenBright','Port-forwarding\x20for\x20the\x20specified\x20service','\x20and\x20','askForProject','--addon\x20--addonId\x20[NAME]','Error\x20occured\x20while\x20trying\x20to\x20forward\x20','Cleaning\x20up\x20open\x20connections\x20failed:\x20','Forwarding\x20','apiClient','\x20with\x20multiple\x20ports:','getTokenScope','\x20-\x20','--noDefaults','error','forwardService','\x27:\x20\x22','Addon\x20to\x20forward','Services:','--project\x20--projectId\x20[NAME]','441EPCMED','\x20in\x20project\x20','askForProjectContext','getProxyForwarder','bold','135448BvLqNW','description','\x20mode:\x20the\x20locally\x20forwarded\x20port\x20differs\x20from\x20the\x20actual\x20port\x20on\x20the\x20forwarded\x20service/addon.','address','SIGINT','--service\x20--serviceId\x20[NAME]','printHostsFileHint','name','2478208RTQYJI','--team\x20--teamId\x20[TEAMID]','21425118RtnFeP','Forwarding\x20service\x20','service',',\x20hostname:\x20','\x20is\x20running\x20and\x20reachable\x20and\x20that\x20a\x20port\x20is\x20defined\x20on\x20the\x20networking\x20section.','win32','Addons:','8927559flRAou','--instance\x20--instanceId\x20[NAME]','port','\x20\x20If\x20you\x20have\x20added\x20entries\x20to\x20your\x20hosts\x20file,\x20it\x20is\x20recommended\x20to\x20remove\x20them\x20again\x20now.','tunnel-close','\x20addon\x20ports','alias','option','getCurrentProjectName','Port-forwarding\x20for\x20Northflank\x20services\x20and\x20addons.','\x20is\x20exposed\x20on\x20','skipHostnamesText','\x20\x20-\x20port\x20','20964qMPfAz','Failed:\x20','length','addon'];a15o=function(){return H;};return a15o();}import{EOL}from'os';export class CliPortForward{['portFwdCmd'];['apiClient'];[a15M(0xc1)]=a15M(0xff);[a15M(0xf6)]='Only\x20expose\x20on\x20IP\x20address,\x20not\x20on\x20hostnames.\x20With\x20this\x20option,\x20no\x20root\x20permissions\x20are\x20required.';constructor(o,l){const B=a15M;this[B(0xca)]=new ApiClient(o,{'throwErrorOnHttpErrorCode':!![],'customUserAgent':customUserAgent,'agent':l});const E=new InquirerHelper(this[B(0xca)]);this[B(0xae)]=getCommand()[B(0xe1)]('forward')[B(0xf1)]('fwd')[B(0xdb)](B(0xf4));const y=this['getBaseCommand']()['name']('all')[B(0xdb)](B(0x100))[B(0xf2)](B(0xce),this['noDefaultsText'],![])[B(0xf2)](B(0x110),this[B(0xf6)],![])[B(0x10a)](async({noDefaults:A,teamId:X,projectId:g,skipHostnames:k})=>{const G=B;assertContextExisting(this[G(0xca)]);const I=this[G(0xd8)](k),J=A?undefined:o[G(0xf3)](),{projectId:m,teamId:L}=await this[G(0xd7)](o,E,X,g,J);try{const {services:F,addons:b}=await I[G(0x101)]({'teamId':L,'projectId':m},k);if(F['length']+b[G(0xfa)]<=0x0)warning('No\x20services\x20and\x20addons\x20to\x20forward\x20found\x20in\x20project\x20'+a15E[G(0xd9)](m));else{const q=F[G(0x117)](w=>w['length']>0x0)[G(0xfa)],V=b[G(0x117)](w=>w[G(0xfa)]>0x0)['length'],v=G(0xd6)+a15E[G(0xd9)](m);console[G(0xc0)](G(0xc9)+a15E['green'][G(0xd9)](q+G(0xa3))+G(0xc4)+a15E[G(0x10f)]['bold'](V+G(0xf0))+v),console[G(0xc0)](),console[G(0xc0)](a15E['bold'](G(0xd3))),F[G(0x112)](w=>{const K=G;if(w[K(0xfa)]>=0x1&&!w[0x0][K(0xcf)])this['printForwardingInfo'](w,{'type':K(0xe6),'name':w[0x0]['data']['id']},k);}),console['log'](a15E[G(0xd9)](G(0xea))),b[G(0x112)](w=>{const s=G;if(w[s(0xfa)]>=0x1&&!w[0x0][s(0xcf)])this[s(0xb1)](w,{'type':s(0xfb),'name':w[0x0][s(0x116)]['id']},k);}),this['printHostsFileHint']([...F[G(0x102)](),...b['flat']()],k);}}catch(w){error('Failed:\x20'+w[G(0xa8)]);}}),N=this[B(0xb9)]()[B(0xe1)](B(0xe6))[B(0xdb)](B(0xc3))[B(0xf2)](B(0xdf),B(0xbe))['option'](B(0xec),'Instance\x20to\x20forward')['option'](B(0xce),this[B(0xc1)],![])['option']('--skipHostnames',this[B(0xf6)],![])[B(0x10a)](async({noDefaults:A,teamId:X,projectId:g,serviceId:k,instanceId:I,skipHostnames:J})=>{const x=B;assertContextExisting(this[x(0xca)]);const m=this['getProxyForwarder'](J),L=A?undefined:o[x(0xf3)](),{projectId:F,teamId:b}=await this[x(0xd7)](o,E,g,X,L),q=A?undefined:o['getCurrentServiceName'](),V=k||q||await E[x(0x106)](F,b)();console[x(0xc0)](x(0xe5)+a15E[x(0xd9)](V)+x(0xd6)+a15E[x(0xd9)](F));try{const v=await m[x(0xd0)]({'teamId':b,'projectId':F,'serviceId':V,'instanceId':I},J);this[x(0xb1)](v,{'name':V,'type':x(0xe6),'instanceId':I},J),this['printHostsFileHint'](v,J);}catch(w){error(x(0xf9)+w[x(0xa8)]);}}),Z=this['getBaseCommand']()[B(0xe1)](B(0xfb))['description'](B(0xbd))[B(0xf2)](B(0xc6),B(0xd2))[B(0xf2)](B(0x110),this['skipHostnamesText'],![])[B(0x10a)](async({noDefaults:A,teamId:X,projectId:g,addonId:k,skipHostnames:I})=>{const Y=B;assertContextExisting(this[Y(0xca)]);const J=this[Y(0xd8)](I),m=A?undefined:o[Y(0xf3)](),{projectId:L,teamId:F}=await this[Y(0xd7)](o,E,g,X,m),b=k||await E['askForAddon'](L,F)();console[Y(0xc0)](Y(0xab)+a15E['bold'](b)+Y(0xd6)+a15E[Y(0xd9)](L));try{const q={'teamId':F,'projectId':L,'addonId':b},V=await J[Y(0xfc)](q,I);this[Y(0xb1)](V,{'name':b,'type':Y(0xfb)},I),this[Y(0xe0)](V,I);}catch(v){error(Y(0xf9)+v['message']);}});this['portFwdCmd'][B(0xb5)](y),this[B(0xae)][B(0xb5)](N),this[B(0xae)]['addCommand'](Z);}[a15M(0xb9)]=()=>{const p=a15M,o=getCommand(!![])[p(0xf2)](p(0xd4),p(0xfe));return this['apiClient'][p(0xa4)][p(0xcc)]()===p(0xba)&&o['option'](p(0xe3),p(0xb3)),o;};[a15M(0xd8)](o=![]){const r=a15M,l=this[r(0xca)][r(0xfd)];if(!o){const E=l['canExecuteWithHostnames']();if(E[r(0xcf)])throw new Error(E[r(0xa8)]);}return l['on'](r(0xef),(y,N)=>{const e=r,Z=a15E['bold'](N[e(0x10b)]+'\x20\x27'+N['id']+'\x27'),A=N['hostnames'][e(0xfa)]>0x0;warning(e(0xad)+N['address']+':'+N[e(0xed)]+e(0x111)+Z),o&&A&&warning(e(0xee));}),l['on']('connection-error',(y,N,Z)=>{const O=r;warning(O(0x10d)+N[O(0xdd)]+':'+N[O(0xed)]+O(0xd1)+Z?.[O(0xa8)]+'\x22');}),process['on'](r(0xde),async()=>{const U=r;try{await l[U(0x10c)]();}catch(y){error(U(0xc8)+y[U(0xa8)]);}finally{process['exit']();}}),l;}['printForwardingInfo'](o,l,E=![]){const z=a15M,{type:y,name:N,instanceId:Z}=l;if(o['length']<=0x0){const k='Please\x20ensure\x20the\x20'+l[z(0x10b)]+z(0xe8);warning('\x20\x20\x20No\x20running\x20container\x20found\x20for\x20'+y+'\x20'+a15E[z(0xd9)](N)+'.\x20'+k);return;}const A=groupBy(o,z(0xac)),X=I=>'\x20('+(I['portName']?I['portName']+z(0xcd):'')+I[z(0x114)]+')';function g(I,J=0x2){const Q=z;if(!E){const m=I[Q(0x114)]===Q(0xa9)?Q(0x105):'';I[Q(0xb2)][Q(0x112)](L=>{const C=Q;console[C(0xc0)](repeat('\x20',J)+'-\x20'+m+L+':'+I[C(0xed)]);});}}Object[z(0x108)](A)['forEach'](([I,J])=>{const D=z,m=Z?'>\x20Instance\x20\x27'+a15E[D(0xc2)]['bold'](Z)+D(0xa6)+y+'\x20\x27'+a15E[D(0xc2)][D(0xd9)](I)+'\x27':'>\x20'+capitalize(y)+'\x20\x27'+a15E[D(0xc2)][D(0xd9)](I)+'\x27';if(y===D(0xfb)){if(J[D(0xfa)]===0x1){const L=J[0x0];if(L[D(0xcf)]){error(D(0xc7)+I+':\x20'+L['error'][D(0xa8)]);return;}const F=L[D(0x116)],b=!E?'\x20'+a15E[D(0x109)]('with\x20hostname:\x20'+F[D(0xb2)][D(0x113)](',')):'';success(m+D(0xf5)+F[D(0xdd)]+':'+F[D(0xed)]+X(F)+b);}else{const q=uniqBy(J,V=>V?.['data']?.[D(0xb2)]?.['join'](','))[D(0xfa)]>0x1;success(m+'\x20is\x20exposed\x20with\x20multiple\x20'+(q?D(0xbc):D(0xa5))+':'),J['forEach'](V=>{const d=D;if(V[d(0xcf)]){error('Error\x20occured\x20while\x20trying\x20to\x20forward\x20'+I+':\x20'+V[d(0xcf)][d(0xa8)]);return;}const v=V[d(0x116)],w=!E?d(0xe7)+v[d(0xb2)]['join'](','):'';console[d(0xc0)](d(0xb7)+v[d(0xdd)]+':'+v['port']+X(v)+w);});}}if(y===D(0xe6)){if(J[D(0xfa)]===0x1){const V=J[0x0];if(V['error']){error('Error\x20occured\x20while\x20trying\x20to\x20forward\x20'+I+':\x20'+V[D(0xcf)][D(0xa8)]);return;}const v=V[D(0x116)],w=!E?D(0xb4):':',i=v[D(0xdd)]+':'+v['port']+X(v);success(m+'\x20is\x20exposed\x20on\x20'+i+w),g(v);}else success(m+D(0xf5)+J[0x0]?.[D(0x116)]?.[D(0xdd)]+D(0xcb)),J[D(0x112)](f=>{const j=D;if(f[j(0xcf)]){error('Error\x20occured\x20while\x20trying\x20to\x20forward\x20'+I+':\x20'+f[j(0xcf)][j(0xa8)]);return;}const a=f[j(0x116)];success(j(0xf7)+a[j(0xed)]+X(a)),g(a,0x4);});}});}[a15M(0xe0)](o,l=![]){const P=a15M;if(l){const E=o['flatMap'](I=>I[P(0x116)])[P(0x117)](I=>I!==undefined),y=process?.[P(0xb8)]===P(0xe9),N=a15y[P(0xb8)]()===P(0xbf),Z=y?P(0x10e):'/etc/hosts',A=a15E['bold'](P(0x104)),X=N?EOL+P(0xb6)+A+P(0xdc):undefined;let g=P(0xbb)+A+'\x20mode.\x20If\x20hostname\x20forwarding\x20is\x20required,\x20remove\x20'+P(0x110)+P(0x115)+Z+'):';X!==undefined&&warning(X??'');warning(g);const k=E['map'](I=>I[P(0xdd)]+P(0xb0)+I['hostnames'][P(0x113)]('\x20'));console[P(0xc0)](uniq(k)['join'](EOL)),console[P(0xc0)]();}}['askForProjectContext']=async(o,l,E,y,N)=>{const n=a15M,Z=o['getTokenScope']()===n(0xba)?y??await l['askForTeam']()():undefined,A=E||N||await l[n(0xc5)](Z)();return{'teamId':Z,'projectId':A};};}
package/dist/ssh/index.js CHANGED
@@ -1 +1 @@
1
- const a16I=a16A;function a16Q(){const C=['findSSH','getCurrentProjectName','askForContainer','uncaughtException','ssh\x20','--useHostnames','\x20-p\x20','\x20to\x20ssh\x20into','3DGrzKc',',\x20stop\x20with\x20Ctrl+C','which','603410jbuqds','askForTeam','Ctrl+C\x20received\x20-\x20Terminating\x20SSH\x20proxy...','78AEXSjF','name','Establish\x20SSH\x20connectivity\x20to\x20Northflank\x20','apiClient','9qbRjwm','find','org','SSH\x20exited\x20with\x20code:\x20','SSH\x20for\x20Northflank\x20services\x20and\x20jobs.','getTokenScope','toUpperCase','\x22\x20./data/\x20','UserKnownHostsFile=/dev/null','data','getCurrentServiceName','SIGTERM','\x20-l','scp\x20-P\x20','Id\x20[NAME]','.\x20Creates\x20an\x20SSH\x20terminal\x20session\x20by\x20default.','56651yhyvev','askForProject',':/remote/path/','ssh','\x20\x20>\x20SCP:\x20\x20\x09','Use\x20with\x20any\x20SSH\x20compatible\x20client.\x20Example\x20usages:','--user\x20[USER]','/usr/bin/ssh','blackBright','description','SSH\x20proxy\x20started\x20on\x20endpoint:\x20','default-ssh','Use\x20specific\x20username\x20for\x20SSH\x20connection','message','33uvguin','push','Only\x20startup\x20SSH\x20proxy\x20without\x20opening\x20an\x20SSH\x20terminal\x20session.','SIGINT','sshCmd','StrictHostKeyChecking=no','RemoteCommand=su\x20','execFileAsync','\x20\x20>\x20SSH\x20session:','\x20\x20>\x20RSYNC:\x20\x20\x09','inherit','Failed\x20to\x20spawn\x20SSH\x20command:\x20','option','contextProvider','addCommand','\x20file.txt\x20','--instance\x20--instanceName\x20[NAME]','Must\x20be\x20run\x20in\x20an\x20interactive\x20terminal\x20(TTY\x20required).','/usr/local/bin/ssh','564296nTEnJb','Instance\x20to\x20use\x20for\x20SSH\x20(random\x20instance\x20will\x20be\x20chosen\x20if\x20not\x20specified)','error','unknown\x20error','SSH\x20killed\x20by\x20signal:\x20','trim','\x20\x20>\x20SFTP:\x20\x20\x09','root','log','kill','rsync\x20-avz\x20-e\x20\x22ssh\x20-p\x20','sftp\x20-P\x20','2017404reHEpf','--project\x20--projectId\x20[NAME]','close','stdin','-tt','askForProjectContext',':/rsync-test/','Unable\x20to\x20initiate\x20SSH\x20tunnel.\x20Ensure\x20your\x20service\x20is\x20running\x20and\x20has\x20SSH\x20enabled','195435stUXzu','withServiceForwarding','11512gSMnjA','Error\x20trying\x20to\x20forward:\x20','exit','LogLevel=ERROR','Project\x20of\x20the\x20','148970VJFwsr','SSH\x20binary\x20not\x20found.\x20Please\x20install\x20OpenSSH.','Don\x27t\x20use\x20context\x20default\x20values,\x20explicitly\x20use\x20options\x20or\x20ask.','730ffUdGg','charAt'];a16Q=function(){return C;};return a16Q();}(function(Q,A){const O=a16A,N=Q();while(!![]){try{const t=parseInt(O(0x190))/0x1+parseInt(O(0x197))/0x2*(parseInt(O(0x1a4))/0x3)+-parseInt(O(0x192))/0x4*(parseInt(O(0x19a))/0x5)+parseInt(O(0x1aa))/0x6*(-parseInt(O(0x1be))/0x7)+-parseInt(O(0x1df))/0x8*(-parseInt(O(0x1ae))/0x9)+-parseInt(O(0x1a7))/0xa+parseInt(O(0x1cc))/0xb*(parseInt(O(0x1eb))/0xc);if(t===A)break;else N['push'](N['shift']());}catch(a){N['push'](N['shift']());}}}(a16Q,0x3f3fe));import{ApiClient}from'@northflank/js-client';import{assertContextExisting,customUserAgent,error,getCommand,success,warning}from'../utils.js';import{InquirerHelper}from'../inquirer-helper.js';import{spawn}from'child_process';import{execFile}from'child_process';import{promisify}from'util';function a16A(Q,A){const N=a16Q();return a16A=function(t,a){t=t-0x18a;let p=N[t];return p;},a16A(Q,A);}import a16N from'chalk';export class CliSsh{[a16I(0x1d0)];[a16I(0x1ad)];constructor(Q,A){const z=a16I;this[z(0x1ad)]=new ApiClient(Q,{'throwErrorOnHttpErrorCode':!![],'customUserAgent':customUserAgent,'agent':A});const N=new InquirerHelper(this[z(0x1ad)]);this[z(0x1d0)]=getCommand(!![])[z(0x1ab)](z(0x1c1))['description'](z(0x1b2));const t='service',a=getCommand(!![])['name'](t)[z(0x1c7)](z(0x1ac)+t+z(0x1bd))[z(0x1d8)](z(0x1ec),z(0x196)+t)[z(0x1d8)]('--'+t+'\x20--'+t+z(0x1bc),t[z(0x19b)](0x0)[z(0x1b4)]()+t['slice'](0x1)+z(0x1a3))['option'](z(0x1dc),z(0x1e0))[z(0x1d8)]('--proxyOnly',z(0x1ce),![])[z(0x1d8)](z(0x1a1),'Replicate\x20'+t+'\x20hostnames\x20on\x20local\x20machine.\x20Requires\x20sudo\x20permissions',![])[z(0x1d8)](z(0x1c4),z(0x1ca))[z(0x1d8)]('--noDefaults',z(0x199),![]);this[z(0x1ad)][z(0x1d9)][z(0x1b3)]()===z(0x1b0)&&a['option']('--team\x20--teamId\x20[TEAMID]','Team\x20id');const p=a['action'](async P=>{const F=z,{noDefaults:l,teamId:X,projectId:S,serviceId:g,instanceName:d,proxyOnly:Z,useHostnames:M}=P,{user:user=F(0x1e6),quiet:k}=P;assertContextExisting(this[F(0x1ad)]);try{const B=l?undefined:Q[F(0x19d)](),{projectId:w,teamId:x}=await this[F(0x18d)](Q,N,S,X,B),Y=l?undefined:Q[F(0x1b8)](),E=g||Y||await N['askForService'](w,x)(),D=d||await N[F(0x19e)](w,E,undefined,![],x,!![])(),s=process[F(0x18b)]['isTTY'],i=s&&!Z,T={'teamId':x,'projectId':w,'serviceId':E,'instanceId':D,'portsFilter':[0x16]};await this[F(0x1ad)]['forwarding'][F(0x191)](T,async m=>{const f=F,n=m[f(0x1af)](L=>L[f(0x1b7)]?.['portName']===f(0x1c9));if(n===undefined)throw new Error(f(0x18f));if(n?.[f(0x1e1)]!==undefined||n?.[f(0x1b7)]===undefined)throw new Error(f(0x193)+(n?.[f(0x1e1)]?.[f(0x1cb)]??f(0x1e2)));const {address:R,port:u,hostnames:V}=n[f(0x1b7)],U=M?V[0x0]??R:R;i?(!k&&success(f(0x1c8)+(U+':'+u)+',\x20stop\x20with\x20Ctrl+D'),await this['startSSH']({'address':U,'port':u,'user':user})):(!k?(success('SSH\x20proxy\x20started\x20on\x20endpoint:\x20'+(U+':'+u)+f(0x1a5)),console[f(0x1e7)](f(0x1c3)),console['log'](f(0x1d4)+a16N[f(0x1c6)](f(0x1a0)+user+'@'+U+f(0x1a2)+u)),console[f(0x1e7)](f(0x1e5)+a16N[f(0x1c6)](f(0x1ea)+u+'\x20'+user+'@'+U)),console[f(0x1e7)](f(0x1d5)+a16N[f(0x1c6)](f(0x1e9)+u+f(0x1b5)+user+'@'+U+f(0x18e))),console[f(0x1e7)](f(0x1c2)+a16N[f(0x1c6)](f(0x1bb)+u+f(0x1db)+user+'@'+U+f(0x1c0)))):console[f(0x1e7)](user,U,u),await new Promise((L,h)=>{const G=f;process['on']('SIGINT',()=>{const y=a16A;if(!k)success(y(0x1a9));L();}),process['on'](G(0x19f),h);}));},!M);}catch(m){error(''+m[F(0x1cb)]);}finally{process[F(0x194)]();}});this['sshCmd'][z(0x1da)](p);}['execFileAsync']=promisify(execFile);async[a16I(0x19c)](){const H=a16I;try{const {stdout:Q}=await this[H(0x1d3)](H(0x1a6),['ssh']);return Q[H(0x1e4)]();}catch{const A=['ssh',H(0x1c5),H(0x1de),'C:\x5cWindows\x5cSystem32\x5cOpenSSH\x5cssh.exe'];for(const N of A){try{return await this[H(0x1d3)](N,['-V']),N;}catch{}}return null;}}async['startSSH'](Q){const v=a16I,A=await this[v(0x19c)]();if(!A)throw new Error(v(0x198));if(!process[v(0x18b)]['isTTY'])throw new Error(v(0x1dd));const {address:N,port:port=0x16,user:user=v(0x1e6),args:args=[],trusted:trusted=!![]}=Q,t=[];trusted&&t[v(0x1cd)]('-o',v(0x1d1),'-o',v(0x1b6),'-o',v(0x195));user!==v(0x1e6)&&t[v(0x1cd)]('-o',v(0x1d2)+user+v(0x1ba),'-o','RequestTTY=yes');const a=spawn(A,[v(0x18c),'-p',port['toString'](),'-l',v(0x1e6),...t,...args,N],{'stdio':v(0x1d6)});await new Promise((p,P)=>{const K=v;a['on'](K(0x18a),(l,X)=>{const W=K;if(X)warning(W(0x1e3)+X);else l!==0x0?warning(W(0x1b1)+l):success('SSH\x20session\x20ended.');p(l);}),a['on'](K(0x1e1),l=>{const o=K;P(new Error(o(0x1d7)+l['message']));}),process['on'](K(0x1cf),()=>a[K(0x1e8)](K(0x1cf))),process['on'](K(0x1b9),()=>a[K(0x1e8)](K(0x1b9)));});}[a16I(0x18d)]=async(Q,A,N,t,a)=>{const q=a16I,p=Q[q(0x1b3)]()===q(0x1b0)?t??await A[q(0x1a8)]()():undefined,P=N||a||await A[q(0x1bf)](p)();return{'teamId':p,'projectId':P};};}
1
+ const a16D=a16l;(function(o,l){const r=a16l,E=o();while(!![]){try{const y=-parseInt(r(0xe3))/0x1*(-parseInt(r(0xbd))/0x2)+parseInt(r(0xf2))/0x3*(parseInt(r(0x100))/0x4)+parseInt(r(0xca))/0x5*(parseInt(r(0xbb))/0x6)+-parseInt(r(0xea))/0x7+-parseInt(r(0xdc))/0x8*(-parseInt(r(0x109))/0x9)+-parseInt(r(0xfa))/0xa*(parseInt(r(0xd6))/0xb)+-parseInt(r(0xb9))/0xc;if(y===l)break;else E['push'](E['shift']());}catch(N){E['push'](E['shift']());}}}(a16o,0x68665));import{ApiClient}from'@northflank/js-client';import{assertContextExisting,customUserAgent,error,getCommand,success,warning}from'../utils.js';function a16o(){const h=['Team\x20id','RequestTTY=yes','/usr/bin/ssh','apiClient','\x20\x20>\x20RSYNC:\x20\x20\x09','10GhwfSE','--proxyOnly','kill','addCommand','error','Don\x27t\x20use\x20context\x20default\x20values,\x20explicitly\x20use\x20options\x20or\x20ask.','96532OysZVt','service','execFileAsync','-tt','--useHostnames','\x20file.txt\x20','startSSH',':/remote/path/','unknown\x20error','45VDZSSY','askForProjectContext','SIGINT','Replicate\x20','Must\x20be\x20run\x20in\x20an\x20interactive\x20terminal\x20(TTY\x20required).','\x22\x20./data/\x20','Only\x20startup\x20SSH\x20proxy\x20without\x20opening\x20an\x20SSH\x20terminal\x20session.','SSH\x20killed\x20by\x20signal:\x20','org','C:\x5cWindows\x5cSystem32\x5cOpenSSH\x5cssh.exe','6487608tNcDsN','askForProject','6GcMOlw','ssh','22SublzC','push','blackBright','SSH\x20binary\x20not\x20found.\x20Please\x20install\x20OpenSSH.','exit','SSH\x20exited\x20with\x20code:\x20','getTokenScope','charAt','log','default-ssh','findSSH','Instance\x20to\x20use\x20for\x20SSH\x20(random\x20instance\x20will\x20be\x20chosen\x20if\x20not\x20specified)','root','2153680flnQbZ','name','sshCmd','RemoteCommand=su\x20','inherit','--project\x20--projectId\x20[NAME]','data','Ctrl+C\x20received\x20-\x20Terminating\x20SSH\x20proxy...','askForService','toUpperCase','trim','Project\x20of\x20the\x20','8556647SdvrQD','SSH\x20for\x20Northflank\x20services\x20and\x20jobs.','find',',\x20stop\x20with\x20Ctrl+C','slice','\x20\x20>\x20SFTP:\x20\x20\x09','1185880LzRFAI','StrictHostKeyChecking=no',':/rsync-test/','description','message','Use\x20specific\x20username\x20for\x20SSH\x20connection','Use\x20with\x20any\x20SSH\x20compatible\x20client.\x20Example\x20usages:','58183Zhbble','isTTY','close','getCurrentProjectName','SIGTERM','withServiceForwarding','/usr/local/bin/ssh','2825578NUnVRf','ssh\x20','Unable\x20to\x20initiate\x20SSH\x20tunnel.\x20Ensure\x20your\x20service\x20is\x20running\x20and\x20has\x20SSH\x20enabled','--team\x20--teamId\x20[TEAMID]','\x20to\x20ssh\x20into','uncaughtException','--noDefaults','\x20\x20>\x20SCP:\x20\x20\x09','42McjpWm','option','portName'];a16o=function(){return h;};return a16o();}import{InquirerHelper}from'../inquirer-helper.js';function a16l(o,l){const E=a16o();return a16l=function(y,N){y=y-0xb1;let Z=E[y];return Z;},a16l(o,l);}import{spawn}from'child_process';import{execFile}from'child_process';import{promisify}from'util';import a16E from'chalk';export class CliSsh{['sshCmd'];['apiClient'];constructor(o,l){const e=a16l;this['apiClient']=new ApiClient(o,{'throwErrorOnHttpErrorCode':!![],'customUserAgent':customUserAgent,'agent':l});const E=new InquirerHelper(this['apiClient']);this[e(0xcc)]=getCommand(!![])[e(0xcb)](e(0xbc))['description'](e(0xd7));const y=e(0x101),N=getCommand(!![])[e(0xcb)](y)[e(0xdf)]('Establish\x20SSH\x20connectivity\x20to\x20Northflank\x20'+y+'.\x20Creates\x20an\x20SSH\x20terminal\x20session\x20by\x20default.')[e(0xf3)](e(0xcf),e(0xd5)+y)[e(0xf3)]('--'+y+'\x20--'+y+'Id\x20[NAME]',y[e(0xc4)](0x0)[e(0xd3)]()+y[e(0xda)](0x1)+e(0xee))[e(0xf3)]('--instance\x20--instanceName\x20[NAME]',e(0xc8))[e(0xf3)](e(0xfb),e(0xb5),![])[e(0xf3)](e(0x104),e(0xb2)+y+'\x20hostnames\x20on\x20local\x20machine.\x20Requires\x20sudo\x20permissions',![])[e(0xf3)]('--user\x20[USER]',e(0xe1))[e(0xf3)](e(0xf0),e(0xff),![]);this[e(0xf8)]['contextProvider']['getTokenScope']()===e(0xb7)&&N[e(0xf3)](e(0xed),e(0xf5));const Z=N['action'](async A=>{const O=e,{noDefaults:X,teamId:g,projectId:k,serviceId:I,instanceName:J,proxyOnly:m,useHostnames:L}=A,{user:user=O(0xc9),quiet:F}=A;assertContextExisting(this[O(0xf8)]);try{const b=X?undefined:o[O(0xe6)](),{projectId:q,teamId:V}=await this[O(0x10a)](o,E,k,g,b),v=X?undefined:o['getCurrentServiceName'](),w=I||v||await E[O(0xd2)](q,V)(),i=J||await E['askForContainer'](q,w,undefined,![],V,!![])(),f=process['stdin'][O(0xe4)],a=f&&!m,T={'teamId':V,'projectId':q,'serviceId':w,'instanceId':i,'portsFilter':[0x16]};await this[O(0xf8)]['forwarding'][O(0xe8)](T,async M=>{const U=O,B=M[U(0xd8)](Y=>Y[U(0xd0)]?.[U(0xf4)]===U(0xc6));if(B===undefined)throw new Error(U(0xec));if(B?.[U(0xfe)]!==undefined||B?.[U(0xd0)]===undefined)throw new Error('Error\x20trying\x20to\x20forward:\x20'+(B?.[U(0xfe)]?.[U(0xe0)]??U(0x108)));const {address:G,port:K,hostnames:s}=B[U(0xd0)],x=L?s[0x0]??G:G;a?(!F&&success('SSH\x20proxy\x20started\x20on\x20endpoint:\x20'+(x+':'+K)+',\x20stop\x20with\x20Ctrl+D'),await this[U(0x106)]({'address':x,'port':K,'user':user})):(!F?(success('SSH\x20proxy\x20started\x20on\x20endpoint:\x20'+(x+':'+K)+U(0xd9)),console[U(0xc5)](U(0xe2)),console[U(0xc5)]('\x20\x20>\x20SSH\x20session:'+a16E['blackBright'](U(0xeb)+user+'@'+x+'\x20-p\x20'+K)),console[U(0xc5)](U(0xdb)+a16E[U(0xbf)]('sftp\x20-P\x20'+K+'\x20'+user+'@'+x)),console[U(0xc5)](U(0xf9)+a16E[U(0xbf)]('rsync\x20-avz\x20-e\x20\x22ssh\x20-p\x20'+K+U(0xb4)+user+'@'+x+U(0xde))),console[U(0xc5)](U(0xf1)+a16E[U(0xbf)]('scp\x20-P\x20'+K+U(0x105)+user+'@'+x+U(0x107)))):console[U(0xc5)](user,x,K),await new Promise((Y,p)=>{const Q=U;process['on']('SIGINT',()=>{const z=a16l;if(!F)success(z(0xd1));Y();}),process['on'](Q(0xef),p);}));},!L);}catch(M){error(''+M['message']);}finally{process[O(0xc1)]();}});this[e(0xcc)][e(0xfd)](Z);}['execFileAsync']=promisify(execFile);async['findSSH'](){const C=a16l;try{const {stdout:o}=await this[C(0x102)]('which',['ssh']);return o[C(0xd4)]();}catch{const l=[C(0xbc),C(0xf7),C(0xe9),C(0xb8)];for(const E of l){try{return await this[C(0x102)](E,['-V']),E;}catch{}}return null;}}async[a16D(0x106)](o){const d=a16D,l=await this[d(0xc7)]();if(!l)throw new Error(d(0xc0));if(!process['stdin'][d(0xe4)])throw new Error(d(0xb3));const {address:E,port:port=0x16,user:user=d(0xc9),args:args=[],trusted:trusted=!![]}=o,y=[];trusted&&y['push']('-o',d(0xdd),'-o','UserKnownHostsFile=/dev/null','-o','LogLevel=ERROR');user!==d(0xc9)&&y[d(0xbe)]('-o',d(0xcd)+user+'\x20-l','-o',d(0xf6));const N=spawn(l,[d(0x103),'-p',port['toString'](),'-l','root',...y,...args,E],{'stdio':d(0xce)});await new Promise((Z,A)=>{const j=d;N['on'](j(0xe5),(X,g)=>{const P=j;if(g)warning(P(0xb6)+g);else X!==0x0?warning(P(0xc2)+X):success('SSH\x20session\x20ended.');Z(X);}),N['on'](j(0xfe),X=>{const n=j;A(new Error('Failed\x20to\x20spawn\x20SSH\x20command:\x20'+X[n(0xe0)]));}),process['on'](j(0xb1),()=>N[j(0xfc)](j(0xb1))),process['on']('SIGTERM',()=>N[j(0xfc)](j(0xe7)));});}[a16D(0x10a)]=async(o,l,E,y,N)=>{const H=a16D,Z=o[H(0xc3)]()===H(0xb7)?y??await l['askForTeam']()():undefined,A=E||N||await l[H(0xba)](Z)();return{'teamId':Z,'projectId':A};};}
package/dist/utils.js CHANGED
@@ -1 +1 @@
1
- const a17S=a17A;function a17A(Q,A){const N=a17Q();return a17A=function(t,a){t=t-0x87;let p=N[t];return p;},a17A(Q,A);}(function(Q,A){const X=a17A,N=Q();while(!![]){try{const t=parseInt(X(0x8c))/0x1*(parseInt(X(0xab))/0x2)+-parseInt(X(0x87))/0x3*(-parseInt(X(0xbf))/0x4)+parseInt(X(0xba))/0x5+parseInt(X(0x94))/0x6*(-parseInt(X(0xa3))/0x7)+-parseInt(X(0xa8))/0x8*(parseInt(X(0x96))/0x9)+parseInt(X(0x98))/0xa*(parseInt(X(0x8b))/0xb)+parseInt(X(0xb9))/0xc*(parseInt(X(0x8e))/0xd);if(t===A)break;else N['push'](N['shift']());}catch(a){N['push'](N['shift']());}}}(a17Q,0x34090));import a17N from'chalk';import{Command}from'commander';import{ProxyAgent}from'proxy-agent';import a17t from'node-fetch';import{readFileSync}from'fs';import{fileURLToPath}from'url';import{dirname,join}from'path';const __filename=fileURLToPath(import.meta[a17S(0x8a)]),__dirname=dirname(__filename),pgk=JSON[a17S(0x91)](readFileSync(join(__dirname,'../package.json'),a17S(0xb6)));export const customUserAgent=a17S(0xb2)+pgk?.['version'];export const agent=new ProxyAgent();export const proxyEnvsSet=process[a17S(0xbb)][a17S(0xbe)]!==undefined||process[a17S(0xbb)][a17S(0x97)]!==undefined;export const decodeJwtPayload=Q=>{const d=a17S;try{const A=a=>{const g=a17A,p=a['replace'](/-/g,'+')[g(0xb8)](/_/g,'/')[g(0xc0)](a[g(0xae)]+(0x4-a[g(0xae)]%0x4)%0x4,'=');return JSON['parse'](Buffer[g(0xa5)](p,'base64')[g(0xa7)]());},[N,t]=Q[d(0xc4)]('.');return A(t);}catch(a){return{};}};export async function checkUpdate(Q){const M=a17S;function A(N,t){const Z=a17A,a=new Date(Number(N));return a[Z(0x90)](a['getDate']()+t),a;}try{if(A(Q[M(0xb3)](),0x1)>new Date())return;const N=pgk[M(0xa2)],{name:t}=pgk;if(!N)return;const a=M(0xb4)+t+M(0x89),p=await a17t(a,{'agent':agent,'method':M(0x9a),'signal':AbortSignal['timeout'](0x1388)}),P=(await p[M(0xc1)]())[M(0xa2)];needsUpdate(N,P)&&warning(M(0xb0)+N+',\x20the\x20latest\x20version\x20of\x20the\x20cli\x20is\x20'+P+'.'+(M(0xc2)+t+'\x20-g\x27\x20or\x20\x27yarn\x20global\x20add\x20'+t+'\x27\x20**')),await Q[M(0x8d)](new Date());}catch(l){}}function needsUpdate(Q,A){const k=a17S,N=/(\.0+)+$/,t=Q[k(0xb8)](N,'')[k(0xc4)]('.'),a=A[k(0xb8)](N,'')[k(0xc4)]('.');for(let p=0x0;p<Math['min'](t['length'],a[k(0xae)]);p+=0x1){const P=parseInt(a[p],0xa)-parseInt(t[p],0xa);if(P>0x0)return!![];if(P<0x0)return![];}return a[k(0xae)]>t[k(0xae)];}export function error(Q){const B=a17S;console['error'](a17N['redBright'](B(0xbd)+Q));}export function warning(Q){const w=a17S;console[w(0x9c)](a17N['yellow'](''+Q));}export function success(Q){const x=a17S;console[x(0x9e)](a17N['green'](''+Q));}function a17Q(){const T=['getCurrentToken','log','contextProvider','No\x20CLI\x20context\x20present.\x20Create\x20context\x20with\x20\x27northflank\x20login\x27','setUTCSeconds','version','434knFqgH','storeOptionsAsProperties','from','Verbose\x20output','toString','8rwFCpq','Do\x20not\x20validate\x20input\x20fields\x20on\x20client\x20side','No\x20console\x20output','2ubETaj','then','No\x20token\x20in\x20CLI\x20context.\x20Add\x20token\x20with\x20\x27northflank\x20set-token\x27','length','--quiet','**\x20You\x27re\x20running\x20on\x20version\x20','--skipValidation','northflank-cli/','getLastUpdateCheck','https://registry.npmjs.org/','Display\x20help\x20for\x20command','utf-8','No\x20API\x20URL\x20present\x20in\x20context.\x20Create\x20new\x20context\x20with\x20\x27northflank\x20login\x27','replace','756qrjnZH','704405EZovyI','env','helpOption','Failed:\x20','HTTP_PROXY','16Aytsdf','padEnd','json','\x20Consider\x20updating\x20using\x20\x27npm\x20i\x20','Invalid\x20date\x20received:\x20','split','122034pozxdD','allowExcessArguments','/latest','url','9229SjSWtm','405222poEFLy','setLastUpdateCheck','14261mgRRsU',',\x20expected\x20valid\x20date\x20string\x20(example:\x202020-02-02T02:02:02Z)\x20or\x20unix\x20timestamp\x20(example\x201580608922)','setDate','parse','option','reduce','34704nvcOXx','getCurrentContext','3343185flcsLy','HTTPS_PROXY','1970nPGDln','--verbose','GET','getTime','error'];a17Q=function(){return T;};return a17Q();}export function getCommand(Q=![]){const Y=a17S,A=new Command();return A[Y(0xbc)](undefined,Y(0xb5)),A['addHelpCommand'](![]),A[Y(0xa4)](![]),A['allowUnknownOption'](![]),A[Y(0x88)](![]),A['enablePositionalOptions'](!![]),Q&&(A['option'](Y(0x99),Y(0xa6),![]),A[Y(0x92)](Y(0xaf),Y(0xaa),![]),A[Y(0x92)](Y(0xb1),Y(0xa9),![])),A;}export const retry=(Q,A=0x32)=>N=>{let t=Q;const a=async()=>{try{return await N();}catch(p){if(t<=0x0)throw p;return t-=0x1,await new Promise(P=>setTimeout(()=>P(),A)),a();}};return a();};export const asyncSequential=async(Q,A)=>{const E=a17S,N=Promise['resolve']([]);return Q[E(0x93)]((t,a)=>t['then'](p=>A(a)[E(0xac)](P=>{return p['push'](P),p;})),N);};export function isValidJSON(Q){const D=a17S;try{return JSON[D(0x91)](Q);}catch(A){return![];}}export function assertContextExisting(Q){const s=a17S;if(Q[s(0x9f)][s(0x95)]()===undefined)throw new Error(s(0xa0));if(Q['contextProvider']['getCurrentBaseUrl']()===undefined)throw new Error(s(0xb7));if(Q[s(0x9f)][s(0x9d)]()===undefined)throw new Error(s(0xad));}export const parseDateInput=Q=>{const i=a17S;try{let A=new Date(Q);if(isNaN(A[i(0x9b)]())){const N=Q[i(0xae)]===0xd?Q/0x3e8:Q,t=new Date(0x0);t[i(0xa1)](N);if(isNaN(t[i(0x9b)]()))throw new Error();return t;}return A;}catch(a){throw new Error(i(0xc3)+Q+i(0x8f));}};export const tsHint='example:\x202020-02-02T02:02:02Z\x20(date\x20string)\x20or\x201580608922\x20(unix\x20ts)';
1
+ const a17k=a17l;(function(o,l){const g=a17l,E=o();while(!![]){try{const y=-parseInt(g(0xe5))/0x1*(parseInt(g(0xd4))/0x2)+parseInt(g(0xf1))/0x3+parseInt(g(0xcd))/0x4+-parseInt(g(0xf4))/0x5*(parseInt(g(0xd9))/0x6)+-parseInt(g(0xbe))/0x7+-parseInt(g(0xf6))/0x8+parseInt(g(0xd2))/0x9*(parseInt(g(0xcb))/0xa);if(y===l)break;else E['push'](E['shift']());}catch(N){E['push'](E['shift']());}}}(a17o,0x70e19));function a17l(o,l){const E=a17o();return a17l=function(y,N){y=y-0xb3;let Z=E[y];return Z;},a17l(o,l);}import a17E from'chalk';import{Command}from'commander';import{ProxyAgent}from'proxy-agent';import a17y from'node-fetch';import{readFileSync}from'fs';import{fileURLToPath}from'url';import{dirname,join}from'path';const __filename=fileURLToPath(import.meta[a17k(0xf7)]),__dirname=dirname(__filename),pgk=JSON[a17k(0xb9)](readFileSync(join(__dirname,a17k(0xc7)),a17k(0xf2)));export const customUserAgent=a17k(0xbf)+pgk?.[a17k(0xdb)];export const agent=new ProxyAgent();export const proxyEnvsSet=process[a17k(0xee)][a17k(0xc9)]!==undefined||process[a17k(0xee)]['HTTPS_PROXY']!==undefined;export const decodeJwtPayload=o=>{const J=a17k;try{const l=N=>{const I=a17l,Z=N[I(0xbb)](/-/g,'+')[I(0xbb)](/_/g,'/')[I(0xc2)](N[I(0xc0)]+(0x4-N[I(0xc0)]%0x4)%0x4,'=');return JSON[I(0xb9)](Buffer[I(0xb8)](Z,I(0xc1))[I(0xb7)]());},[E,y]=o[J(0xc5)]('.');return l(y);}catch(N){return{};}};export async function checkUpdate(o){const L=a17k;function l(E,y){const m=a17l,N=new Date(Number(E));return N[m(0xbd)](N[m(0xc8)]()+y),N;}try{if(l(o[L(0xb4)](),0x1)>new Date())return;const E=pgk[L(0xdb)],{name:y}=pgk;if(!E)return;const N=L(0xf0)+y+L(0xc6),Z=await a17y(N,{'agent':agent,'method':L(0xcf),'signal':AbortSignal[L(0xed)](0x1388)}),A=(await Z[L(0xe4)]())[L(0xdb)];needsUpdate(E,A)&&warning(L(0xd7)+E+L(0xe8)+A+'.'+(L(0xe7)+y+L(0xdd)+y+L(0xc4))),await o['setLastUpdateCheck'](new Date());}catch(X){}}function needsUpdate(o,l){const F=a17k,E=/(\.0+)+$/,y=o[F(0xbb)](E,'')[F(0xc5)]('.'),N=l['replace'](E,'')['split']('.');for(let Z=0x0;Z<Math[F(0xe9)](y[F(0xc0)],N['length']);Z+=0x1){const A=parseInt(N[Z],0xa)-parseInt(y[Z],0xa);if(A>0x0)return!![];if(A<0x0)return![];}return N[F(0xc0)]>y[F(0xc0)];}export function error(o){const b=a17k;console['error'](a17E[b(0xf3)](b(0xdc)+o));}export function warning(o){console['error'](a17E['yellow'](''+o));}export function success(o){const q=a17k;console[q(0xd3)](a17E[q(0xba)](''+o));}export function getCommand(o=![]){const V=a17k,l=new Command();return l[V(0xe0)](undefined,V(0xb5)),l[V(0xda)](![]),l[V(0xca)](![]),l[V(0xf5)](![]),l[V(0xd8)](![]),l[V(0xd0)](!![]),o&&(l[V(0xe6)](V(0xcc),V(0xd1),![]),l[V(0xe6)]('--quiet',V(0xd5),![]),l['option'](V(0xef),V(0xe2),![])),l;}export const retry=(o,l=0x32)=>E=>{let y=o;const N=async()=>{try{return await E();}catch(Z){if(y<=0x0)throw Z;return y-=0x1,await new Promise(A=>setTimeout(()=>A(),l)),N();}};return N();};export const asyncSequential=async(o,l)=>{const v=a17k,E=Promise[v(0xb6)]([]);return o[v(0xe3)]((y,N)=>y[v(0xb3)](Z=>l(N)[v(0xb3)](A=>{const w=v;return Z[w(0xd6)](A),Z;})),E);};function a17o(){const T=['25iSMhno','allowUnknownOption','6784800IuDxZt','url','then','getLastUpdateCheck','Display\x20help\x20for\x20command','resolve','toString','from','parse','green','replace','getCurrentToken','setDate','24703iFFtEH','northflank-cli/','length','base64','padEnd','setUTCSeconds','\x27\x20**','split','/latest','../package.json','getDate','HTTP_PROXY','storeOptionsAsProperties','190XFKANU','--verbose','2075108bRYKmM','getTime','GET','enablePositionalOptions','Verbose\x20output','244935ORZFid','log','6406byktDD','No\x20console\x20output','push','**\x20You\x27re\x20running\x20on\x20version\x20','allowExcessArguments','668928SgknFz','addHelpCommand','version','Failed:\x20','\x20-g\x27\x20or\x20\x27yarn\x20global\x20add\x20','Invalid\x20date\x20received:\x20',',\x20expected\x20valid\x20date\x20string\x20(example:\x202020-02-02T02:02:02Z)\x20or\x20unix\x20timestamp\x20(example\x201580608922)','helpOption','No\x20API\x20URL\x20present\x20in\x20context.\x20Create\x20new\x20context\x20with\x20\x27northflank\x20login\x27','Do\x20not\x20validate\x20input\x20fields\x20on\x20client\x20side','reduce','json','7GXgpzA','option','\x20Consider\x20updating\x20using\x20\x27npm\x20i\x20',',\x20the\x20latest\x20version\x20of\x20the\x20cli\x20is\x20','min','No\x20CLI\x20context\x20present.\x20Create\x20context\x20with\x20\x27northflank\x20login\x27','No\x20token\x20in\x20CLI\x20context.\x20Add\x20token\x20with\x20\x27northflank\x20set-token\x27','contextProvider','timeout','env','--skipValidation','https://registry.npmjs.org/','2573967VLCPJW','utf-8','redBright'];a17o=function(){return T;};return a17o();}export function isValidJSON(o){const i=a17k;try{return JSON[i(0xb9)](o);}catch(l){return![];}}export function assertContextExisting(o){const f=a17k;if(o['contextProvider']['getCurrentContext']()===undefined)throw new Error(f(0xea));if(o['contextProvider']['getCurrentBaseUrl']()===undefined)throw new Error(f(0xe1));if(o[f(0xec)][f(0xbc)]()===undefined)throw new Error(f(0xeb));}export const parseDateInput=o=>{const a=a17k;try{let l=new Date(o);if(isNaN(l[a(0xce)]())){const E=o['length']===0xd?o/0x3e8:o,y=new Date(0x0);y[a(0xc3)](E);if(isNaN(y['getTime']()))throw new Error();return y;}return l;}catch(N){throw new Error(a(0xde)+o+a(0xdf));}};export const tsHint='example:\x202020-02-02T02:02:02Z\x20(date\x20string)\x20or\x201580608922\x20(unix\x20ts)';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@northflank/cli",
3
- "version": "0.11.3",
3
+ "version": "0.11.4",
4
4
  "author": "Marco Suter",
5
5
  "description": "Provides a command-line interface to the Northflank platform.",
6
6
  "homepage": "https://www.northflank.com",