@northflank/cli 0.8.0 → 0.8.3-beta.0

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.
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
41
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
42
+ return new (P || (P = Promise))(function (resolve, reject) {
43
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
44
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
45
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
46
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
47
+ });
48
+ };
49
+ var __generator = (this && this.__generator) || function (thisArg, body) {
50
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
51
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
52
+ function verb(n) { return function (v) { return step([n, v]); }; }
53
+ function step(op) {
54
+ if (f) throw new TypeError("Generator is already executing.");
55
+ while (_) try {
56
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
57
+ if (y = 0, t) op = [op[0] & 2, t.value];
58
+ switch (op[0]) {
59
+ case 0: case 1: t = op; break;
60
+ case 4: _.label++; return { value: op[1], done: false };
61
+ case 5: _.label++; y = op[1]; op = [0]; continue;
62
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
63
+ default:
64
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
65
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
66
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
67
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
68
+ if (t[2]) _.ops.pop();
69
+ _.trys.pop(); continue;
70
+ }
71
+ op = body.call(thisArg, _);
72
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
73
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
74
+ }
75
+ };
76
+ var __importDefault = (this && this.__importDefault) || function (mod) {
77
+ return (mod && mod.__esModule) ? mod : { "default": mod };
78
+ };
79
+ Object.defineProperty(exports, "__esModule", { value: true });
80
+ exports.NorthflankApiBrowserLogin = void 0;
81
+ /* eslint-disable no-unused-expressions */
82
+ var ws_1 = __importStar(require("ws"));
83
+ var open_1 = __importDefault(require("open"));
84
+ var events_1 = require("events");
85
+ var NorthflankApiBrowserLogin = /** @class */ (function (_super) {
86
+ __extends(NorthflankApiBrowserLogin, _super);
87
+ function NorthflankApiBrowserLogin(baseUrl, openBrowser) {
88
+ if (openBrowser === void 0) { openBrowser = true; }
89
+ var _this = _super.call(this) || this;
90
+ _this.baseUrl = baseUrl;
91
+ _this.openBrowser = openBrowser;
92
+ _this.status = 'idle';
93
+ _this.initPackage = function () { return JSON.stringify({ type: 'init' }); };
94
+ return _this;
95
+ }
96
+ NorthflankApiBrowserLogin.prototype.startLogin = function () {
97
+ var _this = this;
98
+ var _a;
99
+ // Protocol:
100
+ // 1. cli -> api : type: init
101
+ // - public api: creates entry in collection 'session-tokens'
102
+ // 2. api -> cli : type: init-ack, loginPage: https://app.northflank.com/login?type=cli&session_token=<rand-token>
103
+ // - cli opens webpage, user does login, platform adds session-token reference to token
104
+ // 3. api -> cli : type: login-success, token:<api token>
105
+ // 3. api -> cli : type: login-failure, message: timeout
106
+ var wsEndpoint = this.baseUrl.replace('https:', 'wss:').replace('http:', 'ws:');
107
+ var loginWsEndpoint = "".concat(wsEndpoint, "/v1/cli-login");
108
+ var ws = new ws_1.default(loginWsEndpoint);
109
+ var sigintListener = function () { return __awaiter(_this, void 0, void 0, function () {
110
+ var _this = this;
111
+ return __generator(this, function (_a) {
112
+ switch (_a.label) {
113
+ case 0: return [4 /*yield*/, new Promise(function (res) {
114
+ var _a;
115
+ (_a = _this.duplex) === null || _a === void 0 ? void 0 : _a.end(JSON.stringify({ type: 'aborted' }), function () { return res(); });
116
+ })];
117
+ case 1:
118
+ _a.sent();
119
+ process.exit();
120
+ return [2 /*return*/];
121
+ }
122
+ });
123
+ }); };
124
+ var loginFlow = new Promise(function (res, rej) {
125
+ var _a, _b, _c;
126
+ try {
127
+ _this.duplex = (0, ws_1.createWebSocketStream)(ws);
128
+ process.on('SIGINT', sigintListener);
129
+ }
130
+ catch (e) {
131
+ rej(new Error("Failed to establish connection to command execution proxy: ".concat(e.message)));
132
+ }
133
+ (_a = _this.duplex) === null || _a === void 0 ? void 0 : _a.on('data', function (chunk) {
134
+ var _a;
135
+ var dataObj = JSON.parse(chunk.toString());
136
+ switch (dataObj === null || dataObj === void 0 ? void 0 : dataObj.type) {
137
+ case 'init-ack': {
138
+ var loginPage = dataObj.loginPage;
139
+ if (loginPage === undefined) {
140
+ _this.handleError('Unexpected response', rej);
141
+ return;
142
+ }
143
+ if (_this.openBrowser) {
144
+ (0, open_1.default)(loginPage).catch(function (err) {
145
+ var errorMsg = "Unable to open browser: ".concat(err.message);
146
+ _this.handleError(errorMsg, rej);
147
+ });
148
+ }
149
+ _this.emit('browser-opened', { url: loginPage });
150
+ break;
151
+ }
152
+ case 'login-success': {
153
+ var apiToken = dataObj.apiToken;
154
+ if (apiToken === undefined) {
155
+ _this.handleError('Unexpected response, api token missing', rej);
156
+ return;
157
+ }
158
+ (_a = _this.duplex) === null || _a === void 0 ? void 0 : _a.end();
159
+ res({ token: apiToken });
160
+ _this.status = 'success';
161
+ break;
162
+ }
163
+ case 'login-failure': {
164
+ var errorMsg = "Failure during login: ".concat(dataObj === null || dataObj === void 0 ? void 0 : dataObj.message);
165
+ _this.handleError(errorMsg, rej);
166
+ break;
167
+ }
168
+ default: {
169
+ var errorMsg = "unable to parse message: ".concat(JSON.stringify(dataObj));
170
+ _this.handleError(errorMsg, rej);
171
+ }
172
+ }
173
+ });
174
+ (_b = _this.duplex) === null || _b === void 0 ? void 0 : _b.on('error', function (err) {
175
+ _this.handleError("error happened during browser login: ".concat(err.message), rej);
176
+ });
177
+ (_c = _this.duplex) === null || _c === void 0 ? void 0 : _c.on('end', function () {
178
+ if (_this.status === 'success') {
179
+ // should have already been handled after login-success packet
180
+ }
181
+ else {
182
+ _this.handleError("Login process stopped before completed", rej);
183
+ }
184
+ });
185
+ });
186
+ (_a = this.duplex) === null || _a === void 0 ? void 0 : _a.write(this.initPackage());
187
+ this.status = 'init';
188
+ return loginFlow.finally(function () {
189
+ process.removeListener('SIGINT', sigintListener);
190
+ });
191
+ };
192
+ NorthflankApiBrowserLogin.prototype.handleError = function (errorMsg, rej) {
193
+ var _a, _b;
194
+ if (rej) {
195
+ (_a = this.duplex) === null || _a === void 0 ? void 0 : _a.end(function () { return rej(new Error(errorMsg)); });
196
+ }
197
+ else {
198
+ (_b = this.duplex) === null || _b === void 0 ? void 0 : _b.end();
199
+ }
200
+ this.status = 'error';
201
+ };
202
+ return NorthflankApiBrowserLogin;
203
+ }(events_1.EventEmitter));
204
+ exports.NorthflankApiBrowserLogin = NorthflankApiBrowserLogin;
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (_) try {
33
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ var __importDefault = (this && this.__importDefault) || function (mod) {
54
+ return (mod && mod.__esModule) ? mod : { "default": mod };
55
+ };
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.DynamicReloadPaginationPrompt = void 0;
58
+ var list_1 = __importDefault(require("inquirer/lib/prompts/list"));
59
+ var choice_1 = __importDefault(require("inquirer/lib/objects/choice"));
60
+ var chalk_1 = __importDefault(require("chalk"));
61
+ function incrementListIndex(current, dir, opt) {
62
+ var len = opt.choices.realLength;
63
+ var shouldLoop = 'loop' in opt ? Boolean(opt.loop) : true;
64
+ if (dir === 'up') {
65
+ if (current > 0) {
66
+ return current - 1;
67
+ }
68
+ return shouldLoop ? len - 1 : current;
69
+ }
70
+ if (dir === 'down') {
71
+ if (current < len - 1) {
72
+ return current + 1;
73
+ }
74
+ return shouldLoop ? 0 : current;
75
+ }
76
+ throw new Error('dir must be up or down');
77
+ }
78
+ var DynamicReloadPaginationPrompt = /** @class */ (function (_super) {
79
+ __extends(DynamicReloadPaginationPrompt, _super);
80
+ function DynamicReloadPaginationPrompt(q, rl, a) {
81
+ var _this = _super.call(this, q, rl, a) || this;
82
+ _this.reloadText = chalk_1.default.italic('.. Load more options ..');
83
+ _this.loading = false;
84
+ _this.pagOpt = _this.opt;
85
+ _this.nextPageCursor = _this.pagOpt.nextPageCursor;
86
+ if (_this.nextPageCursor !== undefined) {
87
+ _this.opt.choices.push(new choice_1.default(_this.reloadText, _this.reloadText));
88
+ }
89
+ return _this;
90
+ }
91
+ DynamicReloadPaginationPrompt.prototype.onUpKey = function () {
92
+ if (this.loading)
93
+ return;
94
+ this.selected = incrementListIndex(this.selected, 'up', this.opt);
95
+ this.render();
96
+ };
97
+ DynamicReloadPaginationPrompt.prototype.onDownKey = function () {
98
+ return __awaiter(this, void 0, void 0, function () {
99
+ return __generator(this, function (_a) {
100
+ switch (_a.label) {
101
+ case 0:
102
+ if (this.loading)
103
+ return [2 /*return*/];
104
+ this.selected = incrementListIndex(this.selected, 'down', this.opt);
105
+ return [4 /*yield*/, this.handleDynamicPageLoad()];
106
+ case 1:
107
+ _a.sent();
108
+ this.render();
109
+ return [2 /*return*/];
110
+ }
111
+ });
112
+ });
113
+ };
114
+ DynamicReloadPaginationPrompt.prototype.handleDynamicPageLoad = function () {
115
+ return __awaiter(this, void 0, void 0, function () {
116
+ var i_1, interval, _a, elements, nextPageCursor, moreChoices;
117
+ var _b;
118
+ var _this = this;
119
+ return __generator(this, function (_c) {
120
+ switch (_c.label) {
121
+ case 0:
122
+ if (!(this.selected >= this.opt.choices.length - 1)) return [3 /*break*/, 2];
123
+ if (this.nextPageCursor === undefined)
124
+ return [2 /*return*/];
125
+ this.loading = true;
126
+ i_1 = 0;
127
+ interval = setInterval(function () {
128
+ var frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
129
+ var loadingNotice = chalk_1.default.italic("".concat(frames[i_1 % frames.length], " Loading more options"));
130
+ _this.opt.choices.choices[_this.selected].name = "".concat(loadingNotice);
131
+ i_1 += 1;
132
+ _this.render();
133
+ }, 80);
134
+ return [4 /*yield*/, this.pagOpt
135
+ .loadMore({ nextPageCursor: this.nextPageCursor })
136
+ .catch(function () { return ({ elements: [], nextPageCursor: undefined }); })];
137
+ case 1:
138
+ _a = _c.sent(), elements = _a.elements, nextPageCursor = _a.nextPageCursor;
139
+ this.nextPageCursor = nextPageCursor;
140
+ moreChoices = elements.map(function (e) { return new choice_1.default(e, e); });
141
+ this.opt.choices.choices.splice(this.selected, 1);
142
+ (_b = this.opt.choices).push.apply(_b, moreChoices);
143
+ if (nextPageCursor !== undefined) {
144
+ this.opt.choices.push(new choice_1.default(this.reloadText, this.reloadText));
145
+ }
146
+ clearInterval(interval);
147
+ this.loading = false;
148
+ _c.label = 2;
149
+ case 2: return [2 /*return*/];
150
+ }
151
+ });
152
+ });
153
+ };
154
+ return DynamicReloadPaginationPrompt;
155
+ }(list_1.default));
156
+ exports.DynamicReloadPaginationPrompt = DynamicReloadPaginationPrompt;
@@ -1 +1,271 @@
1
- 'use strict';var a8J=['forwardAddon','Port-forwarding\x20for\x20all\x20services\x20and\x20addons\x20in\x20the\x20given\x20project','2uHyLiu','error','Port-forwarding\x20for\x20Northflank\x20services\x20and\x20addons.','\x20service\x20ports','\x20addon\x20ports','forwardService','address','throw','getCommand','done','bold','75TeDAfV','Port-forwarding\x20for\x20the\x20specified\x20service','Forwarding\x20service\x20','canExecuteWithHostnames','portFwdCmd','service','--project\x20--projectId\x20[NAME]','getCurrentProjectName','exit','ops','addon','prototype','forwardProject','value','\x27:\x20\x22','forwarding','Service\x20to\x20forward','all','askForAddon','getCurrentServiceName','askForProject','tunnel-close','ApiClient','description','project\x20for\x20forwarding','209086mvpPug','return','Exposing\x20','18582rXdmeY','function','getProxyForwarder','SIGINT','projectId','chalk','\x20to\x20','5kLHNKZ','push','label','addons','services','Forwarding\x20addon\x20','sent','alias','port','\x20and\x20','action','--service\x20--serviceId\x20[NAME]','success','apiClient','--noDefaults','1ZgFdSK','forEach','hostnames','addCommand','No\x20services\x20and\x20addons\x20to\x20forward\x20found\x20in\x20project\x20','Cleaning\x20up\x20open\x20connections\x20failed:\x20','\x20for\x20these\x20hostnames:','length','Project\x20for\x20forwarding','connection-error','Forwarding\x20','--addon\x20--addonId\x20[NAME]','\x20in\x20project\x20','slice','25rrfcUS','186242nySYjP','__esModule','concat','default','__awaiter','warning','Addon\x20to\x20forward','171092ugvHvK','iterator','CliPortForward','21851OlMbDV','defineProperty','@northflank/js-client','customUserAgent','InquirerHelper','17CCZces','Always\x20ask\x20for\x20project','noDefaults','green','message',')\x20with\x20these\x20hostnames:','trys','assertContextExisting','pop','\x20on\x20','greenBright','log','438yllFut','next','addonId','../utils','1181XdwzFn','stop','then','name','call','protocol','option','Failed:\x20','type'];function a8o(J,o){J=J-0x1d5;var T=a8J[J];return T;}var a8l=a8o;(function(J,o){var K=a8o;while(!![]){try{var T=-parseInt(K(0x209))*-parseInt(K(0x210))+-parseInt(K(0x1ed))*-parseInt(K(0x1d7))+-parseInt(K(0x22d))*parseInt(K(0x249))+-parseInt(K(0x22e))+-parseInt(K(0x238))*-parseInt(K(0x23d))+parseInt(K(0x21f))*parseInt(K(0x206))+parseInt(K(0x235))*-parseInt(K(0x1e2));if(T===o)break;else J['push'](J['shift']());}catch(n){J['push'](J['shift']());}}}(a8J,0x365c6));var __awaiter=this&&this[a8l(0x232)]||function(J,o,T,n){function k(v){return v instanceof T?v:new T(function(c){c(v);});}return new(T||(T=Promise))(function(v,c){var p=a8o;function B(s){var F=a8o;try{G(n[F(0x24a)](s));}catch(Y){c(Y);}}function L(s){var R=a8o;try{G(n[R(0x1e9)](s));}catch(Y){c(Y);}}function G(s){var b=a8o;s[b(0x1eb)]?v(s[b(0x1fa)]):k(s[b(0x1fa)])[b(0x1d9)](B,L);}G((n=n['apply'](J,o||[]))[p(0x24a)]());});},__generator=this&&this['__generator']||function(J,o){var i=a8l,T={'label':0x0,'sent':function(){if(v[0x0]&0x1)throw v[0x1];return v[0x1];},'trys':[],'ops':[]},n,k,v,c;return c={'next':B(0x0),'throw':B(0x1),'return':B(0x2)},typeof Symbol===i(0x20a)&&(c[Symbol[i(0x236)]]=function(){return this;}),c;function B(G){return function(s){return L([G,s]);};}function L(G){var w=i;if(n)throw new TypeError('Generator\x20is\x20already\x20executing.');while(T)try{if(n=0x1,k&&(v=G[0x0]&0x2?k['return']:G[0x0]?k[w(0x1e9)]||((v=k[w(0x207)])&&v[w(0x1db)](k),0x0):k[w(0x24a)])&&!(v=v[w(0x1db)](k,G[0x1]))[w(0x1eb)])return v;if(k=0x0,v)G=[G[0x0]&0x2,v[w(0x1fa)]];switch(G[0x0]){case 0x0:case 0x1:v=G;break;case 0x4:T[w(0x212)]++;return{'value':G[0x1],'done':![]};case 0x5:T['label']++,k=G[0x1],G=[0x0];continue;case 0x7:G=T[w(0x1f6)]['pop'](),T[w(0x243)]['pop']();continue;default:if(!(v=T[w(0x243)],v=v[w(0x226)]>0x0&&v[v['length']-0x1])&&(G[0x0]===0x6||G[0x0]===0x2)){T=0x0;continue;}if(G[0x0]===0x3&&(!v||G[0x1]>v[0x0]&&G[0x1]<v[0x3])){T[w(0x212)]=G[0x1];break;}if(G[0x0]===0x6&&T['label']<v[0x1]){T['label']=v[0x1],v=G;break;}if(v&&T[w(0x212)]<v[0x2]){T['label']=v[0x2],T[w(0x1f6)][w(0x211)](G);break;}if(v[0x2])T[w(0x1f6)]['pop']();T[w(0x243)][w(0x245)]();continue;}G=o[w(0x1db)](J,T);}catch(s){G=[0x6,s],k=0x0;}finally{n=v=0x0;}if(G[0x0]&0x5)throw G[0x1];return{'value':G[0x0]?G[0x1]:void 0x0,'done':!![]};}},__spreadArray=this&&this['__spreadArray']||function(J,o,T){var I=a8l;if(T||arguments[I(0x226)]===0x2)for(var n=0x0,k=o['length'],v;n<k;n++){if(v||!(n in o)){if(!v)v=Array['prototype']['slice'][I(0x1db)](o,0x0,n);v[n]=o[n];}}return J[I(0x230)](v||Array[I(0x1f8)][I(0x22c)]['call'](o));},__importDefault=this&&this['__importDefault']||function(J){var u=a8l;return J&&J[u(0x22f)]?J:{'default':J};};Object[a8l(0x239)](exports,'__esModule',{'value':!![]}),exports['CliPortForward']=void 0x0;var js_client_1=require(a8l(0x23a)),chalk_1=__importDefault(require(a8l(0x20e))),utils_1=require(a8l(0x1d6)),inquirer_helper_1=require('../inquirer-helper'),CliPortForward=function(){var t=a8l;function J(o){var Z=a8o,T=this;this[Z(0x21d)]=new js_client_1[(Z(0x203))](o,{'throwErrorOnHttpErrorCode':!![],'customUserAgent':utils_1[Z(0x23b)]});var n=new inquirer_helper_1[(Z(0x23c))](this[Z(0x21d)]);this['portFwdCmd']=(0x0,utils_1['getCommand'])()[Z(0x1da)]('forward')[Z(0x217)]('fwd')[Z(0x204)](Z(0x1e4));var k=(0x0,utils_1[Z(0x1ea)])(!![])[Z(0x1da)](Z(0x1fe))['description'](Z(0x1e1))['option']('--project\x20--projectId\x20[NAME]',Z(0x205))['option'](Z(0x21e),Z(0x23e),![])[Z(0x21a)](function(B){var N=Z,L=B[N(0x23f)],G=B[N(0x20d)];return __awaiter(T,void 0x0,void 0x0,function(){var s,Y,P,g,f,C,E,M;return __generator(this,function(O){var S=a8o;switch(O[S(0x212)]){case 0x0:(0x0,utils_1[S(0x244)])(this[S(0x21d)]),s=this[S(0x20b)](),Y=L?undefined:o[S(0x1f4)](),g=G||Y;if(g)return[0x3,0x2];return[0x4,n[S(0x201)]()];case 0x1:g=O[S(0x216)](),O[S(0x212)]=0x2;case 0x2:P=g,O['label']=0x3;case 0x3:O[S(0x243)][S(0x211)]([0x3,0x8,,0x9]);return[0x4,s[S(0x1f9)]({'projectId':P},![])];case 0x4:f=O['sent'](),C=f[S(0x214)],E=f[S(0x213)];if(!(C[S(0x226)]+E[S(0x226)]<=0x0))return[0x3,0x5];(0x0,utils_1[S(0x233)])(S(0x223)[S(0x230)](chalk_1[S(0x231)]['bold'](P)));return[0x3,0x7];case 0x5:console[S(0x248)](S(0x229)[S(0x230)](chalk_1[S(0x231)]['green'][S(0x1ec)](''['concat'](C['length'],S(0x1e5))),S(0x219))[S(0x230)](chalk_1[S(0x231)][S(0x240)]['bold'](''[S(0x230)](E[S(0x226)],S(0x1e6))),S(0x22b))[S(0x230)](chalk_1['default']['bold'](P)));return[0x4,Promise[S(0x1fe)](__spreadArray(__spreadArray([],C,!![]),E,!![]))];case 0x6:O['sent'](),O[S(0x212)]=0x7;case 0x7:return[0x3,0x9];case 0x8:M=O[S(0x216)](),(0x0,utils_1[S(0x1e3)])(S(0x1de)[S(0x230)](M[S(0x241)]));return[0x3,0x9];case 0x9:return[0x2];}});});}),v=(0x0,utils_1[Z(0x1ea)])(!![])[Z(0x1da)](Z(0x1f2))[Z(0x204)](Z(0x1ee))[Z(0x1dd)](Z(0x1f3),Z(0x227))[Z(0x1dd)](Z(0x21b),Z(0x1fd))['option'](Z(0x21e),Z(0x23e),![])[Z(0x21a)](function(B){var D=Z,L=B['noDefaults'],G=B[D(0x20d)],s=B['serviceId'];return __awaiter(T,void 0x0,void 0x0,function(){var Y,P,g,f,C,E,M,O;return __generator(this,function(W){var H=a8o;switch(W['label']){case 0x0:(0x0,utils_1[H(0x244)])(this['apiClient']),Y=this['getProxyForwarder'](),P=L?undefined:o[H(0x1f4)](),f=G||P;if(f)return[0x3,0x2];return[0x4,n[H(0x201)]()];case 0x1:f=W['sent'](),W[H(0x212)]=0x2;case 0x2:g=f,C=L?undefined:o[H(0x200)](),M=s||C;if(M)return[0x3,0x4];return[0x4,n['askForService'](g)()];case 0x3:M=W[H(0x216)](),W['label']=0x4;case 0x4:E=M,console[H(0x248)](H(0x1ef)['concat'](chalk_1[H(0x231)]['bold'](E),H(0x22b))['concat'](chalk_1['default'][H(0x1ec)](g))),W[H(0x212)]=0x5;case 0x5:W[H(0x243)][H(0x211)]([0x5,0x7,,0x8]);return[0x4,Y[H(0x1e7)]({'projectId':g,'serviceId':E},![])];case 0x6:W[H(0x216)]();return[0x3,0x8];case 0x7:O=W['sent'](),(0x0,utils_1['error'])(H(0x1de)[H(0x230)](O[H(0x241)]));return[0x3,0x8];case 0x8:return[0x2];}});});}),c=(0x0,utils_1['getCommand'])(!![])[Z(0x1da)](Z(0x1f7))[Z(0x204)]('Port-forwarding\x20for\x20the\x20specified\x20addon')[Z(0x1dd)](Z(0x1f3),Z(0x227))[Z(0x1dd)](Z(0x22a),Z(0x234))[Z(0x1dd)](Z(0x21e),'Always\x20ask\x20for\x20project',![])[Z(0x21a)](function(B){var y=Z,L=B[y(0x20d)],G=B[y(0x1d5)],s=B['noDefaults'];return __awaiter(T,void 0x0,void 0x0,function(){var Y,P,g,f,C,E,M;return __generator(this,function(O){var h=a8o;switch(O['label']){case 0x0:(0x0,utils_1['assertContextExisting'])(this['apiClient']),Y=s?undefined:o[h(0x1f4)](),g=L||Y;if(g)return[0x3,0x2];return[0x4,n[h(0x201)]()];case 0x1:g=O[h(0x216)](),O[h(0x212)]=0x2;case 0x2:P=g,C=G;if(C)return[0x3,0x4];return[0x4,n[h(0x1ff)](P)()];case 0x3:C=O[h(0x216)](),O[h(0x212)]=0x4;case 0x4:f=C,console[h(0x248)](h(0x215)[h(0x230)](chalk_1[h(0x231)][h(0x1ec)](f),'\x20in\x20project\x20')[h(0x230)](chalk_1['default']['bold'](P))),E=this['getProxyForwarder'](),O[h(0x212)]=0x5;case 0x5:O[h(0x243)]['push']([0x5,0x7,,0x8]);return[0x4,E[h(0x1e0)]({'projectId':P,'addonId':f},![])];case 0x6:O[h(0x216)]();return[0x3,0x8];case 0x7:M=O['sent'](),(0x0,utils_1[h(0x1e3)])(h(0x1de)['concat'](M['message']));return[0x3,0x8];case 0x8:return[0x2];}});});});this[Z(0x1f1)][Z(0x222)](k),this[Z(0x1f1)][Z(0x222)](v),this[Z(0x1f1)][Z(0x222)](c);}return J[t(0x1f8)][t(0x20b)]=function(){var x=t,o=this,T=this[x(0x21d)][x(0x1fc)],n=T[x(0x1f0)]();if(n[x(0x1e3)])throw new Error(n[x(0x241)]);return T['on']('tunnel-open',function(k,v){var V=x,c=chalk_1[V(0x231)][V(0x247)]['bold'](''[V(0x230)](v['type'],'\x20\x27')[V(0x230)](v['id'],'\x27'));(0x0,utils_1[V(0x21c)])(V(0x208)[V(0x230)](c,V(0x246))[V(0x230)](v[V(0x1e8)],':')[V(0x230)](v[V(0x218)],'\x20(')[V(0x230)](v[V(0x1dc)],V(0x242))),v['hostnames'][V(0x220)](function(B){var d=V;(0x0,utils_1['success'])('\x20\x20'[d(0x230)](B,':')['concat'](v[d(0x218)]));}),(0x0,utils_1[V(0x21c)])('');}),T['on'](x(0x202),function(k,v){var j=x,c=chalk_1['default'][j(0x247)][j(0x1ec)](''[j(0x230)](v[j(0x1df)],'\x20\x27')[j(0x230)](v['id'],'\x27'));(0x0,utils_1[j(0x233)])('Stop\x20forwarding\x20traffic\x20from\x20'[j(0x230)](v[j(0x1e8)],':')['concat'](v[j(0x218)],j(0x20f))[j(0x230)](c,j(0x225))),v[j(0x221)][j(0x220)](function(B){var U=j;(0x0,utils_1['warning'])('\x20\x20'[U(0x230)](B,':')[U(0x230)](v['port']));}),(0x0,utils_1[j(0x233)])('');}),T['on'](x(0x228),function(k,v,c){var e=x;(0x0,utils_1['warning'])('Connection\x20error\x20occurred\x20when\x20forwarding\x20\x27'['concat'](v[e(0x1e8)],':')[e(0x230)](v[e(0x218)],e(0x1fb))['concat'](c===null||c===void 0x0?void 0x0:c['message'],'\x22'));}),process['on'](x(0x20c),function(){return __awaiter(o,void 0x0,void 0x0,function(){var k;return __generator(this,function(v){var Q=a8o;switch(v[Q(0x212)]){case 0x0:v[Q(0x243)][Q(0x211)]([0x0,0x2,0x3,0x4]);return[0x4,T[Q(0x1d8)]()];case 0x1:v[Q(0x216)]();return[0x3,0x4];case 0x2:k=v[Q(0x216)](),(0x0,utils_1[Q(0x1e3)])(Q(0x224)['concat'](k[Q(0x241)]));return[0x3,0x4];case 0x3:process[Q(0x1f5)]();return[0x7];case 0x4:return[0x2];}});});}),T;},J;}();exports[a8l(0x237)]=CliPortForward;
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
39
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
40
+ if (ar || !(i in from)) {
41
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
42
+ ar[i] = from[i];
43
+ }
44
+ }
45
+ return to.concat(ar || Array.prototype.slice.call(from));
46
+ };
47
+ var __importDefault = (this && this.__importDefault) || function (mod) {
48
+ return (mod && mod.__esModule) ? mod : { "default": mod };
49
+ };
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.CliPortForward = void 0;
52
+ var js_client_1 = require("@northflank/js-client");
53
+ var chalk_1 = __importDefault(require("chalk"));
54
+ var utils_1 = require("../utils");
55
+ var inquirer_helper_1 = require("../inquirer-helper");
56
+ var CliPortForward = /** @class */ (function () {
57
+ function CliPortForward(apiContext) {
58
+ var _this = this;
59
+ this.noDefaultsText = "Don't use context default values, explicitly use options or ask.";
60
+ this.apiClient = new js_client_1.ApiClient(apiContext, {
61
+ throwErrorOnHttpErrorCode: true,
62
+ customUserAgent: utils_1.customUserAgent,
63
+ });
64
+ var inquirerHelper = new inquirer_helper_1.InquirerHelper(this.apiClient);
65
+ this.portFwdCmd = (0, utils_1.getCommand)()
66
+ .name('forward')
67
+ .alias('fwd')
68
+ .description('Port-forwarding for Northflank services and addons.');
69
+ var projectPortFwdCmd = (0, utils_1.getCommand)(true)
70
+ .name('all')
71
+ .description('Port-forwarding for all services and addons in the given project')
72
+ .option('--project --projectId [NAME]', 'project for forwarding')
73
+ .option('--noDefaults', this.noDefaultsText, false)
74
+ .action(function (_a) {
75
+ var noDefaults = _a.noDefaults, projectId = _a.projectId;
76
+ return __awaiter(_this, void 0, void 0, function () {
77
+ var fwd, projectFromContext, project, _b, _c, services, addons, e_1;
78
+ return __generator(this, function (_d) {
79
+ switch (_d.label) {
80
+ case 0:
81
+ (0, utils_1.assertContextExisting)(this.apiClient);
82
+ fwd = this.getProxyForwarder();
83
+ projectFromContext = noDefaults ? undefined : apiContext.getCurrentProjectName();
84
+ _b = projectId || projectFromContext;
85
+ if (_b) return [3 /*break*/, 2];
86
+ return [4 /*yield*/, inquirerHelper.askForProject()];
87
+ case 1:
88
+ _b = (_d.sent());
89
+ _d.label = 2;
90
+ case 2:
91
+ project = _b;
92
+ _d.label = 3;
93
+ case 3:
94
+ _d.trys.push([3, 8, , 9]);
95
+ return [4 /*yield*/, fwd.forwardProject({ projectId: project }, false)];
96
+ case 4:
97
+ _c = _d.sent(), services = _c.services, addons = _c.addons;
98
+ if (!(services.length + addons.length <= 0)) return [3 /*break*/, 5];
99
+ (0, utils_1.warning)("No services and addons to forward found in project ".concat(chalk_1.default.bold(project)));
100
+ return [3 /*break*/, 7];
101
+ case 5:
102
+ console.log("Forwarding ".concat(chalk_1.default.green.bold("".concat(services.length, " service ports")), " and ").concat(chalk_1.default.green.bold("".concat(addons.length, " addon ports")), " in project ").concat(chalk_1.default.bold(project)));
103
+ return [4 /*yield*/, Promise.all(__spreadArray(__spreadArray([], services, true), addons, true))];
104
+ case 6:
105
+ _d.sent();
106
+ _d.label = 7;
107
+ case 7: return [3 /*break*/, 9];
108
+ case 8:
109
+ e_1 = _d.sent();
110
+ (0, utils_1.error)("Failed: ".concat(e_1.message));
111
+ return [3 /*break*/, 9];
112
+ case 9: return [2 /*return*/];
113
+ }
114
+ });
115
+ });
116
+ });
117
+ var servicePortFwdCmd = (0, utils_1.getCommand)(true)
118
+ .name('service')
119
+ .description('Port-forwarding for the specified service')
120
+ .option('--project --projectId [NAME]', 'Project for forwarding')
121
+ .option('--service --serviceId [NAME]', 'Service to forward')
122
+ .option('--noDefaults', this.noDefaultsText, false)
123
+ .action(function (_a) {
124
+ var noDefaults = _a.noDefaults, projectId = _a.projectId, serviceId = _a.serviceId;
125
+ return __awaiter(_this, void 0, void 0, function () {
126
+ var fwd, projectFromContext, project, _b, serviceFromContext, service, _c, e_2;
127
+ return __generator(this, function (_d) {
128
+ switch (_d.label) {
129
+ case 0:
130
+ (0, utils_1.assertContextExisting)(this.apiClient);
131
+ fwd = this.getProxyForwarder();
132
+ projectFromContext = noDefaults ? undefined : apiContext.getCurrentProjectName();
133
+ _b = projectId || projectFromContext;
134
+ if (_b) return [3 /*break*/, 2];
135
+ return [4 /*yield*/, inquirerHelper.askForProject()];
136
+ case 1:
137
+ _b = (_d.sent());
138
+ _d.label = 2;
139
+ case 2:
140
+ project = _b;
141
+ serviceFromContext = noDefaults ? undefined : apiContext.getCurrentServiceName();
142
+ _c = serviceId || serviceFromContext;
143
+ if (_c) return [3 /*break*/, 4];
144
+ return [4 /*yield*/, inquirerHelper.askForService(project)()];
145
+ case 3:
146
+ _c = (_d.sent());
147
+ _d.label = 4;
148
+ case 4:
149
+ service = _c;
150
+ console.log("Forwarding service ".concat(chalk_1.default.bold(service), " in project ").concat(chalk_1.default.bold(project)));
151
+ _d.label = 5;
152
+ case 5:
153
+ _d.trys.push([5, 7, , 8]);
154
+ return [4 /*yield*/, fwd.forwardService({ projectId: project, serviceId: service }, false)];
155
+ case 6:
156
+ _d.sent();
157
+ return [3 /*break*/, 8];
158
+ case 7:
159
+ e_2 = _d.sent();
160
+ (0, utils_1.error)("Failed: ".concat(e_2.message));
161
+ return [3 /*break*/, 8];
162
+ case 8: return [2 /*return*/];
163
+ }
164
+ });
165
+ });
166
+ });
167
+ var addonPortFwdCmd = (0, utils_1.getCommand)(true)
168
+ .name('addon')
169
+ .description('Port-forwarding for the specified addon')
170
+ .option('--project --projectId [NAME]', 'Project for forwarding')
171
+ .option('--addon --addonId [NAME]', 'Addon to forward')
172
+ .option('--noDefaults', this.noDefaultsText, false)
173
+ .action(function (_a) {
174
+ var projectId = _a.projectId, addonId = _a.addonId, noDefaults = _a.noDefaults;
175
+ return __awaiter(_this, void 0, void 0, function () {
176
+ var projectFromContext, project, _b, addon, _c, fwd, e_3;
177
+ return __generator(this, function (_d) {
178
+ switch (_d.label) {
179
+ case 0:
180
+ (0, utils_1.assertContextExisting)(this.apiClient);
181
+ projectFromContext = noDefaults ? undefined : apiContext.getCurrentProjectName();
182
+ _b = projectId || projectFromContext;
183
+ if (_b) return [3 /*break*/, 2];
184
+ return [4 /*yield*/, inquirerHelper.askForProject()];
185
+ case 1:
186
+ _b = (_d.sent());
187
+ _d.label = 2;
188
+ case 2:
189
+ project = _b;
190
+ _c = addonId;
191
+ if (_c) return [3 /*break*/, 4];
192
+ return [4 /*yield*/, inquirerHelper.askForAddon(project)()];
193
+ case 3:
194
+ _c = (_d.sent());
195
+ _d.label = 4;
196
+ case 4:
197
+ addon = _c;
198
+ console.log("Forwarding addon ".concat(chalk_1.default.bold(addon), " in project ").concat(chalk_1.default.bold(project)));
199
+ fwd = this.getProxyForwarder();
200
+ _d.label = 5;
201
+ case 5:
202
+ _d.trys.push([5, 7, , 8]);
203
+ return [4 /*yield*/, fwd.forwardAddon({ projectId: project, addonId: addon }, false)];
204
+ case 6:
205
+ _d.sent();
206
+ return [3 /*break*/, 8];
207
+ case 7:
208
+ e_3 = _d.sent();
209
+ (0, utils_1.error)("Failed: ".concat(e_3.message));
210
+ return [3 /*break*/, 8];
211
+ case 8: return [2 /*return*/];
212
+ }
213
+ });
214
+ });
215
+ });
216
+ this.portFwdCmd.addCommand(projectPortFwdCmd);
217
+ this.portFwdCmd.addCommand(servicePortFwdCmd);
218
+ this.portFwdCmd.addCommand(addonPortFwdCmd);
219
+ }
220
+ CliPortForward.prototype.getProxyForwarder = function () {
221
+ var _this = this;
222
+ var fwd = this.apiClient.forwarding;
223
+ var isAdmin = fwd.canExecuteWithHostnames();
224
+ if (isAdmin.error)
225
+ throw new Error(isAdmin.message);
226
+ fwd.on('tunnel-open', function (_tunnel, data) {
227
+ var identifier = chalk_1.default.greenBright.bold("".concat(data.type, " '").concat(data.id, "'"));
228
+ var prefix = data.protocol === 'HTTP' ? 'http://' : '';
229
+ (0, utils_1.success)("Exposing ".concat(identifier, " on ").concat(data.address, ":").concat(data.port, " (").concat(data.protocol, ") with these hostnames:"));
230
+ data.hostnames.forEach(function (hostname) {
231
+ (0, utils_1.success)(" ".concat(prefix).concat(hostname, ":").concat(data.port));
232
+ });
233
+ (0, utils_1.success)('');
234
+ });
235
+ fwd.on('tunnel-close', function (_tunnel, data) {
236
+ var identifier = chalk_1.default.greenBright.bold("".concat(data.type, " '").concat(data.id, "'"));
237
+ (0, utils_1.warning)("Stop forwarding traffic from ".concat(data.address, ":").concat(data.port, " to ").concat(identifier, " for these hostnames:"));
238
+ data.hostnames.forEach(function (hostname) {
239
+ (0, utils_1.warning)(" ".concat(hostname, ":").concat(data.port));
240
+ });
241
+ (0, utils_1.warning)('');
242
+ });
243
+ fwd.on('connection-error', function (_tunnel, info, err) {
244
+ (0, utils_1.warning)("Connection error occurred when forwarding '".concat(info.address, ":").concat(info.port, "': \"").concat(err === null || err === void 0 ? void 0 : err.message, "\""));
245
+ });
246
+ process.on('SIGINT', function () { return __awaiter(_this, void 0, void 0, function () {
247
+ var e_4;
248
+ return __generator(this, function (_a) {
249
+ switch (_a.label) {
250
+ case 0:
251
+ _a.trys.push([0, 2, 3, 4]);
252
+ return [4 /*yield*/, fwd.stop()];
253
+ case 1:
254
+ _a.sent();
255
+ return [3 /*break*/, 4];
256
+ case 2:
257
+ e_4 = _a.sent();
258
+ (0, utils_1.error)("Cleaning up open connections failed: ".concat(e_4.message));
259
+ return [3 /*break*/, 4];
260
+ case 3:
261
+ process.exit();
262
+ return [7 /*endfinally*/];
263
+ case 4: return [2 /*return*/];
264
+ }
265
+ });
266
+ }); });
267
+ return fwd;
268
+ };
269
+ return CliPortForward;
270
+ }());
271
+ exports.CliPortForward = CliPortForward;