@northflank/js-client 0.4.0 → 0.5.1

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.
Files changed (258) hide show
  1. package/README.md +6 -6
  2. package/dist/cjs/api-client.d.ts +5819 -0
  3. package/dist/cjs/api-client.js +1 -0
  4. package/dist/cjs/package.json +3 -0
  5. package/dist/esm/api-client.d.ts +5819 -0
  6. package/dist/esm/api-client.js +15 -0
  7. package/dist/esm/package.json +3 -0
  8. package/package.json +12 -19
  9. package/dist/api-client.d.ts +0 -481
  10. package/dist/api-client.js +0 -748
  11. package/dist/api-endpoint.d.ts +0 -63
  12. package/dist/api-endpoint.js +0 -216
  13. package/dist/context/api-client-context-provider.d.ts +0 -47
  14. package/dist/context/api-client-context-provider.js +0 -336
  15. package/dist/context/api-client-file-context-provider.d.ts +0 -11
  16. package/dist/context/api-client-file-context-provider.js +0 -138
  17. package/dist/context/api-client-in-memory-context-provider.d.ts +0 -6
  18. package/dist/context/api-client-in-memory-context-provider.js +0 -82
  19. package/dist/context/index.d.ts +0 -3
  20. package/dist/context/index.js +0 -15
  21. package/dist/endpoints/abort/addon/backup.d.ts +0 -21
  22. package/dist/endpoints/abort/addon/backup.js +0 -36
  23. package/dist/endpoints/abort/addon/restore.d.ts +0 -26
  24. package/dist/endpoints/abort/addon/restore.js +0 -36
  25. package/dist/endpoints/abort/job/build.d.ts +0 -21
  26. package/dist/endpoints/abort/job/build.js +0 -36
  27. package/dist/endpoints/abort/job/run.d.ts +0 -21
  28. package/dist/endpoints/abort/job/run.js +0 -36
  29. package/dist/endpoints/abort/service/build.d.ts +0 -21
  30. package/dist/endpoints/abort/service/build.js +0 -36
  31. package/dist/endpoints/add/domain/subdomain.d.ts +0 -33
  32. package/dist/endpoints/add/domain/subdomain.js +0 -36
  33. package/dist/endpoints/add/registryCredentials.d.ts +0 -47
  34. package/dist/endpoints/add/registryCredentials.js +0 -36
  35. package/dist/endpoints/assign/subdomain/service.d.ts +0 -28
  36. package/dist/endpoints/assign/subdomain/service.js +0 -36
  37. package/dist/endpoints/backup/addon.d.ts +0 -24
  38. package/dist/endpoints/backup/addon.js +0 -36
  39. package/dist/endpoints/create/addon.d.ts +0 -90
  40. package/dist/endpoints/create/addon.js +0 -36
  41. package/dist/endpoints/create/domain.d.ts +0 -27
  42. package/dist/endpoints/create/domain.js +0 -36
  43. package/dist/endpoints/create/job/cron.d.ts +0 -157
  44. package/dist/endpoints/create/job/cron.js +0 -36
  45. package/dist/endpoints/create/job/manual.d.ts +0 -147
  46. package/dist/endpoints/create/job/manual.js +0 -36
  47. package/dist/endpoints/create/project.d.ts +0 -29
  48. package/dist/endpoints/create/project.js +0 -36
  49. package/dist/endpoints/create/secret.d.ts +0 -79
  50. package/dist/endpoints/create/secret.js +0 -36
  51. package/dist/endpoints/create/service/build.d.ts +0 -114
  52. package/dist/endpoints/create/service/build.js +0 -36
  53. package/dist/endpoints/create/service/combined.d.ts +0 -166
  54. package/dist/endpoints/create/service/combined.js +0 -36
  55. package/dist/endpoints/create/service/deployment.d.ts +0 -137
  56. package/dist/endpoints/create/service/deployment.js +0 -36
  57. package/dist/endpoints/delete/addon.d.ts +0 -19
  58. package/dist/endpoints/delete/addon.js +0 -36
  59. package/dist/endpoints/delete/backup.d.ts +0 -21
  60. package/dist/endpoints/delete/backup.js +0 -36
  61. package/dist/endpoints/delete/domain.d.ts +0 -17
  62. package/dist/endpoints/delete/domain.js +0 -36
  63. package/dist/endpoints/delete/job.d.ts +0 -19
  64. package/dist/endpoints/delete/job.js +0 -36
  65. package/dist/endpoints/delete/project.d.ts +0 -17
  66. package/dist/endpoints/delete/project.js +0 -36
  67. package/dist/endpoints/delete/registryCredentials.d.ts +0 -17
  68. package/dist/endpoints/delete/registryCredentials.js +0 -36
  69. package/dist/endpoints/delete/secret.d.ts +0 -19
  70. package/dist/endpoints/delete/secret.js +0 -36
  71. package/dist/endpoints/delete/secretLink.d.ts +0 -21
  72. package/dist/endpoints/delete/secretLink.js +0 -36
  73. package/dist/endpoints/delete/service.d.ts +0 -19
  74. package/dist/endpoints/delete/service.js +0 -36
  75. package/dist/endpoints/delete/subdomain.d.ts +0 -19
  76. package/dist/endpoints/delete/subdomain.js +0 -36
  77. package/dist/endpoints/get/addon/backup/download.d.ts +0 -24
  78. package/dist/endpoints/get/addon/backup/download.js +0 -36
  79. package/dist/endpoints/get/addon/backup.d.ts +0 -39
  80. package/dist/endpoints/get/addon/backup.js +0 -36
  81. package/dist/endpoints/get/addon/backups.d.ts +0 -47
  82. package/dist/endpoints/get/addon/backups.js +0 -40
  83. package/dist/endpoints/get/addon/containers.d.ts +0 -40
  84. package/dist/endpoints/get/addon/containers.js +0 -40
  85. package/dist/endpoints/get/addon/credentials.d.ts +0 -24
  86. package/dist/endpoints/get/addon/credentials.js +0 -36
  87. package/dist/endpoints/get/addon/types.d.ts +0 -48
  88. package/dist/endpoints/get/addon/types.js +0 -36
  89. package/dist/endpoints/get/addon/version.d.ts +0 -53
  90. package/dist/endpoints/get/addon/version.js +0 -36
  91. package/dist/endpoints/get/addon.d.ts +0 -69
  92. package/dist/endpoints/get/addon.js +0 -36
  93. package/dist/endpoints/get/dnsId.d.ts +0 -15
  94. package/dist/endpoints/get/dnsId.js +0 -36
  95. package/dist/endpoints/get/domain.d.ts +0 -33
  96. package/dist/endpoints/get/domain.js +0 -36
  97. package/dist/endpoints/get/job/buildArguments.d.ts +0 -19
  98. package/dist/endpoints/get/job/buildArguments.js +0 -36
  99. package/dist/endpoints/get/job/builds.d.ts +0 -50
  100. package/dist/endpoints/get/job/builds.js +0 -39
  101. package/dist/endpoints/get/job/containers.d.ts +0 -40
  102. package/dist/endpoints/get/job/containers.js +0 -40
  103. package/dist/endpoints/get/job/deployment.d.ts +0 -51
  104. package/dist/endpoints/get/job/deployment.js +0 -36
  105. package/dist/endpoints/get/job/environment.d.ts +0 -24
  106. package/dist/endpoints/get/job/environment.js +0 -40
  107. package/dist/endpoints/get/job/environmentDetails.d.ts +0 -42
  108. package/dist/endpoints/get/job/environmentDetails.js +0 -36
  109. package/dist/endpoints/get/job/healthChecks.d.ts +0 -44
  110. package/dist/endpoints/get/job/healthChecks.js +0 -36
  111. package/dist/endpoints/get/job/run.d.ts +0 -42
  112. package/dist/endpoints/get/job/run.js +0 -36
  113. package/dist/endpoints/get/job/runs.d.ts +0 -52
  114. package/dist/endpoints/get/job/runs.js +0 -39
  115. package/dist/endpoints/get/job.d.ts +0 -86
  116. package/dist/endpoints/get/job.js +0 -36
  117. package/dist/endpoints/get/project.d.ts +0 -72
  118. package/dist/endpoints/get/project.js +0 -36
  119. package/dist/endpoints/get/registryCredentials.d.ts +0 -34
  120. package/dist/endpoints/get/registryCredentials.js +0 -36
  121. package/dist/endpoints/get/secret.d.ts +0 -55
  122. package/dist/endpoints/get/secret.js +0 -39
  123. package/dist/endpoints/get/secretDetails.d.ts +0 -63
  124. package/dist/endpoints/get/secretDetails.js +0 -36
  125. package/dist/endpoints/get/secretLink.d.ts +0 -44
  126. package/dist/endpoints/get/secretLink.js +0 -36
  127. package/dist/endpoints/get/service/buildArguments.d.ts +0 -19
  128. package/dist/endpoints/get/service/buildArguments.js +0 -36
  129. package/dist/endpoints/get/service/builds.d.ts +0 -50
  130. package/dist/endpoints/get/service/builds.js +0 -40
  131. package/dist/endpoints/get/service/containers.d.ts +0 -40
  132. package/dist/endpoints/get/service/containers.js +0 -40
  133. package/dist/endpoints/get/service/deployment.d.ts +0 -51
  134. package/dist/endpoints/get/service/deployment.js +0 -36
  135. package/dist/endpoints/get/service/environmentVariableDetails.d.ts +0 -42
  136. package/dist/endpoints/get/service/environmentVariableDetails.js +0 -36
  137. package/dist/endpoints/get/service/environmentVariables.d.ts +0 -24
  138. package/dist/endpoints/get/service/environmentVariables.js +0 -40
  139. package/dist/endpoints/get/service/healthChecks.d.ts +0 -44
  140. package/dist/endpoints/get/service/healthChecks.js +0 -36
  141. package/dist/endpoints/get/service/ports.d.ts +0 -35
  142. package/dist/endpoints/get/service/ports.js +0 -36
  143. package/dist/endpoints/get/service.d.ts +0 -103
  144. package/dist/endpoints/get/service.js +0 -36
  145. package/dist/endpoints/get/subdomain.d.ts +0 -30
  146. package/dist/endpoints/get/subdomain.js +0 -36
  147. package/dist/endpoints/import/addon/backup.d.ts +0 -31
  148. package/dist/endpoints/import/addon/backup.js +0 -36
  149. package/dist/endpoints/list/addons.d.ts +0 -45
  150. package/dist/endpoints/list/addons.js +0 -39
  151. package/dist/endpoints/list/domains.d.ts +0 -34
  152. package/dist/endpoints/list/domains.js +0 -39
  153. package/dist/endpoints/list/jobs.d.ts +0 -44
  154. package/dist/endpoints/list/jobs.js +0 -39
  155. package/dist/endpoints/list/plans.d.ts +0 -30
  156. package/dist/endpoints/list/plans.js +0 -36
  157. package/dist/endpoints/list/projects.d.ts +0 -32
  158. package/dist/endpoints/list/projects.js +0 -39
  159. package/dist/endpoints/list/regions.d.ts +0 -18
  160. package/dist/endpoints/list/regions.js +0 -36
  161. package/dist/endpoints/list/registryCredentials.d.ts +0 -41
  162. package/dist/endpoints/list/registryCredentials.js +0 -39
  163. package/dist/endpoints/list/secrets.d.ts +0 -52
  164. package/dist/endpoints/list/secrets.js +0 -39
  165. package/dist/endpoints/list/services.d.ts +0 -44
  166. package/dist/endpoints/list/services.js +0 -39
  167. package/dist/endpoints/list/vcs.d.ts +0 -51
  168. package/dist/endpoints/list/vcs.js +0 -36
  169. package/dist/endpoints/pause/addon.d.ts +0 -19
  170. package/dist/endpoints/pause/addon.js +0 -36
  171. package/dist/endpoints/pause/service.d.ts +0 -19
  172. package/dist/endpoints/pause/service.js +0 -36
  173. package/dist/endpoints/restart/addon.d.ts +0 -19
  174. package/dist/endpoints/restart/addon.js +0 -36
  175. package/dist/endpoints/restart/service.d.ts +0 -19
  176. package/dist/endpoints/restart/service.js +0 -36
  177. package/dist/endpoints/restore/addon/backup.d.ts +0 -21
  178. package/dist/endpoints/restore/addon/backup.js +0 -36
  179. package/dist/endpoints/resume/addon.d.ts +0 -19
  180. package/dist/endpoints/resume/addon.js +0 -36
  181. package/dist/endpoints/resume/service.d.ts +0 -24
  182. package/dist/endpoints/resume/service.js +0 -36
  183. package/dist/endpoints/scale/addon.d.ts +0 -28
  184. package/dist/endpoints/scale/addon.js +0 -36
  185. package/dist/endpoints/scale/service.d.ts +0 -26
  186. package/dist/endpoints/scale/service.js +0 -36
  187. package/dist/endpoints/start/job/build.d.ts +0 -37
  188. package/dist/endpoints/start/job/build.js +0 -36
  189. package/dist/endpoints/start/job/run.d.ts +0 -37
  190. package/dist/endpoints/start/job/run.js +0 -36
  191. package/dist/endpoints/start/service/build.d.ts +0 -41
  192. package/dist/endpoints/start/service/build.js +0 -36
  193. package/dist/endpoints/unassign/subdomain.d.ts +0 -19
  194. package/dist/endpoints/unassign/subdomain.js +0 -36
  195. package/dist/endpoints/update/addon/networkSettings.d.ts +0 -26
  196. package/dist/endpoints/update/addon/networkSettings.js +0 -36
  197. package/dist/endpoints/update/addon/security.d.ts +0 -29
  198. package/dist/endpoints/update/addon/security.js +0 -36
  199. package/dist/endpoints/update/addon/version.d.ts +0 -24
  200. package/dist/endpoints/update/addon/version.js +0 -36
  201. package/dist/endpoints/update/job/buildArguments.d.ts +0 -24
  202. package/dist/endpoints/update/job/buildArguments.js +0 -36
  203. package/dist/endpoints/update/job/cmdOverride.d.ts +0 -24
  204. package/dist/endpoints/update/job/cmdOverride.js +0 -36
  205. package/dist/endpoints/update/job/deployment.d.ts +0 -37
  206. package/dist/endpoints/update/job/deployment.js +0 -36
  207. package/dist/endpoints/update/job/environment.d.ts +0 -24
  208. package/dist/endpoints/update/job/environment.js +0 -36
  209. package/dist/endpoints/update/job/healthChecks.d.ts +0 -44
  210. package/dist/endpoints/update/job/healthChecks.js +0 -36
  211. package/dist/endpoints/update/job/settings.d.ts +0 -30
  212. package/dist/endpoints/update/job/settings.js +0 -36
  213. package/dist/endpoints/update/registryCredentials.d.ts +0 -31
  214. package/dist/endpoints/update/registryCredentials.js +0 -36
  215. package/dist/endpoints/update/secret.d.ts +0 -54
  216. package/dist/endpoints/update/secret.js +0 -36
  217. package/dist/endpoints/update/secretLink.d.ts +0 -40
  218. package/dist/endpoints/update/secretLink.js +0 -36
  219. package/dist/endpoints/update/service/buildArguments.d.ts +0 -24
  220. package/dist/endpoints/update/service/buildArguments.js +0 -36
  221. package/dist/endpoints/update/service/buildOptions.d.ts +0 -43
  222. package/dist/endpoints/update/service/buildOptions.js +0 -36
  223. package/dist/endpoints/update/service/cmdOverride.d.ts +0 -24
  224. package/dist/endpoints/update/service/cmdOverride.js +0 -36
  225. package/dist/endpoints/update/service/deployment.d.ts +0 -37
  226. package/dist/endpoints/update/service/deployment.js +0 -36
  227. package/dist/endpoints/update/service/environmentVariables.d.ts +0 -29
  228. package/dist/endpoints/update/service/environmentVariables.js +0 -36
  229. package/dist/endpoints/update/service/healthChecks.d.ts +0 -44
  230. package/dist/endpoints/update/service/healthChecks.js +0 -36
  231. package/dist/endpoints/update/service/ports.d.ts +0 -55
  232. package/dist/endpoints/update/service/ports.js +0 -36
  233. package/dist/endpoints/verify/domain.d.ts +0 -17
  234. package/dist/endpoints/verify/domain.js +0 -36
  235. package/dist/endpoints/verify/subdomain.d.ts +0 -19
  236. package/dist/endpoints/verify/subdomain.js +0 -36
  237. package/dist/port-forward/client/api-helper.d.ts +0 -30
  238. package/dist/port-forward/client/api-helper.js +0 -102
  239. package/dist/port-forward/client/atomic-write.d.ts +0 -3
  240. package/dist/port-forward/client/atomic-write.js +0 -99
  241. package/dist/port-forward/client/host-file-ast.d.ts +0 -52
  242. package/dist/port-forward/client/host-file-ast.js +0 -283
  243. package/dist/port-forward/client/host-file.d.ts +0 -26
  244. package/dist/port-forward/client/host-file.js +0 -226
  245. package/dist/port-forward/client/loopback.d.ts +0 -4
  246. package/dist/port-forward/client/loopback.js +0 -219
  247. package/dist/port-forward/client/port-forwarder.d.ts +0 -86
  248. package/dist/port-forward/client/port-forwarder.js +0 -597
  249. package/dist/port-forward/client/port-tunnel-tcp.d.ts +0 -34
  250. package/dist/port-forward/client/port-tunnel-tcp.js +0 -209
  251. package/dist/port-forward/client/port-tunnel-udp.d.ts +0 -25
  252. package/dist/port-forward/client/port-tunnel-udp.js +0 -147
  253. package/dist/port-forward/client/port-tunnel.d.ts +0 -32
  254. package/dist/port-forward/client/port-tunnel.js +0 -2
  255. package/dist/port-forward/client/promise-mutex.d.ts +0 -4
  256. package/dist/port-forward/client/promise-mutex.js +0 -62
  257. package/dist/utils.d.ts +0 -8
  258. package/dist/utils.js +0 -97
