@fastybird/smart-panel-backend 1.1.0-alpha.41 → 1.1.0-alpha.42

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 (101) hide show
  1. package/dist/app.module.js +1 -1
  2. package/dist/app.module.js.map +1 -1
  3. package/dist/common/utils/cancellable-exec.utils.d.ts +5 -0
  4. package/dist/common/utils/cancellable-exec.utils.js +34 -0
  5. package/dist/common/utils/cancellable-exec.utils.js.map +1 -0
  6. package/dist/common/utils/remote-access-observation.utils.d.ts +11 -0
  7. package/dist/common/utils/remote-access-observation.utils.js +89 -0
  8. package/dist/common/utils/remote-access-observation.utils.js.map +1 -0
  9. package/dist/modules/remote-access/controllers/remote-access.controller.js +9 -5
  10. package/dist/modules/remote-access/controllers/remote-access.controller.js.map +1 -1
  11. package/dist/modules/remote-access/models/provider.model.d.ts +3 -0
  12. package/dist/modules/remote-access/models/provider.model.js +23 -0
  13. package/dist/modules/remote-access/models/provider.model.js.map +1 -1
  14. package/dist/modules/remote-access/models/status.model.d.ts +2 -0
  15. package/dist/modules/remote-access/models/status.model.js +18 -1
  16. package/dist/modules/remote-access/models/status.model.js.map +1 -1
  17. package/dist/modules/remote-access/models/urls.model.d.ts +2 -0
  18. package/dist/modules/remote-access/models/urls.model.js +17 -0
  19. package/dist/modules/remote-access/models/urls.model.js.map +1 -1
  20. package/dist/modules/remote-access/platforms/remote-access-provider.platform.d.ts +18 -1
  21. package/dist/modules/remote-access/remote-access.constants.d.ts +2 -1
  22. package/dist/modules/remote-access/remote-access.constants.js +2 -1
  23. package/dist/modules/remote-access/remote-access.constants.js.map +1 -1
  24. package/dist/modules/remote-access/services/remote-access-proxy-contribution.service.d.ts +1 -0
  25. package/dist/modules/remote-access/services/remote-access-proxy-contribution.service.js +4 -1
  26. package/dist/modules/remote-access/services/remote-access-proxy-contribution.service.js.map +1 -1
  27. package/dist/modules/remote-access/services/remote-access-status.service.d.ts +40 -8
  28. package/dist/modules/remote-access/services/remote-access-status.service.js +314 -65
  29. package/dist/modules/remote-access/services/remote-access-status.service.js.map +1 -1
  30. package/dist/modules/remote-access/services/remote-access-url.service.d.ts +2 -2
  31. package/dist/modules/remote-access/services/remote-access-url.service.js +4 -2
  32. package/dist/modules/remote-access/services/remote-access-url.service.js.map +1 -1
  33. package/dist/modules/websocket/gateway/websocket.gateway.js +1 -0
  34. package/dist/modules/websocket/gateway/websocket.gateway.js.map +1 -1
  35. package/dist/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.d.ts +5 -3
  36. package/dist/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.js +20 -8
  37. package/dist/plugins/remote-access-cloudflare-tunnel/controllers/setup.controller.js.map +1 -1
  38. package/dist/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.d.ts +3 -5
  39. package/dist/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.js +11 -10
  40. package/dist/plugins/remote-access-cloudflare-tunnel/controllers/status.controller.js.map +1 -1
  41. package/dist/plugins/remote-access-cloudflare-tunnel/models/status.model.d.ts +2 -0
  42. package/dist/plugins/remote-access-cloudflare-tunnel/models/status.model.js +17 -0
  43. package/dist/plugins/remote-access-cloudflare-tunnel/models/status.model.js.map +1 -1
  44. package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.d.ts +20 -2
  45. package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.js +105 -48
  46. package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-managed.service.js.map +1 -1
  47. package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-provider.service.d.ts +13 -1
  48. package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-provider.service.js +8 -2
  49. package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflare-tunnel-provider.service.js.map +1 -1
  50. package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-cli.service.d.ts +1 -1
  51. package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-cli.service.js +12 -24
  52. package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-cli.service.js.map +1 -1
  53. package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-metrics.service.d.ts +1 -1
  54. package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-metrics.service.js +5 -2
  55. package/dist/plugins/remote-access-cloudflare-tunnel/services/cloudflared-metrics.service.js.map +1 -1
  56. package/dist/plugins/remote-access-tailscale/controllers/setup.controller.d.ts +10 -5
  57. package/dist/plugins/remote-access-tailscale/controllers/setup.controller.js +105 -15
  58. package/dist/plugins/remote-access-tailscale/controllers/setup.controller.js.map +1 -1
  59. package/dist/plugins/remote-access-tailscale/controllers/status.controller.d.ts +5 -4
  60. package/dist/plugins/remote-access-tailscale/controllers/status.controller.js +19 -9
  61. package/dist/plugins/remote-access-tailscale/controllers/status.controller.js.map +1 -1
  62. package/dist/plugins/remote-access-tailscale/models/status.model.d.ts +16 -0
  63. package/dist/plugins/remote-access-tailscale/models/status.model.js +100 -1
  64. package/dist/plugins/remote-access-tailscale/models/status.model.js.map +1 -1
  65. package/dist/plugins/remote-access-tailscale/remote-access-tailscale.constants.d.ts +2 -0
  66. package/dist/plugins/remote-access-tailscale/remote-access-tailscale.constants.js +3 -1
  67. package/dist/plugins/remote-access-tailscale/remote-access-tailscale.constants.js.map +1 -1
  68. package/dist/plugins/remote-access-tailscale/remote-access-tailscale.exceptions.d.ts +17 -1
  69. package/dist/plugins/remote-access-tailscale/remote-access-tailscale.exceptions.js +33 -1
  70. package/dist/plugins/remote-access-tailscale/remote-access-tailscale.exceptions.js.map +1 -1
  71. package/dist/plugins/remote-access-tailscale/remote-access-tailscale.openapi.d.ts +2 -2
  72. package/dist/plugins/remote-access-tailscale/remote-access-tailscale.openapi.js +1 -0
  73. package/dist/plugins/remote-access-tailscale/remote-access-tailscale.openapi.js.map +1 -1
  74. package/dist/plugins/remote-access-tailscale/remote-access-tailscale.plugin.js +2 -0
  75. package/dist/plugins/remote-access-tailscale/remote-access-tailscale.plugin.js.map +1 -1
  76. package/dist/plugins/remote-access-tailscale/services/tailscale-cli.service.d.ts +8 -4
  77. package/dist/plugins/remote-access-tailscale/services/tailscale-cli.service.js +58 -14
  78. package/dist/plugins/remote-access-tailscale/services/tailscale-cli.service.js.map +1 -1
  79. package/dist/plugins/remote-access-tailscale/services/tailscale-login.service.d.ts +8 -3
  80. package/dist/plugins/remote-access-tailscale/services/tailscale-login.service.js +175 -151
  81. package/dist/plugins/remote-access-tailscale/services/tailscale-login.service.js.map +1 -1
  82. package/dist/plugins/remote-access-tailscale/services/tailscale-node-managed.service.d.ts +51 -7
  83. package/dist/plugins/remote-access-tailscale/services/tailscale-node-managed.service.js +481 -101
  84. package/dist/plugins/remote-access-tailscale/services/tailscale-node-managed.service.js.map +1 -1
  85. package/dist/plugins/remote-access-tailscale/services/tailscale-operation-coordinator.service.d.ts +33 -0
  86. package/dist/plugins/remote-access-tailscale/services/tailscale-operation-coordinator.service.js +167 -0
  87. package/dist/plugins/remote-access-tailscale/services/tailscale-operation-coordinator.service.js.map +1 -0
  88. package/dist/plugins/remote-access-tailscale/services/tailscale-provider.service.d.ts +13 -1
  89. package/dist/plugins/remote-access-tailscale/services/tailscale-provider.service.js +8 -2
  90. package/dist/plugins/remote-access-tailscale/services/tailscale-provider.service.js.map +1 -1
  91. package/dist/plugins/remote-access-tailscale/services/tailscale-serve.service.d.ts +1 -1
  92. package/dist/plugins/remote-access-tailscale/services/tailscale-serve.service.js +7 -6
  93. package/dist/plugins/remote-access-tailscale/services/tailscale-serve.service.js.map +1 -1
  94. package/dist/plugins/remote-access-tailscale/services/tailscale-setup.service.d.ts +1 -3
  95. package/dist/plugins/remote-access-tailscale/services/tailscale-setup.service.js +9 -11
  96. package/dist/plugins/remote-access-tailscale/services/tailscale-setup.service.js.map +1 -1
  97. package/dist/plugins/remote-access-tailscale/utils/tailscale-control.utils.d.ts +5 -0
  98. package/dist/plugins/remote-access-tailscale/utils/tailscale-control.utils.js +36 -0
  99. package/dist/plugins/remote-access-tailscale/utils/tailscale-control.utils.js.map +1 -0
  100. package/dist/tsconfig.build.tsbuildinfo +1 -1
  101. package/package.json +2 -2