@@ -1,597 +0,0 @@
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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
54
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
55
- if (ar || !(i in from)) {
56
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
57
- ar[i] = from[i];
58
- }
59
- }
60
- return to.concat(ar || Array.prototype.slice.call(from));
61
- };
62
- var __importDefault = (this && this.__importDefault) || function (mod) {
63
- return (mod && mod.__esModule) ? mod : { "default": mod };
64
- };
65
- Object.defineProperty(exports, "__esModule", { value: true });
66
- exports.retry = exports.NorthflankPortForwarder = void 0;
67
- var lodash_1 = __importDefault(require("lodash"));
68
- var events_1 = require("events");
69
- var api_helper_1 = require("./api-helper");
70
- var loopback_1 = require("./loopback");
71
- var host_file_1 = require("./host-file");
72
- var promise_mutex_1 = require("./promise-mutex");
73
- var port_tunnel_tcp_1 = require("./port-tunnel-tcp");
74
- var port_tunnel_udp_1 = require("./port-tunnel-udp");
75
- var utils_1 = require("../../utils");
76
- var NorthflankPortForwarder = /** @class */ (function (_super) {
77
- __extends(NorthflankPortForwarder, _super);
78
- function NorthflankPortForwarder(contextProvider, listServices, listAddons) {
79
- var _this = _super.call(this) || this;
80
- _this.contextProvider = contextProvider;
81
- _this.listServices = listServices;
82
- _this.listAddons = listAddons;
83
- _this.connections = [];
84
- _this.hostsFileMutex = new promise_mutex_1.AsyncMutex();
85
- _this.ipAllocationMutex = new promise_mutex_1.AsyncMutex();
86
- _this.stopForwarding = function (forwardingInfo) { return __awaiter(_this, void 0, void 0, function () {
87
- var _a, projectId, type, id, hostnames;
88
- var _b;
89
- return __generator(this, function (_c) {
90
- switch (_c.label) {
91
- case 0: return [4 /*yield*/, forwardingInfo.tunnel.close()];
92
- case 1:
93
- _c.sent();
94
- _a = forwardingInfo.forwardingContext, projectId = _a.projectId, type = _a.type, id = _a.id, hostnames = _a.hostnames;
95
- if (!(hostnames.length > 0)) return [3 /*break*/, 3];
96
- return [4 /*yield*/, this.unregisterHostnames((_b = forwardingInfo.tunnel.bindTo) === null || _b === void 0 ? void 0 : _b.address, hostnames)];
97
- case 2:
98
- _c.sent();
99
- _c.label = 3;
100
- case 3:
101
- this.connections.splice(this.connections.findIndex(function (c) {
102
- var _a = c.forwardingContext, type1 = _a.type, id1 = _a.id, projectId1 = _a.projectId;
103
- return id1 === id && projectId1 === projectId && type1 === type;
104
- }), 1);
105
- return [2 /*return*/];
106
- }
107
- });
108
- }); };
109
- _this.canExecuteWithHostnames = function () { return (0, utils_1.isRunningAsAdmin)(); };
110
- _this.assertStartedWithNodejs = function () {
111
- if (!utils_1.isNode)
112
- throw new Error('Port forwarding only possible when started with nodejs');
113
- };
114
- _this.proxyApiClient = new api_helper_1.PortProxyApiClient(contextProvider);
115
- return _this;
116
- }
117
- NorthflankPortForwarder.prototype.withProjectForwarding = function (parameters, func, ipOnly) {
118
- if (ipOnly === void 0) { ipOnly = true; }
119
- return __awaiter(this, void 0, void 0, function () {
120
- var p;
121
- return __generator(this, function (_a) {
122
- switch (_a.label) {
123
- case 0: return [4 /*yield*/, this.forwardProject(parameters, ipOnly)];
124
- case 1:
125
- p = _a.sent();
126
- _a.label = 2;
127
- case 2:
128
- _a.trys.push([2, , 4, 6]);
129
- return [4 /*yield*/, func(p)];
130
- case 3: return [2 /*return*/, _a.sent()];
131
- case 4: return [4 /*yield*/, this.stopProjectForwarding(parameters)];
132
- case 5:
133
- _a.sent();
134
- return [7 /*endfinally*/];
135
- case 6: return [2 /*return*/];
136
- }
137
- });
138
- });
139
- };
140
- NorthflankPortForwarder.prototype.forwardProject = function (parameters, ipOnly) {
141
- if (ipOnly === void 0) { ipOnly = true; }
142
- return __awaiter(this, void 0, void 0, function () {
143
- var projectId, services, addons, serviceConnections, addonConnections;
144
- var _this = this;
145
- return __generator(this, function (_a) {
146
- switch (_a.label) {
147
- case 0:
148
- this.assertStartedWithNodejs();
149
- projectId = parameters.projectId;
150
- return [4 /*yield*/, this.listServices({ parameters: { projectId: projectId } })];
151
- case 1:
152
- services = _a.sent();
153
- return [4 /*yield*/, this.listAddons({ parameters: { projectId: projectId } })];
154
- case 2:
155
- addons = _a.sent();
156
- return [4 /*yield*/, Promise.all(services.data.services.map(function (service) { return __awaiter(_this, void 0, void 0, function () {
157
- return __generator(this, function (_a) {
158
- return [2 /*return*/, this.forwardService({ projectId: projectId, serviceId: service.id }, ipOnly)];
159
- });
160
- }); }))];
161
- case 3:
162
- serviceConnections = _a.sent();
163
- return [4 /*yield*/, Promise.all(addons.data.addons.map(function (addon) { return __awaiter(_this, void 0, void 0, function () {
164
- return __generator(this, function (_a) {
165
- switch (_a.label) {
166
- case 0: return [4 /*yield*/, this.forwardAddon({ projectId: projectId, addonId: addon.id }, ipOnly)];
167
- case 1: return [2 /*return*/, _a.sent()];
168
- }
169
- });
170
- }); }))];
171
- case 4:
172
- addonConnections = _a.sent();
173
- return [2 /*return*/, {
174
- services: serviceConnections,
175
- addons: addonConnections,
176
- }];
177
- }
178
- });
179
- });
180
- };
181
- NorthflankPortForwarder.prototype.withServiceForwarding = function (parameters, func, ipOnly) {
182
- if (ipOnly === void 0) { ipOnly = true; }
183
- return __awaiter(this, void 0, void 0, function () {
184
- var p;
185
- return __generator(this, function (_a) {
186
- switch (_a.label) {
187
- case 0: return [4 /*yield*/, this.forwardService(parameters, ipOnly)];
188
- case 1:
189
- p = _a.sent();
190
- _a.label = 2;
191
- case 2:
192
- _a.trys.push([2, , 4, 6]);
193
- return [4 /*yield*/, func(p)];
194
- case 3: return [2 /*return*/, _a.sent()];
195
- case 4: return [4 /*yield*/, this.stopServiceForwarding(parameters)];
196
- case 5:
197
- _a.sent();
198
- return [7 /*endfinally*/];
199
- case 6: return [2 /*return*/];
200
- }
201
- });
202
- });
203
- };
204
- NorthflankPortForwarder.prototype.forwardService = function (parameters, ipOnly) {
205
- if (ipOnly === void 0) { ipOnly = true; }
206
- return __awaiter(this, void 0, void 0, function () {
207
- var projectId, serviceId, response, namespace, targetDomain, instances, ports, mapToForwarding;
208
- var _this = this;
209
- return __generator(this, function (_a) {
210
- switch (_a.label) {
211
- case 0:
212
- this.assertStartedWithNodejs();
213
- projectId = parameters.projectId, serviceId = parameters.serviceId;
214
- return [4 /*yield*/, this.proxyApiClient.getServiceDetails(projectId, serviceId)];
215
- case 1:
216
- response = _a.sent();
217
- namespace = response.namespace, targetDomain = response.targetDomain, instances = response.instances, ports = response.ports;
218
- if (instances.length === 0) {
219
- return [2 /*return*/, []];
220
- }
221
- mapToForwarding = function (port) {
222
- var endpoint = "https://" + targetDomain + "/tunnel/projects/" + projectId + "/services/" + serviceId + "/instance/" + instances[0].podName + "/port/" + port.internalPort;
223
- var mainHostname = serviceId + "." + namespace + ".svc.cluster.local";
224
- var altHostnames = ["" + serviceId];
225
- if (port.name) {
226
- altHostnames.push(port.name + "." + serviceId);
227
- }
228
- var rewriteHostHeader;
229
- if (port.protocol === 'HTTP') {
230
- rewriteHostHeader = { altHostnames: altHostnames, targetHostname: mainHostname };
231
- }
232
- var allHostnames = ipOnly ? [] : __spreadArray([mainHostname], altHostnames, true);
233
- return _this.forwardPort(endpoint, port, allHostnames, 'service', serviceId, projectId, ipOnly, rewriteHostHeader);
234
- };
235
- return [4 /*yield*/, (0, utils_1.asyncSequential)(ports, mapToForwarding)];
236
- case 2: return [2 /*return*/, _a.sent()];
237
- }
238
- });
239
- });
240
- };
241
- NorthflankPortForwarder.prototype.withAddonForwarding = function (parameters, func, ipOnly) {
242
- if (ipOnly === void 0) { ipOnly = true; }
243
- return __awaiter(this, void 0, void 0, function () {
244
- var p;
245
- return __generator(this, function (_a) {
246
- switch (_a.label) {
247
- case 0: return [4 /*yield*/, this.forwardAddon(parameters, ipOnly)];
248
- case 1:
249
- p = _a.sent();
250
- _a.label = 2;
251
- case 2:
252
- _a.trys.push([2, , 4, 6]);
253
- return [4 /*yield*/, func(p)];
254
- case 3: return [2 /*return*/, _a.sent()];
255
- case 4: return [4 /*yield*/, this.stopAddonForwarding(parameters)];
256
- case 5:
257
- _a.sent();
258
- return [7 /*endfinally*/];
259
- case 6: return [2 /*return*/];
260
- }
261
- });
262
- });
263
- };
264
- NorthflankPortForwarder.prototype.forwardAddon = function (parameters, ipOnly) {
265
- if (ipOnly === void 0) { ipOnly = true; }
266
- return __awaiter(this, void 0, void 0, function () {
267
- var addonId, projectId, addonInfo, addonConnectionSpecs;
268
- var _this = this;
269
- return __generator(this, function (_a) {
270
- switch (_a.label) {
271
- case 0:
272
- this.assertStartedWithNodejs();
273
- addonId = parameters.addonId, projectId = parameters.projectId;
274
- return [4 /*yield*/, this.proxyApiClient.getAddonDetails(projectId, addonId)];
275
- case 1:
276
- addonInfo = _a.sent();
277
- addonConnectionSpecs = addonInfo.instances.map(function (instance) {
278
- var podName = instance.podName, internalHostname = instance.internalHostname;
279
- return instance.ports.map(function (port) { return ({ podName: podName, internalHostname: internalHostname, port: port }); });
280
- });
281
- return [4 /*yield*/, (0, utils_1.asyncSequential)(lodash_1.default.flattenDeep(addonConnectionSpecs), function (_a) {
282
- var podName = _a.podName, internalHostname = _a.internalHostname, port = _a.port;
283
- return __awaiter(_this, void 0, void 0, function () {
284
- var endpoint;
285
- return __generator(this, function (_b) {
286
- endpoint = "https://" + addonInfo.targetDomain + "/tunnel/projects/" + projectId + "/addons/" + addonId + "/instance/" + podName + "/port/" + port.internalPort;
287
- return [2 /*return*/, this.forwardPort(endpoint, port, ipOnly ? [] : [internalHostname], 'addon', addonId, projectId, ipOnly)];
288
- });
289
- });
290
- })];
291
- case 2: return [2 /*return*/, _a.sent()];
292
- }
293
- });
294
- });
295
- };
296
- NorthflankPortForwarder.prototype.allocateIpAddress = function (port) {
297
- return __awaiter(this, void 0, void 0, function () {
298
- var _this = this;
299
- return __generator(this, function (_a) {
300
- return [2 /*return*/, this.ipAllocationMutex.enter(function () { return __awaiter(_this, void 0, void 0, function () {
301
- var minIp, maxIp, nextIp, address;
302
- var _a;
303
- return __generator(this, function (_b) {
304
- switch (_b.label) {
305
- case 0:
306
- minIp = '127.24.1.1';
307
- maxIp = '127.24.255.255';
308
- nextIp = (_a = this.nextIpAddress) !== null && _a !== void 0 ? _a : minIp;
309
- return [4 /*yield*/, (0, loopback_1.findAvailableLoopbackIp)(port, nextIp, maxIp)];
310
- case 1:
311
- address = _b.sent();
312
- this.nextIpAddress = (0, loopback_1.int2ip)((0, loopback_1.ip2int)(address) + 1);
313
- if ((0, loopback_1.ip2int)(this.nextIpAddress) > (0, loopback_1.ip2int)(maxIp)) {
314
- this.nextIpAddress = minIp;
315
- }
316
- return [2 /*return*/, address];
317
- }
318
- });
319
- }); })];
320
- });
321
- });
322
- };
323
- NorthflankPortForwarder.prototype.forwardPort = function (endpoint, port, hostnames, type, name, projectId, ipOnly, rewriteHostHeader) {
324
- var _a, _b;
325
- if (ipOnly === void 0) { ipOnly = true; }
326
- return __awaiter(this, void 0, void 0, function () {
327
- var headers, adminCheckRes, existingBindingForThisResource, duplicatePort, bindTo, _c, _d, tunnel, tunnelBinding, portForwardingInfo;
328
- var _e;
329
- var _this = this;
330
- return __generator(this, function (_f) {
331
- switch (_f.label) {
332
- case 0:
333
- headers = {
334
- 'Authorization': "Bearer " + this.contextProvider.getCurrentToken(),
335
- };
336
- if (!ipOnly) {
337
- adminCheckRes = this.canExecuteWithHostnames();
338
- if (adminCheckRes.error)
339
- throw new Error(adminCheckRes.message + " Alternatively, you can use the ipOnly mode when port-forwarding (apiClient.forwarding.forwardAddon({ projectId, addonId }, true))");
340
- }
341
- existingBindingForThisResource = this.connections.find(function (c) {
342
- return (c.forwardingContext.projectId === projectId &&
343
- c.forwardingContext.id === name &&
344
- c.forwardingContext.type === type);
345
- });
346
- duplicatePort = ((_a = existingBindingForThisResource === null || existingBindingForThisResource === void 0 ? void 0 : existingBindingForThisResource.forwardingContext) === null || _a === void 0 ? void 0 : _a.port) !== port.internalPort;
347
- if (!
348
- // eslint-disable-next-line no-nested-ternary
349
- (existingBindingForThisResource && duplicatePort))
350
- // eslint-disable-next-line no-nested-ternary
351
- return [3 /*break*/, 1];
352
- _c = {
353
- address: existingBindingForThisResource.forwardingContext.address,
354
- port: port.internalPort,
355
- };
356
- return [3 /*break*/, 5];
357
- case 1:
358
- if (!!ipOnly) return [3 /*break*/, 3];
359
- _e = {};
360
- return [4 /*yield*/, this.allocateIpAddress(port.internalPort)];
361
- case 2:
362
- _d = (_e.address = _f.sent(), _e.port = port.internalPort, _e);
363
- return [3 /*break*/, 4];
364
- case 3:
365
- _d = undefined;
366
- _f.label = 4;
367
- case 4:
368
- _c = _d;
369
- _f.label = 5;
370
- case 5:
371
- bindTo = _c;
372
- tunnel = port.protocol === 'UDP'
373
- ? new port_tunnel_udp_1.PortTunnelUdp(endpoint, headers, bindTo)
374
- : new port_tunnel_tcp_1.PortTunnelTcp(endpoint, headers, rewriteHostHeader, bindTo);
375
- if (!!ipOnly) return [3 /*break*/, 7];
376
- return [4 /*yield*/, this.registerHostnames((_b = tunnel.bindTo) === null || _b === void 0 ? void 0 : _b.address, hostnames)];
377
- case 6:
378
- _f.sent();
379
- _f.label = 7;
380
- case 7:
381
- tunnel.on('connection-accept', function () { return _this.emit('connection-accept', tunnel); });
382
- tunnel.on('connection-close', function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
383
- return [2 /*return*/, this.emit('connection-close', tunnel)];
384
- }); }); });
385
- return [4 /*yield*/, tunnel.open()];
386
- case 8:
387
- tunnelBinding = _f.sent();
388
- portForwardingInfo = {
389
- projectId: projectId,
390
- id: name,
391
- type: type,
392
- hostnames: hostnames,
393
- port: tunnelBinding.port,
394
- address: tunnelBinding.address,
395
- protocol: port.protocol,
396
- portName: port.name,
397
- };
398
- this.emit('tunnel-open', tunnel, portForwardingInfo);
399
- tunnel.on('connection-error', function (e) {
400
- return _this.emit('connection-error', tunnel, portForwardingInfo, e);
401
- });
402
- tunnel.on('tunnel-close', function () { return _this.emit('tunnel-close', tunnel, portForwardingInfo); });
403
- this.connections.push({ tunnel: tunnel, forwardingContext: portForwardingInfo });
404
- return [2 /*return*/, { data: portForwardingInfo }];
405
- }
406
- });
407
- });
408
- };
409
- NorthflankPortForwarder.prototype.registerHostnames = function (ip, hostnames) {
410
- return __awaiter(this, void 0, void 0, function () {
411
- return __generator(this, function (_a) {
412
- switch (_a.label) {
413
- case 0: return [4 /*yield*/, this.modifyHostsFile(function (hostsFile) {
414
- hostsFile.removeHosts.apply(hostsFile, hostnames);
415
- hostsFile.add.apply(hostsFile, __spreadArray([ip], hostnames, false));
416
- })];
417
- case 1:
418
- _a.sent();
419
- return [2 /*return*/];
420
- }
421
- });
422
- });
423
- };
424
- NorthflankPortForwarder.prototype.unregisterHostnames = function (ip, hostnames) {
425
- return __awaiter(this, void 0, void 0, function () {
426
- return __generator(this, function (_a) {
427
- switch (_a.label) {
428
- case 0: return [4 /*yield*/, this.modifyHostsFile(function (hostsFile) {
429
- hostsFile.remove.apply(hostsFile, __spreadArray([ip], hostnames, false));
430
- })];
431
- case 1:
432
- _a.sent();
433
- return [2 /*return*/];
434
- }
435
- });
436
- });
437
- };
438
- NorthflankPortForwarder.prototype.modifyHostsFile = function (modifier) {
439
- return __awaiter(this, void 0, void 0, function () {
440
- var _this = this;
441
- return __generator(this, function (_a) {
442
- switch (_a.label) {
443
- case 0: return [4 /*yield*/, this.hostsFileMutex.enter(function () { return __awaiter(_this, void 0, void 0, function () {
444
- var hostsFile, e_1;
445
- var _this = this;
446
- return __generator(this, function (_a) {
447
- switch (_a.label) {
448
- case 0: return [4 /*yield*/, host_file_1.HostsFile.load({ header: 'Northflank Proxy' })];
449
- case 1:
450
- hostsFile = _a.sent();
451
- modifier(hostsFile);
452
- return [4 /*yield*/, hostsFile.backup({ suffix: '.backup-pre-northflank' })];
453
- case 2:
454
- _a.sent();
455
- _a.label = 3;
456
- case 3:
457
- _a.trys.push([3, 5, , 7]);
458
- return [4 /*yield*/, (0, exports.retry)(5)(function () { return __awaiter(_this, void 0, void 0, function () {
459
- return __generator(this, function (_a) {
460
- switch (_a.label) {
461
- case 0: return [4 /*yield*/, hostsFile.write({ writeMode: 'atomic' })];
462
- case 1:
463
- _a.sent();
464
- return [2 /*return*/];
465
- }
466
- });
467
- }); })];
468
- case 4:
469
- _a.sent();
470
- return [3 /*break*/, 7];
471
- case 5:
472
- e_1 = _a.sent();
473
- return [4 /*yield*/, (0, exports.retry)(5)(function () { return __awaiter(_this, void 0, void 0, function () {
474
- return __generator(this, function (_a) {
475
- switch (_a.label) {
476
- case 0: return [4 /*yield*/, hostsFile.write({ writeMode: 'standard' })];
477
- case 1:
478
- _a.sent();
479
- return [2 /*return*/];
480
- }
481
- });
482
- }); })];
483
- case 6:
484
- _a.sent();
485
- return [3 /*break*/, 7];
486
- case 7: return [2 /*return*/];
487
- }
488
- });
489
- }); })];
490
- case 1:
491
- _a.sent();
492
- return [2 /*return*/];
493
- }
494
- });
495
- });
496
- };
497
- NorthflankPortForwarder.prototype.stopProjectForwarding = function (opts) {
498
- return __awaiter(this, void 0, void 0, function () {
499
- var _this = this;
500
- return __generator(this, function (_a) {
501
- switch (_a.label) {
502
- case 0: return [4 /*yield*/, Promise.all(this.connections
503
- .filter(function (c) { return c.forwardingContext.projectId === opts.projectId; })
504
- .map(function (c) { return _this.stopForwarding(c); }))];
505
- case 1:
506
- _a.sent();
507
- return [2 /*return*/];
508
- }
509
- });
510
- });
511
- };
512
- NorthflankPortForwarder.prototype.stopServiceForwarding = function (opts) {
513
- return __awaiter(this, void 0, void 0, function () {
514
- var _this = this;
515
- return __generator(this, function (_a) {
516
- switch (_a.label) {
517
- case 0: return [4 /*yield*/, Promise.all(this.connections
518
- .filter(function (c) {
519
- return c.forwardingContext.type === 'service' &&
520
- c.forwardingContext.projectId === opts.projectId &&
521
- c.forwardingContext.id === opts.serviceId;
522
- })
523
- .map(function (c) { return _this.stopForwarding(c); }))];
524
- case 1:
525
- _a.sent();
526
- return [2 /*return*/];
527
- }
528
- });
529
- });
530
- };
531
- NorthflankPortForwarder.prototype.stopAddonForwarding = function (opts) {
532
- return __awaiter(this, void 0, void 0, function () {
533
- var _this = this;
534
- return __generator(this, function (_a) {
535
- switch (_a.label) {
536
- case 0: return [4 /*yield*/, Promise.all(this.connections
537
- .filter(function (c) {
538
- return c.forwardingContext.type === 'addon' &&
539
- c.forwardingContext.projectId === opts.projectId &&
540
- c.forwardingContext.id === opts.addonId;
541
- })
542
- .map(function (c) { return _this.stopForwarding(c); }))];
543
- case 1:
544
- _a.sent();
545
- return [2 /*return*/];
546
- }
547
- });
548
- });
549
- };
550
- NorthflankPortForwarder.prototype.stop = function () {
551
- return __awaiter(this, void 0, void 0, function () {
552
- var _this = this;
553
- return __generator(this, function (_a) {
554
- switch (_a.label) {
555
- case 0: return [4 /*yield*/, Promise.all(this.connections.map(function (con) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
556
- return [2 /*return*/, this.stopForwarding(con)];
557
- }); }); }))];
558
- case 1:
559
- _a.sent();
560
- return [2 /*return*/];
561
- }
562
- });
563
- });
564
- };
565
- return NorthflankPortForwarder;
566
- }(events_1.EventEmitter));
567
- exports.NorthflankPortForwarder = NorthflankPortForwarder;
568
- var retry = function (retries, retryDelay) {
569
- if (retryDelay === void 0) { retryDelay = 50; }
570
- return function (action) {
571
- var retriesCounter = retries;
572
- var retryRecursive = function () { return __awaiter(void 0, void 0, void 0, function () {
573
- var e_2;
574
- return __generator(this, function (_a) {
575
- switch (_a.label) {
576
- case 0:
577
- _a.trys.push([0, 2, , 4]);
578
- return [4 /*yield*/, action()];
579
- case 1: return [2 /*return*/, _a.sent()];
580
- case 2:
581
- e_2 = _a.sent();
582
- if (retriesCounter <= 0) {
583
- throw e_2;
584
- }
585
- retriesCounter -= 1;
586
- return [4 /*yield*/, new Promise(function (r) { return setTimeout(function () { return r(); }, retryDelay); })];
587
- case 3:
588
- _a.sent();
589
- return [2 /*return*/, retryRecursive()];
590
- case 4: return [2 /*return*/];
591
- }
592
- });
593
- }); };
594
- return retryRecursive();
595
- };
596
- };
597
- exports.retry = retry;
@@ -1,34 +0,0 @@
1
- /// <reference types="node" />
2
- import { EventEmitter } from 'events';
3
- import { PortTunnel } from './port-tunnel';
4
- export declare class PortTunnelTcp extends EventEmitter implements PortTunnel {
5
- private readonly endpoint;
6
- private readonly headers;
7
- private readonly rewriteHostHeader?;
8
- private readonly closeTimeout;
9
- private readonly tcpServer;
10
- readonly protocol = "TCP";
11
- private readonly hostRegex;
12
- private readonly openConnections;
13
- readonly bindTo?: {
14
- address: string;
15
- port: number;
16
- };
17
- constructor(endpoint: string, headers: {
18
- [_: string]: string;
19
- }, rewriteHostHeader?: {
20
- altHostnames: string[];
21
- targetHostname: string;
22
- } | undefined, bindTo?: {
23
- address: string;
24
- port: number;
25
- }, closeTimeout?: number);
26
- open(): Promise<{
27
- address: string;
28
- port: number;
29
- }>;
30
- close(): Promise<void>;
31
- private handleConnection;
32
- /** rewrite host header which can lead to issues when request coming from a different hostname */
33
- private getHeaderTransform;
34
- }