@@ -64,9 +64,10 @@ function extractJsonObjects(buffer) {
64
64
  }
65
65
  return { objects, rest: buffer.slice(consumedTo) };
66
66
  }
67
- class TailscaleLoginInProgressException extends Error {
67
+ class TailscaleLoginInProgressException extends remote_access_tailscale_exceptions_1.TailscaleOperationInProgressException {
68
68
  constructor(message) {
69
- super(message);
69
+ super();
70
+ this.message = message;
70
71
  this.name = 'TailscaleLoginInProgressException';
71
72
  }
72
73
  }
@@ -79,47 +80,75 @@ let TailscaleLoginService = class TailscaleLoginService {
79
80
  this.nestConfigService = nestConfigService;
80
81
  this.logger = (0, logger_1.createExtensionLogger)(remote_access_tailscale_constants_1.REMOTE_ACCESS_TAILSCALE_PLUGIN_NAME, 'TailscaleLoginService');
81
82
  this.pending = null;
83
+ this.interactiveRequest = null;
82
84
  this.keyedLoginInFlight = false;
83
85
  }
84
86
  async onModuleInit() {
85
87
  await this.cleanupStaleAuthKeyFiles();
86
88
  }
89
+ get operations() {
90
+ return this.nodeManagedService.getOperationCoordinator();
91
+ }
92
+ async onModuleDestroy() {
93
+ await this.nodeManagedService.stop();
94
+ }
87
95
  async login(authKey) {
88
- if (authKey) {
89
- if (this.keyedLoginInFlight) {
90
- throw new TailscaleLoginInProgressException('A Tailscale sign-in with an auth key is already in progress. Wait for it to finish before retrying.');
91
- }
92
- this.stopPendingLogin();
93
- return this.loginWithAuthKey(authKey);
96
+ if (!this.nodeManagedService.getControlState().enabled) {
97
+ throw new remote_access_tailscale_exceptions_1.TailscalePluginDisabledException();
94
98
  }
95
99
  if (this.keyedLoginInFlight) {
96
- throw new TailscaleLoginInProgressException('A Tailscale sign-in with an auth key is currently in progress. Wait for it to finish before starting an interactive sign-in.');
100
+ throw new TailscaleLoginInProgressException('A Tailscale auth-key sign-in is already in progress.');
101
+ }
102
+ if (!authKey && this.interactiveRequest !== null) {
103
+ return this.interactiveRequest;
104
+ }
105
+ if (authKey) {
106
+ this.keyedLoginInFlight = true;
107
+ try {
108
+ return await (this.interactiveRequest !== null
109
+ ? this.operations.interrupt('login', (token) => this.loginWithAuthKey(authKey, token))
110
+ : this.operations.run('login', (token) => this.loginWithAuthKey(authKey, token)));
111
+ }
112
+ finally {
113
+ this.keyedLoginInFlight = false;
114
+ }
97
115
  }
98
116
  return this.loginInteractively();
99
117
  }
100
118
  async logout() {
101
- await this.assertActionable();
102
- this.stopPendingLogin();
103
- try {
104
- await this.cli.logout();
105
- }
106
- catch (error) {
107
- if (error instanceof tailscale_cli_service_1.TailscaleCliError && error.kind === 'needs-login') {
108
- this.logger.debug('tailscale logout had nothing to sign out of', { kind: error.kind });
119
+ return this.operations.interrupt('logout', async (token) => {
120
+ await this.assertActionable();
121
+ this.operations.assertCurrent(token);
122
+ try {
123
+ await this.cli.logout();
109
124
  }
110
- else {
111
- throw error;
125
+ catch (error) {
126
+ if (!(error instanceof tailscale_cli_service_1.TailscaleCliError && error.kind === 'needs-login')) {
127
+ throw error;
128
+ }
112
129
  }
113
- }
114
- return this.currentStatus();
130
+ this.operations.assertCurrent(token);
131
+ this.nodeManagedService.clearAuthentication();
132
+ return this.currentStatus();
133
+ });
115
134
  }
116
135
  async resetPreferences() {
117
- await this.assertActionable();
118
- await this.cli.up(['--reset', ...this.buildManagedFlags()]);
119
- return this.currentStatus();
136
+ if (!this.nodeManagedService.getControlState().enabled) {
137
+ throw new remote_access_tailscale_exceptions_1.TailscalePluginDisabledException();
138
+ }
139
+ return this.operations.interrupt('preferences', async (token) => {
140
+ await this.assertActionable();
141
+ this.operations.assertCurrent(token);
142
+ await this.nodeManagedService.ensureSupervisorStartedForLogin();
143
+ this.operations.assertCurrent(token);
144
+ await this.cli.up(['--reset', ...this.buildManagedFlags()]);
145
+ this.operations.assertCurrent(token);
146
+ return this.currentStatus();
147
+ });
120
148
  }
121
149
  async assertActionable() {
122
150
  const requirements = await this.nodeManagedService.refreshRequirements('status-read');
151
+ this.operations.assertCurrent();
123
152
  for (const code of ACTIONABLE_REQUIREMENT_CODES) {
124
153
  const requirement = requirements.find((candidate) => candidate.code === code);
125
154
  if (requirement && !requirement.satisfied) {
@@ -128,146 +157,142 @@ let TailscaleLoginService = class TailscaleLoginService {
128
157
  }
129
158
  }
130
159
  getPendingInteractiveAuth() {
131
- if (!this.pending?.authUrl) {
132
- return null;
133
- }
134
- return { authUrl: this.pending.authUrl, qr: this.pending.qr };
160
+ return this.pending?.authUrl ? { authUrl: this.pending.authUrl, qr: this.pending.qr } : null;
135
161
  }
136
162
  stopPendingLogin() {
137
- if (!this.pending) {
138
- return;
139
- }
140
- const { child, timeoutHandle } = this.pending;
141
- clearTimeout(timeoutHandle);
142
- this.pending = null;
143
- child.kill('SIGTERM');
163
+ this.pending?.cancel();
164
+ }
165
+ async prepareLogin(token) {
166
+ await this.assertActionable();
167
+ this.operations.assertCurrent(token);
168
+ await this.nodeManagedService.ensureSupervisorStartedForLogin();
169
+ this.operations.assertCurrent(token);
144
170
  }
145
- async loginWithAuthKey(authKey) {
146
- this.keyedLoginInFlight = true;
171
+ async loginWithAuthKey(authKey, token) {
172
+ await this.prepareLogin(token);
173
+ const keyFilePath = await this.writeAuthKeyFile(authKey);
147
174
  try {
148
- await this.assertActionable();
149
- const keyFilePath = await this.writeAuthKeyFile(authKey);
175
+ this.operations.assertCurrent(token);
150
176
  try {
151
- await this.runUpToCompletion([`--auth-key=file:${keyFilePath}`, '--timeout=120s', ...this.buildManagedFlags()], remote_access_tailscale_constants_1.TAILSCALE_LOGIN_AUTH_KEY_TIMEOUT_MS);
152
- }
153
- catch (error) {
154
- this.logger.warn('Tailscale auth-key sign-in did not complete successfully', {
155
- message: error instanceof Error ? error.message : String(error),
156
- });
177
+ await this.runUpToCompletion([`--auth-key=file:${keyFilePath}`, '--timeout=120s', ...this.buildManagedFlags()], remote_access_tailscale_constants_1.TAILSCALE_LOGIN_AUTH_KEY_TIMEOUT_MS, token);
157
178
  }
158
- finally {
159
- await (0, promises_1.rm)(keyFilePath, { force: true }).catch(() => undefined);
179
+ catch {
180
+ this.operations.assertCurrent(token);
181
+ this.logger.warn('Tailscale auth-key sign-in did not complete successfully');
160
182
  }
183
+ this.operations.assertCurrent(token);
161
184
  return await this.currentStatus();
162
185
  }
163
186
  finally {
164
- this.keyedLoginInFlight = false;
187
+ await (0, promises_1.rm)(keyFilePath, { force: true }).catch(() => undefined);
165
188
  }
166
189
  }
167
- async loginInteractively() {
168
- if (this.pending) {
169
- return { state: 'pending-auth', authUrl: this.pending.authUrl, qr: this.pending.qr };
170
- }
171
- await this.assertActionable();
172
- if (this.pending) {
173
- return { state: 'pending-auth', authUrl: this.pending.authUrl, qr: this.pending.qr };
174
- }
175
- if (this.keyedLoginInFlight) {
176
- throw new TailscaleLoginInProgressException('A Tailscale sign-in with an auth key is currently in progress. Wait for it to finish before starting an interactive sign-in.');
177
- }
178
- const child = this.cli.spawnUp(['--json', '--timeout=10m', ...this.buildManagedFlags()]);
179
- child.stderr.resume();
180
- return new Promise((resolve, reject) => {
181
- let settled = false;
190
+ loginInteractively() {
191
+ let resolveResult;
192
+ let rejectResult;
193
+ const result = new Promise((resolve, reject) => {
194
+ resolveResult = resolve;
195
+ rejectResult = reject;
196
+ });
197
+ this.interactiveRequest = result;
198
+ void this.operations
199
+ .run('login', async (token) => {
200
+ await this.prepareLogin(token);
201
+ const child = this.cli.spawnUp(['--json', '--timeout=10m', ...this.buildManagedFlags()]);
202
+ const closed = this.operations.trackChild(child);
203
+ child.stderr.resume();
204
+ let buffer = '';
182
205
  let firstBlockSeen = false;
183
- const settleResolve = (result) => {
184
- if (settled) {
185
- return;
206
+ let cancelled = false;
207
+ const clear = () => {
208
+ clearTimeout(timer);
209
+ clearTimeout(firstTimer);
210
+ token.signal.removeEventListener('abort', cancel);
211
+ if (this.pending?.child === child) {
212
+ this.pending = null;
186
213
  }
187
- settled = true;
188
- clearTimeout(firstBlockTimeoutHandle);
189
- resolve(result);
190
- };
191
- const settleReject = (error) => {
192
- if (settled) {
193
- return;
214
+ if (this.interactiveRequest === result) {
215
+ this.interactiveRequest = null;
194
216
  }
195
- settled = true;
196
- clearTimeout(firstBlockTimeoutHandle);
197
- reject(error);
198
217
  };
199
- const fallbackToCurrentStatus = () => {
200
- this.currentStatus().then(settleResolve).catch(settleReject);
218
+ const cancel = () => {
219
+ cancelled = true;
220
+ clear();
221
+ rejectResult(new remote_access_tailscale_exceptions_1.TailscaleOperationCancelledException());
222
+ void this.operations.terminateChild(child).catch(() => undefined);
201
223
  };
202
- const timeoutHandle = setTimeout(() => {
203
- this.logger.warn('Tailscale interactive sign-in timed out after 10 minutes without completing');
204
- this.stopPendingLogin();
205
- settleReject(new Error('Tailscale sign-in timed out after 10 minutes.'));
224
+ token.signal.addEventListener('abort', cancel, { once: true });
225
+ this.pending = { child, result, cancel };
226
+ const timer = setTimeout(() => {
227
+ cancel();
206
228
  }, remote_access_tailscale_constants_1.TAILSCALE_LOGIN_INTERACTIVE_TIMEOUT_MS);
207
- timeoutHandle.unref?.();
208
- const firstBlockTimeoutHandle = setTimeout(() => {
209
- this.logger.debug('Tailscale interactive sign-in has not printed its first status block yet; resolving pending-auth without a URL, leaving the sign-in running');
210
- settleResolve({ state: 'pending-auth' });
229
+ timer.unref?.();
230
+ const firstTimer = setTimeout(() => {
231
+ resolveResult({ state: 'pending-auth' });
211
232
  }, remote_access_tailscale_constants_1.TAILSCALE_LOGIN_FIRST_BLOCK_TIMEOUT_MS);
212
- firstBlockTimeoutHandle.unref?.();
213
- this.pending = { child, buffer: '', timeoutHandle };
233
+ firstTimer.unref?.();
214
234
  child.stdout.on('data', (chunk) => {
215
- if (this.pending?.child !== child) {
235
+ if (this.pending?.child !== child || token.signal.aborted) {
216
236
  return;
217
237
  }
218
- this.pending.buffer += chunk.toString('utf8');
219
- const { objects, rest } = extractJsonObjects(this.pending.buffer);
220
- this.pending.buffer = rest;
238
+ buffer += chunk.toString('utf8');
239
+ const { objects, rest } = extractJsonObjects(buffer);
240
+ buffer = rest;
221
241
  for (const raw of objects) {
222
- let parsed;
242
+ let block;
223
243
  try {
224
- parsed = JSON.parse(raw);
244
+ block = JSON.parse(raw);
225
245
  }
226
246
  catch {
227
247
  continue;
228
248
  }
229
- if (!firstBlockSeen) {
249
+ if (!firstBlockSeen && block.AuthURL) {
230
250
  firstBlockSeen = true;
231
- clearTimeout(firstBlockTimeoutHandle);
232
- if (parsed.AuthURL) {
233
- if (this.pending) {
234
- this.pending.authUrl = parsed.AuthURL;
235
- this.pending.qr = parsed.QR;
236
- }
237
- settleResolve({ state: 'pending-auth', authUrl: parsed.AuthURL, qr: parsed.QR });
238
- }
239
- else if (parsed.Error) {
240
- this.stopPendingLogin();
241
- settleReject(new Error(parsed.Error));
242
- }
243
- else {
244
- this.stopPendingLogin();
245
- fallbackToCurrentStatus();
251
+ clearTimeout(firstTimer);
252
+ if (this.pending?.child === child) {
253
+ this.pending.authUrl = block.AuthURL;
254
+ this.pending.qr = block.QR;
246
255
  }
256
+ resolveResult({ state: 'pending-auth', authUrl: block.AuthURL, qr: block.QR });
247
257
  }
248
258
  else {
249
- this.stopPendingLogin();
259
+ clear();
260
+ if (block.Error) {
261
+ cancelled = true;
262
+ rejectResult(new Error(block.Error.replace(/https?:\/\/\S+/gi, '[redacted URL]')));
263
+ }
264
+ void this.operations.terminateChild(child).catch(rejectResult);
250
265
  }
251
266
  }
252
267
  });
253
- child.once('error', (error) => {
254
- if (this.pending?.child === child) {
255
- this.stopPendingLogin();
256
- }
257
- settleReject(error instanceof Error ? error : new Error(String(error)));
268
+ child.once('error', () => {
269
+ cancelled = true;
270
+ clear();
271
+ rejectResult(new Error('The Tailscale sign-in command failed to start.'));
258
272
  });
259
- child.once('close', () => {
260
- if (this.pending?.child === child) {
261
- this.stopPendingLogin();
262
- }
263
- if (!settled) {
264
- fallbackToCurrentStatus();
273
+ try {
274
+ await closed;
275
+ this.operations.assertCurrent(token);
276
+ if (!cancelled) {
277
+ resolveResult(await this.currentStatus());
265
278
  }
266
- });
279
+ }
280
+ finally {
281
+ clear();
282
+ }
283
+ })
284
+ .catch(rejectResult)
285
+ .finally(() => {
286
+ if (this.interactiveRequest === result) {
287
+ this.interactiveRequest = null;
288
+ }
267
289
  });
290
+ return result;
268
291
  }
269
292
  async currentStatus() {
293
+ this.operations.assertCurrent();
270
294
  const status = await this.nodeManagedService.computeStatus();
295
+ this.operations.assertCurrent();
271
296
  return { state: status.state };
272
297
  }
273
298
  buildManagedFlags() {
@@ -320,43 +345,42 @@ let TailscaleLoginService = class TailscaleLoginService {
320
345
  }
321
346
  return filePath;
322
347
  }
323
- runUpToCompletion(args, timeoutMs) {
324
- return new Promise((resolve, reject) => {
325
- const child = this.cli.spawnUp(args);
326
- child.stdout.resume();
327
- child.stderr.resume();
328
- let settled = false;
329
- const timer = setTimeout(() => {
330
- if (settled) {
331
- return;
332
- }
333
- settled = true;
334
- child.kill('SIGTERM');
335
- reject(new Error(`tailscale up did not complete within ${timeoutMs}ms.`));
348
+ async runUpToCompletion(args, timeoutMs, token) {
349
+ this.operations.assertCurrent(token);
350
+ const child = this.cli.spawnUp(args);
351
+ const closed = this.operations.trackChild(child);
352
+ child.stdout.resume();
353
+ child.stderr.resume();
354
+ let timeout;
355
+ let onAbort;
356
+ const outcome = new Promise((resolve, reject) => {
357
+ onAbort = () => reject(new remote_access_tailscale_exceptions_1.TailscaleOperationCancelledException());
358
+ token.signal.addEventListener('abort', onAbort, { once: true });
359
+ timeout = setTimeout(() => {
360
+ void this.operations
361
+ .terminateChild(child)
362
+ .then(() => reject(new Error('Tailscale sign-in timed out.')), reject);
336
363
  }, timeoutMs);
337
- timer.unref?.();
338
- child.once('error', (error) => {
339
- if (settled) {
340
- return;
341
- }
342
- settled = true;
343
- clearTimeout(timer);
344
- reject(error instanceof Error ? error : new Error(String(error)));
345
- });
364
+ timeout.unref?.();
365
+ child.once('error', () => reject(new Error('The Tailscale sign-in command failed to start.')));
346
366
  child.once('close', (code) => {
347
- if (settled) {
348
- return;
349
- }
350
- settled = true;
351
- clearTimeout(timer);
352
367
  if (code === 0) {
353
368
  resolve();
354
369
  }
355
370
  else {
356
- reject(new Error(`tailscale up exited with code ${code ?? 'null'}.`));
371
+ reject(new Error('The Tailscale sign-in command failed.'));
357
372
  }
358
373
  });
359
374
  });
375
+ try {
376
+ await outcome;
377
+ }
378
+ finally {
379
+ clearTimeout(timeout);
380
+ token.signal.removeEventListener('abort', onAbort);
381
+ await this.operations.terminateChild(child);
382
+ await closed;
383
+ }
360
384
  }
361
385
  };
362
386
  exports.TailscaleLoginService = TailscaleLoginService;
@@ -1 +1 @@
1
- {"version":3,"file":"tailscale-login.service.js","sourceRoot":"","sources":["../../../../src/plugins/remote-access-tailscale/services/tailscale-login.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tailscale-login.service.js","sourceRoot":"","sources":["../../../../src/plugins/remote-access-tailscale/services/tailscale-login.service.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,27 @@
1
+ import { OnModuleDestroy } from '@nestjs/common';
1
2
  import { ConfigService as NestConfigService } from '@nestjs/config';
2
3
  import { EventEmitter2 } from '@nestjs/event-emitter';
3
4
  import { ConfigService } from '../../../modules/config/services/config.service';
4
5
  import { BaseManagedExtensionService } from '../../../modules/extensions/services/base-managed-extension.service';
5
- import { ConfigChangeResult } from '../../../modules/extensions/services/managed-extension-service.interface';
6
+ import { ConfigChangeResult, ServiceState } from '../../../modules/extensions/services/managed-extension-service.interface';
6
7
  import { PlatformService } from '../../../modules/platform/services/platform.service';
7
8
  import { RemoteAccessProviderStatus } from '../../../modules/remote-access/platforms/remote-access-provider.platform';
8
9
  import { RemoteAccessTailscalePluginConfigModel } from '../models/config.model';
9
- import { TailscaleCliService } from './tailscale-cli.service';
10
+ import { TailscaleCliService, TailscaleStatus } from './tailscale-cli.service';
11
+ import { TailscaleOperation, TailscaleOperationCoordinatorService } from './tailscale-operation-coordinator.service';
10
12
  import { TailscaleServeService } from './tailscale-serve.service';
11
13
  import { TailscaleStatusMapperService } from './tailscale-status-mapper.service';
14
+ export type TailscaleAuthentication = 'unknown' | 'required' | 'authenticated';
15
+ export interface TailscaleControlState {
16
+ enabled: boolean;
17
+ serviceState: ServiceState;
18
+ authentication: TailscaleAuthentication;
19
+ operation: TailscaleOperation | null;
20
+ }
21
+ export interface TailscaleObservationMetadata {
22
+ requirements: TailscaleRequirement[];
23
+ control: TailscaleControlState;
24
+ }
12
25
  export type TailscaleRequirementCode = 'platform-supported' | 'binary-installed' | 'daemon-active' | 'operator-granted' | 'version-supported';
13
26
  export interface TailscaleRequirementRemedy {
14
27
  commands: string[];
@@ -22,7 +35,7 @@ export interface TailscaleRequirement {
22
35
  }
23
36
  export type TailscaleRequirementRefreshReason = 'start' | 'permission-denied' | 'setup-complete' | 'status-read' | 'periodic';
24
37
  export declare function compareTailscaleVersions(a: string, b: string): number;
25
- export declare class TailscaleNodeManagedService extends BaseManagedExtensionService {
38
+ export declare class TailscaleNodeManagedService extends BaseManagedExtensionService implements OnModuleDestroy {
26
39
  private readonly cli;
27
40
  private readonly mapper;
28
41
  private readonly configService;
@@ -30,6 +43,7 @@ export declare class TailscaleNodeManagedService extends BaseManagedExtensionSer
30
43
  private readonly platformService;
31
44
  private readonly eventEmitter;
32
45
  private readonly serveService;
46
+ private readonly operations;
33
47
  private readonly logger;
34
48
  readonly owner: {
35
49
  readonly kind: "plugin";
@@ -37,30 +51,47 @@ export declare class TailscaleNodeManagedService extends BaseManagedExtensionSer
37
51
  };
38
52
  readonly serviceId = "node";
39
53
  readonly activationPolicy: "owner-enabled";
54
+ private readonly observations;
55
+ private readonly requirementObservations;
56
+ private authentication;
57
+ private identity;
58
+ private connectPromise;
59
+ private stopPromise;
40
60
  private pollTimer;
41
61
  private lastStatus;
42
62
  private lastError;
43
63
  private pluginConfig;
44
64
  private requirementsCache;
45
- private requirementsRefreshedAt;
46
65
  private lastServeConvergeDenied;
47
66
  private reconnectAttempts;
48
67
  private nextReconnectAttemptAt;
49
- constructor(cli: TailscaleCliService, mapper: TailscaleStatusMapperService, configService: ConfigService, nestConfigService: NestConfigService, platformService: PlatformService, eventEmitter: EventEmitter2, serveService: TailscaleServeService);
68
+ constructor(cli: TailscaleCliService, mapper: TailscaleStatusMapperService, configService: ConfigService, nestConfigService: NestConfigService, platformService: PlatformService, eventEmitter: EventEmitter2, serveService: TailscaleServeService, operations?: TailscaleOperationCoordinatorService);
69
+ getOperationCoordinator(): TailscaleOperationCoordinatorService;
70
+ getControlState(): TailscaleControlState;
71
+ private isPluginEnabled;
72
+ clearAuthentication(): void;
73
+ observeAuthentication(status: TailscaleStatus): void;
74
+ onModuleDestroy(): Promise<void>;
75
+ ensureSupervisorStartedForLogin(): Promise<void>;
76
+ private assertRequirements;
77
+ connect(): Promise<void>;
50
78
  start(): Promise<void>;
79
+ private startNode;
51
80
  stop(): Promise<void>;
52
81
  private isStopFailureTolerated;
53
82
  private getStatusOrNullWithin;
54
83
  private emitStatus;
55
84
  onConfigChanged(): Promise<ConfigChangeResult>;
85
+ private applyConfigChange;
56
86
  isHealthy(): Promise<boolean>;
57
87
  factoryReset(): Promise<{
58
88
  success: boolean;
59
89
  reason?: string;
60
90
  }>;
61
91
  evaluateRequirements(): Promise<TailscaleRequirement[]>;
92
+ reconcileSetup(generation: number): Promise<void>;
62
93
  getRequirements(): TailscaleRequirement[];
63
- refreshRequirements(reason: TailscaleRequirementRefreshReason): Promise<TailscaleRequirement[]>;
94
+ refreshRequirements(reason: TailscaleRequirementRefreshReason, signal?: AbortSignal): Promise<TailscaleRequirement[]>;
64
95
  private requirementsSatisfied;
65
96
  private evaluateRequirementsLive;
66
97
  private unevaluatedRequirement;
@@ -69,8 +100,21 @@ export declare class TailscaleNodeManagedService extends BaseManagedExtensionSer
69
100
  private buildRemedy;
70
101
  private buildInstallRemedy;
71
102
  private runSetupScriptPrintPlan;
72
- computeStatus(requirementsReason?: TailscaleRequirementRefreshReason): Promise<RemoteAccessProviderStatus>;
103
+ computeStatus(_requirementsReason?: TailscaleRequirementRefreshReason, options?: {
104
+ signal?: AbortSignal;
105
+ fresh?: boolean;
106
+ }): Promise<RemoteAccessProviderStatus>;
107
+ awaitObservationIdle(): Promise<void>;
108
+ getStatusSnapshot(options?: {
109
+ signal?: AbortSignal;
110
+ fresh?: boolean;
111
+ }): Promise<{
112
+ status: RemoteAccessProviderStatus;
113
+ metadata: TailscaleObservationMetadata;
114
+ }>;
73
115
  private computeStatusWithRawStatus;
116
+ private supersededObservation;
117
+ private collectStatusWithRawStatus;
74
118
  private convergeServe;
75
119
  private evaluatePlatformSupported;
76
120
  private evaluateBinaryAndVersion;